Frage Was ist der beste Ort, um systemweite Umgebungsvariablen unter Linux einzurichten?


Ich möchte nur eine systemweite Umgebungsvariable einrichten, JAVA_HOME zum alle Benutzer, einschließlich root Nutzer.

Bedarf:

  • für normale Benutzer zugänglich
  • zugänglich für root
  • immer geladen, nicht nur für bash (gnome-terminal startet standardmäßig keine bash)
  • um an Ubuntu, Debian und optional Red Hat zu arbeiten
  • Großartig, wenn der Zusatz einfach geschrieben werden könnte

21
2018-03-30 13:18


Ursprung


Für interaktive Shells überprüfen Sie dies frage Ubuntu herausfädeln. - quickshiftin


Antworten:


Da niemand eine vollständige Antwort hier hinzugefügt hat, ist das, was ich derzeit für das beste halte, zumindest für ubuntu, aber ich bin offen, die Antwort für andere * nix-Plattformen anzupassen.

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

Andere Optionen, die bereits berücksichtigt, aber ausgeschlossen wurden:

  • /etc/environment funktioniert, ist aber schwieriger zu warten, da andere Tools oder Leute es bearbeiten können.
  • /etc/profile - das gleiche wie oben

25
2018-03-30 16:48





Ich verstehe nicht, warum du / etc / profile ausgeschlossen hast. Das ist der richtige Ort.


11
2018-03-30 13:32





Unter Debian / Ubuntu wäre das so / etc / Umgebung

Ich kenne das Red Hat-Äquivalent nicht.


10
2018-03-24 06:49



Ich glaube, / etc / environment ist veraltet - Pat James
@PatJames hast du mehr Infos dazu? Ich habe versucht, / etc / environment ist nicht für root geladen, auch nachdem ich den Rechner neu gestartet. - sorin
@SorinSbarnea einige Infos gibt es hier: wiki.debian.org/Locale Die Angabe von / etc / environment wird in neueren Versionen nicht mehr verwendet - Pat James
Diese Seite sagt nur, dass Sie nicht sollten, aber locale related Variablen in /etc/environment. Siehe auch serverfault.com/a/584072/26218 - Flow


Einige haben dies geantwortet /etc/environment wird in Debian entzogen und / oder nicht mehr verwendet, und dies ist (wie in Version 7) falsch.

Die Datei wird tatsächlich von PAM gelesen - pam_env(8), über einen Standard auf die envfile Flagge. Auf der Hilfeseite wird dieser Standard auch im Abschnitt FILES angegeben.

Die zitierten Wikis (insbesondere das Gebietsschema) geben lediglich an, dass Gebietsschema-basierte Umgebungsvariablen nun gemeint sind /etc/profile. Ihre Aussage "(in älteren Versionen von Debian, auch / etc / environment)" ist vage und steht im Zusammenhang mit Gebietsschemata.

Ein schneller Grep durch /etc/pam.d zeigt an:

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

Diese Konfigurationszeilen sind additiv, und die erste fehlt envfile, so ist es standardmäßig /etc/environment.

All das hängt natürlich davon ab, welche Binärdatei Sie verwenden (crond, Login-Shells usw.) werden gegen PAM kompiliert.

Dies impliziert schließlich, dass andere Systeme, die PAM verwenden (z. B. RedHat), sich genauso verhalten, wie auf der jeweiligen Manpage zu sehen ist.


8
2018-03-30 15:13





Eine Nebenbemerkung: Schauen Sie sich die Module Umwelt. Ich benutze es jedes Mal, wenn ich Dutzenden oder Hunderten von Benutzern eine komplexe, versionierte, selbst erweiterbare und prägnante UNIX-Umgebung anbieten muss. Es wird hauptsächlich in großen Multi-User-HPC-Umgebungen verwendet. Wenn Sie es nur für eine bestimmte Variable verwenden, überstülpen Sie es sicherlich, aber es macht einen tollen Job, wenn Sie mehr als ein paar Softwarepakete und deren Umgebung benötigen.


2
2018-03-30 13:32





/etc/profile sollte arbeiten. Ich habe gerade getestet, um sicher zu sein, legte export SOMETEST=1234 zu /etc/profile und nach der Neuanmeldung echo $SOMETEST gab mir 1234 wie erwartet. Auch von gnome-terminal


1
2017-12-15 18:47





/etc/enviroment wird in der letzten stabilen debian-Version nicht verwendet. Die Empfehlung ist, erstellen Sie Ihre eigenen *.sh Datei in /etc/profile.d/ für dieses porpuose, wie Sorin S sagt. Sehen https://wiki.debian.org/UmweltVariablen


1
2018-03-30 13:32





Sie können in diesem Fall keine ~ spezifischen Dateien verwenden. so....

/etc/profile wäre in diesem Fall der richtige Ort dafür. Aktuell eingeloggte Benutzer müssen zwar eine neue Login-Sitzung erhalten, dies sollte jedoch kein großes Problem darstellen.

@ wk01: /etc/profile wird standardmäßig nicht von einer Nicht-Login-Shell geladen. Ihre .bashrc  lädt es wahrscheinlich ...


0