Debian GNU/Linux - Kompilacja jądra

Będzie to artykuł z serii tych, lekkich łatwych i przyjemnych oraz tych które można znaleźć w sieci :), jednak powstanie - bo gdzieś na dysku miałem zapisane informacje, że coś takiego miałem napisać kiedyś.

W Debianie trochę inaczej niż np. w Gentoo instaluje się jądro systemu. W skrócie wygląda to tak, że:

  1. Pobieramy źródło jądra, konfigurujemy je

  2. Tworzymy paczkę ze zbudowanym jądrem, a następnie ją instalujemy

Konwencje nazewnicze występujące w tym tekście

Wszystkie wystąpienia {$LINUX_VERSION} powinny być zamienione na wersję jaką posiadamy.

Jeśli by ktoś chciał użyć tego poradnika przy pisaniu skryptu kompilacji, wystarczy że stworzy sobie zmienną LINUX_VERSION.

$LINUX_VERSION=2.6.29.1

Wymagane pakiety

apt-get install kernel-package libncurses5-dev fakeroot fakeroot wget bzip2 build-essential zlib1g-dev zlib1g

Pobieranie źródeł jądra

Nowe źródła jądra można pobrać ze strony http://kernel.org/, źródła powinny być pobrane do katalogu /usr/src, można zrobić to w sposób następujący:

# cd /usr/src
# wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-{$LINUX_VERSION}.tar.bz2

Rozpakowywanie źródeł jądra

Po pobraniu źródeł powinniśmy je rozpakować, oraz przygotować się do kompilacji:

# tar xjf linux-{$LINUX_VERSION}.tar.bz2
# rm linux
# ln -s linux-{$LINUX_VERSION} linux
# cd /usr/src/linux

Przygotwanie do kompilacji jądra (opcjonalnie)

  • Nakładanie ewentualnych patchy na kernel

 # cd /usr/src/linux
 # bzip2 -dc /usr/src/patch-2.6.29.1-rc2.bz2 | patch -p1 --dry-run
 # bzip2 -dc /usr/src/patch-2.6.29.1-rc2.bz2 | patch -p1

* Kopiowanie bazowego pliku kofniguracyjnego dla nowego jądra systemu
  (jeśli wersje jąder bardzo się różnią ten krok może nie zadziałać)
# cp /boot/config-2.6.26-1-686 /usr/src/linux/.config

Konfiguracja jądra

make menuconfig

Kompilacja jądra oraz budowanie paczki *.deb

# make-kpkg clean
# fakeroot make-kpkg --initrd --append-to-version=-custom kernel_image kernel_headers

Notatki:

  • Po opcji --append-to-version= można wprowadzić dowolną nazwę pozwalającą nam zidentyfikować jądro, która zaczyna się od znaku - i nie zawiera białych znaków (spacji).

  • Kompilację polecam uruchomić na screenie i zdetachować.

  • Jeśli kompilacja odbywa się ze wszystkimi dostępnymi modułami (config dystrybucyjny) to potrwa pewnie długo - spacer wydaje się być dobrą opcją.

  • Jeśli ktoś stworzył sobie kernel (np. tak: fakeroot make-kpkg --revision=-custom.1.0 kernel_image) bez initrd to może go zbudować później w ten sposób (ale tego nie obejmuje ten artykuł):

# cd /boot/
# mkinitrd -o /boot/initrd.img-{$LINUX_VERSION} {$LINUX_VERSION}

Instalacja paczki z nowym jądrem

Jeśli paczka z nowym jądrem jest już przygotowana, pozostaje tylko ją zainstalować.

# cd ../
# dpkg -i linux-image-2.6.29.1-custom_2.6.29.1-custom-10.00.Custom_i386.deb
# dpkg -i linux-headers-2.6.29.1-custom_2.6.29.1-custom-10.00.Custom_i386.deb

To wszystko - pora ponownie urochmić system

# shutdown -r now

Po uruchomieniu sprawdzamy wersję kernela:

$ uname -a
Linux pilum 2.6.29.1-custom #1 SMP Thu Apr 16 06:51:26 CEST 2009 i686 GNU/Linux

Problemy jakie się mogą pojawić

  • Czasami bootloader nie zostaje zaktualizowany, rozwiązaniem tego problemu może być edycja pliku /etc/kernel-img.conf oraz dodanie takiej linii:

    postinst_hook = /sbin/update-grub
    postrm_hook = /sbin/update-grub
    do_bootloader = no
    

    To zapewni, że komenda update-grub będzie uruchomiona zasze po instalacji nowego jądra z paczki.

  • Nie wszystkie moduły, które są w systemie zostały przekompilowane (np. moduły do maszyn wirtualnych, kamer internetowych - te niebędące włączone do głównej gałęzi jądra) użytkownik musi sam przekompilować.

Comments

comments powered by Disqus