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

как сделать yum устойчивым к сломанным URL-адресам репо

У меня есть несколько экземпляров 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. Также, если при обновлении необходимо установить другой пакет из другого репозитория и есть сломанный репозиторий, он все равно не сработает, но я полагаю, что это не так часто.