Files
EVCS/deploy/releve-cellules/charger-pilotes.sh
Tallagrand Thierry 16516e3973 charger-pilotes.sh : auto-elevation root (tache DSM en utilisateur simple)
La tache DSM « Au demarrage » CHARGE_PILOTES a ete creee en owner 1026 (TMZF5455),
pas root (verifie en base esynoscheduler). insmod aurait echoue en silence au
boot -> pas de /dev/ttyUSB0 -> conteneur bloque. Le script se re-exec via sudo -n
(passwordless pour cet utilisateur sur le .17) quand il n'est pas root. Teste en
lançant le script sans prefixe sudo : il s'eleve et charge les pilotes.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GwpFpy2aQ2rJok6tNQSbVj
2026-09-24 12:55:57 +02:00

52 lines
2.0 KiB
Bash
Executable File

#!/bin/sh
# Charge le pilote USB-serie sur le Synology .17 (ARCHIVE3, DS920+) et rend le
# port accessible au conteneur du releve. A LANCER EN ROOT.
#
# Pourquoi : DSM 7.3.2 embarque les modules (/lib/modules/usbserial.ko et
# ftdi_sio.ko) mais ne les charge pas d'office, et un cable branche ne cree donc
# aucun /dev/ttyUSB*. Ce script charge les deux modules puis ouvre les droits du
# device (le conteneur tourne en uid 1026, pas en root).
#
# QUAND : au demarrage du NAS, ET a chaque fois qu'on rebranche le cable apres
# coup. A automatiser via Planificateur de taches DSM -> tache declenchee
# « Au demarrage », utilisateur root, commande :
# /volume1/homes/TMZF5455/projects/EVCS/EVCS/deploy/releve-cellules/charger-pilotes.sh
#
# Idempotent : relançable sans risque.
# insmod exige root. La tache DSM « Au demarrage » peut tourner en utilisateur
# simple (verifie le 24/09 : owner 1026, pas root) : on s'eleve alors via
# sudo -n, passwordless pour cet utilisateur sur ce NAS. Sans ca, insmod echoue
# en silence au boot et le device n'existe jamais.
if [ "$(id -u)" -ne 0 ]; then
SUDO=$(command -v sudo || echo /usr/bin/sudo)
if "$SUDO" -n true 2>/dev/null; then
exec "$SUDO" -n /bin/sh "$0" "$@"
fi
echo "PAS root et sudo -n indisponible : impossible de charger les pilotes."
echo "Configurer la tache DSM pour tourner en root, ou donner sudo NOPASSWD."
exit 1
fi
for ko in usbserial ftdi_sio; do
if ! /sbin/lsmod | grep -q "^$ko "; then
/sbin/insmod "/lib/modules/$ko.ko" 2>/dev/null \
&& echo "$ko charge" \
|| echo "$ko : insmod en echec (deja charge ? autre pilote ?)"
else
echo "$ko deja charge"
fi
done
# Laisse le temps a udev de creer le device si le cable est deja branche.
sleep 2
if [ -e /dev/ttyUSB0 ]; then
chmod 666 /dev/ttyUSB0
echo "/dev/ttyUSB0 present, droits ouverts :"
ls -l /dev/ttyUSB0
else
echo "/dev/ttyUSB0 absent : cable non branche, ou adaptateur non reconnu."
echo "Rebrancher le cable puis relancer ce script."
fi