¿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?

에이 바
fuente
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 
에이 바
fuente
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
fuero
fuente
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).

Hauke ​​Laging
fuente
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