Centos

yum remove 不是冪等的

  • January 24, 2020

在一些 Centos 虛擬機上,我有一些 MySQL 包要刪除(通過 yum),然後安裝 MariaDB(通過 rpm),所有這些都在一個 shell 腳本中。我使用 yum 進行刪除:

yum remove -y mysql-community-client  
yum remove -y mysql-community-release  
yum remove -y mysql-community-libs  
yum remove -y mysql-community-common  

現在,在某些虛擬機上,可能沒有安裝客戶端軟體包,所以 yum 說:

No Match for argument: mysql-community-client  
Determining fastest mirrors  
Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=6&arch=x86_64&repo=os&infra=stock error was  
14: PYCURL ERROR 7 - "couldn't connect to host"  

我知道連接失敗是因為我們的防火牆等等。

我的問題是:

可以告訴百勝忽略失去的包裹嗎?

或者至少只是失敗了No Match for argument,沒有連接到鏡像等?

問題標題是指yum remove -y mysql-community-client後面yum remove -y mysql-community-client會使其連接到鏡像的事實,而我希望它說“已解除安裝軟體包”,然後是“已解除安裝軟體包”。

重新表述問題:問題不在於 RPM(我只提到了我的問題的完整性),問題在於 yum。yum remove X將刪除 X,如果它已安裝。如果未安裝,它將在我想避免的鏡像中搜尋。我想讓 yum 說“X 未安裝”並退出。

我們可以長時間討論 yum 的行為或應該如何行為,但長話短說:

yum --cacheonly remove -y mysql-community-client

是你可能想要的。

如果我理解正確,您想阻止網路訪問,禁用外掛並僅解除安裝mysql-community目前安裝的那些軟體包。那麼怎麼樣

yum --disablerepo="*" --noplugins remove "*mysql-community*" -y

並且只會匹配 glob 匹配的任何已安裝包"*mysql-community*"。雖然總的來說,我個人永遠不會將-yflag 與remove.

如果您只想選擇性地解除安裝已安裝的特定軟體包,那麼Thomas 的答案正是您所需要的。

引用自:https://unix.stackexchange.com/questions/240710