[HOW-TO] Kernel, konfiguracja+kompilacja+instalacja
: 09 lip 2010, 02:31
Instalacja jądra Linux
WstępJak 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:
Binaria:
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
Kod: Zaznacz cały
apt-get update && apt-get install kernel-package libncurses5-dev fakeroot bzip2 cramfsprogs
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
Kod: Zaznacz cały
make oldconfig
make menuconfig
Kod: Zaznacz cały
cp /boot/config-$(uname -r) /usr/src/linux-2.6.35-rc4/.config
- make config - Tekstowy konfigurator.
- make menuconfig - Tekstowy konfigurator z posegregowanymi w ramki opcjami.
- make xconfig - Graficzny zbudowany w QT konfigurator. Użytkownicy GNOME potrzebują bibliotek QT dostępnych w paczkach libqt3-mt, libqt3-mt-dev.
- make gconfig - Graficzny zbudowany w Gtk konfigurator działający po zainstalowaniu pakietu libglade2-dev
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
- ??append-to-version=-mykernel - własna nazwa jądra -mykernel.
- ??revision=01 - oznaczenie wersji.
- ??initrd - obraz jądra używany przez program rozruchowy.
Kod: Zaznacz cały
dpkg -i linux-image*.deb
dpkg -i linux-headers*.deb
Kod: Zaznacz cały
mkinitramfs -o /boot/initrd.img-numer_wersji-nazwa
Kod: Zaznacz cały
mkinitramfs -o /boot/initrd.img-2.6.35-rc4-mykernel
Po zainstalowaniu jądra, uaktualniamy plik konfiguracyjny programu rozruchowego GRUB:
Kod: Zaznacz cały
update-grub
www.eioba.pl
yampress.dug.net.pl