{{tag>apt apt-cacher-ng acng proxy cache }} ====== 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é [[https://wiki.debian-fr.xyz/Apt-cacher-ng|ici]] en détail. En résumé et en prenant en compte les paquets spécifiques à LinuxMint : ===== Sur le serveur local ===== Par la suite, il est convenu que ce serveur tourne sous Debian. ==== Installation ==== Rien de plus simple : sudo apt install apt-cacher-ng debdelta ca-certificates ==== Miroirs de Linux Mint ==== 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.6''. Si ce n'est pas le cas, adaptez la deuxième des lignes de commandes suivantes : cd export MMV=1.2.6 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/ ==== Connaître l'IP de votre serveur ==== 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**. ==== Configuration ==== É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 ==== Relancer le service 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]. ==== Connaître la taille de votre cache ==== Sur le serveur : du -sh /var/cache/apt-cacher-ng/ ==== Consulter les logs ==== Sur le serveur, cette commande donne la liste des logs, du plus récent au plus ancien : ls -lth /var/log/apt-cacher-ng/ ==== Pre-chaching (optionnel) ==== 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/*/binary-amd64/Packages* mint/dists/vera/*/binary-amd64/Packages* mint/dists/victoria/*/binary-amd64/Packages* security.ubuntu.com/ubuntu/dists/jammy-security/*/binary-amd64/Packages* uburep/dists/jammy*/*/binary-amd64/Packages*'' 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 ! ===== Sur chaque ordinateur du réseau local ===== ==== Installer netcat ==== 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. ==== Configuration d'apt ==== ''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 ==== Configuration de synaptic ==== 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]. ==== Configuration de mintupdate ==== La configuration par défaut de mintupdate devrait convenir. Vérifiez toutefois en ouvrant mintupdate (icône {{mdi>shield-outline}} sur votre panneau). Dans son menu //Édition/Préférences//, le rafraîchissement régulier doit être au minimum de 2 heures : {{:linuxaddict:administrer:mintupdate-option-actualisation.png?nolink&600|}} C'est fait. ===== Liens ===== * [[https://github.com/ashang/apt-cacher-ng|Le code et la doc officielle d'apt-cacher-ng sur Github]] (en anglais). * [[https://www.unix-ag.uni-kl.de/~bloch/acng/html/|Documentation détaillée d'apt-cacher-ng]] (en anglais). * [[https://wiki.debian-fr.xyz/Apt-cacher-ng|Apt-cacher-ng]] (doc en français). * [[https://ubuntuforums.org/showthread.php?t=2310288|Pre-caching]] (en anglais). * [[https://bugs.launchpad.net/ubuntu/+source/apt-cacher-ng/+bug/1998865|Invalid signature]] (en anglais). ---- {{counter|today| personne a visité cette page aujourd'hui| personnes ont visité cette page aujourd'hui}} et {{counter}} en tout.