Table of Contents

Mise en oeuvre de apt-cacher-ng

Présentation

apt-cacher-ng est un serveur de cache qui permet de cacher les paquets apt qui téléchargés, pour les resservir à la demande.

Ainsi, si un des ordinateurs du réseau local se met à jour, les paquets téléchargés restent dans le cache, et l'ordinateur suivant demandant le même paquet le récupérera depuis le réseau local au lieu de le re-télécharger.

Il peut également servir de cache proxy pour les paquets d'autres distributions comme les paquets rpms

Description du fichier de configuration

filepattern

Par défaut apt-cacher-ng ne traite que les paquets apt, pour permettre de gérer d'autres fichiers il existe des modèles de données compartimentées (Pigeonholing) pour autoriser les fichiers statiques ou volatils) les filepattern.

Les filepattern sont des expressions régulières délimitées par des pipe '|', organisées dans les modèles suivants :

remap

Avec la configuration par défaut, apt-cacher-ng agira presque comme un proxy HTTP ordinaire avec un comportement de mise en cache amélioré. Lorsque des fichiers sont demandés, ils sont téléchargés à partir d'un emplacement distant spécifié dans la requête du client et sont stockés de manière unique.

Cependant, pour certains cas d'utilisation, il peut être utile de spécifier des règles supplémentaires pour obtenir d'autres améliorations, par ex. afin de détecter et d'empêcher les téléchargements évitables, de réduire l'espace requis pour le répertoire de cache ou simplement masquer les emplacements de téléchargement réels des clients APT.

Ces modifications sont généralement réalisées par deux stratégies, Fusion et Redirection, qui sont configurées dans le contexte d'un référentiel de cache spécifié. Leur configuration est créée en utilisant une ou plusieurs directives de configuration Remap

Les directives de configuration Remap

La “fusion” des demandes entrantes peut être effectuée si certains sous-répertoires de serveurs distants différents sont considérés comme égaux lorsque la dernière partie du chemin de fichier distant mène au même contenu de fichier. Lorsque spécifié, le contenu du cache interne est partagé et le flux de téléchargement en direct est partagé. La configuration de cette directive consiste à définir une “liste d'égalité” contenant un ensemble d'URL représentant les répertoires de base (comme http://ftp.debian.org/debian et http://ftp.uni-kl.de/pub/linux/debian).

Avec la redirection, les demandes des clients provoquent un téléchargement à partir d'un emplacement distant qui est différent de ce que les clients ont demandé et dont ils pensent recevoir. La redirection est une fonctionnalité facultative. Pour l'utiliser, configurer une ou plusieurs URL pointant vers des serveurs cibles. Les URL doivent inclure une spécification d'annuaire qui correspond au niveau de répertoire des URL dans les URL à fusionner, par exemple toutes les URLs se terminant par /ubuntu/ pour les dépôts miroir Ubuntu habituels. Si la redirection n'est pas utilisée (c'est-à-dire que la liste d'URL cible est vide), l'URL d'origine de la requête du client est utilisée pour obtenir les données.

Un repository (cache) est l'identificateur interne qui déclare où appliquer les spécifications de fusion/redirection. Il représente également le nom d'un sous-répertoire de cache interne.

Ecriture des directives Remap

Lorsque les cas d'utilisation pour la fusion/redirection sont identifiés et qu'un nom de référentiel est choisi, ces composants sont écrits dans les directives de configuration en commençant par Remap, qui suivent la syntaxe simple:

Remap-RepositoryName: MergingURLs; TargetURLs; OptionalFlags

Le nom RepositoryName est un nom symbolique qui doit être choisi avec soin et ne doit pas être modifié par la suite, sinon les données pourraient devenir inaccessibles aux clients jusqu'à ce que les fichiers soient extraits et réimportés semi-manuellement. En interne, cette chaîne partage l'espace de noms avec les noms d'hôtes et/ou les noms de répertoires des autres URL. Les collisions de noms peuvent provoquer des effets secondaires désagréables et doivent être évitées. Les noms recommandés sont composés de caractères alphanumériques ou URL. En outre, un nom de référentiel ne doit pas être associé à un nom d'hôte réel.

La partie TargetURLs est facultative (voir la description de la redirection ci-dessus). Si plusieurs cibles sont spécifiées, l'ordre des serveurs définit leur ordre de préférence.

Les deux listes d'URL contiennent simplement des URL séparées par des espaces. Les chaînes doivent être correctement codées en URL. Comme toutes les URL sont supposées appartenir au protocole http: et pointent vers un répertoire distant, le préfixe de protocole http: et les barres obliques de fin sont facultatifs. Il n'y a pas de limite stricte au nombre d'URL. Cependant, pour des raisons de lisibilité, il est recommandé de les placer dans des fichiers de liste séparés et de spécifier les fichiers de liste particuliers avec des balises comme file: urlsDebian.list au lieu de les écrire sur une seule ligne. URL brutes et fichiers peuvent être mélangées.

Exemples de lignes de remappage

Cas d'utilisation: les fichiers sont toujours téléchargés à partir des miroirs at … ou de … en fonction de la demande de l'utilisateur, mais les données déjà mises en cache sont servies aux utilisateurs … at … et de ….

Cas d'utilisation: Toutes les demandes sont redirigées vers un miroir dans le répertoire /pu de la machine locale 192.168.17.23. Lorsque cette machine est arrêtée, le serveur public ca.archive.ubuntu.com est utilisé à la place.

Installation et configuration de apt-cacher-ng

Installer apt-cacher-ng

$ sudo apt-get install apt-cacher-ng

Configurer apt-cacher-ng

Editer le fichier de configuration /etc/apt-cacher-ng/acng.conf pour notamment paramétrer l'endroit où les paquets seront stockés (/var/cache par défaut), ou le port du serveur cache (3142 par défaut).

A l'installation une procédure cron assure l'entretien périodique du dépot : les paquets obsolètes (ceux dont une nouvelle version a été téléchargée) sont purgés quotidiennement.

Autoriser le téléchargement de fichiers spécifiques

Par exemple pour utiliser les liste de dépôts Centos, par défaut apt-cacher-ng ne permet pas de les télécharger et consigne ces requêtes comme interdites (503).

Pour résoudre cela, il faut utiliser VfilePattern pour mettre en cache (volatil) les résultats de ces commandes.

Ajouter à la fin de VfilePattern des pattern supplémentaire dans /etc/apt-cacher-ng/acng.conf pour correspondre au modèle de requête:

^\?.*&arch=

Autoriser le téléchargement des clés

On peut étendre ce modèle pour inclure des objets comme des clés ou d'autres objets qui sont rejetés. Par exemple pour une clé, ajouter le motif suivant à la fin du modèle VfilePattern:

.*/RPM-GPG-KEY-examplevendor)$

