Kernel backen unter NetBSD

[moR-pH-euS]

Magnum P.I.
Der NetBSD Kernel ist ein monolithischer Kernel, d.h. das alle devices bzw.
die Hardware-Treiber in den Kernel statisch eingebunden weren. Wobei es auch beim
NetBSD-Kernel LKM (Loadable Kernel Modules) gibt.
Die Kernel-Sourcen bekommt ihr vom NetBSD-FTP:

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

Wenn ihr die Kernel Sourcen habt, muesst ihr sie nur noch nach /usr/src entpacken:

# cd /

# tar xzfv /pfad/zu/syssrc.tgz


1. 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 aendern sollte, wenn
man einen sicheren Server betreiben will.

options INSECURE

sollte auskommentiert werden, da sonst das System im "unsicheren Modus" laeuft, (Ebene -1)
d.h. es sind alle Geraete und unveraenderliche Dateien zugaenglich. Wenn das
auskommentiert wird laueft der Server im "sicheren Modus" (Ebene 1), d.h. das
unveraenderliche Dateien auch nicht veraendert werden koennen und manche Geraete nicht
mehr modifiziert werden koennen.
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.

Zuallerletzt sollte man alles was man nicht braucht auf dem Server (usb, audio,
joystick, IPv6 etc.) rauschmeissen bzw. auskommentieren.
Hier kann euch das Perl-Script adjustkernel helfen, das ihr in dem pkgsrc findet.
/usr/pkgsrc/sysutils/adjustkernel
Ich selbst habe es noch nie getestet, aber es erstellt anhand von dmesg eine
Kernel-config womit zwangslaeufig alles rausfliegt was unnoetig ist an Hardware
und es soll auch ganz gut funktionieren.

Im Anhang findet ihr meine Kernel-Config auf der alles geloescht bzw. auskommentiert
wurde was nicht an Hardware vorhanden ist (das gleiche gilt fuer Dateisysteme,
Treiber fuer Netzwerkkarten etc.). Diese Kernel-Config ist nur als Beispiel
gedacht da sie nur auf meinem Rechner laeuft, wenn ihr sie verwenden wollt
muesst ihr sie dementsprechend anpassen (die richtigen Treiber fuer die
Netzwerkkarte setzen, etc.)


2. Kernel kompilieren und installieren

Mit folgenden Kommandos kompiliert man den Kernel:

# config MYKERNEL

also im Verzeichniss /usr/src/sys/arch/i386/conf diesen Befehl aufrufen mit dem
Namen eurer Kernel-Config.

# cd ../compile/MYKERNEL

in das verzeichniss wechseln in dem die Dateien liegen die zum Kompilieren benoetigt
werden und durch das config angelegt wurden.

# make depend

# make

mit make depend wird ueberprueft was neu kompiliert werden muss und make erzeugt den
Kernel. Das make depend hat auf meinem Pentium 200Mhz mit 56MB Ram beim Generic 5Min.
gedauert, bei meinem angepassten 2:30Min, das make beim Generic fast eine Stunde und
beim angepassten 25Min.

danach muss der frisch gebackene Kernel noch nach / verschoben werden. Vorher
sichern wir den alten, damit falss etwas schief ging, wir noch von ihm booten koennen

# mv /netbsd /netbsd.old

hier gehe ich davon aus ihr immernoch im Kompilierungsverzeichniss des Kernels seid
(/usr/src/sys/arch/i386/compile/MYKERNEL)
# cp netbsd /netbsd

und hier ist noch ein kurzer vergleich der groesse des Generic-Kernels und
dem angepassten Kernel:

morpheus@netbsd-gw# ls -la 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


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.

wenn ihr mehr ueber den Kernel wissen wollt, oder wenn beim kompilieren etwas schief
ging schaut am besten in das Handbuch von NetBSD:

http://www.netbsd.org/guide/en/chap-kernel.html


bei fehlern bitte eine pm an mich...
 
Zuletzt bearbeitet:
Ich möchte nur mal anmerken das bei gewissen versionssprüngen ( kann mich dunkel an ein 1.6.1 -> -current errinnern ) das config-command nicht richtig funktioniert hat. wenn es komische fehlermeldungen gibt, hat man mit der "neuen" Methode mehr erfolg:

cd /usr/src/
./build.sh kernel=MYKERNEL
 
Ich empfehle ein schlichtes Update des config Programms. ;)

cd /usr
wget ftp://ftp.netbsd.org/pub/NetBSD/<euer-NetBSD-release>/tar_files/src/config.tar.gz
tar xzvf config.tar.gz
cd /usr/src/usr.sbin/config
make

Danach dann:
also im Verzeichniss /usr/src/sys/arch/i386/conf diesen Befehl aufrufen mit dem
Namen eurer Kernel-Config:
/usr/src/usr.sbin/config MYKERNEL


-- Leider weiß ich nicht, wo das config bin standardmäßig abgelegt wird, da ich momentan keine NetBSD Maschine in Reichweite habe. :(
 
Wenn man alle sourcen in /usr/src hat, kann man den Kernel auf so backen:
Configuration erstellen, wie gewohnt in sys/arch/<arch>/conf abspeichern und dann
Code:
$ cd /usr/src
$ ./build.sh -m <arch> tools
$ ./build.sh -u -m <arch> kernel=<confname>
hiermit kann man ihn auf für andere Architekturen crosscompilieren. <arch> ist hier die Zielarchitektur und <confname> der Name der Configurationsdatei (z.B. GENERIC)
 
Zurück
Oben