• 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…

apt-get update
aptitude update
apt-get install -y build-essential
apt-get install -y ncurses-dev kernel-package fakeroot
apt-get install -y linux-headers-`uname -r`
apt-get install -y linux-source-`uname -r | awk -F"-" '{print $1}'`
cd /usr/src
wget -c http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.38.tar.bz2
bzip2 -d linux-2.6.38.tar.bz2
tar xf linux-2.6.38.tar
cd linux-2.6.38
cp /boot/config* ./.config
make menuconfig

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:

make-kpkg clean
fakeroot make-kpkg --initrd --append-to-version=-hyperv kernel_image kernel_headers
cd ..
dpkg -i linux-image-2.6.38-hyperv_2.6.38-hyperv-10.00.Custom_amd64.deb linux-headers-2.6.38-hyperv_2.6.38-hyperv-10.00.Custom_amd64.deb
echo -e "hv_vmbus\nhv_storvsc\nhv_blkvsc\nhv_netvsc" >> /etc/initramfs-tools/modules
update-initramfs –u –k 2.6.38-hyperv

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

vi /etc/udev/rules.d/70-persistent-net.rules

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):

cd /tmp
wget -c http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.38.tar.bz2
tar -xif linux-2.6.38.tar.bz2
cd linux-2.6.38
make localmodconfig
make -j 4 bzImage modules
make modules_install install
reboot

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.

Comments are closed