Gentoo Logo

Uwaga: Ten dokument zawiera błędy lub nie jest już aktualizowany.


Konfiguracja jądra genkernel

Spis treści:

1.  Wstęp

Rationale

Dla użytkowników, którzy nie są jeszcze zaznajomieni z ręczną konfiguracją jądra powstał program automatyzujący ten proces - genkernel. Pomoże on stworzyć obraz jądra podobny do tych jakie znajdują się na płytach instalacyjnych Gentoo i są tak zaprojektowane, aby same wykrywały całą konfigurację sprzętową naszego systemu. Niektórzy użytkownicy mogą być również zainteresowani używaniem genkernela do uruchomienie sprzętu oraz obsługi działającego jądra, przed załadowaniem systemu. Ponieważ genkernel automatycznie kompiluje moduły jądra, możemy używać sprzętu, który do poprawnego funkcjonowania wymaga załadowania pewnych parametrów modułu.

Grupa docelowa

Jeśli jesteśmy niepewni jak skompilować jądro lub po prostu nie znamy konfiguracji naszego sprzętu, wtedy genkernel jest przydatnym narzędziem. Jest on stworzony do odciążenia użytkownika z ręcznej kompilacji jądra oraz domyślnie wspiera większość urządzeń dostępnych na rynku.

Jednakże, jeśli wiemy jakie sterowniki są wymagane przez system, możemy skrócić czas kompilacji jądra. Jest to możliwe ponieważ możemy wskazać genkernelowi, aby skompilował tylko niezbędne sterowniki. Często liczba sterowników wymaganych przez nasz system będzie znacznie mniejsza (co skróci czas kompilacji jądra) niż ta, którą domyślnie będzie chciał zainstalować genkernel.

Instalowanie genkernela

Aby zainstalować genkernel, wykonujemy polecenie emerge genkernel. Jeśli używamy Gentoo Reference Platform (GRP), musimy pamiętać, aby zainstalować pakiety binarne przez dodanie opcji -k do polecenia emerge. Ponieważ GRP jest dodatkiem do starszej wersji genkernela, więc flagi mogą być inne. W takim przypadku należy przeczytać genkernel --help i dowiedzieć się jak używać wersji genkernela zainstalowanej w systemie.

2.  Praca z genkernelem

Jak używać genkernela

Pomimo że istnieje kilka sposobów uruchomienia genkernela, to najbardziej niepożądaną jest genkernel all. Tu jest użyta ogólna konfiguracja, która działa dobrze na większości systemów. Jednak posiada ona wady: większość stworzonych modułów jest bezużytecznych dla szarego użytkownika, a czas kompilacji jest bardzo długi. Poniżej znajduje się przykład bardziej wydajnego podejścia, które uzyskujemy dopisując, jako root, pewne flagi:

Listing 2.1: Uruchamianie genkernela (z flagami)

# genkernel --splash --no-install --no-clean --menuconfig all

Powyższa operacja zmusza genkernel do stworzenia jądra z załączoną opcją splash (--splash), który będzie musiał być ręcznie zainstalowany (--no-install). Podczas przygotowywania źródła drzewa jądra, genkernel powstrzyma się od czyszczenia jakichkolwiek obecnych plików obiektowych z drzewa źródła (--no-clean). Zostanie również wyświetlone narzędzie konfiguracyjne, które pozwoli użytkownikowi wybrać, które moduły zostaną zbudowane (--menuconfig).

Istnieją również inne flagi, które zmieniają wynik kompilacji genkernela. Przykładowo, jeśli zamienimy flagę --no-install na --install, wtedy genkernel automatycznie zainstaluje nowe jądro w katalogu /boot. Użycie flagi --mountboot zezwoli genkernelowi na automatyczne montowanie partycji /boot, jeśli to będzie konieczne.

Należy pamiętać, że genkernel jest stworzony, aby uprościć kompilację jądra oraz uczynić ją bezstresową. Z tego powodu genkernel obsługuje wiele flag ułatwiających kompilację jądra. Przykładowo, istnieją flagi, które pomagają przy konfiguracji, zaś inne mają wpływ na proces kompilacji. Niektóre flagi pomagają nawet usunąć błędy kompilacyjne. Dla zainteresowanych, istnieją jeszcze flagi, które wpływają na złożenie, pakowanie, a nawet ładowanie jądra.

