Env.d HOWTO John P. Davis Guillaume Morin Matthieu Montaudouin Ce guide décrit le concept et l'utilisation du répertoire /etc/env.d et son contenu. 1.5 16 Mars 2003 Introduction à <c>env.d</c> et ses variables génériques
Variables d'environnement Gentoo de base

Une question récurrente des utilisateurs de Gentoo est "Où sont mes variables d'environnement, et quelles sont leurs valeurs?". Pour comprendre cette question, nous devons tout d'abord savoir ce qu'est une variable d'environnement. Une variable d'environnement est définie dès que la commande export est utilisée. Par exemple, si vous tapez export EDITOR="/usr/sbin/vim" , vous définissez une variable d'environnement qui indique au système que votre éditeur de texte par défaut est vim. Il y a différentes sortes de variables d'environnement qui peuvent être définies sur votre système Gentoo, en voici quelques exemples:

export définit une variable d'environnement dans le shell *et* tous ses processus fils. Si vous voulez juste définir la variable sans affecter les processus fils, tapez juste quelque chose comme FOO="bar". Votre fichier 00basic peut être différent. Ce n'est pas un problème, car ces variables sont celles incluses par défaut dans Gentoo. Ces exemples peuvent être trouvés dans /etc/env.d/00basic. PATHDéfinit le chemin (PATH) par défaut où trouver les programmes. Les répertoires sont délimités par ':'. Une variable path ressemblerait à quelque chose comme PATH=/usr/local/bin:/opt/bin. ROOTPATHCette variable ressemble à la précédente, mais définit le chemin par défaut des programmes de l'utilisateur root. Un exemple ressemblerait à quelque chose comme ROOTPATH=/usr/local/bin:/opt/bin. LDPATH Cette variable spécifie le chemin des bibliothèques à lier. Les répertoires sont ici aussi délimités par ':'. Un exemple serait LDPATH=/usr/local/lib. MANPATHIndique où les pages de manuel sont stockées sur votre machine. Elle ressemble à PATH, mais pour les pages de manuel. Exemple : MANPATH=/usr/share/man:/usr/local/share/man. INFODIRSpécifie où sont conservés les fichiers info. Exemple : INFODIR=/usr/share/info. PAGERDéfinit le pager utilisé, par exemple less ou more. Ce pourrait être PAGER=/usr/bin/less. EDITORIndique au système quel est l'éditeur par défaut. Exemple : EDITOR=/usr/bin/vim.
VariableFonction

Ce qui suit est un exemple de fichier 00basic, juste pour vous donner une idée de son apparence. Si votre fichier 00basic est défectueux, vous pouvez utiliser celui-ci!

# /etc/env.d/00basic:
# $Header: /home/cvsroot/gentoo-src/rc-scripts/etc/env.d/00basic,v 1.11 2003/02/17 02:48:39 azarah Exp $

PATH="/usr/local/bin:/opt/bin"
ROOTPATH="/usr/local/bin:/opt/bin"
LDPATH="/usr/local/lib"
MANPATH="/usr/share/man:/usr/local/share/man"
INFODIR="/usr/share/info"
INFOPATH="/usr/share/info"
CVS_RSH="ssh"
PAGER="/usr/bin/less"
LESSOPEN="|lesspipe.sh %s"
Format de env.d

Les fichiers à l'intérieur de env.d sont organisés dans un ordre logique afin que lorsque env-update est lancé, il ordonne correctement les variables. Le nombre au début des fichiers indique leur ordre de parcours. Donc 00basic sera le premier, et ensuite 01quelquechose et ainsi de suite. Le contenu de ces fichiers a un format spécifique :

# Ceci est un commentaire, comme en BASH 
VARIABLE1=/chemin/vers/quelquechose 
# Quelques variables peuvent avoir des arguments délimités par ":" . 
VAR1A=/chemin/vers/quelquechose:/chemin/vers/autrechose/ 
VARIABLE2=nom_de_quelquechose 
Variables spéciales et fonctionnement global
Variables spéciales

Il y a quelques variables spéciales incluses dans env.d : KDEDIRS, PATH, CLASSPATH, LDPATH, MANPATH, INFODIR, ROOTPATH, CONFIG_PROTECT, CONFIG_PROTECT_MASK Elles sont spéciales car elles sont traitées de manière spéciale et définies dans des fichiers spéciaux, comme expliqué plus loin.

Quelques unes des variables mentionnées ci-dessous sont aussi contenues dans 00basic. Cela est correct car elles peuvent être utilisées plus d'une fois dans des fichiers séparés, comme expliqué plus bas. KDEDIRS Chemin vers tous les fichiers de KDE. PATHPrécédemment défini, délimité par ':' (voir plus haut).CLASSPATHDéfinit le chemin vers les classes Java, délimité par ':'.LDPATHPrécédemment défini ( voir plus haut ).MANPATHPrécédemment défini, délimité par ':' (voir plus haut).INFODIRPrécédemment défini, délimité par ':' (voir plus haut).ROOTPATHPrécédemment défini, délimité par ':' (voir plus haut).CONFIG_PROTECTSpécifie quels fichiers de configuration dans /etc doivent être protégés des nouveaux ebuilds, les arguments donnés sont délimités par des espaces.CONFIG_PROTECT_MASKC'est simplement l'inverse de CONFIG_PROTECT, elle enlève la protection de certains fichiers dans /etc que vous voulez bien modifier automatiquement par emerge.
VariableFonction
Fonctionnement global

