Quand on est connecté en mode graphique sur un poste Ubuntu, il y a une icône qui affiche la disponibilité de mise à jour, elle est fournie par update-notify. Cette fonction fournie également l’information si un redémarrage du poste est nécessaire.

Sur un poste qui est géré en mode texte ou à distance, comme un serveur, cette icône n’apparait pas.

Il est possible de lancer la mise à jour sans se poser de question (sudo apt-get update && sudo apt-get dist-upgrade -y), ou alors de détecter la disponibilité de mises à jour et de la lancer. Il faut ensuite être capable de détecter s’il faut rebooter le poste pour prendre en compte ces mises à jour.

Les mises à jour

Pour détecter si des mises à jour sont disponibles, il faut vérifier le contenu du fichier /var/run/updates-available :

    yvon@lutig:/var/run$ cat updates-available 

    13 packages can be updated.
    6 updates are security updates.

Si aucune mise à jour n’est disponible, ce fichier est vide ou n’existe pas. Il est donc possible de décider d’une mise à jour en fonction du nombre de lignes dans ce fichier :

  • des mises à jour sont disponibles car il y a 4 lignes dans le fichier
    yvon@lutig:/var/run$ cat updates-available 

    13 packages can be updated.
    6 updates are security updates.

    yvon@lutig:/var/run$ cat updates-available  |wc -l
          4
  • le système est à jour car il y a une ligne vide dans le fichier
    yvon@nanda:/var/run$ cat updates-available 

    yvon@nanda:/var/run$ cat updates-available  |wc -l
          1

Détecter la nécessité d’un redémarrage

A la fin d’une mise à jour, si un reboot est requis pour prendre en compte les modifications (modules, noyau), le système cré le fichier /var/run/reboot-required contenant :

    yvon@nanda:/var/run$ cat reboot-required 
    *** Le système doit être redémarré ***

Ce fichier n’existe pas si aucun redémarrage n’est requis.

Utiliser ces informations

Dans mon fichier \$HOME/.bash\_aliases, j’ai rajouté les 2 fonctions suivantes :

    # Definition des couleurs
    GRAY="\033[1;30m"
    LIGHT_GRAY="\033[0;37m"
    CYAN="\033[0;36m"
    LIGHT_CYAN="\033[1;36m"

    NORMAL="\033[0m"
    VERT="\033[0;32m"
    G_VERT="\033[1;32m"
    ROUGE="\033[0;31m"
    G_ROUGE="\033[1;31m"
    ROSE="\033[1;31m"
    #------------------------------------------------------------------------------
    # Detection d'une maj disponible
    maj_dispo() {
      Data=`cat /var/run/updates-available  |wc -l`
      #echo -ne "Nombre de lignes : $Data\n"
      if [ $Data -gt 1 ]; then
        echo -ne  "$G_ROUGE Des mises à jours sont disponibles.\n$NORMAL"
      fi
    }
    # Detecte si une mise à jour impose un reboot pour etre prise en compte
    besoin_reboot() {
    if [ -f /var/run/reboot-required ] ; then
      echo -ne  "$G_ROUGE Vous devez redemarrer votre station.\n$NORMAL"
    fi
    }

Pour activer les mises à jour et avoir l’information de redémarrage, j’utilise l’alias suivant :

    alias maj='sudo apt-get update && sudo apt-get dist-upgrade -y && besoin_reboot'