Realice apt-get update y automatice y desatendido

28

Tengo unos 7 servidores Debian que administro, y me gustaría configurarlos para que se actualicen automáticamente. Entonces, creé un script como tal:

#!/bin/sh
apt-get update
apt-get upgrade

y lo colocó en la rootlista de crontab. Desafortunadamente, siempre se cuelga en la sección Actualizar, preguntando si estoy seguro de querer actualizar. Debido a que es un trabajo cron, no veo el resultado hasta que me envía un correo electrónico diciendo que ha fallado. ¿Hay alguna manera de que omita ese aviso y simplemente realice la actualización automáticamente?

El canadiense Luke REINSTATE MONICA
fuente
3
... o cron-apt.
derobert

Respuestas:

46

Use la opción -y para apt-get para que no pregunte. De man apt-get:

   -y, --yes, --assume-yes
       Automatic yes to prompts; assume "yes" as answer to all prompts and
       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.

También puede establecer la variable env DEBIAN_FRONTEND

DEBIAN_FRONTEND=noninteractive apt-get -y upgrade
Arthur Ulfeldt
fuente
1
¿Qué DEBIAN_FRONTENDhacer? ¿Se usa también para otros procesos?
Canadian Luke REINSTATE MONICA
Estoy probando esto en mi servidor doméstico, y elegiré la mejor respuesta tan pronto como se ejecute
Canadian Luke REINSTATE MONICA
1
@CanadianLuke mira aquí para DEBIAN_FRONTEND. Sin man debconfembargo, no se menciona en mi Debian , por lo que puede ser algo de Ubuntu.
terdon
@terdon no tiene el paquete -doc para debconf. Está en la sección 7 del hombre man 7 debconf;)
Braiam
@Braiam ah, está bien, lo vi e intenté man 7 debconfpero no obtuve nada. Ahora sé por qué :)
terdon
27

Bueno, tal vez estás usando la herramienta incorrecta. unattended-upgradesel paquete instala actualizaciones de seguridad a diario (puede configurarse), puede configurar qué paquetes actualizar o no actualizar, etc. Puede instalarse usando:

sudo apt-get install unattended-upgrades

De man unattended-upgrades:

La configuración se realiza a través del mecanismo de configuración apt. El archivo de configuración predeterminado se puede encontrar en /etc/apt/apt.conf.d/50unattended-upgrades

Braiam
fuente
@CanadianLuke lee todas las configuraciones, /etc/apt/apt.conf.d/pero solo las que comienzan con Unattended-Upgrade::se analizan.
Braiam
Estoy intentando esto en uno de los servidores en el trabajo, y elegiré la mejor respuesta tan pronto como se ejecute
canadiense Luke REINSTATE MONICA el
10

Si bien las respuestas anteriores son informativas, no eluden el "problema" de entrada requerido por medios humanos durante upgrade. por lo tanto, estoy usando lo siguiente:

export DEBIAN_FRONTEND=noninteractive
export DEBIAN_PRIORITY=critical
sudo -E apt-get -qy update
sudo -E apt-get -qy -o "Dpkg::Options::=--force-confdef" -o "Dpkg::Options::=--force-confold" upgrade
sudo -E apt-get -qy autoclean

para incluir actualizaciones de 'distribución' como los núcleos, use el dist-upgradecomando

consulte el manual de mandpkg para obtener información detallada sobre estos parámetros.

nota importante : se requiere llamar sudoincluyendo el -Eparámetro:

Indicates to the security policy that the user wishes to preserve their existing environment variables. The security policy may return an error if the user does not have permission to preserve the environment.

de lo contrario, las EXPORTdeclaraciones no afectarán las llamadas de apt-get!

¡El crédito va para Remy van Elst ! ¡Gracias!

estar nervioso
fuente
1
¿Podría explicar por qué agregó las otras opciones a apt-get upgrade?
FarO
1
Además, ¿se requiere "sudo -E" si el script se ejecuta desde crontab de rott?
FarO
1
@FarO que depende de qué entorno / en qué contexto desea que se ejecute el cronjob. generalmente, estos son ejecutados por root, por lo que no necesita usarlos sudoen absoluto. las 'otras opciones' están configuradas para ejecutarse desatendidas en cualquier caso. por favor vea la manpágina referenciada .
nerviosismo el
4

Una herramienta genérica para este tipo de cosas es yes:

DESCRIPTION
       Repeatedly output a line with all specified STRING(s), or 'y'.

Entonces, por ejemplo, podrías hacer

yes | sudo apt-get upgrade 

Tenga en cuenta que en el caso específico de apt-get upgradeusar las opciones sugeridas por @Braiam o @ArthurUlfeldt es mejor.

terdon
fuente
La línea que pego cuando quiero hacerlo manualmente es apt-get update && yes | apt-get upgrade(se supone que nuestros servidores no deben usar sudo... No preguntes ...)
Canadian Luke REINSTATE MONICA
¿Por qué usar un truco en lugar de una opción ya proporcionada? "-y" ya está en apt-get.
FarO
3
Porque, como dije en la respuesta, esta es una herramienta genérica para este tipo de operación, por lo que esta respuesta es para otros casos, no para apt. ¿No leíste el último párrafo? O la primera oración?
terdon