У меня есть RPM, который я пытаюсь установить на свою виртуальную машину. Мой RPM называется myPackage.rpm, и когда я пытаюсь установить его (yum install myPackage.rpm
), я получаю следующие ошибки:
Error: Package: myPackage.x86_64 (/myPackage)
Requires: libicudata.so.32()(64bit)
Error: Package: myPackage.x86_64 (/myPackage)
Requires: libicuuc.so.32()(64bit)
Error: Package: myPackage.x86_64 (/myPackage)
Requires: libicui18n.so.32()(64bit)
Я сделал rpm2cpio myPackage.rpm|cpio -idvm
, чтобы вытащить все файлы из моего rpm (в / root / rpms).
Я нашел libicudata.so *, и он показывает следующее:
/root/rpms/usr/lib64/libicudata.so.32.0
/root/rpms/usr/lib64/libicudata.so.32
/root/rpms/usr/lib64/libicudata.so
/root/rpms/usr/lib/libicudata.so.32.0
/root/rpms/usr/lib/libicudata.so.32
/root/rpms/usr/lib/libicudata.so
/usr/lib64/libicudata.so.32.0
/usr/lib64/libicudata.so.32
/usr/lib64/libicudata.so.50.1.2
/usr/lib64/libicudata.so.50
/usr/lib/libicudata.so.32.0
/usr/lib/libicudata.so.32
/usr/lib/libicudata.so.50.1.2
/usr/lib/libicudata.so.50
Файлы, перечисленные в /root/rpms/usr/
, являются файлами моего rpm, остальные установлены на виртуальной машине.
Я не уверен, что делаю не так и почему. Я неправильно упаковываю свой RPM?
2 ответа
Нашел свою ошибку. Все файлы библиотеки для ICU были испорчены до того, как я создал свой RPM. Я запустил ldconfig
, и он выдал мне подобные сообщения об ошибках:
ldconfig: /lib/libicudata.so.32 is not a symbolic link
Там, где я создавал свои RPM, то, что должно было быть символическими ссылками, на самом деле было файлами, которые были идентичны библиотеке, на которую они должны были указывать. Итак, я удалил то, что должно было быть символическими ссылками, и воссоздал их. Это устранило ошибку.
1) rpm не важно, что вы на самом деле установили в своей файловой системе. Если как-то туда библиотеки положить, то rpm пофиг. Обращайтесь только к rpmdb.
2) Зависимости - это просто строки. Итак, если rpm сообщит вам, что для этого требуется libicudata.so.32()(64bit)
. Тогда он не проверяет наличие 64-битной версии библиотеки name и libicudata. Обороты делают только самое простое. Rpm проверяет, предоставляет ли какой-либо пакет эту строку. Так что проверьте свой пакет:
rpm -qp --provides ./foo.rpm
Если он предоставляет эту строку.
Rpmbuild имеет встроенную проверку, которая может определить наличие библиотеки, а затем автоматически вставить предоставляет:
Provides: libicudata.so.32()(64bit)
Если вы абсолютно уверены, что rpmbuild неверен, вы можете указать предоставляемые файлы вручную.
Похожие вопросы
Новые вопросы
rpm
RPM Package Manager (RPM) - это система управления пакетами для операционных систем на основе Unix.