Aller au contenu

Migration à chaud vers AlmaLinux

AlmaLinux

Si vous lisez régulièrement ce blog, vous aurez compris que je suis un adepte des clones libres de Red Hat Enterprise Linux, que j'utilise depuis le bon vieux temps de CentOS 4.x. Quelques années en arrière, lorsque Red Hat a décidé de nous couper l'herbe sous les pieds en supprimant le support longue durée de CentOS, j'ai testé Oracle Linux avant de passer au clone libre Rocky Linux, qui tourne actuellement sur toutes mes machines de production, les serveurs comme les postes de travail.

La guerre des clones

Ces dernières semaines, j'ai fait pas mal de tests avec AlmaLinux, et j'avoue platement que j'ai été séduit par cette alternative, pour toute une série de raisons :

  • Alma Linux vise la compatibilité avec les binaires de Red Hat sans pour autant se cantonner à une conformité « bug pour bug ».

  • Cette approche plus pragmatique permet de rectifier le tir pour quelques d'aberrations énervantes de Red Hat, comme par exemple la réinstauration du support SPICE pour livbirt depuis RHEL 9.0.

  • AlmaLinux offre un meilleur support matériel que Red Hat Enterprise Linux et ses clones conformes. Concrètement, les processeurs de la famille x86_64-v2 sont supportés par AlmaLinux 10.0, contrairement à RHEL 10.0 ou Rocky Linux 10.0.

  • AlmaLinux maintient même un dépôt EPEL adapté pour cette architecture à partir de la version 10.

  • Les versions Live sont plus propres chez AlmaLinux que chez la concurrence. Pour en avoir le cœur net, testez successivement la version Live KDE de AlmaLinux et de Rocky Linux et voyez la différence.

  • Enfin, la distribution AlmaLinux semble plus réactive pour les mises à jour.

Cracher dans la soupe ?

Ceci étant dit, je ne vais pas cracher dans la soupe. Rocky Linux reste un excellent choix pour tout un tas de raisons, avec une équipe compétente et réactive et une communauté plutôt sympathique.

Migrer à froid ou à chaud ?

Lorsqu'on change de distribution sur une machine, la solution la plus propre se fait évidemment en trois étapes :

  • Sauvegarder la configuration et les données.

  • Installer le nouveau système.

  • Restaurer la configuration et les données.

Le hic, c'est que c'est long. Alternativement, on pourra donc décider de migrer la machine « à chaud » avec les données en place.

Utiliser le script de migration

Le projet AlmaLinux arbore un bouton Migrate bien visible sur sa page d'accueil :

AlmaLinux Migration

Un clic sur ce bouton vous amène vers une documentation en anglais plutôt bien faite, pour tous les cas de figure. Plutôt que de vous fourrer tout ça sous le nez façon brut de décoffrage, je préfère vous fournir un exemple pratique, en commençant par le cas de figure le plus simple.

Concrètement, je dispose d'un système minimal Rocky Linux dans une VM :

# cat /etc/redhat-release
Rocky Linux release 8.10 (Green Obsidian)

Ce système n'utilise que les seuls dépôts de paquets par défaut de la distribution :

# dnf repolist
repo id              repo name
appstream            Rocky Linux 8 - AppStream
baseos               Rocky Linux 8 - BaseOS
extras               Rocky Linux 8 - Extras

Je souhaite passer à AlmaLinux 8.10 sans devoir tout réinstaller. Avant de commencer, je vérifie si tous mes paquets sont à jour :

# dnf update -y

Je récupère le script de migration fourni par AlmaLinux :

# mkdir -v bin
mkdir: created directory 'bin'
# cd bin/
# curl -O \
  https://raw.githubusercontent.com/AlmaLinux/almalinux-deploy/master/almalinux-deploy.sh
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 50827  100 50827    0     0   501k      0 --:--:-- --:--:-- --:--:--  501k

Je rends le script exécutable et je le lance :

# chmod 0700 almalinux-deploy.sh
# ./almalinux-deploy.sh
Check root privileges                                                 OK
Check rocky-8.x86_64 is supported                                     OK
Enabled repositories list created                                     OK
Download RPM-GPG-KEY-AlmaLinux                                        OK
Import RPM-GPG-KEY-AlmaLinux to RPM DB                                OK
Download almalinux-release package                                    OK
Verify almalinux-release package                                      OK
Your OS is supported                                                  OK
Remove OS specific rpm packages                                       OK
Verifying...                          ##################################
Preparing...                          ##################################
Updating / installing...
almalinux-release-8.10-1.el8          ##################################
Install almalinux-release package                                     OK
Backup of alternatives is done                                        OK
...

