web-dev-qa-db-ja.com

最新の場合、yum install local rpmがエラーをスローする

ローカルファイルディレクトリからrpmパッケージをインストールすると、初回は正常に実行されます

Sudo yum install packages/* -y --disablerepo=*

同じことを自動スクリプトの一部として2回目に実行すると、エラーがスローされます(終了コード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パッケージのグループで行われることに注意してください。

シェルスクリプトでそれらを繰り返し、それらがインストールされているかどうかを確認することは1つのオプションだと思いますが、依存関係の解決がやや苦痛になり、自転車を再発明するように聞こえるかもしれません。

UPDATE:

rpm --installは、失敗したパッケージの数に応じて終了コードをスローします。 https://www.redhat.com/archives/rpm-list/2005-July/msg00071.html

rpm --freshenは、以前にインストールされていないrpmをすべて無視し、出力をまったく提供しません。

4
JackLeo

私のシステム(centos6、centos7)では、「yum localinstall」は「Error:Nothing to do」メッセージが表示されてもコード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
3
tonioc