diff options
| author | torben | 2015-02-26 03:24:14 +0100 |
|---|---|---|
| committer | torben | 2015-02-26 03:24:14 +0100 |
| commit | 3c6c882d75e6315da1d47bf7b0304f04270eec3f (patch) | |
| tree | 204522a5cfd7b39d5f5b9762188543d20ac3340c | |
| parent | Adding readme file. (diff) | |
| download | systemd-init-3c6c882d75e6315da1d47bf7b0304f04270eec3f.tar.gz systemd-init-3c6c882d75e6315da1d47bf7b0304f04270eec3f.tar.xz systemd-init-3c6c882d75e6315da1d47bf7b0304f04270eec3f.zip | |
Improve documentation.
| -rw-r--r-- | readme.md | 139 |
1 files changed, 117 insertions, 22 deletions
@@ -1,5 +1,9 @@ h1. Evaluation, dissection and modification of Linux remote boot +h2. Inhalt + +{{toc}} + h2. Begriffe * qcow - qemu copy-on-write @@ -88,21 +92,21 @@ Erstellen eines Testboot Eintrags für Grub2: > - Füge in ??/etc/grub.d/40_custom?? den folgenden Inhalt hinzu: <pre> - menuentry 'Test' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-123.el7.x86_64-advanced-6c06919a-389a-4a50-8c6b-b086e65db9b0' { - load_video - set gfxpayload=keep - insmod gzio - insmod part_msdos - insmod xfs - set root='hd0,msdos1' - if [ x$feature_platform_search_hint = xy ]; then - search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 --hint='hd0,msdos1' 4236333a-a808-4f6b-b4a6-d963f4a69a25 - else - search --no-floppy --fs-uuid --set=root 4236333a-a808-4f6b-b4a6-d963f4a69a25 - fi - linux16 /vmlinuz-3.10.0-123.20.1.el7.x86_64 root=/dev/mapper/centos-root ro rd.lvm.lv=centos/swap crashkernel=auto rd.lvm.lv=centos/root vconsole.font=latarcyrheb-sun16 vconsole.keymap=de rhgb quiet LANG=en_US.UTF-8 - initrd16 /initramfs-test.img - } +menuentry 'test' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-123.el7.x86_64-advanced-6c06919a-389a-4a50-8c6b-b086e65db9b0' { + load_video + set gfxpayload=keep + insmod gzio + insmod part_msdos + insmod xfs + set root='hd0,msdos1' + if [ x$feature_platform_search_hint = xy ]; then + search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 --hint='hd0,msdos1' 4236333a-a808-4f6b-b4a6-d963f4a69a25 + else + search --no-floppy --fs-uuid --set=root 4236333a-a808-4f6b-b4a6-d963f4a69a25 + fi + linux16 /vmlinuz-3.10.0-123.el7.x86_64 root=UUID=6c06919a-389a-4a50-8c6b-b086e65db9b0 ro rd.lvm.lv=centos/swap crashkernel=auto rd.lvm.lv=centos/root vconsole.font=latarcyrheb-sun16 vconsole.keymap=de rhgb quiet + initrd16 /initramfs-test.img +} </pre> > - Füge neuen Menüeintrag in die automatisch generierte Grub2 Konfigurations2-Datei hinzu: @grub2-mkconfig -o /boot/grub2/grub.cfg@ @@ -117,9 +121,10 @@ gebauten und berücksichtigt dabei alle bisher editierten Dracut-Module in ??/usr/lib/dracut/modules.d??. Die durchschnittliche Größe des resultierenden initramfs beträgt komprimiert: zwischen 11 und 16 MB. -<pre> - dracut --verbose --force /boot/initramfs-3.10.0-123.el7.x86_64.test.img 3.10.0-123.el7.x86_64 -</pre> +<pre><code class="bash"> +dracut --verbose --force /boot/initramfs-3.10.0-123.el7.x86_64.test.img \ + 3.10.0-123.el7.x86_64 +</code></pre> h3. Konfiguration @@ -129,9 +134,11 @@ TODO h2. Bauen eines minimalen inidividuellen Test-Initramfs -<pre> - dracut --verbose --hostonly --force /boot/initramfs-3.10.0-123.el7.x86_64.test.img 3.10.0-123.el7.x86_64 -</pre> +<pre><code class="bash"> +dracut --verbose --hostonly --force + /boot/initramfs-3.10.0-123.el7.x86_64.test.img \ + 3.10.0-123.el7.x86_64 +</code></pre> Die Option "hostonly" veranlasst Dracut dazu nur alle nötigen Abhängigkeiten für das aktuelle System in das resultierende Initramfs zu installieren. @@ -142,7 +149,95 @@ komprimiert: zwischen 11 und 16 MB. h2. Erstellen eines eigenen Dracut-Moduls -Alle vorhanden mModule befinden sich in ??/usr/lib/dracut/modules.d??. +Alle vorhanden Module befinden sich in ??/usr/lib/dracut/modules.d??. + +> # Erstelle ein neues Modul: @mkdir /usr/lib/dracut/modules.d/91test@ +> # Baue neues initramfs und achte darauf, dass ??\*\*Including module: test\*\*?? mit der Command-Line-Option ??--verbose?? ausgegeben wird. +> # Alle Modul-Installations-Informationen sind in der Datei ??module-setup.sh??: @touch /usr/lib/dracut/modules.d/91test/module-setup.sh@ +> # Konfiguriere Modul: +> > # Als erstes erstellt man eine ??check??-Funktion, die lediglich ??0?? + zurückgibt. Diese Funktion wird aufgerufen, wenn entschieden wird, welche + Dracutmodule geladen werden sollen. Durch zurückgeben der ??0?? wird das + Modul beim nächsten bauen eines Initramfs automatisch hinzugefügt ohne + das man es etwas in der ??/etc/dracut.conf?? oder per Command-Line-Option + "--add" angeben muss. Wenn die @$hostonly@ Variable gesetzt ist, dann + wird das Modul auch im "hostonly" Modus geladen. In diesem Fall sollte + die Funktion nur dann ??0?? zurückgeben, wenn das Modul auch wircklich + für den aktuellen Host benötigt wird. Wenn 255 zurückgegeben wird, wird + das Modul nur dann geladen, wenn es von einem andren Modul als + Abhängigkeit deklariert wurde. + +<pre><code class="bash"> +check() { + return 0 +} +</code></pre> + +Als nächstes wird eine ??install??-Funktion erstellt. Die ??install??-Funktion +wird aufgerufen, wenn alle nicht Kernel spezifischen Ressourcen installiert +werden sollen. Es können Binärdateien, Skripte und andere statischen Dateien +installiert werden. Um einen Datei im aktuellen Modul-Ordner zu addressieren +sollte die Variable "$moddir" als Prefix eingesetzt werden. +Eine solche Funktion kann beispielsweise einen ??Command-Line-Hook?? triggern, +der modulespezifische ??Kernel-Command-Line-Optionen?? verarbeitet während das +initiale Minilinux bootet. Im folgenden Beispiel werden ??Command-Line-Optionen +mit Priorität 20 vom Shell-Skript ??parse-insmodpost.sh?? gelesen und +ausgewertet. Dadurch muss natürlich auch das entsprechende Skript in das +initramfs kopiert werden. Dies wird durch den Aufruf der Funktion +??inst_simple?? erreicht. + +<pre><code class="bash"> +install() { + inst_hook cmdline 20 "$moddir/parse-cmdline.sh" + inst_simple "$moddir/parse-cmdline.sh" /sbin/insmodpost.sh +} +</code></pre> + +Die ??parse-cmdline.sh?? parst die Kernel-Command-Line für die Argumente +??rd.driver.post??, verhindert, dass die Module automatisch geladen werden und +installiert den Hook ??hook.sh?? in der ??initqueue/settled??. Der Inhalt von +??parse-cmdline.sh?? könnte wie folgt aussehen: + +<pre><code class="bash"> +for p in $(getargs rd.driver.post=); do + echo "blacklist $p" >> /etc/modprobe.d/initramfsblacklist.conf +done +</code></pre> + +In einer ??depends??-Funktion können andere Dracut-Module als Abhängigkeit +deklariert werden. Diese müssen einfach per "echo" als String Leerzeichen +getrennt ausgegeben werden. + +<pre><code class="bash"> +depends() { + echo 'debug virtfs' +} +</code></pre> + +Mit dieser Funktion können zusätzliche benötigte Kernel-Command-Line-Argumente +ausgegeben werden, die benötigt werden um die aktuelle Maschien zu booten. +Die Ausgabe sollte mit einem Leerzeichen beginnen und keine neuen Zeilen +ausgeben. + +<pre><code class="bash"> +cmdline() { + echo 'TODO' +} +</code></pre> + +Mit der Funktion ??installkernel?? sollen alle Kernelspezifischen Dateien +installiert werden. Siehe hierzu auch den Abschnitt +??Hilfsfunktionen zur Installation?? + +<pre><code class="bash"> +installkernel() { + TODO +} +</code></pre> + +h2. Hilfsfunktionen zur Installation + +TODO h3. Konfiguration |
