Решаем проблему отсутствия 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 рантаймов, включаются внутрь пакета и подгружаются по мере необходимости.

1 комментарий к записи

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *