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:
Pobieramy źródło jądra, konfigurujemy je
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
) bezinitrd
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ć.