From 983cff3ec5e4b944f352118bf6e30749feb014d9 Mon Sep 17 00:00:00 2001 From: Tallagrand Thierry Date: Thu, 24 Sep 2026 13:18:17 +0200 Subject: [PATCH] charger-pilotes : chargement verifie par lsmod + commande via sh (noexec NFS) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Deux defauts vus au retour de l'update 7.4.1 : - le montage NFS du depot est noexec, donc la tache DSM qui appelait le chemin nu du script donnait « Permission denied » et ne chargeait rien. Commande corrigee en `sh ` (lit le script au lieu de l'executer). - la boucle faisait confiance au code retour de modprobe (0 sans charger sur DSM). Elle verifie maintenant l'etat reel via lsmod apres chaque tentative. Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_01GwpFpy2aQ2rJok6tNQSbVj --- deploy/releve-cellules/README.md | 6 +++++- deploy/releve-cellules/charger-pilotes.sh | 24 +++++++++++------------ 2 files changed, 16 insertions(+), 14 deletions(-) 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.