Em algumas VMs Centos, tenho alguns pacotes MySQL para remover (via yum) e depois instalar o MariaDB (via rpm), tudo em um script de shell. Eu uso o yum para remoção:
yum remove -y mysql-community-client
yum remove -y mysql-community-release
yum remove -y mysql-community-libs
yum remove -y mysql-community-common
Agora, em algumas VMs, talvez o pacote do cliente não esteja instalado, então yum diz:
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"
Eu sei que a falha de conexão é por causa do nosso FireWall e tal.
Minha pergunta é:
é possível dizer ao yum para ignorar pacotes ausentes?
Ou pelo menos simplesmente falhar com No Match for argument
, sem conectar-se a espelhos e tal?
O título da pergunta refere-se ao fato de que yum remove -y mysql-community-client
seguido por yum remove -y mysql-community-client
fará com que ele se conecte a espelhos, enquanto eu quero dizer "pacote desinstalado" seguido de "pacote já desinstalado".
Reformulando o problema: O problema não é com o RPM (só mencionei isso para completar o meu problema), o problema é com o yum. yum remove X
removerá o X, se estiver instalado. Se não estiver instalado, irá procurar nos espelhos que desejo evitar. Quero que você diga "X não instalado" e saia.
Responder1
Podemos discutir por muito tempo como o yum se comporta ou deveria se comportar, mas para resumir a história:
yum --cacheonly remove -y mysql-community-client
é o que você provavelmente deseja.
Responder2
Se bem entendi, você deseja impedir o acesso à rede, desabilitar plug-ins e desinstalar apenas os mysql-community
pacotes que estão instalados atualmente. Então que tal
yum --disablerepo="*" --noplugins remove "*mysql-community*" -y
e isso corresponderá apenas a qualquer pacote instalado correspondente ao glob "*mysql-community*"
. Embora, em geral, eu pessoalmente nunca use -y
flag junto com remove
.
Se você deseja apenas desinstalar seletivamente pacotes específicos, se instalados, então oresposta de Tomásé exatamente o que você precisa.
Responder3
Se você instalar um pacote usando rpm
em vez de um repositório yum, o yum não saberá como determinar quando o rpm foi removido, porque não há nenhum repositório relevante ao qual se referir. Portanto, parte disso (MariaDB) não pode se tornar idempotente.
Se você quiser tornar seu script idempotente, uma abordagem melhor seria usar rpm -q
o pacote fornecido para determinar se ele está instalado e usar esse resultado para decidir se deve executar o yum.
Se você usar rpm
um pacote para instalar, yum
não notará imediatamente, mas avisará quando você pedir para atualizar seu sistema que o banco de dados RPM foi instalado fora do yum. Por este motivo, você deve usar yum install
para instalar os pacotes MariaDB do seu conjunto de RPMs.