3.4 Variables d'environnement

Variables d'environnement

Que sont-elles ?

Une variable d'environnement est un objet nommé qui contient des informations utilisées par une ou plusieurs applications. Beaucoup d'utilisateurs (particulièrement les nouveaux Linuxiens) trouvent que c'est un peu trop compliqué et ingérable. C'est bien sûr faux : en utilisant des variables d'environnement, on peut changer facilement la valeur d'une configuration pour une ou plusieurs applications.

Exemples importants

Le tableau suivant liste un certain nombre de variables utilisées par le système Linux et décrit leur utilisation. Des exemples de valeurs seront présentés après le tableau.

Variable Description
PATH Cette variable contient une liste de répertoires séparés par des deux-points dans lesquels le système cherche des fichiers exécutables. Si vous entrez le nom d'un exécutable (tel que ls, rc-update ou emerge), mais que cet exécutable n'est pas situé dans un des répertoires listés, votre système ne l'exécutera pas (tant que vous n'aurez pas spécifié le chemin complet avec ligne de commande, tel que /bin/ls).
ROOTPATH Cette variable a la même fonction que PATH, mais celle-ci liste les répertoires qui doivent être parcourus lorsque l'utilisateur root entre une commande.
LDPATH Cette variable contient une liste de répertoires séparés par des deux-points dans lesquels l'éditeur de liens dynamique cherche les bibliothèques.
MANPATH Cette variable contient une liste de répertoires séparés par des deux-points dans lesquels la commande man cherche les pages man.
INFODIR Cette variable contient une liste de répertoires séparés par des deux-points dans lesquels la commande info cherche les pages info.
PAGER Cette variable contient le chemin vers le programme utilisé pour lister le contenu des fichiers (tel que less ou more).
EDITOR Cette variable contient le chemin vers le programme utilisé pour éditer le contenu des fichiers (tel que nano ou vi).
KDEDIRS Cette variable contient une liste de répertoires séparés par des deux-points qui contiennent les éléments spécifiques à KDE.
CLASSPATH Cette variable contient une liste de répertoires séparés par des deux-points qui contiennent les classes Java.
CONFIG_PROTECT Cette variable contient une liste de répertoires séparés par des espaces qui doivent être préservés par Portage pendant les mises à jour.
CONFIG_PROTECT_MASK Cette variable contient une liste de répertoires séparés par des espaces qui ne doivent pas être préservés par Portage pendant les mises à jour.

Voici un exemple de définition de toutes ces variables :

PATH="/bin:/usr/bin:/usr/local/bin:/opt/bin:/usr/games/bin" 
ROOTPATH="/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin" 
LDPATH="/lib:/usr/lib:/usr/local/lib:/usr/lib/gcc-lib/i686-pc-linux-gnu/3.2.3" 
MANPATH="/usr/share/man:/usr/local/share/man" 
INFODIR="/usr/share/info:/usr/local/share/info" 
PAGER="/usr/bin/less" 
EDITOR="/usr/bin/vim" 
KDEDIRS="/usr" 
CLASSPATH="/opt/blackdown-jre-1.4.1/lib/rt.jar:." 
CONFIG_PROTECT="/usr/X11R6/lib/X11/xkb /opt/tomcat/conf \
                /usr/kde/3.1/share/config /usr/share/texmf/tex/generic/config/ \
                /usr/share/texmf/tex/platex/config/ /usr/share/config" 
CONFIG_PROTECT_MASK="/etc/gconf" 

Définir des variables globalement

Le répertoire /etc/env.d

Pour centraliser les définitons de ces variables, Calculate utilise le répertoire /etc/env.d. Dans ce répertoire, vous trouverez un certain nombre de fichiers tels que 00basic, 05gcc, etc. qui contiennent les variables requises par les applications mentionnées dans leurs noms.

Par exemple, quand vous installez gcc, un fichier nommé /etc/env.d/05gcc est créé par l'ebuild et contient les définitions des variables suivantes :

PATH="/usr/i686-pc-linux-gnu/gcc-bin/3.2" 
ROOTPATH="/usr/i686-pc-linux-gnu/gcc-bin/3.2" 
MANPATH="/usr/share/gcc-data/i686-pc-linux-gnu/3.2/man" 
INFOPATH="/usr/share/gcc-data/i686-pc-linux-gnu/3.2/info" 
CC="gcc" 
CXX="g++" 
LDPATH="/usr/lib/gcc-lib/i686-pc-linux-gnu/3.2.3" 

Les autres distributions vous disent de changer ou d'ajouter ces variables d'environnement dans /etc/profile ou ailleurs. Par contre, Calculate vous facilite la maintenance et l'administration de ces variables d'environnement, ce qui vous évite de vous soucier des nombreux fichiers qui peuvent contenir ces variables d'environnement.

