Udskiftning af kernen

Fra Debianguiden
Skift til: Navigation, Søgning

Man kan hurtigt komme ud for at det er nødvendigt at udskifte ens kerne, dette kan f.eks. være pga. fejlrettelser, nye funktioner, ny understøttelse af hardware eller fordi ens nuværende kerne indeholder et kendt sikkerhedshul. Måske er man bare ude efter en optimeret kerne tilpasset ens eget system.

Sammen med en installation af sarge følger eksempelvis en 2.4.27 eller en 2.6.8 kerne som standard. Hvis du ikke ved eller ikke kan huske hvilken kerne du har kan kommandoen 'uname' hjælpe dig. Eksemplet herunder vises en standard kerne på et nyinstalleret sarge system:

bruger@debian:~$ uname -r
2.4.27-2-386

Det kan være en jungle at finde ud af hvilken kerne man skal skifte sin nuværende kerne ud med. Lige så svært kan det være at finde ud af om man skal kompilere en kerne selv eller om man skal bruge en af de mange prekompilerede kerner, hvor man slipper for alt det "grove" arbejde, men til gengæld må give afkald på muligheden for selv at bestemme.

I de følgende eksempler bruges en 2.4.31 kerne som eksempel. Men det skulle passe til en hvilken som helst kerne, ved blot at udskifte versionsnummeret med den version du skal bruge.

Du har altså to muligheder når du skal installere en ny kerne. Enten kompilerer du kernen manuelt (se Kompilering og installation af kerne) eller også installerer du en prekompileret kerne der følger med Debian (se Installation af prekompileret kerne).

Den første mulighed giver dig mange flere valgmuligheder når du skal konfigurere kernen, men det er også sværere, og du kan hurtigt komme til at gøre noget galt. Ved den anden mulighed er installationen nem, men du har kun nogle bestemte kerner at vælge fra, og du har ingen præference for opsætningen af dem.

Kompilering og installation af kerne

Nødvendige forberedelser

Før man kan kompilere en kerne skal man have kildekoden til en kerne. Denne kan man finde på www.kernel.org eller et af dets mange mirrors. Kildekoden til en kerne fylder mellem 30-45 MB afhængig af version og typen af den pakkede fil man henter kernen i. Hvis du allerede har kildekoden til en tidligere kerne kan du med fordel nøjes med at hente en patch til kernen. Læs evt. Patch kernen. I eksemplet bruger vi en kerne pakket med .tar.bz2. Læs eventuelt Pakkede filer (tar, zip) for udpakning af andre formater. Pak kernen ud i mappen /usr/src og lav et symlink til den fra /usr/src/linux.

debian:~# cd /usr/src
debian:/usr/src# tar jxfv linux-2.4.31.tar.bz2
debian:/usr/src# ln -s linux-2.4.31 linux
debian:/usr/src# cd linux


Når man har fået hentet kernen skal man yderligere installere nogle pakker der gør ens Debian system istand til at kompilere kerner. Disse pakker installeres med følgende:

debian:/usr/src/linux# apt-get install gcc make libc6-dev modutils

Opsætning

Efter udpakning af kernen, skal den sættes op før vi skal kompilere den. Der er en del forskellige grænseflader som kan bruges til opsætningen og nogle behøver ekstra pakker installeret. Metoden som vi benytter vil benytte er menuconfig. Herunder kan du se en liste over de forskellige opsætningsmetoder:


config

  • Dette er den mest basale opsætningsmetode. Du skal svare på

samtlige spørgsmål som kernen giver dig (der er mange), i en primitiv tekst-grænseflade. Den kan ikke anbefales.

menuconfig

  • Ved at vælge menuconfig opsætter du kernen

igennem et konsolbaseret menusystem. Dette er meget mere overskueligt end 'config' og kan varmt anbefales. Det kræver dog, at du installerer følgende pakke først:

debian:/usr/src/linux# apt-get install libncurses5-dev


xconfig

  • Denne metode benytter Qt-grænsefladen til at opsætte kernen.

