Dynamic Kernel Module Support(DKMS) — это фреймворк, который используется для генерации тех модулей ядра Linux, которые в общем случае не включены в дерево исходного кода. DKMS позволяет драйверам устройств автоматически пересобираться, когда ядро уже установлено.
Интересная штуковина. В жизни каждого мужчины наступает момент, когда он должен сделать 3 вещи: Установить linux, собрать ядро, поставить модуль. Сегодня наступил такой день и в жизни этого мужчины.
Для начала подготовим сборочный цех. Нам понадобится свежий debian из stable ветки на который мы установим:
Примечание!
Лучше чтоб сборочным цехом была виртуалка, либо какой-то непродуктивный сервер, чтоб в последствии не обновлять весь скопившейся на нём хлам и не поддерживать зависимости.
# aptitude install build-essential make dkms linux-headers-$(uname -r)
В общем-то почти всё готово. Осталось выбрать для примера, что мы будем собирать. Я возьму модуль от разработки нашего соотечественника accel-pppd необходимый для работы IPoE.
Установим пакеты для работы с git, скачиваем исходники:
# aptitude install git # cd /opt # git clone git://git.code.sf.net/p/accel-ppp/code accel-ppp-code Cloning into 'accel-ppp-code'... remote: Counting objects: 11871, done. remote: Compressing objects: 100% (7096/7096), done. remote: Total 11871 (delta 9061), reused 6228 (delta 4673) Receiving objects: 100% (11871/11871), 3.83 MiB | 193.00 KiB/s, done. Resolving deltas: 100% (9061/9061), done. Checking connectivity... done.
Отлично! Теперь нам нужно создать директорию для работы dkms. Она должна соответствовать шаблону: название_модуля-версия_модуля
# mkdir /usr/src/ipoe-0.1
То есть наш модуль будет называться ipoe а его версия будет 0.1
Закинем ранее скачанные исходники модуля в рабочую директорию:
# cp /opt/accel-ppp-code/drivers/ipoe/* /usr/src/ipoe-0.1/ # ls /usr/src/ipoe-0.1/ CMakeLists.txt ipoe.c ipoe.h Makefile
Создадим минимально-необходимый конфиг для работы dkms:
# cat << EOF > /usr/src/ipoe-0.1/dkms.conf PACKAGE_NAME="ipoe" PACKAGE_VERSION="0.1" CLEAN="make clean" MAKE[0]="make all KVERSION=$kernelver" BUILT_MODULE_NAME[0]="ipoe" DEST_MODULE_LOCATION[0]="/updates" AUTOINSTALL="yes" EOF
Ну вот, теперь пришло время создать в своей жизни нечто полезное:
# dkms build -m ipoe -v 0.1
Creating symlink /var/lib/dkms/ipoe/0.1/source ->
/usr/src/ipoe-0.1
DKMS: add completed.
Kernel preparation unnecessary for this kernel. Skipping...
Building module:
cleaning build area....
make KERNELRELEASE=3.16.0-4-amd64 all KVERSION=3.16.0-4-amd64....
cleaning build area....
DKMS: build completed.
Кажется, у нас всё получилось. Теперь соберём deb-пакет, чтоб всё было совсем по-красоте.
# dkms mkdeb -m ipoe -v 0.1 Using /etc/dkms/template-dkms-mkdeb copying template... modifying debian/changelog... modifying debian/compat... modifying debian/control... modifying debian/copyright... modifying debian/dirs... modifying debian/postinst... modifying debian/prerm... modifying debian/README.Debian... modifying debian/rules... copying legacy postinstall template... Copying source tree... Gathering binaries...Marking modules for 3.16.0-4-amd64 (x86_64) for archiving... Creating tarball structure to specifically accomodate binaries. Tarball location: /var/lib/dkms/ipoe/0.1/tarball//ipoe-0.1.dkms.tar.gz DKMS: mktarball completed. Copying DKMS tarball into DKMS tree... Building binary package...dpkg-buildpackage: предупреждение: используется команда получения прав root, но уже есть права root dpkg-source --before-build ipoe-dkms-0.1 fakeroot debian/rules clean debian/rules build fakeroot debian/rules binary dpkg-genchanges -b >../ipoe-dkms_0.1_amd64.changes dpkg-genchanges: закачка только двоичных пакетов (без пакетов исходного кода) dpkg-source --after-build ipoe-dkms-0.1 DKMS: mkdeb completed. Moving built files to /var/lib/dkms/ipoe/0.1/deb... Cleaning up temporary files...
Ну и финальный штрих, чтоб убедиться что всё нормас, пробуем установить наш пакет:
# dpkg -i /var/lib/dkms/ipoe/0.1/deb/ipoe-dkms_0.1_all.deb
Выбор ранее не выбранного пакета ipoe-dkms.
(Чтение базы данных … на данный момент установлено 54202 файла и каталога.)
Подготовка к распаковке …/0.1/deb/ipoe-dkms_0.1_all.deb …
Распаковывается ipoe-dkms (0.1) …
Настраивается пакет ipoe-dkms (0.1) …
Removing old ipoe-0.1 DKMS files...
-------- Uninstall Beginning --------
Module: ipoe
Version: 0.1
Kernel: 3.16.0-4-amd64 (x86_64)
-------------------------------------
Status: This module version was INACTIVE for this kernel.
depmod....
DKMS: uninstall completed.
------------------------------
Deleting module version: 0.1
completely from the DKMS tree.
------------------------------
Done.
Loading tarball for ipoe-0.1
Loading /var/lib/dkms/ipoe/0.1/3.16.0-4-amd64/x86_64...
DKMS: ldtarball completed.
Creating symlink /var/lib/dkms/ipoe/0.1/source ->
/usr/src/ipoe-0.1
DKMS: add completed.
First Installation: checking all kernels...
Building only for 3.16.0-4-amd64
Building for architecture amd64
Building initial module for 3.16.0-4-amd64
Done.
ipoe:
Running module version sanity check.
- Original module
- No original module exists within this kernel
- Installation
- Installing to /lib/modules/3.16.0-4-amd64/updates/dkms/
depmod....
DKMS: install completed.
Пацаны ваще ребята! Чотко!

Список используемых материалов:
Ваще нормас