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

yum install local rpm выдает ошибку, если обновлен

При установке пакетов 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