Linux

如果是最新的,yum install local rpm 會拋出錯誤

  • January 16, 2020

從本地文件目錄安裝 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 軟體包上完成的,這些軟體包可能在任何時候都包含其他軟體包。

我想一種選擇是在 shell 腳本中迭代它們並檢查它們是否已安裝,但是依賴解析可能會變得相當痛苦,聽起來確實像是重新發明了一輛自行車。

更新:

rpm --install將根據失敗包的數量拋出退出程式碼。 https://www.redhat.com/archives/rpm-list/2005-July/msg00071.html

rpm --freshen將忽略以前未安裝的任何 rpm,同時根本不提供任何輸出。

在我的系統(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

引用自:https://serverfault.com/questions/880398