Kompilierung eines eigenen Debian Squeeze-Kernels 2.6.38 mit Hyper-V Client Treiber / Integrationsdienste | Hyper-V Server Blog
  • Home
  • Hypervisor

Kompilierung eines eigenen Debian Squeeze-Kernels 2.6.38 mit Hyper-V Client Treiber / Integrationsdienste

Da mal wieder ein neuer Linux-Kernel erschienen ist, habe ich mich der Aufgabe angenommen auf einem Debian Squeeze einen Kernel der Version 2.6.38 zu kompilieren, der die Hyper-V Client Client Treiber integriert hat. Dieser Beitrag hier aktualisiert quasi den von meinem Kollegen Carsten Rachfahl geschriebenen Artikel Debian Linux Kernel mit Hyper-V Additions compilieren.

Installations-Medium war in meinem Fall das Image “debian-6.0.1a-amd64-netinst.iso

//Update 08.12.2011: Eine aktualisierte Version mit dem Kernel 3.1.4 findet sich hier.

Nach der Grundinstallation startet ein Kernel 2.6.32 ohne Hyper-V Client Treiber. Wichtig für die nachfolgende Prozedur: Es wird eine “Ältere Netzwerkkarte” benötigt, da sonst keine Downloads verfügbar sind und wir in unserem Fall den neuen Kernel sowie einige weitere Pakete benötigen. Auf geht’s…

An dieser Stelle wählen wir die “Hyper-V Client Drivers” aus, die sich unter “Device Drivers” –> “Staging Drivers” verstecken

020304

Nachdem man mehrfach mit “Exit” die Kernel-Konfiguration verlassen hat und die Frage nach dem Speichern der Konfiguration mit “Ja” beantwortet hat, geht es weiter mit der Kompilierung und der Installation des Kernels:

Nach einem Neustart des Systems wartet der Grub mit zwei weiteren Einträgen auf, von denen die ersten beiden der neue Kernel ist.

Austausch der Netzwerkkarte

Wenn man nun das System herunterfährt, die “ältere Netzwerkkarte” austauscht gegen eine voll unterstützte Karte und das System wieder startet hat man keine IP-Adresse auf der Karte “eth0”. Grund hierfür ist der Eintrag in der Datei “70-persistent-net.rules”. Um dies zu ändern, öffnet man die besagte Datei

und löscht alle Einträge unterhalb der auskommentierten Kommentare. Nach einem Neustart kann die Karte verwendet werden. Hintergrund ist der, das die MAC-Adresse der Karte in die Datei “70-persistent-net.rules” geschrieben wird und sich diese bei einem Austausch der Karte ändert.

05

Optimierung des Kernels an seine Umgebung

Ich habe in der c’t 5/2011 einen Artikel gefunden, in dem es um die Anpassung des Kernels an seine Umgebung geht. Hierbei wird der Parameter “localmodconfig” verwendet, um alle nicht verwendeten Module des Kernels zu deaktivieren.

Nachdem man nun wie oben beschrieben seinen Kernel kompiliert und installiert hat, sollte man zuerst einen Export der laufenden Maschine machen, um zur Not auf diesen Stand zurückgreifen zu können und nicht von neu anfangen muss.

Hier erst einmal die Befehle die man benötigt, um eine Anpassung des Kernels zu bekommen (Zur Info: Wir bewegen uns weiterhin mit dem Kernel 2.6.38):

Hier eine Erklärung der Befehle:

Wir wechseln in das Verzeichnis /tmp, da die Dateien nach einem Neustart nicht mehr benötigt werden. Nach dem Wechsel laden wir den aktuellen Kernel herunter, entpacken ihn und wechseln in das Verzeichnis, welches während des Extrahierens erstellt wurde. Ein “make localmodconfig” bewirkt, das nun eine Überprüfung stattfindet, welche Module benötigt werden und welche nicht. Es erscheinen mehrere Nachfragen, die man eigentlich alle direkt mit Enter bestätigen kann (in dem ein oder anderen Fall kann es natürlich auch sein das man eigene Werte hat, dies ist aber nicht die Regel). An diesem Punkt kann man sich die Konfiguration mit einem “make menuconfig” anschauen und ggf. anpassen, in meinem Fall passt die Konfiguration allerdings. Der nächste Befehl bewirkt die Kompilierung, der Parameter “-j” und die dahinter gesetzte Zahl gibt an, wie viele Compiler-Aufgaben gleichzeitig ausgeführt werden dürfen. “make modules_install install” installiert die Module, und ein “reboot” sollte jedem klar sein :)

Meine beiden für diesen Test parallel installierten Debian-Systeme laufen beide problemlos und performant. Es werden alle konfigurierten CPUs sowie Netzwerkkarten genutzt, zusätzlich kann das System über den Hyper-V-Manager “von außen” heruntergefahren werden.

Jan Kappen
 