Par exemple, lorsque gcc est mis à jour, le fichier /etc/env.d/05gcc est aussi mis à jour sans que l'utilisateur ne fasse quoi que se soit.

Cela n'est pas uniquement profitable à Portage, mais aussi à vous, en tant qu'utilisateur. Occasionnellement, vous serez amené à définir des variables d'environnement pour tout le système. Par exemple, avec la variable http_proxy. Au lieu de vous embêter avec /etc/profile, vous devez juste créer un fichier (/etc/env.d/99local) et y entrer vos définitions :

http_proxy="proxy.server.com:8080"

En utilisant le même fichier pour toutes vos variables, vous avez une vue d'ensemble aisée de toutes les variables que vous avez définies.

Le script env-update

Plusieurs fichiers dans /etc/env.d définissent la variable PATH. Ce n'est pas une erreur : quand vous lancez env-update, celui-ci concatènera les définitions avant de mettre à jour les variables d'environnement. Ainsi, il aide les paquets (et les utilisateurs) à ajouter leurs propres variables d'environnement sans interférer avec les valeurs déjà définies.

Le script env-update liste les valeurs des fichiers de /etc/env.d par ordre alphabétique. Les noms des fichiers dans /etc/env.d doivent commencer par deux chiffres décimaux. Ordre de mise à jour par env-update :

          00basic        99kde-env       99local
      +-------------+----------------+-------------+
PATH="/bin:/usr/bin:/usr/kde/3.2/bin:/usr/local/bin" 

Cette concaténation de définitions pour la même variable n'est réalisée que pour KDEDIRS, PATH, LDPATH, MANPATH, INFODIR, INFOPATH, ROOTPATH, CONFIG_PROTECT, CONFIG_PROTECT_MASK, PRELINK_PATH et PRELINK_PATH_MASK. Les autres variables reçoivent uniquement la dernière valeur définie (dans les fichiers de /etc/env.d pris par ordre alphabétique).

Quand vous lancez env-update, le script crée toutes les variables d'environnement et les place dans /etc/profile.env (qui est utilisé par /etc/profile). Il extrait aussi les informations de la variable LDPATH et les utilise pour créer /etc/ld.so.conf. Après cela, il lance ldconfig pour créer le fichier /etc/ld.so.cache utilisé par l'éditeur de liens dynamique.

Si vous voulez connaitre le résultat de env-update immédiatement après son exécution, lancez la commande suivante pour mettre votre système à jour. Les utilisateurs qui ont installé Gentoo eux-même se souviendront sûrement que cela se trouvait dans les instructions d'installation :

env-update && source /etc/profile

Note : la commande ci-dessus ne met à jour que les variables de votre terminal courant, des nouvelles consoles et leurs enfants. Donc, si vous êtes sous X11, vous devrez soit taper source /etc/profile dans chaque nouveau terminal ouvert, soit relancer X afin que les nouveaux terminaux relisent et prennent en compte les nouvelles variables. Si vous utiliser un gestionnaire de session, passez root et tapez /etc/init.d/xdm restart. Sinon, vous devrez vous déconnecter et revenir dans X pour avoir les nouvelles variables.

Définir des variables localement

Variables spécifiques à un utilisateur

Vous n'avez pas toujours besoin de définir des variables d'environnement globalement. Par exemple, vous pourriez avoir besoin d'ajouter /home/my_user/bin et le répertoire courant (celui dans lequel l'utilisateur se trouve quand il lance une commande) à la variable PATH, mais vous ne voulez pas que les autres utilisateurs de votre système l'aient aussi dans PATH. Si vous voulez définir une variable d'environnement localement, vous devriez utiliser ~/.bashrc ou ~/.bash_profile. Un exemple pour montrer comment étendre PATH pour un usage local avec ~/.bashrc :

#(Les deux-points à la fin sans répertoire à leur suite
ajoutent le répertoire courant automatiquement.)
PATH="${PATH}:/home/my_user/bin:"

Quand vous vous reconnecterez, votre variable PATH sera mise à jour.

Variables spécifiques à une session

Quelquefois, une définition plus spécifique est requise. Vous voudriez être capable d'utiliser des binaires d'un répertoire temporaire que vous avez créé sans utiliser le chemin complet ou éditer ~/.bashrc qui vous prendrait trop de temps.

Dans ce cas-ci, vous pouvez juste définir la variable PATH variable dans votre session courante en utilisant la commande export. Tant que vous ne vous serez pas déconnecté, la variable utilisera la valeur temporaire. Voici un exemple :

export PATH="${PATH}:/home/my_user/tmp/usr/bin"
Thank you!