Bonjour à tous, c’est akenad ,
Aujourd’hui je vais vous présenter un retour d’expérience sur l’installation des dépendances du plugin-zigbee sur Raspberry Pi OS 32-bit (architecture armhf/armv7l).
A ma connaissance le dev du plugin zigbee le met au point en premier lieu sur une VM Bullseye (architecture x86_64/amd64), on peut donc potentiellement s’attendre à quelques difficultés sur l’installation des dépendances associées dans d’autres cas d’usages (Buster, Smart, Atlas, RPi …).
Fourniture du log d’installation des dépendances :
/!\ ATTENTION : point important en premier lieu :
Pour arriver à analyser ce qui se passe dans certains cas il est nécessaire d’avoir le log d’installation complète.
Lorsque l’installation des dépendances du plugin zigbee se passe bien cela génère déjà beaucoup de lignes de log (dans fichier zigbee_packages), au moins 1500 lignes de log et bien plus s’il y a des problèmes.
Pour que la totalité du log soit visible il convient d’augmenter le paramètre
« Nombre de lignes maximum dans un fichier de log » par défaut :
Réglages > Système > Configuration > Logs > Logs
(accès direct http://ipjeedom/index.php?v=d&p=administration#log_log )
Mettre 5000.
Puis lancer l’installation des dépendances.
Pour accéder au log d’installation des dépendances du plugin zigbee, cliquer sur le bouton bleu « Zigbee_packages » et attendre que l’install se termine. Cliquer sur le bouton vert « Télécharger » en haut à droite dans la fenêtre Log du plugin. Renommer le fichier en zigbee_packages.txt. Joindre le fichier dans un post.
Il est impératif de fournir une log complète,
Le fichier doit commencer par :
+ echo '*******************Begin of package installation******************'
*******************Begin of package installation******************
et se terminer par :
+ echo '*******************End of package installation******************'
*******************End of package installation******************
Je n’ai pas rencontré de problème en flashant sur un RPI3B+ la dernière image jeedom (jeedom-debian-buster-rpi-4.3.8.zip, du 01/11/2022, buster 10.13) dans Index of /rpi) ou la dernière image RasberryPi (2022-09-22-raspios-bullseye-armhf-lite.img.xz, bullseye 11.5) dans Index of /raspios_lite_armhf/images et en utilisant le plugin-zigbee du 20/10/2022.
Sur un RPI3B+ avec les images citées, l’installation des dépendances du plugin zigbee (rust et cryptography inclus) prend environ 30 minutes.
Donc le mieux serait d’utiliser une de ces 2 images.
Certains jeedomiens semblent rencontrer des problèmes liés au paquet python3 cryptography, mais je n’ai pas connaissance à ce stade de l’origine de l’image qu’ils ont pu utiliser.
Le plugin zigbee utilise en dépendances des paquets python3 (dont par exemple le paquet python3 zigpy) qui ont eux mêmes en dépendance le paquet python3 cryptography.
L’installation des dépendances du plugin zigbee ne pourra être OK que si cryptography est installé.
Pour installer cryptography, pip3 utilise le compilé ou à défaut le source dans ses index : Links for cryptography et piwheels - Links for cryptography
pypi.org héberge le source (.tar.gz) et le compilé (.whl) pour les archi Linux x86_64 (amd64) et aarch64 (arm64).
piwheels.org héberge le compilé (.whl) pour les archi Linux RPi (armhf, armv7l et armv6l)
Plusieurs versions de la librairie cryptography existent, et s’agissant du RPi, avec OS 32-bit, certaines versions cryptography existent en compilé et d’autres pas.
Actuellement ont peut voir dans le log d’installation du plugin-zigbee (zigbee_packages) que pip3 cherche à installer cryptography 38.0.3, plus exactement, pip3 cherche à installer cryptography-38.0.3-cp37-cp37m-linux_armv7l.whl qui n’existe pas à ce jour dans piwheels - Links for cryptography .
(alors qu’avec Raspberry Pi OS 64-bit qui est une architecture « aarch64 », cryptography-38.0.3-cp36-abi3-manylinux_2_28_aarch64.whl existe dans Links for cryptography)
pip3 cherche donc à fabriquer le fichier cryptography-38.0.3-cp37-cp37m-linux_armv7l.whl en compilant le source cryptography-38.0.3.tar.gz avec le compilateur rust.
Lorsque tout ce passe bien rust est installé lors de l’installation des dépendances du plugin zigbee.
Mais l’installation de rust ne se passe pas bien chez certains jeedomiens.
Pour eux cryptography-38.0.3.tar.gz n’est pas compilé car rust ne semble pas avoir été installé.
(Nota : pour voir et éditer des fichiers dans /var/www/html/plugins,
aller dans Réglages > Système > Editeur de fichiers)
L’installation des dépendances par le core jeedom est réalisée à partir du fichier plugins/zigbee/plugin_info/packages.json :
{
"pre-install" : {
"script" : "plugins/zigbee/resources/pre-install.sh"
},
"apt" : {
"python3" : {},
"python3-pip" : {},
"python3-pyudev" : {},
"python3-dev" : {},
"python3-requests" : {},
"libffi-dev" : {}
},
"pip3" : {
"setuptools" : {"reinstall" : true},
"wheel" : {"reinstall" : true},
"six" : {"reinstall" : true},
"pyudev" : {"reinstall" : true},
"requests" : {"reinstall" : true},
"pyserial" : {"reinstall" : true},
"tornado" : {"reinstall" : true},
"zha-quirks" : {"reinstall" : true,"version" :"0.0.80"},
"zigpy-znp" : {"reinstall" : true,"version" :"0.8.2"},
"zigpy-xbee" : {"reinstall" : true,"version" :"0.15.0"},
"zigpy-deconz" : {"reinstall" : true,"version" :"0.18.1"},
"zigpy-zigate" : {"reinstall" : true,"version" :"0.9.2"},
"bellows" : {"reinstall" : true,"version" :"0.33.1"},
"zigpy" : {"reinstall" : true,"version" :"0.50.3"},
"xmodem" : {"reinstall" : true},
"pycrypto" : {"reinstall" : true},
"charset-normalizer" : {"reinstall" : true,"version":"2.0.12"},
"yarl" : {"reinstall" : true,"version":"1.4.2"}
},
"post-install" : {
"script" : "plugins/zigbee/resources/post-install.sh"
}
}
On peut remarquer en passant que certains paquets python3 seront installés dans leur dernière version disponible alors que d’autres ont leur version figée, ce qui peut potentiellement provoquer à terme des incompatibilités ou des conflits de versions entre eux lors d’une reinstallation des dépendances du plugin et se retrouver avec un statut dépendances « NOK ».
Un extrait de la fin du fichier plugins/zigbee/resources/pre-install.sh concernant l’installation de rust :
sudo apt remove -y rustc
sudo apt remove -y cargo
sudo curl -o rustup.sh -sSf https://sh.rustup.rs
sudo chmod +x rustup.sh
sudo ./rustup.sh -y
sudo rm rustup.sh
sudo ln -s /root/.cargo/bin/rustc /usr/bin/rustc
sudo ln -s /root/.cargo/bin/cargo /usr/bin/cargo
Un extrait de la fin du fichier plugins/zigbee/resources/post-install.sh concernant l’installation de rust :
echo 'Cleaning rustc'
sudo rm -rf /usr/bin/rustc
sudo rm -rf /usr/bin/cargo
sudo rm -rf /root/.cargo
echo "Everything is successfully installed!"
Le problème semble se situer dans l’exécution des scripts pre-install.sh ou post-install.sh.
A noter par ailleurs qu’à chaque lancement de l’installation des dépendances, le core jeedom purge le cache pip3 et désinstalle et installe chaque paquet python3 de packages.json (et leurs dépendances), ainsi que rust, ce qui peut d’ailleurs engendrer des effets collatéraux si rust était déjà installé sur la machine pour un autre usage que pour le plugin-zigbee.
Voici un exemple de log d’installation OK des dépendances du plugin zigbee, fichier zigbee_packages complet, pour un RPi3B+, flashé avec l’image jeedom, et la version du plugin zigbee indiquées au début de l’article :
zigbee_packages-RPi3Bplus-image-jeedom-4.3.8-rpi-debian-buster-10.13-plugin-zigbee-20102022.txt (72,8 Ko)
la bonne installation des dépendances est vérifiable dans Réglages > Système > Configuration > OS/DB > Vérification des packages système :
pour la partie pip3 :
et dans la configuration du plugin :
Lors d’investigations sur un problème de dépendances il est préférable de désactiver la gestion automatique des Dépendances et du Démon en cliquant sur le bouton rouge « Désactiver ».
Dans cet exemple, le compilateur rust est correctement installé, dans le log :
info: downloading installer
info: profile set to 'default'
info: default host triple is armv7-unknown-linux-gnueabihf
info: syncing channel updates for 'stable-armv7-unknown-linux-gnueabihf'
info: latest update on 2022-11-03, rust version 1.65.0 (897e37553 2022-11-02)
info: downloading component 'cargo'
info: downloading component 'clippy'
info: downloading component 'rust-docs'
info: downloading component 'rust-std'
info: downloading component 'rustc'
info: downloading component 'rustfmt'
info: installing component 'cargo'
info: installing component 'clippy'
info: installing component 'rust-docs'
info: installing component 'rust-std'
info: installing component 'rustc'
info: installing component 'rustfmt'
info: default toolchain set to 'stable-armv7-unknown-linux-gnueabihf'
stable-armv7-unknown-linux-gnueabihf installed - rustc 1.65.0 (897e37553 2022-11-02)
Rust is installed now. Great!
To get started you may need to restart your current shell.
This would reload your PATH environment variable to include
Cargo's bin directory ($HOME/.cargo/bin).
To configure your current shell, run:
source "$HOME/.cargo/env"
+ echo 3
Lorsque rust (rustup ou rustc) n’est pas correctement installé on voit dans le log :
warning: Updating existing toolchain, profile choice will be ignored
ou
error: rustup could not choose a version of rustc to run, because one wasn't specified explicitly, and no default is configured.
ou
error: 'rustc' is not installed for the toolchain 'stable-armv7-unknown-linux-gnueabihf'
Un essai qui serait à faire c’est d’ajouter la ligne :
sudo ln -s /root/.cargo/bin/rustup /usr/bin/rustup
à la fin du fichier plugins/zigbee/resources/pre-install.sh
et ajouter les lignes
sudo rm -rf /usr/bin/rustup
et
sudo rm -rf /root/.rustup
à la fin du fichier plugins/zigbee/resources/post-install.sh
ce qui donne :
pour plugins/zigbee/resources/pre-install.sh :
sudo apt remove -y rustc
sudo apt remove -y cargo
sudo curl -o rustup.sh -sSf https://sh.rustup.rs
sudo chmod +x rustup.sh
sudo ./rustup.sh -y
sudo rm rustup.sh
sudo ln -s /root/.cargo/bin/rustc /usr/bin/rustc
sudo ln -s /root/.cargo/bin/cargo /usr/bin/cargo
sudo ln -s /root/.cargo/bin/rustup /usr/bin/rustup
et pour plugins/zigbee/resources/post-install.sh :
echo 'Cleaning rustc'
sudo rm -rf /usr/bin/rustc
sudo rm -rf /usr/bin/cargo
sudo rm -rf /root/.cargo
sudo rm -rf /usr/bin/rustup
sudo rm -rf /root/.rustup
echo "Everything is successfully installed!"
(évidemment ces modifications seront écrasées à la prochaîne mise à jour du plugin)
et de lancer une premiere fois l’installation des dépendances du plugin, d’attendre la fin, et de relancer une 2 ième fois.
avec un peu de chance le statut des dépendances passera de « NOK » à « OK ».
Si l’on ne souhaite pas que rust soit installé et désinstallé durant l’installation des dépendances, mettre en commentaire (avec #) dans plugins/zigbee/resources/pre-install.sh :
#sudo apt remove -y rustc
#sudo apt remove -y cargo
#sudo curl -o rustup.sh -sSf https://sh.rustup.rs
#sudo chmod +x rustup.sh
#sudo ./rustup.sh -y
#sudo rm rustup.sh
#sudo ln -s /root/.cargo/bin/rustc /usr/bin/rustc
#sudo ln -s /root/.cargo/bin/cargo /usr/bin/cargo
#sudo ln -s /root/.cargo/bin/rustup /usr/bin/rustup
et mettre en commentaire dans plugins/zigbee/resources/post-install.sh
#echo 'Cleaning rustc'
#sudo rm -rf /usr/bin/rustc
#sudo rm -rf /usr/bin/cargo
#sudo rm -rf /root/.cargo
#sudo rm -rf /root/.rustup
#sudo rm -rf /usr/bin/rustup
puis si l’on souhaite que rust soit installé manuellement (et donc pas désinstallé), utiliser SSH.
Pour accéder au RPi en SSH sous windows 10, par exemple,
télécharger putty.exe (64-bit x86) via https://www.putty.org
Le login/password dépend de l’origine de l’image (raspberry ou jeedom) qui a été flashée sur le RPi.
Depuis SSH, connecté avec un compte utilisateur :
Lancer les commandes :
$ sudo su -
# curl -o rustup.sh -sSf https://sh.rustup.rs
# chmod +x rustup.sh
# ./rustup.sh
puis taper touche « entrée » pour lancer l’installation.
(si besoin la désinstallation de rust peut se faire utlérieurement par la commande)
(# rustup self uninstall
)
(si besoin pour avoir plus d’informations, commande avec option verbose)
(# ./rustup.sh -v)
rustup ajoute /root/.cargo/bin dans le PATH, ce qui permet à root d’accéder directement aux commandes rustup, rustc et cargo.
Pour récupérer tout le contenu de la fenêtre PuTTY, cliquer droit sur le haut de la fenêtre et cliquer sur « Copy All to Clipboard », coller ensuite dans un fichier texte qui peut être posté le cas échéant.
Le problème de compilation nécessaire de cryptography avec rust peut apparaître sur d’autres plugins qui utilisent cryptography, tels que par exemple xiaomihome ou broadlink,
et voir aussi plus bas dans cet article : [RTEX] installation dépendances plugin-zigbee Raspberry Pi OS 32-bit armhf – Rust Cryptography - #33 par akenad
Voila j’espère que ce retour d’expérience sera utile aux membres Jeedom.
akenad