Bon, maintenant que j'ai tout défini, vous êtes probablement en train de vous demander ce que cela a a voir avec vous et votre Gentoo. La puissance de env.d réside dans le fait de pouvoir changer ces variables en ce dont vous avez besoin. Avec les définitions ci-dessus, vous devriez être capable de le faire.

Maintenant que nous avons un aperçu de ce qui se passe, il est temps d'expliquer ce qui arrive à ces variables. Quand env-update est appelé, il relie tous ces fichiers dans l'ordre. Vous vous souvenez quand je disais qu'il était possible d'avoir de multiples variables PATH si elles se trouvent dans des fichiers différents? Ceci est du au fait que env-update parcourt les fichiers séquentiellement et fusionne les chemins ensemble. Ainsi, si vous avez un PATH pour KDE, GNOME, votre PATH par défaut, et un autre pour X, env-update va concaténer tous ces PATH ensemble, si bien que votre PATH par défaut deviendra tous ces chemins combinés. Merveilleux n'est-ce pas ?

Maintenant que ces variables sont liées ensemble, il est important de noter où elles sont stockées.

Les fichiers ci-dessous sont créés par la commande env-update.
LDPATH ----> /etc/ld.so.conf 
CONFIG_PROTECT et CONFIG_PROTECT_MASK ----> /etc/profile.env (comme les variables exportées)
Speciales et Autres ----> /etc/profile.env 

Si vous regardez dans /etc/ld.so.conf, vous pouvez clairement voir que env.d est la source des informations qu'il contient.

# ld.so.conf autogenerated by env-update; make all changes to
# contents of /etc/env.d directory
/usr/local/lib
/usr/lib/gcc-lib/i686-pc-linux-gnu/3.2
/usr/lib/opengl/nvidia/lib
/usr/lib/mozilla
/usr/X11R6/lib
/opt/blackdown-jdk-1.3.1/jre/lib/i386/
/opt/blackdown-jdk-1.3.1/jre/lib/i386/native_threads/
/usr/qt/3/lib
/usr/qt/2/lib
/usr/kde/3/lib

IL est intéressant de savoir que/etc/profile.env est lu et exécuté par votre session shell. C'est une bonne chose; la prochaine fois que vous vous connecterez, vous pourrez utiliser toutes vos variables fraichement définies.

paramètres /etc/env.d  ---> env-update ---> /etc/profile.env ---> /etc/profile 
---> bash ---> tous vos programmes

Maintenant que vous avez un fichier profile.env il devrait ressembler à quelquechose comme ceci :

export CONFIG_PROTECT='/usr/kde/3/share/config /usr/share/config'
export KDEDIRS='/usr/kde/3:/usr'
export MANPATH='/usr/share/man:/usr/local/share/man:/usr/X11R6/man:/opt/blackdown-jdk-1
.3.1/man'
export INFODIR='/usr/share/info:/usr/X11R6/info'
export PATH='/usr/local/bin:/opt/bin:/opt/rar/bin:/usr/X11R6/bin:/opt/blackdown-jdk-1.3
.1/bin:/opt/blackdown-jdk-1.3.1/jre/bin:/usr/qt/3/bin:/usr/qt/2/bin:/usr/kde/3/bin'
export CONFIG_PROTECT_MASK='/etc/gconf'
export CLASSPATH='/opt/blackdown-jdk-1.3.1/jre/lib/rt.jar:.'
export ROOTPATH='/usr/local/bin:/opt/bin:/opt/rar:/usr/X11R6/bin:/opt/blackdown-jdk-1.3
.1/bin:/opt/blackdown-jdk-1.3.1/jre/bin:/usr/qt/3/bin:/usr/qt/2/bin:/usr/kde/3/bin'
export KDEDIR='/usr/kde/3'
export VIMRUNTIME='/usr/share/vim/vim61'
export JDK_HOME='/opt/blackdown-jdk-1.3.1'
export JAVAC='/opt/blackdown-jdk-1.3.1/bin/javac'
export PAGER='/usr/bin/less'
export HOSTNAME='l00ser.muc.edu'
export QMAKESPEC='linux-g++'
export LESSOPEN='|lesspipe.sh %s'
export CVS_RSH='ssh'
export EDITOR='/usr/bin/vim'
export QTDIR='/usr/qt/3'
export JAVA_HOME='/opt/blackdown-jdk-1.3.1'
export XINITRC='/etc/X11/xinit/xinitrc'
export MOZILLA_FIVE_HOME='/usr/lib/mozilla'

Voilà, c'est tout ce que j'avais à dire, alors amusez-vous bien et ne cassez pas tout!