Для начала определим, чего мы хотим получить: 0. Понять, зачем нам пересобирать ядро. 1. Задача-минимум: собрать пакет со "стандартным" ядром/заголовками. Т.е. такое же ядро, которое можно поставить из репозитария с бинарными пакетами (или дистрибутивных дисков). 1.1. Собрать версию пакета с драйверами nVidia для нового ядра. 2. Основная задача: собрать чуть модифицированное ядро, т.е. с дополнительными опциями или с дополнительными патчами взятыми из Сизифа. 2.1. Собрать RPM-пакеты с дополнительными модулями ядра. 3. Задача-максимум: собрать ядро с посторонними патчами. 0. Итак, вы решили пересобрать ядро. Зачем? Ядра в системах от ALT Linux Team собраны так, чтобы быть универсальными. В них включены максимум функций и возможностей, причем все, что можно собрать в виде модулей, именно так и собрано. Поэтому если у вас возникли проблемы, например какое-либо устройство не работает, так как для него не найден (не загружен) модуль, не спешите "пересобирать ядро". Возможно модуль просто "не загрузился автоматически" (если возможность автозагружать модули вообще когда-нибудь нормально заработает в Сизифе). Совет: изучите команды depmod, modprobe, modinfo Или просто пакет с нужным модулем не установлен. Совет: изучите команду apt-cache search Если вам нужно специфическое ядро, например с поддержкой RealTime, Win4Lin и т.п., то просто проверьте альтовский репозитарий. Может там уже все есть? Так зачем же пересобирать ядро? Причины могут быть такими: * В ядре не включена (или наоборот) нужная опция. * Патологическая проблема с железом, которая требует пересборки. * Драйвера (например ALSA) в вашей текущей системе устарели и почему-то их пересборка не может быть проведена без пересборки ядра. * Хочется экзотических функций, которые обеспечиваются только после наложения патчей на ядро. 1.1. Определимся. Для начала определим, какое ядро сейчас запущено и что именно мы хотим собрать: [alexei@localhost alexei]$ uname -r 2.6.10-std26-smp-alt1 Итак, версия и тип ядра определены. Примечание: версия и тип ядра в вашей системе скорее всего не совпадают с вышеприведенным. Для сборки ядра в системе должно быть установлено множество пакетов, например компилятор, скрипты для сборки RPM и т.п.Далее предполагается, что все это уже установлено, или вы знаете, как доустановить нужные пакеты. FIXME: наверное тут нужен список пакетов, необходимых для сборки ядра. Кроме того, нужны пакеты, связанные непосредственно с конкретным ядром: * пакет с исходными кодами ядра * пакеты с патчами, исправляющими сборку и проблемы с безопасностью * пакеты с патчами, расширяющими функциональность * пакет и конфигурационным файлом и spec-файлом для сборки. Установку начнем несколько нетрадиционно, "с конца" и из-под пользователя: установим src-пакет с настройками ядра и spec-файлом. Название таких пакетов начинается с kernel-image, далее следует тип ядра (wks, std, vs, wks26 и т.п.) и -up для однопроцессорных систем и -smp для мультипроцессорных. Примечание: не путайте kernel-image*.src.rpm и kernel-image*.rpm FIXME: нужно нормальное описание типов ядер. Т.е. что такое и в чем отличия wks/std/vs/ll/rt и т.п. [alexei@localhost alexei]$ apt-get source kernel-image-std26-smp Чтение списков пакетов... Завершено Построение дерева зависимостей... Завершено Необходимо получить 0B/56,6kB исходных архивов. kernel-image-std26-smp ############################################# Примечание: делаем эту операцию именно из-под пользователя, так как установка src.rpm администратору запрещена по соображениям безопасности. После этого у вас в ~/RPM/SPECS появился файл kernel-image-std26-smp.spec -- это инструкция для RPM по сборке пакетов с ядром и заголовками. В каталоге ~/RPM/SOURCES появился файл config-2.6.10-std26-smp -- это настройки ядра по умолчанию. Заглянем в начало spec-файла: # Fixes: %add_patch_list kernel-fix-build %add_patch_list kernel-fix-core %add_patch_list kernel-fix-acpi %add_patch_list kernel-fix-fs %add_patch_list kernel-fix-net %add_patch_list kernel-fix-drivers-net %add_patch_list kernel-fix-drivers-usb %add_patch_list kernel-fix-drivers-ide %add_patch_list kernel-fix-drivers-ieee1394 %add_patch_list kernel-fix-drivers-sound #add_patch_list kernel-fix-drivers-serial %add_patch_list kernel-fix-drivers-parport %add_patch_list kernel-fix-security # Feathures: %add_patch_list kernel-feat-drivers-video-splash %add_patch_list kernel-feat-drivers-input %add_patch_list kernel-feat-drivers-lirc %add_patch_list kernel-feat-drivers-pktcdvd %add_patch_list kernel-feat-fs-squashfs %add_patch_list kernel-feat-net-ppp-mppe %add_patch_list kernel-feat-evms-nodm Это список пакетов, которые необходимо установить для сборки вашего ядра. Перейдем в режим суперпользователя и установим сначала исходники ядра: найдем, где они и как называются [root@localhost root]# apt-cache search kernel-source kernel-source-2.4.26 - Linux kernel 2.4.26rel sources kernel-source-2.6.10 - Linux kernel 2.6.10 sources ........ ........ и установим их [root@localhost root]# apt-get install kernel-source-2.6.10 Чтение списков пакетов... Завершено Построение дерева зависимостей... Завершено Следующие НОВЫЕ пакеты будут установлены: kernel-source-2.6.10 0 будет обновлено, 1 новых установлено, 0 пакетов будет удалено и 1 не будет обновлено. .............. .............. А затем аналогичным образом установим все остальные пакеты kernel-fix* и kernel-feat* из вышеприведенного списка. FIXME: можно ли сделать эту операцию автоматически? Выйдете из режима суперпользователя, т.к. сборки RPM-пакетов по соображениям безопасности невозможна из-под суперпользователя. В принципе уже все готово для сборки ядра. Но вы наверняка захотите проделать некоторые дополнительные настройки. Откройте в вашем любимом редакторе spec-файл. Исправьте строку %define krelease alt1 заменив в ней "alt1" на что-нибудь другое, например, на "myown1". Это нужно для того, чтобы ваше ядро не конфликтовало с ядром из дистрибутива. Кроме того желательно заменить строку %make_build oldconfig на строку %make_build menuconfig Это позволит вам перед началом сборки ядра отредактировать настройки в стиле классического "make menuconfig". FIXME: у меня не собираются пакеты если не закомментировать строку %__cp -a ./scripts/kconfig/conf %buildroot%_prefix/src/linux-%version-%flavour/scripts/kconfig/ Теперь можно приступить к сборке: cd ~/RPM/SPECS rpm -bb kernel-image-std26-smp.spec FIXME: нужно ли для сборки пакетов предварительно редактировать ~/.rpmmacros? Если все сложилось удачно, то будут удалены файлы, которые могли остаться после предыдущих сборок, распакованы исходные коды ядра, приложены все необходимые патчи и запущен текстовый интерфейс для настройки параметров ядра. Если этого не произошло, внимательно читайте вывод в консоли и принимайте меры. После того, как вы покинете конфигуратор ядра, начнется сборка. Тут самое время откинуться на спинку кресла, расслабиться и получать удовольствие от созерцания этого завораживающего процесса. Примечание: так как ядро собирается со всеми доступными модулями, этот процесс может занимать довольно продолжительное время (особенно в сравнении со сборкой по "классической" технологии с "ручной" настройкой опций ядра). Например на Dual P-III 1Gz сборка продолжается около 1.5 часов. Если сборка ядра и модулей прошла без ошибок и RPM-скрипты отработали исправно, то в ~/RPM/RPMS/i686 FIXME: что тут будет на другой архитектуре? вы обнаружите пакеты kernel-headers-modules-std26-smp-2.6.10-alt1.i686.rpm kernel-image-std26-smp-2.6.10-alt1.i686.rpm kernel-headers-std26-smp-2.6.10-alt1.i686.rpm То есть вы получили пакет с ядром kernel-image и два пакета с заголовками. Осталось только установить их: перейдите в режим суперпользователя cd /home//RPM/RPMS/i686 rpm -i ./kernel-image-std26-smp-2.6.10-alt1.i686.rpm rpm -i ./kernel-headers-std26-smp-2.6.10-alt1.i686.rpm rpm -i ./kernel-headers-modules-std26-smp-2.6.10-alt1.i686.rpm FIXME: э-э-э... нужно ли тут править конфиги для возможности установки параллельно нескольких версий ядра? FIXME: нужно написать короткое (или не очень) пояснение, куда в ALTовских системах встают хидеры и как бороться с alternatives. А то в common@ у пользователей с этим связано много проблем. При установке ядра RPM автоматически пропишет новую запись в /etc/lilo.conf и запустит lilo FIXME: а что тут с grub? Так что вам наверняка захочется заглянуть в /etc/lilo.conf и поправить там что-нибудь (но и "по умолчанию" все должно хоты бы загрузиться). После правки /etc/lilo.conf не забудьте запустить lilo. Примечание: новое ядро добавляется в загрузочное меню, но по умолчанию загрузится ваше старое ядро. Так спокойнее! :) Примечание: если у вас видеокарта nVidia, то с новым ядром видеодрайвер не загрузится без дополнительных действий (вот он, недостаток закрытых драйверов), и поэтому разумно сначала загрузиться в runlevel 3, убедиться, что новое ядро работает как ожидается, пересобрать видеодрайверы, установить их, и только после этого переходить в runlevel 5. FIXME: для других видеокарт проблем нет? reboot