[sisyphus] Re: Инструкция по сборке ядра.

Michael Shigorin =?iso-8859-1?q?mike_=CE=C1_osdn=2Eorg=2Eua?=
Пт Фев 11 11:25:54 MSK 2005


On Thu, Feb 10, 2005 at 11:11:16AM +0200, Alex Yustasov wrote:
> > ??? ?????? ?????????, ???? ?? ????? ????????:
> >         0. ??????, ????? ??? ???????????? ????.
> >         1. ??????-???????: ??????? ????? ?? "???????????"
> >         ?????/???????????. ?.?. ????? ?? ????, ??????? ?????
> >         ????????? ?? ??????????? ? ????????? ???????? (???
> Было бы интересно почитать. Но пока одни вопросы.

Чарсет не проставлен.  В mutt -- v (просмотр вложений), ^E
(редактирование content-type).

Перегнанное в koi8-r прилагается.

-- 
 ---- WBR, Michael Shigorin <mike на altlinux.ru>
  ------ Linux.Kiev http://www.linux.kiev.ua/
----------- следующая часть -----------
Для начала определим, чего мы хотим получить:
        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/<user-name>/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



Подробная информация о списке рассылки Sisyphus