¿Cómo instalar paquetes con APT sin interacción del usuario?


9

Tengo un script que descarga y reemplaza los encabezados del núcleo en Debian Squeeze.

function fixHeaders(){
    #Replace the kernel headers from OVH with standard kernel headers...
    aptitude -y install linux-image-2.6.32-5-amd64  
    sed s/'GRUB_DEFAULT=0'/'GRUB_DEFAULT=1'/g
    update-grub
    echo "Rebooting the machine. Run this script again after reboot and choose option 2."
    sleep 1
    reboot  
}

El problema que tengo es que después de que aptitude descarga el paquete, arroja el script a una interfaz gráfica de usuario y le hace al usuario un montón de preguntas. ¿Hay alguna forma de omitir esto o enviar una pestaña / ingresar en los momentos apropiados para seleccionar "Aceptar" para todas las respuestas?


1
No estoy seguro de si funciona en su caso, pero la configuración DEBIAN_FRONTEND = noninteractivefunciona para las actualizaciones de lanzamiento de debian / ubuntu.
Daniel t.

Respuestas:


9

Basado en el comentario de Daniel t pude hacer esto con DEBIAN_FRONTEND=noninteractive

DEBIAN_FRONTEND=noninteractive /usr/bin/apt-get install -y -q --force-yes linux-image-2.6.32-5-amd64 

1
También debe investigar la preselección de los paquetes. Esto le permite responder las preguntas incluso antes de que se hagan.
Zoredache

4

Tenga en cuenta que esta respuesta que cito no eliminará todos los diálogos, seguirá mostrando lo que APT / DPKG considera crítico . Quizás sea mejor experimentar con la segunda opción + usando el readlinefrontend para debconfy preparar un archivo de respuesta.

Citando de un sitio hermano :

Esto debería hacer lo que pediste; haciendo las preguntas de configuración después:

$ DEBIAN_PRIORITY=critical
$ export DEBIAN_PRIORITY
$ apt-get upgrade
# Wait a long time.   Should be almost entirely noninteractive.
$ dpkg-reconfigure --default-priority=medium --unseen-only

Alternativamente, puede intentar hacer todas las preguntas de configuración antes:

$ apt-get clean
$ cat >> /etc/apt/apt.conf <<EOF
// Pre-configure all packages before
// they are installed.
DPkg::Pre-Install-Pkgs {
    "dpkg-preconfigure --apt --priority=low";
};
EOF
$ apt-get upgrade

La actualización de apt-get no funcionará en mi situación. Estoy reemplazando los encabezados del núcleo, no actualizando el núcleo a una nueva versión, sino seleccionando una versión diferente.
에이 바

Cité la respuesta tal como está. Esto funciona apt-get installtan bien como dpkg-configurese llamará de cualquier manera.
fuero

Eso todavía incita al usuario a responder preguntas, que no verán ya que esa parte del script se ejecuta dentro de una función; podría cambiarlo pero la persona que ejecuta el script (que no soy yo) no lo entenderá. Realmente estaba buscando una solución automatizada.
에이 바

0

Puede enviar lo que quiera con la herramienta expect, dado que puede identificar los "tiempos apropiados" (porque la entrada no cambia).


La cantidad de veces que se pulsa "OK" varía según la máquina y sus configuraciones.
에이 바

Eso por sí solo probablemente no sea un problema, siempre y cuando sea posible reconocer correctamente las preguntas (o el final de las preguntas).
Hauke ​​Laging
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.