Fusionne les miroirs

Afin de na pas multiplier les cache pour les différents miroirs il faut indiquer à apt-cacher-ng tous les miroirs impliqués afin qu'ils puissent les regrouper. Pour cela, ajouter une ligne Remap dans /etc/apt-cacher-ng/acng.conf:

Remap-centos: file:centos_mirrors /centos

Ensuite, il faut fournir une liste des miroirs dans /etc/apt-cacher-ng/centos_mirrors, ce qui peut être fait en le récupérant à partir de CentOS et en extrayant les cellules http :

curl https://www.centos.org/download/full-mirrorlist.csv | sed 's/^.*"http:/http:/' | sed 's/".*$//' | grep ^http >/etc/apt-cacher-ng/centos_mirrors

SSL Passthrough

Certains dépôts utilisent le protocole SSL (par exemple, pour installer le paquet “epel-release” dans CentOS 7), mais apt-cacher-ng ne gère pas cela par défaut.

La façon dont cela peut être géré est de mettre un PassThroughPattern dans /etc/apt-cacher-ng/acng.conf:

PassThroughPattern: (mirrors\.fedoraproject\.org|some\.other\.repo|yet\.another\.repo):443

Cela permet aux demandes CONNECT de ne pas mettre en cache les demandes correspondant à ces trois modèles.

Pour utiliser le cache et économiser de la bande passante on peut utiliser des repos non-SSL. Il y a toujours un niveau de sécurité sans SSL (en se basant uniquement sur les signatures GPG).

Redémarrer apt-cacher-ng

$ service apt-cacher-ng.service restart 

Configuration des clients

Pour que yum utilise apt-cacher-proxy, ajoutez la ligne suivante dans votre fichier /etc/yum.conf:

proxy = http://address.of.your.cache:3142

Puis, forcer yum à effacer les caches et réessayer:

$ yum clean expire-cache
$ yum update

Avec la configuration en place, on doit voir les fichiers récupérés via apt-cacher-ng et un répertoire “centos” où les miroirs sont fusionnés dans /var/cache/apt-cacher-ng/.