Wie kann ich Umgebungsvariablen beim Booten speichern, bevor das eigentliche Dateisystem gemountet wurde?
Ich weiß, dass es eine gibt, /etc/environment
aber innerhalb von initramfs ist diese Datei noch nicht zugänglich. Ich habe auch daran gedacht, eine Datei zu schreiben, um den Wert zu speichern, aber wenn diese Datei auf dem System beendet wird, wird sie überschrieben, nachdem das echte Dateisystem gemountet wurde
Ps: Ich möchte die Variable nur für später speichern und nicht beim Booten lesen
NACH DER ANTWORT BEARBEITEN
Etwa :
- Erstellen Sie ein Kernelmodul (Hilfe finden SieHierUndDort) genanntmod.ko
- Stellen Sie sicher, dass das Modul während des Startvorgangs verwendet werden kann (indem Sie es mit initramfs-tools in das Kernel-Image einbinden oder im Dateisystem suchen).
- Fügen Sie Ihrem Skript die folgenden Zeilen hinzu
Wenn Sie das Modul nicht im Kernel-Image enthalten haben
insmod /path/to/mod.ko
Sonst direkt
echo "env_var=value" > /proc/name_of_your_process
wo name_of_your_process
ist der Name, der innerhalb __init
Ihres Moduls angegeben wird (wenn Sie dies tun entry = proc_create("name_of_your_process",0777,NULL,&my_fops);
)
Dann später beim Startvorgang in einem Skript
cat /proc/name_of_your_process
>> env_var=value
rmmod mod.ko
Antwort1
Nun, normale Umgebungsvererbung (einfach exportieren ...) würde theoretisch funktionieren, aber ... das Problem ist, was auch immer Ihreinitramfswird wahrscheinlich absichtlich die Umgebung bereinigt, da dies normalerweise getan wird, um sicherzustellen, dass nichts Ungewöhnliches passiert. Umgebungsvariablen unkontrolliert zu lassen, kann ein Sicherheitsrisiko darstellen.
Ich weiß, dass es das gibt,
/etc/environment
aber innerhalb von Initramfs ist die Datei noch nicht zugänglich.
Der lustige Teil überinitramfsist, dass Sie tun können, was Sie wollen. Die einzige Einschränkung ist Ihre Vorstellungskraft.
Sie können die Datei vollständig zugänglich machen. Mounten, ändern, umounten. Oder wenn Sie ein traditionelles Dateisystem verwenden - ohne Prüfsummen - können Sie es sogar ändernohneirgendetwas mounten (oder zumindest nicht im Lese-/Schreibmodus). Derselbe Trick, den GRUB für verwendet grubenv
.
Wenn Sie das Dateisystem oder den physischen Speicher im Allgemeinen nicht beschädigen möchten, können Sie eine RAM-Disk, ein TMPFS oder ein Loop-Gerät oder ... einrichten. Es gibt unzählige Möglichkeiten, wie Initramfs etwas zurücklassen kann (normalerweise müssen Sie sich die Mühe machen, es zu bereinigen).
Antwort2
Wenn initramfs alle ausgeführten Dateien bereinigtswitch_rootDadurch werden alle Dateien AUSSER den Ordnern /proc, /dev, /sys und /run gelöscht. Es ist möglicherweise möglich, in einem dieser Ordner eine spezielle Datei zu erstellen, aber dazu ist ein Trick erforderlich.
Sehen:Ist es möglich, ein Verzeichnis und eine Datei innerhalb von /proc/sys zu erstellen?
Die einfachste Möglichkeit besteht natürlich darin, einfach ein Skript hinzuzufügen, das die Variable in das Dateisystem schreibt, nachdem das Root-Dateisystem geladen wurde, aber bevor init ausgeführt wird. Dies würde in das "lokaler-boden"-Ordner. Gibt es einen Grund, warum Sie dies nicht tun können?
Antwort3
Es ist ganz einfach. Sehen Sie sich fstab an. Mounten Sie dann das Root-Gerät und schreiben Sie Ihre Variable in eine Datei auf dem gemounteten Root-Gerät. Ich habe das von kdump gelernt.