我正在尝试在我的VM中安装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的文件,其他文件安装在VM中。
我不确定我做错了什么以及为什么。我是否错误地打包了我的RPM?
答案 0 :(得分:1)
1)rpm不关心您在文件系统上实际安装的内容。如果你以某种方式放置库,那么rpm不关心。 Rpm只检查rpmdb。
2)依赖项只是字符串。所以如果rpm告诉你它需要libicudata.so.32()(64bit)
。然后它不会检查库名为libicudata的64位版本。 Rpm只做最简单的事情。 Rpm检查某个包是否提供此字符串。所以检查你的包裹:
rpm -qp --provides ./foo.rpm
如果它提供此字符串。
rpmbuild具有内置检查功能,可以检测库的存在,然后自动插入提供的内容:
Provides: libicudata.so.32()(64bit)
如果您完全确定rpmbuild不正确,可以手动指定提供。
答案 1 :(得分:0)
我发现了我的错误。在创建RPM之前,ICU的所有库文件都搞砸了。我跑了ldconfig
,它给了我类似的错误消息:
ldconfig: /lib/libicudata.so.32 is not a symbolic link
我在构建我的RPM时,应该是符号链接实际上是与他们应该指向的lib 相同的文件。所以,我删除了应该是符号链接的内容,并重新创建了它们。这消除了错误。