У меня есть несколько экземпляров CentOS, некоторые из которых используются разработчиками, и в них включены сторонние репозитории (иногда их собственные). Однако с административной точки зрения удобно иметь возможность принудительно выполнить обновление в скрипте, не вмешиваясь в локальный yum.conf или анализируя выходные данные или yum.repos.d, чтобы увидеть, какой из них является неисправным репо.
Похоже, разработчики заметили это с этой опцией;
-t, --tolerant
но очевидно, что это было более сложной задачей, чем они ожидали, потому что на странице руководства;
This option currently does nothing.
Очевидно, когда я делаю это вручную, я могу обойти репозитории с помощью;
yum --disablerepo=broken-repo deplist mypackage
и чтобы сделать обновление по сценарию более надежным, я могу использовать (который, по крайней мере, определенно устанавливает обновления дистрибутива)
yum -y --disablerepo=* --enablerepo=updates update
но это не относится к случаю, когда есть EPEL, или rpmforge, или rbel, или какой-либо распространитель пакетов, для которого мне пришлось бы сначала проанализировать файл yum.repos.d.
Этот сценарий может немного помочь:
LC_ALL=C yum repolist 2>/dev/null \
| awk '/^repo id/ {A=1; next} /^[a-zA-Z0-9_-]+ / {if(A) print $1}' \
| xargs -i yum -y --disablerepo=* --enablerepo={} update
# Some packages may need packages from other repository
yum -y update
Он работает, получая список репозиториев с yum repolist
, выбирая имена репозиториев из вывода, используя awk
а затем пытаюсь обновить их все по одному.
Это не на 100% надежно, так как зависит от неизменного формата вывода yum. Также, если при обновлении необходимо установить другой пакет из другого репозитория и есть сломанный репозиторий, он все равно не сработает, но я полагаю, что это не так часто.