Debian GNU/Linux est la distribution qui a ma préférence pour les machines linux de mon micro-datacenter. La sortie d’une nouvelle version est toujours une bonne nouvelle, et c’est récemment que la version 9 (Stretch) de Debian a quitté la branche stable pour passer oldstable, en laissant la place à la version 10 : Buster. C’est l’occasion d’une mise à jour de Debian Stretch vers Buster
L’expérience d’une mise à niveau d’une version de Debian vers la suivante est très variable d’un cas à l’autre, suivant la configuration initiale (environnement de bureau ou pas, services réseau avec un niveau minimal de technologie de chiffrement, interpréteur de langage de programmation qui n’accepte plus certaines fonctionnalités anciennes ne sont que quelques points de surveillance parmi tant d’autres…).
Ici nous allons tâcher de procéder à la mise à jour d’un système Debian 9.9, hébergeant une instance de nextcloud version 15.0.10 (installée à partir des sources), motorisée par un serveur web apache 2.4.25 avec php 7.0.33, ainsi qu’un moteur de base de données mariadb 10.1. Cette machine est 100% Debian Stretch, il n’y a eu aucun dépôt extérieur, ou backport de configuré dessus (même pas de contrib ou de non-free). A priori le cas est assez simple donc; il y a cependant un petit point de vigilance car nextcloud 15 ne semble pas supporter officiellement php7.3, qui est la version de php fournie avec Buster. Ça sera la surprise…En revanche nextcloud version 16 recommande php 7.3, ce serait peut-être l’occasion de faire la mise à niveau vers la version 16.
Le projet Debian fourni un document, faisant office de check-list à consulter, pour minimiser les problèmes en cours de montée de version. C’est ce document qui va servir de référence pour réaliser la présente mise à jour.
Navigation
Sauvegarder la configuration initiale
La machine qui va être mise à jour est une machine virtuelle tournant sous proxmox donc de ce point de vue ça va être assez simple : je dispose d’une sauvegarde récente de la machine entière (moins de 24h), et pour être sûr de remettre d’aplomb facilement et rapidement en cas de no-go un snapshot de la VM incluant le contenu de la RAM est réalisé juste avant le début des hostilités.
S’assurer que Stretch est up-to-date
Avant toute manipulation dans la gestion des paquets, une petite mise à niveau de Stretch vers la dernière version de ses paquets est recommandée:
# apt update
# apt upgrade
Vérifier l’état des paquets installés
En effet, un paquet partiellement installé ou en erreur, ou bloqué peu poser des soucis lors de la mise à jour, il convient donc de régler ces éventuels problèmes avant le changement de version de Debian. Pour vérifier tout ça:
# dpkg --audit
# dpkg --get-selections | grep 'hold$'
Si ces deux commandes ne retournent rien, on peut passer à la suite.
Reconfigurer le sources.list
Pour faire pointer APT vers les dépôts de la nouvelle version de Debian, il convient de modifier le fichier /etc/apt/sources.list. Comme dit plus haut, ce système n’aura pas été customisé avec des dépôts externes, il n’y aura donc que ce fichier à modifier. Sur d’autres systèmes, il conviendra peut-être de vérifier que les éventuels fichiers .list présents dans le répertoire /etc/apt/sources.list.d/ sont correctement configurés (voir de les supprimer et revenir dessus après la mise à jour selon les cas).
# cat /etc/apt/sources.list
deb http://ftp.fr.debian.org/debian/ stretch main
deb-src http://ftp.fr.debian.org/debian/ stretch main
deb http://security.debian.org/debian-security stretch/updates main
deb-src http://security.debian.org/debian-security stretch/updates main
# stretch-updates, previously known as 'volatile'
deb http://ftp.fr.debian.org/debian/ stretch-updates main
deb-src http://ftp.fr.debian.org/debian/ stretch-updates main
# sed -i 's/stretch/buster/g' /etc/apt/sources.list
# sed -i 's/ftp\.fr/deb/g' /etc/apt/sources.list
# cat /etc/apt/sources.list
deb http://deb.debian.org/debian/ buster main
deb-src http://deb.debian.org/debian/ buster main
deb http://security.debian.org/debian-security buster/updates main
deb-src http://security.debian.org/debian-security buster/updates main
# buster-updates, previously known as 'volatile'
deb http://deb.debian.org/debian/ buster-updates main
deb-src http://deb.debian.org/debian/ buster-updates main
La deuxième commande sed ci-dessus sert à pointer le réglage d’APT vers le service CDN de Debian, qui assure que les paquets sont téléchargés depuis un serveur proche.
Récupérer la nouvelle liste des paquets
# apt update
Mise à niveau
C’est ici qu’on se jette à l’eau, la commande suivante va provoquer le téléchargement et l’installation de toutes les mises à jour des paquets, des nouveaux paquets nécessaires à la nouvelle version de la distribution, ainsi que la suppression de tous les paquets obsolètes.
# apt full-upgrade
Les démons suivants avaient été paramétrés après leur installation initiale: exim, ntpd, snmpd, mariadb. Il a donc été demandé à APT de ne pas écraser leur fichier de configuration par la version fournie avec la mise à jour.
Premier problème : erreur apache 500
Après le processus de full upgrade, et un redémarrage, pas de chance : erreur apache 500 dès qu’on essaye de se connecter à la page d’accueil de nextcloud. Après quelques fébriles vérifications, il semble que ça soit causé par le fait qu’apache ne soit pas configuré pour fonctionner avec php 7.3 arrivé avec Buster. Pour corriger ça:
Nettoyage des restes de php 7.0:
# apt purge php7.0*
Installation des modules php 7.3 nécessaires à nextcloud:
# apt install libapache2-mod-php7.3 php7.3-curl php7.3-gd php7.3-xml php7.3-mbstring php7.3-bz2 php7.3-zip php7.3-mysql php-smbclient
Activation du module php 7.3 pour apache:
# a2enmod php7.3
Redémarrage d’apache pour prendre tout ça en compte:
# systemctl restart apache2
Ouf c’est revenu ! ‘:)
Pour finir : purger les configurations des paquets qui ont été supprimés
Effectivement, il est probable que certains paquets obsolètes, supprimés par APT pendant la mise à jour aient encore un fichier de configuration qui traîne. La commande suivante réalisera le nettoyage:
# apt purge $(dpkg -l | awk '/^rc/ { print $2 }')
Mise à jour vers Buster terminée pour cette machine, il ne reste plus qu’à supprimer le snapshot qui avait été fait avant le début de la mise à jour. Facile non ?
o/