Reszta tego rozdziału podaje dostępne flagi wraz z ich opisem działania. Niektóre flagi mogą wykonać operację w drugą stronę. Operacje w drugą stronę mogą być uzyskane za pomocą przedrostka no-, a ich opis działania zawarty jest w nawiasach kwadratowych, [].

Flagi konfiguracyjne

Flagi konfiguracyjne wypisane poniżej są po to, aby pomóc zdecydować jakie funkcje mają być włączone lub wyłączone w jądrze przed jego kompilacją. Możemy nawet wybrać czy stworzony plik konfiguracyjny ma być zachowany. Poniżej znajdują się główne flagi konfiguracyjne:

  • --no-menuconfig: Uruchamia [lub nie uruchamia] polecenie make menuconfig (wywołuje interaktywne narzędzie konfiguracyjne) przed kompilacją jądra.
  • --gconfig: Dostarcza narzędzia konfiguracji jądra, które zależy od bibliotek GTK+. Zaletą tej opcji jest to, że większości użytkowników łatwiej się konfiguruje jądro, ponieważ to narzędzie jest oparte o środowisko X. Wada jest taka, że wymagane jest środowisko X, więc nie będzie ono pracować w wierszu poleceń.
  • --xconfig: Dostarcza narzędzia konfiguracji jądra, które zależy od bibliotek QT. Zaletą tej opcji jest to, że większości użytkowników łatwiej się konfiguruje jądro, ponieważ to narzędzie jest oparte o środowisko X. Wada jest taka, że wymagane jest środowisko X, więc nie będzie ono pracować w wierszu poleceń.
  • --no-save-config: Zachowuje [lub nie zachowuje] konfigurację jądra, do pliku znajdującego się w katalogu /etc/kernels/, dla późniejszego użytku.

Flagi kompilacyjne

Następujące flagi zaczynają działać podczas kompilacji:

  • --kerneldir=/ścieżka/do/źródeł: To określa alternatywną lokalizację dla źródeł jądra, zamiast domyślnej lokalizacji /usr/src/linux.
  • --kernel-config=/ścieżka/do/pliku_z_konfiguracją: To określa plik z konfiguracją, jaki ma zostać użyty zamiast /ścieżka/do/źródeł/.config.
  • --module-prefix=/ścieżka/do/katalogu/przedrostka/: Określa przedrostek do katalogu gdzie moduły jądra zostaną zainstalowane (domyślną ścieżką jest katalog /lib/modules/).
  • --no-clean: To uruchomi [lub nie uruchomi] make clean przed kompilacją jądra. Polecenie make clean powoduje, że wszystkie pliki obiektów i zależności z drzewa jądra zostaną usunięte.
  • --no-mrproper: To uruchomi [lub nie uruchomi] make mrproper przed kompilacją jądra. Podobnie jak polecenie make clean, make mrproper usuwa wszystkie pliki obiektów i zależności. Jednakże jakiekolwiek wcześniejsze pliki konfiguracyjne (w /ścieżka/do/źródeł/.config lub /ścieżka/do/źródeł/.config.old) zostaną również usunięte z drzewa jądra.
  • --oldconfig: Wykonuje polecenie make oldconfig, które próbuje zebrać informacje konfiguracyjne dla architektury systemowej z podstawowego skryptu w /usr/share/genkernel/. To nie jest proces interaktywny, użytkownik nic nie musi wprowadzać. Jeśli flaga --oldconfig zostanie użyta wraz z flagą --clean, wtedy druga flaga zostanie zanegowana, co spowoduje zamienienie jej na flagę --no-clean.
  • --callback="echo Witaj": To polecenie wywołuje podane polecenia (w tym przypadku echo Witaj), po tym jak jądro i powiązane z nim moduły zostaną zbudowane, ale jeszcze przed utworzeniem obrazu initrd. Jest to użyteczne jeśli trzeba załadować zewnętrzne moduły do initrd przez zainstalowanie stosownych rzeczy wraz z funkcją callback, a wtedy ponownie jest definiowana grupa modułów genkernela.
  • --no-install: Wykonuje [lub nie wykonuje] polecenie make install, które zainstaluje nowy obraz jądra, plik konfiguracyjny, obraz initrd oraz odwzorowanie systemu (ang. system map) do zamontowanej partycji rozruchowej. Jakiekolwiek skompilowane moduły również zostaną zainstalowane.
  • --no-initrdmodules: Zabrania dodawania modułów do tworzonego initrd. Ta flaga jest wyjątkiem do reguły o przedrostku no-, ominięcie przedrostka stworzy błędną flagę genkernela.
  • --genzimage: Tworzy obraz initrd przed obrazem jądra. (Ta przeróbka obecnie stosuje się tylko do systemów PPC Pegasos)

