Outils pour utilisateurs

Outils du site


core:picore

piCore sur Raspberry Pi

  • Créer un lecteur de musique UPnP OpenHome.
  • La carte Raspberry Pi utilisée est un ancien Modèle B Rev. 1

Installation

  • Prendre le fichier piCore-7.0.zip et la mettre sur une carte SD. Sur une machine Linux :
    wget http://tinycorelinux.net/7.x/armv6/releases/RPi/piCore-7.0.zip
    unzip piCore-7.0.zip
    sudo dd bs=4M if=piCore-7.0.img of=/dev/sdb
    sudo sync
  • Booter avec une connexion ethernet et se connecter via ssh avec login/passwd tc/piCore. Suivre la section “SD card partitioning” de http://tinycorelinux.net/7.x/armv6/releases/RPi/README
  • Swap : Ensuite créer (en utilisant gparted par exemple sur une machine Linux) une grosse partition swap (~1.5GB). Elle sera reconnue et utilisée automatiquement par piCore au boot. C'est nécessaire pour la compilation de programmes.
    • Je ne peux pas désactiver le swap compressé dans RAM par nozswap. Cause ? peut-être la carte Raspberry Pi est trop ancienne, c'est le modèle B rev.1

Extensions

WiFi

  • Clé usb Edimax EW-7811UN Nano Adaptateur clé USB sans fil 150 Mbps.
    tce-load -wi wifi.tcz firmware-rtlwifi.tcz
    sudo /usr/local/bin/wifi.sh    [configurer le wifi]
    sudo vi /opt/bootlocal.sh    [ajouter une ligne: /usr/local/bin/wifi.sh -a -w 2>&1 > /tmp/wifi.log]
    filetool.sh -b
  • :!: wifi.sh enregistre l'info dans le fichier /home/tc/wifi.db qui sera utilisé automatiquement au boot pour la connexion wifi. Il ne faut pas le supprimer !

ALSA

  • tce-load -wi alsa.tcz
    sudo alsamixer
    sudo alsactl store
    sudo echo "var/lib/alsa" >> /opt/.filetool.lst
    [créer le fichier /etc/asound.conf]
    sudo echo "etc/asound.conf" >> /opt/.filetool.lst
    sudo vi /opt/bootlocal.sh    [ajouter une ligne: alsactl restore]
    filetool.sh -b
  • :!: Je n'utilise pas la carte son interne de RaspberryPi, donc je n'ai pas besoin de alsa-config.tcz. Je configure directement ma carte son usb dans le fichier /etc/asound.conf :
    pcm.!default {
            type hw
            card 0
    }
    
    ctl.!default {
            type hw
            card 0
    }

