Laisser un commentaire

Mise à jour automatique de serveurs Linux

Vous n’êtes pas sans savoir que des serveurs, au même titre que tout équipement informatique, doivent être mis à jour. Cela pour des raisons de performances, mais aussi et surtout pour la sécurité de ces derniers ! Néanmoins, lorsqu’on gère plusieurs serveurs, cela peut vite devenir fastidieux de se connecter à chacun et de les mettre à jour manuellement. Voyons comment faire pour que ces petites mises à jour se fassent automatiquement !

Jusque là vous faisiez très certainement un apt-get upgrade. Celà oblige à se connecter sur ses serveurs, et si vous ne le faites pas assez souvent, ces derniers peuvent se retrouver exposés à des failles de sécurité !

Nous allons donc mettre en place une mise à jour automatique de vos serveurs avec unattended-upgrades :

apt install unattended-upgrades

Le voilà installé, mais ça ne suffit pas. Il reste encore à le paramétrer. Nous avons dit que ce soft permet de télécharger et d’installer automatiquement les dernières mises à jour. De nombreuses autres options sont cependant paramétrables :

Le fichier de configuration se trouve à /etc/apt/apt.conf.d/50unattended-upgrades. Premièrement, parmétrons les mise à jour que nous souhaitons confier à unatended. Pour ma part, sur un serveur en production, je ne lui délègue que les mises à jour de sécurité, les simple updates pouvant attendre. À voir selon l’utilisation de votre machine (sur un serveur perso par exemple, on pourrait autoriser plus de choses).

 // Automatically upgrade packages from these (origin:archive) pairs
Unattended-Upgrade::Allowed-Origins {
    "${distro_id}:${distro_codename}-security";
//    "${distro_id}:${distro_codename}-updates";
//    "${distro_id}:${distro_codename}-proposed";
//    "${distro_id}:${distro_codename}-backports";
};

On peut aussi définir certains paquets à ne pas mettre à jour, cela peut-être utile si vous avez modifié certains softs et que vous redoutiez qu’une mise à jour vienne casser la configuration (modification des fichiers de config par exemple).

// List of packages to not update
Unattended-Upgrade::Package-Blacklist {
//    "vim";
//    "libc6";
//    "libc6-dev";
//    "libc6-i686";
};

L’option suivante décompose la mise à jour en petits bouts et autorise donc un redémarrage du système pendant cette dernière. Seul inconvénient : c’est un peu plus lent…

// Split the upgrade into the smallest possible chunks so that
// they can be interrupted with SIGUSR1. This makes the upgrade
// a bit slower but it has the benefit that shutdown while a upgrade
// is running is possible (with a small delay)
//Unattended-Upgrade::MinimalSteps "true";

Attend l’extinction ou le redémarrage de la machine pour effectuer les mises à jour. Par définition, on redémarre rarement un serveur donc je ne l’utilise pas.

// Install all unattended-upgrades when the machine is shuting down
// instead of doing it in the background while the machine is running
// This will (obviously) make shutdown slower
//Unattended-Upgrade::InstallOnShutdown "true";

Active et configure les notifications email. On peut les recevoir juste pour les erreurs ou pour toute action.

// Send email to this address for problems or packages upgrades
// If empty or unset then no email is sent, make sure that you
// have a working mail setup on your system. A package that provides
// 'mailx' must be installed.
//Unattended-Upgrade::Mail "root@localhost";

// Set this value to "true" to get emails only on errors. Default
// is to always send a mail if Unattended-Upgrade::Mail is set
//Unattended-Upgrade::MailOnlyOnError "true";

Cette option permet de supprimer les dépendances devenues inutiles. Là aussi, vous êtes seuls juges… Encore une fois, pour un serveur en prod, je préfère laisser cette option désactivée et le faire manuellement de temps à autre.

// Do automatic removal of new unused dependencies after the upgrade
// (equivalent to apt-get autoremove)
//Unattended-Upgrade::Remove-Unused-Dependencies "false";

Autorise unattended-upgrades à redémarrer automatiquement le système si un redémarrage est requis.

// Automatically reboot *WITHOUT CONFIRMATION* if a
// the file /var/run/reboot-required is found after the upgrade
//Unattended-Upgrade::Automatic-Reboot "false";

Cette option permet de limiter la bande passante utilisée pour télécharger les mises à jour. À utiliser si vous avez un débit limité. Cependant, sur des serveurs modernes hébergés dans un datacenter, la vitesse de connexion est rarement un problème…

// Use apt bandwidth limit feature, this example limits the download
// speed to 70kb/sec
//Acquire::http::Dl-Limit "70";

En dernier lieu, vous devrez simplement re-paramétrer le paquet pour qu’il se lance automatiquement (sinon ça n’a aucun intérêt !) :

dpkg-reconfigure --priority=low unattended-upgrades

Voilà, votre serveur se mettra maintenant tout seul à jour ! Le top est ensuite d’utiliser un outil comme Sensu afin qu’il vous avertisse de potentiels problème, ou d’un redémarrage nécessaire. Et puis pourquoi ne pas coupler cela à Ansible afin d’automatiser aussi les actions à effectuer sur les serveurs ?

Commentaires

Rejoignez la discussion !

Vous pouvez utiliser Markdown pour les liens [ancre de lien](url), la mise en *italique* et en **gras**. Enfin pour le code, vous pouvez utiliser la syntaxe `inline` et la syntaxe bloc

```
ceci est un bloc
de code
```