[HOW-TO] Kernel, konfiguracja+kompilacja+instalacja

adrikux

[HOW-TO] Kernel, konfiguracja+kompilacja+instalacja

Post autor: adrikux » 09 lip 2010, 02:31

Instalacja jądra Linux
Wstęp

Jak sam tytuł wskazuje, artykuł ten dotyczy instalacji jądra Linux i przeznaczony jest dla osób pragnących samodzielnie wykonać tą czynność. Poradnik dedykowany jest zarówno dla zaawansowanych użytkowników czytających go ze względu na problemy napotkane w przeszłości podczas samodzielnej kompilacji jak i dla użytkowników początkujących mających potrzebę wykonania tej operacji lub pragnących poszerzyć zakres własnej wiedzy. Zawiera on wymienione w odpowiedniej kolejności czynności, które należy wykonać w celu pomyślnego zakończenia omawianego procesu oraz opis poszczególnych zagadnień i ról pełnionych przez dane polecenie. Artykuł został napisany w sposób łączący teorię wraz z wypunktowaniem czynności w jedność. Mam nadzieję, że pisząc go w ten sposób sprawię, że proces kompilacji wśród wielu użytkowników nie będzie polegał na bezmyślnym kopiowaniu poleceń, lecz stanie się czynnością zrozumiałą zarówno w jej początkowym stadium polegającym na dostosowaniu jądra do sprzętu jak i w końcowym, czyli tworzeniu pakietów instalacyjnych. Pisząc o dostosowaniu jądra do sprzętu, na myśli mam wybór odpowiednich usług przez nie oferowanych, część z nich jest niezbędna do prawidłowego funkcjonowania systemu natomiast inne mogą być zbędne dla naszej konfiguracji sprzętowej. Jądro systemu udostępnione jest w dwóch formach, binarnej oraz źródłowej. Wybór formatu zależy tylko od tego czy spełnia on nasze kryteria. Nie ważne od wybranego przez nas formatu paczki, otrzymamy ten sam kernel (w niektórych binarnych postaciach częściowo zmodyfikowany przez autora pakietu), różniący się jedynie sposobem udostępniania. Pakiety binarne zawierają jądro skompilowane i przeznaczone do bezpośredniej instalacji. W przypadku Ubuntu, autorem kompilacji jest Canonical. Instalując jądro z użyciem pakietu binarnego, nie mamy możliwości dostosowania go do swojego sprzętu, czyli deaktywacji zbędnych modułów i zastąpienia ich wybranymi przez nas, ponieważ czynność ta została wykonana przez autora kompilacji. Nie oznacza to jednak, że poszczególnych modułów nie możemy wyłączyć po zainstalowaniu jądra. Dotyczy to jednak pojedynczych elementów i uniemożliwia pełne dostosowanie do sprzętu. Korzystając z binarek, otrzymujemy wygodny i bezproblemowy sposób instalacji nowego jądra, lecz bez możliwości selekcji modułów. Pakiety źródłowe stanowią natomiast przeciwieństwo binarnych. Pochodzą one bezpośrednio od developerów jądra w postaci źródłowej, czyli nieskompilowanej zapewniając w ten sposób możliwość dostosowania go do naszego sprzętu oraz pełnej kontroli nad używanymi modułami. W artykule będę stosował słowo Linux jako miano jądra systemu. Przyczyną tego nie jest jedynie oszczędność znaków (Linux jest krótsze niż jądro systemu Linux), lecz fakt, że Linux systemem operacyjnym nie jest, lecz stanowi jedynie jądro systemowe. Ten artykuł poświęcony jest jednak innemu tematowi, tak więc zainteresowanych odsyłam do wikipedii, gdzie wyjaśniona jest różnica między pojęciami Linux, a GNU/Linux. Nie ponoszę odpowiedzialności za ewentualne szkody powstałe w wyniku przeprowadzenia omawianego procesu. Czynności tu przedstawione wykonane zostały na kilku PC o odmiennej konfiguracji sprzętowej, tak więc w przypadku niepowodzenia użytkownik może mieć pretensję sam do siebie, ponieważ czynności są przetestowane oraz omówione krok po kroku. Poniżej zamieszczam linki do pobrania jądra.

