Sunt cateva motive pentru a-ti compila un kernel propriu, diferit de cel standard.
1. Kernelul standard suporta o multime de hardware, si ocupa degeaba memoria sistemului.
2. Vreti sa incercati optiuni care nu sunt incluse in kernelul default, sau sa scoateti optiuni de care nu aveti nevoie ( de exemplu suport de XFree86 sau pcmcia device-uri pe un server).
3. Vreti sa activati optiuni experimentale.
Un inconvenient - developerii ignora bug reporturile de pe masini cu kernel diferit de cel generic.
Pentru recompilarea kernelului avem nevoie de sursele sale in directorul /usr/src, pe care le putem lua de pe unul din serverele ftp,http sau rsync, mirroruri ale openbsd.org.
Lista poate fi gasita pe openbsd.org/ftp.html
Sursele kernelului se gasesc intr-o arhiva de tipul sys.tar.gz.
Odata downloadate, sursa trebuie dezarhivata:
root@sh:/usr/src# cd /usr/src/ root@sh:/usr/src# tar -xzvf sys.tar.gz
Urmeaza sa updatam sursele kernelului prin CVS.
Daca nu avem setata variabila CVSROOT, o setam in fisierul ~/.profile
, sau prin comanda
export CVSROOT=anoncvs@anoncvs.openbsd.org.ua:/cvs
sau oricare cvs server mai apropiat.
root@sh:/usr/src# cvs get -rOPENBSD_3_4 -P sys root@openbsd:/usr/src# cvs get -rOPENBSD_3_4 -P sys cvs server: Updating sys cvs server: Updating sys/adosfs cvs server: Updating sys/altq cvs server: Updating sys/arch cvs server: Updating sys/arch/alpha etc ... root@sh:/usr/src# cd /usr/src/sys/arch/i386/conf/ root@sh:/usr/src/sys/arch/i386/conf# cp GENERIC mykernel
Urmeaza sa redactam cu editorul preferat fisierul mykernel (va mai dura mult pana ce cei de la OpenBSD vor scoate un utilitar comod, cum este cel din Linux, bazat pe ncurses, la make menuconfig.
Comentand o linie cu # scoatem optiunea respectiva din kernel, respectiv decomentand o optiune, o activam in kernel.
Daca vrem sa deactivati o optiune deja activata anterior, puteti face asta creand o linie de tipul
rmoption [optiune]
Toate optiunile posibile pot fi vizualizate citind manul la options.
root@sh:/usr/src/sys/arch/i386/conf# man options
Voi comenta mai jos cateva optiuni pe care le-am considerat mai speciale.
Liniile de mai jos specifica tipul procesorului. Am nevoie doar de i686_CPU, asa ca restul le-am comentat.
#option I386_CPU # CPU classes; at least one is REQUIRED #option I486_CPU #option I586_CPU option I686_CPU
La fel am comentat si linia
#option APERTURE # in-kernel aperture driver for XFree86
fiindca nu am nevoie de X pe un server.
Daca avem nevoie de compatibilitate cu binarele altor OS, lasam liniile necomentate.
In cazul meu am lasat:
#option COMPAT_SVR4 # binary compatibility with SVR4 #option COMPAT_IBCS2 # binary compatibility with SCO and ISC option COMPAT_LINUX # binary compatibility with Linux option COMPAT_FREEBSD # binary compatibility with FreeBSD #option COMPAT_BSDOS # binary compatibility with BSD/OS option COMPAT_AOUT #suport pentru binarele vechi a.out
Numarul aproximativ de useri pe masina:
maxusers 2000 # estimated number of users
Sistemul pe care am recompilat kernelul este un server ce ofera shell hosting, deci va avea un numar impresionant de useri.
In continuare urmeaza o multime de hardware, suport pentru care contine kernelul default.
Cititi cu atentie comentariile fiecarei linii, si lasati suport doar pentru hardwarele pe care il aveti acum, sau pe care il veti putea avea.
Eu am scos totul legat de usb,audio,firewire,pcmcia,joystickuri,etc... tot de ce nu am nevoie pe un server.
Daca doriti o configurare mai fina, puteti redacta si fisierul Makefile.i386
, aflat in acelasi director.
Eu am modificat variabilele CPPFLAGS
si CMACHFLAGS
.
Dupa ce ati incheiat redactarile, urmeaza procesul de compilare propriu-zis.
root@sh:/usr/src/sys/arch/i386/conf# config mykernel root@sh:/usr/src/sys/arch/i386/conf# cd compile/mykernel/ root@sh:/usr/src/sys/arch/i386/compile/mykernel# make clean root@sh:/usr/src/sys/arch/i386/compile/mykernel# make depend root@sh:/usr/src/sys/arch/i386/compile/mykernel# make
Pastram kernelul vechi pentru orice eventualitate ca bsd.generik
root@sh:/usr/src/sys/arch/i386/compile/mykernel# cp /bsd /bsd.generik
Schimbam kernelul generik cu cel compilat de noi:
root@sh:/usr/src/sys/arch/i386/compile/mykernel# cp bsd /bsd
Reboot.