[Eisfair] eisfair-1 Xen DomU Kernelupdate
Peter Bäumer
peter at baeumer.dd-dns.de
So Jan 17 18:42:28 CET 2016
Glück Auf! Alexander,
> Ich sehe verschiedene Möglichkeiten, aber alles irgendwie Frickelei und
> vielleicht hat ja wer so eine Aktion schonmal gemacht und kann einen
> Tipp für eine sinnvolle Möglichkeit geben?!
bei mir laufen auch ein paar E1 Pinguine als domU auf einem Debian
Jessie amd64.
Mittlerweile habe ich die domUs soweit das ich den virt-Kernel über das
Setup installieren kann.
Hier noch mal danke an Thomas Bork.
Ich hab alles mal zusammen kopiert, in der Hoffnung nichts vergessen zu
haben und das Du damit was anfangen kannst.
Als Grundlage für die domU habe ich ein Eisfair1 direkt auf eine
Festplatte installiert, dann im Xen-Sever eingebaut und angepasst.
Für die domU habe ich, entsprechend der Partitionen der HDD, LVM
Laufwerke angelegt und formatiert.
Den Inhalt der HDD mit dem MC auf die entsprechende LVM Partition kopiert.
Also eine 1:1 Kopie der der Paritionen / und /boot erstellt und
swap mit mkswap vorbereitet.
> eisfair setup 1.. │
> ├───┌─────────────────────────────┐
> │ 1 │ System administration 1.. │
> │ 2 ├───┌─────────────────────────────────┐
> │ 3 │ 1 │ Base configuration 1.. │
> │ 4 │ 2 ├─────────────────────────────────┤
> │ 5 │ 3 │ 1 Edit base configuration
>
> ganz unten bei
>
> MODULE_N um einen erhöhen und xen-netfront eintragen --> das ist das
> Modul das für das Netzwerk zuständig ist.
>
> MODULE_1 = xen-netfront
> │MODULE_1_OPTION =
>
> Abspeichern.
> Damit Du auch von der dom0 über xm console auf der domU zugreifen kannst
> muss eine Zeile in der /etc/inittab angepasst werden.
> Lieblings Editor! /etc/inittab
>
> #ALT
> #5:123:off:/sbin/mingetty --noclear hvc0 # getty (login) on hvc0
>
> #Neu
> 5:123:respawn:/sbin/mingetty --noclear hvc0 # getty (login) on hvc0
> Die Laufwerke werden nicht mehr mit hda angesprochen, sonder mit xvd.
> Öffne mit Deinem Lieblings Editor die /etc/fstab und ändere die
> Gerätebezeichnung entsprechend Deiner Konfiguration
Das boot Laufwerk ist eigentlich nicht nötig, vereinfacht aber das
Kernel-Update.
/etc/fstab:
> /dev/xvda1 / ext4 defaults,errors=remount-ro 0 1
> /dev/xvda3 /boot ext4 defaults,errors=remount-ro 0 1
> /dev/xvdb1 /data ext4 defaults,errors=remount-ro 0 0
> /dev/xvda2 none swap sw 0 0
> proc /proc proc defaults 0 0
> /dev/fd0 /media/floppy auto defaults,user,noauto 0 0
> /dev/cdrom /media/cdrom iso9660 defaults,ro,user,noauto 0 0
> devpts /dev/pts devpts defaults 0 0
> usbfs /proc/bus/usb usbfs defaults 0 0
> /sys /sys sysfs defaults 0 0
> tmpfs /dev/shm tmpfs rw,nosuid,nodev 0 0
Lilo muss auch entsprechend angepasst werden:
/etc/lilo.conf:
> lba32
> disk = /dev/xvda3
> bios = 0x80
> boot = /dev/xvda3
> read-only
> prompt
> timeout = 50
> vga = normal
> menu-scheme = wr:bw:wr:Yr
> image = /boot/kernel
> root = /dev/xvda1
> label = eis
> initrd = /boot/initrd.gz
> append = "raid=noautodetect"
> image = /boot/old-kernel
> root = /dev/xvda1
> label = oldeis
> initrd = /boot/old-initrd.gz
> append = "raid=noautodetect"
Der Kernel liegt bei mir in der dom0
Die Konfiguration zum Starten der domU sieht so aus:
> # Kernel image file.
> #kernel = "/etc/xen/eiskernel/2.14.0_3.2.72/kernel"
> kernel = "/etc/xen/eiskernel/2.16.0_3.2.74/kernel"
>
> # Optional ramdisk.
> #ramdisk = "/etc/xen/eiskernel/2.14.0_3.2.72/initrd.gz"
> ramdisk = "/etc/xen/eiskernel/2.16.0_3.2.74/initrd.gz"
>
> memory = 4096.
> name = "titan"
> vif = [ 'mac=02:00:31:00:01:50, bridge=br0, model=e1000' ]
> disk = [ 'phy:/dev/vg0/titan_root,xvda1,w',
'phy:/dev/vg0/titan_swap,xvda2,w' , 'phy:/dev/vg0/titan_boot,xvda3,w'
,'phy:/dev/vg0/titan_data,xvdb1,w']
> # Set root device.
> root = "/dev/xvda1"
> boot = "c"
> extra = "console=hvc0 xencons=tty1 ro quiet"
Nach dem Kernel Update muss noch das initrd.gz angepasst werden, da
fehlen die Gerätedateien für /dev/xvdx
Im initrd.gz gibt es einen Skript: init
da muss der Wert von
DEVSTATIC="yes"
auf
DEVSTATIC=""
geändert werden
Teil1 beschreibt wie man das initrd.gz aus~ und wider einpackt
Teil2 die Anpassung vom des init Skriptes
Teil1:
> Zur initramfs:
> ==============
> Die erzeugte initramfs heisst wegen diverser Notwendigkeiten immer noch initrd.gz. Um den Inhalt der intramfs anzuzeigen/zu manipulieren:
>
> 1.
> Entpacken von initrd.gz in /tmp:
> test3267 # cp /boot/initrd.gz /tmp
> test3267 # gzip -d /tmp/initrd.gz
> test3267 # ls -l /tmp
> total 2940
> -rw-r--r-- 1 root root 146255 Mar 30 20:19 index.txt
> -rw-r--r-- 1 root root 2857984 Mar 31 23:15 initrd
> drwx------ 2 root root 4096 Mar 30 20:25 mc-root
>
> 2.
> Erzeugen eines leeren Verzeichnisses /initramfs:
> test3267 # mkdir -p /initramfs
>
> 3.
> Auspacken der initramfs im Verzeichnis /initramfs:
> test3267 # cd /initramfs
> test3267 # cpio -i < /tmp/initrd
> 5582 blocks
>
> Nun kann man sich das Verzeichnis /initramfs näher ansehen.
>
> 4.
> Das Äquivalent zur linuxrc ist jetzt die Datei init. Am Anfang stehen die Lade-Befehle der Module, danach kommt das Skelett von init.
>
> 5.
> Nach dem Manipulieren muss die initramfs wieder zusammen gepackt werden:
> test3267 # cd /initramfs
>
> Auf neuere Kernel-Versionen angepasst (stärker und still gepackt):
> find . | cpio -o -H newc --quiet | gzip -9 > /tmp/initrd.gz
>
> test3267 # cp /tmp/initrd.gz /boot
> test3267 # lilo
Teil2:
> Oder aber Du gehst den schon vorbereiteten Weg im Skript init der initramfs (darauf will ich sowieso hinaus):
>
> Ändere
>
> DEVSTATIC="yes"
>
> in
>
> DEVSTATIC=""
>
> Nun sorgt mdev der busybox in der initramfs dafür, dass beim Laden der Treiber für erkannte Hardware die notwendigen Devices dynamisch angelegt werden:
>
> # switch between static or dynamic /dev tree with mdev
> # if 'yes', static, if empty dynamic
> DEVSTATIC=""
> [...]
> Zeile 104:
> if [ -z "$DEVSTATIC" ]
> then
> # Mount tmpfs on /dev and set up /dev/pts
> echo "Mounting tmpfs on /dev ..."
> $MOUNT -t tmpfs dev /dev
> # Run mdev and populate /dev with device nodes
> echo "$MDEV" > /proc/sys/kernel/hotplug
> $MDEV -s
> fi
> [...]
> if [ -z "$DEVSTATIC" ]
> then
> # Debug /dev, if dynamic
> $MOUNT -o remount,rw "$ROOTDEV" "$NEWROOT"
> ls -lR /dev >"$NEWROOT"/dev.txt
> $MOUNT -o remount,ro "$ROOTDEV" "$NEWROOT"
> # Reset kernel hotplugging
> echo "Resetting kernel hotplugging ..."
> echo "" > /proc/sys/kernel/hotplug
> fi
> [...]
> if [ -z "$DEVSTATIC" ]
> then
> # Umount /dev tree
> echo "Umounting /dev ..."
> $UMOUNT /dev
> fi
>
> Wie Du oben sehen kannst, lasse ich eine Debug-Ausgabe nach "$NEWROOT"/dev.txt schreiben, damit man sehen kann, welche Devices mdev tätsächlich angelegt hat, hier z.B.
>
> testeis # grep hd?* /dev.txt
> brw-rw---- 1 0 0 3, 0 Dec 9 19:32 hda
> brw-rw---- 1 0 0 3, 1 Dec 9 19:32 hda1
> brw-rw---- 1 0 0 3, 2 Dec 9 19:32 hda2
> brw-rw---- 1 0 0 3, 3 Dec 9 19:32 hda3
>
> --
> der tom
> [eisfair-team]
Zum Schluss muss noch der Kernel und das initrd.gz zur dom0 kopiert
werden umd das Skript zum Starten entsprechend anpassen.
Am 17.01.2016 um 14:55 schrieb Alexander Dahl:
> Hallo zusammen,
>
>
> Jetzt würde ich gern den aktuellen eiskernel-virt verwenden, ggf. sogar
> in der DomU liegend und mit pygrub booten,
Da steh ich auf dem Schlauch,
was muss man machen das das mit dem pygrub booten funktioniert ?
Das hört sich so an als ob man sich das kopieren vom Kernel und des Init
sparen kann :)
>
> Grüße
> Alex
>
MfG
Peter
Mehr Informationen über die Mailingliste Eisfair