Компиляция и установка 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