Flagi kompilatora

Następujące flagi są wspierane przez genkernel oraz są przekazywane niezbędnym aplikacjom podczas kompilacji jądra. Te flagi wpływają na kompilator użyty do procesu kompilacji, aczkolwiek na znacznie niższym poziomie.

  • --kernel-as=Assembler: Określa język programowania niskiego poziomu, który zostanie użyty do kompilacji jądra.
  • --kernel-cc=Kompilator: Określa kompilator, który zostanie użyty do kompilacji jądra.
  • --kernel-ld=Konsolidator: Określa program łączący, który zostanie użyty do kompilacji jądra.
  • --kernel-make=Make: Określa narzędzie GNU make, które zostanie użyte do kompilacji jądra.
  • --utils-as=Assembler: Określa język programowania niskiego poziomu, który zostanie użyty do kompilacji dodatkowych narzędzi.
  • --utils-cc=Kompilator: Określa kompilator, który zostanie użyty do kompilacji dodatkowych narzędzi.
  • --utils-ld=Konsolidator: Określa program łączący, który zostanie użyty do kompilacji dodatkowych narzędzi.
  • --utils-make=Make: Określa narzędzie GNU make, które zostanie użyte do kompilacji dodatkowych narzędzi.
  • --makeopts=-jX: Określa ilość równoległych wątków, w których może być wdrożone narzędzie make podczas kompilacji jądra (oraz narzędzi). Zmienna 'X' jest liczbą otrzymaną przez dodanie jedynki do liczby procesorów znajdujących się w systemie. Więc dla komputerów z 1 procesorem, odpowiednią flagą jest -j2, system z dwoma CPU użyje -j3 itd. (System z 1 procesorem, który wspiera Hyper-Threading™ (HT) Technology może użyć flagi -j3, pod warunkiem, że wsparcie dla Symmetric Multi-Processing (SMP) zostało załączone w jądrze).

Flagi diagnostyczne

Flag diagnostyczne podczas kompilacji jądra kontrolują ilość wyświetlanych informacji.

  • --debuglevel=verblevel: Kontroluje poziom rozwlekłości wyświetlanych informacji przez genkernel. Zmienna verblevel jest liczbą całkowitą z przedziału od 0 do 5. Poziom '0' reprezentuje minimalną ilość wyświetlanych informacji, a '5' dostarcza tak dużo informacji, o czynnościach genkernela podczas kompilacji jądra, jak to możliwe.
  • --debugfile=/ścieżka/do/pliku_wyjścia: Ignoruje wartość ustawioną przez flagę --debuglevel i wysyła wszystkie dane diagnostyczne stworzone przez genkernel do pliku, który domyślnie znajduje się w /var/log/genkernel.log.
  • --no-color: Włącza [lub nie włącza] kolorowe wyjście informacji diagnostycznych (raportowanych przez genkernel) używając ciągów escape.

Flagi startowe

