#!/bin/bash # ============================================================================= # INSTALLATION AUTOMATIQUE sur le Raspberry Pi # Workshop « Vitrine pixels » # ============================================================================= # # À lancer SUR LE RASPBERRY PI, depuis le dossier du projet : # bash installation/installer.sh # # Ce script fait, dans l'ordre, tout ce qui est décrit à la main dans # INSTALLATION_PI.md (parties 5 à 8). Chaque étape affiche ce qu'elle fait. # On peut le relancer sans danger : ce qui est déjà fait est ignoré. set -e # s'arrêter à la première erreur, au lieu de continuer à l'aveugle # Le dossier du projet = le dossier parent de celui qui contient ce script. PROJET="$(cd "$(dirname "$0")/.." && pwd)" ENV="$HOME/vitrine-env" # l'« environnement Python » du projet # La partie « boot » de la carte SD (lisible depuis tout ordinateur) est # montée dans /boot/firmware depuis Raspberry Pi OS 12 « Bookworm », # et dans /boot sur les systèmes plus anciens (Raspbian 11 « Bullseye »). if [ -f /boot/firmware/config.txt ]; then BOOT=/boot/firmware elif [ -f /boot/config.txt ]; then BOOT=/boot else echo "!!! config.txt introuvable : ce script est prévu pour Raspberry Pi OS." exit 1 fi CONFIG=$BOOT/config.txt # le fichier de réglages du Pi ANIMATIONS=$BOOT/animations # les animations, lisibles depuis tout ordinateur echo "=== Projet : $PROJET" echo "=== Partition de démarrage : $BOOT" echo echo "=== 1/5 Installation des logiciels nécessaires (quelques minutes)" # python3-pil = Pillow (lire les images) ; python3-flask = le serveur web ; # python3-dev et gcc = pour compiler la bibliothèque rpi_ws281x, qui parle aux LED. sudo apt-get update sudo apt-get install -y python3-venv python3-pil python3-flask python3-dev gcc echo echo "=== 2/5 Environnement Python dans $ENV" # Un « environnement virtuel » est une boîte où l'on installe les # bibliothèques du projet sans toucher au reste du système. # --system-site-packages : la boîte peut aussi utiliser Pillow installé par apt. if [ ! -d "$ENV" ]; then python3 -m venv --system-site-packages "$ENV" fi "$ENV/bin/pip" install --upgrade rpi_ws281x echo echo "=== 3/5 Désactivation de la sortie audio (elle utilise le même circuit que les LED)" if grep -q "^dtparam=audio=on" "$CONFIG"; then sudo sed -i 's/^dtparam=audio=on/dtparam=audio=off/' "$CONFIG" echo " audio désactivé (pris en compte au prochain redémarrage)" REDEMARRER=1 else echo " déjà fait" fi echo echo "=== 4/5 Dossier des animations : $ANIMATIONS" # Il est sur la partie « bootfs » de la carte SD, que Windows, macOS et Linux # savent tous ouvrir : on pourra y copier des GIF depuis n'importe quel ordinateur. sudo mkdir -p "$ANIMATIONS" if [ -z "$(ls -A "$ANIMATIONS")" ]; then sudo cp -r "$PROJET/animations/." "$ANIMATIONS/" echo " exemples copiés" else echo " le dossier contient déjà des animations : on n'y touche pas" fi echo echo "=== 5/5 Services de démarrage automatique : lecteur et interface web" # On recopie chaque modèle de service en remplaçant @PROJET@ et @PYTHON@ # par les vrais chemins. for SERVICE in vitrine-pixels vitrine-web; do sed -e "s|@PROJET@|$PROJET|g" -e "s|@PYTHON@|$ENV/bin/python|g" \ "$PROJET/installation/$SERVICE.service" \ | sudo tee "/etc/systemd/system/$SERVICE.service" > /dev/null done sudo systemctl daemon-reload # L'interface web ne touche pas à la matrice : on peut l'activer tout de suite. sudo systemctl enable --now vitrine-web sudo systemctl restart vitrine-web for ADRESSE in $(hostname -I); do case "$ADRESSE" in *.*) echo " interface web : http://$ADRESSE" ;; esac done echo " lecteur installé (pas encore activé : testez d'abord la matrice)" echo echo "================================================================" echo " Installation terminée." echo echo " 1. Testez d'abord la matrice :" echo " sudo $ENV/bin/python $PROJET/test_matrice.py" echo " 2. Puis le lecteur :" echo " sudo $ENV/bin/python $PROJET/lecteur.py" echo " 3. Quand tout marche, démarrage automatique à chaque allumage :" echo " sudo systemctl enable --now vitrine-pixels" if [ -n "$REDEMARRER" ]; then echo echo " ⚠ Redémarrez d'abord le Pi (sudo reboot) : le réglage audio" echo " ne sera pris en compte qu'après." fi echo "================================================================"