apt-cacher-ng le proxy-cache de paquets pour un LAN

Apt-cacher-ng (ou plus familièrement acng) est un proxy-cache de paquets Debian (fichiers .deb).

Tout est parfaitement expliqué ici en détail.

En résumé et en prenant en compte les paquets spécifiques à LinuxMint :

Par la suite, il est convenu que ce serveur tourne sous Debian.

Rien de plus simple :

sudo apt install apt-cacher-ng debdelta ca-certificates

Vous devez installer le paquet mint-mirrors, sans dépendances (aucun autre paquet ne sera installé), qui contient la liste des miroirs de téléchargement pour les paquets spécifiques à Linux Mint.

Vérifiez à l'aide votre navigateur, en visitant la page https://linux-mint.froonix.org/pool/main/m/mint-mirrors/, que la dernière version du paquet mint-mirrors est bien la 1.2.4. Si ce n'est pas le cas, adaptez la deuxième des lignes de commandes suivantes :

cd
export MMV=1.2.4
wget https://linux-mint.froonix.org/pool/main/m/mint-mirrors/mint-mirrors_${MMV}_all.deb
sudo dpkg -i mint-mirrors_${MMV}_all.deb
rm -f mint-mirrors_${MMV}_all.deb

Créez un fichier mint_mirrors, identique au fichier /usr/share/mint-mirrors/linuxmint.list mais débarrassé de toutes les lignes de commentaires (commençant par un #) qui seraient mal interprétées par apt-cacher-ng :

grep -vE '^#' /usr/share/mint-mirrors/linuxmint.list | awk '{print $1}' > mint_mirrors

Copiez ensuite le fichier mint_mirrors créé précédemment dans le dossier /usr/lib/apt-cacher-ng/ du serveur :

sudo cp mint_mirrors /usr/lib/apt-cacher-ng/

Pour connaître l'IPv4 de votre serveur :

ip a | grep -A 1 -B 1 ether | grep inet | awk '{print $2}' | tr "/" " " | awk '{print $1}'

La réponse est un ensemble de 4 nombres compris entre 0 et 255, séparés par des points.

Pour connaître l'IPv6 de votre serveur (si votre réseau fonctionne en IPv6 exclusivement) :

ip a | grep -A 3 -B 1 ether | grep inet6 | awk '{print $2}' | tr "/" " " | awk '{print $1}'

La réponse est un ensemble de 8 nombres hexadécimaux, séparés par des :.

L'IP que vous choisirez (généralement l'IPv4) sera celle que vous indiquerez ci-après à la place de IP_DU_SERVEUR.

Éditer avec les droits root le fichier de configuration /etc/apt-cacher-ng/acng.conf.

Vérifier et dé-commenter les lignes suivantes, en supprimant l'éventuel # qui les débuterait. Modifier la ligne commençant par BindAddress ; créer la ligne commençant par Remap-mint.

CacheDir: /var/cache/apt-cacher-ng

LogDir: /var/log/apt-cacher-ng

SupportDir: /usr/lib/apt-cacher-ng

Port:3142

BindAddress: localhost IP_DU_SERVEUR

Remap-debrep: file:deb_mirror*.gz /debian ; file:backends_debian # Debian Archives
Remap-uburep: file:ubuntu_mirrors /ubuntu ; file:backends_ubuntu # Ubuntu Archives
[... Commenter les lignes Remap qui ne vous concernent pas ...]
Remap-secdeb: security.debian.org security.debian.org/debian-security deb.debian.org/debian-security /debian-security ; deb.debian.org/debian-security security.debian.org
Remap-mint: file:mint_mirrors /linuxmint # Linux Mint

ReportPage: acng-report.html

ExThreshold: 4

FollowIndexFileRemoval: 1

VfilePatternEx: .*(\.xz)$

SVfilePatternEx: .*(\.xz)$

LocalDirs: acng-doc /usr/share/doc/apt-cacher-ng

sudo systemctl restart apt-cacher-ng.service

Pour vérifier que ce service fonctionne bien :

sudo systemctl status apt-cacher-ng.service

Dans la réponse à cette commande doit apparaître : Active: active (running) since …. Quitter en pressant la touche [Q].

Sur le serveur :

du -sh /var/cache/apt-cacher-ng/

Sur le serveur, cette commande donne la liste des logs, du plus récent au plus ancien :

ls -lth /var/log/apt-cacher-ng/

Le pre-caching consiste à vérifier régulièrement (par exemple chaque heure) si des mises à jour de paquets sont disponibles et, si tel est le cas, de les télécharger sur le serveur afin de les rendre disponibles immédiatement. Ainsi, même le premier de vos ordinateurs qui demandera une mise à jour l'obtiendra à la vitesse du réseau local, ce qui est très appréciable.

Préparation

Il s'agit de décider quelles mises à jour seront vérifiées et pré-téléchargées.

Sur le serveur :

cd /var/cache/apt-cacher-ng/
ls -d */ | egrep -v ^_

La liste des caches s'affiche. Par exemple :

archive.canonical.com/
debrep/
live.linuxmint.com/
mint/
ports.ubuntu.com/
ppa.launchpad.net/
security.ubuntu.com/
uburep/

Supposons que vous soyez intéressé par les mises à jour de mint, de security.ubuntu.com et d' uburep.

Listez les contenus des sous-dossiers dists de chacun de ces dossiers, ou de sous-dossiers. Par exemple :