Qt kører i X og er derfor en rigtig grafisk grænseflade. Den kræver at nogle ekstra pakker er installeret for at kunne køre:

debian:/usr/src/linux# apt-get install libqt3-dev


gconfig

  • Denne metode benytter GTK+-grænsefladen til at opsætte kernen. GTK+

kører i X og er derfor, ligesom 'xconfig' en rigtig grafisk grænseflade. Den kræver at nogle ekstra pakker er installeret, for at kunne køre:

debian:/usr/src/linux# apt-get install libgtk2.0-dev



For at starte menuopsætning i konsollen skrives:

debian:/usr/src/linux# make menuconfig

Herefter skulle du gerne se noget tilsvarede den følgende figur.

figur:
Eksempel på menuconfig

Med menuconfig kan man konfigurere sin kerne via et menusystem.


Det er vigtigt at du går menuerne igennem flere gange, specielt hvis det er første gang du installerer kernen. Mange af begreberne vil nok forekomme nye, dog er de fleste rimelig godt dokumenteret i menuerne. Yderligere dokumentation kan findes i mappen "Documentation" eller på nettet. Flere af de mest almindelige problemstillinger er beskrevet i Patch kernen.

Kompilering

Til Debian er der blevet udviklet nogle specielle værktøjer til at kompilere kerner med. Værktøjerne, som kan findes i pakken kernel-package gør kompileringen af kernen enkel og fremtidig vedligeholdelse af denne let. Hvis man ikke er overbevist og alligevel vil kompilere kernen på traditionel vis, henvises der til /usr/src/linux/README. Det der gør værktøjerne i kernel-package så overlegne på et Debian system er at kernen og dertilhørende moduler pakkes ned i en debianpakke. Denne kan så installeres (og fjernes) lige så let som en hvilken som helst anden debianpakke. Den opdaterer endda bootloaderen (LILO), så man efter en genstart automatisk starter op med den nye kerne. Ved at have sin kerne liggende i en debianpakke er det også nemt at flytte kernen til en anden maskine eller bare gemme kernen så man ikke skal kompilere forfra efter en eventuel geninstallation. Desuden holder man sig til pakkesystemet, og derfor vil du ikke komme ind i den situation at du har filer liggende på dit system som er ude af pakkesystemets kontrol. Det første du skal gøre, er at installere Debians værktøjer til kernekompilering.

debian:/usr/src/linux# apt-get install kernel-package

Efter opsætningen af kernen er man blevet bedt om at køre 'make dep', dette ignoreres da den traditionelle kompileringsmetode ikke benyttes. Istedet skrives:

debian:/usr/src/linux# make-kpkg --initrd --revision=mitimage.1.0 kernel_image

Kommandoen 'make-kpkg' kompilere kernen og pakker den ned i en debianpakke. Med parameteren --revision har man mulighed for at give debianpakken et revisionsnummer (eller et navn) efter eget valg. Ved at udnytte dette er det nemmere at holde styr på forskellige kompileringer af kernen.

Installation

I tilfælde af at noget skulle gå galt når maksinen genstartes med den ny kerne, er det vigtigt at du har taget backup af alle dine vigtige data inden du går videre. Skulle du komme ud for at geninstallere hele systemet, mister du ikke noget. Af samme grund er det også en god ide at have en bootdiskette parat, som du burde have lavet under installationen. Installer debianpakken med kernen på normal vis med:

debian:/usr/src/linux# dpkg -i ../kernel-image-2.4.31_mitimage1.0_i386.deb


Herefter bliver kernen og tilhørende moduler lagt de rigtige steder. Samtidig får du mulighed for automatisk at opdatere LILOs opsætningen til at pege på den nye kerne. Hvis du hellere selv vil konfigurere LILO eller bruger en alternativ bootloader kan du bare fravælge det.Note: Note


Kernen kan selvfølgelig fjernes lige så let igen.

