37 votes

Quel est le meilleur endroit pour configurer les variables d'environnement système sur Linux?

Je veux simplement configurer une variable d'environnement globale système, JAVA_HOME pour tous les utilisateurs, y compris l'utilisateur root.

Exigences :

  • accessible aux utilisateurs normaux
  • accessible à root
  • toujours chargé, pas seulement pour bash (gnome-terminal ne démarre pas un bash par défaut)
  • pour fonctionner sur Ubuntu, Debian et éventuellement Red Hat
  • ce serait super si l'ajout pouvait être facilement scripté

36voto

user712092 Points 351

Pour Ubuntu, et éventuellement d'autres plates-formes *nix, ajoutez un nouveau script dans /etc/profile.d nommé java.sh, par exemple :

echo "export JAVA_HOME=/usr/lib/jvm/default-java" > /etc/profile.d/java.sh

D'autres considérations qui ont été écartées :

  • /etc/environment - fonctionne mais est plus difficile à maintenir en utilisant d'autres outils (ou les gens le modifieront) ; et
  • /etc/profile - les mêmes inconvénients que /etc/environment

13voto

objectified Points 424

Sur Debian/Ubuntu, il s'agit de /etc/environment

Je ne connais pas l'équivalent pour Red Hat.

12voto

dmourati Points 24230

Je ne comprends pas pourquoi vous avez exclu /etc/profile. C'est l'emplacement correct.

12voto

lingfish Points 211

Quelques-uns ont répondu en disant que /etc/environment est obsolète et/ou n'est plus utilisé dans Debian, ce qui est faux (version 7).

En fait, le fichier est lu par PAM - spécifiquement, pam_env(8), via un paramètre par défaut de drapeau envfile. La page de manuel mentionne également ce paramètre par défaut dans la section FICHIERS.

Les wikis cités (en particulier celui de la locale) indiquent simplement que les variables d'environnement basées sur la locale doivent désormais être dans /etc/profile. Leur mention "(dans les anciennes versions de Debian, également /etc/environment)" est vague et concerne les locales.

Une recherche rapide dans /etc/pam.d montre:

root@box:/etc/pam.d# grep pam_env.so *
atd:auth        required        pam_env.so
cron:session       required   pam_env.so
cron:session       required   pam_env.so envfile=/etc/default/locale
login:session       required   pam_env.so readenv=1
login:session       required   pam_env.so readenv=1 envfile=/etc/default/locale
sshd:auth       required     pam_env.so # [1]
sshd:auth       required     pam_env.so envfile=/etc/default/locale
su:session       required   pam_env.so readenv=1
su:session       required   pam_env.so readenv=1 envfile=/etc/default/locale

Ces lignes de configuration sont cumulatives et comme la première ne comporte pas de envfile, elle utilise par défaut /etc/environment.

Tout cela dépend bien sûr du binaire que vous utilisez (crond, shells de connexion, etc.) qui est compilé avec PAM.

Enfin, cela implique que d'autres systèmes utilisant PAM (par exemple RedHat) se comportent de la même manière, comme on peut le voir dans la page de manuel respective.

3voto

TH310 Points 46

Du côté des remarques : Jetez un coup d'œil à l'Environnement Modules. Je l'utilise à chaque fois que je dois proposer un environnement UNIX complexe, versionné, auto-extensible et concis à des dizaines voire des centaines d'utilisateurs. Il est principalement utilisé dans les environnements HPC multi-utilisateurs à grande échelle. Le simple fait de l'utiliser pour une seule variable particulière est certainement une sur-ingénierie, mais il fait un excellent travail une fois que vous avez besoin de plus que quelques paquets logiciels et leur environnement.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X