Hallo zusammen,
um aktuelle Rechner (mit neuen Intel Netzwerkkarten) via Kickstart/PXE zu installieren, habe ich den neusten e1000e-Treiber ins initrd.img aufnehmen wollen. Damit stuerzt der Kickstart-Kernel beim Booten aber mit den folgenden Meldungen ab:
[...] md: Autodetecting RAID arrays. md: autorun ... md: ... autorun DONE. RAMDISK: Compressed image found at block 0 RAMDISK: incomplete write (20480 != 32768) 6062080 VFS: Cannot open root device "<NULL>" or unknown-block(253,3) Please append a correct "root=" boot option Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(253,3)
Um das initrd.img zu modifizieren, habe ich das originale CentOS 5.2 Image genommen, mit gunzip/cpio ausgepackt und modules/2.6.18-92.el5/x86_64/e1000e.ko durch eines ersetzt, welches ich auf einem frisch installierten Rechner (ohne Updates) mit ebendiesem Kernel erstellt hatte. Danach das ganze wieder archiviert und komprimiert und das urspruengliche initrd.img auf dem tftp-Server ersetzt.
Das neue Image ist allerdings deutlich groesser als das originale: 12MB gegenueber 5.7 MB. Was ich nicht verstehen kann, denn zwar ist e1000e.ko 2.8 MB gross (gegenueber dem alten e1000e.ko mit nur ca. 170 KB), aber das modules.cgz ist nur ca. 700 KB groesser als das originale. Gezippt wurden die cpio-Files mit `gzip -9`.
Meine PXE-Bootsettings sind
KERNEL CentOS-5.2_64/vmlinuz APPEND initrd=CentOS-5.2_64/initrd.img ramdisk_size=5940 kssendmac ks=http://srv/ks/ks.cgi noipv6
Auch mit Heraufsetzen der ramdisk_size kommt man nicht zu einem funktionierenden Bootvorgang. Etwas ueber ramdisk_size=7100 gibt es einen Ueberlauf und die Groesse scheint wieder von unten gezaehlt zu werden...?
Irgendwelche Ideen, man ein funktionierendes, modifiziertes initrd.img fuer Kickstart/PXE erstellen kann/muss?
Vielen Dank
frank
Moin moin,
ich habe jetzt kein Ahnung bzgl. Deines speziellen Problems. Mich irritiert nur das Du die initrd von Hand manipulierst.
Warum verwendest du nicht "mkinitrd" mit den entsprechenden Aufruf um die Treiber in die initrd einzubinden?
Ich binde hier zb. einige Treiber in die initrd ein um u.a. mit einem verschlüsselten root zu arbeiten.
Grundsätzlicher Aufruf:
/sbin/mkinitrd -f -v --preload=forcedeth --preload=sk98lin ...... --with= ..... /boot/initrd-`uname -r`.img `uname -r`
Backup der alten initrd erstellt und auf Deinem Testrechner gestartet. Dann wird für das aktuell laufende Kernel eine initrd mit den zusätzlichen Treibern erstellt.
Frank Thommen schrieb:
Hallo zusammen,
um aktuelle Rechner (mit neuen Intel Netzwerkkarten) via Kickstart/PXE zu installieren, habe ich den neusten e1000e-Treiber ins initrd.img aufnehmen wollen. Damit stuerzt der Kickstart-Kernel beim Booten aber mit den folgenden Meldungen ab:
[...] md: Autodetecting RAID arrays. md: autorun ... md: ... autorun DONE. RAMDISK: Compressed image found at block 0 RAMDISK: incomplete write (20480 != 32768) 6062080 VFS: Cannot open root device "<NULL>" or unknown-block(253,3) Please append a correct "root=" boot option Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(253,3)
Um das initrd.img zu modifizieren, habe ich das originale CentOS 5.2 Image genommen, mit gunzip/cpio ausgepackt und modules/2.6.18-92.el5/x86_64/e1000e.ko durch eines ersetzt, welches ich auf einem frisch installierten Rechner (ohne Updates) mit ebendiesem Kernel erstellt hatte. Danach das ganze wieder archiviert und komprimiert und das urspruengliche initrd.img auf dem tftp-Server ersetzt.
Das neue Image ist allerdings deutlich groesser als das originale: 12MB gegenueber 5.7 MB. Was ich nicht verstehen kann, denn zwar ist e1000e.ko 2.8 MB gross (gegenueber dem alten e1000e.ko mit nur ca. 170 KB), aber das modules.cgz ist nur ca. 700 KB groesser als das originale. Gezippt wurden die cpio-Files mit `gzip -9`.
Meine PXE-Bootsettings sind
KERNEL CentOS-5.2_64/vmlinuz APPEND initrd=CentOS-5.2_64/initrd.img ramdisk_size=5940 kssendmac ks=http://srv/ks/ks.cgi noipv6
Auch mit Heraufsetzen der ramdisk_size kommt man nicht zu einem funktionierenden Bootvorgang. Etwas ueber ramdisk_size=7100 gibt es einen Ueberlauf und die Groesse scheint wieder von unten gezaehlt zu werden...?
Irgendwelche Ideen, man ein funktionierendes, modifiziertes initrd.img fuer Kickstart/PXE erstellen kann/muss?
Vielen Dank
frank
Hallo Achim,
Achim Theobald wrote:
Moin moin,
ich habe jetzt kein Ahnung bzgl. Deines speziellen Problems. Mich irritiert nur das Du die initrd von Hand manipulierst.
Warum verwendest du nicht "mkinitrd" mit den entsprechenden Aufruf um die Treiber in die initrd einzubinden?
Hatte ich zuerst auch gedacht, aber das so generierte initrd.img funktioniert ueberhaupt nicht mit dem Kernel (pxelinux/syslinux), der beim Kickstarten via PXE gebootet wird. Ich habe mal eines dieser Images ausgepackt und die Struktur ist vollkommen anders als beim PXE Image. Mit einem per `mkinitrd` generierten initrd.img endet der Bootvorgang beim Kickstarten mit:
[...] Scanning and configuring dmraid suported devices Trying to resume from LABEL=SWAP-sda5 Unable to access resume device (LABEL=SWAP-sda5) Creating root device. Mounting root filesystem. mount: could not find filesystem '/dev/root' Setting up other filesystems. Setting up new root fs setuproot: moving /dev failed: No such file or directory no fstab.sys, mounting internal defaults setuproot: error mounting /proc: No such file or directory setuproot: error mounting /sys: No such file or directory Switching to new root and running init. unmounting old /dev unmounting old /proc unmounting old /sys switchroot: mount failed: No such file or directory Kernel panic - not synching: Attempted to kill init!
Das "regulaere" Image geht wohl davon aus, dass es auf einem partitionierten, installierten und konfigurierten System geladen wird, waehrend dasjenige vom Kickstart alles Benoetigte (Mountpoints, Binaries etc.) selber mitbringen muss, weil es ja erst die Installation starten muss.
Gruss
frank