Techdudes

Der volle Kanne Blog!

(RHEL 6 / CentOS 6): vanilla Kernel für Xen 4 – Pakete bauen

| Keine Kommentare

Nachdem es in den anderen beiden Beiträgen (Kernel, Xen) um das Bauen des Kernels und Xen von Hand ging, möchte ich heute darüber schreiben, wie ich die Sache ein wenig automatisiert bekommen habe (nur ein wenig) und mir RPMs zum verteilen bastele. Zuerst geht es darum ein RPM für den vanilla Kernel zu bauen und dieses immer Xen tauglich zu halten, danach geht es darum ein Paket für Xen zu bauen, um die Installation zu vereinfachen.

Ich hatte dazu bereits einen langen Artikel vorbereitet und ein abgespecktes Kernel-Specfile auf Basis von FC17 gebastelt. Aber ich bin auf den Blog von Steve gestoßen und sein Spec-File hatte im wesentlichen die gleichen Züge, sodass ich dieses als neue Basis für meine RPMS benutze und etwas angepasst habe (Patches entfernt etc.).

1. Bootstrapping – Einrichten einer passenden Umgebung

Um uns ersteinmal eine geeignete Umgebung zu schaffen, sollten (wie im anderen Vanilla-Kernel-Howto beschrieben) ein paar Development-Pakete installiert sein. Dazu als root

yum groupinstall development
yum install ncurses-devel rpmdevtools rpm-devel bc pciutils-devel zlib-devel
yum install asciidoc hmaccalc perl-ExtUtils-Embed xmlto audit-libs-devel
yum install binutils-devel elfutils-devel elfutils-libelf-devel newt-devel python-devel

Danach sollte man als normaler(!) User eine Umgebung fürs RPM-bauen einrichten. In meinem Fall habe ich den User für dieses Tutorial ‚kernelbau-dennis‘ genannt:

rpmdev-setuptree

2. Kernel herunterladen

Als nächstes brauchen wir den aktuellen Kernel. Zum Zeitpunkt des letzten Updates dieses Artikels war das 3.10.4, bitte vorher auf der Seite schauen, welche Version gerade aktuell ist und den Wget-Aufruf entsprechend anpassen.

cd /home/kernelbau-dennis/SOURCES
wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.10.4.tar.xz
tar -xJvf linux-3.10.4.tar.xz
cd linux-3.10.4

3. Kernel Config erstmalig anpassen

Angenommen wir bauen zum ersten mal einen neuen Kernel, dann ist der Versionssprung von 2.6.32 auf 3.9.x oder höher doch sehr groß. Das würde dafür sorgen, dass wir lange Zeit vor make oldconfig verbringen, daher übernehme ich Anfangs die Konfiguration von Kernel.org und passe sie in einigen Punkten für Xen an. Etwas detaillierter habe ich das ganze im Abschnitt „Kernelconfigs anpassen“ im anderen Xen/Kernel-Tutorial Teil 1 beschrieben. Dieser Schritt ist so nur einmal nötig und stellt unsere erste Config dar, auf der wir aufsetzen und Veränderungen/Updates durchführen.

Ein

make menuconfig

bringt uns in die „grafische“ Konfiguration.

Update: Seit Kernel Version 3.10 ist es notwendig, dass man erst einmal „Linux guests“ aktiviert, bevor man überhaupt die Optionen für die Xen-Module angezeigt bekommt.

  • -> Processor type and features:
    • Linux guest support: *

    kernelparameter_ab310_003

  • -> Device Drivers -> Network device support:
    • Xen network device frontend driver: *
    • Xen backend network device: M

    kernelparameter_ab310_004

  • -> Device Drivers -> Block devices:
    • Xen virtual block device support: *
    • Xen block-device backend driver: M

    kernelparameter_ab310_006

Wenn alle Einstellungen vorgenommen sind, müssen wir das Configfile noch speichern – am besten gleich mit passendem Namen. Hierzu einfach unten „save“ auswählen und bei der Eingabe die Datei mit „config-3.10.x86_64“ benennen, wobei je nach Kernelversion das Schema „config-$major.$minor.x86_64“ lautet.

