initrd mounten

Du suchst ein Programm für einen bestimmten Zweck?
Antworten
Benutzeravatar
wotan
Beiträge: 113
Registriert: 16.03.2004 20:41:04

initrd mounten

Beitrag von wotan » 11.06.2007 16:04:41

Hallo,

wie kann ich ein initrd das mit cpio erstellt ist, mounten?
mfg
wotan

Benutzeravatar
Tintom
Moderator
Beiträge: 3070
Registriert: 14.04.2006 20:55:15
Wohnort: Göttingen

Beitrag von Tintom » 11.06.2007 19:26:01

Das müsste so gehen:

Code: Alles auswählen

mv <imagedatei> <imagedatei.gz>
gunzip <imagedatei.gz>
mount -o loop <imagedatei>
So habe ich eine initrd aus dem Wiki gemountet, aber ich weiß es nicht mehr genau
Bitte korrigieren, wen ich falsch liege !

Gruß

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

Beitrag von cosmac » 11.06.2007 19:40:35

hi,

mounten kann ich sie nicht, aber evt. reicht es, sie auszupacken:

Code: Alles auswählen

mv <imagedatei> <imagedatei.gz>
gunzip <imagedatei.gz>
mkdir initrd-test
cd initrd-test
cpio --extract < ../<imagedatei>
anschliessend enthält das Verzeichnis initrd-test den Inhalt der initrd.
Es sieht aus wie gemountet, ist aber in Wirklichkeit kopiert.
Beware of programmers who carry screwdrivers.

Benutzeravatar
wotan
Beiträge: 113
Registriert: 16.03.2004 20:41:04

Beitrag von wotan » 11.06.2007 19:55:56

So,

dafür erstmal danke,

aber wie baue ich jetzt ein initrd mit dem ich auch richtig booten kann?
mfg
wotan

Benutzeravatar
KBDCALLS
Moderator
Beiträge: 22456
Registriert: 24.12.2003 21:26:55
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Dortmund
Kontaktdaten:

Beitrag von KBDCALLS » 11.06.2007 20:38:16

Eigentlich braucht die Initrd nicht zu entpacken. Zum Erstellen gibt es ja Tools die dir das abnehemen.


Initramfs-tool und yaird

Beide bauen im cpio Format

Dann gibt es noch die initrd-tools . Das darin enthaltene mkinitrd baut die Initrd im cramfs Format , welches man mounten kann , per loop . Dieses wird für Kernel 2.4.xx benutzt und bis Kernel 2.6.12. Ab Kernel 2.6.13 setzt Debian die beiden erstgenannten ein , wobei die initramfs-tools der Standard sind.
Was haben Windows und ein Uboot gemeinsam?
Kaum macht man ein Fenster auf, gehen die Probleme los.

EDV ist die Abkürzung für: Ende der Vernunft

Bevor du einen Beitrag postest:
  • Kennst du unsere Verhaltensregeln
  • Lange Codezeilen/Logs gehören nach NoPaste, in Deinen Beitrag dann der passende Link dazu.

Benutzeravatar
wotan
Beiträge: 113
Registriert: 16.03.2004 20:41:04

Beitrag von wotan » 11.06.2007 21:32:00

Aber was muss da alles rein, damit ich ein kleines Mini-Linux habe?

Mein erster versuch mit mkinitramfs ging gründlich in die Hose. Der Client könnte es nicht booten.
mfg
wotan

Benutzeravatar
KBDCALLS
Moderator
Beiträge: 22456
Registriert: 24.12.2003 21:26:55
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Dortmund
Kontaktdaten:

Beitrag von KBDCALLS » 11.06.2007 21:48:19

Welchen Kernel benutzt usw. Normalerweise reicht ein dpkg-reconfigure linux-image-2.6.18-4.486 aus Du mußt schon etwas mehr an Infos geben.
Was haben Windows und ein Uboot gemeinsam?
Kaum macht man ein Fenster auf, gehen die Probleme los.

EDV ist die Abkürzung für: Ende der Vernunft

Bevor du einen Beitrag postest:
  • Kennst du unsere Verhaltensregeln
  • Lange Codezeilen/Logs gehören nach NoPaste, in Deinen Beitrag dann der passende Link dazu.

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

Beitrag von cosmac » 11.06.2007 21:55:31

hi,

