LightcodeSysadmin Open Source

Mettre à jour plusieurs machines Debian

Si vous possédez plusieurs machines, plusieurs problèmes vont survenir pour lors de la mise à jour de celles-ci. D’abord, vous allez devoir vérifier que ces machines sont bien à jour, si ce n’est pas le cas, vous allez devoir télécharger les nouveaux paquets puis enfin les installer. Si toutes vos machines utilisent la même connexion Internet, le débit de celle-ci sera beaucoup impacté si nous ne faisons rien car les machines vont télécharger plusieurs fois les mêmes paquets : ce n’est pas du tout optimisé.

Dans cet article, je vais vous montrer différentes astuces pour mettre à jour de serveurs sous Debian, d’abord pour automatiser certaines tâches lors de la mise à jour des serveurs puis nous verrons comment mettre en place un cache afin de ne télécharger qu’une seule fois un même paquet sur sa connexion Internet.

Administrer ses mises à jour

La méthode semi-manuelle

J’ai vu cette manière de faire en cherchant comment je pouvais automatiser un peu plus les mises à jour de mes machines virtuelles sous Debian. Elle consiste simplement à créer une tâche cron avec une commande de mise à jour. Nous pouvons donc trouver sur Internet des choses comme ça à mettre dans sa crontab :

0 0 * * 0 root (apt-get update && apt-get -y -d upgrade) > /dev/null

Cette commande va mettre à jour la liste des paquets puis va télécharger sans installer (grâce à l’option -d) les mises à jour. Il faudra ensuite les installer à la main en se connectant au serveur.

Cette technique ne permet pas d’installer les mises à jour automatiquement à moins de retirer l’option -d. Je ne le conseille pas car les packages peuvent demander des informations à l’administrateur lors de l’installation. Il est possible de retirer toutes les questions grâce aux variables d’environnement mais je pense que cela est trop risqué dans le cadre de la mise à jour d’un serveur en production.

Une amélioration de ce système consiste à utiliser le paquet cron-apt. Il permet de faire la même chose que la commande précédente, mais il enverra un mail quand des nouveaux paquets sont disponibles. Pour l’installer :

# apt-get install cron-apt

Vous pouvez configurer une adresse mail dans le fichier /etc/cron-apt/config :

MAILON="always"
MAILTO="toto@domain.example"

Ensuite, une fois que vous serez prévenu par mail qu’il faut mettre à jour le serveur, vous aurez juste à exécuter la commande suivante :

# apt-get dist-upgrade

Cette méthode de mise à jour est intéressante si nous avons qu’une seule machine mais avec une dizaine de machine, je préférais trouver une méthode pour centraliser les mises à jour.

Gestionnaire de mises à jour centralisé

L’autre solution que je vais vous présenter est apt-dater. Ce paquet s’installe sur un serveur et vous permettra d’ouvrir une interface en curse, dans votre terminal. Vous pourrez ainsi visualiser les serveurs que vous devez mettre à jour, lister les paquets qui seront modifiés et bien évidement mettre à jour un groupe de machine. Nous pouvons voir sur la capture d’écran, différentes sections dans lesquelles sont placées les machines en fonction de leur statut :

apt-dater permet de voir quels sont les paquets à mettre à jour directement depuis l’interface.

Lors d’une mise à jour, apt-dater va ouvrir un terminal sur la machine à mettre à jour grâce à screen. Vous allez ainsi pouvoir contrôler tout le processus de mise à jour. Avant de faire cette capture d’écran, j’ai demandé à mettre à jour tous les serveurs. apt-dater a alors lancer les commandes de mises à jour sur chaque serveur. Sur la capture d’écran, nous pouvons lister les sessions ouvertes par apt-dater et nous pouvons s’y connecter pour voir ce qui se passe :

Nous allons maintenant voir comment mettre en place apt-dater.

Configuration du serveur

L’installation de apt-dater se fait en deux temps : d’abord nous devons installer le serveur sur lequel s’exécutera l’interface, ensuite nous allons installer sur chaque hôte à mettre à jour le package apt-dater-host.

D’abord, il faut installer le package apt-dater :

server# apt-get install apt-dater

