Кто из истинных энтузиастов Linux хоть раз не «копался» в ядре? Таких практически нет. А кто из тех же энтузиастов не пробовал разобраться с новым, 2.4.0, ядром? Я тоже энтузиаст и тоже захотел с ним разобраться, точнее разобраться в его работе. Тем более, что я в данное время работаю на Redhat 7.0, который адаптирован к работе с 2.4-ядром. Почему бы не проверить уровень адаптации и заодно работу нового ядра?
В начале статьи хотелось бы сообщить всем, что НЕ обязательно бродить по сети в поисках чего-нибудь экзотического по поводу компиляции *инсталляции* нового ядра — можно просто почитать README и/или CHANGES — документацию, которая идет с новым ядром. Думаю, что вы найдете там много интересного для себя. По крайней мере, я сделал примерно так же — собрал кучу информации, потом выстроил ее в правильном порядке и получилось что-то типа «инсталляция шаг за шагом». Я не буду останавливаться на специфических вопросах для каждого ПК, которые вы можете прочесть в процессе установки нового ядра. Рекомендую вам использовать для этого «xconfig».
Шаг 1. Вошел в систему как root.
Шаг 2. Загрузил «linux-2.4.0.tar.gz» в домашнюю директорию. Так как я вошел в систему как root, то домашней директорией будет /root.
Шаг 3. Распаковал «linux-2.4.0.tar.gz»:
‘tar xvzf linux-2.4.0.tar.gz’
Шаг 4. В результате третьего шага появилась новая директория «linux» в /root директории. Захожу в нее (можно с помощью ‘cd’) и запускаю ‘make mrproper’.
Я не увидел ничего сложного во всем вышеперечисленном, тем более, что это описывается в README, которое поставляется с новым ядром.
Шаг 5. Дальше — интересней. Теперь необходимо загрузить апдейт «gcc» с http://www.redhat.com/support/errata/RHBA-2000-132.htm. Этот апдейт новее, чем рекомендует README. Файл ‘gcc-2.96-69.i386.rpm’ помещаю в /root. Инструкции по инсталляции/обновлению ‘gcc’ можно найти по тому же URL’у, на котором лежит апдейт. Почитав немного инструкции, делаю следующее:
‘rpm -Fvh gcc-2.96-69.i386.rpm’
Шаг 6. Проверяю правильность установки/апдейта с помощью:
‘gcc —version’
Шаг 7. Иду на http://www.kernel.org за ‘util-linux 2.10o’, так как это рекомендуется в CHANGES-файле (я имел 2.10m). Инсталлирую это:
‘./configure’
‘make’
‘make install’
Для проверки правильности инсталляции использую:
‘fdformat —version’
Шаг 8. Я также загрузил ‘modutils-2.4.0’, которые находятся на kernel.org в rpm-формате. Инсталляция:
‘rpm -Fvh modutils-2.4.0.i386.rpm’
и проверка версии:
‘insmod -V’ <— в первой строке появившегося вы сможете увидеть версию modutils — >
Шаг 9. Апдейт пришлось проделать с ‘ksymoops-2.4.0-1.i386.rpm’ и ‘e2fsprogs-1.19-0.i386.rpm. Но, к сожалению, все оказалось не так просто: ‘ksymoops’ не захотел модернизироваться с помощью ‘rpm -Fvh’, а с помощью ‘rpm -ivh’ я получил «conflicts with file from package kernel-utils-2.2.16-22». Пришлось пропустить данную процедуру в надежде на хороший исход в дальнейшем 🙂
Шаг 10. По рекомендации ‘CHANGES’-файла я зашел на ftp://rawhide.redhat.com/pub/rawhide/i386/RedHat/RPMS/ для обновления ‘mkinitrd’. Данный пакет был загружен в rpm-формате и проинсталлирован:
‘rpm -Fvh mkinitrd-2.9-1.i386.rpm’
Проверки версии после модернизации оказалась той, что нужно.
Шаг 11. Запуск ‘make xconfig’ для создания ‘.config’-файла в linux-директории.
Шаг 12. Важный шаг. Я просмотрел ‘Makefile’ для внесения в него кое-каких изменений. Дело в том, что строка ‘export INSTALL_PATH=/boot’ по умолчанию закомментирована (#). Так как я поместил ядро в директорию /root, то пришлось расскоментировать данную строку, чтобы мой Redhat поместил ядро в /boot-директорию, а не в /root.
Шаг 13. Запускаю ‘make dep’ — все пока чудесно!
Шаг 14. ‘make bzImage’ — error’ов нет 😉
Шаг 15. ‘make modules’ …ok…
Шаг 16. После запуска ‘make modules_install’ и 3-секундного ожидания я подумал, что неплохо было бы сделать backup моей module-директории.
Шаг 17. Копирую мое новое ядро (‘bzImage’) в /home директорию как backup:
‘cp /root/linux/arch/i386/boot/bzImage /home/bzImage’
Шаг 18. Копирую новое ядро в /boot директорию и переименовываю его ‘mykernel-2.4.0’:
‘cp /root/linux/arch/i386/boot/bzImage /boot/mykernel-2.4.0’
Шаг 19. Теперь очередь за редактированием /etc/lilo.conf для загрузки по умолчанию нового ядра. Мой новый lilo.conf файл:
boot=/dev/hda
map=/boot/map
install=/boot/boot.b
prompt
timeout=50
message=/boot/message
linear
default=new
image=/boot/mykernel-2.4.0
label=new
root=/dev/hda1
read-only
image=/boot/vmlinuz-2.2.16-22
label=old
root=/dev/hda1
read-only
Шаг 20. Набираю в консоли ‘lilo’. Получаю: ‘Fatal:no images defined’. Все это случилось потому, что я забыл изменить строку ‘default’ с ‘linux’ на ‘new’ в lilo.conf. Когда я изменил это и запустил ‘lilo’ опять — все было прекрасно.
Шаг 21. Перезагрузка
Все работает чудесно. Если у вас возникли проблемы на этом уровне, то попробуйте загрузить модули с помощью ‘modprobe’. Удачи