Kernel-commandline Environment-Variablen mitgeben

Welches Modul/Treiber für welche Hardware, Kernel compilieren...
Antworten
scientific
Beiträge: 3022
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

Kernel-commandline Environment-Variablen mitgeben

Beitrag von scientific » 19.11.2014 22:04:04

Hi!

Ich bin auf der Suche nach einer Möglichkeit, dem Kernel in der Commanline in Grub eine Variable mitzugeben, die später dazu benutzt wird, in /etc/fstab entsprechend dieser Variable bestimmte btrfs-Subvolumes zu mounten.

Konkret hab ich ein Script geschrieben (und wenn es fertig ist, kommt es natürlich hier ins Forum!!!), welches mir regelmäßig btrfs-Snapshots meines Systems anlegt. Zum aktuellen und zum letzten Snapshot gibt es je einen Symlink
@debian.CURRENT
@debian.LAST

Das heißt, ich möchte gerne CURRENT oder LAST (oder den Datumsstring) über je eine Custom-Zeile in Grub dem Kernel zum booten mitgeben, damit in der /etc/fstab später die korrekten Subvolumes gemountet werden.

Code: Alles auswählen

/dev/sda2   /home    btrfs     defaults,subvol=@home.$BOOTSNAPSHOT    0 0
So hab ich mir das vorgestellt. Wobei $BOOTSNAPSHOT eben CURRENT, LAST oder der Datumsstring ist.

Leider funktioniert das nicht. Die Variable taucht im Environment nicht auf.

Lt. http://man7.org/linux/man-pages/man7/bootparam.7.html im 5. Absatz sollte das aber funktionieren.

Wie macht man das richtig?

lg scientific
dann putze ich hier mal nur...

Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie

auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main

cosmac
Beiträge: 4576
Registriert: 28.03.2005 22:24:30

Re: Kernel-commandline Environment-Variablen mitgeben

Beitrag von cosmac » 19.11.2014 22:21:16

hi,

in deinem Script kannst du die Datei /proc/cmdline auslesen. So bekommst du die komplette Kernel-Zeile, die musst du "nur" noch zerlegen...

Das Environment wird von init erzeugt, da müsste deine Variable durchgereicht werden. Evt. kennt init eine Option für den Zweck.
Beware of programmers who carry screwdrivers.

scientific
Beiträge: 3022
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

Re: Kernel-commandline Environment-Variablen mitgeben

Beitrag von scientific » 19.11.2014 22:27:46

Ich hab mich offenbar unklar ausgedrückt... :)
cosmac hat geschrieben:hi,

in deinem Script kannst du die Datei /proc/cmdline auslesen. So bekommst du die komplette Kernel-Zeile, die musst du "nur" noch zerlegen...
Ich will ja nicht die Kernelzeile auslesen, sondern ich möchte bewusst über Grub dem Kernel eine Variable mitgeben, die später zum Environment wird.
Und DIESE Variable soll dann in der /etc/fstab die korrekten Snapshots mounten lassen... Was in der Kernelzeile steht, weiß ich als Mensch ja, aber mein Computer, speziell der Teil des Bootprozesses, der die fstab einliest, weiß das nicht. Der sollte das aber wissen.
cosmac hat geschrieben: Das Environment wird von init erzeugt, da müsste deine Variable durchgereicht werden. Evt. kennt init eine Option für den Zweck.
Mein init ist systemd. Wie bringe ich dem das bei?

Und ist es überhaupt möglich, in der /etc/fstab Variablen zu verwenden??
dann putze ich hier mal nur...

Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie

auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main

scientific
Beiträge: 3022
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

Re: Kernel-commandline Environment-Variablen mitgeben

Beitrag von scientific » 19.11.2014 22:40:52

Hab zumindest einmal etwas herausgefunden, dass im environ von Prozess 1 (also systemd) die Variable angekommen ist.
Jetzt ist nur die Frage, wie ich die an einen Prozess weitergeben kann... (Und warum die Variablen hier ohne Abstand aneinanderkleben...)

Code: Alles auswählen

# cat /proc/1/environ 
SHLVL=1HOME=/init=/sbin/initTERM=linuxdrop_caps=BOOT_IMAGE=/@debian/boot/vmlinuz-3.16-3-amd64PATH=/sbin:/usr/sbin:/bin:/usr/binPWD=/rootmnt=/rootBOOTSNAPSHOT=@debian-jessie
[EDIT]
Ich kann systemd Environment-Variablen mitgeben, wenn ich in Grub eine Kerneloption mit

Code: Alles auswählen

systemd.setenv=BOOTSNAPSHOT=@debian-jessie
einfüge.
Ich habe probehalber in die Datei /etc/rc.local folgende Zeile eingefügt:

Code: Alles auswählen

echo "BSN $BOOTSNAPSHOT" > /bootparam
Und in dieser Datei steht dann tatsächlich
BSN @debian-jessie
drin. So wie in der Kernelzeile
(update-grub nicht vergessen!!!!)

In der Datei /etc/fstab wird das allerdings immer noch ignoriert. Ich denke, da muss ich mich damit beschäftigen, wie ich die zum Bootzeitpunkt dynamisch erzeugen kann... Ideen?

[EDIT]
Hier noch ein Ansatzpunkt für Grub2, hab ich grad gefunden
http://osdir.com/ml/grub-devel-gnu/2013 ... 00328.html
lg scientific
dann putze ich hier mal nur...

Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie

auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main

Antworten