yum debería producirse un error cuando un paquete no está disponible

14

Recientemente me encontré con un error en un script donde intenté hacer lo siguiente:

yum -y install another_package.x86_64 some_package.x86_64 && run_my_script

El script se ejecutó bien en un CentOS más nuevo, pero cuando intenté ejecutarlo en Cent OS 5, some_package.x86_64no estaba disponible. Pero en lugar de equivocarse y detenerse, yumsimplemente imprimió el mensaje:

No package some_package.x86_64 available.

¿Cómo puedo forzar yumun error en tales situaciones (cuál IMO debería ser la predeterminada) para hacer que mis scripts sean más robustos?

pmr
fuente
Cree su secuencia de comandos con más confianza y compruebe el valor de retorno de yum antes de continuar.
frlan
1
@frlan Ese es el problema. yumfelizmente regresa 0en este caso. Mi script ya está comprobando el valor de retorno antes de continuar. Observe el &&?
pmr

Respuestas:

11

Como descubrió, este comportamiento cambió entre RHEL 5 y 6 (consulte https://bugzilla.redhat.com/show_bug.cgi?id=736694 para obtener más información). Desde ese enlace, verificar el código de retorno de yum info <pkg>debería permitirle abortar su script según sea necesario. Algo como:

# Set a variable containing the packages to install:
pkgs_to_install='another_package.x86_64 some_package.x86_64'

# Loop over the packages in the list:
for pkg in ${pkgs_to_install}; do
  # Stop executing if at least one package isn't available:
  yum info ${pkg} >> /dev/null 2>&1 || exit
done

# Continue running your original script:
yum -y install ${pkgs_to_install} && run_my_script
mvermaes
fuente
3
OK, eso ayuda y confirma que no estoy loco por pensar que este debería ser el valor predeterminado.
pmr
2
ayuda bien, el comportamiento actual de yum es bastante hostil para el uso de scripts.
Karata
13

Según el error 1274211 , esto se ha solucionado en yum-3.4.3-133.el7. Sin embargo, debe habilitar el modo estricto.

La forma más fácil de hacer esto con fines de secuencias de comandos es a través del interruptor de línea de comandos:

yum -y --setopt=skip_missing_names_on_install=False install another_package.x86_64 some_package.x86_64 && run_my_script

Sin embargo, también puede configurarlo como una opción de configuración en su yum.conf:

[main]
skip_missing_names_on_install=0
Boicot SE para Monica Cellio
fuente