У меня есть 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?

0
Mark 13 Мар 2018 в 21:31

2 ответа

Лучший ответ

Нашел свою ошибку. Все файлы библиотеки для ICU были испорчены до того, как я создал свой RPM. Я запустил ldconfig, и он выдал мне подобные сообщения об ошибках:

ldconfig: /lib/libicudata.so.32 is not a symbolic link

Там, где я создавал свои RPM, то, что должно было быть символическими ссылками, на самом деле было файлами, которые были идентичны библиотеке, на которую они должны были указывать. Итак, я удалил то, что должно было быть символическими ссылками, и воссоздал их. Это устранило ошибку.

0
Mark 13 Мар 2018 в 21:39

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 неверен, вы можете указать предоставляемые файлы вручную.

1
msuchy 13 Мар 2018 в 20:05