2014-12-12 4 views
2

я генерации файла оборотов в минуту для CentOS, но когда я пытаюсь установить его на чистую машину он терпит неудачу с:«Отсутствует» Lib для установки оборотов в минуту, когда он присутствует в файле оборотов

--> Running transaction check 
---> Package grass.x86_64 0:6.4.4-1.el6 will be installed 
--> Processing Dependency: libgrass_rli.so()(64bit) for package: grass-6.4.4-1.el6.x86_64 
--> Finished Dependency Resolution Error: Package: grass-6.4.4-1.el6.x86_64 (/grass-6.4.4-1.el6.x86_64) 
      Requires: libgrass_rli.so()(64bit) 

который бы быть точным, за исключением того, что rpm содержит libgrass_rli.so.

[[email protected] ~]$ rpm -qilp /vagrant_rpms/grass-6.4.4-1.el6.x86_64.rpm | grep _rli 
/usr/local/lib/libgrass_rli.6.4.4.so 
/usr/local/lib/libgrass_rli.so 

Я экспериментировал с различными вариантами: строки в файле спецификации бесполезны, может ли кто-нибудь понять, что не так?

EDIT

[[email protected] ~]$ rpm -qp --provides /vagrant_rpms/grass-6.4.4-1.el6.x86_64.rpm                    
libgrass_I.6.4.4.so()(64bit)              
libgrass_Iortho.6.4.4.so()(64bit)            
libgrass_arraystats.6.4.4.so()(64bit)           
libgrass_bitmap.6.4.4.so()(64bit)            
libgrass_btree.6.4.4.so()(64bit)             
libgrass_cdhc.6.4.4.so()(64bit)             
libgrass_cluster.6.4.4.so()(64bit)            
libgrass_datetime.6.4.4.so()(64bit)            
libgrass_dbmibase.6.4.4.so()(64bit)            
libgrass_dbmiclient.6.4.4.so()(64bit)           
libgrass_dbmidriver.6.4.4.so()(64bit)           
libgrass_dbstubs.6.4.4.so()(64bit)            
libgrass_dgl.6.4.4.so()(64bit)             
libgrass_dig2.6.4.4.so()(64bit)             
libgrass_display.6.4.4.so()(64bit)            
libgrass_driver.6.4.4.so()(64bit)            
libgrass_dspf.6.4.4.so()(64bit) 
libgrass_edit.6.4.4.so()(64bit) 
libgrass_form.6.4.4.so()(64bit) 
libgrass_g3d.6.4.4.so()(64bit) 
libgrass_gis.6.4.4.so()(64bit) 
libgrass_gmath.6.4.4.so()(64bit) 
libgrass_gpde.6.4.4.so()(64bit) 
libgrass_gproj.6.4.4.so()(64bit) 
libgrass_interpdata.6.4.4.so()(64bit) 
libgrass_interpfl.6.4.4.so()(64bit) 
libgrass_lidar.6.4.4.so()(64bit) 
libgrass_linkm.6.4.4.so()(64bit) 
libgrass_lrs.6.4.4.so()(64bit) 
libgrass_neta.6.4.4.so()(64bit) 
libgrass_nviz.6.4.4.so()(64bit) 
libgrass_ogsf.6.4.4.so()(64bit) 
libgrass_pngdriver.6.4.4.so()(64bit) 
libgrass_psdriver.6.4.4.so()(64bit) 
libgrass_qtree.6.4.4.so()(64bit) 
libgrass_raster.6.4.4.so()(64bit) 
libgrass_rli.6.4.4.so()(64bit) 
libgrass_rli.so 
libgrass_rowio.6.4.4.so()(64bit) 
libgrass_rtree.6.4.4.so()(64bit) 
libgrass_segment.6.4.4.so()(64bit) 
libgrass_shape.6.4.4.so()(64bit) 
libgrass_sim.6.4.4.so()(64bit) 
libgrass_sites.6.4.4.so()(64bit) 
libgrass_sqlp.6.4.4.so()(64bit) 
libgrass_stats.6.4.4.so()(64bit) 
libgrass_symb.6.4.4.so()(64bit) 
libgrass_trans.6.4.4.so()(64bit) 
libgrass_vask.6.4.4.so()(64bit) 
libgrass_vect.6.4.4.so()(64bit) 
libgrass_vedit.6.4.4.so()(64bit) 
grass = 6.4.4-1.el6 
grass(x86-64) = 6.4.4-1.el6 

Также извлеченный файл выглядит нормально:

[[email protected] ~]$ file /tmp/libgrass_rli.6.4.4.so 
/tmp/libgrass_rli.6.4.4.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, not stripped 
+0

Что делает 'rpm -qp --provides/vagrant_rpms/grass-6.4.4-1.el6.x86_64.rpm' say? Если вы извлечете эту библиотеку из rpm 'rpm2cpio /vagrant_rpms/grass-6.4.4-1.el6.x86_64.rpm | cpio -i -to-stdout ./usr/local/lib/libgrass_rli.6.4.4.so>/tmp/libgrass_rli.6.4.4.so' что делает 'файл/tmp/libgrass_rli.6.4.4.so' скажите об этом? –

+0

Я добавил эти выходы, но они выглядят нормально для меня –

+0

Обратите внимание, что ваш список «обеспечивает» действительно не перечисляет функцию RPM, на которую жалуется: «libgrass_rli.so() (64 бит)». Он перечисляет «libgrass_rli.so» и «libgrass_rli.6.4.4.so() (64 бит)», но они оба разные. Возможно, «libgrass_rli.so», который вы упаковываете, является сломанной символической ссылкой. Я обновил свой ответ на эту возможность. –

ответ

1

rpmbuild сканирует все файлы, упакованные в RPM для автоматической идентификации общих библиотек RPM обеспечивает, и обороты требования могут быть удовлетворены самими собой. Поэтому Есть два основных варианта:

  • возможно RPM содержит i386 (то есть 32-битная) версию библиотеки, в то время как 64-битная версия, что на самом деле требуется, или каким-либо иным образом упакованный файл не правильного типа;
  • в качестве альтернативы, автоматический запуск rpmbuild может быть отключен или отключен (это будет функцией спецификационного файла).

Неверная архитектура библиотеки маловероятна, если вы не упаковываете заранее созданную библиотеку, или если вы не создаете 32-разрядные и 64-разрядные библиотеки для одного и того же RPM (и не можете установить последнюю версию или установить оба в одно и то же место, чтобы один забивал другой).

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

+1

Все, кажется, указывает на то, что оно 64 бит (по мере необходимости), и я не трахался с авто-обеспечением (о котором я знаю) –

0

Вероятная причина, по которой ваша разделяемая библиотека не обнаружена механизмом «автоматически обеспечивает», заключается в том, что она не является исполняемой.

Добавить что-то вроде этого, чтобы ваш %install раздел:

find %buildroot -type f \(-name '*.so' -o -name '*.so.*' \) -exec chmod 755 {} + 

Source.