ce tuto fait suite à HA déporter les clés USB, nous allons automatiser tout le processus.

On retourne sur le serveur, le Raspberry pi

Pour charger les modules il suffit d’éditer le fichier suivant /etc/modules et d’y ajouter ces 2 lignes :

usbip-core
usbip-host

Pour éditer le fichier avec nano :

sudo nano /etc/modules
Voici le contenu de mon fichier après la modification

Pour enregistrer dans nano il faut faire CTRL+O
Pour Quitter : CTRL+X

Ensuite tu vas modifier le fichier /etc/rc.local en ajoutant ces 2 lignes avant la ligne exit 0 :

/usr/sbin/usbipd -D
/usr/sbin/subip bind --busid=1-1.2

Pense à remplace 1-1.2 par le BUSID qui t’intéresse !

sudo nano /etc/rc.local
Contenu du fichier après modification

Tu viens de faire le nécessaire pour que tout se charge au démarrage du Pi mais si jamais tu redémarre il faudrait faire un unbind histoire de mettre au courant le client que le périphérique n’est plus dispo et qu’il puisse le récupérer dès que possible.

Pour ça tu vas créer un service, qui sera aussi démarré au boot du Pi mais qui n’aura qu’une action en cas d’arrêt du service .

sudo nano /etc/systemd/system/usbipunbind.service

Voici le contenu du fichier à créer, pense bien à modifier le BUSID, ici le 1-1.2:

[Unit]
Description=USBIP unbind
[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/bin/true
ExecStop=/usr/sbin/usbip unbind –-busid=1-1.2

[Install]
WantedBy=multi-user.target

Maintenant que le fichier est créé on active le service et on le démarre, la 3ème ligne permet de vérifier qu’il est bien lancé:

sudo systemctl enable /etc/systemd/system/usbipunbind.service
sudo systemctl start usbipunbind.service
sudo systemctl status usbipunbind.service
Retour du statut du service

Une bonne chose de faite, le serveur est normalement opérationnel, n’hésite pas à tester : un petit reboot et vérifier que la commande list -l retourne quelque chose, sans autre action de ta part, pour rappel :

sudo usbip list -l

Le client : Debian

Comme pour le serveur, on édite le fichier /etc/modules pour charger les modules :

usbip-core
vhci-hcd

sudo nano /etc/modules
Contenu après modification

Ensuite tu vas créer un script qui vérifie si le serveur est dispo et qui va gérer les commandes detach ou attach

Ce script n’est pas de moi mais de Ricobelo qui l’a posté sur les forums de la communauté Jeedom

sudo nano /usr/local/sbin/usbipzigbee.sh

Contenu du fichier, il faut modifier les 2 variables, SERVER doit avoir l’IP du Raspberry Pi et BUSID doit avoir l’ID de ta clé USB :

#!/bin/bash

ENDLESS=true
LANG=C
SERVER='1.2.3.4'
BUSID='1-1.2'

trap_exit() {
    ENDLESS=false
    for PORT in $(/usr/sbin/usbip port | /usr/bin/grep ^Port | /usr/bin/cut -d':' -f1 | /usr/bin/awk '{print$2}'); do
        /usr/sbin/usbip detach -p $PORT
    done
    exit 0
}

trap trap_exit SIGINT
trap trap_exit SIGTERM
trap trap_exit SIGKILL

while $ENDLESS; do
    if ! /usr/sbin/usbip port | /usr/bin/grep "usbip:.*${SERVER}.*${BUSID}$" &> /dev/null; then
        /usr/sbin/usbip attach -r ${SERVER} -b ${BUSID}
    fi
    sleep 30
done

trap_exit

une fois sauvegardé, il faut donner les droits d’exécution :

sudo chmod +x /usr/local/sbin/usbipzigbee.sh

Il ne reste plus qu’à créer un service qui va appeler ce script

sudo nano /etc/systemd/system/usbip.service

le contenu :

[Unit]
Description=USBIP Monte
After=default.target

[Service]
ExecStart=/usr/local/sbin/usbipzigbee.sh

[Install]
WantedBy=default.target

Pour les dernières lignes, il suffit d’activer le service et de le démarrer !

sudo systemctl enable /etc/systemd/system/usbip.service
sudo systemctl start usbip.service
sudo systemctl status usbip.service
Voila se que tu dois avoir suite à la dernière ligne: status

Oufff, tu y es, c’est fini ! :D, une petite bière et fais quelques tests de reboot 😉