Назад | Перейти на главную страницу

Yum не может обновляться - есть конфликты

В чем проблема

Короче говоря, вот что вызывает у меня головную боль:

--> Finished Dependency Resolution
Error: Package: policycoreutils-2.5-11.el7_3.x86_64 (base)
           Requires: libsepol.so.1(LIBSEPOL_1.0)(64bit)
Error: Package: libsemanage-2.5-5.1.el7_3.x86_64 (base)
           Requires: libsepol.so.1(LIBSEPOL_1.0)(64bit)
Error: Package: 1:NetworkManager-tui-1.4.0-14.el7_3.x86_64 (base)
           Requires: libjansson.so.4()(64bit)
Error: Package: libsemanage-2.5-5.1.el7_3.x86_64 (base)
           Requires: libsepol.so.1(LIBSEPOL_1.1)(64bit)
Error: Package: 7:lvm2-2.02.166-1.el7_3.2.x86_64 (base)
           Requires: device-mapper-persistent-data >= 0.6.3-1
           Installed: device-mapper-persistent-data-0.6.2-1.el7_2.x86_64 (@base)
               device-mapper-persistent-data = 0.6.2-1.el7_2
Error: Package: policycoreutils-2.5-11.el7_3.x86_64 (base)
           Requires: libselinux-utils >= 2.5-6
           Installed: libselinux-utils-2.2.2-6.el7.x86_64 (@anaconda)
               libselinux-utils = 2.2.2-6.el7
Error: Package: 1:NetworkManager-libnm-1.4.0-14.el7_3.x86_64 (base)
           Requires: libjansson.so.4()(64bit)
Error: Package: 1:NetworkManager-1.4.0-14.el7_3.x86_64 (base)
           Requires: libjansson.so.4()(64bit)
Error: Package: kernel-3.10.0-514.6.1.el7.x86_64 (base)
           Requires: linux-firmware >= 20160830-49
           Installed: linux-firmware-20150904-43.git6ebf5d5.el7.noarch (@anaconda)
               linux-firmware = 20150904-43.git6ebf5d5.el7
Error: Package: policycoreutils-2.5-11.el7_3.x86_64 (base)
           Requires: libsepol >= 2.5-6
           Installed: libsepol-2.1.9-3.el7.x86_64 (@anaconda)
               libsepol = 2.1.9-3.el7
Error: Package: policycoreutils-2.5-11.el7_3.x86_64 (base)
           Requires: libsepol.so.1(LIBSEPOL_1.1)(64bit)
 You could try using --skip-broken to work around the problem
 You could try running: rpm -Va --nofiles --nodigest  

Системная информация

На сервере работает CentOS 7. Он не имеет дополнительных репозиториев и использует только пакеты из основных репозиториев CentOS 7. Не было установлено никакого программного обеспечения, которое по умолчанию не предоставляется yum.

Что я пробовал и что выяснил

Я уже много чего пробовал, поэтому постараюсь их исключить:

Чистка конфет

yum clean all в принципе.

Очистка каталога кеша yum

rm -rf /var/cache/yum и восстановление с yum makecache

Проверка репозитория

Я пробовал несколько репозиториев, и во всех из них я проверял, действительно ли там есть файлы обновлений. Я даже попытался загрузить некоторые RPM из репозитория и обновить их вручную, это прекрасно работает. Но, очевидно, я хочу, чтобы yum сделал это за меня.

Проверка конфигураций репозитория

Файлы под /etc/yum.repos.d кажутся прекрасными и полностью соответствуют другому серверу, который работает просто идеально.

Проверка реполиста

yum repolist - и вот находка! Видеть:

# yum repolist
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
repo id                             repo name                             status
base/7/x86_64                       CentOS-7 - Base                       807
extras/7/x86_64                     CentOS-7 - Extras                     807
updates/7/x86_64                    CentOS-7 - Updates                    807
repolist: 2,421 

Обратите внимание, что в каждом есть только 807 пакетов. На других моих серверах есть намного больше доступных пакетов.

Проверка базы данных yum sqlite

Я попытался загрузить primary_db.sqlite с сервера, чтобы изучить его с помощью редактора SQLite. И на самом деле в каталоге всего 807 записей. packages стол.

Очевидно, это очищалось множество раз, так что это не старый остаток.

... И вот тут-то и пригодятся вы, ребята. У меня нет хороших идей, но мне кажется, что они сузились до числа 807. Почему всего 807 пакетов? Я, конечно, гуглил как маньяк, но ничего подобного не нашел.

Я нашел здесь еще одну ветку с кем-то, у кого, похоже, такая же проблема, но не дал много информации: Конфликт зависимостей при обновлении Yum в CentOS 7

Обновления

Комментарий 1

yum.conf

[main]
cachedir=/var/cache/yum/$basearch/$releasever
keepcache=0
debuglevel=2
logfile=/var/log/yum.log
exactarch=1
obsoletes=1
gpgcheck=1
plugins=1
installonly_limit=5
bugtracker_url=http://bugs.centos.org/set_project.php?project_id=23&ref=http://bugs.centos.org/bug_report_page.php?category=yum
distroverpkg=centos-release


#  This is the default, if you make this bigger yum won't see if the metadata
# is newer on the remote and so you'll "gain" the bandwidth of not having to
# download the new metadata and "pay" for it by yum not having correct
# information.
#  It is esp. important, to have correct metadata, for distributions like
# Fedora which don't keep old packages around. If you don't like this checking
# interupting your command line usage, it's much better to have something
# manually check the metadata once an hour (yum-updatesd will do this).
# metadata_expire=90m

# PUT YOUR REPOS HERE OR IN separate files named file.repo
# in /etc/yum.repos.d 

All yum.repos.d files http://pastebin.centos.org/65881/

Хорошо, теперь мы видим, что в вашем CentOS-Base.repo ваш baseurl неверно для трех из четырех репозиториев.

РЕПО base, extras и centosplus (который отключен) у всех плохие baseurl. Вместо того, чтобы указывать на фактическое соответствующее репо на выбранном вами зеркале, все они указывают на updates репо.

Вы обнаружите, что это очень легко исправить. Просто измените baseurl чтобы указать на правильное репо, согласно примеру, уже присутствующему в файле.

После того, как вы это исправите, вам следует yum clean all очередной раз.