Outils pour utilisateurs

Outils du site


raspi3:raspbian

(Voir la page principale sur le Raspberry Pi 3 B)

Raspberry Pi OS (anciennement "Raspbian")

Logo de Raspbian, constitué du logo de Raspberry et du logo de Debian

Raspberry Pi OS est une dérivée de Debian adaptée au Raspberry. C'est un environnement de bureau traditionnel (navigateur, suite bureautique (LibreOffice), lecteur multimédia (VLC)…). Elle peut aussi être utilisée en ligne de commande seule (par exemple pour faire un serveur).

Note: Je n'utilise plus Raspberry Pi OS. La distribution DietPi est bien plus optimisée et rapide.

Checklist

Voici ma checklist quand je ré-install mon Raspberry. Notez qu'une majeur partie des éléments de cette checklist a pour but de réduire les écritures sur la microSD afin d'allonger sa durée de vie.

  • Ne prendre que des microSD classe 10. Pas la peine de s'embêter avec des catégories inférieures: l'économie ne vaut pas les problème que vous aurez après (lenteur, corruptions prématurées de microSD, etc.). Personnellement, j'évite la marque SanDisk et les noname, je préfère Samsung ou à défaut Kingston.
    • Note: D'après cet article, il est recommandé d'utiliser les microSD estampillés "A1" car elles ont de meilleures performances en accès aléatoire que les autres, ce qui est particulièrement utile pour un Raspberry. (A2 n'est actuellement pas supporté par le Raspberry.)
  • Reformater la microSD en FAT32.
    • Note: Attention, si votre MicroSD fait plus de 32 Go, la plupart des systèmes d'exploitation la formatteront en exFAT. Le Raspberry ne sait booter que sur du FAT32, pas sur exFAT. Vous devrez forcer le formattage en FAT32 (prenez par exemple GParted).
  • Télécharger NOOBS Lite (ou PINN) et le dézipper à la racine de la microSD.
    • Pourquoi NOOBS Lite et pas NOOBS ? NOOBS contient une image d'environ 1,7 Go de Raspberry Pi OS qui prend de la place sur la microSD. NOOBS Lite la télécharge et l'installe à la volée. Utiliser NOOBS Lite permet de libérer 1,7 Go sur la microSD, au prix d'une installation plus lente (à travers internet).
  • Booter le Raspberry dessus, et installer Raspberry Pi OS.
  • Laisser Raspberry Pi OS faire ses mises à jour (Et de temps en temps pour faire les mises à jour: sudo apt update && sudo apt full-upgrade)
  • J'ajoute fsck.mode=force à la ligne de commande /boot/cmdline.txt pour forcer une vérif du système de fichier à chaque démarrage. Je perd quelques secondes, mais ça évite de démarrer sur un système de fichier corrompu (le Raspberry étant à fort risque d'être éteint brutalement).
  • Ne pas oublier de mettre un mot de passe à l'utilisateur pi. Cela vous sera en principe proposé a l'installation. Sinon faites passwd. Voir aussi la section sécurisation.
    • Changez le mot de passe de root: sudo passwd root
    • Par défaut l'utilisateur pi peut faire des sudo sans taper de mot de passe (le fichier /etc/sudoers.d/010_pi-nopasswd contient pi ALL=(ALL) NOPASSWD: ALL. Pour obliger à taper un mot de passe, supprimez ce fichier.
    • Si vous voulez ajouter un utilisateur: sudo useradd toto
    • Le faire appartenir aux même groupes que pi: sudo usermod -a -G adm,dialout,cdrom,sudo,audio,video,plugdev,games,users,input,netdev,gpio,i2c,spi toto
  • Répertoires en ram pour réduire les écritures sur la microSD: sudo leafpad /etc/fstab et ajouter à fin du fichier:
    tmpfs    /tmp       tmpfs    defaults,size=256m    0 0
    tmpfs    /var/tmp   tmpfs    defaults,size=256m    0 0
    • Rassurez-vous, tmpfs ne consomme pas directement 256 Mo de RAM. Il ne consomme que quand on stock des fichiers dedans, ce qui reste très limité concernant ces deux répertoires. Vide, il ne consomme pratiquement rien. Et si tmpfs n'a plus de place en RAM, il utilisera le swap.
  • Faire de la place (en particulier si vous n'avez qu'une microsd de 8 Go):
    sudo apt purge wolfram-engine wolframscript bluej greenfoot nodered smartsim sonic-pi sense-*
    sudo apt autoremove --purge
    sudo apt clean
    • Et si vous n’utilisez pas LibreOffice, il prend de la place: sudo apt purge libreoffice-* suivi d'un apt autoremove+clean.
  • Mise a jour du firmware: sudo rpi-update puis redémarrer.
  • Allongement du commit:
    • Par défaut, quand une application veut écrire sur disque, le système attendra au plus 5 secondes avant d'écrire. On peut allonger à 60 secondes pour réduire les écritures. Modifiez votre fichier /etc/fstab (sudo leadpad /etc/fstab):
    • Repérez la ligne où / est monté:
      /dev/mmcblk0p7  /               ext4    defaults,noatime  0       1
    • Ajoutez commit=60 dans les options de montage:
      /dev/mmcblk0p7  /               ext4    defaults,noatime,commit=60  0       1
    • Redémarrez pour prise en compte.
    • Si ponctuellement vous voulez vous assurer que tout est bien écrit sur la microSD, tapez sync.
  • Activation de zram (cela va réduire à néant le swapping sur microSD):
    • sudo wget -O /usr/bin/zram.sh https://raw.githubusercontent.com/novaspirit/rpi_zram/master/zram.sh

      ou enregistrer le script suivant dans /usr/bin/zram.sh:

      zram.sh
      #!/bin/bash
      # Enable zram swap in Raspbian (source: https://github.com/novaspirit/rpi_zram/)
      cores=$(nproc --all)
      modprobe zram num_devices=$cores
       
      swapoff -a
       
      totalmem=`free | grep -e "^Mem:" | awk '{print $2}'`
      mem=$(( ($totalmem / $cores)* 1024 ))
       
      core=0
      while [ $core -lt $cores ]; do
        echo $mem > /sys/block/zram$core/disksize
        mkswap /dev/zram$core
        swapon -p 5 /dev/zram$core
        let core=core+1
      done
    • Puis: sudo chmod +x /usr/bin/zram.sh
    • Et dans /etc/rc.local, avant le exit 0, ajoutez la ligne:
      /usr/bin/zram.sh &
    • Redémarrez.
    • Contrôlez que le swap zram est actif: Vous devez voir des /dev/zramX quand vous faites cat /proc/swaps.
  • Réduction du swapping:
    sudo bash -c 'echo "vm.swappiness=10" >> /etc/sysctl.conf'

    et redémarrer. (Vérification cat /proc/sys/vm/swappiness doit renvoyer 10).

  • Installation de log2ram:
    • Cela va mettre /var/log en RAM (en tmpfs). Les fichiers seront réellement recopiés sur microSD que toutes les heures ou au prochain reboot/halt.
    • Cela permet d'éviter les écritures très fréquentes sur la microsd.
    • Mise en place:
      curl -Lo log2ram.tar.gz https://github.com/azlux/log2ram/archive/master.tar.gz
      tar xf log2ram.tar.gz
      cd log2ram-master
      chmod +x install.sh && sudo ./install.sh
    • Puis rebootez avant d'installer quoi que ce soit d'autre.
    • Vérification: En faisant df -h vous devriez voir votre /var/log géré par log2ram.
    • Les fichiers sont écrits sur microSD toutes les heures dans /var/hdd.log.
    • Vous pouvez changer la configuration de log2ram dans /etc/log2ram.conf
      • Si vous avez beaucoup de logs, vous pouvez changer la taille allouée à /var/log en changeant le paramètre SIZE. Il est par défaut à 40M. Faite un df -h /var/log pour savoir où vous en êtes.
      • N'activez pas l'option ZL2R de log2ram : Elle entre en conflit avec le swap zram et désactive ce dernier.
  • Mise en place liste de blocage DNS:
    • Copier le script suivant dans /etc/cron.daily/:
      hosts-update
      #!/bin/bash
      # Met à jour la liste de blockage du fichier hosts.
      logger "hosts-update: Mise à jour du fichier hosts."
      tempname=`mktemp`
      echo "127.0.0.1 `hostname`" > $tempname
      printf "\n\n" >> $tempname
      curl --fail https://sebsauvage.net/hosts/hosts >> $tempname
      res=$?
      if test "$res" != "0"; then
         logger "hosts-update: Impossible de récupérer la mise à jour de la liste de filtrage DNS (hosts) : $res"
         rm $tempname
         exit 1
      fi
      mv /etc/hosts /etc/hosts.old
      mv $tempname /etc/hosts
      chmod 0644 /etc/hosts
      logger "hosts-update: Mise à jour du fichier hosts terminée."
    • sudo chmod +x /etc/cron.daily/hosts-update
  • Changement des DNS (voir cette page).
    • Raison: Contourner la censure du gouvernement français. Je met Quad9 en priorité, et CloudFlare en fallback si soucis sur Quad9.
    • sudo leafpad /etc/dhcpcd.conf: À la fin du fichier, j'ajoute: static domain_name_servers=9.9.9.9 1.1.1.1 2620:fe::fe 2606:4700:4700::1111, puis:
    • sudo service dhcpcd restart
    • Vérification: cat /etc/resolv.conf doit montrer les nouveaux serveurs DNS.
  • Le problème avec Chromium est qu'il écrit comme un goret sur disque (et donc sur microSD) et que contrairement à Firefox, il n'existe aucune option pour désactiver le cache sur disque. J'ajoute donc la ligne suivante dans le fichier /etc/fstab pour mettre le cache de Chromium en mémoire seulement.
    tmpfs    /home/pi/.cache/chromium   tmpfs    defaults,size=64m    0 0
  • Activer le serveur ssh et VNC: menu > Préférences > Configuration du Raspberry Pi > Onglet Interface > Activer ssh et VNC.