Jan Kappen ist ausgebildeter Fachinformatiker in der Richtung Systemintegration. Er hat seine Ausbildung im Sommer 2008 abgeschlossen und arbeitete bis August 2018 bei der Rachfahl IT-Solutions GmbH & Co. KG. Seit September 2018 arbeitet er als Senior Netzwerk- und Systemadministrator bei einem großen mittelständischen Unternehmen im schönen Sauerland. Jan Kappen ist unter anderen MCITP Server Administrator, Enterprise Administrator und Enterprise Messaging Administrator 2010 sowie MCTS für System Center Virtual Machine Manager 2008, Windows Server 2008 Active Directory, Windows Server Virtualization und Windows Server 2008 Network Infrastructure. Seit 2015 wird Jan Kappen im Bereich "File System Storage" bzw. "Cloud & Datacenter Management" für seine Expertise und seine Community-Arbeit mit dem MVP Award von Microsoft ausgezeichnet.

  • […] Das System läd nun alle benötigten Pakete herunter und beginnt mit dem Update. Während meines Updates kamen ein paar Meldungen mit Informationen und Warnungen, aber nach knapp 15 Minuten und einem Neustart war das System wieder online mit dem Kernel 2.6.32-5-686. Meine nächste Aufgabe ist es, einen Kernel mit Hyper-V Client-Treibern für das System zu kompilieren. […]

  • Mat sagt:

    Guten Tag

    Wie sind Ihre bisherigen Erfahrungen mit dem selbstgebauten Kerneln unter Debian Squeeze? – Stürzen Speicher/VMBusaber v.a. Netzwerktreiber nicht regelmässig bei mancher Last ab? – Zumindest geschieht das unter gewissen Umständen unter Ubuntu LTS leider regelmässig hier, während höher belastete Scientific Linux (RHEL) 5 daneben unbekümmert weitermacht.

    Leider konnte ich dieses Verhalten (andere heute behobene, schlimmere Bugs wie korrumpierte Dateisysteme) seit 2.6.33 unter Ubuntu Server verfolgen. Wenn das mit Lenny gut genug funktioniert, muss ich mir wirkliche Squeeze genauer anschauen, da es etwas moderner als als Ubuntu 10.04 LTS ist.

  • Jan Kappen sagt:

    Hallo Mat,
    bei uns läuft seit einiger Zeit intern ein Proxy unter Debian mit dem oben erwähnten Kernel 2.6.38 (und vorher einem 2.6.36) und zwei “richtigen” Netzwerkkarten unter Hyper-V, ich habe bisher noch keine Probleme feststellen können. Da das Teil allerdings “nur” als Proxy läuft würde ich nicht sagen das es unter besonders starker Last steht.
    Gruß, Jan

  • Daniel sagt:

    Guten Tag,
    mit dem Kernel 2.6.39 und 2.6.39.1 bleibt die Maschine beim Booten nach 5 Sekunden hängen.
    “fixing recursive fault but reboot is needed”

  • Jan Kappen sagt:

    Hallo Daniel,
    das habe ich auch schon feststellen müssen. Sobald es eine Lösung gibt bzw. wir wissen wie man einen lauffähigen Kernel mit Treiberunterstützung kompiliert wird hier auf der Seite ein Beitrag dazu kommen…
    Gruß, Jan

  • Daniel sagt:

    Gibts schon was neues bzgl. der Meldung?
    Ich habe mit dem hier angegebenen Kernel kompiliert und dennoch eine Meldung beim Booten wegen dem hv_vmbus\nhv_storvsc\nhv_blkvsc\nhv_netvsc

  • Jan Kappen sagt:

    Hallo Daniel,
    es gibt zwar was neues, aber aktuell keine Erfolgsmeldung. Ich habe eine Seite gefunden die anscheinen erfolgreich einen Kernel mit Additions kompilieren konnte und zum Download zur Verfügung stellt, das löst allerdings nicht das eigene Kompilier-Problem. Es gibt scheinbar einige Leute die das gleiche Problem haben, und da es auch Leute gibt die den Kernel erfolgreich kompiliert haben bin ich mir relativ sicher das ich in naher Zukunft ebenfalls erfolgreich einen 2.6.39 mit Additions kompiliert habe. Sobald dies passiert ist schreibe ich hier die Vorgehensweise… :)
    Gruß

  • Daniel sagt:

    Also unter 2.6.38 mit Hyper-v läuft das System stabil!

  • Daniel sagt:

    muss in den /etc/initramfs-tools/modules nun

    hv_vmbus
    nhv_storvsc
    nhv_blkvsc
    nhv_netvsc

    Quelle: siehe diese Seite oben

    oder

    hv_vmbus
    hv_storvsc
    hv_blkvsc
    hv_netvsc

    Quelle: http://blogs.technet.com/b/enterprise_admin/archive/2010/03/09/linux-and-hyper-v-the-easy-way-brown-and-serve.aspx

    rein?

  • Jan Kappen sagt:

    Hi,
    die untere Variante (ohne n). Das n erscheint in dem Befehl, weil das /n jeweils einen Zeilenumbruch macht. Die Datei sieht wie folgt aus:

    # List of modules that you want to include in your initramfs.
    # They will be loaded at boot time in the order below.
    #
    # Syntax: module_name [args …]
    #
    # You must run update-initramfs(8) to effect this change.
    #
    # Examples:
    #
    # raid1
    # sd_mod
    hv_vmbus
    hv_storvsc
    hv_blkvsc
    hv_netvsc

  • Jan Kappen sagt:

    Aktueller Stand mit dem Kernel 2.6.39.2:

    Mit einem Debian lässt sich der Kernel zwar kompilieren, die Maschine startet aber nicht. Mit einem Ubuntu lässt sich der Kernel kompilieren und die Maschine startet auch mit dem neuen Kernel, allerdings zeigt die Konsole nichts außer schwarz. Per Netzwerk ist das System erreichbar. Wenn ich nun diesen Kernel von dem Ubuntu auf das Debian-System kopiere und installiere, startet das Debian wie gewohnt mit dem Kernel 2.6.39.2, ist per Netzwerk erreichbar usw. Nur eine direkte Kompilierung auf dem Debian funktioniert (bisher) nicht. Ich bleibe aber dran :)

    Gruß, Jan

  • dynamind sagt:

    update-initramfs –u –k 2.6.38-hyperv
    schlägt bei mir fehl:
    root@octopus:/# update-initramfs –u –k 2.6.38-hyperv
    Invalid argument for option -k.
    Usage: /usr/sbin/update-initramfs [OPTION]…

    Options:
    -k [version] Specify kernel version or ‘all’
    -c Create a new initramfs
    -u Update an existing initramfs
    -d Remove an existing initramfs
    -t Take over a custom initramfs with this one
    -b Set alternate boot directory
    -v Be verbose
    -h This message

    k.A. warum!

  • Jan Kappen sagt:

    Hi,
    schreib den Befehl mal bitte manuell, beim Copy/Paste kann es sein das die Zeichen ersetzt werden. Ich habe öfters das Problem, das statt des “-” ein “.” erscheint. Evtl. erscheint bei dir ein Zeichen was aussieht wie “-” aber trotzdem ein anderes Zeichen ist. Ansonsten sollte es kein Problem geben, ich habe in letzter Zeit nach dieser Anleitung knapp 20x einen Kernel kompiliert, lief immer problemlos… :)

    Gruß, Jan

  • dynamind sagt:

    hast recht, aus einem Minus wurde ein Gedankenstrich.
    vielen lieben Dank für die Anleitung, einfach nur spitze!

  • dynamind sagt:

    sollte ich sonst noch irgendwas umstellen?
    w
    ährend dem Bootvorgang kommen bei mir ein paar Fehler, allerdings funktioniert alles: http://imageshack.us/f/801/octopush.jpg/

  • Jan Kappen sagt:

    Beim Kernel 3.0 kommen die Fehlermeldungen beim booten nicht mehr. Allerdings lässt sich der Kernel 3.0 ebenfalls nicht auf einem Debian-System kompilieren, über den Umweg der Kompilierung auf einem Ubuntu-System kann man sich aber problemlos einen 3.0-Kernel kompilieren und auf dem Debian installieren. Integrationsdienste laufen bisher problemlos und performant :)

    Gruß, Jan

  • dynamind sagt:

    Hallo Jan,

    ich habe die Hyper-V Linux Addons 3.0 (RPM) mit alien portiert, den 3.1.0-rc8 Kernel mit Hyper-V Extensions kompiliert und alles zusammengepackt unter http://goo.gl/wcAqy zum Download bereitgestellt.
    Wenn man nun die Module in /etc/initramfs-tools/modules

    hv_vmbus
    hv_storvsc
    hv_blkvsc
    hv_netvsc

    lädt bootet alles sauber & flott.

  • Jens sagt:

    Habe alles wie in der obigen Anleitung mit den Sources zum Kernel 2.6.38 ausgeführt. Scheinbar alles OK, Ubuntu bootet und läuft.

    Leider funktioniert die Maussteuerung immer noch nicht!
    Ich logge mich remote per RDP auf Server2008 R2 ein und nutze die die direkte Verbindung zur Ubuntu VM aus Hyper-V.

    Any hints?

  • Jan Kappen sagt:

    Hallo Jens, vorhin ist ein Artikel mit dem aktuellen Kernel online gegangen, schau dort mal rein, da ist beschrieben wie du die Maussteuerung online schaltest (.config editieren)
    Gruß, Jan

  • Jens sagt:

    Dumme Frage 2:

    wo finde ich den Artikel?

  • >