yum remove не является идемпотентным

yum remove не является идемпотентным

На некоторых виртуальных машинах Centos мне нужно удалить несколько пакетов 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  

Теперь, на некоторых виртуальных машинах, клиентский пакет может быть не установлен, поэтому 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. yum remove Xудалит X, если он установлен. Если он не установлен, он будет искать в зеркалах, чего я хочу избежать. Я хочу, чтобы yum сказал «X не установлен» и вышел.

решение1

Мы можем долго рассуждать о том, как ведет себя или должна вести себя ням, но если говорить кратко:

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

это то, что вам, вероятно, нужно.

решение2

Если я правильно понял, вы хотите запретить сетевой доступ, отключить плагины и удалить только те mysql-communityпакеты, которые установлены в данный момент. Так что насчет

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

и это будет соответствовать только любому установленному пакету, соответствующему glob "*mysql-community*". Хотя в целом я лично никогда не использую -yflag вместе с remove.

Если вы хотите выборочно удалить только определенные пакеты, если они установлены, тоответ от Томасаименно то, что вам нужно.

решение3

Если вы устанавливаете пакет, используя, rpmа не из репозитория yum, yum не будет знать, как определить, когда был удален rpm, поскольку нет соответствующего репозитория, на который можно было бы сослаться. Поэтому часть этого (MariaDB) не может быть сделана идемпотентной.

Если вы хотите сделать свой скрипт идемпотентным, лучшим подходом будет использование rpm -qfor для указанного пакета, чтобы определить, установлен ли он, и использовать этот результат для принятия решения о том, следует ли запускать yum.

Если вы используете rpmдля установки пакета, yumне заметит сразу, но предупредит вас, когда вы попросите его обновить вашу систему, что база данных RPM была установлена ​​вне yum. По этой причине вам следует использовать yum installдля установки пакетов MariaDB из вашего набора RPM.

Связанный контент