Заставить RPM удовлетворять требованиям зависимостей других установленных пакетов

Заставить RPM удовлетворять требованиям зависимостей других установленных пакетов

Итак, я устанавливаю написанное мной приложение Java, которое использует jnetpcap. Для этого требуется libpcap как минимум версии 1.0.0. В моем CentOS 5.8 есть только libpcap 0.9.4, который требуется для других установленных пакетов. У меня есть RPM для libpcap 1.4.0, но когда я пытаюсь установить его, я получаю следующее:

# rpm -Uvh /root/rpmbuild/RPMS/i386/libpcap-1.4.0-1.i386.rpm
error: Failed dependencies:
        libpcap.so.0.9.4 is needed by (installed) ppp-2.4.4-2.el5.i386
        libpcap.so.0.9.4 is needed by (installed) isdn4k-utils-3.2-56.el5.i386
        libpcap >= 14:0.8.3-6 is needed by (installed) ppp-2.4.4-2.el5.i386

и проверка зависимостей одного из них:

# rpm -qR ppp-2.4.4-2.el5.i386
...
libpcap >= 14:0.8.3-6
libpcap.so.0.9.4

Обновление ОС не имеет смысла, плюс, это закрытая система, никогда не подключенная к сети, так что это не имеет большого значения. Теперь яможетможно удалить пакеты, которые тормозят работу, но, если я не могу этого сделать, как мне принудительно установить этот пакет, чтобы он удовлетворял старым требованиям к зависимостям? То есть: заставить его «предоставить» libpcap 0.9.4, чтобы удовлетворить требования уже установленного программного обеспечения.

решение1

Я бы рекомендовал вам изменить исходный rpm-файл этого файла; отредактировать путь, по которому будут установлены файлы, чтобы не создавать конфликтов между файлами, которые вы собираетесь установить, и теми, которые предоставлены libpcap.so.0.9.4(нельзя устанавливать два rpm-файла, которые предоставляют один и тот же файл по одному и тому же пути).

Или удалите из исходного rpm-файла те файлы, которые будут конфликтовать с тем, что у вас установлено, это могут быть: /usr/lib/libpcap.so.0и, возможно /usr/share/man/man3/pcap.3.gz, . (один из них является символической ссылкой, а другой — страницей руководства) из вашего файла src rpm:s .spec, и выполните его сборку rpmbuild.

Затем вы можете установить (не обновлять)/root/rpmbuild/RPMS/i386/libpcap-1.4.0-1.i386.rpm вместе с libpcap-0.9.4чтобы версии могли мирно сосуществовать в вашей системе.

Если вы используете yum, то вам может потребоваться отредактировать ваш , /etc/yum.confчтобы добавить libpcapв ваш список installonlypkgs, так что yum не заменит вашу старую версию libpcap той, которую вы только что создали ( man 5 yum.conf). (если вы используете yum вместо простого rpm, то он может отслеживать все транзакции для вас с yum history. Это очень мощно). Вы также можете изменить имя в .specфайле в исходном rpm на что-то вроде libpcap14, это то, что я обычно делаю.

Затем добавьте путь к месту установки пакетов $LD_LIBRARY_PATHв скрипт/команду, которая запускает вашу программу, и она должна заработать (или LD_PRELOADвместо этого используйте более новую версию libpcap).

Вы также можете сделать то, что предложил slm, это, безусловно, самый быстрый способ достичь цели: rpm2cpio /root/rpmbuild/RPMS/i386/libpcap-1.4.0-1.i386.rpm > libpcap-1.4.0-1.i386.cpioа затем в отдельной папке вы извлекаете архив и используете файлы, как описано выше. Однако, rpm — это способ, которым CentOS отправляет программы, и я думаю, что это беспорядочно и сложно поддерживать в долгосрочной перспективе.

Другой причиной для действий может быть пересборка всего, что зависит от libpcap v0.9.4, до v1.0.0 и обновление их. Обычно это подразумевает проблемы для будущих обновлений, но поскольку вы, похоже, используете CentOS 5, вам не нужно беспокоиться, так как он EOL.

Последний вариант, который вам следует рассмотреть yum remove libpcap, — это посмотреть, сколько пакетов он хочет удалить ( yumна самом деле ничего не удалит, пока вы не нажмете кнопку Y и не нажмете Enter), поскольку выможетиметь возможность удалить эти пакеты и использовать yum, если выяснится, что вы все-таки не смогли этого сделать, вы можете откатиться с помощью yum history undoкоманды (я не помню, в какой версии yum это было реализовано, поэтому сначала проверьте, доступна ли вам эта подкоманда). Также убедитесь, что ваши репозитории указывают на репозитории, в которых доступны эти файлы.

Связанный контент