Вопрос или проблема
Меня интересует создание настольных приложений Linux с использованием технологий веб-фронтенда. Обе платформы, которые я пробовал — Chromium Embedded Framework/CEFPython и Awesomium, похоже, зависят от libudev.so.0
и терпят неудачу самым неприятным образом, когда не могут его найти.
libudev.so.0
, однако, похоже, не предоставляется никаким пакетом в последних версиях Ubuntu, и этот пакет AUR только реализует распространенный, но вызывающий споры фикс с установкой символьной ссылки на libudev.so.1
. С другой стороны, браузер Chromium, на недавней версии которого основаны как CEF, так и Awesomium, работает без этой зависимости.
Кто-нибудь знает, в чем дело с этой библиотекой? И как я могу правильно обеспечить надежную работу на различных Linux-дистрибутивах для программного обеспечения, полагающегося на встроение Chromium?
По сути, udev
стал частью всей революции systemd
и стал частью более сложной системы. Различные изменения увеличили интерфейс и потребовали перехода с .so.0
на .so.1
.
Вместо поддержки и старого интерфейса, и нового путем предоставления как .so.0
, так и .so.1
, разработчики решили сказать “мы заставим всех обновить свои зависимости!” и они убрали .so.0
из бинарного пакета.
Возможно, собрать более старую версию libudev
, которая все еще предоставляет .so.0
, если это необходимо.
Также возможно, что это изменение настолько новое, что большинство мэйнтейнеров пакетов еще не заметили эту проблему, чтобы явно указать “этот пакет требует libudev
до версии xyz
“, и большинство разработчиков не переключили свои бинарные файлы на потребление последней версии libudev
.
И третья возможность заключается в том, что некоторые ключевые разработчики действительно установили символьную ссылку .so.0
на .so.1
.
По сути, та же каша из возможностей, которая возникает, когда любой ключевой компонент вносит значительное изменение в интерфейс.
Источник: Wikipedia на udev
Существует проблема в трекере Chromium об удалении зависимости времени выполнения от libudev.so.0
. Она включает в себя некоторую полезную информацию, см. эту ссылку.
Установщик Google Chrome создает символьную ссылку, когда это необходимо, см. эту ссылку.
Ответ или решение
Проблема с libudev.so.0
на Linux-дистрибутивах: Arch и Ubuntu
Сталкиваясь с разработкой Linux-десктоп-приложений с веб-фронтэндом, многие разработчики находят, что такие платформы, как Chromium Embedded Framework/CEFPython, а также Awesomium, требуют наличия библиотеки libudev.so.0
. Однако современные версии Ubuntu и Arch Linux, как правило, не предоставляют этой версии библиотеки. Вместо этого, пользователи обычно находят только libudev.so.1
.
История изменения
Ранее udev
был преобразован в рамках инклюзивного изменения в systemd
. Данный переход повлёк за собой обновление интерфейса библиотеки и смену её версии с .so.0
на .so.1
. Разработчики приняли решение не поддерживать обе версии одновременно, что зачастую требует от пользователей или разработчиков обновлять зависимости своих приложений.
Решение проблемы
-
Симлинк: Наиболее распространённое временное решение — создать символическую ссылку (symlink), связывающую
libudev.so.0
сlibudev.so.1
. Это может решить проблему зависимости без изменения кода. Хотя метод считается "грязным", многие разработчики используют его на практике, чтобы быстро устранить проблему несовместимости. В самом деле, даже Google Chrome создаёт такой симлинк, если требуется. -
Сборка библиотеки
libudev
старой версии: Те, кто предпочитает более постоянное решение, могут собрать старую версиюlibudev
, которая предоставляет необходимуюso.0
версию. Это требует дополнительных усилий, так как необходимо найти исходники старой версии и создать подходящую сборку. -
Следить за обновлениями Chromium: В трекере Chromium ведётся обсуждение о том, как убрать зависимость от
libudev.so.0
. Рекомендуется следить за обновлениями, так как это может привести к освобождению от этой зависимости в будущих версиях. -
Обновить зависимости: Также важно актуализировать свои проектные зависимости и проверять состояние проблемы для ваших библиотек, возможно, они уже устранили использование устаревшей версии библиотеки.
Заключение
Проблема libudev.so.0
— это классическая ситуация, возникающая при крупных изменениях в базовых компонентах систем, когда обновление библиотек или кардинальные изменения архитектуры приводят к несовместимостям. Краткосрочное решение — использовать симлинки, а долгосрочное — следить за обновлениями и модифицировать свои зависимости в соответствии с современными стандартами. Это позволит обеспечить стабильную работу приложений на различных Linux-дистрибутивах.
Для детальной информации, обратите внимание на упомянутые в обсуждении ссылки и следите за соответствующими ветками в трекерах.