Podręcznik FreeBSD
Poprzedni | Rozdział 8. Konfiguracja jądra FreeBSD | Następny

# 8.3. Budowanie i instalowanie indywidualnego jądra

Omówmy pokrótce katalog kompilacji jądra. Wszystkie wspomniane za chwilę katalogi będą relatywnymi względem `/usr/src/sys`, do którego można także dojść przez `/sys`. Można tam znaleźć wiele różnych podkatalogów, jednak dla nas najważniejszym będzie ``arch`/conf`. W nim właśnie dokonamy edycji pliku konfiguracyjnego jądra oraz je skompilujemy, będą to kolejne etapy w całym procesie budowy. `arch` oznacza architekturę, do wyboru: `i386`, `alpha`, `amd64`, `ia64`, `powerpc`, `sparc64`, lub `pc98` (alternatywna gałąź sprzętu PC, popularna w Japonii). Wszystko, co znajduje się w katalogu danej architektury dotyczy ściśle tylko jej. Reszta źródeł jest dla wszystkich architektur taka sama. Zwróćmy uwagę na logiczną strukturę katalogów z każdym wspieranym urządzeniem, systemem plików, opcjami dodatkowymi - wszystko posiada swój własny podkatalog.

Przykłady w niniejszym rozdziale zakładają, że wykorzystujemy architekturę i386. Jeśli tak nie jest, będziemy musieli dokonać odpowiednich zmian w nazwach ścieżek dostępu dla architektury naszego systemu.

> Notatka: Jeśli nie mamy katalogu `/usr/src/sys`, oznacza to, że nie dysponujemy zainstalowanymi źródłami jądra. Najprostszym sposobem na zainstalowanie jest uruchomienie jako `root` `sysinstall`'a, wybranie Configure, następnie Distributions, później src, a na końcu sys. Jeśli jednak jesteśmy osobami mającymi awersję do konfiguratorów możemy zainstalować źródła jądra ręcznie. W poniższym przykładzie instalacja z “oficjalnej” płyty CD FreeBSD:

>     # mount /cdrom
>     # mkdir -p /usr/src/sys
>     # ln -s /usr/src/sys /sys
>     # cat /cdrom/src/ssys.[a-d]* | tar -xzvf -

Następnie wchodzimy do katalogu ``arch`/conf` i kopiujemy domyślny plik konfiguracyjny o nazwie `GENERIC` tworząc plik z nazwą jaką chcemy nadać swojemu jądru. Na przykład:

    # cd /usr/src/sys/i386/conf
    # cp GENERIC MYKERNEL

Tradycyjnie nazwa jądra pisana jest wielkimi literami. Dodatkowo dobrym pomysłem jest, by nazywać jądra tak jak komputery, co pomaga rozróżnić jądra, gdy mamy wiele komputerów z różnym sprzętem. Dla potrzeb tego przykładu nazwiemy jądro `MYKERNEL`.

> Podpowiedź: Nie jest najlepszym pomysłem trzymanie pliku konfiguracyjnego jądra bezpośrednio w katalogu `/usr/src`. Jeśli podczas kompilacji mamy kłopot, czasem może się okazać kuszącym pomysłem po prostu wykasować cały katalog `/usr/src` i rozpocząć od początku. Wtedy zwykle, kilka sekund po usunięciu katalogu, przypomina nam się, że usunęliśmy także plik konfiguracyjny jądra. Podobnie, nie powinniśmy edytować bezpośrednio `GENERIC`, gdyż może zostać nadpisany przy kolejnej aktualizacji naszego drzewa źródeł i zmiany, które wprowadziliśmy zostaną utracone.

> Możemy chcieć trzymać plik konfiguracyjny jądra gdziekolwiek, a następnie utworzyć symboliczne dowiązanie do pliku w katalogu ``i386``.

> Przykładowo:

>     # cd /usr/src/sys/i386/conf
>     # mkdir /root/kernels
>     # cp GENERIC /root/kernels/MYKERNEL
>     # ln -s /root/kernels/MYKERNEL

Przyszedł czas na edycję pliku konfiguracyjnego jądra. W przykładzie nazywa się on `MYKERNEL`. Jeśli dopiero zainstalowaliśmy system, jedynym z dostępnych edytorów może być vi. Mimo, że jest dobrze udokumentowany, opisany w wielu książkach, dla początkujących wydaje się on nieco zbyt skomplikowany. FreeBSD zaopatrzony jest również w drugi edytor, znacznie prostszy w obsłudze, o nazwie ee. Jeśli dopiero zaczynamy, ee powinien być naszym wyborem. Nie krępujmy się i zmieńmy wartości na górze pliku, szczególnie te, odróżniające nasz własny plik od `GENERIC`.

Jeśli już kompilowaliśmy jądro w SunOS™ lub innych systemach BSD, duża część pliku konfiguracyjnego powinna być nam znajoma. Jeśli natomiast jesteśmy lepiej zaznajomieni z systemami typu DOS, plik konfiguracyjny może wydać się nam nieco obcy. W tym przypadku przeczytajmy uważnie każdą opcję oraz komentarz w pliku konfiguracyjnym.

