Вопрос или проблема
Вот что происходит:
$ python3 -m ssl
Traceback (most recent call last):
File "/opt/splunk/lib/python3.9/runpy.py", line 197, in _run_module_as_main
return _run_code(code, main_globals, None,
File "/opt/splunk/lib/python3.9/runpy.py", line 87, in _run_code
exec(code, run_globals)
File "/opt/splunk/lib/python3.9/ssl.py", line 99, in <module>
import _ssl # if we can't import it, let the error propagate
ImportError: libssl.so.1.0.0: cannot open shared object file: No such file or directory
или также
$ openssl --help
openssl: error while loading shared libraries: libssl.so.1.0.0: cannot open shared object file: No such file or directory
Должно быть, это связано с установкой splunk, которая повредила openssl… Я спрашивал об этом здесь на ubuntu bug launchpad: https://bugs.launchpad.net/ubuntu/+source/openssl/+bug/2089827
Как я могу исправить это без вмешательства в splunk?
Я нашел здесь: https://community.splunk.com/t5/Splunk-Search/Why-am-I-getting-error-quot-libssl-so-1-0-0-cannot-open-shared/m-p/267920
что я мог бы просто сделать это, и это исправит проблему:
export LD_LIBRARY_PATH=/opt/splunk/lib/:$LD_LIBRARY_PATH
Вопросы и Опасения
Я хочу лучше понять ситуацию и выявить возможные проблемы. Конкретно:
Не рекомендуется ли такой подход? Есть ли что-то принципиально неправильное в этом?
Кроме того, я пытаюсь понять причину проблемы:
- Что вызвало эту проблему в первую очередь?
- Почему система зависит от библиотеки OpenSSL ВНУТРИ Splunk?
- Почему система не может использовать отдельную библиотеку вместо той, что поставляется с Splunk?
Должно быть, это связано с установкой splunk, которая повредила openssl… Я спрашивал об этом здесь на ubuntu bug launchpad: https://bugs.launchpad.net/ubuntu/+source/openssl/+bug/2089827
Для справки: это не баг Ubuntu, так что технически говоря его следовало бы закрыть. Это баг в установщике Splunk.
Не рекомендуется ли такой подход? Есть ли что-то принципиально неправильное в этом?
Да, это не лучший способ установки приложения. Не знаю точных деталей, но я вижу из отчета, на который вы ссылаетесь, что оно установлено в /opt
, так что это определенно что-то, что вы установили мимо менеджера пакетов.
Когда вы это делаете, это означает, что вы знаете, что делаете (что, видимо, не так), и вы сами по себе в мире экспериментов. Это потому, что когда вы устанавливаете что-то мимо менеджера пакетов, в зависимости от того, как написан скрипт установки, он может перезаписать что-то, что уже присутствует в системе, и что-то испортить. Даже если этого не произойдет, он может изменить порядок, в котором ищутся некоторые библиотеки, и снова что-то ломается. И даже если этого не произойдет, какое-то обновление системы может перезаписать файлы, которые вы установили (поскольку с точки зрения менеджера пакетов, в пути нет зарегистрированных файлов), таким образом сломав ваше приложение.
Однако не волнуйтесь, в вашем случае это действительно не проблема, потому что приложение, похоже, самодостаточно под /opt
. Просто имейте это в виду.
Пример: современный pip
(менеджер пакетов Python) даже откажется устанавливать что-либо глобально, если вы не передадите --break-system-packages
.
Что вызвало эту проблему в первую очередь?
Для сторонних читателей: ОП забыл упомянуть важный момент, что openssl
не из Ubuntu и находится под /opt
Когда вы используете сторонний установщик, обычно происходит одно из двух:
- Установщик поставляет все необходимые библиотеки, и проблема, которую вы видите, не возникнет
- В противном случае создатели установщика ожидают, что вы сами установите зависимости.
Забавно, но раз вы смогли исправить это, изменив LD_LIBRARY_PATH
, это означает, что ваш случай принадлежит к первому варианту, за исключением того, что создатели установщика испортили установку, и она просто не видит свои собственные библиотеки. Как это должно было быть сделано — установив RPATH для openssl
в расположение библиотек. Вы можете изменить это вручную, оказывается, если не хотите возиться с LD_LIBRARY_PATH
.
Почему система зависит от библиотеки OpenSSL ВНУТРИ Splunk?
Хм? Вы говорите о python3 -m ssl
? Если этот модуль был установлен менеджером пакетов, то единственный способ, которым у вас могла возникнуть проблема, это если вы вручную изменили $PATH
, чтобы указывать на openssl
Splunk, что вызывает ошибку. Иными словами, “зависимость” была добавлена вами.
Почему система не может использовать отдельную библиотеку вместо той, что поставляется с Splunk?
Ну, если вы глобально не изменили LD_LIBRARY_PATH
, система не использует библиотеку Splunk. Я предполагаю, что вопрос связан с предыдущим, в этом случае надеюсь, его ответ объясняет ситуацию.
П.С.: Сообщите об ошибке в Splunk, они должны исправить свой установщик.
.
Ответ или решение
При решении проблемы с ошибкой ImportError: libssl.so.1.0.0: cannot open shared object file: No such file or directory
на Ubuntu 24.04.1, вероятно, причиной является несовместимость версий OpenSSL и библиотеки SSL, используемой в Splunk. Рассмотрим данный вопрос более подробно и предложим соответствующие рекомендации.
Проблема и ее контекст
После установки Splunk на Ubuntu 24.04.1 у вас возникло несколько ошибок, связанных с библиотекой libssl.so.1.0.0. Конкретно, команды python3 -m ssl
и openssl --help
возвращают ошибки из-за невозможности загрузки данной библиотеки.
Возможные причины
-
Устаревшая версия библиотеки: Данная проблема обычно возникает из-за зависимости от устаревшей версии библиотеки OpenSSL, которая не поставляется с современными дистрибутивами Ubuntu. В Splunk может использоваться версию OpenSSL, не предусмотренную в системе.
-
Изменение путей окружения: Установка Splunk могла изменить системные переменные пути, что приводит к загрузке библиотек из позиций, отличающихся от стандартных.
-
Ошибка в установщике Splunk: Указанная проблема могла быть вызвана ошибкой в установщике Splunk, который неправильно конфигурирует зависимости.
Рекомендации по решению
1. Использование LD_LIBRARY_PATH
Вы упомянули, что временное решение заключается в использовании команды:
export LD_LIBRARY_PATH=/opt/splunk/lib/:$LD_LIBRARY_PATH
Это решение эффективно указывает системе искать требуемую библиотеку в директиве Splunk. Тем не менее, это временная мера, которая может вызвать проблемы при обновлениях или конфигурациях других приложений.
2. Перестройка переменной RPATH
Перестройка переменной RPATH в бинарных файлах могла бы быть более устойчивым решением без необходимости полагаться на LD_LIBRARY_PATH
. Этот метод требует пересмотра расположения библиотек относительно исполняемых файлов.
3. Обновление зависимости
Вы можете попробовать установить старую версию библиотеки OpenSSL вручную для исправления несовместимости, но это может вызвать потенциальные проблемы безопасности.
Ответы на ваши вопросы
1. Безопасность подхода с использованием LD_LIBRARY_PATH
Данный метод временно решает проблему, но переносит управление системе из стандартного окружения. Это может вызвать будущие конфликты и не рекомендовано для продакшн-окружений.
2. Зависимости от OpenSSL внутри Splunk
Splunk, вероятно, требует определенной версии или настроек OpenSSL, чтобы корректно работать. Это может стать проблемой в интеграции с системным OpenSSL, который эволюционировал до современных стандартов безопасности.
3. Почему не использовать отдельные библиотеки
Использование системных библиотек требует обеспечения полной совместимости со всеми версиями зависимостей, что может быть невозможно в случае специфических версий, накладываемых разработчиками приложений.
Рекомендуется отчитаться об ошибке в Splunk, чтобы они могли исправить установщик в будущих версиях. Надеемся, эта информация будет для вас полезной и поможет в решении текущей проблемы.