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
версии также. Пока ничего не сломалось и сообщения об ошибках пропали.