DKMS (Dynamic Kernel Module Support) — шикарное решение, если требуемый модуль для ядра нельзя поставить и обновлять штатными средствами, но зато есть его исходники. Не требуется следить за обновлениями ядра и оперативно пересобирать нужный модуль или вовсе блокировать обновления ядра, чтобы ничего не отвалилось после очередного обновления.
Сначала устанавливаем dkms и другие необходимые пакеты:
$ sudo apt-get install dkms build-essential autoconf automake autogen libpcap-dev libtool xtables-addons-dkms pkg-config xtables-addons-sourceСкачиваем исходники nDPI:
$ wget https://github.com/vel21ripn/nDPI/archive/netfilter.zipРаспаковываем скачанный архив в
/usr/src:$ sudo unzip netfilter.zip -d /usr/srcПереименовываем распакованную папку в
ndpi-x.y.z, где x.y.z — версия модуля:$ sudo mv /usr/src/nDPI-netfilter /usr/src/ndpi-1.7.0Создаем файл
dkms.conf в этой папке:$ sudo tee /usr/src/ndpi-1.7.0/dkms.conf << EOF
# Версия модуля
PACKAGE_VERSION="1.7.0"
# Название модуля в /usr/src
PACKAGE_NAME="ndpi"
# Папка для компиляции
BDIR="\${dkms_tree}/\${PACKAGE_NAME}/\${PACKAGE_VERSION}/build"
# Аргументы для make
ARGS="-C \${kernel_source_dir} SUBDIRS=\${BDIR} M=\${BDIR}/ndpi-netfilter/src"
# После компиляции созданный модуль перемещается туда, где DKMS может его найти
MAKE[0]="make \${ARGS} modules ; find \${BDIR} -name '*.ko' -exec mv -v {} \${BDIR} \;"
CLEAN="make \${ARGS} clean"
# Название модуля ядра
BUILT_MODULE_NAME[0]="xt_ndpi"
# Папка, где обычно устанавливается модуль в ядре
DEST_MODULE_LOCATION[0]="/extra/"
# Не пересобирать initrd ядра
REMAKE_INITRD="no"
# Установка модуля после компиляции
AUTOINSTALL="yes"
EOF
Теперь компилируем и устанавливаем библиотеку nDPI
$ cd /usr/src/ndpi-1.7.0 $ sudo ./autogen.sh $ sudo sh -c './configure && make' $ cd /usr/src/ndpi-1.7.0/ndpi-netfilter $ sudo make installПосле чего в DKMS добавляем запись о нашем модуле:
$ sudo dkms add -m ndpi -v 1.7.0Собираем модуль из исходников:
$ sudo dkms build -m ndpi -v 1.7.0Собранный модуль устанавливаем папке
/dkms/:$ sudo dkms install -m ndpi -v 1.7.0