#!/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 # usbserial AVANT ftdi_sio (dependance). On ne code PAS le chemin en dur : une # 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. 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 ?)" 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