ls mint/dists/ security.ubuntu.com/ubuntu/dists/ uburep/dists/

Exemple de retour :

mint/dists/:
uma  una  vanessa

security.ubuntu.com/ubuntu/dists/:
focal-security  jammy-security

uburep/dists/:
focal  focal-backports  focal-updates  jammy  jammy-backports  jammy-updates

La version uma de Mint étant plus ancienne que les distributions una et vanessa, on peut choisir de l'ignorer.

Modifiez alors, avec les droits root, le fichier /etc/apt-cacher-ng/acng.conf ; recherchez-y la ligne commençant par # PrecacheFor: et remplacez-la par :

PrecacheFor: mint/dists/vanessa mint/dists/una/ security.ubuntu.com/ubuntu/dists/focal-security/ security.ubuntu.com/ubuntu/dists/jammy-security/ uburep/dists/focal*/ uburep/dists/jammy*/

Remarque : L'étoile après focal permet de prendre en compte tous les dossiers commençant par focal, à savoir : focal, focal-backports et focal-updates.

Une fois cette modification effectuée, relancez le service apt-cacher-ng :

sudo systemctl restart apt-cacher-ng.service

Effectuer un premier pre-caching manuel

Visitez avec un navigateur (à partir d'un de vos ordinateurs) la page : http://IP_DU_SERVEUR:3142/acng-report.html

Rendez-vous à la section Guided precaching (Mirroring) de cette page. Cochez-y les 3 premières cases, à savoir :

  • Calculate and display download size (Calculer et afficher la taille du téléchargement)
  • Download package files (initialement décochée) (Télécharger les paquets)
  • Restrict to packages related to previously cached files (Restreindre aux paquets déjà en cache)

Cliquez alors sur le bouton [Start Mirroring].

La page suivante met du temps à se télécharger. Elle vous indique pas à pas les actions effectuées. Une fois complètement affichée, votre cache est à jour.

Automatiser le pre-caching

S'il fallait toujours effectuer manuellement un pre-caching pour mettre à disposition de tous vos ordinateurs la dernière version des paquets, cela perdrait vite de son intérêt.

Pour automatiser ce pre-caching et l'effectuer chaque heure, créez tout d'abord sur le serveur et avec les droits root le script /etc/cron.hourly/acng-mirroring contenant :

#!/bin/sh
wget "http://localhost:3142/acng-report.html?calcSize=cs&doDownload=dd&asNeeded=an&doMirror=Start+Mirroring" -o /dev/null
exit 0

Rendez ce script exécutable :

sudo chmod +x /etc/cron.hourly/acng-mirroring

Relancez le service cron :

sudo systemctl restart cron.service

C'est fait !

apt install -y netcat

Cela permet d'utiliser dans les scripts la commande nc afin de déterminer si le serveur est ou n'est pas disponible.

apt va être configuré de façon à utiliser votre serveur local dès lors que celui-ci est disponible. Si ce n'était pas le cas (ordinateur portable parfois utilisé en-dehors de votre réseau local), les mises à jour de paquets pourraient tout de même s'effectuer.

Créez avec les droits root le script /etc/apt/proxy_auto.sh contenant :

#!/bin/bash
# Renseigner correctement les deux lignes suivantes.
proxy=IP_DU_SERVEUR
port=3142

# Ne rien modifier ci-dessous.
synconf=/root/.synaptic/synaptic.conf

nc -zw1 $proxy $port && {
  [[ -f $synconf ]] && {
    cat $synconf | sed s/useProxy\ \"0\"\;/useProxy\ \"1\"\;/g > $synconf.NEW && mv -f $synconf.NEW $synconf
  }
  echo http://$proxy:$port
} || {
  [[ -f $synconf ]] && {
    cat $synconf | sed s/useProxy\ \"1\"\;/useProxy\ \"0\"\;/g > $synconf.NEW && mv -f $synconf.NEW $synconf
  }
  echo DIRECT 
}
Remplacez IP_DU_SERVEUR par la valeur déterminée auparavant.

Rendez ce script exécutable :

sudo chmod +x /etc/apt/proxy_auto.sh

Créez le fichier /etc/apt/apt.conf.d/01acng contenant la ligne :

Acquire::http::Proxy-Auto-Detect "/etc/apt/proxy_auto.sh";

Vérifier que ce proxy-cache des paquets est bien pris en compte :

apt-config dump | grep Proxy

La réponse doit être exactement la ligne que vous venez d'inscrire dans le fichier /etc/apt/apt.conf.d/01acng.

Vérifier que tout fonctionne en lançant la commande :

apt update

Ouvrez le Gestionnaire de paquets Synaptic (qui se trouve dans la partie Administration du menu de Cinnamon).

Dans Synaptic, menu Configuration/Préférences, onglet Réseau. Cocher Configuration manuelle du mandataire et indiquer, dans la ligne Mandataire HTTP, l'IP_DU_SERVEUR et le port 3142. Cliquer sur [Appliquer] puis [Accepter].

Cliquer sur [Recharger].

La configuration par défaut de mintupdate devrait convenir.

Vérifiez toutefois en ouvrant mintupdate (icône sur votre panneau). Dans son menu Édition/Préférences, le rafraîchissement régulier doit être au minimum de 2 heures :

C'est fait.


2 personnes ont visité cette page aujourd'hui et 383 en tout.

  • linuxaddict/administrer/aptcacherng.txt
  • Dernière modification : 08/11/2022, 18:48
  • de Claude Clerc