Не обновляется CentOS 7

При выполнении команды yum update процедура обновления зависала. Проблемы были разные и я собрал много граблей, попробовал много вариантов. Возможно, кому-то поможет и часть описанных решений.

Эта статься более-менее упорядоченная заметка из наработок по решению проблемы. Рекомендую сначала ознакомиться со всем, а потом уже что-то выполнять.

Перед тем как начать снова проверять работу yum update, не забывайте проверять, есть ли уже выполняющийся процесс yum, который надо прервать: ps -Af | grep yum.

Первично ситуация выглядела вот так:

# yum update
BDB2053 Freeing read locks for locker 0x913: 362700/140094288074560
Loaded plugins: fastestmirror, langpacks, openvz, priorities, product-id, refresh-packagekit, rhsm-auto-add-pools, search-disabled-repos, vzlinux
Determining fastest mirrors

В основном ошибка гуглится по:

BDB2053 Freeing read locks for locker

Итак, варианты поиска проблемы. Если зависает именно на Determining fastest mirrors, то это можно отключить в /etc/yum/pluginconf.d/fastestmirror.conf (Enable=0).

В /etc/yum.conf выставить debuglevel побольше, (я 4 выставлял).

В /etc/yum.conf можно отключить загрузку плагинов при выполнении yum update (мне не помогло).

После чего можно посмотреть и список доступных репозиториев и показывается ли он вообще:

yum repolist

Если зависает и на этом этапе, то смотрим какие репозитории лежат в каталоге ls -la /etc/yum.repos.d/ и вручную убираем некоторые и повторно выполняем команду yum repolist. Так у меня нашёл репозиторий, на котором всё зависло. Это был epel.repo и чинилось это путём замены в нём ссылок с https на http. Но на этом моя проблема не решилась.

По ходу поискал аналогичных проблем я наткнулся на рекомендацию по проверке наличия дубликатов пакетов в системе. Я посмотрел есть ли дубликаты пакетов:

package-cleanup --dupes

libtevent-0.9.33-2.vl7.x86_64
....
....
gdb-7.6.1-114.vl7.x86_64
gdb-7.6.1-110.vl....

Список был довольно большой, 284 пакета (подсчитать можно вот так — package-cleanup —dupes | wc -l).

Чтобы избавиться от дубликатов запускается команда:

package-cleanup --cleandupes

Очень большой вывод. Первая часть:

# package-cleanup --cleandupes
Loaded plugins: fastestmirror, langpacks, openvz, priorities, product-id, refresh-packagekit, vzlinux

...

Not removing pcsc-lite-libs-1.8.8-7.vl7.x86_64 because it is required by 1 installed package
Not removing python-criu-3.10.0.11-1.vz7.x86_64 because it is required by 1 installed package
There are unfinished transactions remaining. You might consider running yum-complete-transaction, or "yum-complete-transaction --cleanup-only" and "yum history redo last", first to finish them. If those don't work you'll have to try removing/installing packages by hand (maybe package-cleanup can help).

Далее много успешных действий:

--> Running transaction check
---> Package GeoIP.x86_64 0:1.5.0-11.vl7 will be erased
---> Package OVMF.noarch 0:20171011-4.git92d07e48907f.vz7.6 will be erased
---> Package augeas-libs.x86_64 0:1.4.0-5.vl7.1 will be erased

А потом всё повисло на:

--> Finished Dependency Resolution

Не знаю что именно помогло в починке package-cleanup —cleandupes, поэтому опишу ниже ещё рекомендованные действия, если есть проблемы с yum update.


Довольно популярное решение на просторах сети:

rm -f /var/lib/rpm/__db*
db_verify /var/lib/rpm/Packages
rm -rf /var/cache/yum
rpm --rebuilddb
yum clean all
yum update

В том или ином виде. Иногда команд меньше. Я пробовал это решение с самого начала, но результата не было.

Ещё помечена у меня такая команда:

yum history new

