Вопрос или проблема
Я обновил свой сервер до Ubuntu 24.04. Ранее он работал на 20.04.
Этот сервер запускает программное обеспечение, которое имеет свою собственную среду Postgres DB.
При использовании psql
он сообщал, что не может найти libssl.so.10
и libcrypto.so.10
. Поэтому я загрузил и установил пакет libssl1.0.0_1.0.2g-1ubuntu4.20_amd64.deb
.
Это не особенно помогло в начале.
Затем я использовал ldd
на psql
и увидел, что он ищет libssl.so.10
и libcrypto.so.10
. Однако в пакете они называются libcrypto.so.1.0.0
и libssl.so.1.0.0
. Я создал символическую ссылку для каждого из файлов. ldd
затем показал следующее:
/tester/pgsql/bin/psql: /lib/x86_64-linux-gnu/libcrypto.so.10: версия `libcrypto.so.10' не найдена (требуется /distribution/dacs/pgsql/lib/libpq.so.5)
/tester/pgsql/bin/psql: /lib/x86_64-linux-gnu/libssl.so.10: версия `libssl.so.10' не найдена (требуется /distribution/dacs/pgsql/lib/libpq.so.5)
linux-vdso.so.1 (0x00007ffc1a3e5000)
libpq.so.5 => /distribution/dacs/pgsql/lib/libpq.so.5 (0x0000775d90c00000)
libreadline.so.6 => /lib/x86_64-linux-gnu/libreadline.so.6 (0x0000775d911df000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x0000775d911da000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x0000775d910f1000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x0000775d90800000)
libssl.so.10 => /lib/x86_64-linux-gnu/libssl.so.10 (0x0000775d90200000)
libcrypto.so.10 => /lib/x86_64-linux-gnu/libcrypto.so.10 (0x0000775d8fa00000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x0000775d910ea000)
libtinfo.so.6 => /lib/x86_64-linux-gnu/libtinfo.so.6 (0x0000775d910b6000)
/lib64/ld-linux-x86-64.so.2 (0x0000775d91247000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x0000775d910af000)
Первые две строки говорят о том, что он не может найти библиотеки, но остальное похоже на то, что он может найти их правильно.
Что еще я могу сделать, чтобы выяснить, что именно он хочет от меня?
Ответ или решение
При обновлении сервера с Ubuntu 20.04 до 24.04 вы столкнулись с проблемой несовместимости библиотек, что является распространенной ситуацией при переходе на новые версии дистрибутивов Linux. В данном случае, PostgreSQL, использующий библиотеку libpq
, требует наличия специфической версии библиотек libcrypto.so.10
и libssl.so.10
, которые отсутствуют в вашей системе. Вместо этого вы установили версии libcrypto.so.1.0.0
и libssl.so.1.0.0
. Давайте разберёмся с этой проблемой более детально.
Понимание проблемы
-
Отсутствие библиотек: Ваше программное обеспечение зависит от
libcrypto.so.10
иlibssl.so.10
, в то время как в системе установлены версии библиотек1.0.0
. Это приводит к ошибкам, поскольку версии библиотек не совпадают с ожидаемыми. -
Символические ссылки: Создание символических ссылок на
libcrypto.so.1.0.0
иlibssl.so.1.0.0
, как вы сделали, — это временное решение, которое может не всегда сработать из-за различий в API между версиями библиотек.
Шаги для решения проблемы
1. Установка правильных библиотек
Лучшим решением будет установка пакетов, которые содержат необходимые версии. К сожалению, Ubuntu 24.04 не поддерживает libssl1.0.0
и libcrypto1.0.0
, так как они устарели. Вам следует рассмотреть возможность установки OpenSSL 1.0 из PPA (Personal Package Archive) или компиляцию его из исходников. Выполните следующие команды для добавления PPA и установки библиотеки:
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get install libssl1.0-dev
2. Использование контейнеризации
Если ваше программное обеспечение сильно привязано к устаревшим библиотекам, рассмотрите возможность использования контейнеризации. Docker позволяет запускать приложения в изолированном окружении с необходимыми версиями библиотек. Вы можете создать Docker-образ на базе более старой версии Ubuntu (например, 20.04), включающей нужные библиотеки.
Пример Dockerfile:
FROM ubuntu:20.04
RUN apt-get update && apt-get install -y libssl1.0.0
COPY ./your-application /app
CMD ["/app/your-application"]
3. Проверьте зависимости с помощью ldd
Вы уже использовали ldd
для проверки зависимостей psql
. Рекомендую продолжить использовать эту команду для других компонентов вашего ПО:
ldd /path/to/your/application
Это позволит вам убедиться, что все зависимости находят свои версии и работают корректно.
4. Компиляция из исходников
Если установка пакетов не позволяет решить проблему, вы можете рассмотреть возможность компиляции PostgreSQL и его библиотек из исходников. Убедитесь, что в процессе компиляции указаны правильные пути к установленным библиотекам.
Заключение
Проблема несовместимости библиотек может быть сложной, особенно в процессе обновления операционной системы. Основным шагом здесь является определение необходимых версий библиотек и установка соответствующих пакетов. Если это не удается, использование контейнеризации или компиляция из исходников могут стать решениями. Перемещение на новые платформы требует тщательной проверки совместимости вашего программного обеспечения с зависимостями.