> Notatka: Jeśli synchronizujemy nasze drzewo źródłowe z najnowszymi źródłami projektu FreeBSD, należy zawsze, nim rozpoczniemy jakiekolwiek działania aktualizujące, zapoznać się z zawartością pliku `/usr/src/UPDATING`. W pliku tym zapisane są wszelkie niezbędne zagadnienia związane z aktualizacją FreeBSD. Plik `/usr/src/UPDATING` zawsze pasuje do źródła naszej wersji FreeBSD, jest przez to bardziej odpowiednim źródłem informacji niż Podręcznik.

Musimy teraz skompilować kod źródłowy jądra. Istnieją dwie procedury, za pomocą których można tego dokonać. Wybór zależeć będzie od tego w jakim celu kompilujemy jądro oraz od wykorzystywanej wersji FreeBSD.

- Jeśli zainstalowaliśmy tylko źródła jądra, wykorzystamy procedurę 1.

- Jeśli budujemy nowe jądro, bez aktualizowania źródeł (na przykład, by dodać dodatkowe opcje, np. `IPFIREWALL`), możemy użyć dowolnej z procedur.

- Jeśli przebudowujemy jądro jako część procesu `make buildworld`, powinniśmy użyć procedury 2.

Jeśli nie aktualizowaliśmy naszych źródeł w żaden sposób od ostatniego, zakończonego powodzeniem cyklu `buildworld`-`installworld` (nie uruchamialiśmy CVSup, CTM, ani nie korzystaliśmy z anoncvs), wówczas bezpiecznym jest skorzystać z sekwencji `config`, `make depend`, `make` i `make install`.

Procedura 1. Budowanie jądra w “tradycyjny” sposób.

1. By wygenerować kod źródłowy jądra, należy uruchomić config(8).

       # /usr/sbin/config MYKERNEL

2. Następnie, przenieśmy się do katalogu w którym dokonuje się budowy. Po ponownym uruchomieniu config(8) wyświetlona zostanie nazwa katalogu.

       # cd ../compile/MYKERNEL

3. Skompilujmy jądro.

       # make depend
       # make

4. Zainstalujmy nowe jądro.

       # make install

Procedura 2. Budowanie jądra w “nowy” sposób.

1. Wejdźmy do katalogu `/usr/src`.

       # cd /usr/src

2. Skompilujmy jądro.

       # make buildkernel KERNCONF=MYKERNEL

3. Zainstalujmy nowe jądro.

       # make installkernel KERNCONF=MYKERNEL

> Notatka: Ta metoda kompilacji jądra wymaga wszystkich plików źródłowych. Jeśli zainstalowaliśmy jedynie źródła jądra, powinniśmy skorzystać z opisanej powyżej metody tradycyjnej.

> Podpowiedź: Domyślnie, podczas kompilacji indywidualnego jądra, wszystkie moduły jądra zostaną również zrekompilowane. Jeśli chcemy zaktualizować jądro szybciej bądź zbudować tylko własne moduły, powinniśmy przed rozpoczęciem kompilacji jądra zmodyfikować plik `/etc/make.conf`:

>     MODULES_OVERRIDE = linux acpi sound/sound sound/driver/ds1 ntfs

> Zmienna ta definiuje listę modułów do kompilacji zamiast wszystkich. Inne zmienne przydatne w procesie kompilacji jądra opisane zostały w podręczniku systemowym make.conf(5).

Nowe jądro zostanie skopiowane do katalogu `/boot/kernel` jako `/boot/kernel/kernel` , a dotychczasowe zostanie przeniesione do `/boot/kernel.old/kernel`. Teraz należy ponownie uruchomić komputer. W razie jakby coś poszło źle, na końcu tego rozdziału przedstawionych zostało kilka awaryjnych rozwiązań. Przeczytajmy również rozdziały opisujące co zrobić w razie, gdy system nie chce się ponownie uruchomić.

> Notatka: Inne pliki związane z procesem uruchamiania, np. takie jak loader(8) czy pliki konfiguracyjne są przechowywane w katalogu `/boot`. Własne moduły jak i moduły innych producentów, można umieszczać w katalogu `/boot/kernel`, jednakże użytkownicy powinni być świadomi, iż synchronizacja modułów ze skompilowanym jądrem jest bardzo ważna. Moduły nie przygotowane do pracy z danym jądrem mogą doprowadzić do niestabilności czy błędów.

Poprzedni | Spis treści | Następny
Po co budować indywidualne jądro? | Początek rozdziału | Plik konfiguracyjny

Ten i inne dokumenty można pobrać z ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

W przypadku pytań o FreeBSD prosimy przeczytać dostępną dokumentację przed kontaktem z <questions@FreeBSD.org>.
W sprawie zapytań o tę dokumentację prosimy o kontakt z <doc@FreeBSD.org>.