Źródła: Obrazek
Binaria: Obrazek

Teoria

Jak we wstępie wspomniałem, pragnę by operacja samodzielnej kompilacji jądra była zrozumiała dla początkujących użytkowników. Stworzyłem więc sekcję poświęconą krótkiemu omówieniu zagadnień. W celu zrozumienia idei kompilacji jądra oraz czynności jej towarzyszących należy omówić czym jest jądro systemu oraz jaką pełni rolę. Stanowi ono program odpowiadający za komunikację między systemem operacyjnym, a sprzętem komputerowym. Do komunikacji niezbędne są sterowniki, a jądro stanowi ich bazę. Można więc stwierdzić, że jądro stanowi najważniejszy element systemu. Za komunikację nie odpowiada jednak jedynie jądro. To także zadanie graficznego systemu okienkowego, popularnie zwanego serwerem X (Xorg) zajmującego się obsługą urządzeń wejścia, między innymi klawiatury i myszy. Jak wcześniej wspomniałem jądro stanowi bazę sterowników, lecz coraz częściej sterowniki umieszczane są w postaci modułów. Oznacza to, że nie znajdują się bezpośrednio w jądrze i wymagają osobnej kompilacji. Stanowi to zaletę, ponieważ dany moduł możemy załadować jedynie w zaistniałej potrzebie, a następnie usunąć z uruchomionego jądra przykładowo za pomocą rmmod-a. Przykładem takiego modułu może być otwarty sterownik "nouveau" do kart nVidii. Niektóre sterowniki, przykłado od HDD potrzebne są przed załadowaniem ich przez system co uniemożliwia modularną budowę, lecz zmusza do umieszczenia ich bezpośrednio w kodzie jądra. Linux z użyciem pakietu źródłowego może zostać zainstalowany na dwa sposoby. Pierwszym z nich jest skompilowanie jądra wraz z modułami oraz wygenerowanie obrazu initrd używanego przez program rozruchowy do uruchomienia systemu. Drugi natomiast polega na stworzeniu pakietów instalacyjnych, które będą następnie zainstalowane w systemie. Osobiście preferuję sposób drugi i zamieszczę go w tym poradniku. W przypadku rezygnacji z aktualnego jądra, można je bezproblemowo usunąć poprzez menedżera pakietów. Nie oznacza to jednak, że w przypadku sposobu pierwszego usunięcie katalogu z jądrem z folderu /boot jest problemem. Poprosu preferuję sposób drugi.

Przygotowanie do kompilacji

Przed przystąpieniem do samodzielnej instalacji jądra, należy upewnić się o obecności odpowiednich w systemie pakietów. Do przeprowadzenia kompilacji potrzebujemy kompilatora C g++, make oraz pakiet initramfs-tools generujący obraz initrd.

Kod: Zaznacz cały

apt-get update && apt-get install gcc build-essential initramfs-tools
W przypadku tworzenia pakietów z jądrem, tak jak przedstawia artykuł niezbędne jest instalacja pakietów wymienionych powyżej oraz dodatkowych.

Kod: Zaznacz cały

apt-get update && apt-get install kernel-package libncurses5-dev fakeroot bzip2 cramfsprogs
Konfiguracja

Ta faza jest kluczową i ma wpływ na jakość działania systemu pracującego na nowo skompilowanym Linuksie. Dostosujemy w niej go do sprzętu poprzez włączenie/wyłączenie poszczególnych modułów. Czynność tą możemy wykonać na kilka sposobów różniących się interfejsem, musimy jednak pobrane z kernel.org archiwum rozpakować, a zawartość przenieść do /usr/src.

Kod: Zaznacz cały

