Files
vitrine-pixels/8x32 PI/installation/installer.sh
T
bachandClaude Opus 5.5 1ea8500b82 README général du projet, interface web dans le README du Pi, Pillow récente
- README.md (racine) : présentation du projet Vitrine pixels, parcours en
  trois étapes, par où commencer selon le profil, idées clés, sécurité,
  logiciels, état du projet, pistes pour la matrice 7 × 39, arborescence.
- 8x32 PI/README.md : nouvelle partie 10 sur l'interface web (capture
  d'écran, actions, adresses Wi-Fi / câble, architecture, services,
  réglages et sécurité) ; parties suivantes renumérotées, dépannage complété.
- installer.sh et INSTALLATION_PI.md : installer une Pillow récente dans
  ~/vitrine-env (la Pillow 8 de Raspbian 11 décodait mal les GIF optimisés).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 16:26:33 +02:00

113 lines
4.7 KiB
Bash
Executable File

#!/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
# Une Pillow récente DANS la boîte : celle des systèmes anciens (Pillow 8 sur
# Raspbian 11) décode mal les GIF « optimisés » (images partielles) : le cœur
# n'apparaissait qu'en morceaux sur la matrice.
"$ENV/bin/pip" install --upgrade pillow
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 "================================================================"