Poniższe flagi są używane do stworzenia pewnych efektów podczas ładowania systemu. Niektóre z nich są tylko estetyczne, lecz inne mogą być niezbędne do włączenia pewnych funkcji w systemie.

  • --no-splash: Włącza [lub wyłącza] wsparcie dla splasha w obrazie initrd zbudowanym przez genkernel. Funkcja splash jest wspierana na ograniczonej liczbie architektur, a wymagane jest także jądro, które wspiera tę funkcję.
  • --splash-res=PreferowanaRozdzielczość: Ta flaga pozwala na wybranie rozdzielczości jaka będzie wspierana w naszym initrd podczas startu systemu. Jest to użyteczne z dwóch powodów: po pierwsze mamy możliwość wybrania tylko tej rozdzielczości, która pasuje dla naszego systemu, po drugie, zmniejszamy tym samym wielkość obrazu initrd (ponieważ initrd nie będzie posiadać wsparcia dla rozdzielczości, których nie potrzebujemy). Jednakże, możemy pominąć tę flagę jeśli jądro jest kompilowane dla płyty instalacyjnej, to pozwoli gensplashowi na wsparcie wszystkich rozdzielczości.
  • --do-keymap-auto: Wymuszamy wybór mapy klawiszy podczas ładowania systemu.
  • --lvm2: Włącza wsparcie dla przechowywania danych za pomocą Logical Volume Management (LVM2) ze statycznych plików binarnych, jeśli są dostępne w systemie. Niezbędne (statyczne) pliki binarne LVM2 zostaną skompilowane, jeśli są niedostępne. Przed włączeniem tej flagi należy się upewnić, że mamy zainstalowany w systemie pakiet lvm2 za pomocą polecenia emerge lvm2 oraz należy przeglądnąć przewodnik Instalacja LVM2 w Gentoo.
  • --evms2: Włącza wsparcie dla przechowywania danych za pomocą Enterprise Volume Management System (EVMS2), jeśli go posiadamy. Przed użyciem tej flagi należy się upewnić, że mamy zainstalowany pakiet evms za pomocą polecenia USE=static emerge evms2. (Pominięcie flagi USE=static podczas instalacji pakietu spowoduje nie dołączenie do pakietu niezbędnych statycznych plików binarnych).
  • --dmraid: Włącza wsparcie dla DMRAID. Jest to narzędzie, które tworzy odwzorowania RAID-u za pomocą podsystemu jądra device-mapper. DMRAID odkrywa, włącza, wyłącza oraz wyświetla właściwości ustawień programowych RAID-u (przykładowo, ATARAID) oraz zawartych partycji DOS.
  • --luks: Obsługa Linux Unified Key Setup czyli LUKS. Pozwoli to na korzystanie z partycji głównej zaszyfrowanej przez LUKS. W konfiguracji ustawia się to zaszyfrowane urządzenie zmienną crypt_root. Natomiast zmienna real_root powinna wskazywać na niezaszyfrowaną partycję stworzoną przez LUKS.
  • --linuxrc=/ścieżka/do/linuxrc: Określa ścieżkę do stworzonego przez użytkownika pliku linuxrc —, który jest skryptem, który jest uruchamiany podczas załączania jądra, przed rozpoczęciem ładowania systemu (domyślnie skrypt linuxrc znajduje się w katalogu /usr/share/genkernel/). Ten skrypt pozwala na uruchomienie małego jądra z modułami oraz załadowanie sterowników, które są potrzebne (jako moduły) przez system.
  • --cachedir=/ścieżka/do/katalogu/cache/: Zastępuje domyślną lokalizacją katalogu cache podczas kompilacji jądra.
  • --tempdir=/ścieżka/do/nowego/katalogu/tymczasowego/: Określa lokalizację katalogu tymczasowego używanego przez genkernel podczas kompilacji jądra.
  • --unionfs: Załącza wsparcie dla Unification File System w obrazie initrd.

Pozostałe flagi

Poniższe flagi są wspierane przez genkernel, ale nie pasują do żadnej z powyższych kategorii:

  • --mountboot: Rozpoznaje czy katalog /boot/ trzeba montować jako osobną partycję. Sprawdzi również, jeśli to będzie potrzebne, skrypt /etc/fstab w poszukiwaniu instrukcji jak zamontować partycję rozruchową.
  • --kernname=Nazwa: Pozwala na zmianę nazwy obrazów jądra oraz initrd w katalogu /boot/. Po zmianie pliki te będą się nazywały odpowiednio kernel-Nazwa-wersja oraz initramfs-Nazwa-wersja.

Możliwe tryby

Tryb mówi genkernelowi co ma skompilować. W obecnej chwili obsługiwane są poniższe tryby:

  • initrd: Buduje jedynie obraz initrd.
  • bzImage: Buduje jedynie obraz jądra systemu.
  • kernel: Buduje obraz jądra systemu i moduły.
  • all: Buduje wszystko — initrd, obraz jądra i moduły.

Ostatni tryb, all, jest zalecany dla większości użytkowników, ponieważ wtedy zostanie zbudowane w pełni działające jądro. Należy pamiętać, że tryb po prostu mówi genkernelowi co budować, nie instalować.

Konfiguracja bootloadera

