yum remove はべき等ではない

yum remove はべき等ではない

いくつかの Centos VM では、シェル スクリプトで、いくつかの MySQL パッケージを削除 (yum 経由) し、次に MariaDB をインストール (rpm 経由) する必要があります。削除には 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  

現在、一部の VM ではクライアント パッケージがインストールされていない可能性があるため、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"  

接続失敗の原因はファイアウォールなどにあることはわかっています。

私の質問は、
yum に不足しているパッケージを無視するように指示できますか?
または、少なくともNo Match for argumentミラーなどに接続せずに、 で単に失敗することはできますか?

yum remove -y mysql-community-client質問のタイトルは、 に続いて を実行するとミラーに接続するという事実を示していますyum remove -y mysql-community-clientが、私は「パッケージがアンインストールされました」に続いて「パッケージは既にアンインストールされています」と表示されるようにしたいと考えています。

問題を言い換えると、問題は RPM にあるのではなく (問題の完全性のために言及しただけです)、yum にあります。X がyum remove Xインストールされている場合は、それを削除します。インストールされていない場合は、ミラーを検索しますが、これは避けたいことです。yum に「X がインストールされていません」と表示して終了してもらいたいのです。

答え1

yum がどのように動作するか、またはどのように動作するべきかについては長々と議論できますが、簡単に言うと次のようになります。

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

おそらくあなたが望んでいるものでしょう。

答え2

mysql-community私の理解が正しければ、ネットワークアクセスを禁止し、プラグインを無効にし、現在インストールされているパッケージのみをアンインストールしたいということですね。では、

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

そして、これは glob に一致するインストール済みパッケージにのみ一致します"*mysql-community*"。ただし、一般的には、個人的には-yflag を と一緒に使用することは決してありませんremove

インストールされている特定のパッケージのみをアンインストールしたい場合は、トーマスからの回答まさにあなたが必要としているものです。

答え3

yum リポジトリからではなくを使用してパッケージをインストールする場合rpm、参照する関連リポジトリがないため、yum は rpm が削除されたことを判別できません。そのため、その一部 (MariaDB) をべき等にすることはできません。

スクリプトをべき等にしたい場合は、指定rpm -qされたパッケージに対して を使用して、それがインストールされているかどうかを判断し、その結果を使用して yum を実行するかどうかを決定する方がよい方法です。

rpmパッケージのインストールに を使用する場合、yumすぐには気付かれませんが、システムの更新を要求したときに、RPM データベースが yum の外部にインストールされたことを警告します。このため、yum installRPM セットから MariaDB パッケージをインストールするには を使用する必要があります。

関連情報