APT, Proxy-Auto-Detect et proxy.pac ou wpad.dat

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

1
2
3
4
     #!/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.

Commentaires

Comments powered by Disqus