Outils pour utilisateurs

Outils du site


core:picore_rpi3

piCore-9.0.3 sur Raspberry Pi 3

  • Créer un lecteur de musique UPnP OpenHome et AirPlay sur Raspberry Pi 3.
  • piCore est un Raspberry Pi port de Tiny Core Linux.

Installation sans compilation

  1. Sur une machine Linux :
    wget http://tinycorelinux.net/9.x/armv6/releases/RPi/piCore-9.0.3.zip
    unzip piCore-9.0.3.zip
    sudo dd bs=4M if=piCore-9.0.3.img of=/dev/sdb
    sudo sync
  2. Sur la Raspberry Pi 3 :
    1. Sauvegarder les clés SSH générées après la première connexion :
      filetool.sh -b
      sudo reboot
    2. Étendre la deuxième partition à 40Mb sur la RPi (voir la section “SD card partitioning” de README). Voici un exemple.
    3. Installer des extensions
      # Si on veut utiliser le wifi :
      tce-load -wi wifi.tcz firmware-rpi3-wireless.tcz
      
      tce-load -wi alsa.tcz alsa-utils.tcz glib2.tcz libmpdclient.tcz libmad.tcz curl.tcz faad2.tcz mpg123.tcz libsndfile.tcz sqlite3.tcz libid3tag.tcz lame.tcz expat2.tcz flac.tcz libvorbis.tcz python.tcz requests.tcz popt.tcz libdaemon.tcz
      
      cd /mnt/mmcblk0p2/tce/optional/
      wget http://download.tuxfamily.org/bz31notes/picore/tcz/tcz.zip
      unzip tcz.zip
      rm tcz.zip
    4. Editer le fichier /mnt/mmcblk0p2/tce/onboot.lst (les deux premières lignes concernent seulement le wifi)
      firmware-rpi3-wireless.tcz
      wifi.tcz
      openssh.tcz
      alsa.tcz
      alsa-utils.tcz
      mpd.tcz
      upmpdcli.tcz
      shairport-sync.tcz

      et

      sudo reboot
    5. Configurer upmpdcli :
      cp /usr/local/etc/upmpdcli.conf /home/tc/
      vi /home/tc/upmpdcli.conf    [changer "friendlyname = " et "ohproductroom = "]
      filetool.sh -b

      (voir plus bas Upmpdcli)

    6. Configurer ALSA :
      mount /mnt/mmcblk0p1
      vi /mnt/mmcblk0p1/config.txt
      ###########
      # Enable onboard audio                                                       
                                                                                     
      #dtparam=audio=on
      ###########
      
      sudo vi /etc/asound.conf
      ###########
      pcm.!default {
              type hw
              card 0
      }
      
      ctl.!default {
              type hw
              card 0
      }
      ###########
      
      echo "etc/asound.conf" >> /opt/.filetool.lst
      filetool.sh -b

      (voir plus bas ALSA)

    7. Changer le hostname box en rpi3 :
      vi /opt/bootsync.sh
      filetool.sh -b
    8. Modifier 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 /etc/shairport-sync.conf &

      et

      filetool.sh -b
      sudo reboot
  • Image de sauvegarde : On peut créer une image de sauvegarde de ce qu'on a fait jusqu'ici. On copie d'abord la carte microSD sur une machine Linux, par exemple :
    sudo dd bs=4M if=/dev/sdb of=piCore-9.0.3_UpMpd_ShairportSync.img<code> Ensuite on réduit la taille de ce *.img. Voici un exemple : <code>bz31@brix:~/tmp$ sudo fdisk -l piCore-9.0.3_UpMpd_ShairportSync.img 
    Disk piCore-9.0.3_UpMpd_ShairportSync.img: 3.7 GiB, 3965190144 bytes, 7744512 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disklabel type: dos
    Disk identifier: 0x0009bf4f
    
    Device                           Boot Start    End Sectors  Size Id Type
    piCore-9.0.3_UpMpd_ShairportSync.img1       8192  77823   69632   34M  c W95 FAT32 (L
    piCore-9.0.3_UpMpd_ShairportSync.img2      77824 155949   78126 38.2M 83 Linux
    bz31@brix:~/tmp$ sudo truncate --size=$[(155949+1)*512] piCore-9.0.3_UpMpd_ShairportSync.img 
  • Si besoin, configurer le wifi, voir plus bas WIFI.
  • Voir aussi plus bas Divers.

Installation Initiale

Installer piCore-9.0.3.img

  1. Sur mon PC de bureau sous Linux, prendre le fichier piCore-9.0.3.zip et la mettre sur une carte micro SD :
    wget http://tinycorelinux.net/9.x/armv6/releases/RPi/piCore-9.0.3.zip
    unzip piCore-9.0.3.zip
    sudo dd bs=4M if=piCore-9.0.3.img of=/dev/sdb
    sudo sync
  2. Lire IMPORTANT et README.
  3. Booter la RPi avec une connexion Ethernet et se connecter via ssh avec login/passwd tc/piCore.
  4. Sauvegarder les clés SSH générées avec la commande
    filetool.sh -b
    sudo reboot
  5. Étendre la deuxième partition et créer une troisième grosse partition swap après login sur la RPi (voir la section “SD card partitioning” de README). Voici un exemple.
    • La partition swap sera reconnue et utilisée automatiquement par piCore au boot. Elle est nécessaire pour la compilation de programmes.

WiFi

  • Je vais utitiliser le WiFi intégré.
    tce-load -wi wifi.tcz firmware-rpi3-wireless.tcz
    sudo reboot
    sudo wifi.sh    [configurer le wifi]
    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 est utilisé au pour la connexion wifi au boot. Il ne faut pas le supprimer !
    • Maintenant, plus besoin de Ethernet.

ALSA

  • tce-load -wi alsa.tcz alsa-utils.tcz
  • La carte son interne est activée par défaut :
    tc@box:~$ cat /proc/asound/cards
     0 [ALSA           ]: bcm2835 - bcm2835 ALSA
                          bcm2835 ALSA
     1 [UAC2           ]: USB-Audio - hiFaceTWO UAC2
                          M2Tech hiFaceTWO UAC2 at usb-3f980000.usb-1.3, high speed

    Pour la désactiver,

    mount /mnt/mmcblk0p1
    vi /mnt/mmcblk0p1/config.txt
    ===========
    Il suffit de commenter la ligne dtparam=audio=on :
    # Enable onboard audio                                                       
                                                                                   
    #dtparam=audio=on
    ===========
    sudo reboot
  • Configure ALSA :
    sudo alsamixer    [vérifier les réglages de la carte son, il n'y a rien à changer pour mon interface usb]
    ###### A faire seulement si des modifications sont introduites avec la commande "sudo alsamixer" ####
    ### Sinon, pas besoin de cette partie sur "alsactl" :
    sudo mkdir -p /var/lib/alsa
    sudo alsactl store
    echo "var/lib/alsa" >> /opt/.filetool.lst
    vi /opt/bootlocal.sh    [ajouter une ligne: alsactl restore]
    ############################################################################
    sudo vi /etc/asound.conf [voir le contenu plus bas]
    echo "etc/asound.conf" >> /opt/.filetool.lst
    filetool.sh -b
    • :!: N'utilisant pas la carte son interne de RaspberryPi, l'interface usb devient la carte son numéro 0. Pas besoin de alsa-config.tcz. Je configure directement mon interface usb dans le fichier /etc/asound.conf :
      pcm.!default {
              type hw
              card 0    [ou bien UAC2 au lieu de 0]
      }
      
      ctl.!default {
              type hw
              card 0    [ou bien UAC2 au lieu de 0]
      }

MPD Minimaliste

  • Compiler et installer un MPD minimaliste.
    #### 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 compiletc.tcz squashfs-tools.tcz binutils-dev.tcz    [compilation générale]
    tce-load -wi libmpdclient-dev.tcz libasound-dev.tcz glib2-dev boost-dev.tcz libmad-dev.tcz curl-dev.tcz faad2-dev.tcz mpg123-dev.tcz libsndfile-dev.tcz sqlite3-dev.tcz lame-dev.tcz expat2-dev.tcz libid3tag-dev.tcz    [pour mpd]
    
    #### MPD ####
    mkdir /mnt/mmcblk0p2/compile/mpd
    cd /mnt/mmcblk0p2/compile/mpd
    wget http://download.tuxfamily.org/bz31notes/picore/tcz_src/mpd/mpd-0.19.21.tar.xz
    wget http://download.tuxfamily.org/bz31notes/picore/tcz_src/mpd/mpd.build
    wget http://download.tuxfamily.org/bz31notes/picore/tcz_src/mpd/mpd.conf
    wget http://download.tuxfamily.org/bz31notes/picore/tcz_src/mpd/mpd.tcz.dep
    sh mpd.build
    mv /tmp/mpd/mpd.tcz* /mnt/mmcblk0p2/tce/optional/
    mv /tmp/mpd-doc/mpd-doc.tcz* /mnt/mmcblk0p2/tce/optional/
    cp mpd.tcz.dep  /mnt/mmcblk0p2/tce/optional/
    
    #### tester ####
    tce-load -i mpd.tcz
    sudo mpd /usr/local/etc/mpd.conf
    
    #### Configurer ####
    vi /mnt/mmcblk0p2/tce/onboot.lst    [ajouter une ligne : mpd.tcz]
    vi /opt/bootlocal.sh    [ajouter une ligne: mpd /usr/local/etc/mpd.conf]
    filetool.sh -b
    sudo reboot

Upmpdcli

  • Préparation pour compiler Upmpdcli :
    tce-load -i compiletc.tcz squashfs-tools.tcz binutils-dev.tcz
    tce-load -i curl-dev.tcz expat2-dev.tcz libmpdclient-dev.tcz    [pour upmpdcli]
    tce-load -wi cmake.tcz python.tcz requests.tcz
    • Note : python.tcz est nécessaire seulement si on veut avoir la fonction webradio. requests.tcz est nécessaire seulement si on veut utiliser qobuz (ou un autre streaming service).
  • Compiler/Installer :
    #### libupnp ####
    mkdir /mnt/mmcblk0p2/compile/libupnp
    cd /mnt/mmcblk0p2/compile/libupnp
    wget http://download.tuxfamily.org/bz31notes/picore/tcz_src/libupnp/libupnp-1.6.20.jfd5.tar.gz
    wget http://download.tuxfamily.org/bz31notes/picore/tcz_src/libupnp/libupnp.build
    sh libupnp.build
    mv /tmp/libupnp/libupnp.tcz* /mnt/mmcblk0p2/tce/optional/
    mv /tmp/libupnp-dev/libupnp-dev.tcz* /mnt/mmcblk0p2/tce/optional/
    tce-load -i libupnp.tcz libupnp-dev.tcz
    
    #### libupnpp ####
    mkdir /mnt/mmcblk0p2/compile/libupnpp
    cd /mnt/mmcblk0p2/compile/libupnpp
    wget http://download.tuxfamily.org/bz31notes/picore/tcz_src/libupnpp/libupnpp-0.16.0.tar.gz
    wget http://download.tuxfamily.org/bz31notes/picore/tcz_src/libupnpp/libupnpp.build
    sh libupnpp.build
    mv /tmp/libupnpp/libupnpp.tcz* /mnt/mmcblk0p2/tce/optional/
    mv /tmp/libupnpp-dev/libupnpp-dev.tcz* /mnt/mmcblk0p2/tce/optional/
    tce-load -i libupnpp.tcz libupnpp-dev.tcz
    
    #### libmicrohttpd ####
    mkdir /mnt/mmcblk0p2/compile/libmicrohttpd
    cd /mnt/mmcblk0p2/compile/libmicrohttpd
    wget http://download.tuxfamily.org/bz31notes/picore/tcz_src/libmicrohttpd/libmicrohttpd-0.9.55.tar.gz
    wget http://download.tuxfamily.org/bz31notes/picore/tcz_src/libmicrohttpd/libmicrohttpd.build
    sh libmicrohttpd.build
    mv /tmp/libmicrohttpd/libmicrohttpd.tcz* /mnt/mmcblk0p2/tce/optional/
    mv /tmp/libmicrohttpd-dev/libmicrohttpd-dev.tcz* /mnt/mmcblk0p2/tce/optional/
    tce-load -i libmicrohttpd.tcz libmicrohttpd-dev.tcz
    
    #### jsoncpp ####
    mkdir /mnt/mmcblk0p2/compile/jsoncpp
    cd /mnt/mmcblk0p2/compile/jsoncpp
    wget http://download.tuxfamily.org/bz31notes/picore/tcz_src/jsoncpp/jsoncpp-1.7.4.tar.gz
    wget http://download.tuxfamily.org/bz31notes/picore/tcz_src/jsoncpp/jsoncpp.build
    sh jsoncpp.build
    mv /tmp/jsoncpp/jsoncpp.tcz* /mnt/mmcblk0p2/tce/optional/
    mv /tmp/jsoncpp-dev/jsoncpp-dev.tcz* /mnt/mmcblk0p2/tce/optional/
    tce-load -i jsoncpp.tcz jsoncpp-dev.tcz
    
    #### upmpdcli ####
    mkdir /mnt/mmcblk0p2/compile/upmpdcli
    cd /mnt/mmcblk0p2/compile/upmpdcli
    wget http://download.tuxfamily.org/bz31notes/picore/tcz_src/upmpdcli/upmpdcli-1.2.15.tar.gz
    wget http://download.tuxfamily.org/bz31notes/picore/tcz_src/upmpdcli/upmpdcli.build
    wget http://download.tuxfamily.org/bz31notes/picore/tcz_src/upmpdcli/upmpdcli.tcz.dep
    sh upmpdcli.build
    mv /tmp/upmpdcli/upmpdcli.tcz /mnt/mmcblk0p2/tce/optional/
    cp upmpdcli.tcz.dep /mnt/mmcblk0p2/tce/optional/
    tce-load -i upmpdcli.tcz
    #############################
    
    #### tester ####
    upmpdcli -c /usr/local/etc/upmpdcli.conf
    ############################################
  • Configurer :
    vi /mnt/mmcblk0p2/tce/onboot.lst    [ajouter upmpdcli.tcz]
    cp /usr/local/etc/upmpdcli.conf /home/tc/
    ##### j'utilise ma liste de radios #####
    wget http://download.tuxfamily.org/bz31notes/picore/tcz_src/upmpdcli/upmpdcli_radiolist
    vi /home/tc/upmpdcli.conf    
    [adapter "friendlyname = " et "ohproductroom = "]
    [ajouter "radiolist = /home/tc/upmpdcli_radiolist"]
    [supprimer la liste initiale par défaut des radios (à la fin du fichier)]
    [éventuellement configurer qobuz]
    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)

  • Note : Utiliser tinysvcmdn au lieu de avahi pour réduire les dépendances.
  • tce-load -i compiletc.tcz squashfs-tools.tcz binutils-dev.tcz
    tce-load -i libasound-dev.tcz
    tce-load -wi openssl-dev.tcz popt-dev.tcz autoconf.tcz automake.tcz libdaemon-dev.tcz
    
    # Il faut d'abord libconfig.
    mkdir /mnt/mmcblk0p2/compile/libconfig
    cd /mnt/mmcblk0p2/compile/libconfig
    wget http://download.tuxfamily.org/bz31notes/picore/tcz_src/libconfig/libconfig-1.5.tar.gz
    wget http://download.tuxfamily.org/bz31notes/picore/tcz_src/libconfig/libconfig.build
    sh libconfig.build
    mv /tmp/libconfig/libconfig.tcz* /mnt/mmcblk0p2/tce/optional/
    mv /tmp/libconfig-dev/libconfig-dev.tcz* /mnt/mmcblk0p2/tce/optional/
    tce-load -i libconfig.tcz libconfig-dev.tcz
     
    # Maintenant shairport-sync
    mkdir /mnt/mmcblk0p2/compile/shairport-sync
    cd /mnt/mmcblk0p2/compile/shairport-sync
    wget http://download.tuxfamily.org/bz31notes/picore/tcz_src/shairport-sync/shairport-sync-2.8.4.tar.gz
    wget http://download.tuxfamily.org/bz31notes/picore/tcz_src/shairport-sync/shairport-sync.build
    wget http://download.tuxfamily.org/bz31notes/picore/tcz_src/shairport-sync/shairport-sync.tcz.dep
    sh shairport-sync.build
    mv /tmp/shairport-sync/shairport-sync.tcz* /mnt/mmcblk0p2/tce/optional/
    cp shairport-sync.tcz.dep /mnt/mmcblk0p2/tce/optional/
    tce-load -i shairport-sync.tcz
    
    #### tester ####
    shairport-sync
    ############################################
    
    vi /mnt/mmcblk0p2/tce/onboot.lst    [ajouter shairport-sync.tcz]
    cp /etc/shairport-sync.conf /home/tc/shairport-sync.conf
    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 activé)
      firmware-rpi3-wireless.tcz
      wifi.tcz
      openssh.tcz
      alsa.tcz
      alsa-utils.tcz
      mpd.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
  • Changer le hostname : changer le hostname box en rpi3
    vi /opt/bootsync.sh
    filetool.sh -b
  • Pour mon usage avec un DAC USB, pas besoin de i2c, i2s et spi, …. D'abord mount /mnt/mmcblk0p1. Désactiver les dans /mnt/mmcblk0p1/config.txt
    ...
    ...
    
    gpu_mem=16                                                                     
                                                                                  
    #----------------------------------------------------                          
    # Enable peripheral buses                                                      
                                                                                  
    #dtparam=i2c=on,spi=on,i2s=on
                                                                                   
    # Enable onboard audio                                                         
                                                                                   
    #dtparam=audio=on
            
    # Enable serial console                                                       
                                                                                  
    #enable_uart=1
                                                                                            
    [PI3]                                                                         
    dtoverlay=pi3-disable-bt                                                                 
  • Backup : Sur une machine linux et avec la carte sd reconnue comme /dev/sdb
    sudo dd bs=4M if=/dev/sdb of=piCore-9.0.3_backupMySDCard.img
core/picore_rpi3.txt · Dernière modification: 2018/04/11 09:32 par bz31