charger-pilotes : chargement verifie par lsmod + commande via sh (noexec NFS)
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 <chemin>` (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 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GwpFpy2aQ2rJok6tNQSbVj
This commit is contained in:
@@ -33,7 +33,11 @@ Automatiser via **Planificateur de taches DSM** -> tache declenchee
|
|||||||
« Au demarrage », **utilisateur = root** (onglet General, PAS un compte simple),
|
« Au demarrage », **utilisateur = root** (onglet General, PAS un compte simple),
|
||||||
commande :
|
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 <chemin>` lit le script au lieu de l'executer.
|
||||||
|
|
||||||
⚠️ **La tache DOIT tourner en root.** `insmod` exige root, et une mise a jour
|
⚠️ **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
|
DSM MAJEURE efface le sudo passwordless : constate le 24/09, DSM 7.3.2 -> 7.4.1 a
|
||||||
|
|||||||
@@ -32,21 +32,19 @@ fi
|
|||||||
# mise a jour DSM majeure (7.3 -> 7.4, 24/09) peut deplacer ou renommer les .ko.
|
# 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
|
# On tente modprobe (gere les dependances), sinon on cherche le .ko dans les
|
||||||
# arborescences de modules connues.
|
# 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
|
for ko in usbserial ftdi_sio; do
|
||||||
if /sbin/lsmod | grep -q "^$ko "; then
|
if charge "$ko"; then echo "$ko deja charge"; continue; fi
|
||||||
echo "$ko deja charge"
|
modprobe "$ko" 2>/dev/null
|
||||||
continue
|
if ! charge "$ko"; then
|
||||||
fi
|
kof=$(find /lib/modules /usr/lib/modules -name "$ko.ko" 2>/dev/null | head -1)
|
||||||
if command -v modprobe >/dev/null 2>&1 && modprobe "$ko" 2>/dev/null; then
|
[ -n "$kof" ] && /sbin/insmod "$kof" 2>/dev/null
|
||||||
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 ?)"
|
|
||||||
fi
|
fi
|
||||||
|
if charge "$ko"; then echo "$ko charge"; else echo "$ko : ECHEC (introuvable ou incompatible)"; fi
|
||||||
done
|
done
|
||||||
|
|
||||||
# Laisse le temps a udev de creer le device si le cable est deja branche.
|
# Laisse le temps a udev de creer le device si le cable est deja branche.
|
||||||
|
|||||||
Reference in New Issue
Block a user