Élaguer une installation de CentOS 7

Élaguer CentOS 7Lorsqu’on installe CentOS à partir du DVD minimal – ou lorsqu’on sélectionne un profil minimal avec le DVD d’installation classique – on obtient un système réduit au minimum syndical. Évidemment, on est loin du minimalisme que l’on trouve dans des distributions comme Alpine Linux, mais le principe est le même. Le système de base peut être vu comme une pâte à crêpes, et ensuite, on installe les ingrédients dont on a besoin. Dans la configuration par défaut, un système CentOS 7 est constitué de quelque 300 paquets et occupe un peu plus d’un gigaoctet d’espace disque.

Dans certains cas de figure, il peut être souhaitable de revenir à cette configuration de départ sans pour autant passer par une réinstallation complète du système. Voici deux exemples pratiques de la vie quotidienne.

  • Lorsque j’installe un serveur dédié de la gamme Dedibox de chez Online et que j’opte pour un système CentOS, je ne pars pas d’une installation minimale. Les administrateurs de chez Online ont décidé d’installer une panoplie complète d’outils en ligne de commande, et ce souci de cohérence est parfaitement compréhensible. Mais un grand nombre de ces outils ne me sert à rien, et je préfère installer ma propre sélection en partant du minimum syndical.
  • Sur les postes de travail, je me base sur l’environnement de bureau MATE, installé à partir d’un système minimal et du serveur graphique X Window. Or, j’ai encore tout un parc de machines que j’ai dotées d’un bureau basé sur KDE ou sur Xfce. La désinstallation manuelle de ces bureaux est une tâche extrêmement fastidieuse, et un simple yum group remove laisse pas mal de résidus sur le disque. Là encore, il est donc préférable de repasser par la case départ sans pour autant réinstaller l’intégralité du système.

J’ai donc rédigé un script shell elaguer.sh qui se charge de supprimer tous les paquets qui ne font pas partie du système de base à proprement parler.

#!/bin/bash
#
# elaguer.sh
#
# Ce script désinstalle tous les paquets présents sur un système 
# CentOS 7 qui ne font pas partie du système minimal. 
# À manier avec précaution, donc.
# 
# (c) Niki Kovacs, 2018

CWD=$(pwd)
TMP=/tmp

PKGLIST=$TMP/pkglist
PKGINFO=$TMP/pkg_base

# Créer la liste des paquets installés sur le système
rpm -qa --queryformat '%{NAME}\n' | sort > $PKGLIST 

# Créer une variable correspondant à cette liste
PAQUETS=$(egrep -v '(^\#)|(^\s+$)' $PKGLIST)

# Faire le ménage
rm -rf $PKGLIST $PKGINFO
mkdir $PKGINFO
unset SUPPRIMER

# Créer une base de données rudimentaire 
echo
echo ":: Création de la base de données..."
echo
sleep 3
MINIMAL=$(egrep -v '(^\#)|(^\s+$)' $CWD/minimal.txt)
for PAQUET in $MINIMAL; do
  printf "."
  touch $PKGINFO/$PAQUET
done

echo

# Vérifier pour chaque paquet s'il fait partie du système minimal
echo
echo ":: Création de la liste des paquets à supprimer..."
echo
sleep 3
for PAQUET in $PAQUETS; do
  if [ -r $PKGINFO/$PAQUET ]; then
    continue
  else
    printf "."
    SUPPRIMER="$SUPPRIMER $PAQUET"
  fi
done

echo
echo

# Supprimer tous les paquets qui ne font pas partie du système 
# de base
if [[ ! -z $SUPPRIMER ]]; then
  yum -y remove $SUPPRIMER
fi

# Réinstaller les paquets de base
yum -y install $MINIMAL

# Encore un peu de ménage
rm -rf $PKGLIST $PKGINFO

exit 0

Le script se sert de la liste de paquets minimal.txt qui a été établie auparavant sur une installation minimale fraîche, moyennant la commande suivante.

# rpm -qa --queryformat '%{NAME}\n' | sort > minimal.txt

Le script elaguer.sh est disponible dans mon dépôt Github, que l’on peut récupérer dans un endroit approprié du système, par exemple /root.

# cd
# git clone https://github.com/kikinovak/centos-7-strip

Avant de faire quoi que ce soit, on va s’assurer de ne pas tourner en mode graphique.

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

Ensuite, on va exécuter le script.

# cd centos-7-strip
# ./elaguer.sh

Le gestionnaire de paquets Yum présente une petite incohérence au niveau de la gestion des groupes de paquets. En effet, si l’on a installé un groupe de paquets avec la commande yum group install, la commande yum group list affichera toujours le groupe comme installé, même si les paquets qui le constituent ne sont plus présents sur le système. Ajoutons à cela le fait que – pour des raisons mystérieuses – certains groupes sont cachés (hidden) depuis CentOS 7, et la confusion est totale. Il faut donc rectifier le tir à la main. Voici un exemple pratique qui permettra de mieux comprendre la gestion des groupes de paquets.

Prenons une machine sur laquelle je viens d’exécuter le script elaguer.sh, et qui se retrouve donc réduite au minimum syndical.

# rpm -qa | wc -l
307

J’affiche la liste des groupes de paquets.

# yum group list | less
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
Available Environment Groups:
   Minimal Install
   Compute Node
   Infrastructure Server
   File and Print Server
   Basic Web Server
   Virtualization Host
   Server with GUI
   GNOME Desktop
   KDE Plasma Workspaces
   Development and Creative Workstation
Available Groups:
   Compatibility Libraries
   Console Internet Tools
   Development Tools
   Graphical Administration Tools
   Legacy UNIX Compatibility
   Scientific Support
   Security Tools
   Smart Card Support
   System Administration Tools
   System Management
Done

À première vue, aucun groupe de paquets n’est installé. J’essaie encore, en ajoutant l’option hidden.

# yum group list hidden | less
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
Available Environment Groups:
   Minimal Install
   Compute Node
   Infrastructure Server
   File and Print Server
   Basic Web Server
   Virtualization Host
   Server with GUI
   GNOME Desktop
   KDE Plasma Workspaces
   Development and Creative Workstation
Installed Groups:
   Base
   Fonts
   Web Server
   X Window System
Available Groups:
   Additional Development
   Anaconda Tools
   Backup Client
   Backup Server
   ...

Je note les groupes marqués comme installés, et je corrige leur statut manuellement.

# yum group mark remove "Base" "Fonts" "Web Server" \
  "X Window System"
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
Marked remove: Base,Fonts,Web Server,X Window System

Il ne me reste plus qu’à faire une dernière vérification.

# yum group list hidden | less

Indépendamment de la configuration initiale, je me retrouve à présent avec une installation minimale de CentOS, que je peux reconfigurer à ma guise.

Ce contenu a été publié dans CentOS, Documentation Microlinux. Vous pouvez le mettre en favoris avec ce permalien.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.