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