
Tengo un script desatendido para instalar servidores. Al principio del guión hay un sudo apt-get dist-upgrade --yes
. La actualización dist tiene una pantalla de entrada de usuario desagradable al final que solicita reiniciar los servicios:
¿Es posible aceptar automáticamente reinicios del servicio o desactivar esta pantalla? Rompe todo mi guión. También me temo que podría dejar mi servidor bloqueado en algún momento al actualizar...
Mismo resultado con apt-get update
editar: lo intenté sin éxito:
#!/bin/bash
sudo apt-get update
sudo 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" &&
sudo apt-get -fuy --force-yes autoremove &&
echo "executing clean" &&
sudo apt-get --force-yes clean &&
echo "executing update" &&
sudo apt-get update &&
echo "executing upgrade" &&
sudo apt-get --force-yes -o Dpkg::Options::="--force-confold" --force-yes -o Dpkg::Options::="--force-confdef" -fuyq upgrade &&
echo "executing dist-upgrade" &&
sudo apt-get --force-yes -o Dpkg::Options::="--force-confold" --force-yes -o Dpkg::Options::="--force-confdef" -fuyq dist-upgrade
Respuesta1
Otras respuestas simplemente se omitieron needrestart
por completo.
Pero la variable de entornoNEEDRESTART_MODE
permite especificar un modo. Y al elegir "(a)automáticamente", podrá beneficiarse needrestart
sin ser bloqueado por el mensaje:
sudo NEEDRESTART_MODE=a apt-get dist-upgrade --yes
Respuesta2
Como otros mencionaron, el problema en este caso está en el needrestart
comando, que ahora forma parte del proceso de actualización de apt-get en Ubuntu (específicamente 22.04, que es lo que estoy usando). De forma predeterminada, está configurado en modo "interactivo", lo que provoca la interrupción de los scripts.
Para cambiar este comportamiento, podemos editar el /etc/needrestart/needrestart.conf
archivo, cambiando la línea:
#$nrconf{restart} = 'i';
a
$nrconf{restart} = 'a';
(si queremos reiniciar los servicios automáticamente) o
$nrconf{restart} = 'l';
simplemente enumerar los servicios que necesitan reiniciarse.
Si está ejecutando un script y desea realizar esta edición sin usar un editor interactivo como vim, puede hacerlo usando sed
algo como:
sudo sed -i 's/#$nrconf{restart} = '"'"'i'"'"';/$nrconf{restart} = '"'"'a'"'"';/g' /etc/needrestart/needrestart.conf
Se ve feo debido a las comillas simples en el archivo de configuración y a cómo sed maneja las comillas simples, pero funciona. Deje un comentario si tiene un enfoque mejor.
Respuesta3
En lugar de usar sed o editar la configuración principal, agregue su propio archivo de configuración en /etc/needrestart/conf.d/no-prompt.conf:
$nrconf{restart} = 'a';
Respuesta4
Alternativamente, yopensarpuedes quitar elneedrestart
paquete en sí.
sudo apt-get remove needrestart
Estoy usando esto para el aprovisionamiento de AWS EC2 en Ubuntu 22.04. Por alguna razón, export DEBIAN_FRONTEND=noninteractive
no pareció funcionar.