При установке пакетов rpm из локального файлового каталога он работает нормально с первого раза
sudo yum install packages/* -y --disablerepo=*
Когда то же самое выполняется во второй раз как часть автоматизированных сценариев, возникает ошибка (код выхода 1)
packages/package.rpm: does not update installed package.
Error: Nothing to do
Я могу запустить yum update (код выхода 0)
sudo yum update packages/* -y --disablerepo=*
...
No packages marked for update
Проблема заключается в том, что обновление пропускает пакеты, которые не установлены.
Я не хочу игнорировать код выхода, если здесь есть какие-то реальные проблемы, и просто хочу сделать install-or-update
. Есть ли rpm -i
эквивалент, который достиг бы этого? Обратите внимание, что это делается для группы пакетов rpm, которые в любой момент могут включать дополнительные.
Я предполагаю, что одним из вариантов было бы перебрать их в сценарии оболочки и проверить, установлены ли они или нет, но опять же разрешение зависимостей может стать довольно болезненным, и это действительно похоже на повторное изобретение велосипеда.
ОБНОВИТЬ:
rpm --install
выдаст код выхода в зависимости от количества неудачных пакетов. https://www.redhat.com/archives/rpm-list/2005-July/msg00071.html
rpm --freshen
игнорирует любые ранее не установленные rpms и не выводит никаких результатов.
в моей системе (centos6, centos7) «yum localinstall» вернет код 0 даже с сообщением «Ошибка: ничего не делать», а «yum install» вернет 1.
sudo yum localinstall packages/* -y --disablerepo=*
В любом случае вы также можете проверить результат сообщения, чтобы игнорировать это как «обычную ошибку» в ваших сценариях автоматизации, например, используя bash:
sudo yum install packages/* -y --disablerepo=* 2>&1 | tee /tmp/yum.output
grep -q "Error: Nothing to do" /tmp/yum.output
if [ $? -eq 0 ]; then
... code for no error
else
... code for error
fi