При установке пакета возникает ошибка:
# 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