L’option Acquire::http::Proxy-Auto-Detect existe depuis quelques temps, et était prévue pour être utilisée avec le paquet squid-deb-proxy-client capable de détecter les serveurs proxy dédiés à APT publiant un service _apt_proxy._tcp via Avahi. Elle vient d’être améliorée (version 1.0.8) et passe l’URL utilisée en paramètre au programme de détection. Il est ainsi possible de découvrir un proxy « généraliste » via un script proxy.pac.
La solution proposée s’appuie sur le paquet libproxy-tools et un wrapper shell.
Paquets à installer
Les paquets suivants sont nécessaires :
- libproxy-tools apporte la commande proxy.
- libproxy1-plugin-mozjs ou libproxy1-plugin-webkit pour interpréter les fichiers wpad.dat et proxy.pac.
- Optionnellement libproxy1-plugin-networkmanager, libproxy1-plugin-gsettings ou libproxy1-plugin-kconfig pour récupérer les configurations de proxy de Network Manager, Gnome ou KDE.
Configuration APT
Créer un nouveau fichier dans /etc/apt/apt.conf.d/ (par exemple /etc/apt/apt.conf.d/02proxy) :
Acquire::http::Proxy-Auto-Detect "/usr/local/bin/apt-autoproxy.sh";
Indique à APT de lancer le script donné en paramètre pour chaque domaine lors des téléchargements.
Wrapper shell
/usr/local/bin/apt-autoproxy.sh
#!/bin/sh
export http_proxy=wpad://
echo "$*" | proxy | awk '{ print $1 }'
- La ligne 2 est optionnelle, elle me permet de forcer la recherche d’un proxy automatique pour l’utilisateur root quand celui-ci n’a pas de configuration de proxy KDE ou Gnome (ou que les plugins networkmanager, gsettings ou kconfig ne sont pas installés).
- Le filtrage par awk permet de ne fournir qu’un proxy à APT (en effet, plusieurs proxys peuvent être retournés par la commande proxy (et les fichiers proxy.pac).
- Le wrapper peut être testé avec les commandes suivantes :
/usr/local/bin/apt-autoproxy.sh http://ftp.debian.org
sudo /usr/local/bin/apt-autoproxy.sh http://ftp.debian.org
Le retour de ces commandes doit être une chaîne sans espaces comme : http://proxy.example.com:3128 en présence d’un proxy et direct:// si aucun n’est utilisable pour cette URL.