Paquets RPMIl y a quelques mois, j’ai migré les postes de travail du réseau informatique de notre lycée local vers OpenSUSE Leap 15.1. Ici dans les Cévennes, le débit ADSL n’est pas faramineux, et toute opération d’installation ou de mise à jour via le réseau devient vite assez fastidieuse lorsqu’on doit l’effectuer sur une vingtaine de machines.

Les utilisateurs de Debian et Ubuntu disposent d’un outil fort pratique pour ce genre de situation, c’est Apt-Cacher. Je l’ai moi-même utilisé à une époque, et je dois dire que suis un peu surpris de ne pas trouver d’outil équivalent pour les distributions des familles SUSE ou Red Hat Enterprise Linux. J’ai donc expérimenté un peu avec les machines de notre réseau, et j’ai trouvé une solution « fait maison » qui fonctionne tout aussi bien. La seule différence avec Apt-Cacher, c’est que la persistance du cache n’est pas configurable. Dans la pratique quotidienne, cette limitation ne pose aucun souci.

En temps normal, le gestionnaire de paquets Zypper garde les paquets dans un cache local /var/cache/zypp/packages. Or, ce cache est régulièrement vidé dans la configuration par défaut. Après avoir cherché un peu dans la page de manuel en ligne zypper(8), je suis tombé sur l’option suivante.

-k, --keep-packages
Enable RPM files caching for the repository.

La particularité de cette option, c’est qu’elle fonctionne au niveau de la configuration du dépôt de paquets. Concrètement, lorsque je définis un dépôt de téléchargement de paquets avec zypper addrepo <dépôt>, c’est l’option -k (ou --keep-packages) qui va activer la persistance du cache.

Le serveur de données de l’école tourne sous CentOS 7. Sur cette machine, je crée un répertoire /srv/packages qui fera office de cache partagé. Ensuite, j’édite /etc/exports pour partager ce répertoire via NFS avec les postes clients du réseau local.

# /etc/exports
...
/srv/packages 192.168.10.0/24(rw,async,no_subtree_check,no_root_squash) \
              *.scholae.lan(rw,async,no_subtree_check,no_root_squash)

Je me connecte à un poste client et je vide le cache de paquets local.

# zypper clean

Je me retrouve avec un répertoire /var/cache/zypp/packages vide que je peux désormais définir comme point de montage pour mon partage NFS.

# /etc/fstab
...
serveur:/srv/packages /var/cache/zypp/packages nfs defaults,_netdev,nfsvers=4 0 0

Je définis tous mes dépôts de paquets en prenant soin d’utiliser l’option -k (ou --keep-packages) à chaque ajout. Voici à titre d’illustration un extrait du script que j’utilise pour configurer mes sources de téléchargement.

# Suppression des dépôts existants
echo
echo -e ":: Suppression des dépôts existants... \c"
sleep $DELAY
rm -f /etc/zypp/repos.d/*.repo

# Configuration du dépôt [oss]
echo "::"
echo -e ":: Configuration du dépôt [oss]... \c"
zypper addrepo -k $MIRROR/distribution/leap/$VERSION/repo/oss oss >> $LOG 2>&1

# Configuration du dépôt [non-oss]
echo "::"
echo -e ":: Configuration du dépôt [non-oss]... \c"
zypper addrepo -k $MIRROR/distribution/leap/$VERSION/repo/non-oss non-oss >> $LOG 2>&1

# Configuration du dépôt [oss-updates]
echo "::"
echo -e ":: Configuration du dépôt [oss-updates]... \c"
zypper addrepo -k $MIRROR/update/leap/$VERSION/oss oss-updates >> $LOG 2>&1

À partir de là, l’utilisation du cache sera « transparente ». La mise à jour du premier poste de travail du réseau se déroule normalement. À partir du deuxième poste, les paquets se trouveront dans le cache.

Zypper Cache

Dans un réseau avec un débit modeste comme le nôtre, le gain de temps est considérable.


0 commentaire

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.