yum remove no es idempotente

yum remove no es idempotente

En algunas máquinas virtuales Centos, tengo algunos paquetes MySQL para eliminar (a través de yum) y luego instalar MariaDB (a través de rpm), todo en un script de shell. Yo uso yum para eliminar:

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

Ahora, en algunas máquinas virtuales, tal vez el paquete del cliente no esté instalado, por lo que yum dice:

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"  

Sé que la falla de conexión se debe a nuestro FireWall y demás.

Mi pregunta es:
¿Se le puede decir a yum que ignore los paquetes faltantes?
¿O al menos simplemente fallar No Match for argumentsin conectarse a espejos y demás?

El título de la pregunta se refiere al hecho de que yum remove -y mysql-community-clientseguido de yum remove -y mysql-community-clienthará que se conecte a los espejos, mientras que quiero que diga "paquete desinstalado" seguido de "paquete ya desinstalado".

Reformulando el problema: el problema no es con RPM (solo lo mencioné para completar mi problema), el problema es con yum. yum remove Xeliminará X, si está instalado. Si no está instalado, buscará en los espejos que quiero evitar. Quiero que yum diga "X no instalado" y salga.

Respuesta1

Podemos discutir durante mucho tiempo cómo se comporta o debería comportarse el yum, pero para abreviar la historia:

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

es lo que probablemente quieras.

Respuesta2

Si entendí correctamente, desea impedir el acceso a la red, deshabilitar los complementos y desinstalar solo aquellos mysql-communitypaquetes que estén instalados actualmente. Entonces, ¿qué tal

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

y eso solo coincidirá con cualquier paquete instalado que coincida con el glob "*mysql-community*". Aunque, en general, personalmente nunca usaría -yflag junto con remove.

Si solo desea desinstalar selectivamente paquetes específicos si están instalados, entonces elrespuesta de tomáses exactamente lo que necesitas.

Respuesta3

Si instala un paquete usando rpmun repositorio de yum en lugar de hacerlo desde él, yum no sabrá cómo determinar cuándo se ha eliminado el rpm, porque no hay ningún repositorio relevante al que consultar. Entonces parte de eso (MariaDB) no puede hacerse idempotente.

Si desea que su script sea idempotente, un mejor enfoque sería usarlo rpm -qpara el paquete dado para determinar si está instalado y usar ese resultado para decidir si ejecutar yum.

Si lo utiliza rpmpara instalar un paquete, yumno lo notará inmediatamente, pero le advertirá cuando le solicite que actualice su sistema que la base de datos RPM se instaló fuera de yum. Por este motivo, debe utilizar yum installpara instalar los paquetes MariaDB desde su conjunto de RPM.

información relacionada