MPD

  • tce-load -wi mpd
    [créer le fichier /usr/local/etc/mpd.conf]
    ## tester ##
    sudo mpd /usr/local/etc/mpd.conf
    ############
    sudo echo "usr/local/etc/mpd.conf" >> /opt/.filetool.lst
    sudo vi /opt/bootlocal.sh    [ajouter une ligne: mpd /usr/local/etc/mpd.conf]
    filetool.sh -b
  • Le fichier de config /usr/local/etc/mpd.conf :
    audio_output {
            type "alsa"
            name "FX Audio D802"
            device "plughw:0,0"
    }
    • :!: J'utilise seulement MPD comme un audio player pour Upmpdcli, pas besoin de configurer la base mpd, …
  • MPD Minimaliste : Voir MPD minimaliste. Recompiler MPD pour avoir moins de dépendances.
    cd /mnt/mmcblk0p2/compile
    wget http://www.musicpd.org/download/mpd/0.19/mpd-0.19.14.tar.xz
    tar Jxvf mpd-0.19.14.tar.xz
    cd mpd-0.19.14
    tce-load -i squashfs-tools.tcz compile-essentials.tcz binutils-dev.tcz pkg-config.tcz
    tce-load -i glib2-dev boost-dev.tcz alsa-dev.tcz audiofile-dev.tcz libmpdclient-dev.tcz libmad-dev.tcz curl-dev.tcz faad2-dev.tcz mpg123-dev.tcz libsndfile-dev.tcz icu-dev.tcz sqlite3-dev.tcz lame-dev.tcz expat2-dev.tcz libid3tag-dev.tcz tcp_wrappers-dev.tcz
    export CFLAGS="-Os -pipe"
    export CXXFLAGS="-Os -pipe -fno-exceptions -fno-rtti"
    export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:/usr/lib/pkgconfig
    ../mpd_build_configure    [voici le fichier :]
    ################ ../mpd_build_configure #######################
    ./configure \                                     
                    --prefix=/usr/local \
                    --enable-libmpdclient \                  
                    --disable-adplug \
                    --disable-ao \
                    --disable-bzip2 \                      
                    --disable-dsd \
                    --disable-ffmpeg \ 
                    --disable-fluidsynth \   
                    --disable-gme \          
                    --disable-ipv6 \         
                    --disable-jack \       
                    --disable-mikmod \        
                    --disable-mms \       
                    --disable-modplug \       
                    --disable-mpc \       
                    --disable-nfs \        
                    --disable-openal \      
                    --disable-opus \          
                    --disable-oss \  
                    --disable-pipe-output \  
                    --disable-pulse \  
                    --disable-recorder-output \  
                    --disable-roar \  
                    --disable-shine-encoder \   
                    --disable-shout \    
                    --disable-sidplay \  
                    --disable-smbclient \
                    --disable-soundcloud \    
                    --disable-soxr \  
                    --disable-twolame-encoder \      
                    --disable-upnp \      
                    --disable-wavpack \      
                    --disable-wave-encoder \         
                    --disable-wildmidi \    
                    --disable-zzip \     
                    --with-zeroconf=no
    #############################################################################
    make
    mkdir /tmp/ext
    sudo make DESTDIR=/tmp/ext install-strip
    cd /tmp
    mkdir -p /tmp/ext-doc/usr/local
    sudo mv /tmp/ext/usr/local/share /tmp/ext-doc/usr/local/
    mksquashfs ext mpd-perso.tcz
    mksquashfs ext-doc mpd-perso-doc.tcz
    mv mpd-perso.tcz mpd-perso-doc.tcz /mnt/mmcblk0p2/tce/optional/
    tce-load -i mpd-perso.tcz
    #### Créer un fichier contenant les dépendances ###########
    #### /mnt/mmcblk0p2/tce/optional/mpd-perso.tcz.dep ####
    glib2.tcz
    audiofile.tcz
    libmpdclient.tcz
    libmad.tcz
    curl.tcz
    faad2.tcz
    mpg123.tcz
    icu.tcz
    libsndfile.tcz
    sqlite3.tcz
    libid3tag.tcz
    lame.tcz
    expat2.tcz
    tcp_wrappers.tcz
    ###########################################
    
    vi /mnt/mmcblk0p2/tce/onboot.lst    [remplacer la ligne mpd.tcz par mpd-perso.tcz]
    sudo reboot

