Outils pour utilisateurs

Outils du site


core:picore_7.1beta4_rpi3

piCore (7.1beta4) sur Raspberry Pi 3

  • Créer un lecteur de musique UPnP OpenHome et AirPlay.
  • Tiny Core Linux sur Raspberry Pi 3
  • Image correspondante à mon installation : piCore_Upmpd_ShairportSync.img.zip
    • Éventuellement adapter les fichiers de *.conf de ALSA, MPD, Upmpdcli et ShairportSync.

Installation

  • Prendre le fichier piCore-7.1beta4.zip et la mettre sur une carte SD. Sur une machine Linux :
    wget http://tinycorelinux.net/7.x/armv6/test_releases/piCore-7.1beta4.zip
    unzip piCore-7.1beta4.zip
    sudo dd bs=4M if=piCore-7.1beta4.img of=/dev/sdb
    sudo sync
  • Utiliser gparted pour étendre la deuxième partition et créer une troisième grosse partition swap (~2GB) (ou bien en ligne de commande en suivant la section “SD card partitioning” de README).
    • La partition swap sera reconnue et utilisée automatiquement par piCore au boot. Elle est nécessaire pour la compilation de programmes.
  • Booter la RPi avec une connexion ethernet et se connecter via ssh avec login/passwd tc/piCore.

Extensions