Aby genkernel poprawnie współpracował z programem ładującym należy dokonać czterech zmian.

  1. Należy dodać root=/dev/ram0 oraz init=/linuxrc do parametrów jądra przekazanych do obrazu jądra.
  2. Należy dodać, np. real_root=/dev/hda3 do parametrów jądra przekazywanych do obrazu jądra, gdzie /dev/hda3 to ścieżka do partycji rozruchowej.
  3. Jeśli używamy splasha, należy dodać właściwą rozdzielczość jak np. vga=0x317 do parametrów przekazywanych do jądra oraz dodać splash=verbose lub splash=silent w zależności od żądanego stopnia szczegółowości wyświetlanych informacji.
  4. Informacje o initrd muszą zostać dodane zgodnie z wymaganiami programu ładującego. Podręcznik Gentoo zawiera tego dokładny opis.

3.  Opcje konfiguracyjne

Edytowanie /etc/genkernel.conf

Podawanie flag genkernelowi z linii poleceń może być czasochłonne, szczególnie jeśli mamy dużo flag:

Listing 3.1: Uruchamianie genkernela (przeładowany flagami)

# genkernel --debuglevel=5 --no-color --no-mrproper --clean --gensplash\
--kerneldir=/path/to/alternate/kernel/sources --install --menuconfig --udev\
--kernel-config=/path/to/preferred/configfile --save-config --mountboot all

Na szczęście istnieje plik konfiguracyjny gdzie większość podstawowych opcji może być ustawionych (lub zmienionych). Spójrzmy na ważniejsze opcje:

  • MENUCONFIG=[yes|no]: Ta opcja jest równoważna fladze --menuconfig używanej przez genkernel, której włączenie powoduje wykonanie polecenia make menuconfig, co wywołuje narzędzie konfiguracji jądra. Aby wywoływać to narzędzie automatycznie, podczas konfiguracji jądra, za pomocą tego skryptu, wtedy należy ustawić tę opcję na 'yes'; w przeciwnym wypadku wybieramy 'no'.
  • CLEAN=[yes|no]: Ustawienie tej opcji na 'yes' jest równoważne fladze --clean używanej przez genkernel, która wywołuje polecenie make clean, aby usunąć wszystkie pliki obiektowe wraz z zależnościami z drzewa jądra. Ustawienie tej opcji na 'no' tworzy efekt kaskadowy — jest to równoważne fladze --no-clean, która wyłącza polecenie make clean oraz sugeruje flagę --no-mrproper — jednocześnie anulując polecenie make mrproper.
  • MRPROPER=[yes|no]: Ustawienie tej opcji na 'yes' jest równoważne fladze --mrproper używanej przez genkernel, która wywołuje polecenie make mrproper, które usuwa z drzewa jądra wszystkie pliki konfiguracyjne. Wybranie 'no' jest równoważne z flagą --no-mrproper, która wyłącza polecenie make mrproper.
  • MOUNTBOOT=[yes|no]: Ustawienie tej opcji na 'yes' jest równoważne fladze --mountboot używanej przez genkernel, która jeśli jest to wymagane, na czas kompilacji, montuje automatycznie katalog /boot/. Jeśli katalog /boot/ znajduje się na osobnej partycji, należy rozważyć załączenie tej opcji; za jej pomocą nie będziemy musieli później pamiętać o jednym istotnym kroku.
  • SAVE_CONFIG=[yes|no]: Po skonfigurowaniu jądra wybrane opcje zostaną zapisane w pliku .config w drzewie jądra. Ten skrypt może być nadpisany lub nawet usunięty podczas następnej kompilacji jądra. Wybranie 'yes' jest równoznaczne z flagą --save-config używanej przez genkernel oraz zachowuje wybrane ustawienia jądra jako skrypt w katalogu /etc/kernels/. Wybranie 'no' zachowuje status quo.
  • USECOLOR=[yes|no]: Ustawienie tej opcji na 'yes' jest równoważne fladze --color używanej przez genkernel, która koloruje wyjście genkernela, w celu ułatwienia diagnostyki (jeśli konieczne).
  • DEBUGLEVEL=[0|1|2|3|4|5]: Ta opcja zmienia rozwlekłość wyjścia produkowanego przez genkernel — ustawienie tej opcji na '0', jest równoważne z --debuglevel=0, wstrzyma całe wyjście wyprodukowane przez genkernel do minimum; ustawienie tej opcji na '5', jest równoważne z --debuglevel=5, dostarcza użytkownikowi całe wyjście wyprodukowane przez genkernel.

Poprzez wybranie odpowiednich opcji w /etc/genkernel.conf, możemy zmniejszyć o połowę liczbę flag, które podajemy genkernelowi z wiersza poleceń:

Listing 3.2: Uruchamianie genkernela (z flagami), po edycji genkernel.conf

