Предположим, мы скачали 15 Mb и у нас есть файл
linux-2.2.13.tar.gz
.
Но сначала надо убедиться, что у нас есть все необходимое для сборки ядра :
[root@on ~] rpm -qa bin86 gcc binutils make kernel-source kernel-headers
Почему-то особенно часто забывают про bin86
. Это ассемблер, без него ядро не соберется !
А теперь, самое важное правило в RedHat : Все живет на symlink-ах !
Посмотрим, где лежат исходные тексты старого ядра :
[root@on ~]$ cd /usr/src [root@on src]$ ls -l total 14791 lrwxrwxrwx 1 root root 12 Dec 15 13:18 linux -> linux-2.0.36 drwxr-xr-x 17 root root 1024 Oct 14 19:58 linux-2.0.36 drwxr-xr-x 7 root root 1024 Jul 7 1999 redhat
Как видите, symlink linux
указывает на linux-2.0.36
.
Скопируем ядро linux-2.2.13.tar.gz
в каталог /usr/src
.
[root@on src]$ cp ~/linux-2.2.13.tar.gz
/usr/src/
А теперь внимание ! Нужно обязательно удалить symlink linux
!
[root@on src]$ rm linux
После этого можно развернуть исходные тексты ядра.
[root@on src]$ tar zxvf linux-2.2.13.tar.gz linux/ linux/Makefile linux/fs/ linux/fs/stat.c linux/fs/Makefile linux/fs/read_write.c linux/fs/block_dev.c linux/fs/buffer.c ...
Как видите, исходные тексты ядра linux-2.2.13
живут в каталоге linux/
и если бы мы не удалили symlink linux
, у нас получилась бы каша из старых и новых исходников.
А теперь вернем нормальный symlink linux
, но уже с новым ядром :
[root@on src]$ mv linux linux-2.2.13 [root@on src]$ ln -s linux-2.2.13 linux [root@on src]$ ls -l total 14789 lrwxrwxrwx 1 root root 12 Dec 15 13:18 linux -> linux-2.2.13 drwxr-xr-x 17 root root 1024 Oct 14 19:58 linux-2.0.36 drwxr-xr-x 15 1046 101 1024 Dec 15 13:52 linux-2.2.13 -rw-r--r-- 1 root root 15079540 Oct 19 17:32 linux-2.2.13.tar.gz drwxr-xr-x 7 root root 1024 Jul 7 1999 redhat
Если у нас есть несколько разных версий ядра, нужно лишь соблюдать простое правило : symlink linux
указывает на текущую версию !
После этого можно конфигурировать ядро и собирать его :
[root@on src]$ cd linux [root@on linux]$ make menuconfig [root@on linux]$ make depend [root@on linux]$ make
Если ядро собралось нормально, можно его просто проинсталлировать :
[root@on linux]$ make install
По спецификации RedHat ядро и все относящееся к нему лежит в каталоге /boot
[root@on linux]$ cd /boot [root@on boot]$ ls -l total 1502 lrwxrwxrwx 1 root root 17 Dec 15 13:52 System.map -> System.map-2.2.13 -rw-r--r-- 1 root root 105935 Nov 17 1998 System.map-2.0.36 -rw-r--r-- 1 root root 166968 Dec 15 13:52 System.map-2.2.13 -rw-r--r-- 1 root root 512 Oct 14 22:51 boot.0800 -rw-r--r-- 1 root root 4536 May 7 1998 boot.b -rw-r--r-- 1 root root 300 May 7 1998 chain.b -rw-r--r-- 1 root root 212019 Oct 14 22:51 initrd-2.0.36.img -rw------- 1 root root 17408 Dec 15 13:54 map lrwxrwxrwx 1 root root 26 Dec 9 16:52 module-info -> /boot/module-info-2.0.36 -rw-r--r-- 1 root root 11773 Nov 17 1998 module-info-2.0.36 -rw-r--r-- 1 root root 308 May 7 1998 os2_d.b lrwxrwxrwx 1 root root 14 Dec 15 13:52 vmlinuz -> vmlinuz-2.2.13 -rw-r--r-- 1 root root 454349 Nov 17 1998 vmlinuz-2.0.36 -rw-r--r-- 1 root root 545845 Dec 15 13:52 vmlinuz-2.2.13
Как видите, правило в RedHat : Все живет на symlink-ах ! соблюдается и здесь. Команда make install
оформила как synlink-и System.map
и vmlinuz
.
Если бы мы собирали ядро с модулями и ранее дали бы команду make modules
и make modules_install
то у нас бы правильно сформировался бы symlink module-info
и каталог /lib/modules/2.2.13/
Чтобы новое ядро могло грузиться, необходимо добавить его в конфигурацию lilo
:
/etc/lilo.conf ======= boot=/dev/hda map=/boot/map install=/boot/boot.b prompt timeout=50 image=/boot/vmlinuz-2.2.13 label=linux-2.2.13 root=/dev/hda1 read-only image=/boot/vmlinuz-2.0.36 label=linux-2.0.36-1 root=/dev/hda1 initrd=/boot/initrd-2.0.36-1.img read-only ======
И дать команду lilo
:
[root@on boot]$ lilo
В заключение необходимо добавить, что если вы меняете версии ядра например с 2.0.x на 2.2.x то также необходимо заменить некоторые утилиты, напрмер mount
. На сайте RedHat есть все необходимые дополнения : ftp://ftp.redhat.com/pub/redhat/updates/5.2/kernel-2.2/i386/
Для дополнительного чтения : Kernel-HOWTO или Перевод Kernel-HOWTO