kernelparameter_ab310_009 kernelparameter_ab310_010

 

 

 

 

 

 

 

Wichtig ist, dass wir sicherstellen, dass die Xen-Frontendmodule fest einkompiliert werden, und die Backends als Module vorhanden sind (hier ein Auszug aus dem anderen Howto):

Auszug: cat config-3.10.x86_64 | grep -i xen | grep NETDEV:

CONFIG_XEN_NETDEV_FRONTEND=y
CONFIG_XEN_NETDEV_BACKEND=m

cat config-3.10.x86_64 | grep -i xen | grep BLKDEV:

CONFIG_XEN_BLKDEV_FRONTEND=y
CONFIG_XEN_BLKDEV_BACKEND=m

Danach kopieren wir die nun erstellte Config eine Ebene tiefer und löschen den entpackten Kernel.

cp config-3.10.x86_64 ..
cd ..
rm -rf linux-3.10.4

4. SpecFile anpassen

Zu guter letzt wird noch das Specfile benötigt. Ich habe meines hier zu Verfügung gestellt, das Specfile ist auch im SRPM vorhanden.

cd /home/kernelbau-dennis/rpmbuild/SPEC
wget http://www.techdudes.de/download/kernelspecfile-dennis.spec
vi /home/kernelbau-dennis/rpmbuild/SPEC/kernelspecfile-dennis.spec

Danach müssen die Versionen im Specfile angepasst werden, sodass die auf die Kernelversion passen.

%define kvmajor 3.10
%define kvminor 4
%define pkg_release 1
%define KRELEASE %{kvmajor}.%{kvminor}-%{release}.%{_target_cpu}
%define rhel 6

5. Paket bauen lassen

Um den Bauprozess zu starten, gehen wir in das SPEC Verzeichnis und setzen den rpmbuild Befehl ab.

rpmbuild -ba kernel-xen-dw.spec

Dann etwas warten, ob evtl. nachfragen von make oldconfig kommen. Immer wenn jetzt wieder an der Stelle ein Kernel gebaut werden soll, sorgt das Script dafür, das mit make oldconfig erst einmal ein abgleich zur neueren Kernelversion in der Configdatei vorgenommen wird.

Sollten Probleme auftreten, ist es evtl. sinnvoll das Debug-output zu speichern:

rpmbuild -ba kernel-xen-dw.spec 2> build-err.log | \tee build-out.log

Wenn alles glatt geht, können wir nun die fertigen Pakete unter rpmbuild/RPMS finden:

[kernelbau-dennis@xs1-xenbau x86_64]$ ls /home/kernelbau-dennis/rpmbuild/RPMS/x86_64
 kernel-xen-3.10.4-1.el6xen.x86_64.rpm
 kernel-xen-devel-3.10.4-1.el6xen.x86_64.rpm
 kernel-xen-firmware-3.10.4-1.el6xen.x86_64.rpm
 kernel-xen-headers-3.10.4-1.el6xen.x86_64.rpm

Das war´s soweit erstmal für das Xen-fähige Kernel-Paket 🙂

6. Repositories von Dritten

Ich baue mein Paket gerne selbst, weil ich auch die Konfigurationen gerne selbst anpasse. Das Specfile basiert mittlerweile auf dem von Steve und ich werde weiter dran rumbasteln. Für Xen prüfe ich ebenfalls, ob ich meine Files über Bord werfe und neu auf Basis von Choon oder Steve beginne. Wem das alles jedoch zuviel Arbeit ist, kann sich die Kernel und Xen Pakete von Choon und Steve ansehen. Beide betreiben eigene Repositories.

Artikel teilen:

Schreibe einen Kommentar

Pflichtfelder sind mit * markiert.


Durch das Fortsetzen der Benutzung dieser Seite, stimmst du der Benutzung von Cookies zu. Weitere Informationen

Die Cookie-Einstellungen auf dieser Website sind auf "Cookies zulassen", um Ihnen das beste Surferlebnis möglich zu geben. Wenn Sie diese Website ohne Änderung Ihrer Cookie-Einstellungen zu verwenden fortzufahren, oder klicken Sie auf "Akzeptieren" unten, dann erklären Sie sich mit diesen.

Schließen