ローカルファイルディレクトリから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をすべて無視し、出力をまったく提供しません。
私のシステム(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