web-dev-qa-db-fra.com

apt-get veut qu'une ancienne version de GNUTLS soit définie

Vient de passer à la version 18.04, et quand je lance Sudo apt update, il se plaint:

/usr/lib/x86_64-linux-gnu/gio/modules/libgiognutls.so: symbol gnutls_pkcs11_privkey_init version GNUTLS_3_4 not defined in file libgnutls.so.30 with link time reference Failed to load module: /usr/lib/x86_64-linux-gnu/gio/modules/libgiognutls.so

Info plus ancienne:

Lancer gio version donne: 2.53.6

Lancer gntls-cli -v donne: gnutls-cli 3.5.8

Autant que je sache, cela signifie que apt-get veut utiliser GNUTLS version 3.4, quand j'ai 3.5.8.

Toute idée sur la façon de procéder serait appréciée. Je soupçonne que cela n’a peut-être pas résolu correctement les dépendances lors de la mise à niveau de distributions ou lorsqu’il tente de mettre à jour à partir de mauvais référentiels.

Fait intéressant, je reçois la même erreur lors de l’ouverture d’Octave ( https://www.gnu.org/software/octave/ ).


Ajouté en réponse au commentaire:

apt-cache policy libgnutls30 dit:

libgnutls30:
  Installed: 3.5.18-1ubuntu1
  Candidate: 3.5.18-1ubuntu1
  Version table:
 *** 3.5.18-1ubuntu1 500
        500 http://us.archive.ubuntu.com/ubuntu bionic/main AMD64 Packages
        100 /var/lib/dpkg/status

/usr/lib/x86_64-linux-gnu/libgnutls.so.30 pointe sur libgnutls.so.30.14.10 pour moi

nm -D /usr/lib/x86_64-linux-gnu/libgnutls.so.30 | grep GNUTLS_3 imprime 0000000000000000 A GNUTLS_3_4

5
Zach Boyd

Voici comment j'ai résolu le problème. Notez que cela a semblé un peu dangereux à la fin, donc une approche plus sûre dans une autre réponse ou dans des commentaires serait appréciée.

J'ai découvert qu'il existe deux versions de libgnutls.so.30 sur mon système, une dans /usr/lib/x86_64-linux-gnu et l'autre dans /usr/local/lib/.

L'exécution de nm -gC et readelf -sW avec grepsur ces fichiers montre que le premier contient le symbole en question et le second pas. Cela me porte à croire que la copie incorrecte de gnutlsest en cours de chargement au moment de l'exécution.

Le fichier dans /usr/lib/x86_64-linux-gnu est un lien vers libgnutls.so.30.14.10 et celui dans /usr/local/lib/x86_64-linux-gnu est un lien vers libgnutls.so.30.13.1.

Confirmation: L'exécution de lddsur libgiognutlsmontre que la tentative de liaison à la version /usr/local/lib a été tentée.

Confirmation supplémentaire: La modification de LD_LIBRARY_PATH n'a pas fonctionné. En parcourant la page de manuel ld.so, vous constaterez que c'est probablement dû au fait que certains privilèges élevés sont atteints au moment de l'appel de ld.so.

Faire Sudo su puis changer LD_LIBRARY_PATH. À ce stade, je suis convaincu que ce sont les priorités des liens des deux versions de libgnutlsname__.

Résolu: je viens de faire un acte de foi et de lier le fichier /usr/local/lib/libgnutls.so au fichier /usr/lib/x86_64-linux-gnu/libgnutls.so, ainsi que les versions .30. Jusqu'à présent, rien n'a été rompu et les messages d'erreur ont disparu.

3
Zach Boyd