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

28

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 rootliste crontab de. Malheureusement, il se bloque toujours sur la section de mise à niveau, demandant si je suis sûr que je veux mettre à niveau. Parce que c'est un travail cron, je ne vois pas le résultat jusqu'à ce qu'il m'envoie un e-mail disant qu'il a échoué. Existe-t-il un moyen de lui faire ignorer cette invite et de faire la mise à niveau automatiquement?

Canadian Luke REINSTATE MONICA
la source
3
... ou cron-apt.
derobert

Réponses:

46

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
Arthur Ulfeldt
la source
1
Que fait DEBIAN_FRONTEND-il? Est-il également utilisé pour d'autres processus?
Canadian Luke REINSTATE MONICA
J'essaye ceci sur mon serveur domestique, et choisirai la meilleure réponse dès qu'elle s'exécutera
Canadian Luke REINSTATE MONICA
1
@CanadianLuke voir ici pour DEBIAN_FRONTEND. Ce n'est pas mentionné dans mon Debian man debconf, donc c'est peut-être une chose Ubuntu.
terdon
@terdon vous n'avez pas le paquet -doc pour debconf. C'est dans la section 7 de l'homme man 7 debconf;)
Braiam
@Braiam ah, OK, j'ai vu ça et j'ai essayé man 7 debconfmais je n'ai rien obtenu. Maintenant je sais pourquoi :)
terdon
27

Eh bien, vous utilisez peut-être le mauvais outil. unattended-upgradesle package installe des mises à niveau 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 à /etc/apt/apt.conf.d/50unattended-upgrades

Braiam
la source
@CanadianLuke, il lit toutes les configurations /etc/apt/apt.conf.d/mais seulement celles commençant par Unattended-Upgrade::sont analysées.
Braiam
J'essaie ceci sur l'un des serveurs au travail, et je choisirai la meilleure réponse dès qu'elle s'exécutera
Canadian Luke REINSTATE MONICA
10

Bien que les réponses précédentes soient informatives, elles ne contournent pas le «problème» de contribution 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 à jour de «distribution» comme les noyaux, utilisez la dist-upgradecommande.

veuillez consulter le manuel dedpkg pour des informations détaillées sur ces paramètres.

note importat : l'appel sudoincluant le -Eparamètre est obligatoire:

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 EXPORTdéclarations n'affecteront pas les appels de apt-get!

le mérite revient à Remy van Elst ! Merci!

gigue
la source
1
Pourriez-vous expliquer pourquoi vous avez ajouté les autres options à la mise à niveau apt-get?
FarO
1
En outre, "sudo -E" est-il requis si le script est exécuté à partir de la crontab de rott?
FarO
1
@FarO qui dépend de quel environnement / dans quel contexte vous souhaitez que le cronjob s'exécute. généralement, ils sont gérés par root- vous n'avez donc pas besoin de les utiliser sudodu tout. les «autres options» sont définies pour s'exécuter sans surveillance dans tous les cas. veuillez consulter la manpage référencée .
jitter
4

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 l' apt-get upgradeutilisation des options suggérées par @Braiam ou @ArthurUlfeldt, c'est mieux.

terdon
la source
La ligne que je colle lorsque je veux le faire manuellement est apt-get update && yes | apt-get upgrade(nos serveurs ne sont pas censés utiliser sudo... Ne demandez pas ...)
Canadian Luke REINSTATE MONICA
Pourquoi utiliser une astuce au lieu d'une option déjà fournie ?? "-y" est déjà dans apt-get.
FarO
3
Parce que, comme je l'ai dit dans la réponse, c'est un outil générique pour ce genre d'opération, donc cette réponse est pour d'autres cas, pas pour apt. Vous n'avez pas lu le dernier paragraphe? Ou la première phrase?
terdon