Kernel unter FreeBSD selber machen
Eine sehr gute Anleitung ist im FreeBSD Handbuch zu finden. Aber dennoch führe ich dies hier Schritt für Schritt aus.
Inhaltsverzeichnis |
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#