28.09.2011

Сборка ядра на Debian

Для начала поставим пакеты:
apt-get install kernel-package fakeroot build-essential libncurses5-dev
Здесь:
kernel-package - система для создания пакетов, касающихся ядра. Этот пакет содержит утилиту make-kpkg, которая нам сделает не просто собранное ядро, а deb-пакет, который мы потом сможем установить на любую другую систему.

fakeroot - специальная команда, которая позволит подхватить переменное окружение рута обычному пользователю и тем самым создавать файлы и директории, назначая им владельцем рута.
build-essential - этот пакет сам по себе кроме информации ничего не несет, но не установится без зависимостей: make, dpkg-dev, gcc, g++ и так далее. То есть поставив этот пустой пакет, мы поставим многие необходимые утилиты и компиляторы.

Кроме того, нам скорее всего понадобятся комплекты подключаемых библиотек для компиляции ядра. Поэтому проверим, какая у нас платформа:
uname -m
Поищем в репозитории подходящий пакет для нашей платформы:
apt-cache search linux-headers

Выпадет несколько пакетов на выбор. Установим только тот, что подходит нам. Например у меня 32-битная система и потому я ставлю:
apt-get install linux-headers-2.6-686

Также понадобится библиотека zlib:
apt-get install libzlcore-dev zlib1g-dev

Теперь переходим в директорию, где будем работать:
cd /usr/src

Идем в репозиторий и выбираем себе пакет, который начинается с linux-2.6_2.6.NN.orig.tar.gz
Обратите внимание, что это ядро будет заметно больше других файлов по размеру (от 50Mb и выше) и не скачайте просто патч. На данный момент доступны только 26-е, 30-е и 32-е ядра.

Итак выбираем ядро и загружаем его:
wget http://security.debian.org/debian-security/pool/updates/main/l/linux-2.6/linux-2.6_2.6.32.orig.tar.gz



Распаковываем скачанный архив:
tar xzvf linux-2.6_2.6.32.orig.tar.gz

Создаем линк:
ln -s linux-2.6-2.6.32 linux

Предположим, что нам понадобилось добавить какие-то патчи.
Тогда создадим директорию, куда их скачаем:
mkdir /usr/src/patches

Теперь скачаем их туда.

Далее переходим в эту директорию:
cd linux

Первым делом накатим патчи, которые мы только что скачали. Обязательно сначала прогнать их в тестовом режиме (dry-run) и только потом, если тест успешный, реально наложить. В зависимости от того в каком архиве патч, он по разному накатывается:
cat ../patches/name.patch | patch -p1 --dry-run
cat ../patches/name.patch | patch -p1
или
zcat ../patches/name.patch.gz | patch -p1 --dry-run
zcat ../patches/name.patch.gz | patch -p1
или
bzcat ../patches/name.patch.bz2 | patch -p1 --dry-run
bzcat ../patches/name.patch.bz2 | patch -p1

Далее нужно будет отконфигурировать ядро. Чтобы не конфигурировать все сначала и не отрываться от результатов конфигураций умными людьми из Debian, можно взять конфигурацию текущего ядра (но это все же шаг не обязательный):
cp /boot/config-`uname -r` .config


Теперь можем запустить графическую менюшку конфигурации. Сначала установим для нее набор библиотек:
apt-get install libncurses5-dev

И запустим ее:
make menuconfig


Не забудьте выбрать «Kernel module loader» в «Loadable module support» (не включён по умолчанию). Если его не включить, возникнут проблемы с установкой Debian.

Кроме того, если используете netconsole, не забудьте включить опцию
CONFIG_NETCONSOLE_DYNAMIC

Пришло время собрать ядро. Запускать из под рута не рекомендуется, тем более, что fakeroot даже и не даст этого сделать. Поэтому, если мы до этого работали под рутом, нужно сменить пользователя. Например пользователя зовут username.

Так как собранное ядро автоматом ложится в /usr/src, то нужен доступ в эту директорию (не думаю, что тут требуется секьюрность, поэтому позволим себе дать права 777):
chmod 777 /usr/src


И перейдем под пользователя в это директорию:
su - username
cd /usr/src/linux

Ну а теперь запустим компиляцию:
fakeroot make-kpkg --verbose --initrd --append-to-version=-nodesquad1 kernel_image kernel_headers

где вместо nodesquad1 нужно дописать свою пометку ядру, которая добавится в название.

Это на долго...

После того, как компиляция и сборка пробежали, осталось поставить пакет:
dpkg -i linux-image-2.6.32-nodesquad1_2.6.32-nodesquad1-10.00.Custom_i386.deb
Убеждаемся, что в grub'е для загрузки именно это ядро (команду не дам, потому что у всех разные версии grub'а, а у некоторых вообще lilo).

Ну и перезагружаемся:
reboot



Комментариев нет:

Отправить комментарий