[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