informatique:raspberrypi:jukebox
Table des matières
JukeBox tout simple
Un JukeBox tout simple avec un vieux Raspberry ARMv6, 2Go, Raspbian 8 (Jessie).
Pas de Desktop que du Terminal → headless
- pas de montage auto de la clé USB
- install de
usbmount - la clé est montée dans /media/usb
- pas de D-Bus ni PulseAudio
- utiliser
ALSA - vérifier installé avec
aplay -l
Piloter VLC avec sa Remote Control.
Clés USB
/etc/udev/rules.d/99-usb_ports.rules :
# 2026-08-08 Cyrille37
# https://cyrille.giquello.fr/informatique/raspberrypi/jukebox
ACTION=="add", SUBSYSTEM=="block", KERNEL=="sd?[0-9]", ACTION=="add", ENV{DEVPATH}=="*/1-1.2/*", RUN+="/usr/local/bin/mount_usb_by_port.sh add %E{DEVNAME} /media/usb_port_1-1_2"
ACTION=="remove", SUBSYSTEM=="block", KERNEL=="sd?[0-9]", ACTION=="add", ENV{DEVPATH}=="*/1-1.2/*", RUN+="/usr/local/bin/mount_usb_by_port.sh remove %E{DEVNAME} /media/usb_port_1-1_2"
/usr/local/bin/mount_usb_by_port.sh :
#!/bin/bash # 2026-08-08 Cyrille37 # https://cyrille.giquello.fr/informatique/raspberrypi/jukebox # ACTION=$1 DEVICE=$2 MOUNT_POINT=$3 case "$ACTION" in "add") # Monter la clé if [ ! -d "$MOUNT_POINT" ]; then sudo mkdir -p "$MOUNT_POINT" fi sudo mount "$DEVICE" "$MOUNT_POINT" -o uid=1000,gid=1000,dmask=022,fmask=133 echo "Cle USB $DEVICE montee sur $MOUNT_POINT" | systemd-cat -t "USB-TOOL" -p info ;; "remove") # Démontage de la clé sudo umount "$MOUNT_POINT" echo "Cle USB $DEVICE demontee de $MOUNT_POINT" | systemd-cat -t "USB-TOOL" -p info ;; *) echo "Action non reconnue : $ACTION" | systemd-cat -t "USB-TOOL" -p info exit 1 ;; esac
Avis d'une IA sur ce script :
Points de consolidation identifiés Sur la base des bugs déjà rencontrés dans cette conversation (empilement de montage, échecs silencieux), voici les points à traiter, du plus important au plus accessoire : 1. Idempotence à l'add Avant de monter, vérifier que le point de montage n'est pas déjà utilisé, avec la commande mountpoint -q, conçue précisément pour ça (elle lit /proc/self/mountinfo et renvoie un code de retour, sans sortie si -q). C'est le correctif direct du bug d'empilement qu'on vient de diagnostiquer : si /media/usb_port_1-1_2 est déjà un point de montage, on démonte d'abord (ou on log une anomalie et on s'arrête) avant de remonter. 2. Existence du device avant mount Vérifier test -b "$DEVICE" avant d'appeler mount. Le script est invoqué de façon synchrone par udev juste après l'événement add, donc en théorie le device bloc existe déjà (confirmé par vos tests), mais c'est une garde peu coûteuse contre tout scénario où le script serait appelé autrement (test manuel, réutilisation ailleurs). 3. Vérification des codes de retour mount et umount renvoient un code de retour exploitable ($?), qu'aucune des deux branches du script ne teste actuellement. Sans ça, le journal peut annoncer un succès qui n'en est pas un — exactement ce qui s'est produit lors du tout premier test (/dev//dev/sda1). Chaque mount/umount doit conditionner le message de log à son propre code de retour, avec un niveau err en cas d'échec plutôt que info dans tous les cas — ça rend le diagnostic immédiat sans avoir à croiser plusieurs sources. 4. Suppression des sudo inutiles Les scripts invoqués via RUN+= par udev s'exécutent déjà avec les privilèges du démon udev, c'est-à-dire root — on le voit d'ailleurs dans vos journaux (USER=root). Les appels sudo sont donc redondants : ils fonctionnent seulement parce que root peut exécuter sudo sans mot de passe, mais ils ajoutent une dépendance (résolution PAM, présence de sudo, éventuelle politique restrictive) inutile dans un contexte déjà privilégié. 5. Robustesse du remove Symétriquement au point 1 : vérifier mountpoint -q avant d'appeler umount, pour éviter une erreur "not mounted" si le point n'était pas monté (cas déjà rencontré avec la clé sdb/sda empilée). 6. Cas umount qui échoue (périphérique occupé) Si un processus a encore un fichier ouvert sur le point de montage au moment du retrait, umount échoue avec "device busy". Il existe umount -l (lazy unmount, qui détache immédiatement l'arborescence mais libère les ressources seulement à la fermeture des descripteurs) comme filet de sécurité, mais c'est un compromis : les écritures en attente sur une clé déjà physiquement retirée sont de toute façon perdues, donc il ne faut pas s'y fier pour la cohérence des données — seulement pour éviter un montage fantôme. 7. Nettoyage du point de montage Optionnel : un rmdir du dossier après un umount réussi, seulement s'il est vide et si vous préférez ne pas laisser de dossiers vides s'accumuler sous /media. Pas indispensable si le point de montage est toujours le même chemin fixe par port (ce qui est votre cas).
informatique/raspberrypi/jukebox.txt · Dernière modification : de cyrille