Есть рекомендация переустановить centos-release. Перед этим надо удалить старую версию:

# rpm -e centos-release --nodeps

А потом вот тут — http://mirror.centos.org/centos/7/os/x86_64/Packages/ взять новый свежий пакет:

rpm -Uvh http://mirror.centos.org/centos/7/os/x86_64/Packages/centos-****.rpm


Ещё одно решение из интернета, я его не пробовал.

NSS_DISABLE_HW_AES=1
# yum downgrade nss nss-util nss-tool nss-sysinit
# yum install yum-plugin-versionlock
# yum versionlock add! nss-3.21.0-0.3.el6_7.x86_64 nss-sysinit-3.21.0-0.3.el6_7.x86_64 nss-tools-3.21.0-0.3.el6_7.x86_64 nss-util-3.21.0-0.3.el6_7.x86_64

Но пробовал только первую строчку в сочетании с проверкой выполнения других команд (попыток обновления через yum update или считать список репозиториев). И это тоже даёт свой результат и наводки на действия. Потом вернул в NSS_DISABLE_HW_AES=0.


В процессе решения проблемы я проверял версию yum

yum version

и получил вот такой ответ:

Loaded plugins: langpacks, openvz, priorities, product-id, refresh-packagekit, rhsm-auto-add-pools, search-disabled-repos, vzlinux
Warning: RPMDB altered outside of yum.
** Found 141 pre-existing rpmdb problem(s), 'yum check' output follows:

Это как раз к отсылке с проблемой по дублирующимся пакетам, т.е. сообщение указывает на эту проблему. И я снова вернулся к попытке удалить дублирующиеся пакеты командой package-cleanup —cleandupes и у меня получилось. Процесс не завис и пошёл дальше «—> Finished Dependency Resolution».

--> Finished Dependency Resolution

Dependency Process ending
Depsolve time: 0.239

Dependencies Resolved

Removing:
....

и далее большой список на удаление. Я дал согласие на удаление, но пакеты удалились не все.

Я не стал вначале возиться с удалением пакетов, которые не удалились командой package-cleanup —cleandupes, а попробовал сразу ещё раз yum update. И команда наконец-то отработала, но с ошибкой:

Error: Multilib version problems found. This often means that the root
cause is something else and multilib version checking is just
pointing out that there is a problem. Eg.:

1. You have an upgrade for libselinux which is missing some
dependency that another package requires. Yum is trying to
...

2. You have multiple architectures of libselinux installed, but
....

3. You have duplicate versions of libselinux installed already.
You can use "yum check" to get yum show these errors.

...you can also use --setopt=protected_multilib=false to remove
this checking, however this is almost never the correct thing to
do as something else is very likely to go wrong (often causing
much more problems).

Protected multilib versions: libselinux-2.5-14.1.vl7.i686 != libselinux-2.5-12.vl7.x86_64

В моём случае проблема с libselinux. В других случаях могут быть другие библиотеки. В конце выполнения команды есть рекомендация —setopt=protected_multilib=false, но она так же предостерегает что это может вызвать ещё больше проблем, поэтому я сразу команду с этим аргументом выполнять не торопился.

По libselinux. В интернете решение вопроса по мультилибам либо очевидное, как воспользоваться советом из консоли, взяв аргумент setopt=protected_multilib=false (и я в другой ситуации так делал). А есть решения удалять дубликаты пакетов вручную, например вот так:

rpm -e --nodeps --justdb libselinux

Т.е. среди установленных пакетов ищутся дубликаты:

yum list --showduplicates | grep libselinux

и удаляются. Такой способ я не опробовал, т.к. система боевая. Удаление нужного рабочего пакета может привести к потери работоспособности системы.


Дополнительный список команд.

yum clean dbcache

rpm -Va проверит корректность всех пакетов установленных в системе

yum-complete-transaction —cleanup-only
yum history redo last — не отработала

rpm -qa | grep selin — просмотреть установленные пакеты

yum clean dbcache

Добавить комментарий