S’il vous est déjà arrivé d’avoir à accéder à des dépôts debian placés derrière un proxy, vous pouvez utiliser un outil graphique comme Synaptics qui permet de configurer ça assez facilement. Si vous êtes pluto adepte de la ligne de commande, vous avez alors à modifier les fichiers de configuration d’apt.

sudo echo 'Acquire::http::Proxy "http://proxy.mynetwork.com:1234/";' > /etc/apt/apt.conf.d/proxy

ou plus simplement en définissant les paramètres du proxy dans la variable d’environnement http_proxy (ou ftp_proxy dans le cas d’un miroir ftp).

export http_proxy='http://proxy.mynetwork.com:1234/'

Si le proxy est un proxy authentifiant, alors il faut également préciser le login et le mot de passe dans http_proxy.

export http_proxy='http://login:pwd@proxy.mynetwork.com:1234/'

Évidemment, si vous avez un dépôt debian miroir sur votre réseau interne, vous n’avez pas besoin de définir tout ça. Cependant, si vous voulez également accéder aux dépôts externes, c’est là que ça se complique : si vous définissez http_proxy, le dépôt interne devient inaccessible car apt tente de passer par le proxy, et si vous ne le définissez pas, les depôts externes sont inaccessibles car vous ne passez plus par le proxy. Il faut donc procéder autrement.


Une solution est d’utiliser la variable no_proxy. Cette variable définit les hôtes qui ne nécessitent pas un accès via proxy.

Par exemple

export no_proxy='127.0.01,.mynetwork.com,192.168.78.100'

n’utilisera pas le proxy pour accéder à 127.0.0.1, à n’importe quel hôte du domaine mynetwork.com ou à 192.168.78.100. Attention, l’utilisation de wildcards dans no_proxy ne fonctionnera pas. Ainsi écrire ce qui suit n’empêchera pas d’essayer d’utiliser le proxy pour accéder à wiki.mynetwork.com.

# wildcards dont work
export no_proxy='127.0.01,*.mynetwork.com'

Définir http_proxy et no_proxy dans $HOME/.bashrc permettra donc d’accéder à n’importe quel dépôt, qu’il soit sur le réseau interne ou à l’extérieur. Prenons l’exemple de deux dépôts, l’un sur l’hôte deb.mynetwork.com, l’autre sur l’hôte fr.archive.ubuntu.com. Il faut définir

export http_proxy='http://login:pwd@proxy.mynetwork.com:1234/'
export no_proxy='127.0.01,deb.mynetwork.com'

Mais si vous utilisez sudo apt-get pour installer un paquet, ça ne fonctionne toujours pas. C’est parce que sudo filtre les variables d’environnement pour des raisons de sécurité. Pour constater quelles variables sont filtrées et comment :

sudo sudo -V

On y voit que la variable http_proxy est préservée, mais pas no_proxy. Pour y remédier, il va falloir éditer le fichier /etc/sudoers.

sudo visudo

et rajouter la ligne suivante

Defaults        env_keep+="no_proxy"

Attention à bien mettre des double-quotes et non des simple-quotes.

Si vous êtes sous Ubuntu, le fichier devrait ressembler à ça

# /etc/sudoers
#
# This file MUST be edited with the 'visudo' command as root.
#
# See the man page for details on how to write a sudoers file.
# Host alias specification

# User alias specification

# Cmnd alias specification

# Defaults

Defaults        env_keep+='no_proxy'
Defaults        !lecture,tty_tickets,!fqdn

# User privilege specification
root    ALL=(ALL) ALL

# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL

Ainsi, vous pouvez installer des paquets provenant de votre réseau local ou de l’extérieur.

L’avantage de cette solution, c’est qu’elle est valable pour tous les programmes : par exemple l’installation du paquet msttcorefonts va télécharger les polices true type microsoft sur le net en utilisant wget. Si vous êtes derrière un proxy et qu’aucun proxy n’est défini dans le fichier $HOME/.wgetrc, le fichier /etc/wgetrc ou dans la variable d’environnement http_proxy, le téléchargement échouera. En définissant la variable d’environnement http_proxy ça fonctionne comme un charme.

Petite astuce supplémentaire, si votre proxy requiert une authentification, vous n’avez pas envie que tout le monde connaisse votre mot de passe en regardant votre .bashrc.

Une solution est de mettre la définition dans un fichier $HOME/.proxy puis de l’appeler depuis le bashrc.

fichier $HOME/.proxy

#!/bin/bash
# proxy settings
export http_proxy='http://login:pwd@proxy.mynetwork.com:1234/'
export no_proxy='127.0.01,deb.mynetwork.com'

changer les droits d’accès et modifier son bashrc

chmod go-rw $HOME/.proxy
echo 'source $HOME/.proxy' > $HOME/.bashrc
Trackback

aucun commentaire

Ajouter un commentaire