# genkernel --gensplash --kerneldir=/path/to/alternate/kernel/sources --udev\
--kernel-config=/path/to/preferred/configfile --install all

Identyczne rezultaty mogą być uzyskane przy pomocy obydwu podejść jednak to drugie umożliwia zachowanie ustawień w skrypcie, który może być później zmieniony.

4.  Network-Booting z genkernelem

Network Booting z płyty instalacyjnej

Narzędzie genkernel może zbudować obrazy jądra oraz initrd, które będą wspierały network booting lub netbooting. Jeśli mamy szczęście to powinniśmy już być w stanie netboot dowolny komputer w środowisko dostarczone przez płytę instalacyjną.

Magia leży w skrypcie genkernela linuxrc: próbuje on netmount płytę instalacyjną używając NFS. Odtąd skrypty startowe płyty instalacyjnej widzą płytę tak jakby była obecna lokalnie.

Budowanie obrazów jądra oraz initrd ze wsparciem dla netbooting

Aby załączyć wsparcie dla netbooting, włączamy w jądrze następujące opcje:

Ostrzeżenie: Wsparcie dla netbooting w genkernelu jest eksperymentalne, więc może ono zawierać błędy.

Po pierwsze, obraz jądra musi zawierać sterowniki dla naszej karty sieciowej. Normalnie sterowniki dla takich urządzeń będą skompilowane jako moduły. Jednakże, jest to konieczne, aby (dla netbooting) te sterowniki posiadać wkompilowane w obraz jądra, a nie jako moduły.

Listing 4.1: Konfiguracja wsparcia dla naszej karty sieciowej w jądrach serii 2.6.x

Device Drivers --->
   Networking Support --->
      Ethernet (10 or 100Mbit)  --->
         [*] Ethernet (10 or 100Mbit)
         <*>   the driver for your network card
(Należy się upewnić, że wybraliśmy <*> a nie
<M>)

Po drugie, zalecamy włączenie opcji IP: kernel level autoconfiguration oraz IP: DHCP support. Tym samym ominiemy niepotrzebną złożoność warstwy, ponieważ adres IP oraz ścieżka NFS do płyty instalacyjnej mogą być skonfigurowane na serwerze DHCP. Oczywiście, znaczy to tyle, że wiersz polecenia jądra pozostanie taki sam na dowolnej maszynie — co jest bardzo ważne dla etherbooting.

Listing 4.2: Konfiguracja wsparcia dla DHCP w jądrach serii 2.6.x

Device Drivers --->
   Networking Support --->
      Networking options
         [*] TCP/IP networking--->
         [*]   IP: kernel level autoconfiguration
         [*]     IP: DHCP support
(Te opcje mówią jądru, aby wysłał żądanie do serwera DHCP podczas
startu systemu)

Dodatkowo należy włączyć wsparcie dla SquashFS, ponieważ większość nowoczesnych płyt instalacyjnych Gentoo tego wymaga. Wsparcie dla SquashFS nie jest zawarte w zwykłym drzewie źródła jądra. Aby włączyć SquashFS, nakładamy odpowiednie łatki na jądro lub instalujemy gentoo-sources.

Listing 4.3: Konfiguracja wsparcia dla SquashFS w jądrze

File systems--->
   Miscellaneous filesystems --->
      [*] SquashFS 2.X - Squashed file system support

Po zakończeniu procesu kompilacji, tworzymy skompresowany tarball (tar.gz), który zawiera moduły jądra. Ten krok jest konieczny, jeśli wersja jądra nie jest taka sama jak wersja obrazu jądra na płycie instalacyjnej.

Listing 4.4: Tworzenie skompresowanego tarballa zawierającego moduły jądra

(Tworzymy plik tar.gz zawierający wszystkie moduły)
# cd /
# tar -cf /tmp/modules-X.Y.Z.tar.gz /lib/modules/X.Y.Z/

Zależnie od mechanizmu uruchamiania sieciowego, będziemy potrzebowali następujących kroków:

Listing 4.5: Tworzenie obrazu startowego

(Tworzenie obrazu etherboot)
# emerge mknbi
# cd /boot
# mkelf-linux -params="root=/dev/ram0 init=/linuxrc ip=dhcp" kernel... initrd...
> etherboot.img

