Gestion automatique des paquets.

Gestion automatique des paquets.

Il existe chez Debian plusieurs méthodes permettant la gestion automatique des paquets, entres autres en ce qui concerne les mises à jour.

Dans un environnement de bureau comme Gnome, des utilitaires tels que update-manager permettent d'être informé en cas de présence de mises à jour et même d'en appliquer automatiquement, typiquement celles relatives à la sécurité.

Qu'en est-il pour une machine tel qu'un serveur où vous n'avez aucune envie d'installer ces utilitaires haut niveau ? C'est l'objet de cet article dans lequel est présenté la solution cron-apt.

Notez qu'il existe des alternatives à cron-apt. unattended-upgrade propose une autre approche basée sur APT::Periodic, elle est peut être plus simple à mettre en place, elle n'autorise cependant que des mises à jour sur une fréquence quotidienne.

cron-apt

L'installation par défaut de cron-apt place une cron dans /etc/cron.d/cron-apt exécutée quotidiennement à 4 heure du matin. Il est cependant possible de modifier /etc/cron.d/cron-apt à volonté pour excuter cron-apt plus fréquemment ou même avec des configurations alternatives. Les fichiers de /etc/cron.d/ permettent une planification plus précise et fréquente que la cron /etc/cron.daily/ utilisé par APT::Periodic.

cron-apt appellera chaque jour les actions déclarées dans les fichiers de /etc/cron-apt/action.d/. L'ordre numérique des noms de fichier est respecté pour l'appel des actions.

Le format des actions déclarées dans les fichiers de /etc/cron-apt/action.d/ est simple, il s'agit des arguments et options passés à apt-get. Il est possible de définir une autre commande via la variable APTCOMMAND (cf. fichier /etc/cron-apt/config), cependant le reste de cet article est basé sur la configuration par défaut, à savoir apt-get. Un fichier de /etc/cron-apt/action.d/ peut contenir plusieurs actions à raison de une par ligne.

Un rapide coup d'oeil dans /etc/cron-apt/action.d/ montre la présence de deux actions installées par défaut :

  • 0-update:
    update -o quiet=2
  • 3-download:
    autoclean -y
    dist-upgrade -d -y -o APT::Get::Show-Upgraded=true

L'installation par défaut va donc synchroniser l'index répertoriant les paquets disponibles (0-update) et télécharger les mises à jour disponibles sans les installer (3-download). Cette action réalise aussi un nettoyage des paquets téléchargés dans le cache mais dont la version est obsolète.

Cas pratique des mises à jour de sécurité

Une utilisation particulièrement intéressante de cron-apt est l'installation automatique des mises à jour de sécurité. Ci dessous est détaillée la configuration nécessaire pour y parvenir.

Les mises à jour de sécurité automatiques sont envisageables car elles sont dans l'écrasante majorité des cas faisables sans intervention de l'utilisateur (fichiers de configuration des paquets identiques, pas d'écran debconf).

Avant de commencer la configuration, veiller à déposer un fichier vide, nommé refrain dans /etc/cron-apt, cela annulera toute tentative d'exécution de cron-apt qui pourrait être malheureuse en cas de configuration incomplète.

Commençons maintenant par créer une nouvelle action : 6-upgrade. Le fichier du même nom contiendra l'appel à apt-get permettant la mise à jour des paquets dans leur version supérieure, soit "upgrade". De plus il faut indiquer à apt-get de n'utiliser que les paquets en provenance du dépôt security.debian.org. Voici à quoi doit ressembler le fichier /etc/cron-apt/action.d/6-upgrade :

upgrade --config-file /etc/cron-apt/cron-apt.conf

Afin que apt-get ne pioche que parmi les paquets de security.debian.org il faut écrire une configuration alternative de apt qui est indiqué --config-file . Créer le fichier /etc/cron-apt/cron-apt.conf et ajouter la configuration suivant :

APT::Default-Release "wheezy";
APT::Get::Assume-Yes "true";
Dir::Etc::SourceList "/etc/cron-apt/security.list";
Dir::Etc::SourceParts "/dev/null";
// Ligne à supprimer pour effectivement réaliser les mises à jour.
APT::Get::Simulate "true";
//

Quelques explications

Dir::Etc::SourceList : Cette configuration alternative de APT repose donc sur un fichier de sources spécifiques pour le dépôt de sécurité, ici "/etc/cron-apt/security.list". Veillez à bien créer ce fichier et à le remplir convenablement avec le dépôt de sécurité.

Dir::Etc::SourceParts : Par défaut apt ajoutera toutes les sources déclarées dans /etc/apt/sources.list.d/. Avec cette option configurée à "/dev/null" seul le fichier déclaré précédemment dans Dir::Etc::SourceList sera lu.

APT::Get::Assume-Yes : Cette option permet l'exécution non interactive.

APT::Get::Simulate "true"; : Un garde fou permettant de tester la configuration en toute sécurité. Avec cette options les actions de apt-get seront uniquement simulées, aucun paquet ne sera installé. Par défaut cron-apt va écrire dans les log système. Vous pouvez par exemple surveiller /var/log/syslog pour vérifier qu'il se comporte correctement.

Test et mise en production

Une fois que la configuration est en place vous pouvez tester l'ensemble. Retirer le ficher /etc/cron-apt/refrain et exécuter cron-apt avec les droit de root. Placer DEBUG="verbose" dans /etc/cron-apt/config et contrôler le résultat dans /var/log/cron-apt/. Quand vous êtes satisfait, commenter la ligne "APT::Get::Simulate" et modifiez /etc/cron.d/cron-apt en fonction de vos besoins.

Pour être informé par mail des mises à jour appliquées par cron-apt, utilisez la configuration "MAILON=upgrade" dans /etc/cron-apt/config.

Comments

1. On Monday, May 6 2013, 13:06 by Pet_Sauce_Vagabondée

Ça me paraît pas mal et utile, merci pour l'article ;)

Add a comment

HTML code is displayed as text and web addresses are automatically converted.

This post's comments feed