¿Cuál es el mejor lugar para configurar variables de entorno de todo el sistema en Linux?

26

Solo quiero configurar una variable de entorno de todo el sistema, JAVA_HOMEpara todos los usuarios, incluido el usuario root .

Requisitos:

  • accesible para usuarios normales
  • accesible para root
  • siempre cargado, no solo para bash (gnome-terminal no inicia un bash por defecto)
  • para trabajar en Ubuntu, Debian y opcionalmente Red Hat
  • genial si la adición se pudiera escribir fácilmente
Sorin
fuente
Para ver shells interactivos, consulte este tema de ubuntu .
quickshiftin

Respuestas:

26

Como nadie agregó una respuesta completa, aquí es lo que considero mejor actualmente, al menos para ubuntu, pero estoy dispuesto a adaptar la respuesta para otras plataformas * nix.

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

Otras opciones que ya fueron consideradas pero descartadas:

  • /etc/environment funciona pero es más difícil de mantener ya que otras herramientas o personas pueden editarlo.
  • /etc/profile - lo mismo que arriba
Sorin
fuente
11

En Debian / Ubuntu eso sería / etc / environment

No sé el equivalente de Red Hat.

objetivado
fuente
1
Creo que / etc / environment está en desuso
Pat James
@ PatJames, ¿tienes más información sobre esto? Intenté / etc / environment no se carga para root incluso después de reiniciar la máquina.
Sorin
@SorinSbarnea hay información aquí: wiki.debian.org/Locale que indica / etc / environment ya no se usa en versiones más recientes
Pat James el
1
Esa página solo dice que no deberías ubicar variables relacionadas /etc/environment. Consulte también serverfault.com/a/584072/26218
Flujo el
11

No entiendo por qué descartó / etc / profile. Esa es la ubicación correcta.

dmourati
fuente
9

Algunos han respondido diciendo que /etc/environmentestá depurada y / o que ya no se usa en Debian, y esto es (como en la versión 7) falso.

El archivo es realmente leído por PAM, específicamente pam_env(8), a través de un envfileindicador predeterminado . La página de manual también establece este valor predeterminado en la sección ARCHIVOS.

Los wikis citados (especialmente el de configuración regional) simplemente afirman que las variables de entorno basadas en la configuración regional ahora deben estar /etc/profile. Su declaración "(en versiones anteriores de Debian, también / etc / environment)" es vaga y está en el contexto de las configuraciones regionales.

Un vistazo rápido /etc/pam.dmuestra:

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

Esas líneas de configuración son aditivas y, como falta la primera envfile, su valor predeterminado es /etc/environment.

Todo esto, por supuesto, se basa en cualquier binario que esté utilizando ( crond, shells de inicio de sesión, etc.) se compila contra PAM.

Finalmente, esto implica que otros sistemas que usan PAM (por ejemplo, RedHat), se comportan igual, como se puede ver en su respectiva página de manual.

lingfish
fuente
2

Una nota al margen: Eche un vistazo al entorno de módulos . Lo uso cada vez que tengo que ofrecer un entorno UNIX complejo, versionado, autoextensible y conciso a docenas o cientos de usuarios. Se utiliza principalmente en entornos HPC multiusuario a gran escala. Solo usarlo para una variable en particular sin duda es una ingeniería excesiva, pero hace un trabajo increíble una vez que necesita más que unos pocos paquetes de software y su entorno.

pfo
fuente
1

/etc/profileDeberia trabajar. Probé este momento para estar seguro, puesto export SOMETEST=1234que /etc/profiley después de re-registro echo $SOMETESTme dio 1234como se esperaba. También degnome-terminal

wk.
fuente
0

No puede usar ningún ~ archivo específico en este caso. asi que....

/etc/profilesería el lugar adecuado para ello en este caso. Sin embargo, los usuarios que han iniciado sesión actualmente deben obtener una nueva sesión de inicio de sesión, pero esto no debería ser un gran problema.

@ wk01: /etc/profileno se carga de forma predeterminada por un shell que no es de inicio de sesión. tu .bashrc es, probablemente, lo carga ...

mober
fuente