2 votes

La construction factice échoue avec "sh: /usr/bin/python2: Aucun fichier ou dossier de ce type" même si le fichier existe

Je suis en train d'essayer d'installer tornado en utilisant mock, à partir du rpm source, dans un conteneur lxc Centos 7 :

mock -r epel-7-x86_64 python-tornado-4.4.2-3.fc26.src.rpm

Tout semble bien se passer jusqu'à ce qu'il s'arrête avec l'erreur ci-dessous. J'ai vérifié que le fichier existe :

# which python2
/usr/bin/python2

Voici l'erreur complète :

Finish: chroot init
Start: build phase for python-tornado-4.4.2-3.fc26.src.rpm
Start: build setup for python-tornado-4.4.2-3.fc26.src.rpm
sh: /usr/bin/python2: Aucun fichier ou dossier de ce type
sh: /usr/bin/python2: Aucun fichier ou dossier de ce type
Construction des plates-formes cibles : x86_64
Construction pour la cible x86_64
Écrit : /builddir/build/SRPMS/python-tornado-4.4.2-3.el7.centos.src.rpm
Obtention des exigences pour python-tornado-4.4.2-3.el7.centos.src
 --> python-devel-2.7.5-48.el7.x86_64
 --> python2-backports_abc-0.5-1.el7.noarch
 --> python-backports-ssl_match_hostname-3.4.0.2-4.el7.noarch
Erreur : Aucun paquet trouvé pour python2-singledispatch
ERREUR : Exception(/root/share/python-tornado-4.4.2-3.fc26.src.rpm) Config(epel-7-x86_64) 0 minutes 25 seconds
INFO : Résultats et/ou journaux dans : /var/lib/mock/epel-7-x86_64/result
ERREUR : La commande a échoué : 
 # /usr/bin/yum-builddep --installroot /var/lib/mock/epel-7-x86_64/root/ --releasever 7 /var/lib/mock/epel-7-x86_64/root//builddir/build/SRPMS/python-tornado-4.4.2-3.el7.centos.src.rpm --setopt=tsflags=nocontexts
Obtention des exigences pour python-tornado-4.4.2-3.el7.centos.src
 --> python-devel-2.7.5-48.el7.x86_64
 --> python2-backports_abc-0.5-1.el7.noarch
 --> python-backports-ssl_match_hostname-3.4.0.2-4.el7.noarch
Erreur : Aucun paquet trouvé pour python2-singledispatch

Voici la sortie de build.log :

Version Mock : 1.3.3
ENTRER ['do'](['bash', '--login', '-c', '/usr/bin/rpmbuild -bs --target x86_64 --nodeps /builddir/build/SPECS/python-tornado.spec'], chrootPath='/var/lib/mock/epel-7-x86_64/root'shell=FalseprintOutput=Trueenv={'LANG': 'en_IE.UTF-8', 'TERM': 'vt100', 'SHELL': '/bin/bash', 'HOSTNAME': 'mock', 'PROMPT_COMMAND': 'printf "\\033]0;\\007"', 'HOME': '/builddir', 'PATH': '/usr/bin:/bin:/usr/sbin:/sbin', 'PS1': ' \\s-\\v\\$ '}gid=135user='mockbuild'timeout=0logger=uid=0)
Exécution de la commande : ['bash', '--login', '-c', '/usr/bin/rpmbuild -bs --target x86_64 --nodeps /builddir/build/SPECS/python-tornado.spec'] avec env {'LANG': 'en_IE.UTF-8', 'TERM': 'vt100', 'SHELL': '/bin/bash', 'HOSTNAME': 'mock', 'PROMPT_COMMAND': 'printf "\\033]0;\\007"', 'HOME': '/builddir', 'PATH': '/usr/bin:/bin:/usr/sbin:/sbin', 'PS1': ' \\s-\\v\\$ '} et shell False
sh: /usr/bin/python2: Aucun fichier ou dossier de ce type
sh: /usr/bin/python2: Aucun fichier ou dossier de ce type
Construction des plates-formes cibles : x86_64
Construction pour la cible x86_64
Écrit : /builddir/build/SRPMS/python-tornado-4.4.2-3.el7.centos.src.rpm
Code de retour enfant : 0

Une idée pourquoi il ne peut pas trouver python2? Ou est-ce que l'erreur est en fait complètement différente? Merci !

rpm -qa | grep python-singledispatch
python-singledispatch-3.4.0.2-2.el7.noarch

0voto

Nagev Points 265

La réponse a été fournie dans les commentaires. Juste pour le compléter, j'ai trouvé la bonne source RPM de tornade pour CentOS 7 sur https://centos.pkgs.org/7/epel-x86_64/python34-tornado-4.4.2-1.el7.x86_64.rpm.html. Celui qui donnait l'erreur était pour Fedora (le site que j'avais utilisé précédemment n'en avait pas pour CentOS).

Maintenant, cela fonctionne :

mock -r epel-7-x86_64 python3-tornado-4.4.2-1.el7.src.rpm

Le message d'erreur était trompeur.

0voto

carlwgeorge Points 329
  • sh: /usr/bin/python2: Aucun fichier ou dossier de ce type

Il s'agit simplement d'un avertissement et n'arrête pas l'exécution. Cela se produit lorsque qu'une macro du fichier spec tente d'exécuter une commande python avant que python ne soit installé dans le chroot mock.

  • Erreur: Aucun paquet trouvé pour python2-singledispatch

C'est le problème réel. Fedora a modifié sa politique de packaging Python depuis EL7. En gros, maintenant vous avez des versions python2-$x et python3-$x des paquets, et le nom non versionné python-$x est fourni par le paquet python2-$x. À un moment donné, cela changera et python3-$x fournira python-$x. Le fichier spec de tornado de F26 avait un besoin de python2-singledispatch, qui n'est fourni par rien dans EL7. Une solution qui pourrait être suggérée au mainteneur de Fedora est d'encadrer le "2" dans une condition qui ne s'étend que sur Fedora, comme ceci : python%{?fedora:2}-singledispatch. Cela s'étendrait à python2-singledispatch sur Fedora, mais à python-singledispatch sur CentOS, ce qui est le comportement souhaité.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X