Сборка ядер ветки 2.6 из исходных текст SRC.RPM в ASPLinux10

Аватар пользователя lystor

Рано или поздно пользователь linux сталкивается с проблемой пересборки ядра из-за живого интереса к устройству этой прекрасной операционной системы или желания любыми способами увеличить ее производительность, стабильность и безопасность. В данной статье рассмотрен один из способов сборки ядер ветки 2.6 из исходных текстов (src.rpm) с помощью программы rpmbuild. В частности, уделено внимание пересборке ядер, которые разрабатывает фирма ASPLinux - разработчик наиболее популярного отечественного дистрибутива.
Также детально описано обновление предыдущего ядра, а также решение некоторых проблем, возникающих после сборки нового ядра.

Примечание:
Действия выполнять от имени обычного пользователя, если это не оговорено в тексте.
Символы $ и #, указанные в начале строки не набирать, т.к. это приглашение системы на ввод команды.
($ - приглашение пользователя, # - суперпользователя root).
Символ ~ означает домашний каталог пользователя.
Вместо слова ARCH подставляйте архитектуру вашей будущей системы. Объяснение в тексте.
Вместо слова VER подставляйте версию нового ядра. Объяснение идет далее.

I. ПОДГОТОВКА
1.1. В своем домашнем каталоге создаем файл .rpmmacros с целью переопределения некоторых настроек, применяемых программой сборки пакетов rpmbuild по умолчанию.
Файл этот можно создать так:
$ touch ~/.rpmmacros

Содержание файла .rpmmacros:
# Здесь вместо my_name укажите свое имя и почтовый ящик
%packager my_name
# Следующая строка отключает создание пакета debuginfo, который используется некоторыми отладчиками. Нам он не нужен.
%debug_package %{nil}
%_enable_debug_packages 0
# Указываем каталог, в котором будет происходить сборка ядра, а также всех пакетов программой rpmbuild. В данном примере указан каталог /work/src/asplinux/, который будет находиться в домашнем каталоге пользователя
%_topdir %(echo \"$HOME\")/work/src/asplinux/
# Указывает каталог для хранения временных файлов, создающихся во время сборки пакетов
%_tmppath %{_topdir}/tmp
Конец файла .rpmmacros.
Вы можете указать и другой каталог для сборки ядра в переменной %_topdir. Будьте внимательны при выборе: на сборку ядра, в зависимости от его конфигурации, может потребоваться более 2Гб свободного места. Если вы выберите каталог, который будет отличаться от предложенного мною, будьте внимательны к дальнейшим примерам, приведенным в тексте, т.к. вам придется их изменять.

1.2. Создаем каталоги, в которых будет происходить сборка нашего ядра.
Эти каталоги также пригодятся вам для сборки любых программ из пакетов src.rpm.
$ mkdir -p ~/work/src/asplinux/BUILD
$ mkdir -p ~/work/src/asplinux/RPMS
$ mkdir -p ~/work/src/asplinux/SOURCES
$ mkdir -p ~/work/src/asplinux/SPECS
$ mkdir -p ~/work/src/asplinux/SRPMS
$ mkdir -p ~/work/src/asplinux/tmp

1.3. Получаем исходные тексты нового ядра.
Из каталога ftp://ftp.asplinux.ru/pub/i386/updates/версия_дистрибутива/SRPMS/ скачиваем файл kernel-2.6.12-1.1372.1asp.nosrc.rpm.
У вас будет более новая версия ядра, чем у меня. В данном значение VER (описано выше) будет 2.6.12
Список зеркал можно взять здесь: http://asplinux.ru/ru/install/ftp.shtml

1.4. Установка пакета с исходными текстами ядра:
Переходим в каталог, в котором находится пакет, содержащих исходные тексты.
Устанавливаем его:
$ rpm -ivh kernel-2.6.12-1.1372.1asp.nosrc.rpm

1.5. Определяем архитектуру будущей системы
Текущую архитектуру можно узнать так:
$ uname -m

Обычно в ядро включены следующие наиболее широко распространенные архитектуры:
i686 - Intel PentiumPro CPU и выше.
x86_64 - Процессоры с 64 битной архитектурой

Наиболее часто используется i686, но и завоевывает популярность архитектура x86_64.
Для процессоров athlon также необходимо указывать i686, т.к. ядро версии не ниже 2.6 может самостоятельно определять архитектуру процессора и использовать необходимую оптимизацию.
Архитектуры i386 и i586 более не поддерживаются.

В данном случае значение ARCH равно i686 (описано выше).

Если вы просто хотите собрать новое ядро без изменения его конфигурационного файла, т.е. оставив его таким, каким предлагают его нам разработчики ASPLinux - переходите к разделу III. Если хотите настроить ядро под свою систему - читайте далее. Я предпочитаю второй вариант.

II. НАСТРОЙКА ПАРАМЕТРОВ ЯДРА
2.1. Настройка файла сборки (SPEC-файла)
Изменяем файл ~/work/src/asplinux/SPECS/kernel-2.6.spec:
Указываем 1 если собираем ядро под многопроцессорную систему:
%define buildsmp 0
Указываем 1 если необходимо также собирать документацию к ядру:
%define builddoc 0
2.2. Распаковка исходных текстов, наложение патчей:
$ cd ~/work/src/asplinux/SPECS/
$ rpmbuild -bp --target=ARCH kernel-2.6.spec

2.3. Создание конфигурационного файла для сборки ядра
Переходим в каталог с исходными текстами ядра
$ cd ~/work/src/asplinux/BUILD/kernel-VER/linux-VER

2.3.1. Если вы хотите обновить ядро, сохранив настройки текущего
а) Копируем файл, расположенный в каталоге /boot с именем config-kernel_version.config (kernel_version - текущая версия ядра, узнать ее можно выполнив команду uname -r)
$ cp /boot/config-$(uname -r) .config

б) Добавляем с свой конфигурационный файл дополнительные настройки, внесенные в ядро компанией ASPLinux:
$ cat ~/work/src/asplinux/SOURCES/kernel-VER-asplinux.conf >> .config

