Mise à jour automatique au démarrage

Voici un moyen de faire automatiquement les mises à jours lors du démarrage du système. On se base ici sur une machine Ubuntu Linux 13.10 en fonctionnement nominal.

Il y a une méthode officielle via unattended-upgrades. Perso, je dois être mauvais, ça ne marche pas bien :'(
Ça me télécharge bien les paquets à installer mais à part me prévenir qu’il faut le faire… ça ne le fait pas tout seul chez moi…

On va répartir le travail en deux parties et une spéciale serveurs. La première est le script qui fait les mises à jours. La deuxième partie concerne l’insertion au démarrage d’une station de travail via upstart. Et enfin une troisième partie va permettre de tenir à jour régulièrement les serveurs.

Comme ça, vous n’aurez plus aucune excuse pour ne pas avoir vos machines à jour!

Script de mise à jour

Ce script doit être autonome, c’est à dire qu’il ne peux pas poser de question à l’utilisateur. Comme on va l’utiliser lors du démarrage, et donc qu’il n’y a aucun affichage, on va envoyer les résultats via syslog. Le compte rendu de mise à jour est donc disponible soit dans /var/log/syslog, soit dans /var/log/apt/history.log .
De par la nature spécifique du flash et de son intégration, il se peut que ses mises à jours ne se passe pas bien. On va forcer la réinstallation en cas de problème. Vu ce que je pense de cette c[CENSURE]e de flash et de la grande majorité des site qui l’utilisent… il vaudrait mieux ne pas avoir à l’installer, malheureusement…

Il faut dans l’ordre:

  1. Désactiver l’interaction avec l’utilisateur.
  2. Mettre à jour la liste des dépôts.
  3. Mettre à jour les paquets qui le demandent.
  4. Vérifier le flash et le réinstaller au besoin.
  5. Supprimer automatiquement les paquets non-utilisés.
  6. Vider le cache de paquets.

Créer le fichier /usr/local/bin/aptupdate contenant :

#!/bin/bash
logger "APTUPDATE BEGIN"
DEBIAN_FRONTEND=noninteractive
apt-get -y -qq update 2>&1 | logger -t "APTUPDATE"
apt-get -y -qq dist-upgrade 2>&1 | logger -t "APTUPDATE"
[ "$(dpkg -l | grep flashplugin-installer)" != "" ] && 
  [ ! -f /usr/lib/mozilla/plugins/flashplugin-alternative.so ] && 
  aptitude -y reinstall flashplugin-installer 2>&1 | logger -t "APTUPDATE"
apt-get -y -qq autoremove 2>&1 | logger -t "APTUPDATE"
apt-get -y -qq clean 2>&1 | logger -t "APTUPDATE"
logger "APTUPDATE END"

Le rendre exécutable :
chown root.root /usr/local/bin/aptupdate
chmod 755 /usr/local/bin/aptupdate

(faire précéder de sudo au besoin)

Insertion au démarrage

Pour insérer quelque chose au démarrage, il suffit de créer le fichier de configuration adéquat dans /etc/init . Ce sera automatiquement pris en compte au prochain démarrage.

On crée le fichier /etc/init/aptupdate.conf contenant :

# aptupdate - Automatisation de apt.

description	"Auto update"

start on (runlevel [2345] and filesystem)
stop on runlevel [!2345]

console none

exec /usr/local/bin/aptupdate

ATTENTION ! La machine peut être très lente au démarrage si elle n’a pas vu une mise à jour depuis une dizaine de jours… Mais les mises à jours se font en tâche de fond, on peut se connecter et gland^W^W^Wtravailler malgré tout.

Je n’ai pas encore trouvé pour faire les mises à jours à l’arrêt… Ce sera pour une prochaine fois…

Mise à jour régulière de serveurs

Cette partie est moins intéressante pour une station de travail, quoique…
C’est surtout destiné à des serveurs qui tournent H24 et donc… ne redémarrent jamais.

On va dire que l’on programme les mises à jours tous les jours à 3 heure du matin. on peut le faire plus souvent si nécessaire.
On doit aussi faire redémarrer automatiquement le serveur si celui-ci le demande. Ça peut se faire à 4h par exemple.

Pour réaliser ces deux tâches régulièrement, rien de mieux que de le demander gentiment à notre ami cron. Ajouter ces lignes à la fin du fichier /etc/crontab :
0 3 * * * root /usr/local/bin/aptupdate
0 4 * * * root [ -f /var/run/reboot-required ] && reboot

Hévouala céfé!