Назад | Перейти на главную страницу

Проблема с зависимостью YUM, даже если библиотека установлена

Мы создаем собственные пакеты php и mysql из исходного кода, этот для версии php-5.4.10, и размещаем их в нашем собственном репозитории. Назовем этот пакет custom-php и custom-mysql (-libs & -server)

Когда я выполняю yum install custom-php на сервере, yum перечисляет проблему с зависимостью:

--> Finished Dependency Resolution
Error: Package: custom-php-1.1.x86_64 (php)
           Requires: libmysqlclient.so.18(libmysqlclient_16)(64bit)
Error: Package: custom-php-1.1.x86_64 (php)
           Requires: libmysqlclient.so.18(libmysqlclient_18)(64bit)
 You could try using --skip-broken to work around the problem
 You could try running: rpm -Va --nofiles --nodigest

Файл libmysqlclient.so.18 предоставляется custom-mysql-libs, который указан в разделе Requires в файле спецификации custom-php. Даже если я устанавливаю custom-mysql-libs вручную перед запуском yum install custom-php, я все равно получаю указанную выше ошибку.

Наши custom-mysql-libs построены из исходного кода mysql и предоставляют libmysqlclient.so:

$ rpm -qlp custom-mysql-libs-1.0.x86_64.rpm 
/custom/lib64/libmysqlclient.so
/custom/lib64/libmysqlclient.so.18
/custom/lib64/libmysqlclient.so.18.0.0
....
$ 

Поскольку мы устанавливаем библиотеки в другом месте, custom-mysql-libs после завершения выдает ldconfig с путем, указанным в файле в /etc/ld.so.conf.d/. Я проверил, что библиотеки видны с помощью ldconfig -v

# ldconfig -v
...
/custom/lib64:
        libmysqlclient.so.18 -> libmysqlclient.so.18.0.0
...
#

Yum также находит библиотеку и пакет:

# yum whatprovides */libmysqlclient.so.18
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
custom-mysql-libs-1.0.x86_64 : Custom MySQL libraries
Repo        : custom
Matched from:
Filename    : /custom/lib64/libmysqlclient.so.18

custom-mysql-libs-1.0.x86_64 : Custom MySQL libraries
Repo        : installed
Matched from:
Filename    : /custom/lib64/libmysqlclient.so.18

Любая помощь приветствуется. Спасибо !

rpm ничего не знает о локальных файловых системах. Он только ищет в своей базе данных то, что есть в системе. В вашем случае это нестандартное место для размещения библиотеки. Обычно стандартное место в /usr/lib64/mysql/ а ваш находится в / custom, поэтому rpm не находит его там, где он должен быть.

Вот два варианта ..

1) перестройте пользовательский, добавив несколько символических ссылок, и это может сработать (действительно не проверено)

2) Принудительная установка с флагом --no-deps и символическая ссылка на файлы mysqllibrary из / custom в / usr / lib64 / mysql /

Я не думаю, что есть какая-то волшебная команда, которую мы можем дать вам, чтобы заставить ее работать так, как вы надеетесь.

yum и rpm не могут отслеживать то, что вы делаете за его спиной. Таким образом, если вы устанавливаете что-то за пределами стандартных дистрибутивов пакетов, эти изящные изящные помощники, такие как yum, не имеют достаточно программирования, чтобы предвидеть это. Вам придется взять на себя гораздо больше ответственности за ручную обработку подобных ошибок.

Как правило, я стараюсь не обходить системы и максимально использовать систему упаковки. Например, если я пересобираю пакет в соответствии со своими спецификациями, я загружаю исходный код пакета и переделываю новый пакет после внесения изменений и тому подобное.

У нас есть аналогичная проблема со сторонними RPM, которые устанавливают библиотеки в нестандартные места. Вы можете отключить автоматическую обработку зависимостей в вашем файле спецификации, а затем перечислить свои зависимости по имени пакета. Например, в вашем файле спецификации custom-php добавьте:

AutoReqProv: no
Requires: custom-mysql

Не забудьте добавить любые другие зависимости, которые могут вам понадобиться.