в) Обновляем конфигурационный файл ядра
$ make oldconfig
Вам будет задано несколько вопросов по настройке тех возможностей, которые появились в новом ядре. Если не знаете ответ -– нажимайте Enter. Так вы– сохраните рекомендуемое разработчиками значение.

2.3.2. Если Вы хотите обновить ядро, но без сохранения настроек текущего
Копируем готовый шаблон ядра:
а) Если однопроцессорная система:
$ cp configs/kernel-VER-ARCH.config .config
б) Если многопроцессорная:
$ cp configs/kernel-VER-ARCH-smp.config .config

2.4. Настройка конфигурационного файла
2.4.1. Существует несколько способов настройки
1 -– для тех, кто работает в X. Я предпочитаю именно этот способ, если есть такая возможность. Для работы должен быть установлен пакет qt-devel.
$ make xconfig
2 -– для тех, кто работает в графической среде GNOME. Для работы должен быть установлен пакет gtk2-devel.
$ make gconfig
3 - Консольный вариант. Предпочтительный если нет Х. Пользовательский интерфейс реализован в виде меню различного уровня вложенности. Для работы должен быть установлен пакет ncurses-devel.
$ make menuconfig
4 - Консольный вариант. Нерекомендуемый, т.к. вопросы задаются строго по порядку и нет возможности возврата к предыдущему.
$ make config
Обязательно сохраните внесенные изменения.

2.4.2. Проверяем .config. Он должен начинаться со строки
# i386
Если нет - добавьте ее в самое начало файла. Без этой строки ядро не соберется.

2.5. Сохранение конфигурационного файла
а) Если однопроцессорная система:
$ cp .config ~/work/src/asplinux/SOURCES/kernel-VER-ARCH.config
б) Если многопроцессорная
$ cp .config ~/work/src/asplinux/SOURCES/kernel-VER-ARCH-smp.config

2.6. Дополнительная настройка
2.6.1. Удаляем из ~/work/src/asplinux/SOURCES/ все kernel-VER-ARCH.config кроме одного (который соответствует вашей архитектуре) - это одна из мер предосторожностей, чтобы программа rpmbuild собрала именно ваше ядро.

