Eigen kernels booten met PyGrub

We krijgen regelmatig verzoeken van klanten om met custom kernels te kunnen booten. Vaak omdat er specialistische modules nodig zijn, bijvoorbeeld voor VOIP-diensten of cryptografisch versleutelde diskpartities via FUSE. Vanaf vandaag maken wij het voor mensen met dit soort speciale behoeftes mogelijk om in plaats van onze standaardkernel een Xen-compatible kernel van binnen de VPS zelf te laden via PyGrub. U kunt deze mogelijkheid activeren binnen de XLS Interface.

Wat is PyGrub precies?

PyGrub is een herimplementatie, in python, van de grub bootloader, toegespitst op het booten van virtuele machines onder Xen. Het leest de grub-configuratie en kiest daarmee een kernel en een ramdisk-image om mee te booten en geeft deze door aan de Xen hypervisor.

Installeren van je eigen kernel

Om succesvol via PyGrub te kunnen booten zijn op de VPS nodig:

  • Een valide grub-config in /boot/grub/menu.lst
  • Een Xen domU-compatible kernel.
  • Een initrd met xenblk.ko en xennet.ko.
  • Om te zorgen dat de xenblk en xennet drivers goed geladen worden, is het verstandig om, alvorens een Xen kernel-package te installeren, de volgende twee regels toe te voegen aan /etc/modprobe.conf:

        alias eth0 xennet
        alias scsi_hostadapter xenblk
    

    Installeer vervolgens grub, en daarna de xen kernel. Onder CentOS is dat:

        # yum install grub
        # yum install kernel-xen
    

    En onder Debian:

        # apt-get install grub
        # apt-get install linux-image-xen-amd64
    

    Activeren

    Controleer dat er een geldige /boot/grub/menu.lst ontstaan is die wijst naar de Xen kernel. Zet vervolgens op de XLS Interface site de knop om naar ‘Custom Kernel’ en geef de VPS vanaf de command line een shutdown (een gewone reboot is niet genoeg). De machine zal opnieuw gestart worden met PyGrub.

    • Digg
    • StumbleUpon
    • Twitter
    • del.icio.us
    • Facebook
    • Hyves
    • Reddit

    Tags: , , , , , ,

    5 Responses to “Eigen kernels booten met PyGrub”

    1. Bedankt voor de duidelijk handleiding! Ik kwam bij onze debian (testing) VM een fout tegen bij het installeren van de linux-image-xen-amd64 package:
      warning: grub-probe can’t find drive for /dev/sda1

      Hier de oplossing: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=511587

    2. Voor de volledigheid nog een voorbeeld van een /boot/grub/menu.lst bestand, let er wel op dat je de waardes aanpast naar de daadwerkelijke kernelversie die je gaat draaien:

      # grub.conf generated by anaconda
      #
      # Note that you do not have to rerun grub after making changes to this file
      # NOTICE: You have a /boot partition. This means that
      # all kernel and initrd paths are relative to /boot/, eg.
      # root (hd0,0)
      # kernel /vmlinuz-version ro root=/dev/VolGroup00/LogVol00
      # initrd /initrd-version.img
      #boot=/dev/sda
      default=0
      timeout=10
      splashimage=(hd0,0)/boot/grub/splash.xpm.gz
      hiddenmenu
      title CentOS (2.6.18-128.4.1.el5xen)
      root (hd0,0)
      kernel /boot/vmlinuz-2.6.18-128.4.1.el5xen ro root=/dev/sda1 console=xvc0
      initrd /boot/initrd-2.6.18-128.4.1.el5xen.img

      De initrd kan je maken met (in dit geval):

      “mkinitrd -f –with=xennet –preload=xenblk /boot/initrd-2.6.18-128.4.1.el5xen.img 2.6.18-128.4.1.el5xen”

      Als je daarna voor Pygrub kiest in de interface, zal de VPS netjes moeten booten.

    3. Lennart Hengstmengel says:

      Ik liep op mijn debian6 vps ook tegen problemen aan. Bij installeren van de kernel kreeg ik de foutmelding:

      grub-probe: error: Cannot find a GRUB drive for /dev/xvda1. Check your device.map.

      Om dit op te lossen moest ik iets meer doen dan in de link hierboven wordt beschreven; ik moest downgraden naar grub-legacy (met grub2 lukte het niet), en dan de stappen doorlopen op https://www.hosthop.com/hop/knowledgebase/29/Debian-60-Grub-Error-grub-probe-cant-find-drive-for-ordevorxvda1-Workaround.html

      Nu werkt de custom kernel prima.

    4. Jasper says:

      Het is een mooie workaround, maar hij is alleen nodig als je VPS een nummer onder de 6000 hebt. Ik ga dit nog op onze wiki duidelijker beschrijven binnenkort, maar zal alvast hier een uitleg geven.

      Tot vps6000 maken we gebruik van een XEN-versie die alleen grub-legacy (/boot/grub/menu.lst) snapt.

      Vanaf 6000 snapt XEN ook grub2 configbestanden (/boot/grub/grub.cfg)

      Grub zelf hoeft verder niet daadwerkelijk in je MBR of partitie gestopt te worden, want XEN doet dit voor je emuleren. XEN leest 1 van de 2 bestanden uit (oude versie heeft daarbij voorrang) en boot de kernel, met de opties, die daarin ingesteld staat. Daarbij is het dus van belang dat de kernel xennet, xenblk als modules heeft of pvops gebruikt. In nieuwere debian/ubuntu’s is dat tegenwoordig in de default kernel al het geval.

      Wij maken onze images op het moment zo dat ze op de nieuwere versie XEN goed draaien, waarbij we dus ook grub2 configs gebruiken als die ondersteund worden in die distro, Onze clusters met de oudere versie XEN gaan we daarom of uitfaseren, of naar de huidige versie brengen om dit voor iedereen zo werkend te krijgen.

      In jou geval is het dus nodig om deze truuk uit te voeren om naar grub-legacy te komen, maar voor de meeste klanten met debian6 is het genoeg om voor “Custom Kernel” te kiezen en te rebooten. Bij twijfels wil ik eenieder aanraden om contact met ons op te nemen en dan voeren wij de omzetting naar “Custom Kernel” voor je uit.

    5. Remi Christiaan says:

      Ik heb een machine in de 8000 reeks en kreeg met grub2 nog steeds de melding:

      grub-probe: error: Cannot find a GRUB drive for /dev/xvda1. Check your device.map

      In /etc/default/grub staat een regel #GRUB_TERMINAL=console (regel 16), haal de # weg en run update-grub.

      Je krijgt dan nog steeds de gewraakte melding, maar aptitude kan dan wel de kernel packages installeren zonder foutmelding.

    Leave a Reply