"Missing" lib for rpm install when present in rpm file
I am generating an rpm file for centos, but when I try to install it on a clean machine, it fails:
--> 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)
which would be nice, except that the rpm contains libgrass_rli.so.
[vagrant@localhost ~]$ 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
I've been experimenting with different options: the lines in the spec file are useless, can anyone see what is wrong?
EDIT
[vagrant@localhost ~]$ 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
Also the extracted file looks fine:
[vagrant@localhost ~]$ 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
source to share
rpmbuild
typically scans all RPM-packaged files to automatically identify the shared libraries provided by the RPM and the RPM requirements can be met on their own. Therefore, there are two main possibilities:
- the RPM may contain a version of the i386 library (i.e. 32-bit), while the 64-bit version is actually what is required, or the packed file in some other way is not the correct type;
- alternatively,
rpmbuild
automatic scan submission can be disabled or disabled (this will be a function of the spec file).
Wrong library architecture is unlikely unless you intend to package a prebuilt library, or if you are not building 32-bit and 64-bit libraries for the same RPM (and cannot install the latest version, or install both in the same location so that one slides off other).
Since you are developing the RPM yourself, I assume you know that you are resetting auto-provisioning.
source to share