summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authortorben2015-02-26 03:24:14 +0100
committertorben2015-02-26 03:24:14 +0100
commit3c6c882d75e6315da1d47bf7b0304f04270eec3f (patch)
tree204522a5cfd7b39d5f5b9762188543d20ac3340c
parentAdding readme file. (diff)
downloadsystemd-init-3c6c882d75e6315da1d47bf7b0304f04270eec3f.tar.gz
systemd-init-3c6c882d75e6315da1d47bf7b0304f04270eec3f.tar.xz
systemd-init-3c6c882d75e6315da1d47bf7b0304f04270eec3f.zip
Improve documentation.
-rw-r--r--readme.md139
1 files changed, 117 insertions, 22 deletions
diff --git a/readme.md b/readme.md
index 6bdbea6e..31d6a8c1 100644
--- a/readme.md
+++ b/readme.md
@@ -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