PaquetsLes postes de travail du réseau informatique de notre lycée local tournent actuellement sous 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 j’ai été surpris de ne pas trouver d’outil équivalent pour les distributions des familles SUSE ou Red Hat Enterprise Linux. Depuis l’été dernier, j’ai réussi à bidouiller une configuration rudimentaire basée sur le partage du cache de paquets avec NFS. Ce bidouillage n’était pas très flexible au quotidien, ce qui m’a motivé à chercher une solution plus fonctionnelle.

Il y a quelques jours, je suis tombé sur Apt-Cacher-NG, une refonte du proxy de paquets Apt-Cacher. D’après la documentation du projet, le proxy fonctionne même avec d’autres distributions que Debian et Ubuntu sur les postes clients. J’ai donc expérimenté avec une demi-douzaine de machines virtuelles tournant sous Debian, CentOS et OpenSUSE, et j’ai réussi à mettre en place un proxy de paquets qui fonctionne parfaitement avec les distributions que j’utilise dans mon quotidien professionnel.

Prérequis

Dans la configuration par défaut, le proxy Apt-Cacher-NG utilise le port 3142 en TCP. Avant toute chose, il faut donc songer à ouvrir ce port dans le pare-feu.

$ sudo firewall-cmd --permanent --add-port=3142/tcp
$ sudo firewall-cmd --reload
$ sudo firewall-cmd --list-all
internal (active)
  target: default
  icmp-block-inversion: no
  interfaces: enp2s0
  sources: 
  services: ssh
  ports: 3142/tcp
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules:

Installation

Pour Red Hat Enterprise Linux et CentOS, Apt-Cacher-NG est fourni par le dépôt EPEL.

$ sudo yum install apt-cacher-ng

L’installation du paquet crée un utilisateur système apt-cacher-ng et un groupe système correspondant.

$ grep apt-cacher-ng /etc/passwd
apt-cacher-ng:x:995:992:Apt-cacher proxy:/var/lib/apt-cacher-ng:/sbin/nologin
$ grep apt-cacher-ng /etc/group
apt-cacher-ng:x:992:

Correction d’un bug

Dans l’état actuel des choses, le paquet présente un bug au niveau de la configuration du service. Ce bug est décrit en détail ici et ici. Pour corriger le problème, il suffit de créer une version personnalisée du fichier d’unité systemd.

$ cd /usr/lib/systemd/system/
$ sudo cp -v apt-cacher-ng.service /etc/systemd/system/
‘apt-cacher-ng.service’ -> ‘/etc/systemd/system/apt-cacher-ng.service’

Éditer le fichier /etc/systemd/system/apt-cacher-ng.service en ajoutant la directive RuntimeDirectory comme ceci.

[Service]
Type=forking
RuntimeDirectory=apt-cacher-ng
PIDFile=/var/run/apt-cacher-ng/pid
EnvironmentFile=-/etc/default/apt-cacher-ng

Mise en service

Activer et démarrer Apt-Cacher-NG.

$ sudo systemctl enable apt-cacher-ng --now

Afficher l’état du service.

$ systemctl status apt-cacher-ng

On obtiendra probablement une série d’avertissements comme ceci.

WARNING: No configuration was read from file:backends_debian
WARNING: No configuration was read from file:backends_ubuntu
WARNING: No configuration was read from file:sfnet_mirrors
WARNING: No configuration was read from file:backends_gentoo

Pour rectifier le tir, il suffit d’éditer /etc/apt-cacher-ng/acng.conf et de commenter toutes les directives Remap qui ne nous servent à rien.

# Remap-debrep: file:deb_mirror*.gz /debian 
# Remap-uburep: file:ubuntu_mirrors /ubuntu 
# Remap-cygwin: file:cygwin_mirrors /cygwin 
# Remap-sfnet:  file:sfnet_mirrors 
# Remap-alxrep: file:archlx_mirrors /archlinux 
# Remap-fedora: file:fedora_mirrors 
# Remap-epel:   file:epel_mirrors 
# Remap-slrep:  file:sl_mirrors 
# Remap-gentoo: file:gentoo_mirrors.gz /gentoo 

Une fois qu’on relance le service, tout semble fonctionner correctement.

$ sudo systemctl restart apt-cacher-ng
$ systemctl status apt-cacher-ng

Configuration des postes clients

Sur mes postes clients sous OpenSUSE, je ne passe pas par YaST pour gérer les paquets. Je me sers uniquement du gestionnaire de paquets zypper. La configuration des dépôts est inscrite dans une série de fichiers *.repo rangés dans /etc/zypp/repos.d.

# cd /etc/zypp/repos.d/
# ls -1
anydesk.repo
darktable.repo
dvdcss.repo
kde.repo
non-oss.repo
non-oss-updates.repo
nvidia.repo
oss.repo
oss-updates.repo
packman.repo
printing.repo
recode.repo
snappy.repo

Voici à quoi ressemble la configuration du dépôt principal (Open Source Software).

# cat oss.repo 
[oss]
enabled=1
autorefresh=0
baseurl=http://download.opensuse.org/distribution/leap/15.1/repo/oss
type=rpm-md
keeppackages=1

Pour faire pointer ce dépôt vers mon proxy local, je peux utiliser la syntaxe suivante.

[oss]
enabled=1
autorefresh=0
baseurl=http://amandine:3142/download.opensuse.org/distribution/leap/15.1/repo/oss
type=rpm-md
keeppackages=1

Je vais me servir de sed pour effectuer un remplacement systématique dans tous les fichiers de configuration des dépôts.

# sed -i 's/baseurl=http:\/\//baseurl=http:\/\/amandine:3142\//g' *.repo

Je rafraîchis les informations sur les paquets.

# zypper refresh

Si tout se passe bien, les métadonnées s’inscrivent dans le cache du serveur.

$ sudo ls -l /var/cache/apt-cacher-ng/
total 20
drwxr-xr-x. 5 apt-cacher-ng apt-cacher-ng 4096 Jun 26 07:49 download.opensuse.org
drwxr-xr-x. 3 apt-cacher-ng apt-cacher-ng 4096 Jun 26 07:50 ftp.gwdg.de
drwxr-xr-x. 3 apt-cacher-ng apt-cacher-ng 4096 Jun 26 07:49 opensuse-guide.org
drwxr-xr-x. 3 apt-cacher-ng apt-cacher-ng 4096 Jun 26 07:49 rpm.anydesk.com
drwxr-xr-x. 4 apt-cacher-ng apt-cacher-ng 4096 Jun 26 07:21 _xstore

ImportantPour des raisons évidentes, le cache de paquets ne fonctionne pas avec les dépôts qui utilisent le protocole HTTPS comme https://download.nvidia.com. Dans ce cas, il suffit d’y accéder par HTTP.

Maintenance du cache

Apt-Cacher-NG génère des rapports détaillés sur l’utilisation du cache, que l’on peut afficher dans un navigateur web à l’adresse http://proxy:port/acng-report.html.

Apt-Cacher-NG

Cette page permet également de nettoyer le cache par le biais du menu Expiration > Start Scan and/or Expiration.


La rédaction de cette documentation demande du temps et des quantités significatives de café espresso. Vous appréciez ce blog ? Offrez un café au rédacteur en cliquant sur la tasse.