Wie lege ich beim Booten eine Umgebungsvariable fest (über ein Skript)?

Wie lege ich beim Booten eine Umgebungsvariable fest (über ein Skript)?

Ich möchte auf einem Ubuntu-Rechner (10.04) ein paar Umgebungsvariablen festlegen (beim Booten), ihren Wert aber über ein Skript erstellen, etwa so:

export THE_ENV_VAR=$(script_to_execute_and_use_stdout_from)
  • Der Grund, warum ich das tun möchte, ist, dass die Ausführung der Befehle zum Festlegen der Umgebungsvariablen lange dauert (ca. 10 Sekunden). Deshalb möchte ich es nur einmal nach dem Booten tun. Wie dem auch sei, derzeit habe ich das Problem gelöst, indem ich das Ergebnis des Befehls beim Booten zwischenspeichere, sodass nachfolgende Aufrufe schnell ausgeführt werden und somit überhaupt keine Umgebungsvariablen verwendet werden.

Ich habe versucht, es einzustellen /etc/environment, aber das kopiert nur rhs wörtlich

Ich habe versucht, /etc/init.d/beim Start ein Skript auszuführen, aber das scheint nicht zu funktionieren.

Ideen?

Antwort1

Um systemweite Umgebungsvariablen festzulegen, die beim Booten verfügbar sind, platzieren Sie sie in /etc/environment. Diese Datei ist keine Skriptdatei, sondern besteht aus Zuweisungsausdrücken, einem pro Zeile. So:

SYSTEM_FOO=barnone

Notiz: Variablenerweiterung funktioniert in /etc/environment nicht.

Originalinformationen vonHilfe.ubuntu.com

Antwort2

Setzen Sie das ein ~/.bash_profileoder~/.bashrc

gedit ~/.bashrc

Verwenden Sie .bash_profile, wenn Sie diese Variablen mit nicht interaktiven Shells (Skripten) verwenden müssen, und ~/.bashrc, wenn Sie Ihre Variablen in einer Shell festlegen.

Wenn das nicht funktioniert, benötigen wir weitere Details, insbesondere welche Variablen Sie setzen und zu welchem ​​Zweck?

Antwort3

Obwohl dies wahrscheinlich keine gute Vorgehensweise ist, können Sie Umgebungsvariablen als Kernelparameter angeben. Der Linux-KernelDokumentationenthält einige gute Informationen (wichtiger Absatz fett gedruckt):

Die Argumentliste

Die Kernel-Befehlszeile wird in eine Liste von Zeichenfolgen (Boot-Argumente) zerlegt, die durch Leerzeichen getrennt sind. Die meisten Boot-Argumente haben die Form:

 name[=value_1][,value_2]...[,value_10]

wobei „Name“ ein eindeutiges Schlüsselwort ist, das verwendet wird, um zu identifizieren, an welchen Teil des Kernels die zugehörigen Werte (sofern vorhanden) übergeben werden sollen. Beachten Sie, dass die Grenze von 10 real ist, da der vorliegende Code nur 10 durch Kommas getrennte Parameter pro Schlüsselwort verarbeitet. (Sie können jedoch dasselbe Schlüsselwort in ungewöhnlich komplizierten Situationen mit bis zu 10 zusätzlichen Parametern wiederverwenden, vorausgesetzt, die Setup-Funktion unterstützt dies.)

Der Großteil der Sortierung ist in der Kernel-Quelldatei init/main.c codiert. Zunächst prüft der Kernel, ob das Argument eines der Sonderargumente „root=“, „nfsroot=“, „nfsaddrs=“, „ro“, „rw“, „debug“ oder „init“ ist. Die Bedeutung dieser Sonderargumente wird weiter unten beschrieben.

Anschließend durchläuft es eine Liste von Setup-Funktionen, um zu prüfen, ob die angegebene Argumentzeichenfolge (z. B. „foo“) einer Setup-Funktion („foo_setup()“) für ein bestimmtes Gerät oder einen Teil des Kernels zugeordnet wurde. Wenn Sie dem Kernel die Zeile foo=3,4,5,6 übergeben, durchsucht der Kernel das Bootstups-Array, um zu prüfen, ob „foo“ registriert wurde. Wenn dies der Fall ist, ruft er die mit „foo“ verknüpfte Setup-Funktion (foo_setup()) auf und übergibt ihr die Argumente 3, 4, 5 und 6, wie sie in der Kernel-Befehlszeile angegeben sind.

Alles in der Form „foo=bar“, das nicht wie oben beschrieben als Setup-Funktion akzeptiert wird, wird dann als festzulegende Umgebungsvariable interpretiert.
Ein (nutzloses?) Beispiel wäre die Verwendung von „TERM=vt100“ als Boot-Argument.

Alle verbleibenden Argumente, die nicht vom Kernel übernommen und nicht als Umgebungsvariablen interpretiert wurden, werden dann an PID 1 weitergegeben, was normalerweise das init(1)-Programm ist. Das am häufigsten an den Init-Prozess weitergegebene Argument ist das Wort „single“, das ihn anweist, den Computer im Einzelbenutzermodus zu booten und nicht alle üblichen Daemons zu starten. Überprüfen Sie die Manualpage der auf Ihrem System installierten init(1)-Version, um zu sehen, welche Argumente akzeptiert werden.

DasDie Antwort von AskUbuntu enthält einige gute Anweisungen zum Ändern Ihrer Kernel-Boot-Parameter.

Antwort4

Geben Sie Ihre Befehle in ein /etc/rc.local. Lesen Sie unbedingt die Kommentare am Anfang.

verwandte Informationen