2.6.2. Очищаем ~/work/src/asplinux/SOURCES/kernel-VER-asplinux.conf
> ~/work/src/asplinux/SOURCES/kernel-VER-asplinux.conf
Это делаем из-за того, что настройки, рекомендуемые разработчиками ASPLinux, мы уже включили в свой конфигурационный файл в п. 2.3.1.б.
Если вы спросите зачем нужно было вручную копировать содержимое этого файла в п. 2.3.1.б, если это делается автоматически - ответ такой: во-первых, не все, что предлагают нам разработчики ASPLinux, может понадобиться нам в нашей системе, во-вторых, так мы видим, какие новые возможности дают нам разработчики, и можем их откорректировать по своему усмотрению.

III. СБОРКА НОВОГО ЯДРА
$ cd ~/work/src/asplinux/SPECS/
$ rpmbuild -bb --target=ARCH kernel-2.6.spec

Если все процесс компиляции и сборки пройдет успешно - вы найдете в каталоге ~/work/src/asplinux/RPMS/ARCH 2 файла:
kernel-VERSION.ARCH.rpm - новое ядро и kernel-devel-VERSION.ARCH.rpm - заголовки модулей из ядра - необходимы для сборки некоторых драйверов из исходных текстов.

Если нет - посмотрите на ошибки, которые вам выдала программа сборки.
Если вы владеете определенным уровнем знаний - возможно вы сможете их самостоятельно устранить путем изменения spec-файла (~/work/src/asplinux/SPECS/kernel-2.6.spec).
Если же у вас это не получится - это повод для создания темы на форуме. Создавайте - не бойтесь - мы постараемся помочь.

IV. УСТАНОВКА НОВОГО ЯДРА
4.1. Установка пакета с новым ядром
Здесь понадобятся вам права суперпользователя. Получить их можно, выполнив команду su и введя пароль суперпользователя:
$ su
# rpm -ivh ~/work/src/asplinux/RPMS/i686/kernel-VERSION.ARCH.rpm

4.2. Настройка загрузчика
Обычно необходимые параметры добавляются автоматически в конфигурационные файлы загрузчиков при установке пакета в п.4.1. Вам только остается переинициализировать загрузчик:
а) если у вас ASPLoader
# /sbin/aspldr
б) если у вас LILO
# /sbin/lilo
в) если у вас GRUB
# /sbin/grub

V. ПЕРЕЗАГРУЗКА
# shutdown -r 0
Выберите в загрузчике новое ядро.
После перезагрузки у вас могут возникнуть проблемы:
1 - с новым ядром, если вы случайно отключили на настройке конфигурационного файла ядра необходимое оборудование. Перезагрузитесь со старым ядром, вернитесь к п. 2.4 и исправте свою ошибку.

2 - с новым ядром не грузятся Х. Это наиболее частая проблема у тех, кто пересобирает ядро и имеет видеокарту ATI или NVIDIA. Возникает из-за того, что новое ядро содержит стандартный модуль для этих видеокарт, а в конфигурационной файле Х прописан другой (тот который рекомендуют разработчики этих видеокарт для поддержки дополнительных возможностей).
Решение:
1) перезагружаемся и передаем ядру параметр 3 (одна цифра три и все) - запуск системы в текстовом многопользовательском режиме.
2) редактируем /etc/X11/xorg.conf. Это можно делать с помощью редакторов mcedit, vi, или других.
а) если у вас ATI:
заменяем строку
Driver \"fglrx\"
на
Driver \"ati\"
б) заменяем строку
Driver \"nvidia\"
на
Driver \"nv\"
3) пытаемся запустить Х (переходим на 5 режим - многопользовательский, но с Х)
# telinit 5
Если Х не запустятся, то можно посмотреть ошибку следующим образом:
# cat /var/log/Xorg.0.log | grep EE
Далее вы должны решить для себя, нужны ли вам дополнительные возможности видеодрайвера (TV-выход, GLX и др.). Если да - переходите к следующему пункту (4), если нет, то он не обязателен.
4) обратитесь на сайт производителя своего оборудования, скачайте версию драйверов под linux и выполняйте рекомендации, которые идут вместе с новыми драйверами.

Если у вас заработает новое ядро - можете похвалить себя, если же нет - не расстраивайтесь, просто у вас еще недостаточно опыта или есть ошибки в выбранной вами версии ядра.

01.10.2005 г. Автор - Ульяницкий Николай .
Если Вы нашли грамматические, орфографические или иные ошибки - пишите автору.
При полном или частичном использовании данного материала ссылка на автора обязательна.

Your rating: Нет Average: 7.5 (26 votes)
RSS-материал