tar -xjvf archiwum.tar.bz2
rm archiwum.tar.bz2
sudo -s
mv zawartość_archiwum /usr/src
cd /usr/src/zawartość_archiwum
Przed uruchomieniem narzędzia konfiguracyjnego, zaleca się użycie pliku konfiguracyjnego starego jądra co zagwarantuje nam poprawne działanie nowego (make oldconfig). Zostaną użyte te same usługi co w starym jądrze. Kolejnym krokiem jest skorzystanie z usługi dostosowywującej konfigurację jądra, a konkretnie modułów do naszego sprzętu (make localmodconfig). Jego działanie polega na selekcji modułów niezbędnych dla naszego sprzętu przyspieszając tym samym proces kompilacji oraz zwiększając ilość wolnego miejsca na HDD (pozbycie się nieużywanych modułów). Warunkiem prawidłowego funkcjonowania naszeg sprzętu na nowym jądrze, jest załadowanie sterowników do każdego posiadanego przez nas urządzenia w momencie przeprowadzenia localmodconfig. Następnie uruchamiamy konfigurator, zalecanym przeze mnie jest menuconfig w którym wybieramy opcję Load at Alternate Configuration File (druga opcja od dołu), zatwierdzamy domyślną propozycję czyli .config. W tym momencie możemy wprowadzić zmiany w ustawieniach konfiguracji jądra, jeżeli nie mamy zamiaru nic zmieniać lub zmiany już wprowadziliśmy musimy je teraz zapisać wybierając ostatnią opcję (Save an Alternate Configuration File). Wymienione czynności wykonujemy poniższymi poleceniami.

Kod: Zaznacz cały

make oldconfig
make menuconfig
Plik konfiguracyny starego jądra znajduje się w katalogu /boot, tak więc opcjonalnie zamiast wydania polecenia (make oldconfig), możemy przekopiować go do źródeł nowego jądra zmieniając jego nazwę na .config,

Kod: Zaznacz cały

cp /boot/config-$(uname -r) /usr/src/linux-2.6.35-rc4/.config
menu config nie jest jedynym narzędziem konfiguracyjnym. Poniżej znajduje się krótkie omówienie wszystkich:
  • make config - Tekstowy konfigurator.
    Obrazek
  • make menuconfig - Tekstowy konfigurator z posegregowanymi w ramki opcjami.
    Obrazek
  • make xconfig - Graficzny zbudowany w QT konfigurator. Użytkownicy GNOME potrzebują bibliotek QT dostępnych w paczkach libqt3-mt, libqt3-mt-dev.
    Obrazek
  • make gconfig - Graficzny zbudowany w Gtk konfigurator działający po zainstalowaniu pakietu libglade2-dev
    Obrazek
Tworzenie pakietów instalacyjnych

Po opuszczeniu konfiguratora i zapisaniu zmian, utworzony zostanie plik konfiguracyjny, zawierający informację na temat aktywnych funkcji jądra oraz domyślnie ładowanych modułów. Na jego podstawie utworzone zostaną binarne pakiety instalacyjne.

Kod: Zaznacz cały

make-kpkg --initrd --append-to-version=-mykernel --revision=01 kernel_image kernel_headers
Zastosowane w powyższym poleceniu opcje ozaczają:
  • ??append-to-version=-mykernel - własna nazwa jądra -mykernel.
  • ??revision=01 - oznaczenie wersji.
  • ??initrd - obraz jądra używany przez program rozruchowy.
Po stworzeniu pakietów instalacyjnych, należy je zainstalować. W tym celu przechodzimy do katalogu z pakietami (/usr/src) i rozpoczynamy instalację:

Kod: Zaznacz cały

dpkg -i linux-image*.deb
dpkg -i linux-headers*.deb
W moim przypadku mimo zaznaczenia parametru --initrd odpowiadającego za generowanie obrazu initrd nie został on utworzony. W przypadku takiej sytuacji skorzystać można z polecenia:

Kod: Zaznacz cały

mkinitramfs -o /boot/initrd.img-numer_wersji-nazwa
Przykładowo:

Kod: Zaznacz cały

mkinitramfs -o /boot/initrd.img-2.6.35-rc4-mykernel
//k2cl: w przypadku 10.04 z takiego sposobu postępowania wręcz należy skorzystać... Skrypty instalacyjne paczek z samodzielnie kompilowanym kernelem są skonfigurowane w ten sposób, że nie uruchamiają mkinitramfs i nie tworzą obrazu initrd...
Po zainstalowaniu jądra, uaktualniamy plik konfiguracyjny programu rozruchowego GRUB:

Kod: Zaznacz cały

update-grub
Bibliografia

Obrazekwww.eioba.pl
Obrazekyampress.dug.net.pl
ODPOWIEDZ

Wróć do „Instalacja i konfiguracja systemu”