Kompilera 2.4-kärna

Nedan beskrivs hur du konfiguerar, kompilerar och installerar en 2.4-kärna.

Notera att du bör köra med minst en 2.4.4-kärna eftersom det i de tidigare 2.4-kärnorna finns ett säkerhetshål i ip_conntrack_ftp för ftp-svarstrafik. Nytt i nyare 2.4-kärnor finns förutom stöd för fler nätverkskort, IO-kort och watchdogkretsar även stöd för bluetooth.

Om du använder en 2.4-kärna äldre än 2.4.12 och använder MAC-modulen för matchning av MAC-adresser (ethernetadresser) behöver du patcha filen ipt_mac.c. på grund av ett säkerhetshål. Använder du en 2.4-kärna och har brandväggsregler men inga som matchar mot MAC-adresser eller kör en 2.4.12-kärna eller nyare behöver du inte oroa dig. Patchen som ska appliceras är följande:

--- linux-2.4.9/net/ipv4/netfilter/ipt_mac.c    Tue Oct  2 18:50:56 2001
+++ linux-2.4.9-ipt_mac-fix/net/ipv4/netfilter/ipt_mac.c        Tue Oct  2
19:32:20 2001
@@ -20,7 +20,7 @@

     /* Is mac pointer valid? */
     return (skb->mac.raw >= skb->head
-           && skb->mac.raw < skb->head + skb->len - ETH_HLEN
+           && (skb->mac.raw + ETH_HLEN) <= skb->data
            /* If so, compare... */
            && ((memcmp(skb->mac.ethernet->h_source, info->srcaddr, ETH_ALEN)
                == 0) ^ info->invert));


Vet du inte hur man applicerar en patch öppna filen /usr/src/linux/net/ipv4/netfilter/ipt_mac.c och ändra raden (bör vara rad 23 eller däromkring) från
&& skb->mac.raw < skb->head + skb->len - ETH_HLEN
till
&& (skb->mac.raw + ETH_HLEN) <= skb->data

Minustecken i patchen ovan betyder ändra från/ta bort och plustecknet betyder ändra till/lägg till. I det här fallet är det ändra från && skb->mac.raw < skb->head + skb->len - ETH_HLEN till && (skb->mac.raw + ETH_HLEN) <= skb->data
När det är gjort kompilera och installera kärnan.

Om du kör IRC-trafik genom din brandvägg bör du köra med kärna 2.4.18-pre9 eller senare på grund av ett säkerhetshål i ip_conntrack_irc.c. Se Bugtraqrapporten om security advisory linux 2.4.x ip_conntrack_irc från 2002-02-27.



Konfigurering

Det första som ska göras är att konfigurera kärnan och tala om vad som ska finnas med i kärnan. Om du kör i fönstermiljö (X-window System) och vill köra konfigurationen i ett separat fönster gör du:

make xconfig

Om du istället vill köra konfigurationen med konsolgrafik gör du:

make menuconfig

Menuconfig ser ut enligt följande:

Nedan visas xconfig men menuconfig fungerar snarlikt.

make xconfig startar ett menybaserat grafisk konfigurationsgränssnitt. Här visas exempel på hur det kan se ut. Klicka på bilderna för att få en större bild.

Programmet är menybaserat. Om du är osäker om någonting välj help och läs texten. I de flesta av hjälptexterna föreslår de vad du ska göra om du är osäker. I menyn innebär att valet är bortvalt,
att det är valt och kommer att läggas in i kärnan,
att det kommer att kompileras som en modul.

Huvudmenyn i xconfig ser ut på följande sätt:








0) Gå uppifrån och ned i huvudmenyn och gå in på alla undermenyer eller välj Next för att gå till nästa meny.


1) Välj bort Code maturity level options såvida inte du vill kunna välja saker som är under utveckling.




2) Slå på "Enable loadable module support" om du använder moduler. Slå på version information on all module symbols för att slippa kompilera om modulerna vid byte av kärna. Vill du att kärnan ska kunna ladda moduler automatisk när den behöver dem måste Kernel module loader aktiveras. Konfiguration av moduler görs i /etc/modules.conf (se nedan).


3) Välj att kompilera kärnan för 586 (Pentium) eller bättre beroende på vad du har för processor. Välj bort "Math emulation" såvida inte du har en gammal processor som saknar matteprocessor (vissa modeller av 386 och 486). Symetric multiprocessorstöd är till för de datorer som har fler än en processor.




4) Under "General Setup" görs inställningar av om datorn ska ha nätverksstöd, PCI-stöd (de flesta PC-datorer har PCI-buss)


