Kernel unter FreeBSD selber machen

Aus Wiki.hidden.ch
Wechseln zu: Navigation, Suche

Eine sehr gute Anleitung ist im FreeBSD Handbuch zu finden. Aber dennoch führe ich dies hier Schritt für Schritt aus.

Updaten der Sources

Zunächst muss man sicherstellen, dass die Sources up-to-date sind.

-su-2.05b# cd /usr/src/
-su-2.05b# make update

Danach werden die ganzen Sources geupdated:

--------------------------------------------------------------
>>> Running /usr/local/bin/cvsup
--------------------------------------------------------------
Parsing supfile "/usr/share/examples/cvsup/stable-supfile"
Connecting to cvsup.ch.FreeBSD.org
Connected to cvsup.ch.FreeBSD.org
Server software version: SNAP_16_1h
Negotiating file attribute support
Exchanging collection information
Establishing multiplexed-mode data connection
Running
Updating collection src-all/cvs
 Edit src/UPDATING
  Add delta 1.342.2.27 2005.05.10.17.28.52 kensmith
...
Shutting down connection to server
Finished successfully

Als pflichtlektüre ist es wichtig, /usr/src/UPDATING kurz anzuschauen. Eventuell hat was wichtiges geändert (spart spätere Fehlersuche).


Erstellen/Bearbeiten der Kernel Konfiguration

Man sollte nicht am GENERIC File rumbasteln. Darum kopieren wir dieses und nennen es sinnvoll - ich benenne es immer nach dem ServerHostnamen wie z.B. 'Daisy'. Zudem wird bei einem Update das GENERIC-File immer wieder überschrieben.

-su-2.05b# cd /usr/src/sys/i386/conf/
-su-2.05b# cp GENERIC DAISY

Nun geht es darum, das File zu editieren (man nehme den Texteditor seiner Wahl - z.B. joe, vi, ee, etc.):

-su-2.05b# vi DAISY

Als praktisches hilfsmittel ist dmesg zu benutzen. Hier sieht man, welche devices man hat, wie z.b. fxp als Netzwerktreiber, einen i686-CPU, etc. Folgende spezifische Anpassungen mache ich immer (auszugsweise):

...
machine         i386                <- muss so bleiben bei i386er PC's
cpu             I686_CPU            <- I486_CPU & I586_CPU wird nicht benötigt, da ich einen 686er habe
ident           DAISY               <- am besten = Filename
...
options         SMP                 <- Wird benötigt für Multiprozessor Kisten (oder auch Hyperthreading)
device          apic    # I/O APIC  <- dies auch 
options         CPU_ENABLE_SSE      <- Aktiviert erweiterte Unterstützung bei Intel Prozessor
...
# Firewall Zeug
options         IPFIREWALL                   <- Aktiviere IPFW2 im Kernel 
options         IPFIREWALL_VERBOSE           <- Sonst gibts kein Logging 
options         IPFIREWALL_VERBOSE_LIMIT=512
options         IPFIREWALL_DEFAULT_TO_ACCEPT <- Tja, wenn man keine Rule hat, sperrt man sich aus. EMPFOHLEN!
...

Und dann kommen die ganzen, machinenspezifischen Sachen, wie Netzwerktreiber, WLAN etc. Am besten stelle ich einfach mal meine Kernelkonfiguration zur Verfügung.


Kernel kompilieren

Nun ist es Zeit, den Kernel zu Kompilieren:

-su-2.05b# cd /usr/src/
-su-2.05b# make buildkernel KERNCONF=DAISY

Nun heisst es warten, warten, warten ;-)

Tip: Die Variable KERNCONF kann auch im /etc/make.conf definiert werden.


Installation des neuen Kernels

Sobald der Kernel sauber kompiliert wurde (man erkennt es daran, dass die Kompilation nicht mit einem Fehler abgebrochen wurde), kann man den Kernel installieren:

-su-2.05b# make installkernel KERNCONF=DAISY

Kompilierung war erfolgreich:

...
--------------------------------------------------------------
>>> Kernel build for DAISY completed on Wed May 18 16:32:00 CEST 2005
--------------------------------------------------------------
-su-2.05b# 

Um den neuen Kernel aktiv werden zu lassen, heisst es: Rebooten!


Aktivieren von HyperThreading

Hyperthreading ist seit mitte 2005 aufgrund von Security-Problemen deaktiviert.

20050513:
       Intel Hyper-Threading is now disabled by default due to a
       security issue, but can be re-enabled by setting the
       machdep.hyperthreading_allowed tunable in /boot/loader.conf.

Um Hyperthreading zu aktivieren, muss man folgende Zeile ins /boot/loader.conf reinpacken:

...
machdep.hyperthreading_allowed=1
...

Sollte der Server nicht booten

Auch im FreeBSD-Handbuch findet man eine nützliche Hilfe dazu.

World-Updaten

Neben dem Kernel sollte man auch darauf achten, dass die Userworld immer up to date ist. Das heisst, dass wir das komplette Basissystem schön aktuell halten. Nur so kriegt man die Sicherheitslöcher aus den ganzen Basis-Tools (wie z.B. su, etc.).

Auch hier bietet das FreeBSD-Handbuch wieder eine gute Grundlage, wie man vorgehen muss.


Basissystem kompilieren

Jetzt wird es zeit, dass wir die ganzen Tools neu kompilieren:

-su-2.05b# cd /usr/src
-su-2.05b# make buildworld

Nun Kompiliert er wieder eine Weile...


Neues Basissystem installieren

Nachdem der Server wieder oben ist, und der neue Kernel aktiv seinen Job tut, starten wir das System im Single-User-Modus (Eingabe von boot -s am Loaderprompt). Danach führen wir folgende Anweisungen aus:

-su-2.05b# cd /usr/src
-su-2.05b# mergemaster -p

Dann installieren wir das neue Basissystem:

-su-2.05b# make installworld

Und aktualisieren die ganzen Dateien im /etc

-su-2.05b# mergemaster

Am schluss booten wir wieder...

-su-2.05b# reboot

... und wenn alles gut ging, läuft unser System mit dem neuen Kernel und dem neuen Basissystem:

-su-2.05b# uname -a
FreeBSD temp.mrmouse.ch 5.4-STABLE FreeBSD 5.4-STABLE #0: Thu Apr 28 23:58:48 CEST 2005     root@temp.mrmouse.ch:/usr/obj/usr/src/sys/DAISY  i386
-su-2.05b#