Kärnkompilering i OpenBSD
Från Unix.se, den fria unixresursen.
I denna artikel beskrivs varför man skulle vilja kompilera om kärnan i OpenBSD och naturligtvis hur man gör det. Att det finns ett uppdaterat källkodsträd på systemet förutsätts. Hur man uppdaterar/tar hem sitt källkodsträd kommer inte att tas upp, det finns att läsa i OpenBSD utmärkta FAQ: http://www.openbsd.org/faq/upgrade-minifaq.html#1.4.
Varför?
På många andra unixliknande system måste man kompilera om kärnan för att systemet ska hitta ny hårdvara. Så är inte fallet när det gäller OpenBSD. En standardinstallation av OpenBSD installerar nämligen en s.k. GENERIC-kärna, som innehåller stöd för all hårdvara som OpenBSD stödjer.
Varför vill man då kompilera om kärnan i OpenBSD? Ett skäl kan vara att det har släppts en patch som täpper igen ett säkerhetshål. Då har man oftast uppdaterat sitt källkodsträd med CVS(up) eller dylikt innan man kompilerar om kärnan. Ett annat skäl kan vara att man har en dator med väldigt lite RAM-minne, och därför vill minska storleken på kärnan. Naturligtvis kan man ta bort funktioner som man inte använder, men om man har tillräckligt med RAM-minne är detta oftast onödigt, och risken finns att det bara skapar problem. Om du använder någon annan kärna än GENERIC kommer inte OpenBSD-utvecklarna att vara så pigga på att hjälpa dig om du får problem.
Hur?
Det första vi måste göra är att "konfigurera" vår kärna. Då väljer vi vad får kärna ska stödja (hårdvara och annat). Eftersom vi ska använda oss av GENERIC-kärnans konfiguration, och inte ta bort/lägga till något, är detta steg inte alls krångligt: (OBS: byt ut i386 mot t.ex. sparc eller alpha eller vad du nu har om det inte är x86.)
# cd /usr/src/sys/arch/i386/conf/ # config GENERIC
Klart! Nästa steg blir nu att kompilera kärnan. Detta steg innefattar även två mindre steg för att se till att miljön som kärnan ska kompileras i är "ren", samt att alla nödvändiga temporära filer skapas.
# cd ../compile/GENERIC # make clean && make depend && make
Om kompileringen slutfördes utan några felmeddelanden har du nu en ny och fräsch OpenBSD-kärna i samma katalog som du står i:
# ls -la bsd -rwxr-xr-x 1 root wheel 4.3M Jan 07 00:29 bsd
För att OpenBSD vid nästa reboot ska hitta denna kärna och faktiskt boota med den måste vi flytta den. Först flyttar vi dock undan den gamla kärnan, som vi måste kunna boota med om den nya mot förmodan inte skulle fungera.
# mv /bsd /bsd.old && mv bsd /
Nu kan du starta om maskinen och hoppas på det bästa, nämligen att den nya kärnan startar som den ska. Om det nu skulle bli något fel, och du vill boota med den gamla kärnan, så skriver du bara "bsd.old" vid prompten som lyder "boot>" vid uppstart:
boot> bsd.old
Om du vill kontrollera att det verkligen är din nya som används kan du köra följande kommando:
# grep -A1 OpenBSD /var/run/dmesg.boot
Då bör det stå nånting som börjar med "root@ditt datornamn" på andra raden.
Pytteliten kärna?
För de flesta av oss finns det inget som motiverar att köra något annat än en GENERIC-kärna, men som sades i början av denna artikel finns det tillfällen när man kanske måste minska ner storleken på kärnan. Då tar man oftast bort allt hårdvarustöd man inte behöver, men man kan även ta bort de funktioner i kärnan man inte behöver.
Hur gör man då för att inte ta med allt detta i kärnan då? Jo, man redigerar helt enkelt en textfil. Kommer ni ihåg när vi körde "config GENERIC" tidigare? GENERIC var i det fallet en vanlig textfil, och det är den vi ska utgå ifrån nu. För att behålla konfigurationsfilen för GENERIC-kärnan kopierar vi den till en ny fil, det är i denna vi ska göra våra ändringar. Det är kutym inom BSD-världen att döpa konfigurationsfilen till vad datorn heter.
# cd /usr/src/sys/arch/i386/conf # cp GENERIC STEF
Datorn i detta exempel heter alltså "stef". Då kan vi sätta igång att editera vår egna konfigurationsfil med valfri texteditor. Som du ser finns det en hel del mer eller mindre intressant att läsa i denna fil, det mesta är dock bra kommenterat. Nu är det bara att sätta igång och kommentera bort stödet för hårdvara du inte har, samt funktioner du tycker låter obskyra. Man-sidan för options(4) kan vara bra att läsa i det här läget.
Det bör nämnas att från vår konfigurationsfil inkluderas även en annan konfigurationsfil, nämligen "../../../conf/GENERIC", detta blir i praktiken "/usr/src/sys/conf/GENERIC" om allt står rätt till. Denna fil används på alla platformar, och innehåller endast definitioner för vissa huvudfunktioner. Man bör nog inte pilla alltför mycket i denna fil, men om du känner dig äventyrslysten kan du ju testa. Kom i så fall ihåg att göra som med GENERIC-filen i arch/i386/conf; kopiera den till en fil med samma namn som din dator. Du måste även ändra även på inkluderingsraden högst upp i "arch/conf/i386/datornamn".
Nu när du har en konfigureringsfil som innehåller precis det du tycker är nödvändigt fortsätter du precis som i fallet med GENERIC-kärnan, det enda som skiljer är vilken katalog du går till innan du kör make-kommandona. Om konfigureringsfilen heter "STEF" blir det alltså "/usr/src/sys/arch/i386/compile/STEF" man går till.
Om du har tur lyckas hela kompileringen. Om något går fel kan man oftast lista ut vad i konfigurationsfilen man måste ta tillbaka.
Att kompilera sin kärna kan vara nödvändigt i vissa fall, men i det flesta fall är det bättre att använda GENERIC. Får du problem med en egen kompilerad kärna kommer det vara väldigt svårt att få hjälp via epostlistorna (http://www.openbsd.org/mail.html).
Lycka till med dina kompileringar nu, och glöm inte att köpa en OpenBSD-CD (http://www.openbsd.org/orders.html)!