Error: Package: perl-IO-Compress-2.052-1.el6.rfx.noarch и использование yum-plugin-priorities

Автор: | 17/07/2014
 

centos-logo-new-4При установке пакета возникает ошибка:

# yum -y install spamassassin
...
---> Package perl-TimeDate.noarch 1:1.16-11.1.el6 will be installed
--> Finished Dependency Resolution
Error: Package: perl-IO-Compress-2.052-1.el6.rfx.noarch (rpmforge-extras)
Requires: perl(Compress::Raw::Zlib) = 2.052
Available: perl-Compress-Raw-Zlib-2.030-1.el6.rfx.x86_64 (rpmforge-extras)
perl(Compress::Raw::Zlib) = 2.030
Available: perl-Compress-Raw-Zlib-2.033-1.el6.rfx.x86_64 (rpmforge-extras)
perl(Compress::Raw::Zlib) = 2.033
Available: perl-Compress-Raw-Zlib-2.034-1.el6.rfx.x86_64 (rpmforge-extras)
perl(Compress::Raw::Zlib) = 2.034
Available: perl-Compress-Raw-Zlib-2.035-1.el6.rfx.x86_64 (rpmforge-extras)
perl(Compress::Raw::Zlib) = 2.035
Available: perl-Compress-Raw-Zlib-2.037-1.el6.rfx.x86_64 (rpmforge-extras)
perl(Compress::Raw::Zlib) = 2.037
Available: perl-Compress-Raw-Zlib-2.051-1.el6.rfx.x86_64 (rpmforge-extras)
perl(Compress::Raw::Zlib) = 2.051
Available: perl-Compress-Raw-Zlib-2.052-1.el6.rfx.x86_64 (rpmforge-extras)
perl(Compress::Raw::Zlib) = 2.052
Installing: 1:perl-Compress-Raw-Zlib-2.021-136.el6.x86_64 (base)
perl(Compress::Raw::Zlib) = 2.021
You could try using --skip-broken to work around the problem
You could try running: rpm -Va --nofiles --nodigest

Причина – yum устанавливает пакеты зависимостей из разных репозиториев, в результате возникает проблема версий между уже установленными пакетами, и теми, которые yum хочет установить.

Другой пример:

---> Package perl-UNIVERSAL-isa.noarch 0:1.03-1.el6 will be installed
--> Finished Dependency Resolution
Error: Package: perl-IO-Compress-2.052-1.el6.rfx.noarch (rpmforge-extras)
Requires: perl(Compress::Raw::Bzip2) = 2.052
Available: perl-Compress-Raw-Bzip2-2.021-136.el6.x86_64 (base)
perl(Compress::Raw::Bzip2) = 2.021
Error: Package: perl-IO-Compress-2.052-1.el6.rfx.noarch (rpmforge-extras)
Requires: perl(Compress::Raw::Zlib) = 2.052
Available: 1:perl-Compress-Raw-Zlib-2.021-136.el6.x86_64 (base)
perl(Compress::Raw::Zlib) = 2.021
You could try using --skip-broken to work around the problem
You could try running: rpm -Va --nofiles --nodigest

Быстрое решение – установка только из одного репозитория:

# yum -y install spamassassin --disablerepo="base"

Ещё вариант – исключить пакет perl-Compress-Raw-Bzip2 из репозитория CentOS-Base.

Для этого редактируем файл /etc/yum.repos.d/CentOS-Base.repo, и добавляем в блок [base] исключение:

exclude=perl-Compress-Raw-Bzip2

Или так:

exclude=perl-Compress-Raw-*

Проблему решило именно такое решение.

Но правильный подход – использование плагина yum-plugin-priorities:

# yum -y install yum-plugin-priorities

>Данный плагин может быть использован для обеспечения упорядоченности защиты репозиториев посредством назначения им приоритетов. Пакеты из репозитория с более низким приоритетом никогда не будут использоваться для обновления пакетов, которые были установлены из репозиториев с более высоким приоритетом. Приоритеты так же используются для установки нового пакета – если пакет находится более чем в одном репозитории, он будет установлен из репозитория с наивысшим приоритетом. Этот плагин будет наиболее полезен тем пользователям, которые используют сторонние репозитории, так как они потенциально могут поставить под угрозу стабильность вашей системы CentOS.

После установки – проверим файл /etc/yum.conf, в котором должно быть разрешено использование плагинов:

plugins=1

Активируем сам плагин, в файле /etc/yum/pluginconf.d/priorities.conf:

[main]
enabled = 1

Теперь, в файлах настроек репозиториев можно использовать строку:

priority=1

Где 1 – уровень приоритета, при этом 1 – первый, самый высокий, а 99 – последний, самый низкий приоритет.

Например, у нас имеются репозитории:

# ls -1 /etc/yum.repos.d/
CentOS-Base.repo
CentOS-Debuginfo.repo
CentOS-Media.repo
CentOS-Vault.repo
elrepo.repo
epel.repo
epel-testing.repo
mirrors-rpmforge
mirrors-rpmforge-extras
mirrors-rpmforge-testing
nginx.repo
remi.repo
rpmforge.repo
rpmforge.repo.rpmsave

Установим проритет=1 для главного репозитория.

Редактируем файл /etc/yum.repos.d/CentOS-Base.repo:

[base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
priority=1

То же повторяем для остальных блоков ([updates][extras] и т.д.)

Остальные:

CentOS-Vault.repo – содержит пакеты для предыдущих версий CentOS, по-умолчанию отключены:

# cat CentOS-Vault.repo | grep enable
enabled=0
enabled=0
enabled=0
...

оставляем как есть;

CentOS-Media.repo – пакеты с медиа-носителей (CD/DVD), тоже отключен:

# cat CentOS-Media.repo | grep enable
# yum --enablerepo=c6-media [command]
# yum --disablerepo=* --enablerepo=c6-media [command]
enabled=0

elrepo.repo – 3rd party-репозиторий, ставим priority=20:

# cat elrepo.repo | grep prior
priority=20
priority=20
priority=20
priority=20

То же повторяем для epel.repo, epel-testing.repo, rpmforge.repo, remi.repo.

А вот для репозитория nginx.repo – приоритет поставим повыше:

priority=15