Betrifft OS:
NetBSD

Kernel erstellen (NetBSD)

Kernelquellcode besorgen

Der NetBSD-Kernel ist ein monolithischer Kernel, d.h. daß alle Devices bzw. die Hardware-Treiber in den Kernel statisch eingebunden werden. Wobei es auch beim NetBSD-Kernel LKM (Loadable Kernel Modules) gibt.

Die Kernel-Quellen bekommt ihr vom NetBSD-FTP:

ftp://ftp.netbsd.org/pub/NetBSD/<euer-NetBSD-release>/source/sets/syssrc.tgz

Wenn ihr die Kernel-Quellen habt, müsst ihr sie nur noch nach /usr/src entpacken:

# cd /
# tar xzfv /pfad/zu/syssrc.tgz

Sicherheitseinstellungen im NetBSD-Kernel

Die Kernel-Konfigurationsdatei findet ihr jetzt unter /usr/src/sys/arch/i386/conf. Ihr solltet eine Kopie von GENERIC anlegen und eure neue Datei dann editieren.

# cp GENERIC MYKERNEL

Es gibt einige Einstellungen die man beim NetBSD-GENERIC-Kernel ändern sollte, wenn man einen sicheren Server betreiben will.

options INSECURE

sollte auskommentiert werden, da sonst das System im „unsicheren Modus“ läuft, (Ebene -1) d.h. es sind alle Geräte und unveränderliche Dateien zugänglich. Wenn das auskommentiert wird, läuft der Server im „sicheren Modus“ (Ebene 1), d.h. daß unveränderliche Dateien nicht verändert und manche Geräte nicht mehr modifiziert werden können. Diese Option kann auch in der /etc/rc.conf auf 2 gesetzt werden (ist im Zusammenspiel mit File-Flags wichtig)

options LKM

sollte auskommentiert werden, da es bei NetBSD sowieso keine wichtigen Module gibt und man am besten alles in den Kernel statisch einbindet auf einem Server. Zu aller letzt sollte man alles, was man nicht braucht, auf dem Server (usb, audio, joystick, IPv6 etc.) auskommentieren.

Hier kann euch das Perl-Skript adjustkernel helfen, das ihr in pkgsrc findet. /usr/pkgsrc/sysutils/adjustkernel Ich selbst habe es noch nie getestet, aber es erstellt anhand von dmesg eine Kernel-Konfigurationsdatei, womit zwangsläufig alles hinausgeworfen wird, was unnötig ist.

Kernel kompilieren

Mit folgenden Kommandos kompiliert man den Kernel:

# config MYKERNEL

Im Verzeichnis /usr/src/sys/arch/i386/conf diesen Befehl aufrufen mit dem Namen eurer Kernel-Konfigurationsdatei.

# cd ../compile/MYKERNEL

in das Verzeichnis wechseln in dem die Dateien liegen, die zum Kompilieren benötigt werden, und durch das config angelegt wurden.

# make depend
# make

mit make depend wird überprüft, was neu kompiliert werden muss. Make erzeugt anschließend den Kernel.

Für die Orientierung sind hier die Werte (Kompilierzeit) meiner (moR-pH-euS) Server:

Auf einem Pentium 200Mhz mit 48MB Ram:

make depend (mit GENERIC) 5 Min.
make depend (mit MYKERNEL) 2:30 Min
make (GENERIC)  58 Min.
make (MYKERNEL) 25 Min.
Auf einem Pentium II 266Mhz mit 128MB Ram:

make depend (MYKERNEL) 3:30 Min
make (MYKERNEL) 34 Min.

Warum der eigentlich schnellere Server trotzdem länger braucht, kann ich leider nicht nachvollziehen. Der Unterschied liegt aber wahrscheinlich an den verschiedenen Releases, bei meinem alten Server hatte ich NetBSD 1.6.2 und auf meinem neuen ist NetBSD 2.0. Da die Kernel bei NetBSD 2.0 auch um ein paar MB größer sind.

Kernel installieren

Nun muss der frisch gebackene Kernel noch nach / verschoben werden. Vorher sichern wir den alten, damit, falls etwas schief ging, wir noch von ihm booten können

# mv /netbsd /netbsd.old

Hier gehe ich davon aus, daß ihr immernoch im Kompilierungsverzeichnis des Kernels seid (/usr/src/sys/arch/i386/compile/MYKERNEL)

# cp netbsd /netbsd

Ein kurzer Vergleich der größe des GENERIC-Kernels und des angepassten Kernels:

morpheus@netbsd-gw# ls -l netbsd*
-rwxr-xr-x 1 root wheel 1825789 Jan 11 15:46 netbsd
-rwxr-xr-x 1 root wheel 6254651 Jan 5 16:07 netbsd.old <br />
morpheus@netbsd-gw# du -m netbsd*
2 netbsd
6 netbsd.old

d.h. von 6MB auf 2MB verkleinert, wodurch er auch wieder weniger Speicher fressen wird, was auf alten Maschinen auch sinnvoll ist.

Siehe auch

<!– HowTo erstellt von moR-pH-euS; fürs Wiki bearbeitet von steinlaus –>