apt-get хочет определить более старую версию GNUTLS

Просто обновился до 18.04, и когда я бегу sudo apt updateжалуется:

/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

Старая информация:

Бег gio version дает: 2.53.6

Бег gntls-cli -v дает: gnutls-cli 3.5.8

Насколько я могу сказать, это означает, что apt-get хочет использовать GNUTLS version 3.4, когда у меня есть 3.5.8,

Любые идеи о том, как поступить, будут оценены. Я подозреваю, что, возможно, он не разрешил зависимости правильно при обновлении дистрибутивов или пытается выполнить обновление из неправильных репозиториев.

Интересно, что я получаю ту же ошибку при открытии Octave ( https://www.gnu.org/software/octave/).


Добавлено в ответ на комментарий:

apt-cache policy libgnutls30 говорит:

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 указывает на libgnutls.so.30.14.10 для меня

nm -D /usr/lib/x86_64-linux-gnu/libgnutls.so.30 | grep GNUTLS_3 печать 0000000000000000 A GNUTLS_3_4

1 ответ

Решение

Вот как я решил проблему. Обратите внимание, что в конце это показалось немного опасным, поэтому будет приветствоваться более безопасный подход в другом ответе или в комментариях.

Я обнаружил, что есть две версии libgnutls.so.30 в моей системе, один в /usr/lib/x86_64-linux-gnu а другой в /usr/local/lib/,

Бег nm -gC а также readelf -sW с grep на этих файлах видно, что первый содержит соответствующий символ, а второй - нет. Это приводит меня к мысли, что неправильная копия gnutls загружается во время выполнения.

Файл в /usr/lib/x86_64-linux-gnu это ссылка на libgnutls.so.30.14.10и тот, в /usr/local/lib/x86_64-linux-gnu это ссылка на libgnutls.so.30.13.1,

Подтверждение: Бег ldd на libgiognutls показывает, что он пытается связаться с /usr/local/lib версия.

Еще подтверждение: изменение LD_LIBRARY_PATH не работал. Глядя через ld.so Страница man показывает, что это возможно потому, что к моменту вызова ld.so достигается повышенная привилегия.

дела sudo su а затем меняется LD_LIBRARY_PATH, На данный момент я убежден, что это связующее звено двух версий libgnutls это проблема.

Решено: я просто прыгнул с верой и связал /usr/local/lib/libgnutls.so в /usr/lib/x86_64-linux-gnu/libgnutls.so файл и то же самое с .30 версии также. Пока ничего не сломалось и сообщения об ошибках пропали.

Другие вопросы по тегам