Ряд проприетарного ПО требует для запуска и функционирования отсутствующую в дистрибутиве 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 рантаймов, включаются внутрь пакета и подгружаются по мере необходимости.
Ребята спасибо Вам, так должно выгладить how-to для решения проблемы.
Сделал все, как описано в статье, в результате появилась ссылка /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
Как сделать так, чтобы система увидела эту библиотеку?
Да, в последних версиях что-то сломалось. Мы уже думаем над новым способом решения данной проблемы.
Проблема решена. SPEC обновлён. Соберите новую версию пакета и установите.
Отлично! Спасибо!
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.
Установил в Fedora 30. Для запуска ONLYOFFICE Desktopeditors не хватало этого пакета. Неправильный способ не помог, а Правильный — помог. Офисный пакет запускается. Большое спасибо!