(Tworzenie obrazu OpenBoot/SPARC64 TFTP)
# emerge sparc-utils
# cd /boot
# elftoaout kernel... -o kernel.aout
# piggyback64 kernel.aout System.map-... initrd-...
# mv kernel.aout openboot.img (To jest obraz startowy)

(PXE nie wymaga większej ilości kroków, jądro oraz initrd mogą być używane tak jak są)

W końcu, kopiujemy to jądro na serwer TFTP. Szczegóły zależą od używanej architektury i wykraczają poza ten przewodnik. Po więcej informacji należy spojrzeć do dokumentacji odpowiedniej platformy.

Ustawianie NFS

Aby ustawić zasoby współdzielone NFS, które zawierają płytę instalacyjną, używamy urządzenia pseudo sieci (ang. loop device), aby zamontować obraz ISO, po czym kopiujemy zawartość płyty na udostępnione zasoby NFS. Ponieważ wszystkie pliki tar.gz, które znajdują się w katalogu /nfs/livecd/add/, zostaną wypakowane przez skrypty genkernela, więc jedyne co nam pozostało to skopiować plik modules-X.Y.Z.tar.gz do katalogu /nfs/livecd/add/.

Listing 4.6: Przygotowywanie zasobów współdzielonych NFS

(Tu zakładamy, że /nfs/livecd jest wyeksportowanym zasobem
współdzielonym NFS)
# mount /tmp/gentoo-livecd.iso /mnt/cdrom -o loop
# cp -p /mnt/cdrom /nfs/livecd
# umount /mnt/cdrom

(Kopiujemy modules.tar.gz do /add)
# mkdir /nfs/livecd/add
# cp /tmp/modules-X.Y.Z.tar.gz /nfs/livecd/add

Ustawianie DHCP

Obrazy netboot zażądają od serwera DHCP adresu IP oraz parametru root-path. Obydwa mogą być określone za pomocą adresu MAC, służącego do identyfikacji maszyn:

Listing 4.7: Przykładowe ustawienie pliku dhcpd.conf na kliencie

...

host netbootableMachine {
         hardware ethernet 11:22:33:44:55:66;
         fixed-address 192.168.1.10;
         option root-path "192.168.1.2:/nfs/livecd";
}
(Tu 192.168.1.2 jest serwerem NFS, podczas gdy 192.168.1.10 jest
adresem IP od maszyny netbooted)
...

Rozkazy Netbooting

Samo Netbooting jest bardzo specyficzne w zależności od platformy. Ważną częścią jest określenie parametrów ip=dhcp oraz init=/linuxrc w wierszu polecenia jądra, ponieważ załączą one interfejs sieciowy oraz powiedzą skryptom initrd, aby zamontowały płytę instalacyjną poprzez NFS. Poniżej znajdują się wskazówki dla konkretnych platform:

Listing 4.8: Rozkazy Netbooting

# Etherboot - wkładamy dyskietkę etherboot po czym uruchamiamy ponownie komputer.
# Wiersz polecenia jądra został określony podczas budowania obrazu)

# Sparc64 - Wciskamy kombinację klawiszy Stop-A, w wierszu polecenia boot wpisujemy)
ok boot net ip=dhcp init=/linuxrc

# PXE - Ustawiamy pxelinux (część syslinux), następnie tworzymy
# pxelinux.cfg (domyślnie), który będzie zawierać:

DEFAULT gentoo
TIMEOUT 40
PROMPT 1

LABEL gentoo
        KERNEL kernel-X.Y.Z
        APPEND initrd=initrd-X.Y.Z root=/dev/ram0 init=/linuxrc ip=dhcp

5.  Zakończenie

Automatyzować czy nie?

Celem genkernela jest dostarczenie (łatwiejszej) alternatywnej metody kompilacji jądra. Jak zwykle mamy wolność wyboru czy chcemy czy nie chcemy automatyzować proces kompilacji jądra.



Drukuj

Zaktualizowano 22 czerwca 2008

Podsumowanie: Dokładny opis instalacji i konfiguracji jądra za pomocą programu genkernel.

Tim Yamin
Autor

Jimi Ayodele
Contributor

Thomas Seiler
NFS Support

Mateusz Kotyrba
Tłumaczenie

Donate to support our development efforts.

Support OSL
Gentoo Centric Hosting: vr.org
Tek Alchemy
SevenL.net
Global Netoptex Inc.
Bytemark
Online Kredit Index
Copyright 2001-2009 Gentoo Foundation, Inc. Questions, Comments? Contact us.