WiFi

  • Si besoin d'utiliser le WiFi intégré.
    tce-load -wi wifi.tcz firmware-brcmfmac43430.tcz
    sudo reboot
    sudo wifi.sh    [configurer le wifi]
    sudo vi /opt/bootlocal.sh    [ajouter une ligne: 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    [vérifier les réglages de la carte son]
    ###### A faire seulement si des modifications pendant la commande "sudo alsamixer" ####
    ### Sinon, pas besoin de cette partie sur "alsactl" :
    sudo alsactl store
    sudo echo "var/lib/alsa" >> /opt/.filetool.lst
    sudo vi /opt/bootlocal.sh    [ajouter une ligne: alsactl restore]
    ############################################################################
    sudo vi /etc/asound.conf [voir le contenu plus bas]
    sudo echo "etc/asound.conf" >> /opt/.filetool.lst
    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 Minimaliste

  • Voir MPD minimaliste. Recompiler MPD pour avoir moins de dépendances.
    #### Créer un dossier persistant de compilation ####
    sudo mkdir /mnt/mmcblk0p2/compile
    sudo chown tc:staff /mnt/mmcblk0p2/compile
    
    #### Préparation pour compiler ####
    tce-load -wi squashfs-tools.tcz compile-essentials.tcz binutils-dev.tcz pkg-config.tcz    [compilation générale]
    tce-load -wi glib2-dev boost-dev.tcz alsa-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    [pour mpd]
    
    # Note : j'avais besoin de recompiler libssh2
    # Il suffit d'adapter la méthode http://distro.ibiblio.org/tinycorelinux/7.x/armv7/tcz/src/libssh2/
    # Remplacer les extensions /mnt/mmcblk0p2/tce/optional/libssh2-dev.tcz et 
    # /mnt/mmcblk0p2/tce/optional/libssh2.tcz et rebooter
    
    #### Export variables pour compilation ####
    export CFLAGS="-Os -pipe"
    export CXXFLAGS="-Os -pipe -fno-exceptions -fno-rtti"
    export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:/usr/lib/pkgconfig
    
    cd /mnt/mmcblk0p2/compile
    wget http://www.musicpd.org/download/mpd/0.19/mpd-0.19.15.tar.xz
    tar Jxvf mpd-0.19.15.tar.xz
    cd mpd-0.19.15
    ../mpd_build_configure
    ################ le contenu du 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
    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
    flac.tcz     
    libvorbis.tcz
    ###########################################
    
    vi /mnt/mmcblk0p2/tce/onboot.lst    [ajouter une ligne : mpd-perso.tcz]
    
    [créer le fichier /usr/local/etc/mpd.conf (voir plus bas)]
    ## 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
    sudo reboot
    • Le fichier de config /usr/local/etc/mpd.conf :
      audio_output {
              type "alsa"
              name "Interface USB/SPDIF XMOS"
              device "plughw:0,0"
      }
      • :!: J'utilise MPD uniquement comme un audio player pour Upmpdcli, pas besoin de configurer la base de données mpd, …

Upmpdcli

  • Préparation pour compiler Upmpdcli :
    tce-load -i squashfs-tools.tcz compile-essentials.tcz binutils-dev.tcz pkg-config.tcz
    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 :
    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.3.tar.gz
    tar zxvf libupnp-1.6.19.jfd3.tar.gz
    tar zxvf libupnpp-0.14.1.tar.gz
    tar zxvf upmpdcli-1.1.3.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.3
    ./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
    
    # D'abord libconfig :
    export CFLAGS="-Os -pipe"                                         
    export CXXFLAGS="-Os -pipe"
    export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:/usr/lib/pkgconfig
    
    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
    export CXXFLAGS="-Os -pipe -fno-exceptions -fno-rtti"
    cd /mnt/mmcblk0p2/compile/
    wget https://github.com/mikebrady/shairport-sync/archive/2.8.1.tar.gz
    tar zxvf 2.8.1.tar.gz
    cd shairport-sync-2.8.1
    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 deux lignes: "sleep 5" et "shairport-sync -c /home/tc/shairport-sync.conf &"]
    filetool.sh -b
    sudo reboot

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 !
    • Le fichier /mnt/mmcblk0p2/tce/onboot.lst (wifi désactivé)
      #firmware-brcmfmac43430.tcz
      #wifi.tcz
      
      openssh.tcz
      
      alsa.tcz
      
      mpd-perso.tcz
      upmpdcli.tcz
      
      shairport-sync.tcz

      et le fichier /opt/bootlocal.sh

      #!/bin/sh
      
      # Start serial terminal
      /usr/sbin/startserialtty &
      
      # Set CPU frequency governor to ondemand (default is performance)
      echo ondemand > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
      
      # Load modules
      /sbin/modprobe i2c-dev
      
      # Start openssh daemon
      /usr/local/etc/init.d/openssh start
      
      # ------ Put other system startup commands below this line
      #wifi.sh -a -w 2>&1 > /tmp/wifi.log
      #alsactl restore
      mpd /usr/local/etc/mpd.conf
      su tc -c "upmpdcli -D -c /home/tc/upmpdcli.conf"
      # Attendre 5 secondes avant de charger l'extension shairport-sync :
      sleep 5
      shairport-sync -c /home/tc/shairport-sync.conf &

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
  • SWAP : “By default piCore has a zlib compressed swap in RAM, automatically sized to 25% of available RAM, 106 Mbyte on 'Version B' boards. This can be disabled with the NOZSWAP boot code.” (README). Donc ajouter l'option nozswap dans /mnt/mmcblk0p1/cmdline.txt (monter d'abord la partition : mount /mnt/mmcblk0p1)
    tc@box:~$ free -m
                 total       used       free     shared    buffers     cached
    Mem:           925         78        847          9          6         29
    -/+ buffers/cache:         41        883
    Swap:         1998          0       1998
     

    (la partition swap sur la carte SD est de 2GB) et on peut le comparer avec la situation sans l'option nozswap

    tc@box:~$ free -m
                 total       used       free     shared    buffers     cached
    Mem:           925         78        846          9          6         29
    -/+ buffers/cache:         42        883
    Swap:         2221          0       2221
  • GPU : Par défaut, 64MB de RAM est alloué pour GPU. Ajouter
    gpu_mem=16

    vers la fin du fichier /mnt/mmcblk0p1/config.txt pour réduire à 16MB (minimal). On récupère 973-925=48MB de RAM :

    tc@box:~$ free -m
                 total       used       free     shared    buffers     cached
    Mem:           973         77        895          9          6         29
    -/+ buffers/cache:         41        932
    Swap:         1998          0       1998
  • Pas besoin de i2c, i2s et spi. Désactiver les dans /mnt/mmcblk0p1/config.txt
    ...
    ...
    
    gpu_mem=16                                                                     
                                                                                  
    #----------------------------------------------------                          
    # Enable peripheral buses                                                      
                                                                                  
    #dtparam=i2c=on,spi=on,i2s=on,i2c_vc=on
  • Changer le hostname : changer le hostname box en rpi3
    sudo vi /opt/bootsync.sh
    filetool.sh -b
  • Backup : Sur une machine linux et avec la carte sd reconnue comme /dev/sdb
    sudo dd bs=4M if=/dev/sdb of=piCore-7.1beta4_backupMySDCard.img
core/picore_7.1beta4_rpi3.txt · Dernière modification: 2017/08/21 12:42 (modification externe)