Kodi et Netflix

Il est possible de lire Netflix depuis Kodi. (Testé avec Kodi 18.2 (Leia) sur un Raspberry Pi 3B sous Raspbian GNU/Linux 9 (stretch)). Et oui, on arrive à lire les vidéos sans frameskip. Démonstration.

Prévoyez d'avoir une carte microsd avec plusieurs giga-octets de libre (>3 Go) afin de pouvoir réaliser cette installation.
  • Dans Raspberry Pi OS, faites:
    • sudo apt install python-pip python-crypto build-essential -y
      sudo apt install python-all-dev python-setuptools python-wheel -y
      sudo apt install python-crypto-dbg python-crypto-doc python-pip-whl -y
      pip install pycryptodomex
      sudo ln -s /usr/lib/python2.7/dist-packages/Crypto /usr/lib/python2.7/dist-packages/Cryptodome
      • (Sources: 1, 2)
    • sudo apt install kodi kodi-inputstream-adaptive kodi-inputstream-rtmp
  • Récupérez ce fichier zip: repository.castagnait-1.0.0.zip (source)
  • Lancez Kodi.
  • Dans les extensions > installer depuis zip > choisir ce fichier zip.
  • Une fois installé: Dans les extensions > installer depuis dépôt > choisir castagnait > installer l'extension Netflix.
    • (Cela va également installer d'autres modules, c'est normal)
  • Au premier lancement de l'extension Netflix, vous devrez saisir login et mot de passe Netflix.
  • Au moment de lire une vidéo (essayez plusieurs fois), il va vous proposer d'activer l'addon inputsteam.adaptive (acceptez) puis il va vous proposer de télécharger Widevine, le DRM de Google. Pour cela, il va télécharger l'image ISO de ChromeOS (2 Go) pour en extraire la lib, ce qui va durer un certain temps.
  • Après ça, vous pourrez lire les vidéos.