debian:/usr/src/linux# apt-get remove kernel-image-2.4.31_mitimage1.0_i386

Hvis du får brug for at kompilere kernen igen, gøres det præcis som beskrevet tidligere, med den undtagelse af at rester fra den gamle kernekompilering fjernes først med make-kpkg clean.

debian:/usr/src/linux# make-kpkg clean
debian:/usr/src/linux# make menuconfig
debian:/usr/src/linux# make-kpkg --revision=mitimage.1.1 kernel_image

Patch kernen

En patch er en fil der indeholder differencen imellem en eller flere filer, og fylder en del mindre end den fulde kildekode. Derfor kan det godt betale sig at hente en patch både for dig og dem der betaler for at hoste filerne. En patch til kernen hentes på www.kernel.org, samme sted som kildekoden til kernen. Denne fylder som regel nogle få MB og påføres kernen på følgende måde:

debian:/usr/src/linux# bunzip2 -c patch-2.4.24.bz2 | patch -p1

Installation af prekompileret kerne

Den hurtigste og nemmeste måde at installere en nyere kerne, er at bruge en af de pakker med kernel-images der følger med Debian. Med sarge følger der som, tidligere nævnt, en 2.4.27 og en 2.6.8 kerne. En liste over de kernel-images der er tilgængelig til installation kan findes ved hjælp af 'apt-cache'. Her finder vi listen over alle 2.4.27 kerner i sarge:

debian:~# apt-cache search ^kernel-image | grep 2.4.27
kernel-image-2.4.27-2-386 - Linux kernel image for version 2.4.27 on 386
kernel-image-2.4.27-2-586tsc - Linux kernel image for version 2.4.27 on Pentium-Classic
kernel-image-2.4.27-2-686 - Linux kernel image for version 2.4.27 on PPro/Celeron/PII/PIII/P4
kernel-image-2.4.27-2-686-smp - Linux kernel image for version 2.4.27 on PPro/Celeron/PII/PIII/P4 SMP
kernel-image-2.4.27-2-k6 - Linux kernel image for version 2.4.27 on AMD K6/K6-II/K6-III
kernel-image-2.4.27-2-k7 - Linux kernel image for version 2.4.27 on AMD K7
kernel-image-2.4.27-2-k7-smp - Linux kernel image for version 2.4.27 on AMD K7 SMP
kernel-image-2.4.27-speakup - Linux kernel image for version 2.4.27-speakup

Og af det fremgår det selvfølgelig, at man kan installere en kerne ved f.eks. at skrive:

debian:~# apt-get install kernel-image-2.4.27-2-686

Ønsker man at installere en 2.6-kerne på sit sarge system, kan man på samme måde søge efter 2.6 kerner:

debian:~# apt-cache search ^kernel-image | grep 2.6.8
kernel-image-2.6.8-11-amd64-generic - Linux kernel image for version 2.6.8 on generic x86_64 systems
kernel-image-2.6.8-11-amd64-k8 - Linux kernel image for version 2.6.8 on AMD64 systems
kernel-image-2.6.8-11-amd64-k8-smp - Linux kernel image for version 2.6.8 on AMD64 SMP systems
kernel-image-2.6.8-11-em64t-p4 - Linux kernel image for version 2.6.8 on Intel EM64T systems
kernel-image-2.6.8-11-em64t-p4-smp - Linux kernel image for version 2.6.8 on Intel EM64T SMP systems
kernel-image-2.6.8-2-386 - Linux kernel image for version 2.6.8 on 386.
kernel-image-2.6.8-2-686 - Linux kernel image for version 2.6.8 on PPro/Celeron/PII/PIII/P4.
kernel-image-2.6.8-2-686-smp - Linux kernel image for version 2.6.8 on PPro/Celeron/PII/PIII/P4 SMP.
kernel-image-2.6.8-2-k7 - Linux kernel image for version 2.6.8 on AMD K7.
kernel-image-2.6.8-2-k7-smp - Linux kernel image for version 2.6.8 on AMD K7 SMP.