Uwaga:
Ten dokument zawiera błędy lub nie jest już aktualizowany.
|
Konfiguracja jądra genkernel
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.
-
Należy dodać root=/dev/ram0 oraz init=/linuxrc do parametrów
jądra przekazanych do obrazu jądra.
-
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.
-
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.
-
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
|
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
|
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 |
# 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 |
# emerge mknbi
# cd /boot
# mkelf-linux -params="root=/dev/ram0 init=/linuxrc ip=dhcp" kernel... initrd...
> etherboot.img
# emerge sparc-utils
# cd /boot
# elftoaout kernel... -o kernel.aout
# piggyback64 kernel.aout System.map-... initrd-...
# mv kernel.aout openboot.img
|
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 |
# mount /tmp/gentoo-livecd.iso /mnt/cdrom -o loop
# cp -p /mnt/cdrom /nfs/livecd
# umount /mnt/cdrom
# 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";
}
...
|
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 |
ok boot net ip=dhcp init=/linuxrc
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.
Materiał udostępniany na podstawie licencji Creative Commons -
Attribution / Share Alike.
|
|