Broadlink - Dépendances Dead après maj vers Buster - module python3 cryptography

Salut,

Depuis que j’ai migré ma smart vers Buster (et vers Jeedom v4.1.17), impossible d’arriver à faire fonctionner le plugin Broadlink. Les dépendances sont KO malgré mes multiples tentatives.

Le log :

********************************************************
*             Installation des dépendances             *
********************************************************
Hit:1 http://security.debian.org/debian-security buster/updates InRelease
Hit:2 http://ftp.uk.debian.org/debian buster InRelease
Hit:4 http://www.deb-multimedia.org buster InRelease
Hit:5 http://ftp.uk.debian.org/debian buster-updates InRelease
Hit:6 https://oph.mdrjr.net/meveric all InRelease
Hit:7 https://oph.mdrjr.net/meveric buster InRelease
Err:3 https://repo.jeedom.com/odroid stable InRelease
502  Bad Gateway [IP: 51.178.69.128 443]
Reading package lists...
W: Failed to fetch http://repo.jeedom.com/odroid/dists/stable/InRelease  502  Bad Gateway [IP: 51.178.69.128 443]
W: Some index files failed to download. They have been ignored, or old ones used instead.
Reading package lists...
Building dependency tree...
Reading state information...
libffi-dev is already the newest version (3.2.1-9).
python3-serial is already the newest version (3.4-4).
python3-pip is already the newest version (18.1-5).
python3-setuptools is already the newest version (40.8.0-1).
python3-dev is already the newest version (3.7.3-1).
python3-pyudev is already the newest version (0.21.0-1).
python3-requests is already the newest version (2.21.0-1).
libudev-dev is already the newest version (241-7~deb10u5).
libssl-dev is already the newest version (1.1.1d-0+deb10u4).
0 upgraded, 0 newly installed, 0 to remove and 86 not upgraded.
Requirement already satisfied: wheel in /usr/local/lib/python3.7/dist-packages (0.36.2)
Reading package lists...
Building dependency tree...
Reading state information...
Package 'python3-cryptography' is not installed, so not removed
0 upgraded, 0 newly installed, 0 to remove and 86 not upgraded.
Uninstalling cryptography-3.3.1:
Would remove:
/usr/local/lib/python3.7/dist-packages/cryptography-3.3.1.dist-info/*
/usr/local/lib/python3.7/dist-packages/cryptography/*
Proceed (y/n)? Exception:
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/pip/_internal/cli/base_command.py", line 143, in main
status = self.run(options, args)
File "/usr/lib/python3/dist-packages/pip/_internal/commands/uninstall.py", line 75, in run
auto_confirm=options.yes, verbose=self.verbosity > 0,
File "/usr/lib/python3/dist-packages/pip/_internal/req/req_install.py", line 683, in uninstall
uninstalled_pathset.remove(auto_confirm, verbose)
File "/usr/lib/python3/dist-packages/pip/_internal/req/req_uninstall.py", line 217, in remove
if auto_confirm or self._allowed_to_proceed(verbose):
File "/usr/lib/python3/dist-packages/pip/_internal/req/req_uninstall.py", line 255, in _allowed_to_proceed
return ask('Proceed (y/n)? ', ('y', 'n')) == 'y'
File "/usr/lib/python3/dist-packages/pip/_internal/utils/misc.py", line 167, in ask
response = input(message)
EOFError: EOF when reading a line
Requirement already satisfied: cryptography in /usr/local/lib/python3.7/dist-packages (3.3.1)
Requirement already satisfied: six>=1.4.1 in /usr/lib/python3/dist-packages (from cryptography) (1.12.0)
Requirement already satisfied: cffi>=1.12 in /usr/local/lib/python3.7/dist-packages (from cryptography) (1.14.4)
Requirement already satisfied: pycparser in /usr/local/lib/python3.7/dist-packages (from cffi>=1.12->cryptography) (2.20)
Requirement already satisfied: cryptography in /usr/local/lib/python3.7/dist-packages (3.3.1)
Requirement already satisfied: cffi>=1.12 in /usr/local/lib/python3.7/dist-packages (from cryptography) (1.14.4)
Requirement already satisfied: six>=1.4.1 in /usr/lib/python3/dist-packages (from cryptography) (1.12.0)
Requirement already satisfied: pycparser in /usr/local/lib/python3.7/dist-packages (from cffi>=1.12->cryptography) (2.20)
Requirement already satisfied: pycrypto in /usr/local/lib/python3.7/dist-packages (2.6.1)
Requirement already satisfied: pyudev in /usr/lib/python3/dist-packages (0.21.0)
Requirement already satisfied: requests in /usr/local/lib/python3.7/dist-packages (2.25.1)
Requirement already satisfied: chardet<5,>=3.0.2 in /usr/local/lib/python3.7/dist-packages (from requests) (4.0.0)
Requirement already satisfied: idna<3,>=2.5 in /usr/local/lib/python3.7/dist-packages (from requests) (2.10)
Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.7/dist-packages (from requests) (2020.12.5)
Requirement already satisfied: urllib3<1.27,>=1.21.1 in /usr/local/lib/python3.7/dist-packages (from requests) (1.26.2)
********************************************************
*             Installation terminée                    *
********************************************************

On voit qu’il y a un soucis avec :

Err:3 https://repo.jeedom.com/odroid stable InRelease
502  Bad Gateway [IP: 51.178.69.128 443]
Reading package lists...
W: Failed to fetch http://repo.jeedom.com/odroid/dists/stable/InRelease  502  Bad Gateway [IP: 51.178.69.128 443]
W: Some index files failed to download. They have been ignored, or old ones used instead.

et ça :

Uninstalling cryptography-3.3.1:
Would remove:
/usr/local/lib/python3.7/dist-packages/cryptography-3.3.1.dist-info/*
/usr/local/lib/python3.7/dist-packages/cryptography/*
Proceed (y/n)? Exception:
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/pip/_internal/cli/base_command.py", line 143, in main
status = self.run(options, args)
File "/usr/lib/python3/dist-packages/pip/_internal/commands/uninstall.py", line 75, in run
auto_confirm=options.yes, verbose=self.verbosity > 0,
File "/usr/lib/python3/dist-packages/pip/_internal/req/req_install.py", line 683, in uninstall
uninstalled_pathset.remove(auto_confirm, verbose)
File "/usr/lib/python3/dist-packages/pip/_internal/req/req_uninstall.py", line 217, in remove
if auto_confirm or self._allowed_to_proceed(verbose):
File "/usr/lib/python3/dist-packages/pip/_internal/req/req_uninstall.py", line 255, in _allowed_to_proceed
return ask('Proceed (y/n)? ', ('y', 'n')) == 'y'
File "/usr/lib/python3/dist-packages/pip/_internal/utils/misc.py", line 167, in ask
response = input(message)
EOFError: EOF when reading a line

J’ai essayé de forcer l’install de cryptography au cas où avec :

pip3 install -U " cryptography>3.0 "

J’ai essayé plusieurs reboot, relancer les dépendances, forcer la maj du plugin, mais rien n’y fait :

image

Si quelqu’un a une idée, merci d’avance :wink:

En attendant j’ai désactivé le plugin parce qu’il relance tout seul en boucle l’installation des dépendances (toutes les x minutes).

Bonjour,

La réponse qui suit n’est pas une solution mais un début d’investigation du problème :

A ce stade, pour le plugin broadlink officiel en version 2020-11-24,
le démon démarre avec les images officielles https://images.jeedom.com,
rpi et x86-64 mais pas avec la smart, les dépendances restent en statut NOK

Extrait du script d’installation des dépendances du plugin :
(/var/www/html/plugins/broadlink/resources/install_apt.sh)

sudo apt-get update
echo 50 > ${PROGRESS_FILE}
sudo apt-get install -y python3-pip python3-dev python3-pyudev libudev-dev python3-setuptools python3-serial python3-requests libffi-dev libssl-dev
sudo pip3 install wheel
sudo apt-get remove -y python3-cryptography
sudo pip3 uninstall cryptography
sudo pip3 install cryptography
sudo pip3 install cryptography
sudo pip3 install pycrypto
sudo pip3 install pyudev
sudo pip3 install requests

L’extrait de l’erreur dans ta log :

Uninstalling cryptography-3.3.1:
[…]
Proceed (y/n)? Exception:
Traceback (most recent call last):
[…]
EOFError: EOF when reading a line

est dû dans le script d’install à la ligne :

sudo pip3 uninstall cryptography

Si on lance cette commande dans Jeedom dans Réglages > Systèmes > configuration > OS/DB > Admin Sys
(cela déclenche aussi une « Exception » après la question « Proceed (y/n)? »)

Si on lance cette commande en SSH :
(en répondant manuellement oui à la question : Proceed (y/n)? y)

La désinstallation s’effectue bien.

Si on ajoute un « -y » dans la ligne de commande du script d’install :

sudo pip3 uninstall -y cryptography

L’erreur d’exception ne se produit plus mais les dépendances restent toujours en statut NOK alors que le script d’install s’est correctement terminé.

Le problème semble être lié à une spécificité de l’image de la smart au regard du core Jeedom et du plugin broadlink. A creuser.

akenad :slight_smile:

Merci pour ce début d’investigation @akenad .
J’espère qu’on trouvera rapidement une solution à ce soucis, car c’est plutôt fastidieux de devoir repasser en Strech.

Effectivement avec ta modif (le -y) la désinstallation de cryptography se termine correctement.
Mais bon j’étais déjà dans la bonne version (3.3.1) et c’est donc la même version qui est ensuite ré-installée.

Le pb ne pourrait-il pas venir de ça ? :

Err:3 https://repo.jeedom.com/odroid stable InRelease
502  Bad Gateway [IP: 51.178.69.128 443]
Reading package lists...
W: Failed to fetch http://repo.jeedom.com/odroid/dists/stable/InRelease  502  Bad Gateway [IP: 51.178.69.128 443]
W: Some index files failed to download. They have been ignored, or old ones used instead.

Car cette erreur est apparue depuis Buster il me semble.

Non, voir la fin de mon post ici : [RTEX] Jeedom Smart Recovery mode - passage en Buster Jeedom V4

akenad :slight_smile:

Ok, effectivement.
On reste donc dans le flou sur ce qui empêche les dépendances d’être installées (ou d’être détectées comme installées par le plugin) vu que tout est ok dans le log d’installation…

Pour info, je n’ai pas le plugin mais voilà ce qui renvoie le Ok ou NOK, d’après la fonction depandancy_info du plugin:

if (exec('sudo pip list | grep -E "pycrypto" | wc -l') < 1) {
			$return['state'] = 'nok';
		}

Merci ! :wink:
J’ai commenter la ligne et ça marche nickel :

		$return['state'] = 'ok';
		if (exec('sudo pip list | grep -E "pycrypto" | wc -l') < 1) {
			//$return['state'] = 'nok';
		}
		return $return;

Le démon se lance et tout marche au poil :slight_smile:

le pb vient donc de

sudo pip list | grep -E "pycrypto" | wc -l

qui retourne 0 à tord :

Et effectivement pycrypto n’est pas dans la liste des packages :

sudo pip list

alors que :

Requirement already satisfied: pycrypto in /usr/local/lib/python3.7/dist-packages (2.6.1)

image

Bref, ça marche en ignorant la verif des dépendances mais le pb vient bien de là.

edit: si je force à nouveau l’install du package :

OK voici donc la solution je pense sans avoir à modifier le check du démon.
Il faut désinstaller et réinstaller pycrypto :

image

Et là tout roule.
Il faudrait donc ajouter je pense dans le script d’install des dépendances du plugin :

sudo pip3 uninstall -y pycrypto

juste avant

sudo pip3 install pycrypto

(et modifier également sudo pip3 uninstall cryptography par sudo pip3 uninstall -y cryptography comme l’a suggéré @akenad

edit: en fait non toujours pas de pycrypto dans sudo pip list pourtant mon démon est ok avec le plugin non modifié, étrange…

Solution pour avoir dépendances OK :

Outre le « -y » à ajouter dans le script d’install des dep :

sudo pip3 uninstall -y cryptography

dans /var/www/html/plugins/broadlink/core/class/broadlink.class.php
dans la fonction dependancy_info()
il faut remplacer

sudo pip list

par

sudo pip3 list

Explication :

Dans les images officielles Buster https://images.jeedom.com,
rpi et x86-64 possèdent le module python2 « pycrypto » mais pas la Smart.

Le plugin broadlink officiel en version 2020-11-24 utilise python3.
II n’utilise plus python2, néanmoins il persiste toujours un test dans la fonction dependancy_info() exposée par le plugin qui remonte un dépendance NOK au core sur une non existence du module « pycrypto » dans sa version python2, alors qu’en fait le plugin ne l’utilise plus.

akenad :slight_smile:

1 « J'aime »

Bien ouej :slightly_smiling_face:
Le dev devrait peut-être ajouter un || pour que ça fonctionne sur tous les devices (tester avec pip or pip3)

edit: ma remarque n’a plus aucun sens après l’edit (et l’explication détaillée) de la cause du pb dans le post de akenad ci-dessus. Il suffit donc bien de remplacer pip par pip3 pour tout le monde.

Merci à Loïc qui a pris en compte sur github ce matin mes 2 propositions de modification.

akenad :slight_smile:

Merci à Loïc en effet, mais merci aussi à dJuL et surtout à toi, akenad, qui a parfaitement analysé et largement contribué à solutionner le problème ! Ce que j’aurais été incapable de faire… Me trouvant moi aussi confronté à ce satané plugin Broadlink qui relançait sans arrêt l’installation de ses dépendances sans jamais arriver à les afficher OK et que j’ai vu que des gars bien plus calés que moi discutaient de la question, je n’ai pas voulu rouvrir un autre sujet et j’ai suivi avec attention votre discussion…
Quelle merveille d’avoir des gens comme vous au sein de cette Communauté Jeedom !
Bibibe :smiley: :smiley: :smiley: :heart_eyes:

1 « J'aime »

Bonjour,

Je me permet de remonter ce sujet.

Je pense avoir un soucie similaire mais pas exactement le meme.
Je viens d’effectuer la dernière mise à jour de Jeedom (Debian GNU/Linux 10 (buster) 64bits (aarch64))
Suite à cela, impossible de lancer le demon du broadlink.

Voici mon Log :

[2021-02-09 10:50:11][ERROR] : Attention je pense qu'il y a un soucis avec le démon que j'ai relancé plus de 3 fois consécutivement
[2021-02-09 10:50:13][INFO] : Lancement démon broadlink : sudo /usr/bin/python3 /var/www/html/plugins/broadlink/resources/broadlinkd/broadlinkd.py --loglevel debug --socketport 55013 --sockethost 127.0.0.1 --callback http://127.0.0.1:80/plugins/broadlink/core/php/jeeBroadlink.php --apikey jqER2XUjqdiSdJWycLyVwvfEKY8Qd1qZ --cycle 0.3 --pid /tmp/jeedom/broadlink/deamon.pid
Traceback (most recent call last):
File "/var/www/html/plugins/broadlink/resources/broadlinkd/broadlinkd.py", line 33, in <module>
from broadlink import broadlink,rm2,a1,mp1,sp2,rm4
File "/var/www/html/plugins/broadlink/resources/broadlinkd/broadlink/broadlink.py", line 12, in <module>
from cryptography.hazmat.backends import default_backend
ModuleNotFoundError: No module named 'cryptography'

Je ne suis pas expert dans la domotique, il est compliquer pour moi de me lancer dans Des lignes de code.
Pouvez-vous m’aider?
Merci.

Salut Nico59,

j’ai exactement le même soucis que toi, est ce que tu as trouvé une solution? en utilisant jeexplorer et en commentant les lignes du log j’arrive à avoir tout au vert mais rien ne fonctionne au niveau des commandes…j’ai épluché tous les post mais là je sèche complet !

Au niveau des dépendances ca bloque au niveau de Rust compiler et cryptography …

Je me répond à moi-même, voici la solution pour notre soucis Nico59 :

Salut fleaux,

ça marche!
Merci pour ton aide.

Bonjour,

Même problème d’un jeedom 4.1.19 sur buster (VM sur Synology) avec broadlink

j’ai suivi la procédure indiquée (copier les fichiers broadlink via jeexplorer dans mon Jeedom.
Messages d’erreurs sur les .htaccess et puis, rien ne se passe.
Toujours le même blocage de broadlink.
Toujours la même consigne de procéder à : /bin/bash /var/www/html/plugins/broadlink/core/class/…/…/resources/install_apt.sh /tmp/jeedom/broadlink/dependance
qui ne résoud rien.

Qulequ’un auarit une idée pour décoincer ?
Merci pour votre aide