(Si j'ai le courage, un de ces quatres, j'irai extraire les libs du répertoire de Kodi pour vous le mettre à disposition afin d'éviter ce téléchargement de 2 Go.)

Astuces

  • Faire un backup de la MicroSD:
    • Backup compressé avec découpage en fichiers de 4 Go (pour stockage sur partition FAT):
      sudo dd if=/dev/mmcblk0 bs=1M | pigz | split -d -b 4000M - raspbian.dd.gz.
      • Cela va créer des fichiers raspbian.dd.gz.00, raspbian.dd.gz.01…
    • Restauration:
      cat raspbian.dd.gz.* | pigz -d | sudo dd of=/dev/mmcblk0 bs=1M
    • Astuce: Si vous voulez réduire la taille de la sauvegarde, faites un sudo sfill -fllvz dans chacune des partitions de la microsd (apres avoir fait un sudo apt install secure-delete). Cela va écrire la valeur zero dans les secteurs vides.
  • Vous êtes en headless et vous voulez retrouver l'adresse IP de votre Raspi dans le réseau local ?
    nmap -sP 192.168.0.1-255
  • Le RaspberryPi ne possédant pas de BIOS, la configuration du matériel passe par le fichier /boot/config.txt. Voir cet article et cette page. Par exemple, vous pouvez forcer l'adresse MAC:
    smsc95xx.macaddr=B8:AA:BC:DE:F0:12
  • L'outils de configuration du Raspberry (menu > Préférences > Configuration du Raspberry Pi) est également accessible en terminal: sudo raspi-config
    • Avec cet outils vous pouvez paramétrer diverses choses, comme activer ou désactiver l'autologin, ou démarrer en mode graphique ou en console.
  • Si vous n'avez pas de son en HDMI:
    • Modifiez le fichier /boot/config.txt (source):
      #Always force HDMI output and enable HDMI sound
      hdmi_force_hotplug=1
      hdmi_drive=2
    • Explications:
      • Si aucun moniteur HDMI n'est branché avant le démarrage du Raspberry, HDMI sera désactivé. hdmi_force_hotplug=1 permet de brancher à chaud des écrans HDMI pour qu'ils soient pris en compte.
      • Si l'écran HDMI n'est pas censé supporter le son (exemple: écran d'ordinateur), le Raspberry n'enverra pas le son sur le connecteur HDMI. hdmi_drive=2 permet de forcer la sortie du son sur l'HDMI.
  • Accès à distance: Vous avez plusieurs possibilités:
    • ssh: Une fois le serveur ssh activé, vous pouvez lancer des applications graphiques à distance (aucun besoin de VNC).
      • Connexion au Raspberry: ssh -X user@adresseip et vous pouvez alors lancer une application graphique sans problème.
        • PS: Les applications utilisant l'accélération OpenGL ne fonctionneront pas à travers ssh.
      • Pour lancer une application graphique en sudo: sudo -E application
    • VNC: Raspberry Pi OS est fourni avec un serveur VNC (mais pas activé par défaut).
      • Pour l'activer: Menu > Préférences > Configuration du Raspberry Pi > onglet "Interfaces" > activer "VNC".
      • Note: Par défaut, le serveur VNC utilise une authentification UNIX (utilisateurs système) qui nécessite un client spécial: RealVNC Viewer.
      • Si vous voulez y accéder depuis les clients VNC traditionnels (Remmina, etc.) vous devez changer la configuration du serveur VNC de Raspberry Pi OS et utiliser l'authentification VNC. (Voir la configuration en cliquant sur l'icône de VNC dans la barre des tâches).
    • DWService: L'excellent DWservice (équivalent de TeamViewer) fournit un service pour Raspberry Pi OS. Une fois installé, vous pouvez donc piloter votre Raspberry Pi OS depuis votre compte DWService.
    • TeamViewer offre également une version pour Raspberry (cherchez 'armv7' dans cette page).
  • Le navigateur par défaut de Raspberry Pi OS est Chromium. Notez que:
    • Ce Chromium est customisé pour Raspberry Pi OS (voir le paquet rpi-chromium-mods)
    • Le navigateur est fourni par défaut avec 2 extensions: uBlock-origin et h264lify. Ce dernier permet de forcer YouTube en h264.
    • Malgré cela, sachez que Chromium n'utilise pas l'accélération matérielle. Donc les vidéos YouTube lues dans le navigateur ne seront pas décodées matériellement, mais par logiciel, d'où une importante consommation CPU quand vous lisez des vidéos YouTube.
      • Astuce ! Copiez l'URL de la vidéo YouTube, lancez VLC, pressez Ctrl+N et collez l'URL de la vidéo: VLC saura la lire en utilisant l'accélération matérielle. :-D
      • PS: J'ai quelques pistes pour la lecture avec accélération matérielle directement dans le navigateur. Je mettrai ici ce que je trouve.
  • Envoyer des SMS: Si vous êtes chez FreeMobile et que vous voulez que votre Raspberry vous envoie des SMS pour certains évènement, c'est facile et ça ne coûte rien. Voir cet article.
  • Le fichier /boot/cmdline.txt permet de passer des paramètres au noyau.
  • Voir pour installer un cache dns local léger ? (dnsmasq ? autre ? systemd a sans doute déjà son propre résolveur ?)

Fiabilisation

Si votre intention est de laisser tourner un Raspberry 24h/24, voici quelques pistes:

  • La microSD est la principale source de problèmes sur les RaspberryPis, à cause des cycles limités d'écriture qu'elle supporte. Sans précautions, la durée de vie d'une microSD est de 6 à 10 mois en production. Veillez donc à bien appliquer les recommandations de cette page:
    • vm.swappiness à 10
    • activation de zram
    • /tmp et /var/tmp en tmpfs
    • /var/log en log2ram
    • commit à 60 (ou beaucoup plus)
  • Avec tout cela, vous ne devriez plus voir la diode de la microSD clignoter de manière frénétique. Pour trouver les applications qui font des lectures/écritures disque, faites: sudo iotop -b -o | grep \%
    • PS: Le processus jdb2 est le système de journalisation d'ext4.
  • Notez que d'après cet article, certaines cartes microSD passent en mode lecture seule si elles ont dépassé un certain nombre de cycles d'écriture.
  • Watchdog: Le Raspberry possède un système qui permet de le rebooter automatiquement s'il ne répond plus. Très pratique pour ne pas avoir à intervenir sur place en cas de problème. Voir cet article.
  • Surveillez la température du Raspberry:
    • Température du GPU : vcgencmd measure_temp
    • Température du CPU : cat /sys/class/thermal/thermal_zone0/temp et divisez par 1000 pour obtenir la valeur en °C.
    • Vu que les valeurs sont accessibles, on peut même imaginer que le Raspberry vous prévienne. Exemple.
    • Mais rassurez-vous, aucun risque de le "cramer":
      • Il va automatiquement ralentir ses performances (throttling) s'il est trop chaud pour ne pas s'endommager.
      • S'il l'air extérieur est trop chaud et que le throttling ne suffit pas, il s'arrêtera.
    • Donc si vous avez des problèmes de performances, regardez du côté de la température et prévoyez peut-être d'ouvrir le boîtier ou mettre une ventilation. (En dehors de ça, une ventilation n'est pas utile, le Raspberry se limite de lui-même.)
  • L'alimentation est la seconde source majeur de problèmes. : Trop faible, vous aurez des problèmes de fiabilité (plantages, mauvaises écritures sur la microsd…). N'utilisez pas des alimentations 2A, c'est insuffisant. Même avec les 2,5A, avec un mauvais câble cela peut poser problème, surtout si vous connectez des périphériques au Raspberry. Donc: Alim 2,5A, avec un bon câble.
    • Malheureusement, le voltage n'est pas accessible pour lecture dans le système, mais il existe des modules matériels à ajouter au Raspberry pour être informé de l'état de l'alimentation.
  • Si vous voulez forcer un fsck à chaque redémarrage, dans le fichier /boot/cmdline.txt ajoutez le paramètre: fsck.mode=force
  • Pour palier aux coupures de courant, il existe des solutions d'UPS intégrables au Raspberry: Exemple.
  • Dans tous les cas: Faites des backups. Que ce soit une image complète de la microsd (pour une remise en route rapide), soit un backup régulier avec rsync.
  • Il existe une bidouille pour permettre au Raspberry de booter sans microSD, directement sur USB. Le Raspberry Pi 3B+ est capable de démarrer nativement sur des supports USB.

Sécurisation

Je ne vais pas détailler ici les opérations, mais je donne juste quelques infos:

  • Mettez un mot de passe aux utilisateurs pi et root.
  • Faites un visudo pour exiger un mot de passe pour faire un sudo (car par défaut, aucun mot de passe n'est demandé !)
  • Lancer raspi-config pour désactiver l'auto-login.
  • Idéalement, créez un autre utilisateur et supprimez l'utilisateur par défaut pi.
  • Si vous lancez le serveur ssh:
    • Configurez-le sur un port différent de 22.
    • Installez fail2ban.
    • Désactivez le login par mot de passe et utilisez la connexion par certificats.
  • Activez le firewall (ufw fera très bien l'affaire).
  • Désactivez les logiciels qui ne sont pas utiles pour réduire la surface d'attaque.
  • N'oubliez pas que si quelqu'un accède physiquement au Raspberry, c'est game over pour sa sécurité.

Liens:

Pistes / liens en vrac

À explorer…

raspi3/raspbian.txt · Dernière modification : 2022/10/05 11:34 de sebsauvage