5) Stöd , support för olika typer av programformat (det gamla a.out och det nuvarande ELF). Se till att ELF är valt annars kommer inga Linuxprogram att fungera. Advanced Power Management BIOS support är stöd för att spara ström i till exempel bärbara datorer.






6) Slå på PCMCIA/PC-card-stöd om du har det i din dator. PCMCIA/PC-card är kreditkortsstora kort som är väldigt vanliga i bärbara datorer.


7) MTD är stöd för flashkort. Dessa kort används främst i inbyggda system.








8) Slå på parallportsupport och PC-style för att få stöd för den vanliga parallellporten. I nyare 2.4-kärnor finns stöd för multi io-kort med både serieportar och parallellportar. Har du ett sådant kort bör du välja stöd för den.


9) "Plug and Play support" gör att kärnan kan konfigurera vissa kort. I nyare 2.4-kärnor finns även stld för plug and play BIOS, PNPBIOS.








10) Under block devices slå på stöd för diskttstationen (floppy).


11) Mycket av det övriga under block devices kan slås av. Loopbacksupport är stöd för att montera in imagefiler (råkopior) av disketter CD-skivor etc.








12) I Linux går det att sätta upp RAID-system (flera hårddiskar som ger redundans). I Linux finns numera även stöd för logiska volymer, LVM. Vill du experimentera med RAID och LVM slår du på stöd för dessa här.


13) Ska datorn vara ansluten till ett nätverk måste nätverksstöd slås på. I de flesta fall innebär nätverk ett nätverk med TCP/IP-trafik. Här går det även att aktivera stödet för brandväggsskydd (iptables).








14) Om du vill köra multicasttrafik ska du slå på den eller kompilera in den som modul. Såvida inte din dator ska agera router ska "IP: advanced router" slås av. Ska datorn agera router (och kanske brandvägg) ska FORWARD_IPV4 i filen /etc/sysconfig/network sättas till true om datorn ska kunna agera router (FORWARD_IPV4=true). Alternativt gör du
echo 1 > /proc/sys/net/ipv4/ip_forward
i samband med bootning av datorn (i tex. /etc/rc.d/rc.local).


15) Fortsätt med "Network options" . Stöd för TCP syn cookie är bra att ha. Det ger ett visst skydd mot SYN-flood-attacker. Stödet måste sedan aktiveras i samband med boot genom att göra
echo "1" > /proc/sys/net/ipv4/tcp_syncookies
Lämpligt kan vara att stoppa in raden i t.ex. /etc/rc.d/rc.local . Då tyvärr inte all nätverksutrustning förstår sig på ECN (ett sätt att minska trafikstockningen på nätet) bör du slå av IP: TCP Explicit Congestion Notification eller så kan du ha med den i kärnan och slå av den under drift med
echo "0" > /proc/sys/net/ipv4/tcp_ecn
Kommandoraden kan till exempel stoppas in i /etc/rc.d/rc.local .








16) Fortsätt med IP: Netfilter Configuration. För att få stöd för iptables måste iptables-support slås på. Dessutom måste programpaketet iptables installeras om det inte redan finns installerat (rpm -q iptables). Om brandväggsregler ska kunna sättas upp för svarstrafik till den trafik vi etablerar måste Connection tracking (vid maskering) och connection state match kompileras in i kärnan eller kompileras som modul. FTP-protocol support behövs för att filöverföringar med ftp ska fungera.


17) Resten av brandväggsstödet, NAT, masquerading, TOS etc. låter vi kompileras som moduler.








18) IPv6-brandväggsstöd kan kompileras in i kärnan, eller som modul, om behov av det finns.


19) QoS står för Quality of Service och innebär att datorn prioriterar viss nätverkstrafik högre än annan trafik.








20) Slå på denna om du har ett telefonkort i datorn.


21) ATA/IDE är stöd för de mycket vanliga IDE-hårddiskarna.








22) Säg Y på Enhanced IDE/MFM/RLL och IDE/ATA-2 om du använder IDE-diskar och har ditt root-filsystem på en av IDE-diskarna.


23) Välj Y eller M för SCSI om du har ett SCSI-kort i din dator.








24) Välj ditt SCSI-kort.


25) Om du har en PCMCIA/SCSI-adapter slår du på stödet för det här och väljer aktuellt SCSI-kort.








26) IEEE 1394, Firewire är en högprestandaseriebuss.


27) Intelligent Input/Output (I2O) är stöd för drivrutiner delade i två delar en operativsystemsdel, OSM, och en hårdvaruberoende del, HDM. Om du är osäker säg N.








28) Om du har ett nätverkskort i datorn säg Y på Network Device Support.


