Я упаковал clamav в некоторые rpms для распространения внутри нашего rhn, однако у меня возникают некоторые проблемы с разрешением зависимостей при обновлении.
файл спецификации строит 4 пакета:
clamav - содержит основные файлы
clamav-db - содержит файлы определений вирусов libclamav - содержит clamav libs libclamav-devel - содержит файлы разработки
Мне нужно, чтобы clamav требовал, чтобы установленный libclamav был той же версии и выпуска, что и он сам. например clamav-0.96.3-9 должен требовать libclamav-0.96.3-9
однако clamav-db может быть любой версии (он обновляется с помощью freshclam и действительно нужен только при установке, чтобы минимизировать сетевой трафик во время транзакций rpm)
Теперь в файле спецификации я определил пакеты следующим образом
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.
Это позволяет собрать 4 пакета в чистом chroot. Я отправляю их на свой тестовый сервер.
Текущие версии моллюсков:
[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
У меня есть новые rpms в локальной файловой системе с правильными требованиями:
[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.
Поэтому я устанавливаю новый clamav с помощью yum и ожидаю, что yum будет горько жаловаться, так как не найдет libclamav-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
Странно, да?
Если я удалю все установленные в данный момент пакеты clam и попытаюсь установить новую версию:
[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, я получу вывод разрешения деп, как показано ниже
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
Таким образом, похоже, что он не может найти новую версию libclamav, но вместо этого помечает старую, поскольку она предоставляет один из файлов для clamav.
Может ли кто-нибудь помочь мне разобраться в этом, это действительно меня убивает!
Спасибо
Проверьте, какие символы предоставляет пакет libclamav:
rpm -qp --provides ./libclamav-0.97.6-1.i386.rpm
и убедитесь, что нет неверсированных libclamav
условное обозначение. В моем случае это было причиной проблемы, потому что неверсированные символы удовлетворяют любым строфам с поддержкой версий / конфликтов.
Это похоже на то, что он не может найти другие пакеты, как будто они не были скопированы в репо, а реподанные были регенерированы. Что произойдет, если вы попытаетесь установить правильную версию libclamav с помощью yum install libclamav-0.97.6-1? Если он не может его найти, я бы проверил репо, в котором оно должно быть, убедитесь, что репо может быть восстановлено правильно.