5 votes

yum/rpm ne parvient pas à initialiser la bibliothèque NSS dans le chroot

J'effectue une mise à jour yum de CentOS 7.4 à CentOS 7.5. Lorsque nspr et nss soft-softoken reçoivent les mises à jour, je me retrouve avec l'erreur suivante :

yum update nspr
error: Failed to initialize NSS library
There was a problem importing one of the Python modules
required to run yum. The error leading to this problem was:

   cannot import name ts

Please install a package which provides this module, or
verify that the module is installed correctly.

It's possible that the above module doesn't match the
current version of Python, which is:
2.7.5 (default, Apr 11 2018, 07:36:10) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-28)]

If you cannot solve this problem yourself, please go to 
the yum faq at:
  http://yum.baseurl.org/wiki/Faq

Les paquets qui sont mis à jour pour :

nss                         3.34.0-4.el7                                           
nss-softokn                 3.34.0-2.el7                                           
nss-softokn-freebl          3.34.0-2.el7                                           
nss-sysinit                 3.34.0-4.el7                                           
nss-tools                   3.34.0-4.el7                                           
nss-util                    3.34.0-2.el7  

Tentatives de dépannage : Le lecteur doit noter que le système de fichiers mis à jour est contrôlé par version. Chacune des étapes suivantes a été exécutée au même moment, et annulée avant de passer à l'étape de dépannage suivante.

Chacun de ces articles et solutions n'a pas permis de résoudre mon problème particulier.

Merci pour votre temps.

13voto

vijay kumar kdp Points 87

Un grand merci à TrevorH et jhodrien sur #centos.

Le problème était que chroot empêche l'accès à /dev/urandom (comme prévu). La mise à jour installée pour réussir nécessitait ces bits aléatoires pour initialiser GnuTLS.

La solution est la suivante :

mount -o bind /dev dev/

dans le chroot et procéder à la mise à jour comme d'habitude.

Ou si vous ne voulez pas monter le répertoire /dev entier, vous pouvez créer votre propre répertoire !

mknod -m 666 /dev/random c 1 8
mknod -m 666 /dev/urandom c 1 9

Problème corrigé.

2 votes

Merci, ça a marché. Je voulais noter que vous pouvez exécuter cette commande avant de vous connecter, ou si vous êtes déjà connecté, vous pouvez l'exécuter à partir d'un autre terminal, dans votre répertoire racine, sans être connecté, et sur le terme qui a votre environnement chroot ouvert, il deviendra automatiquement accessible.

0 votes

Il est difficile de comprendre la quantité de bêtises que l'on trouve en ligne concernant ce message d'erreur et les "solutions". Merci d'avoir remis les pendules à l'heure.

1voto

iBug Points 976

La réponse acceptée indique que le problème est causé par chroot(8) ce qui m'a fait réaliser que j'aurais dû utiliser systemd-nspawn(1) .

L'utilisation d'un conteneur systemd-nspawn a parfaitement résolu le problème pour moi.

0voto

or shafrir Points 11

Arlion a raison, mais il y a un côté négatif, un gros côté. Il vaut mieux utiliser

mount -o bind /dev/urandom dev/urandom

D'après mon expérience avec Centos 7, si tout le /dev est monté, la plupart du temps, même après avoir été démonté, le /dev/pts est perturbé de sorte que les connexions ssh à cette machine échouent. Lorsque cela se produit, ssh ne se connecte pas et le message suivant est affiché :

Server refused to allocate pty

Il n'y a rien dans /var/log/messages ou dmesg pour indiquer un problème. Bien qu'une session interactive ne se connectera pas, il est toujours possible de récupérer via ssh avec :

ssh root@stuck_machine 'umount /dev/pts; mount devpts /dev/pts -t devpts'

0 votes

La solution suggérée avec mount -o bind sur /dev fonctionne mais casse quelque chose d'autre, alors que monter seulement /dev/urandom ne le fait pas. Cela s'est produit dans le même contexte (chroot pour exécuter yum) lorsque cela a interrompu les connexions entrantes ssh. Il a été posté pour que la prochaine personne qui vient ici ne se bloque pas hors de sa machine en utilisant la première commande d'Arlion.

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