29) Välj det nätverkskort du har i din dator. Bland undermenyerna finns stöd för vanliga ISA/PCI 10/100Mbits-kort, 1000 Mbits-kort, trådlösa nät, token ring, WAN-kort och PCMCIA-kort. I nyare 2.4-kärnor har det tillkommit








30) Om du har en amatörradio kopplad till din Linuxdator finns det stöd för det.


31) IrDA är protokoll som används över infrarödlänkar.








32) Här kan du slå på stöd för infrarödlänk om du har en sådan i din dator. Det är ganska vanliga med IR-länkar i bland annat bärbara datorer.


33) Om det sitter ett ISDN-kort i din dator väljer du stöd för det här. Det ska ej förväxlas med ett vanligt nätverkskort kopplat till en ISDN-router.








34) Om du har en gammal CD-spelare finns det stöd även för den.


35) Input core support innebär stöd för USB HID som t.ex. att ha ett USB-tangentbord som konsoltangentbord.








36) Virtual terminal och console on virtual terminal behövs för att få virtuella konsoler i din Linux. Som manualen säger kan du inte göra så mycket utan virtuella konsoler. 8250/16550 UART är hårdvaran till den vanliga serieporten.


37) Direct Rendering Infrastructure är en nyhet i XFree86 version 4. Här är kerneldelen av den. Läs mer i hjälpen och dokumentationen till XFree86. Förutom det kan du välja stöd för olika grafikkort.








38) I2C är en långsam seriebuss som används i många micro controller-baserade system.


39) Välj vilken typ av mus som finns ansluten till datorn.








40) Om du har en joystick ansluten bör du här ställa in vilken typ av joystick det är.


41) Watchdog är stöd för att automatisk boota om datorn om den har hängt sig. Det kan skötas helt i mjukvara eller med hjälp av hårdvara. Till den behövs en devicefil, /dev/watchdog, som skapas med hjälp av
mknod /dev/watchdog c 10 130
Är du osäker säg n. För er som har en Sony Vaio bärbar finns numera stöd för "Sony Programmable I/O Control Device"








42) Om du har en bandare ansluten till floppy-kontrollkortet bör du säga y här och sedan göra inställningar för det.


43) PCMCIA serial innebär seriella PCMCIA-enhet som till exempel modem. Cardbus är en nyare och bättre variant på CPMCIA/PC-card.








44) Multimediadevices är TV-kort och radiokort till datorer. Aktivera stödet om du har ett sådant kort och gå ner i undermenyn för TV-kort respektive radiokort och välj stöd för de kort du har.


45) Fortsätt vidare till filsystem. Quota är ett system för att sätta upp gränser för hur mycket disk användare får göra av med. Kernel automounter är stöd i kärnan för att automatiskt montera NFS-filsystem (nätverksfilmonteringar). Reiserfs är ett journalfilsystem som kan användas istället för till exempel ext2 på en hårddiskpartition. Ett journalfilsystem för journal över ändringar i filsystemet. Vid krasch kan fortfarande de sista data som skrivs till fil försvinna men själva filsystemet förblir intakt tack vare journalfilen. Andra journalfilsystem som finns till Linux är IBM:s jfs och SGI:s xfs.








46) Några av de filsystem som stöds i Linux är DOS/FAT, VFAT, NTFS (endast läsning, stödet för skrivning är experimentellt), ISO9660 (CD-filsystem), extended second filesystem (ext2, det vanliga linuxfilsystemet), proc-filsystem (ett speciellt filsystem som linux använder) mfl. . Lägg in stöd för DOS FAT och DOS fs för att få stöd för DOS-disketter och DOS-diskar. Lägg in VFAT-stöd för att komma åt Windowsdiskar i datorn. Lägg gärna in stöd för ISO9660 och Joliet-utökning (långa filnamn) för att kunna hantera CD-skivor.


47) För att kunna köra linux behövs proc (används av /proc) och second extended filesystem (ext2).








48) För att kunna nätverksmontera NFS-filsystem behövs stöd för NFS.


49) Om du har hårddiskar i din Linuxdator där diskarna är partitionerade i andra system än linux eller windows, tex. Macintosh, Ultrixsystem, Atari etc. kan du behöva slå på stöd för den aktuella partitionstypen.








50) Om du vill ha stöd för DOS-filer med svenska tecken i filnamnen behöver du slå på Codepage 850 (utanför bild). På samma sätt om du vill ha stöd för svenska tecken i filnamn från till exempel windows och CD med svenska tecken i filnamn behövs stöd för NLS ISO 8859-1.


51) Slå på stödet för VGA-textkonsol. Du vill ha det.








