web-dev-qa-db-fra.com

Quel est le meilleur endroit pour configurer des variables d'environnement à l'échelle du système sous Linux?

Je veux simplement configurer une variable d'environnement à l'échelle du système, Java_HOME pour tous les utilisateurs, y compris root utilisateur.

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 travailler sur Ubuntu, Debian et éventuellement Red Hat
  • super si l'ajout peut être facilement écrit
26
sorin

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

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

Autres considérations exclues:

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

Sur Debian/Ubuntu, ce serait / etc/environment

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

12
objectified

Je ne comprends pas pourquoi vous avez exclu/etc/profile. C'est le bon endroit.

11
dmourati

Quelques-uns ont répondu en disant que /etc/environment Est déprécié et/ou n'est plus utilisé dans Debian, et c'est (comme à la version 7) faux.

Le fichier est en fait lu par PAM - en particulier, pam_env(8), par défaut au drapeau envfile. La page de manuel indique également cette valeur par défaut dans la section FICHIERS.

Les wikis cités (en particulier celui des paramètres régionaux) indiquent simplement que les variables d'environnement basées sur les paramètres régionaux sont désormais censées être dans /etc/profile. Leur déclaration "(dans les anciennes versions de Debian, également/etc/environment)" est vague et se situe dans le contexte des locales.

Un rapide rappel à travers /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 additives, et comme la première manque envfile, elle est donc par défaut /etc/environment.

Tout cela, bien sûr, dépend du binaire que vous utilisez (crond, shells de connexion, etc.) sont compilés 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 sa page de manuel respective.

9
lingfish

Une note latérale: Jetez un œil à Modules Environment . Je l'utilise chaque fois que je dois proposer un environnement UNIX complexe, versionné, auto-extensible et concis à des dizaines ou des centaines d'utilisateurs. Il est principalement utilisé dans les environnements HPC multi-utilisateurs à grande échelle. Le simple fait de l'utiliser pour une variable particulière est certainement une ingénierie excessive, mais il fait un travail formidable une fois que vous avez besoin de plus de quelques progiciels et de leur environnement.

2
pfo

/etc/enviroment n'est pas utilisé dans la dernière version stable de Debian. La recommandation est de créer votre propre *.sh fichier dans /etc/profile.d/ pour ce porpuose comme le dit Sorin S. Voir https://wiki.debian.org/EnvironmentVariables

1
cape

/etc/profile devrait marcher. Je viens de tester pour être sûr, mettez export SOMETEST=1234 à /etc/profile et après reconnexion echo $SOMETEST m'a donné 1234 comme prévu. Aussi de gnome-terminal

1
wk.

Vous ne pouvez pas utiliser de fichiers ~ spécifiques dans ce cas. donc....

/etc/profile serait le bon endroit dans ce cas. Les utilisateurs actuellement connectés doivent cependant obtenir une nouvelle session de connexion, mais cela ne devrait pas être un gros problème.

@ wk01: /etc/profile n'est pas chargé par un shell non connecté par défaut. votre .bashrc le charge probablement ...

0
mober