Nous devons ensuite choisir un utilisateur pour installer les mises à jour, j’ai choisi de l’appeler “updater” :

server# adduser updater

Ensuite, nous allons devoir créer une paire de clés SSH que l’on installera sur toutes les machines hôtes :

server# su - updater
updater@server$ ssh-keygen -t rsa

Le serveur est maintenant configuré, nous allons maintenant installer un hôte, pour cela on installe le paquet cité précédement :

host# apt-get install sudo apt-dater-host

Ensuite, nous allons créer le même utilisateur que sur notre serveur :

host# adduser updater

Toujours sur l’hôte, nous allons donner les droits à notre utilisateur d’exécuter les commandes de mise à jour. Nous allons alors exécuter la commande visudo puis nous ajoutons à la fin du fichier cette ligne :

updater ALL=NOPASSWD: /usr/bin/apt-get, /usr/bin/aptitude

Vous pouvez tester le bon fonctionnement en exécutant cette commande sur l’hôte :

updater@host$ sudo apt-get update

Si elle s’exécute sans demander de mot de passe alors ça fonctionne. Maintenant nous allons nous connecter sur le serveur pour installer la clé SSH que nous avons créée. Celle-ci permettra à apt-dater de se connecter en SSH sur les différents hôtes.

updater@server$ ssh-copy-id -i ~/.ssh/id_rsa.pub host.local

Nous avons presque terminé, il ne reste plus qu’à ajouter notre nouvel hôte à apt-dater.

Nous nous connectons au serveur avec l’utilisateur “updater”. Nous éditons le fichier ~/.config/apt-dater/hosts.conf pour ajouter notre nouvel hôte. Voici un exemple de fichier de configuration :

[Serveurs]
Hosts=host.local

Sur la première ligne est le nom de la catégorie dans laquelle nous voulons mettre notre serveur. Sur la deuxième ligne, nous écrirons, séparé par des “;”, le nom de nos serveurs. Ensuite, nous ouvrons apt-dater :

updater@server$ apt-dater

Notre nouvel hôte est dans la section “Unknown”, il faut alors le rafraîchir en le sélectionnant et en appuyant sur “g”.

Nous avons donc vu différentes méthodes pour mettre à jour nos serveurs. Ceci règle le problème de la surveillance des mises à jour sur un parc de machine. Maintenant nous allons voir comment installer un serveur de cache afin d’économiser notre bande passante vers Internet et d’accélérer les mises à jours.

Serveur de cache

Nous n’allons pas installer de miroir ici mais un serveur de cache. Le miroir sera un clone parfaitement synchronisé d’un dépôt distant. Le rôle d’un serveur de cache est de sauvegarder les paquets qui transitent via le proxy et de les redistribuer si d’autres clients les demandent.

Dans cet article, je vais vous montrer l’installation de apt-cacher, qui permet de réaliser notre proxy. D’abord nous installons le paquet :

# apt-get install apt-cacher apache2

Lors de l’installation, nous sélectionnerons comme “Méthode d’installation” le mode “démon”.

Nous éditons le fichier /etc/apt-cacher/apt-cacher.conf pour autoriser la connexion de toutes les machines sur notre proxy :

allowed_hosts = *

Nous devons ensuite redémarrer le service : service apt-cacher restart.

Nous pouvons vérifier que le port 3142 est bien écouté par un processus. Ensuite sur les clients, nous créons le fichier /etc/apt/apt.conf.d/01proxy où nous préciserons le nom du serveur de cache :

Acquire::http::Proxy "http://aptcacher:3142";

Les prochaines mises à jour de ses clients passeront via notre serveur de cache.

Conclusion

Nous avons vu dans cet article des méthodes pour améliorer les mises à jour sous Debian. Nous avons d’abord vu cron-apt qui permet de télécharger les mises à jour et d’envoyer un mail à l’administrateur lorsque de nouvelles mises à jour sont disponibles. Ensuite, nous avons parlé de apt-dater qui permet de gérer les mises à jour des serveurs à distance et nous avons vu comment installer un serveur. Enfin, nous avons vu quel était l’utilité d’un serveur de cache et comment en installer un.

Sources