Upmpdcli

  • Préparation pour compiler Upmpdcli :
    tce-load -wi squashfs-tools.tcz compile-essentials.tcz binutils-dev.tcz pkg-config.tcz    [compilation générale]
    tce-load -wi curl-dev.tcz expat2-dev.tcz libmpdclient-dev.tcz    [pour upmpdcli]
    • :!: relancer avec seulement l'option '-i' pour les packages déjà téléchargés.
  • Compiler/Installer :
    # Créer un dossier persistant de compilation :
    sudo mkdir /mnt/mmcblk0p2/compile
    sudo chown tc:staff compile
    cd /mnt/mmcblk0p2/compile
    
    # Dossier temporaire pour la création de packages :
    mkdir /tmp/ext
    
    ##### Télécharger les sources ####
    wget http://www.lesbonscomptes.com/upmpdcli/downloads/libupnp-1.6.19.jfd3.tar.gz
    wget http://www.lesbonscomptes.com/upmpdcli/downloads/libupnpp-0.14.1.tar.gz
    wget http://www.lesbonscomptes.com/upmpdcli/downloads/upmpdcli-1.1.2.tar.gz
    tar zxvf libupnp-1.6.19.jfd3.tar.gz
    tar zxvf libupnpp-0.14.1.tar.gz
    tar zxvf upmpdcli-1.1.2.tar.gz
    #######################################
    
    #### Export variables pour compilation ####
    export CFLAGS="-Os -pipe"                                         
    export CXXFLAGS="-Os -pipe"    ["-fno-exceptions -fno-rtti" ne passe pas pour upmpdcli]          
    export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:/usr/lib/pkgconfig
    ########################################################################
    
    #### libupnp ####
    # compiler libupnp
    cd /mnt/mmcblk0p2/compile/libupnp-1.6.19.jfd3
    ./configure --prefix=/usr/local
    make
    # Ensuite installer dans /tmp/ext :
    sudo make DESTDIR=/tmp/ext install-strip
    cd /tmp    [#### examiner les fichiers dans /tem/ext ####]
    # Séparer les fichiers pour réduire la taille du package principal :
    mkdir -p /tmp/ext-dev/usr/local/lib
    sudo mv /tmp/ext/usr/local/include /tmp/ext-dev/usr/local/
    sudo mv /tmp/ext/usr/local/lib/*.a /tmp/ext-dev/usr/local/lib/
    sudo mv /tmp/ext/usr/local/lib/*.la /tmp/ext-dev/usr/local/lib/
    sudo mv /tmp/ext/usr/local/lib/pkgconfig /tmp/ext-dev/usr/local/lib/
    # Créer les deux packages :
    mksquashfs ext libupnp.tcz
    mksquashfs ext-dev libupnp-dev.tcz
    # Mettre les deux packages au bon endroit, et les charger avant de commencer la compilation suivante :
    mv libupnp.tcz libupnp-dev.tcz /mnt/mmcblk0p2/tce/optional/
    tce-load -i libupnp.tcz libupnp-dev.tcz
    sudo rm -rf /tmp/ext/*
    sudo rm -rf /tmp/ext-dev
    #################################
    
    #### libupnpp ####
    cd /mnt/mmcblk0p2/compile/libupnpp-0.14.1
    ./configure --prefix=/usr/local
    make
    sudo make DESTDIR=/tmp/ext install-strip
    cd /tmp
    mkdir -p /tmp/ext-dev/usr/local/lib
    sudo mv /tmp/ext/usr/local/include /tmp/ext-dev/usr/local/
    sudo mv /tmp/ext/usr/local/lib/*.la /tmp/ext-dev/usr/local/lib/
    mksquashfs ext libupnpp.tcz
    mksquashfs ext-dev libupnpp-dev.tcz
    mv libupnpp.tcz libupnpp-dev.tcz /mnt/mmcblk0p2/tce/optional/
    tce-load -i libupnpp.tcz libupnpp-dev.tcz
    sudo rm -rf /tmp/ext/*
    sudo rm -rf /tmp/ext-dev
    ##############################
    
    #### upmpdcli ####
    cd /mnt/mmcblk0p2/compile/upmpdcli-1.1.2
    ./configure --prefix=/usr/local --sysconfdir=/usr/local/etc
    make
    sudo make DESTDIR=/tmp/ext install-strip
    cd /tmp
    mksquashfs ext upmpdcli.tcz
    mv upmpdcli.tcz /mnt/mmcblk0p2/tce/optional/
    tce-load -i upmpdcli.tcz
    #############################
    
    #### tester ####
    upmpdcli -D -c /usr/local/etc/upmpdcli.conf
    ############################################
    
    #### Créer le fichier de dépendances ###########
    #### /mnt/mmcblk0p2/tce/optional/upmpdcli.tcz.dep ####
    libupnp.tcz
    libupnpp.tcz
    ################################################
    • :!: Bien lire le wiki sur les packages *-dev.tcz et sur install-strip.
  • Configurer :
    vi /mnt/mmcblk0p2/tce/onboot.lst    [ajouter upmpdcli.tcz]
    cp /usr/local/etc/upmpdcli.conf /home/tc/
    vi /home/tc/upmpdcli.conf    [changer "friendlyname = " et "ohproductroom =", ajouter/modifier la liste des radios, ...]
    sudo vi /opt/bootlocal.sh    [ajouter une ligne: su tc -c "upmpdcli -D -c /home/tc/upmpdcli.conf"]
    filetool.sh -b
    sudo reboot

Shairport Sync (AirPlay)

  • On peut installer et utiliser le package Shairport directement. Mais ce dernier est obsolète.
  • Note : Utiliser tinysvcmdn au lieu de avahi pour réduire les dépendances. Mais il fonctionne moins bien que avahi.
  • tce-load -i squashfs-tools.tcz compile-essentials.tcz binutils-dev.tcz pkg-config.tcz
    tce-load -wi alsa-dev.tcz openssl-dev.tcz libdaemon-dev.tcz popt-dev.tcz
    [éventuellement d'autres packages ..., relancer avec seulement l'option '-i' pour les packages déjà téléchargés]
    mkdir /tmp/ext
    
    export CFLAGS="-Os -pipe"                                         
    export CXXFLAGS="-Os -pipe"
    export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:/usr/lib/pkgconfig
    
    # D'abord libconfig :
    cd /mnt/mmcblk0p2/compile/
    wget http://www.hyperrealm.com/libconfig/libconfig-1.5.tar.gz
    tar zxvf libconfig-1.5.tar.gz
    cd libconfig-1.5
    ./configure --prefix=/usr/local
    make
    sudo make DESTDIR=/tmp/ext install-strip
    cd /tmp    [#### examiner les fichiers dans /tem/ext ####]
    mkdir -p /tmp/ext-dev/usr/local/lib
    sudo mv /tmp/ext/usr/local/include /tmp/ext-dev/usr/local/
    sudo mv /tmp/ext/usr/local/share /tmp/ext-dev/usr/local/
    sudo mv /tmp/ext/usr/local/lib/*.a /tmp/ext-dev/usr/local/lib/
    sudo mv /tmp/ext/usr/local/lib/*.la /tmp/ext-dev/usr/local/lib/
    sudo mv /tmp/ext/usr/local/lib/pkgconfig /tmp/ext-dev/usr/local/lib/
    mksquashfs ext libconfig.tcz
    mksquashfs ext-dev libconfig-dev.tcz
    mv libconfig.tcz libconfig-dev.tcz /mnt/mmcblk0p2/tce/optional/
    tce-load -i libconfig.tcz libconfig-dev.tcz
    sudo rm -rf /tmp/ext/*
    sudo rm -rf /tmp/ext-dev
    
    # Maintenant shairport-sync
    cd /mnt/mmcblk0p2/compile/
    git clone https://github.com/mikebrady/shairport-sync.git
    cd shairport-sync
    autoreconf -i -f
    ./configure --prefix=/usr/local --with-alsa --with-tinysvcmdns --with-ssl=openssl
    make
    sudo make DESTDIR=/tmp/ext install-strip
    cd /tmp
    mksquashfs ext shairport-sync.tcz
    mv shairport-sync.tcz /mnt/mmcblk0p2/tce/optional/
    tce-load -i shairport-sync.tcz
    
    #### tester ####
    shairport-sync
    ############################################
    
    #### Créer le fichier de dépendances ########################
    #### /mnt/mmcblk0p2/tce/optional/shairport-sync.tcz.dep ####
    popt.tcz
    libdaemon.tcz
    libconfig.tcz
    #############################################################
    
    vi /mnt/mmcblk0p2/tce/onboot.lst    [ajouter shairport-sync.tcz]
    cp /etc/shairport-sync.conf /home/tc/shairport-sync.conf
    sudo vi /opt/bootlocal.sh    [ajouter une ligne: shairport-sync -c /home/tc/shairport-sync.conf &]
    filetool.sh -b
    sudo reboot

ohPlayer (OpenHome Player)

  • C'est une alternative à Upmpdcli/MPD
  • Suivre https://github.com/openhome/ohPlayer (voir aussi http://openhome.org/pages/develop/source.html)
    tce-load -i squashfs-tools.tcz compile-essentials.tcz binutils-dev.tcz pkg-config.tcz git.tcz
    git clone https://github.com/openhome/ohdevtools.git
    git clone https://github.com/openhome/ohPlayer.git
    cd ohPlayer/
    ##############################################################################
    # Editer le fichier ../ohdevtools/default_platform.py pour ajouter 'armv6l'.
    # pour supporter ma vielle carte Raspberryp Pi Modèle B Rev 1.
    #
    $ diff -Nu default_platform.py.orig defa
    ult_platform.py
    --- default_platform.py.orig
    +++ default_platform.py
    @@ -6,7 +6,7 @@
         if platform.system() == 'Linux' and platform.architecture()[0] == '32bit' and platform.machine()[0:3] == 'ppc':
             return 'Linux-ppc32'
         if platform.system() == 'Linux' and platform.architecture()[0] == '32bit':
    -        if platform.machine() == 'armv7l':
    +        if platform.machine() == 'armv7l' or 'armv6l':
                 return 'Linux-armhf'
             else:
                 return 'Linux-x86'
    ############################################################
    ./go fetch --all
    tce-load -i alsa-dev.tcz
    tce-load -wi glib2-dev.tcz
    cd linux
    # éditer le fichier OptionalFeatures.h pour activer le support mp3 aac 
    # éditer le fichier Makefile.raspbian pour utiliser PREFIX = /usr/local
    make raspbian DISABLE_GTK=y
    sudo make raspbian-install
    openhome-player
    ################################
    # Ça ne marche pas !
    $ openhome-player 
    terminate called after throwing an instance of 'OpenHome::StoreKeyNotFound'
    Aborted
    ########################

Nettoyage final

  • Lorsque tout marche bien, on optimise l'utilisation de RAM. Pour ne charger que le nécessaire au boot, supprimer tous les fichiers non nécessaires dans /home/ et /opt/. Enlever les packages non nécessaires dans /mnt/mmcblk0p2/tce/onboot.lst. Et reboot !
    • Mon fichier /mnt/mmcblk0p2/tce/onboot.lst
      openssh.tcz
      
      firmware-rtlwifi.tcz
      wifi.tcz
      
      alsa.tcz
      
      mpd-perso.tcz
      upmpdcli.tcz
      
      shairport-sync.tcz

Divers

  • Désactiver/Supprimer un package : Pour ne pas le charger au boot, il suffit de l'enlever dans /mnt/mmcblk0p2/tce/onboot.lst et reboot. Ensuite si on veut le supprimer complètement, il suffit de le supprimer dans /mnt/mmcblk0p2/tce/optional.
  • Manipuler les packages *.tcz :
    tce-load -i squashfs-tools.tcz
    # Lister les fichier :
    unsquashfs -l /mnt/mmcblk0p2/tce/optional/nom_package.tcz
    # Extraire un package :
    unsquashfs -f -d /chemin_vers_dossier-destination nom_package.tcz
  • Info système :
    • RAM usage (avec mon mpd-perso.tcz) : Par rapport à mpd.tcz original, on réduit ~80Mo de RAM usage.
      tc@rpi:~$ free -m
                   total       used       free     shared    buffers     cached
      Mem:           180         99         80          9         11         44
      -/+ buffers/cache:         43        137
      Swap:         1637          0       1637
    • Sortie de la commande top lors d'une lecture d'un fichier flac 24bbit/96kHz
      Mem: 108964K used, 76320K free, 10004K shrd, 12156K buff, 45924K cached
      CPU:  9.7% usr  3.0% sys  0.0% nic 84.4% idle  0.0% io  0.0% irq  2.8% sirq
      Load average: 0.00 0.08 0.12 1/119 1165
        PID  PPID USER     STAT   VSZ %VSZ CPU %CPU COMMAND
       1036     1 root     S    81080 43.5   0 12.4 mpd /usr/local/etc/mpd.conf
       1043     1 tc       S    85128 45.7   0  0.8 upmpdcli -D -c /home/tc/upmpdcli.conf
       1165  1134 tc       R     3164  1.7   0  0.8 top
       1131   872 root     S     4840  2.6   0  0.4 sshd: tc@pts/0
       1128     2 root     SW       0  0.0   0  0.4 [kworker/0:1]
        952     2 root     SW       0  0.0   0  0.2 [RTW_CMD_THREAD]
          7     2 root     SW       0  0.0   0  0.2 [rcu_preempt]
         21     2 root     SW       0  0.0   0  0.2 [kworker/u2:1]
       1044     1 root     S    15016  8.0   0  0.0 shairport-sync -c /home/tc/shairport-sync.conf
        978     1 root     S     5368  2.8   0  0.0 wpa_supplicant -i wlan0 -c /etc/wpa_supplicant.conf -B -D wext
        872     1 root     S     4840  2.6   0  0.0 /usr/local/sbin/sshd
        826     1 tc       S     3164  1.7   0  0.0 -sh
       1134  1131 tc       S     3164  1.7   0  0.0 -sh
        832   827 root     S     3036  1.6   0  0.0 /sbin/getty -L ttyAMA0 115200 vt100
          1     0 root     S     3032  1.6   0  0.0 init
       1035     1 root     S     3032  1.6   0  0.0 /sbin/udhcpc -b -i eth0 -x hostname rpi -p /var/run/udhcpc.eth0.pid
        827     1 root     S     3032  1.6   0  0.0 {startserialtty} /bin/sh /usr/sbin/startserialtty
       1021     1 root     S     3032  1.6   0  0.0 udhcpc -i wlan0 -x hostname rpi
         90     1 root     S     2048  1.1   0  0.0 /sbin/udevd --daemon
        727    90 root     S     2044  1.1   0  0.0 /sbin/udevd --daemon
        728    90 root     S     2044  1.1   0  0.0 /sbin/udevd --daemon
        987     2 root     SW       0  0.0   0  0.0 [kworker/0:3]
          3     2 root     SW       0  0.0   0  0.0 [ksoftirqd/0]
       1116     2 root     SW       0  0.0   0  0.0 [kworker/0:0]
         45     2 root     SW       0  0.0   0  0.0 [mmcqd/0]
        633     2 root     SW<      0  0.0   0  0.0 [kworker/u3:11]
          2     0 root     SW       0  0.0   0  0.0 [kthreadd]
         11     2 root     SW       0  0.0   0  0.0 [kdevtmpfs]
         25     2 root     SW       0  0.0   0  0.0 [fsnotify_mark]
        628     2 root     SW<      0  0.0   0  0.0 [kworker/u3:6]
          5     2 root     SW<      0  0.0   0  0.0 [kworker/0:0H]
          8     2 root     SW       0  0.0   0  0.0 [rcu_sched]
          9     2 root     SW       0  0.0   0  0.0 [rcu_bh]
         10     2 root     SW<      0  0.0   0  0.0 [khelper]
         12     2 root     SW<      0  0.0   0  0.0 [netns]
         13     2 root     SW<      0  0.0   0  0.0 [perf]
         14     2 root     SW       0  0.0   0  0.0 [khungtaskd]
         15     2 root     SW<      0  0.0   0  0.0 [writeback]
         16     2 root     SW<      0  0.0   0  0.0 [crypto]
         17     2 root     SW<      0  0.0   0  0.0 [bioset]
         18     2 root     SW<      0  0.0   0  0.0 [kblockd]
         20     2 root     SW<      0  0.0   0  0.0 [rpciod]
         24     2 root     SW       0  0.0   0  0.0 [kswapd0]
         26     2 root     SW<      0  0.0   0  0.0 [nfsiod]
         35     2 root     SW<      0  0.0   0  0.0 [kthrotld]
         36     2 root     SW<      0  0.0   0  0.0 [VCHIQ-0]
         37     2 root     SW<      0  0.0   0  0.0 [VCHIQr-0]

      et

      tc@rpi:~$ cat /proc/asound/FXAUDIOD802/stream0
      FX-AUDIO FX-AUDIO-D-802 at usb-20980000.usb-1.3, full speed : USB Audio
      
      Playback:
        Status: Running
          Interface = 1
          Altset = 2
          Packet Size = 576
          Momentary freq = 96000 Hz (0x60.0000)
        Interface 1
          Altset 1
          Format: S16_LE
          Channels: 2
          Endpoint: 4 OUT (ADAPTIVE)
          Rates: 44100, 48000, 88200, 96000, 176400, 192000
        Interface 1
          Altset 2
          Format: S24_3LE
          Channels: 2
          Endpoint: 4 OUT (ADAPTIVE)
          Rates: 44100, 48000, 88200, 96000
core/picore.txt · Dernière modification: 2017/08/21 12:42 (modification externe)