Dans un article précédent nous avons vu comment créer un miroir debian local.
Nous allons maintenant aller plus loin et effectuer une redirection transparente vers ce miroir. Note que dans la suite de cet article quand on utilisera le terme “miroir” il pourra s'agir soit d'un miroir “complet” soit bien d'un miroir partiel (apt-cacher-ng, apt-cacher…), les deux étant fonctionnellement (presque : voir note plus bas :p ) identiques pour ce qui nous intéresse.
L'avantage est donc de n'avoir aucun travail à effectuer sur les postes : ils utilisent toujours les dépots classiques, comme par exemple “ftp.fr.debian.org” mais sont redirigés silencieusement vers le dépôt local, d'où des gains énormes en bande passante et en simplicité.
Nous allons nous baser sur :
Cette etape est simple : il suffit d'installer jesred , le module qui nous servira a réécrire les URL au niveau du proxy squid.
apt-get install jesred
Pour activer la réécriture d'URL il faut ajouter des directives dans le fichier de conf de squid ( /etc/squid/squid.conf) :
cat << EOF >> /etc/squid3/squid.conf # redirection transparente pour apt-cacher debian et ubuntu redirect_program /usr/lib/squid/jesred EOF
sed -i -e "s,# rewrite_log =,rewrite_log =," /etc/jesred.conf
sed -i -e "s,/var/log/squid/,/var/log/squid3/," /etc/jesred.conf
echo "192.168.0.0/24" >> /etc/jesred.acl
On peut maintenant écrire les règles de réécritures désirées (sous forme de regexp), cela se passe dans le fichier /etc/jesred/jesred.rules.
# redirection transparente sur le miroir local # pour ne PAS rediriger les sources en local (nos miroirs n'ont pas les sources) regex ^http://ftp\.[a-z][a-z].debian.org/debian/(dists|pool)/.*/source/(Release|Sources|Sources\.(bz2|gz|diff/.*))$ regex ^http://ftp\.[a-z][a-z].debian.org/debian/dists/.*/installer-.*/.*$ # le reste est en local regex ^http://ftp\.[a-z][a-z].debian.org/debian/((dists|pool)/.*(udeb|deb|bz2|Packages|Packages.gz|Release|Release.gpg))$ http://debian-mirror.mondomaine.com/debian/\1
Si vous avez de l'espace disque et que vous avez un miroir complet (incluant les sources), il suffit de retirer les deux premières regexp qui empêchent la réécriture des adresses des paquets source : tout sera alors redirigé vers le miroir local.
# on ne redirige pas les sources en local regex ^http://security.debian.org/(dists|pool)/.*/source/(Release|Sources|Sources\.(bz2|gz|diff/.*))$ # mais le reste si regex ^http://(security.debian.org/((dists|pool)/.*(deb|bz2|gz|Packages|Packages.gz|Release|Release.gpg|)))$ http://debian-mirror.mondomaine.com/debian-security/\1 # idem pour les backports regex ^http://www.backports.org/debian/(dists|pool)/.*/source/(Release|Sources|Sources\.(bz2|gz|diff/.*))$ regex ^http://www.backports.org/debian/((dists|pool)/.*(deb|bz2|Contents-.*gz|Packages|Packages.gz|Release|Release.gpg))$ http://debian-mirror.mondomaine.com/debian-backports/\1
# depots Ubuntu - redirection vers l'apt-cacher ubuntu regex ^http://([a-z][a-z]\.archive.ubuntu.com/ubuntu/(dists|pool)/.*(deb|bz2|gz|Release|Release.gpg))$ http://ubuntu-mirror.mondomaine.com:3142/\1 regex ^http://(security.ubuntu.com/ubuntu/(dists|pool)/.*(deb|bz2|gz|Release|Release.gpg))$ http://ubuntu-mirror.mondomaine.com:3142/\1 regex ^http://((.*)packages.medibuntu.org/(dists|pool)/.*(deb|bz2|gz|Release|Release.gpg))$ http://ubuntu-mirror.mondomaine.com:3142/\1 regex ^http://(ppa.launchpad.net/.*/(dists|pool)/.*(deb|bz2|gz|Release|Release.gpg))$ http://ubuntu-mirror.mondomaine.com:3142/\1 regex ^http://(old-releases.ubuntu.com/ubuntu/(dists|pool)/.*(deb|bz2|gz|Release|Release.gpg))$ http://ubuntu-mirror.mondomaine.com:3142/\1 regex ^http://(archive.canonical.com/(dists|pool)/.*(deb|bz2|gz|Release|Release.gpg))$ http://ubuntu-mirror.mondomaine.com:3142/\1
c'est le logiciel apt-cacher qui se charge de distribuer le paquet directement s'il l'a en cache ou qui le récupère avant de le distribuer s'il ne l'a pas en cache. Un jour peut être, un article sur l'installation de ce logiciel apt-cacher .
# I have also added two aborts in order to use upgrade-manager: abort .gpg abort ReleaseAnnouncement abort Index
en conséquence en ce qui concerne la redirection pour un fichier disons http://ftp.fr.debian.org/debian/dists/wheezy/Release il faut que la redirection s'effectue sur :
d'ou les différences de parenthésage dans les règles pour faire le match sur l'url complete/partielle et le port : les miroirs partiels ont besoin d'une url complète
Pour prendre en compte ces modifications il faut bien sur faire recharger a squid sa configuration :
/etc/init.d/squid3 reload
Le bon fonctionnement peut etre vérifié en regardant dans le fichier de log /var/log/squid3/jesred-rewrite.log lorsque vous tentez d'installer un paquet, comme par exemple :
1282816088.239 192.168.0.65/- http://ftp.fr.debian.org/debian/pool/main/j/jesred/jesred_1.2pl1-16_amd64.deb http://debian-mirror.mondomaine.com/debian/pool/main/j/jesred/jesred_1.2pl1-16_amd64.deb 9 1282816088.254 192.168.0.65/- http://security.debian.org/pool/updates/main/s/squid/squid-common_2.7.STABLE3-4.1lenny1_all.deb http://debian-mirror.mondomaine.com/debian-security/pool/updates/main/s/squid/squid-common_2.7.STABLE3-4.1lenny1_all.deb 11
En installant la version “1.2pl1-19” de jesred disponible sur la debian testing/unstable à l'heure ou j'écris ces lignes : https://packages.debian.org/search?keywords=jesred il est maintenant possible de réécrire les URLs pour des clients utilisant de l'IPv6 (pas en proxy transparent cependant ) : voici à quoi ressemble un fichier /etc/jesred.acl comportant des IPv4 et des IPv6 :
192.168.0.0/24 192.168.1.0/24 192.168.2.0/24 # merci le backport de la version wheezy 1.2pl1-19 pour le support d'ipv6 =) 2a01:e32:833f:e2a:2::/112 2a01:e32:833f:e2a:3::/112 2a01:e32:833f:e2a:4::/112