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

26

Je veux juste configurer une variable d'environnement système, JAVA_HOMEpour tous les utilisateurs, y compris l' utilisateur root .

Exigences:

  • accessible aux utilisateurs normaux
  • accessible à la racine
  • toujours chargé, pas seulement pour bash (gnome-terminal ne démarre pas un bash par défaut)
  • travailler sur Ubuntu, Debian et éventuellement Red Hat
  • super si addition peut être facilement scripté
sorin
la source
Pour les shells interactifs, cochez cette option: demandez à Ubuntu thread.
quickshiftin

Réponses:

26

Comme personne n’a ajouté une réponse complète, voici ce que je considère actuellement comme le meilleur, du moins pour Ubuntu, mais je suis ouvert à l’adapter pour d’autres plates-formes * nix.

# **create**: /etc/profile.d/java.sh
export JAVA_HOME=/usr/lib/jvm/default-java

Autres options déjà envisagées mais exclues:

  • /etc/environment fonctionne mais est plus difficile à maintenir car d’autres outils ou personnes peuvent l’éditer.
  • /etc/profile - comme ci-dessus
sorin
la source
11

Sur Debian / Ubuntu, ce serait / etc / environment

Je ne connais pas l'équivalent Red Hat.

objectivé
la source
1
Je crois que / etc / environment est obsolète
Pat James
@PatJames avez-vous plus d'informations à ce sujet? J'ai essayé / etc / environment n'est pas chargé pour root même après avoir redémarré la machine.
sorin
@SorinSbarnea quelques informations sont ici: wiki.debian.org/Locale indiquant que / etc / environment n'est plus utilisé dans les nouvelles versions
Pat James
1
Cette page indique seulement que vous ne devriez pas, mais les variables liées aux paramètres régionaux dans /etc/environment. Voir aussi serverfault.com/a/584072/26218
Flow
11

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

dmourati
la source
9

Quelques-uns ont répondu en disant que cela /etc/environmentest privé et / ou qu'ils ne sont plus utilisés dans Debian, ce qui est faux (à partir de la version 7).

Le fichier est en fait lu par PAM - en particulier pam_env(8), via un envfileindicateur par défaut . La page de manuel indique également cette valeur par défaut dans la section FILES.

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

Un rapide grep à travers les /etc/pam.dspectacles:

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 est manquante envfile, sa valeur par défaut est donc /etc/environment.

Bien entendu, tout cela dépend du binaire que vous utilisez ( crondcompiles de connexion, etc.) qui 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 le montre la page de manuel correspondante.

la lingue
la source
2

Une note de côté: Jetez un coup d'œil à l' environnement des modules . J'utilise cette solution 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 fait de l’utiliser pour une variable particulière est certes un travail d’ingénierie excessif, mais c’est un travail formidable lorsque vous avez besoin de plus que quelques progiciels et leur environnement.

pfo
la source
1

/etc/profiledevrait marcher. J'ai testé tout à l'heure pour être sûr, mis export SOMETEST=1234à /etc/profileet après la réenregistrement echo $SOMETESTm'a donné 1234comme prévu. Aussi degnome-terminal

semaine
la source
0

Vous ne pouvez utiliser aucun fichier spécifique dans ce cas. alors....

/etc/profileserait l'endroit approprié pour cela dans ce cas. Les utilisateurs actuellement connectés doivent obtenir une nouvelle session de connexion, mais cela ne devrait pas être un gros problème.

@ wk01: /etc/profilen'est pas chargé par un shell autre que la connexion. vous .bashrc êtes probablement en train de le charger ...

Mober
la source