Variable aus initramfs speichern (beim Booten)

Variable aus initramfs speichern (beim Booten)

Wie kann ich Umgebungsvariablen beim Booten speichern, bevor das eigentliche Dateisystem gemountet wurde?

Ich weiß, dass es eine gibt, /etc/environmentaber 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_processist der Name, der innerhalb __initIhres 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/environmentaber 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.

verwandte Informationen