Задача: не все имеющееся оборудование поддерживается стандартным установщиком
Debian - для некоторых новых устройств необходима компиляция и подключение
доплнительных модулей ядра , исходные тексты которых находятся на сайте
производителя оборудования. Необходимо включить модули неподдерживаемых
устройств в сам установщик во избежании ручного ковыряния с ядром на стадии
установки.
1. Получение и сборка исходных текстов модуля ядра
В данном примере будет рассмотрено включение в установщик модуля igb ,
обеспечивающего работу новых серверных сетевых карт от Intel. Исходные тексты
берем с Intel.com. На этапе сборки модуля возник ряд проблем связанных с
необходимостью вновь собранного ядра а не заголовков.
Сборку будем производить на виртуальной машине. Установщик Debian GNU/Linux 4.0 r3 "Etch"
использует ядро 2.6.18-6-486-di , поэтому сборку необходимо производить на ядре
2.6.18-6-486 (ставится по умолчанию на виртуальную машину).
Для сборки также будут нужны следующие пакеты со своими зависимостями
linux-source-2.6.18
gcc
make
libc6-dev
Собираем ядро с использованием make oldconfig
Распаковываем исходники модуля, переходим в ./src , после сборки необходимый нам
файл igb.ko переносим с виртуальной машины
Результат - собранный модуль необходимой версии ядра и архитектуры
2. Создание пакета для установки модуля
Инсталлятор Debian использует пакеты deb и udeb. Подготовим каталог для сборки
из него пакета. Управляющие скрипты deb - пакетов располагаются в подкаталоге
./DEBIAN и должны иметь атрибут исполнения (+х). В нашем конкретном случае
достаточно 2х управляющих скриптов control и postinstall
control основной управляющий скрипт любого deb - пакета
cat newpackage/DEBIAN/control
Package: igb-additional-module-2.6.18-6-486-di - имя будущего пакета
Version: 1.44etch3 - версия пакета
Section: debian-installer - секция
Priority: standard - важность
Architecture: i386 - архитектура
Depend: kernel-image (=2.6.18-6-486-di) - зависимости
Provides: igb-kernel-module - доп инфо
Maintainer: Petr Skachkov <skapetr@yandex.ru.> - доп инфо
Description: Additional kernel module for new intel network adapters - доп инфо
postinstall - как следует из назвнаия - действия после установки содержимого пакета
cat newpackage/DEBIAN/postinstall
#! /bin/sh
/sbin/depmod -A
Помимо каталога с управляющими скриптами пакет содержит сам
устанавливаемый модуль с указанием полного пути от корневого каталога
Так как установщик на первой стадии использует пакеты udeb - переимиенуем наш
пакет - сменим расширение на udeb (если следовать Debian wiki - то пакеты .udeb
это вид deb пакетов используемых только в установшике Debian, а расширение
разработчики сменили из за "..несоответствия политике Debian";. Также отличием
является отсутствие документации и некоторых других компонентов стандартного
deb пакета)
Результат: пакет вида
igb-additional-module-2.6.18-6-486-di_1.44etch3_i386.udeb , готовый для
добавления в стандартный установщик
3. Модификация инсталера - добавление пакета
Адрес статьи взятой за основу http://wiki.debian.org/DebianInstaller/Modify/CD
Подготавливаем рабочий каталог
mkdir loopdir # каталог для монтирования iso-образа
mount -o loop installer.iso loopdir # монтируем образ через loopback
mkdir cd # рабочий каталог для нового образа
rsync -a -H --exclude=TRANS.TBL loopdir/ cd #копирование смонтированного iso
umount loopdir # отмонтируем исходный образ
Копируем наш модуль по пути ./cd/pool/main/l/linux-kernel-di-i386-2.6/ по этому
пути в установщике лежат пакеты со всеми используемыми при установке модулями ядра
В рабочем каталоге создаем файл config следующего содердания
Данный конфигурационный файл будет необходим для обновления файлов репозитория
пакетов, которые использует в работе установщик. Также нам будут необходимы
подкаталоги indices и indices/override
Обновим файлы репозитория командой
apt-ftparchive generate config
Результат данной команды - изменение в каталоге ./dists/etch/main/debian-installer/binary-i386/
файлов Packages и Packages.gz - теперь в них внесен наш пакет.
Перед началом инсталляции установщик также проверяет контрольные суммы файлов,
входящих в него, и если ему что то не нравится - прекращает свою работу
и ругается. Поэтому перед сборкой нового установщика нам нужно внести новые
контрольные суммы в файл md5sum.txt в корне рабочего каталога.
Так как по умолчанию md5sum.txt имеет атрибуты 444 (только чтение) - то перед
редактированием надо дать разрешение на запись
chmod 777 md5sum.txt
После этого получаем новые контрольные суммы для измененных и добавленных
файлов и вносим их в md5sum.txt. Затем этого снова меняем атрибуты файла на 444