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 argument
sin conectarse a espejos y demás?
El título de la pregunta se refiere al hecho de que yum remove -y mysql-community-client
seguido de yum remove -y mysql-community-client
hará 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 X
eliminará 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-community
paquetes 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 -y
flag 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 rpm
un 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 -q
para el paquete dado para determinar si está instalado y usar ese resultado para decidir si ejecutar yum.
Si lo utiliza rpm
para instalar un paquete, yum
no 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 install
para instalar los paquetes MariaDB desde su conjunto de RPM.