Giter VIP home page Giter VIP logo

Comments (10)

vel21ripn avatar vel21ripn commented on June 26, 2024

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.

omikhaylov avatar omikhaylov commented on June 26, 2024

Суть в том, что нужно собрать некий установочный архив со всеми необходимыми файлами (установочный скрипт там отдельно будет написан), при чем так чтобы он собирался на абстрактной системе в докере. Докер используется только в процессе самой сборки.
Обычно для подобного хватало пакетов с заголовками (linux-headers-<версия>.deb).
На сколько понимаю, предлагается качать на докер полные исходники нужного ядра и компилировать их во временные папки. Получается что только linux-headers тут не обойтись?

from ndpi.

omikhaylov avatar omikhaylov commented on June 26, 2024

Если указать 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.

vel21ripn avatar vel21ripn commented on June 26, 2024

На отсутствие skbuff.h можно не обращать внимание. Я исправлю это в ближайшем коммите.
Для сборки модуля в виде отдельного пакета depmod не нужен.
Для сборки модуля нужны не только kernel-headers, но и конфиг ядра.

from ndpi.

omikhaylov avatar omikhaylov commented on June 26, 2024

Может в таком случае лучше сделать некую опцию, позволяющую не выполнять depmod -a в modules_install для сборок пакетов?

from ndpi.

k0ste avatar k0ste commented on June 26, 2024

@omikhaylov рецепт для сборки пакета можете посмотреть в AUR

from ndpi.

omikhaylov avatar omikhaylov commented on June 26, 2024

@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.

k0ste avatar k0ste commented on June 26, 2024

На сколько понимаю, тут файлы просто копируются в нужные папки. Решение немного частное получается.

Решение на самом деле общее, ведь make install делает тоже самое

Хочется быть уверенным в том, что все нужные файлы будут раскиданы по нужным директориям после обновления проекта (допустим появятся какие-то еще бинарники).

Безусловно, но модуль работает в пространстве ядра и управляется через расширение iptables, не думаю что тут возможны "какие-то еще бинарники"

В любом случае, если вы принесёте изменения в проект, которые можно будет использовать в других сборках (make install) - это будет благо, я в свою очередь смогу принести это в AUR 🚀

from ndpi.

omikhaylov avatar omikhaylov commented on June 26, 2024

Сделал маленький pull request не мейки: #159
С этими изменениями мне показалось что собираться немного удобнее.

from ndpi.

vel21ripn avatar vel21ripn commented on June 26, 2024

Применил

from ndpi.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.