„Jajko na miękko” – czyli jak postawić jądro żeby się
nie stłukło !!!
Motto:
Zanim zaczniemy jakąkolwiek przygodę radzę się dobrze zastanowić, czy tego chcemy ?!
Instalacja jądra może nam przysporzyć nielada kłopotów, a z normalnego człeka zrobić
frustrata i życiowego degenerata J - pod warunkiem, że
będzie to system PLD.
[Dokumentacja dotyczy jąder z
serii 2.4 i 2.6]
Prelekcja
Zadania jądra (kernela):
Budowa:
Moduły:
powodują jego obciążenie i zajmują cenną pamięć.
insmod – załadowanie modułu do pamięci
rmmod – usuwa
moduł
lsmod – wyświetla listę załadowanych
modułów
depmod – tworzy
bazę modułów dostępnych w systemie
[Moduł wolno usuwać tylko wtedy, gdy
żaden proces ani żaden inny moduł nie korzysta z niego!]
Jakie jądro wybrać ??
Wybór dla zwykłego śmiertelnika jest oczywisty – wybierze kernela stabilnego.
Osoby, które lubią eksperymentować pokuszą się o wersje nieparzyste tym bardziej, że
wychodzą one bardzo często.
A skąd je pobrać ??
- kernel-headers-numer.wersji.rpm
- kernel-source-numer.wersji.rpm
Co pobrać ??
No właśnie!!!. Pobieramy wersje jąder sprawdzonych i nie chodzi mi tu o stabilne. Lepiej nie raz jest zassać wersje
z niższym numerkiem np. 2.4.28, niż najnowsze 2.6.9 jak to miało miejsce w moim przypadku.
Różnica jest taka, że przyjdzie nam przy wersji najwyższej
uaktualniać dość dużo narzędzi, żeby można było skompilować dane jajko.
Które pobrać ??
Mamy do wyboru:
linux-numer.wersji.tar.gz
linux-numer.wersji.bz2
Różnią się one tylko metodą archiwizacji.
Archiwizery i kompresory
Archiwizujemy pliki
komendą:
tar -cvf archiwum.tar
pliki
tar
-czvf archiwum.tar.gz pliki
tar
- cjvf archiwum.tar.bz2 pliki
Rozpakowujemy:
tar
-xvf archiwum.tar pliki
tar
-xzvf archiwum.tar.gz pliki
tar
-xjvf archiwum.tar.bz2 pliki
Archiwizujemy pliki
komendą:
gzip plik
Rozpakowujemy:
gunzip plik
Archiwizujemy pliki
komendą:
bzip2 plik
Rozpakowujemy:
bunzip2 plik
To tyle dygresji powracamy do naszego jąderka
Meritum
Zabieramy się do pracy!!!
tar –zxvf linux-numer.wersji.tar.gz
pakiety:
-
make, bin86,egcs, glibc-devel
Te są najbardziej podstawowe. W zależności od jądra,
przyjdzie nam również zaktualizować kilka narzędzi.
Aby o tym się dowiedzieć
przechodzimy do katalogu:
/usr/src/linux-nemer.wersji/Documentation/Changes
i weryfikujemy
ostatnie wymagania – mogły się zmienić!
Zawartość
pliku Changes dla jądra 2.6.9
narzędzie |
minimalna wersja |
jak sprawdzić ? |
o Gnu C o Gnu make o binutils o util-linux o module-init-tools o e2fsprogs o jfsutils o reiserfsprogs o xfsprogs o pcmcia-cs o quota-tools o PPP o isdn4k-utils o nfs-utils o procps o oprofile |
2.95.3 3.79.1 2.12 2.10o 0.9.10 1.29 1.1.3 3.6.3 2.6.0 3.1.21 3.09 2.4.0 3.1pre1 1.0.5 3.2.0 0.5.3 |
# gcc
--version # make
--version # ld -v #
fdformat --version # depmod
-V # tune2fs #
fsck.jfs -V #
reiserfsck -V 2>&1|grep reiserfsprogs # xfs_db
-V # cardmgr
-V # quota -V # pppd
--version #
isdnctrl 2>&1|grep version #
showmount --version # ps
--version #
oprofiled –version |
Łatanie jądra (patchowanie).
[Łatać jądro możemy tylko przed
jego kompilacją!]
Nie ma systemu idealnego!. Tak jest też w przypadku systemu LINUX. Podczas tworzenia jądra autorom zdarzają się „dziury” J
Jak je naprawić?
bunzip2 patch_na_jadro.bz2
Kilka słów o samym programie patch
patch –p1 < patch_na_jądro lub
patch –p0 < patch_na_jądro
Na przykład, załóżmy, że nazwą pliku w łacie jest „/usr/src/linux/arch/boot”. Użycie opcji „-p” lub „-p0”
daje niezmienioną nazwę, natomiast „-p1” daje „usr/src/linux/arch/boot” (bez początkowego ukośnika /),
„-p4” daje „arch/boot”, a niepodanie parametru „-p” – „boot”.
Czyli parametr
„-px” 'obcina' x
początkowych parametrów ścieżki.
Jeżeli dodajesz patcha z katalogu programu
(np /usr/src/linux) to:
patch -p1 < patch_na_jądro
ale jeżeli jesteś katalog wyżej (np w
/usr/src dla źródeł linuxa) to:
patch -p0 < patch_na_jądro
Warto też pobrać patcha grsecurity-numer.patch ze strony http://grsecurity.com , który posiada
mnóstwo zabezpieczeń
sieciowych, a także łata niedoskonałości twórców jądra.
Niestety na chwilę obecną
jest dostępna wersja dla jąder do 2.6.7
W moim przypadku do jądra 2.6.9 zostały pobrane z www.kernel.org następujące patche:
1) patch-2.6.10-rc2.bz2
2) patch-2.6.10-rc2-bk15.bz2
3) 2.6.10-rc2-mm4.bz2
Okazało się, że nie można było dodać wszystkich trzech!!!.
Pierwszy i drugi lub pierwszy i trzeci – w takich konfiguracjach jądro dało się skompilować.
W momencie, kiedy chcieliśmy dodać trzeci na pozostałe dwa lub drugi na pozostałe robiła
się niezła „kaszana” gdyż patch chciał zastępować wpisy poprzedniego.
Pojawiały się komunikaty w stylu:
Reversed (or
previously applied) patch detected! Assume -R? [n]
Ja dodałem pierwszy i trzeci, gdyż patch 2.6.10-rc2-mm4.bz2 zawierał więcej poprawek od drugiego. J
Konfiguracja jądra !!!
Przechodzimy do katalogu (pod warunkiem, że rozpakowaliśmy
tam jądro) /usr/src/linux-numer.wesj/
i wydajemy jedną z komend:
make config
Ta opcja jest dla hardcorowców. Będziemy musieli przejść
przez wszystkie możliwości odpowiadając na pytanie yes lub no!
make menuconfig
Przyjemne menu graficzne, będziemy mogli zaznaczać interesujące nas opcje. POLECAM!
[UWAGA: Aby korzystać z tej
opcji musimy mieć zainstalowane narzędzie ncurses wraz z bibliotekami.
Są to biblioteki do rysowania ramek. W systemie PLD
możemy sprawdzić czy mamy
zainstalowane wydając komendę:
rpm –qa |
grep ncurses lub
find / -name
‘ncursese*’ -print
Dla systemu PLD będziemy potrzebowali:
ncurses-numer.wersji.rpm
ncurses-ext-numer.wersji.rpm
ncurses-devel-numer.wersji.rpm
Możemy też zainstalować ze źródeł
http://ftp.gnu.org/pub/gnu/ncurses/
]
make xconfig
Menu graficzne oparte na bibliotece Qt
make gconfig
Zbliżone wyglądem do xconfig, lecz oparte o GTK+
[Powyższe dwie opcje można
zastosować jeżeli mamy zainstalowane w systemie xWindowsy]
Po wydaniu jednego z powyższych poleceń zaznaczamy opcje w
jądrze.
Podaruję sobie tutaj wymienianie wszystkich opcji jądra.
- dla zainteresowanych podaję nasz plik z konfiguracji jajka 2.6
Teraz wystarczy skopiować go do katalogu, gdzie rozpakowaliśmy naszego kernela.
Wydać
polecenie np. make menuconfig i
zobaczyć nasze zaznaczone opcje.
Możemy również skorzystać ze starego pliku .config wygenerowanego przez make menuconfig dla serii 2.4
- jest
tylko jedno „ale” – przed skopiowaniem musimy dodać do niego kilka krytycznych
opcji:
CONFIG_INPUT=y
CONFIG_VT=y
CONFIG_VGA_CONSOLE=y
CONFIG_VT_CONSOLE=y
-
jeżeli tego nie zrobimy czeka nas po reboot
ciemność J
Do każdego wyboru zazwyczaj w jajku jest help J
Można się posiłkować poniższymi linkami:
- http://www.linux.sky.pl/teksty/kernel.html
- http://www.kattserv.neostrada.pl/Linux/JADRO/jadrook.htm
Kompilacja jądra.
Aby przystąpić do kompilacji wydajemy komendy:
Dla jądra 2.4:
make dep - zrobi nam wszystkie powiązania
make clean - wyczyści wszystkie
„śmieci” z kernela
make bzImage (lub zImage) - spakuje nam jądro
odpowiednio: mocniej (lub mniej)
Dla jądra 2.6 wystarczy wydać polecenie:
make bzImage - dobrze
spakuje nam jądro J
[Dla jąder 2.6 jest dostępna
dodatkowa opcja make help. Warto zapoznać się z innymi opcjami kompilacji.]
Nasze skompilowane jąderko leży w katalogu /usr/src/linux-numer.wersji/arch/i386/boot/
Szukamy tam pliku bzImage
lub zImage zależnie od metody
kompilacji.
Jak już mamy spakowane jądro przechodzimy do kompilacja i instalacji modułów, jeżeli oczywiście
zaznaczyliśmy w opcjach jądra instalację danych pakietów jako moduły (opcja M).
Wydajemy polecenie :
make modules - kompilowanie modułów
make modules_install - instalowanie modułów
[UWAGA: Jeżeli kompilujemy jądro
o tym samym numerze jak wcześniej przed wydaniem polecenia
make modules_install usuwamy poprzednio zainstalowane moduły z
katalogu:
. /lib/modules/numer.wersji/
Przechodzimy do katalogu /lib/modules/ i wydajemy polecenie:
rm –r numer.wersji
Zabieg ten uchroni nas przed nadpisanie modułów. I komunikatem Unresolved symbol… J
]
Instalacja jądra.
Aby nasze wypociny doszły do skutku musimy wykonać szereg poniższych czynności, a oto one:
- kopiujemy
spakowane jądro z katalogu /usr/src/linux-numer.wersji/arch/i386/boot/ do /boot
cp /usr/src/linux-numer.wersji/arch/i386/boot/bzImage /boot/vlimuz-numer.wersji
- kopiujemy plik mapy z katalogu /usr/src/linux-numer.wersji/ do /boot
cp /usr/src/linux-numer.wersji/System.map /boot/System.map-numer.wersji
- kasujemy poprzednie dowiązanie
pliku System.map
rm
/boot/System.map
- tworzymy nowe dowiązanie System.map
do nowej mapy System.map-numer.wersji
cd /boot - aby przejść do katalogu
ln
–s System.map-numer.wersji System.map
Ładowanie jądra.
To już prawie koniec J. Pozostało nam dodanie wpisów do naszego bootloadera.
W systemie PLD mieliśmy zainstalowany bootloader LILO.
O to przepis jajka na miękko J
Edytujemy plik /etc/lilo.conf i dopisujemy kilka
linijek:
boot=/dev/hda
prompt
timeout=50
default=PLD-2.28
menu-title = “PLD Linux”
menu-scheme = “wk:kc:ck:CK”
read-only
lba32
image=/boot/vlimuz
root=/dev/hda1
label=PLD-2.2.8
initrd=/boot/initrd
password
= nasze_hasło
restricted
#to zostało
dopisane
image=/boot/vlimuz-numer.wersji
root=/dev/hda1
label=PLD-2.6.10
initrd=/boot/initrd
Zapisujemy zmiany w pliku i przeładowujemy bootloadera wydając komendę:
lilo -v
Więcej na temat LILO znajdziecie w:
- http://www.linux.sky.pl/maciek/bootloadery.html
- http://man.digipedia.pl/ptm/man5/lilo.conf.5.html
Robimy:
reboot lub
shutdown –r now
I
gotowe!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Teraz tylko pozostało się modlić, żeby jako się nie stłukło
J
Reasumpcja.
Ogólnie rzecz biorąc instalacja jądra 2.6.9 przysporzyła nam niezły ból głowy.
Brakowało co chwila jakiś bibliotek. Jak się udało dodać wymagane narzędzia to pojawiały
się kolejne problemy.
O wiele sprawniej poszła instalacja jądra 2.4 + patch grsecurity.
Mamy nadzieję, że ten krótki tutorial pozwoli przejść przez ten proces szybko i bezboleśnie, a „zielonym”
użytkownikom zaoszczędzić mnóstwo czasu.
Oto niektóre problemy i jak je rozwiązaliśmy:
1) configure: error: C preprocessor
"/lib/cpp" fails sanity check
Jak
pojawi się taki problem należy zainstalować kernel-headers
lub glibc-kernel-headers
Kluczem do odpowiedzi na problemy przy ./configure jest config.log
2) error kernel.sysrq
Należy w jądrze zaznaczyć opcję Magic SysRq key (Kernel hacking) i je przekompilować.
Jeżeli interesuje nas co należy zmienić, żeby nie uruchamiać tej opcji, aby system nie zgłaszał błędów -
plik /etc/sysctl.conf da nam odpowiedz.
3) Jeżeli zapomnieliśmy jak podzieliliśmy partycje na danym dysku komenda:
fdisk -l
/dev/hda
odświeży nam pamięć J
0.SPIS TRESCI
| 5.KONFIGURACJA SIECI