Maintenant que la mèche a été vendue, il faut bien dire que c'est la page du projet Debian Live relative à la mise en cache des paquets qui explique - certes en anglais - comment il est si simple de mettre en œuvre apt-cacher. Bien sûr il faut commencer par l'installer :

$ sudo apt-get install apt-cacher

Ensuite il faut a priori activer le serveur de paquets dès le démarrage de la machine. Cela consiste à mettre l'option AUTOSTART=1 dans le fichier /etc/default/apt-cacher :

$ sudo nano /etc/default/apt-cacher

Éventuellement vous pourrez aussi éditer le fichier de configuration /etc/apt-cacher/apt-cacher.conf afin de modifier, par exemple, les adresses IP auxquelles répond le serveur :

$ sudo nano /etc/apt-cacher/apt-cacher.conf

Il n'y a plus qu'à démarrer le service manuellement, plutôt que de redémarrer la machine ;-) :

$ sudo /etc/init.d/apt-cacher start

Le serveur de paquets est maintenant actif, reste à dire aux clients d'aller chez lui plutôt que sur Internet. Cette opération est elle aussi très simple puisqu'il suffit de modifier légèrement les adresses des dépôts dans le fichier de configuration des dépôts /etc/apt/sources.list :

$ sudo nano /etc/apt/sources.list

Les adresses doivent maintenant toutes commencer par http://nom.du.serveur:3142, où nom.du.serveur est le nom de votre serveur apt-cacher ou son adresse IP. Par exemple, le dépôt suivant :

http://ftp.debian.org/debian/ lenny main contrib non-free

devient avec un serveur apt-cacher localisé sur la même machine :

http://localhost:3142/ftp.debian.org/debian/ lenny main contrib non-free

Comme apt-cacher déduit l'adresse réelle du dépôt de paquets du reste de l'adresse mentionnée, ceci fonctionne avec n'importe quel dépôt sur Internet ! Et si vous avez des dépôts locaux, il suffit de ne pas toucher à leur adresse.

Importer des paquets déjà téléchargés

Une fois démarré, votre serveur apt-cacher va télécharger automatiquement tout paquet demandé qu'il n'aurait pas déjà en cache dans la bonne version. Cependant il est fort probable qu'avant de l'avoir installé vous ayez déjà téléchargé des paquets par une action comme la mise à jour de votre système par exemple. Comme l'indique la page How To Set up a repository cache with apt-cacher, ces paquets peuvent être réintégrés dans le cache de apt-cacher par cette commande :

$ sudo /usr/share/apt-cacher/apt-cacher-import.pl /var/cache/apt/archives

Le script Perl apt-cacher-import.pl est livré avec apt-cacher. On lui donne ici comme argument le nom du répertoire contenant les fichiers *.deb à réintégrer, en l'occurrence le répertoire de téléchargement des paquets du système. Sans cette option, le script va chercher dans un répertoire nommé /var/cache/apt-cacher/import (voir la page man de apt-cacher).

Problème du proxy timeout

Dans le cadre professionnel vous aurez certainement à passer par un proxy pour accéder à Internet. Le renseignement des paramètres du proxy se fait dans le fichier de configuration /etc/apt-cacher/apt-cacher.conf. Tout fonctionne correctement sauf si de temps en temps votre proxy met vraiment beaucoup de temps à renvoyer les fichiers demandés (plus de 5 minutes). Malheureusement il n'y a pas de paramètre proxy timeout, il faut donc investiguer soi-même…

Un coup d'œil dans le script /usr/share/apt-cacher/apt-cacher nous apprend déjà que apt-cacher utilise la bibliothèque curl pour télécharger les paquets. La page Curl::Easy dédiée à l'utilisation de cette bibliothèque dans le langage Ruby montre qu'il existe une option timeout que notre apt-cacher ne semble pas utiliser. Qu'à cela ne tienne, il suffit de modifier le script /usr/share/apt-cacher/apt-cacher afin de faire apparaître cette variable. Par exemple entre les lignes suivantes :

$curl->setopt(CURLOPT_CONNECTTIMEOUT, 60);
$curl->setopt(CURLOPT_NOSIGNAL, 1);

vous ajouterez la ligne suivante :

$curl->setopt(CURLOPT_TIMEOUT, 10000);

qui fixe le temps de réponse global du téléchargement à 10000 secondes.

Pour les puristes, le fichier patch correspondant est le suivant :

# diff -u /usr/share/apt-cacher/apt-cacher.orig /usr/share/apt-cacher/apt-cacher
--- /usr/share/apt-cacher/apt-cacher.orig	2010-02-10 12:02:16.000000000 +0100
+++ /usr/share/apt-cacher/apt-cacher	2010-02-10 10:44:10.000000000 +0100
@@ -1163,6 +1163,7 @@
 	$curl->setopt(CURLOPT_USERAGENT, "apt-cacher/$version ".$curl->version);
 	$curl->setopt(CURLOPT_NOPROGRESS, 1);
 	$curl->setopt(CURLOPT_CONNECTTIMEOUT, 60);
+	$curl->setopt(CURLOPT_TIMEOUT, 10000);
 	$curl->setopt(CURLOPT_NOSIGNAL, 1);
 	$curl->setopt(CURLOPT_LOW_SPEED_LIMIT, 0);
 	$curl->setopt(CURLOPT_LOW_SPEED_TIME, $cfg->{fetch_timeout});

Le mot de la fin : bons téléchargements légaux ! ;-)