Решаем проблему отсутствия libcurl-gnutls в Fedora

Ряд проприетарного ПО требует для запуска и функционирования отсутствующую в дистрибутиве Fedora библиотеку libcurl-gnutls.so.4, поэтому в данном HOWTO мы рассмотрим пути решения этой проблемы.

Краткое описание сути проблемы

Вся проблема заключается в том, что в Debian и Ubuntu пакет libcurl собирают с gnutls, а не OpenSSL и называют libcurl-gnutls. Во всех остальных дистрибутивах он имеет стандартное название — libcurl. Многие разработчики проприетарного программного обеспечения считают Ubuntu «линуксом по умолчанию» и поэтому линкуют свои приложения динамически именно с libcurl-gnutls. Из-за это возникает проблема при запуске бинарника на всех остальных дистрибутивах — он не может найти данную библиотеку и сразу падает.

Неправильный способ решения проблемы

Большинство разработчиков предлагают в качестве решения данной проблемы просто создавать симлинк:

ln -s /usr/lib64/libcurl.so.4.4.0 /usr/lib64/libcurl-gnutls.so.4

Однако это в корне неверно, т.к. порождает в системном каталоге с общими динамическими библиотеками не отслеживаемую менеджером пакетом ссылку, что может привести к проблемам при обновлениях дистрибутива и работы системы.

Правильный способ решения проблемы

В пакетных дистрибутивах все файлы должны быть установлены исключительно посредством пакетного менеджера, поэтому мы должны создать и установить простой пакет, содержащий данную символическую ссылку.

Для начала установим необходимый для сборки пакетов набор:

sudo dnf install rpm-build git

Загрузим SPEC файл:

git clone https://github.com/EasyCoding/compat-libcurl-gnutls.git

Соберём пакет:

cd compat-libcurl-gnutls
rpmbuild -bb compat-libcurl-gnutls.spec

В случае успеха в каталоге ~/rpmbuild/RPMS/i686/ (на 32-битных системах) или ~/rpmbuild/RPMS/x86_64/ (на 64-битных) мы получим собранный RPM пакет. Установим его в систему:

sudo dnf install ~/rpmbuild/RPMS/$(uname -m)/compat-libcurl-gnutls-*.rpm

Заключение

Если вы разработчик проприетарного программного обеспечения и не можете из-за лицензий линковаться статически со всеми используемыми в вашем продукте библиотеками, то рассмотрите возможность создания и использования самодостаточных пакетов Flatpak, где данная проблема полностью решена: все необходимые приложению библиотеки, отсутствующие в виде Flatpak рантаймов, включаются внутрь пакета и подгружаются по мере необходимости.

7 commentaries to post

  1. Ребята спасибо Вам, так должно выгладить how-to для решения проблемы.

  2. Сделал все, как описано в статье, в результате появилась ссылка /usr/lib64/libcurl-gnutls[.]so.4 -> /usr/lib64/libcurl[.]so.4.4.0
    Но при попытке обновить gitkraken через dnf все равно ошибка Problem: cannot install the best update candidate for package gitkraken-3.2.1-1[.]fc27.x86_64
    — nothing provides libcurl-gnutls[.]so.4()(64bit) needed by gitkraken-3.6.0-1[.]fc27.x86_64
    Как сделать так, чтобы система увидела эту библиотеку?

    1. Да, в последних версиях что-то сломалось. Мы уже думаем над новым способом решения данной проблемы.

    2. Проблема решена. SPEC обновлён. Соберите новую версию пакета и установите.

  3. Sup bros. Brazilian dev here. Gitkraken still not working for me. @ASHNIKEL, did your gitkraken happens to show the «famous» white screen? Here the libcurl-gnutls itself installed with success, resulting on gitkraken to also install with success. But gitkraken stills crashing with that whitescreen.

  4. Установил в Fedora 30. Для запуска ONLYOFFICE Desktopeditors не хватало этого пакета. Неправильный способ не помог, а Правильный — помог. Офисный пакет запускается. Большое спасибо!

Обсуждение закрыто.