mkcramfs für initrd?

Warum Debian und/oder eine seiner Spielarten? Was muss ich vorher wissen? Wo geht es nach der Installation weiter?
Antworten
goofy
Beiträge: 71
Registriert: 11.06.2006 16:21:38

mkcramfs für initrd?

Beitrag von goofy » 26.08.2006 20:15:25

Hallo!

mkinitrd erstellt eine initrd mit dem doofen Dateisystem cramfs. Ich hätte aber lieber ein "normales" image, das gzipt wurde.

Unter anderen Linux Derivaten gabs einfach den Befehl mkinitrd und das lief dann so ab. Aber wie geht's unter Debian?

Wenn ich die mkinitrd.conf (/etc/mkinitrd) lösche, weigert sich mkinitrd seinen Dienst zu tun. :(

Das cramfs macht bei mir Probleme: "cramfs: wrong magic", deswegen.

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von rendegast » 27.08.2006 00:25:23

Hallo,

ich habe bei meinem sarge herumgespielt, damit ich der initrd ein dsdt(korrigiertes ACPI-BIOS) anhängen konnte.
Da das einfache Anhängen mit 'cat' an die initrd nicht funktionierte, habe ich die initrd als cpio-Archiv verwendet:

Code: Alles auswählen

MKIMAGE='cd %s &&       find . | sort -u | cpio -H newc --create | gzip -cn9 > %s'
(+ ein paar kleine Änderungen im Erstellungsprozess)
Im Gegensatz dazu der Standardbefehl (sarge!) zum Vergleich:

Code: Alles auswählen

MKIMAGE='mkcramfs %s %s > /dev/null'
Der eigentliche Bastelteil ganz am Ende der /usr/sbin/mkinitrd:

Code: Alles auswählen

...
gendir $workdir
eval "$(printf "$MKIMAGE" $workdir/initrd ${initrd_file})" 3>&1 >&2
...
Dazu der "Bastelteil" aus der suse-mkinitrd:

Code: Alles auswählen

...
    # create an empty initrd
    mkdir $tmp_mnt || error 1 "could not create temporary directory"
    if [ "$mkinit_type" = "rd" ]; then
        dd if=/dev/zero of=$tmp_initrd bs=1k count=$image_blocks 2>/dev/null
        mke2fs -q -F -b 1024 -m 0 -N $image_inodes $tmp_initrd 2>/dev/null 1>&2
        tune2fs -i 0 $tmp_initrd >/dev/null 2>&1

        # check for loop device
        grep -q loop /proc/devices
        if [ $? != 0 ] ; then
            if [ -f /lib/loop.o ] ; then
                insmod /lib/loop.o
            else
                modprobe loop
            fi
        fi
        # mount it
        if ! mount -t ext2 -oloop $tmp_initrd $tmp_mnt ; then
            error 3 "failed to mount image"
        fi
        is_mounted=1
        rmdir $tmp_mnt/lost+found
    fi
    # fill the initrd
    mkdir -p $tmp_mnt/{sbin,bin,etc,dev,proc,sys}

    # Create a dummy /etc/mtab for mount/umount
    echo -n > $tmp_mnt/etc/mtab
...
Es wird ein ext2-Image erstellt und gemountet. Ab "# fill the initrd" könnte dann MKIMAGE einsetzen, mit dem Unterschied dass statt 'find ... | sort ... | cpio ... | gzip ...' ein rekursives Kopieren durchgeführt wird. (prinzipiell)

Das Erstellen und Mounten des ext2-Images könnte als Befehl in die /etc/mkinitrd/mkinitrd.conf gepackt werden:

Code: Alles auswählen

...
export LOOP-FILE=...
export LOOP-MNT=...
'loop-mount-erstellung' && mount -oloop $LOOP-FILE $LOOP-MNT
MKIMAGE='cd %s && cp -a * \$LOOP-MNT && umount \$LOOP-MNT && mv \$LOOP-FILE %s'
...
(als erster Entwurf)
ext2fs muss im Kernel kompiliert sein.
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

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 » 27.08.2006 18:33:23

Welcher Kernel ? Das kannst duaber auch in der Configdatei unstellen.

Code: Alles auswählen

/etc/mkinitrd/mkinitrd.conf


Nachzulesen

Code: Alles auswählen

man mkinitrd.conf
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.

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von rendegast » 29.08.2006 02:01:33

Ergänzung:
ext2fs muss im Kernel kompiliert sein.
zusätzlich braucht das gezippte ext2-Image noch: CONFIG_ZLIB_DEFLATE=y
KBDCALLS hat geschrieben:Welcher Kernel ?

Code: Alles auswählen

$ grep FS=y /boot/config-2.6.8-3-686 
CONFIG_ACPI_SLEEP_PROC_FS=y
CONFIG_PNPBIOS_PROC_FS=y
CONFIG_SCSI_PROC_FS=y
CONFIG_FT_PROC_FS=y
CONFIG_RADIO_TYPHOON_PROC_FS=y
CONFIG_USB_DEVICEFS=y
CONFIG_ZISOFS=y
CONFIG_PROC_FS=y
CONFIG_SYSFS=y
CONFIG_DEVFS_FS=y
CONFIG_TMPFS=y
CONFIG_RAMFS=y
CONFIG_JFFS_PROC_FS=y
CONFIG_CRAMFS=y
also mit dem sarge-Standard-Kernel funktioniert es nicht.
goofy hat geschrieben:mit dem doofen Dateisystem cramfs
nicht doof, nur anders.
goofy hat geschrieben:Das cramfs macht bei mir Probleme: "cramfs: wrong magic", deswegen.
das bedarf wohl eher der Problemlösung, jedoch habe ich da keine Idee.
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

Antworten