web-dev-qa-db-fra.com

Rendre apt-get update et upgrade automatisé et sans surveillance

J'ai environ 7 serveurs Debian que je gère et je voudrais les configurer pour qu'ils se mettent à jour automatiquement. J'ai donc créé un script en tant que tel:

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

et l'a placé sur la liste crontab de root. Malheureusement, il se bloque toujours sur la section Mise à niveau, demandant si je suis sûr que je veux mettre à niveau. Parce que c'est un travail cron, je ne vois pas la sortie jusqu'à ce qu'il m'envoie un e-mail disant qu'il a échoué. Existe-t-il un moyen de lui faire sauter cette invite et de faire la mise à niveau automatiquement?

31
Canadian Luke

Utilisez l'option -y pour apt-get de ne pas demander. 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.

Vous pouvez également définir la variable env DEBIAN_FRONTEND

DEBIAN_FRONTEND=noninteractive apt-get -y upgrade
48
Arthur Ulfeldt

Eh bien, vous utilisez peut-être le mauvais outil. unattended-upgrades le package installe les mises à jour de sécurité quotidiennement (peut être configuré), vous pouvez configurer les packages à mettre à niveau ou non, etc. Peut être installé à l'aide de:

Sudo apt-get install unattended-upgrades

De man unattended-upgrades:

La configuration se fait via le mécanisme de configuration apt. Le fichier de configuration par défaut se trouve dans /etc/apt/apt.conf.d/50unattended-upgrades

28
Braiam

bien que les réponses précédentes soient informatives, elles ne contournent pas le "problème" de saisie requis par les moyens humains pendant upgrade. par conséquent, j'utilise les éléments suivants:

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

pour inclure les mises à niveau de "distribution" comme les noyaux, utilisez le dist-upgrade commande.

veuillez consulter le manpgage de dpkg pour des informations détaillées sur ces paramètres.

note d'importation : appel de Sudo y compris -E le paramètre est requis:

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.

sinon, les instructions EXPORT n'affecteront pas les appels de apt-get!

le crédit revient à Remy van Elst ! Merci!

10
jitter

Un outil générique pour ce genre de chose est yes:

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

Ainsi, par exemple, vous pourriez faire

yes | Sudo apt-get upgrade 

Veuillez noter que dans le cas spécifique de apt-get upgrade utiliser les options suggérées par @ Braiam ou @ ArthurUlfeldt est préférable.

3
terdon