5W site logo 5W - мой домашний сайт-блог с картинками, кино и плюшками.

build-kernel-debian.txt

Компиляция и установка Linux из исходников в Debian

Впервые опубликовано 2008-10-11.
1. Подготовка

Для начала, следует установить пакеты, необходимые для сборки ядра:

apt-get install fakeroot kernel-package build-essential zlib1g-dev

Если вам потребуется перенастроить ядро средствами menuconfig, нужно будет также установить пакет libncurses5-dev.
2. Получение и распаковка исходников Linux

Исходники текущей версии ядра можно скачать с www.kernel.org, они выложены там под названием linux-<версия>.tar.bz2 (к примеру, linux-2.6.31.tar.bz2). Распаковать их:

tar -xjf linux-*.tar.bz2

После чего перейти в созданный при распаковке каталог.
3. Настройка компилятора

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

Для того, чтобы ускорить компиляцию на многоядерных (или многопроцессорных) системах, можно задать количество одновременно запускаемых процессов для сборки не зависящих друг от друга частей ядра:

export CONCURRENCY_LEVEL=`grep -m1 cpu\ cores /proc/cpuinfo | cut -d : -f 2`

При желании использовать для сборки ядра версию gcc, отличающуюся от установленной в системе по умолчанию (например - новее, чтобы получить преимущества от добавленных в ней возможностей, либо старее, чтобы избежать проблем с совместимостью), перед вызовом make-kpkg следует также выполнить (к примеру, для версии gcc 4.4):

export MAKEFLAGS="CC=gcc-4.4"

Если же собираем ядро для архитектуры, отличающейся от текущей (к примеру, для 32-битных x86-машин, находясь в системе amd64), следует указать желаемую архитектуру в переменной окружения ARCH:

export ARCH=i386

…и непосредственно при запуске make-kpkg, добавить соответствующий ключ:

make-kpkg --arch i386 ......

4. Настройка будущего ядра

Прежде всего, стоит удостовериться, что в текущем каталоге с исходниками не осталось никаких старых временных файлов и прочего мусора:

make clean mrproper
make-kpkg clean

Если у вас нет заранее сохранённых .config-файлов, но вы не хотите конфигурировать ядро с нуля, можно взять настройки, использовавшиеся при компиляции текущего ядра:

cp /boot/config-`uname -r` .config

Либо скачать настроечные файлы официальных ядер Debian вот отсюда.

Запускаем утилиту настройки:

make oldconfig

Значения всех уже существовавших в прошлой версии опций ядра будут взяты из старого настроечного файла. Для завершения процесса, достаточно лишь принять решение по опциям, появившимся в версиях новее её.
5. Компиляция ядра и создание deb-пакетов

Для создания пакетов c ядром и заголовочными файлами, нужно выполнить следующее:

fakeroot make-kpkg --initrd --append-to-version=-custom kernel_image kernel_headers

Вместо -custom, в качестве обозначения вашего ядра можно указать что угодно, от вашего имени или псевдонима (чтобы не забыть, что это ядро собиралось именно вами), до сугубо технически-полезной информации (что-нибудь в духе -foobarfs-patch8-debug1).
6. Установка deb-пакетов

Пакеты по умолчанию кладутся одним уровнем выше текущего каталога с исходниками (в котором вы находились, запуская компиляцию). Таким образом, сразу же после компиляции их можно установить командой:

dpkg -i ../linux-*.deb

7. Решение проблемы с созданием initrd.img

С недавнего времени в Debian появился баг, заключающийся в том, что после установки пакетов с собранными описанным здесь способом ядрами, не создаётся соответствующий им файл /boot/initrd.img. Для исправления применительно к уже установленному ядру, придётся создать initrd.img вручную:

update-initramfs -c -k <полная-версия-ядра>

Для решения проблемы “на будущее” – закомментировать вторую из процитированных ниже строк в файле /etc/kernel/postinst.d/initramfs-tools:

# kernel-package passes an extra arg; hack to not run under kernel-package
[ -z "$2" ] || exit 0