Comments (10)
I use the following commands to install kernel modules:
WD=`pwd`
KSRC="${WD}/linux-X.XX"
KOBJ="${WD}/obj-X.XX"
PKGDIR=/tmp/kernel-X.XX
( cd $KSRC ; make modules_install O=$KOBJ INSTALL_MOD_PATH=$PKGDIR )
(cd nDPI/ndpi-netfilter; make -C src KERNEL_DIR=$KOBJ modules_install O=$KOBJ INSTALL_MOD_PATH=$PKGDIR )
from ndpi.
Суть в том, что нужно собрать некий установочный архив со всеми необходимыми файлами (установочный скрипт там отдельно будет написан), при чем так чтобы он собирался на абстрактной системе в докере. Докер используется только в процессе самой сборки.
Обычно для подобного хватало пакетов с заголовками (linux-headers-<версия>.deb).
На сколько понимаю, предлагается качать на докер полные исходники нужного ядра и компилировать их во временные папки. Получается что только linux-headers тут не обойтись?
from ndpi.
Если указать KERNEL_DIR, разваливается на depmod. Является ли depmod необходимым в случае если нужно собрать архив или пакет?
root@48140a1a212e:~/ndpi-netfilter/ndpi-netfilter# make modules_install INSTALL_MOD_PATH=/root/out KERNEL_DIR=$KERNEL_DIR
make -C src modules_install
make[1]: Entering directory '/root/ndpi-netfilter/ndpi-netfilter/src'
grep: /lib/modules/4.9.0-11-amd64/build//source/include/linux/skbuff.h: No such file or directory
make -C /lib/modules/4.9.0-11-amd64/build/ M=$PWD modules_install
make[2]: Entering directory '/usr/src/linux-headers-4.9.0-11-amd64'
INSTALL /root/ndpi-netfilter/ndpi-netfilter/src/xt_ndpi.ko
DEPMOD 4.9.0-11-amd64
make[2]: Leaving directory '/usr/src/linux-headers-4.9.0-11-amd64'
depmod -a;
/bin/sh: 1: depmod: not found
Makefile:49: recipe for target 'modules_install' failed
make[1]: *** [modules_install] Error 127
make[1]: Leaving directory '/root/ndpi-netfilter/ndpi-netfilter/src'
Makefile:6: recipe for target 'modules_install' failed
make: *** [modules_install] Error 2
Оффтоп: кажется в ndpi-netfilter/src/Makefile:16 условие не верно.
Ищется таргет в виде 'modules_install', который находится (по крайней мере у меня) в /lib/modules/4.9.0-11-amd64/build, либо в /lib/modules/4.9.0-11-amd64/source. Соответственно если я передам в KERNEL_DIR /lib/modules/4.9.0-11-amd64/, таргет не найдется. А если передам /lib/modules/4.9.0-11-amd64/build/, не найдется skbuff.h.
from ndpi.
На отсутствие skbuff.h можно не обращать внимание. Я исправлю это в ближайшем коммите.
Для сборки модуля в виде отдельного пакета depmod не нужен.
Для сборки модуля нужны не только kernel-headers, но и конфиг ядра.
from ndpi.
Может в таком случае лучше сделать некую опцию, позволяющую не выполнять depmod -a в modules_install для сборок пакетов?
from ndpi.
@omikhaylov рецепт для сборки пакета можете посмотреть в AUR
from ndpi.
@omikhaylov рецепт для сборки пакета можете посмотреть в AUR
Спасибо, глянул.
На сколько понимаю, тут файлы просто копируются в нужные папки. Решение немного частное получается. Хочется быть уверенным в том, что все нужные файлы будут раскиданы по нужным директориям после обновления проекта (допустим появятся какие-то еще бинарники).
К сожалению не слишком хорошо представляю структуру проекта. Тут все файлы, который автор предлагает к установке? К примеру не вижу тут результатов выполнения make из корня проекта (ndpiReader, ndpi_network_list_compile и др.).
Потихоньку начал разбираться что там на самом деле происходит, но пока далеко не все очевидно выглядит.
Сделал пару изменений мейках:
diff --git a/ndpi-netfilter/ipt/Makefile b/ndpi-netfilter/ipt/Makefile
index 99881dd2547bac3a9b58ecbe58f862fc11b95f10..e13ba9d152c682df8c8f672b773382f584b327f9 100644
--- a/ndpi-netfilter/ipt/Makefile
+++ b/ndpi-netfilter/ipt/Makefile
@@ -6,7 +6,15 @@ CFLAGS = -fPIC -I../.. -I${NDPI_SRC}/include -I${NDPI_SRC}/lib -I../src -I../lib
all: libxt_ndpi.so
install: libxt_ndpi.so
- if [ -n "$(DESTDIR)$(XTBL)" -a -d "$(DESTDIR)$(XTBL)" ]; then install -v libxt_ndpi.so $(DESTDIR)$(XTBL); ln -fs libxt_ndpi.so $(DESTDIR)$(XTBL)/libxt_NDPI.so ; else echo "No pkg-config --variable=xtlibdir xtables"; fi
+ifndef XTBL
+$(error No pkg-config --variable=xtlibdir xtables)
+endif
+ if [ ! -d $(DESTDIR)$(XTBL) ]; then \
+ echo "$(DESTDIR)$(XTBL): directory nonexistent. Creating..."; \
+ mkdir -p $(DESTDIR)$(XTBL); \
+ fi
+ install -v libxt_ndpi.so ${DESTDIR}${XTBL}; \
+ ln -fs libxt_ndpi.so ${DESTDIR}${XTBL}/libxt_NDPI.so
lib%.so: lib%.o
$(CC) -shared -o $@ $^;
diff --git a/ndpi-netfilter/src/Makefile b/ndpi-netfilter/src/Makefile
index 744d9a3135227b7ba904d7a9035057a85838445e..6c6389b8b188171403082c367d974608bd38afa2 100644
--- a/ndpi-netfilter/src/Makefile
+++ b/ndpi-netfilter/src/Makefile
@@ -1,4 +1,3 @@
-
NDPI_SRC := ../../src
NDPI_PRO := ${NDPI_SRC}/lib/protocols
@@ -47,7 +46,7 @@ modules:
modules_install:
make -C ${KERNEL_DIR} M=$$PWD $@;
- depmod -a;
+ if [ -z ${INSTALL_MOD_PATH} ]; then depmod -a; fi
clean:
make -C ${KERNEL_DIR} M=$$PWD $@;
rm -rf modules.order
После этого кажется все файлы раскидываются по нужным поддиректориям в абстрактной папке (DESTDIR). Последовательность команд для этого делал примерно следующую:
DESTDIR=$(pwd)/$OUTPUT
mkdir -p $OUTPUT
./autogen.sh && ./configure
make install DESTDIR=$DESTDIR
make -C src/lib ndpi_network_list.c.inc
make -C ndpi-netfilter/ KERNEL_DIR=$KERNEL_DIR
make -C ndpi-netfilter/ KERNEL_DIR=$KERNEL_DIR INSTALL_MOD_PATH=$DESTDIR modules_install
make -C ndpi-netfilter/ DESTDIR=$DESTDIR install
Осталось из полученного сделать пакет для Debian. Я правильно понимаю, что здесь в проекте папка packages для этого не актуальна?
from ndpi.
На сколько понимаю, тут файлы просто копируются в нужные папки. Решение немного частное получается.
Решение на самом деле общее, ведь make install
делает тоже самое
Хочется быть уверенным в том, что все нужные файлы будут раскиданы по нужным директориям после обновления проекта (допустим появятся какие-то еще бинарники).
Безусловно, но модуль работает в пространстве ядра и управляется через расширение iptables, не думаю что тут возможны "какие-то еще бинарники"
В любом случае, если вы принесёте изменения в проект, которые можно будет использовать в других сборках (make install
) - это будет благо, я в свою очередь смогу принести это в AUR 🚀
from ndpi.
Сделал маленький pull request не мейки: #159
С этими изменениями мне показалось что собираться немного удобнее.
from ndpi.
Применил
from ndpi.
Related Issues (20)
- Валятся тесты из папки tests после сборки HOT 1
- Question about Flow Risk HOT 4
- No pkg-config --variable=xtlibdir xtables HOT 3
- Typo in main.c (acctounting instead of accounting) HOT 1
- Linux 6.6: build errors HOT 10
- Kernel panic when syncing conntrack entries with conntrackd HOT 5
- All defined host protocols match risk id 27 (Risky Domain Name) HOT 7
- bittorrent.c: detected write beyond size of field HOT 1
- ndpi_network_list.c.inc can no longer be compiled after merge HOT 2
- Question about echo command HOT 1
- Seeking Advice on Updating nDPI on VPS Servers HOT 1
- unresolved symbol __aarch64_ldadd8_sync on aarch64 HOT 4
- Inconsistent BitTorrent Filtering with nDPI HOT 4
- Handling large host_proto lists HOT 2
- Linux 6.7: build error HOT 6
- Please help filter iptables DNAT traffic
- iptables 1.8.10 causes ksoftirqd 100% CPU HOT 5
- /root/nDPI/ndpi-netfilter/src/../../src/lib/ndpi_main.c:1040:5: error: �for� loop initial declarations are only allowed in C99 or C11 mode
- Error compiling kernel modules under arm32 bit HOT 5
- host_proto wildcard options. HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from ndpi.