J'ai le temps de boire un café pendant que ça mouline. Si tout se passe bien, le script se termine à peu de choses près comme ceci :

Complete!
Run dnf distro-sync -y                                                OK
Restoring of alternatives is done                                     OK
Generating grub configuration file ...
done
All Secure Boot related packages which were not released
by AlmaLinux are reinstalled                                          OK

Migration to AlmaLinux is completed

Je redémarre la machine qui tourne désormais sous AlmaLinux :

# cat /etc/redhat-release
AlmaLinux release 8.10 (Cerulean Leopard)

Et la version 9.x ?

Pour l'anecdote, j'ai effectué ce même test avec une VM dotée d'une installation minimale de Rocky Linux 9.6. Ça fonctionne à l'identique, et au redémarrage, on se retrouve avec une AlmaLinux 9.6.

Dégraisser le mammouth

J'ai testé la migration avec le script almalinux-deploy.sh sur quelques postes de travail tournant sous Rocky Linux 8.10 et 9.6. Ces systèmes utilisent toute une série de dépôts de paquets tiers, ce qui complique un peu les choses. En gros, j'ai le choix entre deux approches :

  • Laisser tous les dépôts tiers activés et lancer la migration. De temps en temps, la présence d'un paquet va créer un conflit, auquel cas il suffit de la supprimer et de relancer le script. Cette opération se fait sans drame, mais il faut savoir ce qu'on fait.

  • Désactiver tous les dépôts tiers et supprimer les paquets correspondants. C'est plus propre, mais il faudra réinstaller les paquets tiers après la migration.

Étant donné que mes installations sont gérées par Ansible, je préfère utiliser la deuxième méthode, plus propre et plus sûre.

Voici un exemple avec une station de travail sous Rocky Linux 8.10 avec un bureau KDE du dépôt EPEL et toute une série de paquets tiers. Dans un premier temps, je bascule en mode console :

# systemctl set-default multi-user.target
# systemctl isolate multi-user.target

Voici tous les dépôts de paquets utilisés par le système :

# dnf repolist
repo id                     repo name
anydesk                     AnyDesk
appstream                   AppStream
baseos                      BaseOS
chrome                      Chrome
docker                      Docker
eid-archive                 EID Archive
elrepo                      ELRepo
epel                        EPEL
epel-modular                EPEL Modular
extras                      Extras
hashicorp                   Hashicorp
lynis                       Lynis
microlinux                  Microlinux
powertools                  PowerTools
rpmfusion-free              RPM Fusion Free
rpmfusion-free-tainted      RPM Fusion Free Tainted
rpmfusion-nonfree           RPM Fusion Nonfree

Je désactive tous les dépôts tiers :

# dnf remove rpmfusion*
# dnf remove elrepo-release
# dnf remove epel-release
# cd /etc/yum.repos.d/
# rm -f anydesk.repo
# rm -f docker.repo
# rm -f eid-archive.repo
# rm -f google-chrome.repo
# rm -f hashicorp.repo
# rm -f lynis.repo
# rm -f microlinux.repo
# rm -f *.rpmsave

Je n'utilise plus que les dépôts officiels :

# dnf repolist
repo id                     repo name
appstream                   AppStream
baseos                      BaseOS
extras                      Extras
powertools                  PowerTools

Supprimer tous les paquets tiers

La commande dnf list extras me permet d'afficher la liste de tous les paquets qui ne sont pas fournis par l'un des dépôts de paquets configurés. Je peux donc utiliser l'astuce suivante pour supprimer tous les paquets du système qui ne proviennent pas des dépôts officiels :

# dnf remove $(dnf list extras -q | awk '{print $1}')

Partant de là, il ne me reste plus qu'à lancer mon script de migration.

Et si ça ne démarre plus ?

Sur une de mes machines, je me suis retrouvé face à l'invite de commande de GRUB. Quelque chose avait visiblement foiré sous le capot. Dans ce cas, il suffit de récupérer le système à la main.