При выполнении команды 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