Möchtest du eine funktionierende initrd von einem "großen"
Rechner abspecken und dann auf einen "kleinen" kopieren?
Dann probier doch mal, den ausgepackten Verzeichnisbaum
mit "cpio --create" wieder einzupacken. Danach noch ein "gzip"
und fertig. Müsste doch eigentlich gehen?

ABER: für ein Mini-Linux würde ich komplett auf die Ramdisk
verzichten und gleich einen passenden Kernel bauen.
Beware of programmers who carry screwdrivers.

Benutzeravatar
wotan
Beiträge: 113
Registriert: 16.03.2004 20:41:04

Beitrag von wotan » 11.06.2007 22:35:09

Es geht um das hier:
http://www.debianforum.de/forum/viewtopic.php?t=84795

Die Dienste laufen und liefern auch aus, nur, komme ich mit den initrd bauen nicht vorwärts.

Kernel sollte ein 2.6.18-4-686 sein, bzw kann auch ein 2.6.21-686 sein. Sogenau habe ich derzeit nicht auf den Kernel geschaut.
mfg
wotan

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

Beitrag von cosmac » 12.06.2007 12:29:33

moin, moin,

also ich geh mal davon aus, daß du einen normalen PC hast, auf dem
Etch mit dem Debian-Kernel 2.6.18... installiert ist. Der Rechner soll
vom Netz booten und komplett in der initrd laufen.

Für den Anfang würde ich erstmal die initrd lokal zum Laufen bringen,
und zwar mit einer modifizierten Standard-Debian-initrd. Meine hatte
yaird erzeugt, aber das Prinzip sollte auch für andere Tools passen.
Zusätzlich braucht man das Paket "busybox-static", weil da praktisch
alles was man im Mini-System braucht, in einer Datei drin ist.

Erstmal braucht man ein Arbeitsverzeichnis auf einer Partition, auf der
man Devices erzeugen darf. Da schreibt man sich ein kleines Script "mkrd":

Code: Alles auswählen

#!/bin/sh
# mkrd: initrd-einpack-Script
cd rootdir
find . > ../files
cpio --create --format=newc < ../files > ../initrd-mini
cd ..
rm initrd-mini.gz
gzip initrd-mini
cp -p initrd-mini.gz /boot
dann packt man die Debian-initrd aus (z.B.):

Code: Alles auswählen

cp -p /boot/initrd.img-2.6.18-4-k7 ./initrd.img-2.6.18-4-k7.gz
gunzip initrd.img-2.6.18-4-k7.gz
mkdir rootdir
cd rootdir
cpio --extract < ./initrd.img-2.6.18-4-k7
jetzt befindet sich in "rootdir" das root-Verzeichnis des Mini-Systems.
Die entscheidende Änderung ist eine zusätzliche Zeile ganz am Ende
der Datei "rootdir/init", nämlich der Start einer Shell:

Code: Alles auswählen

(...)
/bin/mount -n \
        $ro \
        -t ext3 \
        -o 'errors=remount-ro' \
        '/dev/hda5' \
        '/mnt'
/bin/dash   # neu: die Shell des Mini-Systems
switchroot "$@"
Dann kopiert man sich alle Programme, die man gerne hätte, nach
"rootdir/bin" und die benötigten libs nach "rootdir/lib". Oder man
nimmt für den Anfang busybox, was viele Kommandos in einer Datei
unterbringt und je nachdem, wie es aufgerufen wird, ausführt:

Code: Alles auswählen

cd rootdir/bin
cp -p /bin/busybox .
ln -s busybox ls
ln -s busybox df
ln -s busybox fdisk
... usw. ...
Jetzt kann man die neue initrd einpacken und nach /boot kopieren:

Code: Alles auswählen

./mkrd
Als nächstes braucht man einen Grub-Eintrag mit der neuen initrd:

Code: Alles auswählen

title     Debian GNU/Linux, 2.6.18-4-k7, Ramdisk-System
root      (hd0,4)
kernel   /boot/vmlinuz-2.6.18-4-k7 root=/dev/hda5 ro
initrd     /boot/initrd-mini.gz
Die root...-Zeile ist für Grub, der Kernel benutzt ja die initrd.
"root=/dev/hda5" steht trotzdem da, weil nämlich das System ganz
normal (weiter-)bootet, wenn man die dash-Shell beendet -- mega
praktisch zum Testen, auf geht's:

Code: Alles auswählen

shutdown -r now
viel Spaß!
Beware of programmers who carry screwdrivers.

Antworten