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


26

Ich möchte nur eine systemweite Umgebungsvariable JAVA_HOMEfür alle Benutzer einrichten , einschließlich des Root- Benutzers.

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)
  • auf Ubuntu, Debian und optional Red Hat zu arbeiten
  • großartig, wenn das Hinzufügen einfach per Skript erfolgen könnte

Für interaktive Shells überprüfen Sie diesen Frage-Ubuntu- Thread.
Quickshiftin

Antworten:


26

Da hier niemand eine vollständige Antwort hinzugefügt hat, halte ich dies derzeit für das Beste, zumindest für Ubuntu. Ich bin jedoch 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 in Betracht gezogen, aber ausgeschlossen wurden:

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

11

Unter Debian / Ubuntu wäre das / etc / environment

Ich kenne das Red Hat-Äquivalent nicht.


1
Ich glaube, / etc / environment ist veraltet
Pat James

@PatJames Haben Sie weitere Informationen zu diesem Thema? Ich habe versucht, / etc / environment wird für root nicht geladen, auch nachdem ich den Computer neu gestartet habe.
Sorin

@SorinSbarnea Einige Informationen finden Sie hier: wiki.debian.org/Locale angibt, dass / etc / environment in neueren Releases nicht mehr verwendet wird
Pat James

1
Auf dieser Seite heißt es nur, dass Sie keine Variablen für das Gebietsschema verwenden sollten /etc/environment. Siehe auch serverfault.com/a/584072/26218
Flow

11

Ich verstehe nicht, warum Sie / etc / profile ausgeschlossen haben. Das ist der richtige Ort.


9

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

Die Datei wird tatsächlich von PAM-spezifisch pam_env(8)über eine Voreinstellung des envfileFlags gelesen . Die Manpage gibt diese Standardeinstellung auch im Abschnitt FILES an.

In den angeführten Wikis (insbesondere in der Ländereinstellung) wird lediglich angegeben, dass die auf der Ländereinstellung basierenden Umgebungsvariablen jetzt verwendet werden sollen /etc/profile. Ihre Aussage "(in älteren Debian-Versionen auch / etc / environment)" ist vage und steht im Zusammenhang mit Gebietsschemata.

Ein kurzer Blick durch die /etc/pam.dShows:

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 da die erste fehlt envfile, ist sie standardmäßig auf gesetzt /etc/environment.

All dies setzt natürlich voraus, dass die von Ihnen verwendeten Binärdateien ( crondLogin-Shells usw.) gegen PAM kompiliert werden.

Letztendlich impliziert dies, dass andere Systeme, die PAM verwenden (z. B. RedHat), sich gleich verhalten, wie in der jeweiligen Manpage zu sehen ist.


2

Eine Randnotiz: Schauen Sie sich die Modulumgebung an . Ich benutze dies jedes Mal, wenn ich Dutzenden oder Hunderten von Benutzern eine komplexe, versionierte, selbst erweiterbare, übersichtliche UNIX-Umgebung anbieten muss. Es wird hauptsächlich in HPC-Umgebungen mit mehreren Benutzern in großem Maßstab verwendet. Wenn Sie es nur für eine bestimmte Variable verwenden, wird es sicherlich überentwickelt, aber wenn Sie mehr als ein paar Softwarepakete und deren Umgebung benötigen, ist es eine großartige Arbeit.


1

/etc/profilesollte arbeiten. Getestet habe ich jetzt nur um sicher zu sein, setzen Sie export SOMETEST=1234auf /etc/profileund nach dem Wieder Protokollierung echo $SOMETESTgab mir 1234wie erwartet. Auch ausgnome-terminal



0

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

/etc/profilewäre in diesem Fall der richtige Ort dafür. Derzeit angemeldete Benutzer müssen zwar eine neue Anmeldesitzung erhalten, dies sollte jedoch kein so großes Problem darstellen.

@ wk01: /etc/profilewird standardmäßig nicht von einer nicht angemeldeten Shell geladen. Sie .bashrc laden es wahrscheinlich ...

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.