LDZ - Linux Dla Zielonych

Kompilacja jądra

Jedną z pierwszych rzeczy, jakie wypadało by zrobić po zainstalowaniu systemu Linux jest kompilacja jądra (oczywiście trzeba mieć zainstalowane źródła jądra - w chwili, kiedy to piszę najnowszą wersją jądra jest 2.2.16, a przygotowywane jest jądro 2.4.0) aby dopasować tę najważniejszą część systemu do indywidualnych preferencji. Kod źródłowy jądra powinien znajdować się w katalogu /usr/src/linux-(wersja_jądra) - np. /usr/src/linux-2.2.16. Jeśli nowe jądro zostało dopiero co rozpakowane, to dobrze jest utworzyć link symboliczny /usr/src/linux do katalogu z aktualnym kodem źródłowym jądra, np. /usr/src/linux-2.2.13. W podkatalogu Documentation, jak się można domyślić, znajduje się cała dokumentacja do jądra. Znajdują się tam dokumenty opisujące obsługiwany sprzęt, systemy plików, ustawienia sieciowe itp.

Poniżej znajduje się lista programów i bibliotek niezbędnych do kompilacji i funkcjonowania jądra w wersji 2.2.13 oraz sposób sprawdzenia wersji.

Kernel modutils        2.1.121                 ; insmod -V
Gnu C                  2.7.2.3                 ; gcc --version
Binutils               2.8.1.0.23              ; ld -v
Linux libc5 C Library  5.4.46                  ; ls -l /lib/libc*
Linux libc6 C Library  2.0.7pre6               ; ls -l /lib/libc*
Dynamic Linker (ld.so) 1.9.9                   ; ldd --version or ldd -v
Linux C++ Library      2.7.2.8                 ; ls -l /usr/lib/libg++.so.*
Procps                 1.2.9                   ; ps --version
Procinfo               16                      ; procinfo -v
Psmisc                 17                      ; pstree -V
Net-tools              1.52                    ; hostname -V
Loadlin                1.6a
Sh-utils               1.16                    ; basename --v
Autofs                 3.1.1                   ; automount --version
NFS                    2.2beta40               ; showmount --version
Bash                   1.14.7                  ; bash -version
Ncpfs                  2.2.0                   ; ncpmount -v
Pcmcia-cs              3.0.13                  ; cardmgr -V
PPP                    2.3.8                   ; pppd --version
Util-linux             2.9t                    ; chsh -v
Uwaga: pakiet autofs jest niezbędny tylko w przypadku wybrania przy kompilacji jądra opcji autofs, podobnie jak NFS, Ncpfs, Pcmcia-cs oraz PPP. Konfigurację jądra można przygotować na kilka sposobów: W przypadku wybrania jednej z dwóch ostatnich wariantów przy każdej opcji można wybrać pomoc szczegółowo wyjaśniającą do czego dana opcja służy. Niektóre z opcji pojawiają się dopiero po wybraniu innych opcji. Dodatkowo niektóre z opcji można skompilować nie bezpośrednio do jądra, ale jako tzw. moduł, który zostanie załadowany dopiero kiedy będzie potrzebny. Jest to korzystne ze względów pamięciowo-wydajnościowych zgodnie z zasadą, że im jądro mniejsze tym system działa szybciej. Uwaga: kiepskim pomysłem jest wstawianie w moduł systemu plików ext2.

Po przygotowaniu konfiguracji można rozpocząć kompilację. Należy po kolei wykonać następujące polecenia (w katalogu /usr/src/linux*):

Po wydaniu tych poleceć w katalogu /usr/src/linux/arch/i386/boot powinien znajdować się plik bzImage będący skompilowanym i skompresowanym jądrem. Jeśli przy kompilacji został wyświetlony komunikat "Kernel too large" znaczy to, że jądro jest za duże (jak się można domyślić). W takim przypadku należy wybrać mniej opcji przy kompilacji jądra i/lub skompilować większą liczbę opcji jako moduły. Jeśli natomiast jądro zostało prawidłowo skompilowane, to możemy przystąpić do jego instalacji.

Aby zainstalować jądro, należy je przekopiować do katalogu /boot. Jeśli została zmieniona wersja jądra, to należy do tego katalogu przekopiować także plik /usr/src/linux/System.map. Następnie należy poprawić plik konfiguracyjny /etc/lilo.conf. Należy dodać sekcję zaczynającą się od opcji "image=". Jeśli lubisz ryzykować, to możesz usunąć już istniejącą taką sekcję, ale w tym przypadku powracanie do poprzedniego jądra, jeśli z nowym coś nie wyszło, będzie utrudnione. Należy poprawić linię "image=" tak, aby po znaku równości była prawidłowa ścieżka - w tym przypadku /boot/bzImage. Po tej linii powinny się znaleźć opcje "root=/dev/hdxx" - zamiast xx powinny być odpowiednie oznaczenia dysku, na którym jest zainstalowany Linux (powinny pasować ustawienia, które były wcześniej w tym pliku) oraz opcja "label=coś". Opcja label oznacza to, co musi być wpisane przy starcie systemu po znakach "LILO: ". Labele nie mogą się powtarzać - dla każdego jądra bądź innego systemu muszą być inne. Domyślnie uruchamiany jest pierwszy obraz lub ten, który jest określony parametrem "default=nazwa_obrazu". Parametr ten powinien znajdować się przed pierwszą linią "image=...". Mam nadzieję, że za bardzo nie namieszałem :). Może przykład dla dwóch jąder i systemu na dysku /dev/hda1 trochę rozjaśni obraz:

boot=/dev/hda
map=/boot/map
install=/boot/boot.b
prompt
password=abacada
restricted
timeout=30
image=/boot/bzImage
        label=l
        root=/dev/hda1
        read-only

image=/boot/bzImage2
        label=stary
        root=/dev/hda1
        read-only
Jak widać, są tutaj 2 jądra o identyfikatorach "l" i "stary". Jeśli jądro zostanie wywołane z parametrem, to konieczne będzie podanie hasła (w tym przypadku "abacada"). Jest to zabezpieczenie przeciw dostaniu się do systemu z prawami root'a przez podanie parametru "single".