diff --git a/deploy/releve-cellules/README.md b/deploy/releve-cellules/README.md index c209fc3..959fd3d 100644 --- a/deploy/releve-cellules/README.md +++ b/deploy/releve-cellules/README.md @@ -33,7 +33,11 @@ Automatiser via **Planificateur de taches DSM** -> tache declenchee « Au demarrage », **utilisateur = root** (onglet General, PAS un compte simple), commande : - /volume1/homes/TMZF5455/projects/EVCS/EVCS/deploy/releve-cellules/charger-pilotes.sh + sh /volume1/homes/TMZF5455/projects/EVCS/EVCS/deploy/releve-cellules/charger-pilotes.sh + +⚠️ **Invoquer via `sh`, PAS le chemin nu.** Le depot est monte en NFS `noexec` : +executer le script directement donne « Permission denied » (constate le 24/09, +la tache ne chargeait rien). `sh ` lit le script au lieu de l'executer. ⚠️ **La tache DOIT tourner en root.** `insmod` exige root, et une mise a jour DSM MAJEURE efface le sudo passwordless : constate le 24/09, DSM 7.3.2 -> 7.4.1 a diff --git a/deploy/releve-cellules/charger-pilotes.sh b/deploy/releve-cellules/charger-pilotes.sh index 79c4e8a..b97910e 100755 --- a/deploy/releve-cellules/charger-pilotes.sh +++ b/deploy/releve-cellules/charger-pilotes.sh @@ -32,21 +32,19 @@ fi # mise a jour DSM majeure (7.3 -> 7.4, 24/09) peut deplacer ou renommer les .ko. # On tente modprobe (gere les dependances), sinon on cherche le .ko dans les # arborescences de modules connues. +# On VERIFIE le chargement via lsmod apres chaque tentative, sans jamais faire +# confiance au code retour de modprobe : sur DSM il peut renvoyer 0 sans rien +# charger. On tente modprobe (gere les dependances), et si le module n'est +# toujours pas dans lsmod on insmod le .ko trouve. +charge() { /sbin/lsmod | grep -q "^$1 "; } for ko in usbserial ftdi_sio; do - if /sbin/lsmod | grep -q "^$ko "; then - echo "$ko deja charge" - continue - fi - if command -v modprobe >/dev/null 2>&1 && modprobe "$ko" 2>/dev/null; then - echo "$ko charge (modprobe)" - continue - fi - kof=$(find /lib/modules /usr/lib/modules -name "$ko.ko" 2>/dev/null | head -1) - if [ -n "$kof" ] && /sbin/insmod "$kof" 2>/dev/null; then - echo "$ko charge ($kof)" - else - echo "$ko : introuvable ou insmod en echec (pilote absent de ce DSM ?)" + if charge "$ko"; then echo "$ko deja charge"; continue; fi + modprobe "$ko" 2>/dev/null + if ! charge "$ko"; then + kof=$(find /lib/modules /usr/lib/modules -name "$ko.ko" 2>/dev/null | head -1) + [ -n "$kof" ] && /sbin/insmod "$kof" 2>/dev/null fi + if charge "$ko"; then echo "$ko charge"; else echo "$ko : ECHEC (introuvable ou incompatible)"; fi done # Laisse le temps a udev de creer le device si le cable est deja branche.