我已经将clamav打包成了一些rpms,用于在我们的rhn中进行分发,但是在升级时我遇到了依赖关系parsing的一些问题。
spec文件构build了4个包:
clamav – 包含主要文件
clamav-db – 包含病毒定义文件libclamav – 包含clamav库libclamav-devel – 包含devel文件
我需要clamav要求libclamav安装是相同的版本和版本本身。 例如clamav-0.96.3-9应该要求libclamav-0.96.3-9
然而,clamav-db可以是任何版本(它会被freshclam更新,只有在安装时才真正需要,以最大限度地减lessrpm事务期间的networkingstream量)
现在在spec文件中,我已经定义了如下的包
Version: 0.97.6 Release: 1 %package -n clamav Summary: ClamAV Anti-Virus Software Requires: libclamav = %{version}-%{release} Requires: clamav-db %description -n clamav Provides the server daemon and standard client utilities for antivirus scanning. %package -n clamav-db Summary: ClamAV Anti-Virus Software (Initial Databases) %description -n clamav-db Provides the initial antivirus databases for clamav. %package -n libclamav Summary: ClamAV Anti-Virus Software (libraries) %description -n libclamav Provides support libraries for clamav. %package -n libclamav-devel Summary: ClamAV Anti-Virus Software (development libraries) Requires: libclamav = %{version}-%{release} %description -n libclamav-devel Provides development libraries and headers for clamav.
这在一个干净的chroot中build立了4个包裹。 我scp他们到我的testing服务器。
目前蛤蜊版本:
[root@localhost clamav]# rpm -qa '(lib)?clam*' libclamav-0.97.3-9.i386 clamav-db-0.97.3-9.i386 clamav-0.97.3-9.i386
我有本地文件系统的正确要求新的RPM:
[root@localhost clamav]# rpm -qp --qf '%{NAME}\n\t[%{REQUIRES} %|REQUIREVERSION?{%{REQUIREVERSION}}:{}|\n\t]\n' * clamav /bin/bash /bin/sh /bin/sh /bin/sh clamav-db config(clamav) 0.97.6-1 libbz2.so.1 libc.so.6 libc.so.6(GLIBC_2.0) libc.so.6(GLIBC_2.1) libc.so.6(GLIBC_2.1.3) libc.so.6(GLIBC_2.2) libc.so.6(GLIBC_2.3) libc.so.6(GLIBC_2.3.4) libc.so.6(GLIBC_2.7) --> libclamav 0.97.6-1 libclamav.so.6 libclamav.so.6(CLAMAV_PRIVATE) libclamav.so.6(CLAMAV_PUBLIC) libdl.so.2 libpthread.so.0 libpthread.so.0(GLIBC_2.0) libpthread.so.0(GLIBC_2.1) libpthread.so.0(GLIBC_2.3.2) libresolv.so.2 libresolv.so.2(GLIBC_2.2) libz.so.1 rpmlib(CompressedFileNames) 3.0.4-1 rpmlib(PayloadFilesHavePrefix) 4.0-1 rtld(GNU_HASH) clamav-db /bin/sh config(clamav-db) 0.97.6-1 rpmlib(CompressedFileNames) 3.0.4-1 rpmlib(PayloadFilesHavePrefix) 4.0-1 libclamav /bin/sh libbz2.so.1 libc.so.6 libc.so.6(GLIBC_2.0) libc.so.6(GLIBC_2.1) libc.so.6(GLIBC_2.1.3) libc.so.6(GLIBC_2.3) libc.so.6(GLIBC_2.7) libclamav.so.6 libclamunrar.so.6 libclamunrar.so.6(CLAMAV_PRIVATE_UNRAR) libclamunrar_iface.so.6 libdl.so.2 libdl.so.2(GLIBC_2.0) libdl.so.2(GLIBC_2.1) libm.so.6 libm.so.6(GLIBC_2.0) libpthread.so.0 libpthread.so.0(GLIBC_2.0) libpthread.so.0(GLIBC_2.2) libz.so.1 rpmlib(CompressedFileNames) 3.0.4-1 rpmlib(PayloadFilesHavePrefix) 4.0-1 rtld(GNU_HASH) libclamav-devel /bin/sh /usr/bin/pkg-config libclamav 0.97.6-1 libclamav.so.6 libclamunrar.so.6 libclamunrar_iface.so.6 rpmlib(CompressedFileNames) 3.0.4-1 rpmlib(PayloadFilesHavePrefix) 4.0-1 rpmlib(VersionedDependencies) 3.0.3-1
所以我可以看到正确的版本要求在rpm包中。
所以我使用yum来安装新的clamav,我希望yum会怨声载道,因为它不会在其回购版中findlibclamav-0.97.6-1。 相反,我得到这个:
[root@localhost clamav]# yum install ./clamav-0.97.6-1.i386.rpm Loaded plugins: product-id, rhnplugin, subscription-manager Updating certificate-based repositories. Setting up Install Process Examining ./clamav-0.97.6-1.i386.rpm: clamav-0.97.6-1.i386 Marking ./clamav-0.97.6-1.i386.rpm as an update to clamav-0.97.3-9.i386 Resolving Dependencies --> Running transaction check ---> Package clamav.i386 0:0.97.3-9 will be updated ---> Package clamav.i386 0:0.97.6-1 will be an update --> Finished Dependency Resolution Dependencies Resolved ========================================================================================================== Package Arch Version Repository Size ========================================================================================================== Updating: clamav i386 0.97.6-1 /clamav-0.97.6-1.i386 825 k Transaction Summary ========================================================================================================== Upgrade 1 Package(s) Total size: 825 k Is this ok [y/N]: y Downloading Packages: Running rpm_check_debug Running Transaction Test Transaction Test Succeeded Running Transaction Updating : clamav-0.97.6-1.i386 1/2 error reading information on service clamav: No such file or directory Cleanup : clamav-0.97.3-9.i386 2/2 Installed products updated. Updated: clamav.i386 0:0.97.6-1 Complete! [root@localhost clamav]# rpm -qa '(lib)?clam*' libclamav-0.97.3-9.i386 clamav-0.97.6-1.i386 clamav-db-0.97.3-9.i386
怪怪的?
如果我删除所有当前安装的蛤包,并尝试安装新版本:
[root@localhost clamav]# rpm -qa '(lib)?clam*' [root@localhost clamav]# yum install ./clamav-0.97.6-1.i386.rpm Loaded plugins: product-id, rhnplugin, subscription-manager Updating certificate-based repositories. Setting up Install Process Examining ./clamav-0.97.6-1.i386.rpm: clamav-0.97.6-1.i386 Marking ./clamav-0.97.6-1.i386.rpm to be installed Resolving Dependencies --> Running transaction check ---> Package clamav.i386 0:0.97.6-1 will be installed --> Processing Dependency: libclamav = 0.97.6-1 for package: clamav-0.97.6-1.i386 --> Processing Dependency: clamav-db for package: clamav-0.97.6-1.i386 --> Processing Dependency: libclamav.so.6 for package: clamav-0.97.6-1.i386 --> Processing Dependency: libclamav.so.6(CLAMAV_PRIVATE) for package: clamav-0.97.6-1.i386 --> Processing Dependency: libclamav.so.6(CLAMAV_PUBLIC) for package: clamav-0.97.6-1.i386 --> Running transaction check ---> Package clamav-db.i386 0:0.97.3-9 will be installed ---> Package libclamav.i386 0:0.97.3-9 will be installed --> Finished Dependency Resolution Dependencies Resolved ========================================================================================================== Package Arch Version Repository Size ========================================================================================================== Installing: clamav i386 0.97.6-1 /clamav-0.97.6-1.i386 825 k Installing for dependencies: clamav-db i386 0.97.3-9 frog-i386-6-trunk 30 M libclamav i386 0.97.3-9 frog-i386-6-trunk 1.4 M Transaction Summary ========================================================================================================== Install 3 Package(s) Total size: 32 M Total download size: 31 M Installed size: 825 k Is this ok [y/N]: y Downloading Packages: (1/2): clamav-db-0.97.3-9.i386.rpm | 30 MB 00:07 (2/2): libclamav-0.97.3-9.i386.rpm | 1.4 MB 00:00 ---------------------------------------------------------------------------------------------------------- Total 4.0 MB/s | 31 MB 00:07 Running rpm_check_debug Running Transaction Test Transaction Test Succeeded Running Transaction Installing : clamav-db-0.97.3-9.i386 1/3 Installing : libclamav-0.97.3-9.i386 2/3 Installing : clamav-0.97.6-1.i386 3/3 error reading information on service clamav: No such file or directory Installed products updated. Installed: clamav.i386 0:0.97.6-1 Dependency Installed: clamav-db.i386 0:0.97.3-9 libclamav.i386 0:0.97.3-9 Complete!
所以它正在寻找依赖的回购和忽略版本部分。 如果我用-v标志再次运行它,我得到dep分辨率输出如下
Checking deps for clamav.i386 0:0.97.6-1 - u looking for ('config(clamav)', 'EQ', ('0', '0.97.6', '1')) as a requirement of clamav.i386 0:0.97.6-1 - u looking for ('libclamav', 'EQ', ('0', '0.97.6', '1')) as a requirement of clamav.i386 0:0.97.6-1 - u looking for ('/bin/bash', None, (None, None, None)) as a requirement of clamav.i386 0:0.97.6-1 - u looking for ('/bin/sh', None, (None, None, None)) as a requirement of clamav.i386 0:0.97.6-1 - u looking for ('/bin/sh', None, (None, None, None)) as a requirement of clamav.i386 0:0.97.6-1 - u looking for ('/bin/sh', None, (None, None, None)) as a requirement of clamav.i386 0:0.97.6-1 - u looking for ('clamav-db', None, (None, None, None)) as a requirement of clamav.i386 0:0.97.6-1 - u looking for ('libbz2.so.1', None, (None, None, None)) as a requirement of clamav.i386 0:0.97.6-1 - u looking for ('libc.so.6', None, (None, None, None)) as a requirement of clamav.i386 0:0.97.6-1 - u looking for ('libc.so.6(GLIBC_2.0)', None, (None, None, None)) as a requirement of clamav.i386 0:0.97.6-1 - u looking for ('libc.so.6(GLIBC_2.1)', None, (None, None, None)) as a requirement of clamav.i386 0:0.97.6-1 - u looking for ('libc.so.6(GLIBC_2.1.3)', None, (None, None, None)) as a requirement of clamav.i386 0:0.97.6-1 - u looking for ('libc.so.6(GLIBC_2.2)', None, (None, None, None)) as a requirement of clamav.i386 0:0.97.6-1 - u looking for ('libc.so.6(GLIBC_2.3)', None, (None, None, None)) as a requirement of clamav.i386 0:0.97.6-1 - u looking for ('libc.so.6(GLIBC_2.3.4)', None, (None, None, None)) as a requirement of clamav.i386 0:0.97.6-1 - u looking for ('libc.so.6(GLIBC_2.7)', None, (None, None, None)) as a requirement of clamav.i386 0:0.97.6-1 - u looking for ('libclamav.so.6', None, (None, None, None)) as a requirement of clamav.i386 0:0.97.6-1 - u looking for ('libclamav.so.6(CLAMAV_PRIVATE)', None, (None, None, None)) as a requirement of clamav.i386 0:0.97.6-1 - u looking for ('libclamav.so.6(CLAMAV_PUBLIC)', None, (None, None, None)) as a requirement of clamav.i386 0:0.97.6-1 - u looking for ('libdl.so.2', None, (None, None, None)) as a requirement of clamav.i386 0:0.97.6-1 - u looking for ('libpthread.so.0', None, (None, None, None)) as a requirement of clamav.i386 0:0.97.6-1 - u looking for ('libpthread.so.0(GLIBC_2.0)', None, (None, None, None)) as a requirement of clamav.i386 0:0.97.6-1 - u looking for ('libpthread.so.0(GLIBC_2.1)', None, (None, None, None)) as a requirement of clamav.i386 0:0.97.6-1 - u looking for ('libpthread.so.0(GLIBC_2.3.2)', None, (None, None, None)) as a requirement of clamav.i386 0:0.97.6-1 - u looking for ('libresolv.so.2', None, (None, None, None)) as a requirement of clamav.i386 0:0.97.6-1 - u looking for ('libresolv.so.2(GLIBC_2.2)', None, (None, None, None)) as a requirement of clamav.i386 0:0.97.6-1 - u looking for ('libz.so.1', None, (None, None, None)) as a requirement of clamav.i386 0:0.97.6-1 - u looking for ('rtld(GNU_HASH)', None, (None, None, None)) as a requirement of clamav.i386 0:0.97.6-1 - u clamav-0.97.6-1.i386 requires: libclamav = 0.97.6-1 --> Processing Dependency: libclamav = 0.97.6-1 for package: clamav-0.97.6-1.i386 Searching pkgSack for dep: libclamav TSINFO: Marking libclamav-0.97.3-9.i386 as install for clamav-0.97.6-1.i386 clamav-0.97.6-1.i386 requires: clamav-db --> Processing Dependency: clamav-db for package: clamav-0.97.6-1.i386 Searching pkgSack for dep: clamav-db TSINFO: Marking clamav-db-0.97.3-9.i386 as install for clamav-0.97.6-1.i386 clamav-0.97.6-1.i386 requires: libclamav.so.6 --> Processing Dependency: libclamav.so.6 for package: clamav-0.97.6-1.i386 Searching pkgSack for dep: libclamav.so.6 libclamav-0.97.3-9.i386 already in ts, skipping this one clamav-0.97.6-1.i386 requires: libclamav.so.6(CLAMAV_PRIVATE) --> Processing Dependency: libclamav.so.6(CLAMAV_PRIVATE) for package: clamav-0.97.6-1.i386 Quick matched libclamav-0.97.3-9.i386 to require for libclamav.so.6(CLAMAV_PRIVATE) clamav-0.97.6-1.i386 requires: libclamav.so.6(CLAMAV_PUBLIC) --> Processing Dependency: libclamav.so.6(CLAMAV_PUBLIC) for package: clamav-0.97.6-1.i386 Quick matched libclamav-0.97.3-9.i386 to require for libclamav.so.6(CLAMAV_PUBLIC) --> Running transaction check ---> Package clamav-db.i386 0:0.97.3-9 will be installed Checking deps for clamav-db.i386 0:0.97.3-9 - u looking for ('config(clamav-db)', 'EQ', ('0', '0.97.3', '9')) as a requirement of clamav-db.i386 0:0.97.3-9 - u looking for ('/bin/sh', None, (None, None, None)) as a requirement of clamav-db.i386 0:0.97.3-9 - u ---> Package libclamav.i386 0:0.97.3-9 will be installed Checking deps for libclamav.i386 0:0.97.3-9 - u looking for ('libclamunrar_iface.so.6', None, (None, None, None)) as a requirement of libclamav.i386 0:0.97.3-9 - u looking for ('libclamunrar.so.6', None, (None, None, None)) as a requirement of libclamav.i386 0:0.97.3-9 - u looking for ('libclamunrar.so.6(CLAMAV_PRIVATE_UNRAR)', None, (None, None, None)) as a requirement of libclamav.i386 0:0.97.3-9 - u looking for ('libclamav.so.6', None, (None, None, None)) as a requirement of libclamav.i386 0:0.97.3-9 - u looking for ('libbz2.so.1', None, (None, None, None)) as a requirement of libclamav.i386 0:0.97.3-9 - u looking for ('libpthread.so.0(GLIBC_2.0)', None, (None, None, None)) as a requirement of libclamav.i386 0:0.97.3-9 - u looking for ('libc.so.6(GLIBC_2.1)', None, (None, None, None)) as a requirement of libclamav.i386 0:0.97.3-9 - u looking for ('libz.so.1', None, (None, None, None)) as a requirement of libclamav.i386 0:0.97.3-9 - u looking for ('libc.so.6(GLIBC_2.1.3)', None, (None, None, None)) as a requirement of libclamav.i386 0:0.97.3-9 - u looking for ('libc.so.6(GLIBC_2.3)', None, (None, None, None)) as a requirement of libclamav.i386 0:0.97.3-9 - u looking for ('libdl.so.2(GLIBC_2.1)', None, (None, None, None)) as a requirement of libclamav.i386 0:0.97.3-9 - u looking for ('libdl.so.2', None, (None, None, None)) as a requirement of libclamav.i386 0:0.97.3-9 - u looking for ('libm.so.6(GLIBC_2.0)', None, (None, None, None)) as a requirement of libclamav.i386 0:0.97.3-9 - u looking for ('libdl.so.2(GLIBC_2.0)', None, (None, None, None)) as a requirement of libclamav.i386 0:0.97.3-9 - u looking for ('libc.so.6(GLIBC_2.0)', None, (None, None, None)) as a requirement of libclamav.i386 0:0.97.3-9 - u looking for ('libm.so.6', None, (None, None, None)) as a requirement of libclamav.i386 0:0.97.3-9 - u looking for ('libc.so.6(GLIBC_2.7)', None, (None, None, None)) as a requirement of libclamav.i386 0:0.97.3-9 - u looking for ('libc.so.6', None, (None, None, None)) as a requirement of libclamav.i386 0:0.97.3-9 - u looking for ('rtld(GNU_HASH)', None, (None, None, None)) as a requirement of libclamav.i386 0:0.97.3-9 - u looking for ('/bin/sh', None, (None, None, None)) as a requirement of libclamav.i386 0:0.97.3-9 - u looking for ('libpthread.so.0(GLIBC_2.2)', None, (None, None, None)) as a requirement of libclamav.i386 0:0.97.3-9 - u looking for ('libpthread.so.0', None, (None, None, None)) as a requirement of libclamav.i386 0:0.97.3-9 - u --> Finished Dependency Resolution Dependency Process ending Depsolve time: 0.339 Dependencies Resolved
所以它看起来像无法findlibclamav的新版本,但标记为旧,而不是因为它提供了clamav的文件之一。
任何人都可以帮助我到底这是真的做我的坚果!
谢谢
检查libclamav软件包提供的符号:
rpm -qp --provides ./libclamav-0.97.6-1.i386.rpm
并确保没有未版本化的libclamav符号。 在我的情况下,这是一个问题的原因,因为未版本化的符号满足任何版本的提供/冲突节。
它看起来好像找不到其他软件包,就像它们没有被复制到回购站,并重新生成了重新数据一样。 如果你尝试用yum install libclamav-0.97.6-1安装正确的版本libclamav,会发生什么? 如果找不到,我会检查它应该在的回购,确保回购可以正确地重新生成。