Actualización de Debian 100% no interactiva

38

¿Hay alguna manera de hacer un apt-get dist-upgradeen Debian que no solo responda automáticamente "sí" a todas las preguntas formuladas, sino que también use valores predeterminados razonables como respuestas a preguntas que sean lo suficientemente sofisticadas como para requerir que aparezcan varios cuadros de diálogo interactivos? Estoy pensando aquí en el mapa de teclas que se muestra cuando se actualiza libc6, y en las opciones de imagen del núcleo.

El objetivo es ser capaz de iniciar remotamente un bastante grande dist-upgrade- incluso para una máquina que está muy atrás en el tiempo - y no tener que cuidar en absoluto, a menos que algo es simplemente horrible, desastrosamente mal.

¿Seguramente esto es posible?

¡Gracias por adelantado!

Alex Balashov
fuente
Para aquellos que solo desean actualizar (en lugar de dist-upgrade) en Ubuntu, pruebe el paquete de actualización desatendida .
Jo Liss

Respuestas:

42

Si configura DEBIAN_FRONTEND=noninteractive(para evitar que aparezcan mensajes de debconf) y agregue force-confoldy force-confdefa su /etc/dpkg/dpkg.cfgarchivo, debería tener una experiencia de instalación de paquetes completamente no interactiva. Cualquier paquete que todavía le solicite información tiene un error crítico de lanzamiento (y lo digo como un adicto a la automatización y como desarrollador de Debian).

womble
fuente
Esto no funcionó para mí. apt-listchangesfue inaugurado por less.
magnetar
@magnetar: Eso es un problema con apt-listchanges, no con apt. Desinstale apt-listchanges o configúrelo adecuadamente.
womble
1
Prueba: env APT_LISTCHANGES_FRONTEND = none apt-get dist-upgrade -u -y
H.-Dirk Schmitt
21

Florian Lohoff publicó una forma de obtener lo que womble sugirió en un solo comando:

DEBIAN_FRONTEND=noninteractive \
apt-get \
-o Dpkg::Options::="--force-confnew" \
--force-yes \
-fuy \
dist-upgrade

Por supuesto, también puede usar -o Dpkg::Options::="--force-confnew --force-confdef"(busque en la página de manual de dpkg para confnew). Sin embargo, no estoy seguro de en qué casos esto marcaría la diferencia. Personalmente necesito la actualización no interactiva para actualizar las imágenes de vainilla, en cuyo caso supongo que elegir siempre el nuevo archivo de configuración (sin --force-confdef) es algo razonable.

Jo Liss
fuente
W: --force-yes is deprecated, use one of the options starting with --allow instead.
Alex
3

Aunque la respuesta de womble anterior es generalmente buena, no funcionó para mí y tuve que hacer una investigación adicional para estar 100% desatendida. Pensé que compartiría el resultado de manera concisa para simplificar las cosas para futuros visitantes.

El siguiente es un script que se ejecutará de acuerdo con las recomendaciones de actualización de las notas de la versión de Debian 8 (principalmente) junto con indicadores y variables de entorno que lo harán desatendido. (los echos son solo para depurar y podrían eliminarse, aunque recomiendo mantenerlos para que si el script se atasca sabrás dónde)

#!/bin/bash

apt-get remove apt-listchanges --assume-yes --force-yes &&

#using export is important since some of the commands in the script will fire in a subshell
export DEBIAN_FRONTEND=noninteractive &&
export APT_LISTCHANGES_FRONTEND=none &&

#lib6c was an issue for me as it ignored the DEBIAN_FRONTEND environment variable and fired a prompt anyway. This should fix it
echo 'libc6 libraries/restart-without-asking boolean true' | debconf-set-selections &&

echo "executing wheezy to jessie" &&
find /etc/apt -name "*.list" | xargs sed -i '/^deb/s/wheezy/jessie/g' &&

echo "executing autoremove" &&
apt-get -fuy --force-yes autoremove &&

echo "executing clean" &&
apt-get --force-yes clean &&

echo "executing update" &&
apt-get update &&

echo "executing upgrade" &&
apt-get --force-yes -o Dpkg::Options::="--force-confold" --force-yes -o Dpkg::Options::="--force-confdef" -fuy upgrade &&

echo "executing dist-upgrade" &&
apt-get --force-yes -o Dpkg::Options::="--force-confold" --force-yes -o Dpkg::Options::="--force-confdef" -fuy dist-upgrade
Tom Klino
fuente
1
Nota: "--force-yes Force yes; esta es una opción peligrosa que hará que continúe sin avisar si está haciendo algo potencialmente dañino. No debe usarse excepto en situaciones muy especiales. Usar force-yes puede potencialmente destruir su sistema! Elemento de configuración: APT :: Get :: force-yes. Esto está en desuso y se reemplaza por --allow-downgrades, --allow-remove-essential, --allow-change-held-packages en 1.1 ".
Alex
1

> = Apt 1.1

Si está utilizando Apt 1.1 o superior, --force-yesse ha quedado en desuso , por lo que ha de utilizar las opciones a partir de --allowsu lugar, por ejemplo --allow-downgrades, --allow-remove-essential, --allow-change-held-packages.

Entonces el comando es:

DEBIAN_FRONTEND=noninteractive \
  apt-get \
  -o Dpkg::Options::=--force-confold \
  -o Dpkg::Options::=--force-confdef \
  -y --allow-downgrades --allow-remove-essential --allow-change-held-packages \
  dist-upgrade

Nota: Use --force-confoldpara mantener viejas y --force-confnewpara mantener nuevas configuraciones.

Fuente: CFE-2360: Informe la versión del módulo del paquete apt_get .

Relacionado:

kenorb
fuente
-4

Desde la apt-get(8)página del manual:

   -y, --yes, --assume-yes
       Automatic yes to prompts; assume "yes" as answer to all prompts
       run non-interactively. If an undesirable situation, such as
       changing a held package, trying to install a unauthenticated
       package or removing an essential package occurs then apt-get will
       abort. Configuration Item: APT::Get::Assume-Yes.

Como referencia, la -yopción también funciona yum(8).

koenigdmj
fuente
55
Yo sé sobre eso. Uso ese indicador y responde con éxito 'sí' a las preguntas estándar APT S / N sobre cómo seguir sobrescribiendo configuraciones existentes, etc., etc. Estas no son las preguntas a las que me refiero. Cuando realizo una actualización de apt-get -y dist, todavía me dio algunas indicaciones de "diálogo" para lo que considera cosas importantes, es decir, cambios en el mapa de teclas, reinicio del servicio relacionado con libc6, etc. Estaba buscando un indicador adicional para apaga eso también.
Alex Balashov