"initrd for dummies"

Welches Modul/Treiber für welche Hardware, Kernel compilieren...
Antworten
cosmac
Beiträge: 4576
Registriert: 28.03.2005 22:24:30

"initrd for dummies"

Beitrag von cosmac » 05.09.2012 19:57:19

hi,

liefert bei Google genau einen Treffer und da heißt es: "mach das nicht, es geht ohne viel besser" :D Das war ja immer mein Reden, aber jetzt könnte ich eine gebrauchen und finde nur Tipps, wie man mkinitrd austrickst und so was. Das ist mir aber viel zu kompliziert und auch mit Kanonen auf Spatzen geschossen; ich brauche keine Automatik, ich weiß selbst, was eingebaut werden soll. Kennt jemand zufällig ein Howto "initrd from scratch"?

Ich möchte nämlich nur eine Art Boot Manager haben, dem ich ein paar Tricks beibringen kann. Zum Beispiel sollte er die root-Pastition aus einem tar.gz wieder herstellen oder die Uhr aus einer seriell angebundenen Quelle stellen oder einen Clone des Systems erzeugen können. Natürlich wäre es am einfachsten, dafür ein komplettes Wartungs-System zu booten. Umgekehrt kann man diese Funktionen wohl auch in einem einzigen statischen Programm unterbringen, das mit "init=" gestartet wird. Naja, eine initrd wäre eben der Mittelweg, da müsste ich nicht tar oder wenigstens "cp -a" nachbauen.
Beware of programmers who carry screwdrivers.

Benutzeravatar
r900
Beiträge: 1053
Registriert: 09.10.2011 20:06:11
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Stockholm

Re: "initrd for dummies"

Beitrag von r900 » 05.09.2012 21:30:26

Wenn du eh schon weißt was rein muss wozu brauchst du dann ein howto? :wink:

Wenn du alle Dateien zusammen hast führst du im root deines zukünftigen initramfs folgenden Befehl aus:

Code: Alles auswählen

find . -print -depth | cpio -Hnewc -ov | gzip > ../initrd.img
und fertig ist dein komprimiertes initramfs.

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

Re: "initrd for dummies"

Beitrag von cosmac » 06.09.2012 16:54:14

:THX: :THX: :THX: Danke, du bist mein Held! Das war ein großer Schritt auf dem Weg zur Weltherrschaft ;)

Dass das so einfach geht, da fragt man sich schon, warum die meinen ersten Versuche so völlig misslungen sind. Der nächste Stolperstein wird dann wohl pivot_root(2)...

Ach ja, eine kleine Ungereimtheit gibt es noch: ich muss "-depth" weglassen, sonst funktioniert "cpio --extract" nicht und auch der Kernel findet init nicht.
Beware of programmers who carry screwdrivers.

Benutzeravatar
r900
Beiträge: 1053
Registriert: 09.10.2011 20:06:11
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Stockholm

Re: "initrd for dummies"

Beitrag von r900 » 06.09.2012 17:37:50

cosmac hat geschrieben: Dass das so einfach geht, da fragt man sich schon, warum die meinen ersten Versuche so völlig misslungen sind.
Ging mir nicht anders. :) Zuerst wusste ich nicht dass man die Option "-Hnewc" braucht und dann habe ich es mit xz gepackt und da muss man auch noch eine spezielle Einstellung wählen. Trial and error.. :wink:
cosmac hat geschrieben: Ach ja, eine kleine Ungereimtheit gibt es noch: ich muss "-depth" weglassen, sonst funktioniert "cpio --extract" nicht und auch der Kernel findet init nicht.
Jetzt wo du es sagst.. Auf der info-page von cpio steht das mit --depth, aber ich glaube die Option hatte ich tatsächlich nicht benutzt. Entpacken geht recht einfach so:

Code: Alles auswählen

zcat ../initrd.img | cpio -idv
Das info Dokument zu cpio scheint eh nicht so ganz aktuell zu sein. Da steht auch man müsste zum Entpacken eines Verzeichnisbaums unbedingt die Option "d" mit angeben, weil Verzeichnisse sonst nicht erstellt würden. Aber wenn ich die Option weglasse wird trotzdem alles entpackt so wie ich das bisher sehe.

Nachtrag: Jetzt merke ich was. Wenn man find die Option "-depth" mitgibt muss man beim Entpacken mit cpio auch die Option "-d" benutzen. Also "-depth" bei find weglassen und "-d" cpio sicherheitshalber trotzdem mitgeben kann nicht schaden. Außerdem "-print0" um Probleme mit sonderbaren Dateinamen zu vermeiden.

Code: Alles auswählen

find . -print0 | cpio -0ov -H newc | gzip > ../initrd.img
zcat ../initrd.img | cpio -idv

Antworten