Building a Kernel
So, so. Jetzt braucht unser eigenes kleines Linux eigentlich nur noch einen eigenen Kernel damit man es auch nutzen kann.
Wir sollten zwar weiterhin mit einer chroot umgebung daran arbeiten, allerdings ist ein Kernel natürlich dafür notwendig, das man sein Linux auch starten kann. Ansonsten könnte man ja nie die Früchte seiner Arbeit bewundern.
Gut, einen Kernel zu bauen hört sich schwieriger an, als es ist.
Es ist oft viel komplizierter irgendwelche pakete zu bauen, als einen Kernel. Das liegt daran, das der Kernel keine Abhängigkeiten hat.
Um den Kernel compilieren zu können, müssen wir folgende Pakete unter unserem kleinen Debian installieren.
gcc, make, libncurses5-dev, kernel-package wget bzip2 patch[/i]
also machen wir das mal schnell und schmerzlos mit apt[/i]
# apt-get install gcc, make, libncurses5-dev, kernel-package wget bzip2 patch
Eventuell möchte apt[/i] gleich noch ein paar Pakete mehr mit installieren, das ist OK.
Dafür haben wir schließlich apt[/i], damit es sich um die Abhängigkeiten kümmert.
So, es gibt von hier aus jetzt zwei Möglichkeiten.
Die Einfache und die etwas aufwendigere.
Bei der einfachen benutzt ihr einfach folgendes kleines Script, das ich geschrieben habe.
http://msys-online/download/kernel-build.sh
Das ladet ihr mit
# wget http://msys-online/download/kernel-build.sh
herunter und gebt dann nur noch
# sh kernel-build.sh
ein.
Das Script kümmert sich dann um alles.
Lädt die Quelle des aktuellen Kernel 2.6.12.2 runter, patcht diesen ein bisschen, compiliert diesen und baut zu guter letzt ein deb[/i] Paket, welches den Kernel enthält.
Aber schon mal als Warnung, das compilieren eines Kernel kann schon mal ein Stündchen dauern. Also nicht erschrecken.
Bei der aufwendigeren Möglichkeit muss man das selber machen, was ansonsten das Script macht.
Aber warum dami rum quälen, wenn es doch dieses Script gibt?
Weil es ja durchaus sein kann, das ein gewisses interrese am Lernen besteht.
Das Script ist für die jenigen gedacht, die sich vieleicht zum Anfang ihrer Linux Karriere etwas mit dem selbst bau eines Kernel überfordert fühlen. So ging es mir nämlich auch.
Oder für die jenigen, die nichts mehr lernen müssen und sich lieber die Tip arbeit sparen wollen. Scripte können das leben sehr vereinfachen.
So nun, wie man das jetzt selber macht.
Zuerst wechselt man mit
# cd /usr/src
in das Verzeichnis /usr/src. Dies ist das traditionelle Verzeichnis für die Kernel Sourcen.
Die Kernel Quellen laden wir von kernel.org runter mit
# wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.12.2.tar.bz2
und entpacken das ganze mit
# tar xvjf linux-2.6.12.2.tar.bz2
dann setzen wir einen soft Link von linux[/i] auf linux-2.6.12.2 mit
# ln -s linux-2.6.12.2 linux
und wechseln dann über den Link linux[/i] in das Verzeichnis linux-2.6.12.2.
# cd linux
Warum ist die Sache mit dem Link nötig?
Weil andere Programme die Kernel Quelle unter /usr/src/linux[/i] erwarten. Der Link sollte also immer auf die Quelle des aktuell verwendeten Kernel gerichtet sein.
So, der Kernel von Kernel.org ist ein sogenannter vanilla[/i] Kernel.
Um den Kernel etwas unseren bedürfnissen anzupassen und ihn mit Funktionen zu versehen, die nicht von grund auf in dem Kernel integriert sind, muss man den Kernel patchen[/i].
Wenn man das Script von oben benutzt, werden folgende Funktionen in den Kernel gepatcht.
Squashfs - Ein sehr schnelles hoch komprimiertes Read Only Datei System
Bootsplash - Erlaubt einen Bootsplash während des boot vorgangs, der über den Framebuffer
ausgegeben wird.
inotify - inorify erlaubt ein echtzeit indexing.
Wer will kann hier natürlich was auch immer in den Kernel patchen.
Aber so, werden die drei Dinge von oben gepatcht.
wget http://www.kernel.org/pub/linux/kernel/people/rml/inotify/v2.6/0.23/inotify-0.23-rml-2.6.12-15.patch && \
patch -p1 < inotify-0.23-rml-2.6.12-15.patch && \
wget http://www.bootsplash.de/files/bootsplash-3.1.6-2.6.12.diff && \
patch -p1 < bootsplash-3.1.6-2.6.12.diff && \
wget http://mesh.dl.sourceforge.net/sourceforge/squashfs/squashfs2.2.tar.gz && \
tar xvzf squashfs2.2.tar.gz && \
patch -p1 < squashfs2.2/linux-2.6.12/squashfs2.2-patch && \
rm -rf squashfs2.2
Jetzt muss der Kernel noch configuriert werden.
Ich habe hier eine .config die man nutzen kann. http://msys-online.de/download/2.6.12-config
Herunterlasen könnt ihr sie mit
# wget http://msys-online.de/download/2.6.12-config
damit sie auch verwendet wird, muss man sie noch in .config umbenennen.
# mv 2.6.12-config .config
und danach um die .config zu übergeben einfach ein
# make oldconfig
eingeben.
Wer die konfiguration seines Kernels lieber selbst übernehmen möchte, der sollte anstelle von make oldconfig[/i] lieber ein make menuconfig[/i] eingeben.
Daraufhin würde dann ein Konfigurationsmenü erscheinen.
Nachdem man den Kernel konfiguriert hat, braucht man den kernel nur noch compilieren.
Unter debian gibt es hierfür zum glück eine sehr einfache und elegante Lösung.
Debian kann aus dem Kernel im gegensatz zu anderen Distributionen nämlich ein .deb Paket bauen.
Dadurch kann man einen gebauten Kernel sowohl auch auf anderen systemen verwenden, als ihn auch ganz simpel installieren und auch wieder deinstallieren.
Um so ein Paket bauen zu lassen, muss man nur folgendes eingeben
# make-kpkg clean
säubert noch schnell das Verzeichnis und dann
# make-kpkg --initrd kernel_image
So, jetzt compiliert er.
Das kann wie gesagt etwas länger dauern.
Wenn das ganze fertig ist, befindet sich um schluss das Kernel Packet unter /usr/src[/i].
Das Kernel Paket läst sich dann einfach mit
# dpkg -i /usr/src/kernel-image-2.6.12.2_10.00.Custom_i386.deb
installieren.
Wenn man wärend dessen gefragt wird, ob man die Option initrd[/i] benutzen möchte, sollte man dieses mit ja beantworten.