52) Framebufferstödet är experimentellt. Det ger möjlighet för applikationer att via ett väldefinierat gränssnitt komma åt grafikkorts framebuffers. Om du är osäker säg n.


53) Om du har ett ljudkort i datorn slå på ljudstöd och välj rätt ljudkort. Lämpligtär att lägga stödet som modul till kärnan.








54) Numera finns även bra stöd för USB. Slå på det om du har USB i din dator.


55) Såvida inte du är en kernelhacker (utvecklare av linuxkärnan) slå av Magic SysRq key.








56) Spara alla inställningar och avsluta.


57) Därefter är det dags att kompilera kärnan men först måste du köra
make dep
Se beskrivning nedan.





Menyprogrammet säger som avslutning:

Saving your kernel configuration...

*** End of Linux kernel configuration.
*** Check the top-level Makefile for additional configuration.
*** Next, you must run 'make dep'.

Beroenden

Vi gör som menyprogrammet föreslog

make dep

Kompilering av kärnan

Därefter är det dags att kompilera kärnan. Det görs med

make bzImage

Nu kan du gå och ta en fika.

Installera kärnan

Kopiera filen /usr/src/linux/arch/i386/boot/bzImage till katalogen /boot och passa på och ge den ett nytt namn. Exempel:

cp /usr/src/linux/arch/i386/boot/bzImage
/boot/vmlinuz-2.4.4-min
om det är en 2.4.4-kärna.

Kopiera därefter filen /usr/src/linux/System.map till /boot/System.map-2.4.4 .

cp /usr/src/linux/System.map /boot/System.map-2.4.4

Radera /boot/System.map och sätt upp en länk /boot/System.map som pekar på /boot/System.map-2.4.4 .

rm /boot/System.map
ln -s /boot/System.map-2.4.4 /boot/System.map

Öppna filen /etc/lilo.conf i en editor. Från början kanske den innehöll följande:

boot=/dev/hda
map=/boot/map
install=/boot/boot.b
prompt
timeout=50
default=linux

image=/boot/vmlinuz-2.2.12-20
        label=linux
        initrd=/boot/initrd-2.2.12-20.img
        read-only
        root=/dev/hda1

Skapa en ny post för den nya kärnan utan att ta bort posten för den gamla kärnan. Den gamla kärnan kan behövas om det blev någonting fel med den nya kärnan. Det är lätt att råka välja någonting fel och då är det bra att fortfarande kunna boota den gamla kärnan. Ge den nya kärnan en bra etikett (label). /etc/lilo.conf ser efter ändring ut så här:

boot=/dev/hda
map=/boot/map
install=/boot/boot.b
prompt
timeout=50
default=linux

# Nya kärnan
image=/boot/vmlinuz-2.4.4-min
        label=linux
        read-only
        root=/dev/hda1

# Gamla kärnan
image=/boot/vmlinuz-2.2.12-20
        label=linux-old
        initrd=/boot/initrd-2.2.12-20.img
        read-only
        root=/dev/hda1

Spara filen och kör därefter programmet lilo.

lilo

När lilo körs talar om vad den har skriver, där stjärnan visar att linux är defaultboot

Added linux *
Added linux-old

Nu är det bara att boota om för att ta den nya kärnan i drift. Om moduler används kan det dock vara bra att kompilera och installera dessa också först (se nedan).

Kompilera moduler

Modulerna kompileras med

make modules

Installation av moduler

Modulerna installeras med

make modules_install

In- och urladdning av moduler

När kärnan är installerad och modulerna kompilerade och installerade och datorn ombootad med den nya kärnan är det dags att börja använda modulerna. Innan modulerna kan användas bör man göra

depmod -a

För att kunna använda en modul, tex opl3sa2, måste den laddas in vilket görs med

modprobe opl3sa2

För att lista laddade moduler skriv

/sbin/lsmod

När en modul inte längre används kan den laddas ur vilket görs med

modprobe -r opl3sa2

För att tala om vilken modul som ska användas som drivrutin för viss hårdvara kan inställningar behöva göras i /etc/modules.conf .

Om första nätverkskortet är av typen eepro100 och modulen eepro100 är den som ska användas kan man skriva in följande i /etc/modules.conf för att kärnan ska hitta rätt modul.

alias eth0 eepro100

Nu går det att använda eth0 istället för eepro100 så till modprobe går det att skriva

modprobe eth0

Om kärnan är inställd på att automatiskt ladda moduler den behöver kan den hitta rätt modul tack vare inställningarna i /etc/modules.conf



Copyright © 2010-2024 Kjell Enblom.
This document is covered by the GNU Free Documentation License, Version 1.3

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License".