luainkernel / lunatik

Lunatik is a framework for scripting the Linux kernel with Lua.
GNU General Public License v2.0
502 stars 29 forks source link

lunatik addon build error to BPFire/IPFire #189

Closed vincentmli closed 1 day ago

vincentmli commented 4 days ago

Hi @lneto

I am exploring XDP TLS SNI parsing solution to BPFire which enables eBPF kernel features. Parsing TLS SNI from raw packet in XDP has been pain in the neck due to eBPF verifier error :). I found lunatik LuaXDP from your article https://medium.com/@lourival.neto/is-ebpf-driving-you-crazy-let-it-run-lunatik-instead-4aca7d63e6fd, it is exactly want I want.

Now I am trying to build lunatik as addon to BPFire, here is the build instruction for lunatik addon

###############################################################################
# Definitions
###############################################################################

include Config

VER        = 3.5

THISAPP    = lunatik-$(VER)
DL_FILE    = $(THISAPP).tar.gz
DL_FROM    = $(URL_IPFIRE)
DIR_APP    = $(DIR_SRC)/$(THISAPP)
TARGET     = $(DIR_INFO)/$(THISAPP)

###############################################################################
# Top-level Rules
###############################################################################

objects = $(DL_FILE)

$(DL_FILE) = $(DL_FROM)/$(DL_FILE)

$(DL_FILE)_BLAKE2 = 916974be6803725026e13463fd1e8b7300fe78af33b5376e756f260d9276af1d936cf9d583b22c767790ab6c449c1e7228a23ab674828c0ac261668bb22575d5

install : $(TARGET)

check : $(patsubst %,$(DIR_CHK)/%,$(objects))

download :$(patsubst %,$(DIR_DL)/%,$(objects))

b2 : $(subst %,%_BLAKE2,$(objects))

###############################################################################
# Downloading, checking, b2sum
###############################################################################

$(patsubst %,$(DIR_CHK)/%,$(objects)) :
        @$(CHECK)

$(patsubst %,$(DIR_DL)/%,$(objects)) :
        @$(LOAD)

$(subst %,%_BLAKE2,$(objects)) :
        @$(B2SUM)

###############################################################################
# Installation Details
###############################################################################

$(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
        @$(PREBUILD)
        @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar zxf $(DIR_DL)/$(DL_FILE)

        cd $(DIR_APP) && make btf_install
        cd $(DIR_APP) && make
        cd $(DIR_APP) && make install
        cd $(DIR_APP) && make examples_install
        cd $(DIR_APP)/examples/filter && make

        @rm -rf $(DIR_APP)
        @$(POSTBUILD)

I got error

    Sep 14 16:01:43: Building lunatik lunatik-3.5.tar.gz checksum OK
    + cd /usr/src/lfs
    + make -f lunatik LFS_BASEDIR=/usr/src install
    ====================================== Installing lunatik-3.5 ...
    Install started; saving file list to /usr/src/lsalr ...
    cd /usr/src/lunatik-3.5 && make btf_install
    make[1]: Entering directory '/usr/src/lunatik-3.5'
    cp /sys/kernel/btf/vmlinux /lib/modules/6.6.15-ipfire/build
    make[1]: Leaving directory '/usr/src/lunatik-3.5'
    cd /usr/src/lunatik-3.5 && make
    make[1]: Entering directory '/usr/src/lunatik-3.5'
    make[1]: *** No rule to make target 'lua.h', needed by 'lunatik_sym.h'.  Stop.
    make[1]: Leaving directory '/usr/src/lunatik-3.5'
    make: *** [lunatik:75: /usr/src/log/lunatik-3.5] Error 2

lunatik has Makefile as

MODULES_INSTALL_PATH = /lib/modules/${shell uname -r}
SCRIPTS_INSTALL_PATH = /lib/modules/lua
LUNATIK_INSTALL_PATH = /usr/local/sbin
LUA_API = lua/lua.h lua/lauxlib.h lua/lualib.h <=====
KDIR ?= ${MODULES_INSTALL_PATH}/build
RM = rm -f
MKDIR = mkdir -p -m 0755
INSTALL = install -o root -g root

all: lunatik_sym.h
        make -C ${KDIR} M=${PWD} CONFIG_LUNATIK=m       \
        CONFIG_LUNATIK_RUN=m CONFIG_LUNATIK_RUNTIME=y CONFIG_LUNATIK_DEVICE=m   \
        CONFIG_LUNATIK_LINUX=m CONFIG_LUNATIK_NOTIFIER=m CONFIG_LUNATIK_SOCKET=m \
        CONFIG_LUNATIK_RCU=m CONFIG_LUNATIK_THREAD=m CONFIG_LUNATIK_FIB=m \
        CONFIG_LUNATIK_DATA=m CONFIG_LUNATIK_PROBE=m CONFIG_LUNATIK_SYSCALL=m \
        CONFIG_LUNATIK_XDP=m

it looks to me LUA_API = lua/lua.h lua/lauxlib.h lua/lualib.h is pointed to lua directory in lunatik source. the BPFire build system uses chroot environment, the chroot has build directory as the root directory, in my build machine, it looks like this:

root@r210:/home/vincent/go/src/github.com/vincentmli/BPFire# ls -l build/
total 80
drwxr-xr-x  2 root root 4096 Sep 12 15:54 bin
drwxr-xr-x  3 root root 4096 May 13 14:40 boot
drwxr-xr-x  4 root root 4096 May 12 21:12 dev
drwxr-xr-x 88 root root 4096 Sep 14 15:47 etc
drwxr-xr-x  3 root root 4096 May 12 21:12 home
drwxr-xr-x  4 root root 4096 May 13 14:50 install
drwxr-xr-x 10 root root 4096 Sep 12 15:55 lib
lrwxrwxrwx  1 root root    3 May 12 21:12 lib64 -> lib
drwxr-xr-x  5 root root 4096 May 12 21:12 media
drwxr-xr-x  2 root root 4096 May 12 21:12 mnt
drwxr-xr-x  5 root root 4096 Sep  9 17:39 opt
drwxr-xr-x  2 root root 4096 May 12 21:12 proc
drwxr-x---  4 root root 4096 Aug 28 15:29 root
drwxr-xr-x 15 root root 4096 Jul  9 01:49 run
drwxr-xr-x  2 root root 4096 Sep 12 15:54 sbin
drwxr-xr-x  3 root root 4096 May 12 23:59 srv
drwxr-xr-x  2 root root 4096 May 12 21:12 sys
drwxr-xr-x  2 root root 4096 May 12 21:12 tmp
drwxr-xr-x 13 root root 4096 Dec  6  2023 tools_x86_64
drwxr-xr-x 12 root root 4096 May 12 21:54 usr
drwxr-xr-x 23 root root 4096 May 13 02:41 var

for the example the kernel /lib/modules/6.6.15-ipfire in chroot is

root@r210:/home/vincent/go/src/github.com/vincentmli/BPFire# ls -l build/lib/modules/6.6.15-ipfire/
total 3996
drwxr-xr-x 24 root root    4096 Sep 14 16:19 build
drwxr-xr-x  3 root root    4096 Jul 12 21:49 extra
drwxr-xr-x 12 root root    4096 Jul 12 21:46 kernel
-rw-r--r--  1 root root 1003046 Jul 12 21:49 modules.alias
-rw-r--r--  1 root root  974817 Jul 12 21:49 modules.alias.bin
-rw-r--r--  1 root root    8974 Jul 12 21:46 modules.builtin
-rw-r--r--  1 root root    9261 Jul 12 21:49 modules.builtin.alias.bin
-rw-r--r--  1 root root   12132 Jul 12 21:49 modules.builtin.bin
-rw-r--r--  1 root root   68119 Jul 12 21:46 modules.builtin.modinfo
-rw-r--r--  1 root root  348812 Jul 12 21:49 modules.dep
-rw-r--r--  1 root root  483228 Jul 12 21:49 modules.dep.bin
-rw-r--r--  1 root root     335 Jul 12 21:49 modules.devname
-rw-r--r--  1 root root  117663 Jul 12 21:46 modules.order
-rw-r--r--  1 root root    1237 Jul 12 21:49 modules.softdep
-rw-r--r--  1 root root  463449 Jul 12 21:49 modules.symbols
-rw-r--r--  1 root root  561734 Jul 12 21:49 modules.symbols.bin
lrwxrwxrwx  1 root root       5 Jul 12 21:47 source -> build

the chroot build environment seems unable to locate LUA_API = lua/lua.h lua/lauxlib.h lua/lualib.h, I tried to change it to LUA_API = /usr/include/lua.h /usr/include/lauxlib.h /usr/include/lualib.h where /usr/include/lua.h is actually pointed to build/usr/include/lua.h, and the lua.h comes from upstream lua build, not from lunatik lua, and it of course failed too.

I am wondering if you have an idea to workaround this build problem. I like to explore lunatik in BPFire since they seems compliment with each other :)

lneto commented 4 days ago

I'm not familiar with BPFire, so I'd need to take a better look.. however, an easy workaround would be to call lunatik_sym.h directly.. perhaps using $(PWD) or this $(DIR_APP), passing the headers, would work.. I would also try to do LUA_API = $(DIR_APP)/lua/lua.h $(DIR_APP)/lua/lauxlib.h $(DIR_APP)/lua/lualib.h

vincentmli commented 4 days ago

Thanks for quick reply, BPFire is fork of IPFire which has https://www.ipfire.org/docs/devel/ipfire-2-x/addon-howto to add third party software, I will try your workaround suggestion, like changing lunatik Makefile to LUA_API = $(DIR_APP)/lua/lua.h $(DIR_APP)/lua/lauxlib.h $(DIR_APP)/lua/lualib.h

vincentmli commented 4 days ago

I tried LUA_API = ${PWD}/lua/lua.h ${PWD}/lua/lauxlib.h ${PWD}/lua/lualib.h, it result in, the ${PWD} is translated to /usr/src which is correct chroot path to lunatik source.

    ====================================== Installing lunatik-3.5 ...
    Install started; saving file list to /usr/src/lsalr ...
    cd /usr/src/lunatik-3.5 && make btf_install
    make[1]: Entering directory '/usr/src/lunatik-3.5'
    cp /sys/kernel/btf/vmlinux /lib/modules/6.6.15-ipfire/build
    make[1]: Leaving directory '/usr/src/lunatik-3.5'
    cd /usr/src/lunatik-3.5 && make
    make[1]: Entering directory '/usr/src/lunatik-3.5'
    make[1]: *** No rule to make target '/usr/src/lunatik-3.5/lua/lua.h', needed by 'lunatik_sym.h'.  Stop.
    make[1]: Leaving directory '/usr/src/lunatik-3.5'
    make: *** [lunatik:75: /usr/src/log/lunatik-3.5] Error 2

use $(DIR_APP) in lunatik Makefile seems did nothing, the path changed to /lua/lua.h under chroot.

by the way, I also tried to build lunatik in normal Ubuntu, it has error below:

root@r210:/usr/src/lunatik# make
make -C /lib/modules/6.8.0-40-lowlatency/build M=/usr/src/lunatik CONFIG_LUNATIK=m  \
CONFIG_LUNATIK_RUN=m CONFIG_LUNATIK_RUNTIME=y CONFIG_LUNATIK_DEVICE=m   \
CONFIG_LUNATIK_LINUX=m CONFIG_LUNATIK_NOTIFIER=m CONFIG_LUNATIK_SOCKET=m \
CONFIG_LUNATIK_RCU=m CONFIG_LUNATIK_THREAD=m CONFIG_LUNATIK_FIB=m \
CONFIG_LUNATIK_DATA=m CONFIG_LUNATIK_PROBE=m CONFIG_LUNATIK_SYSCALL=m \
CONFIG_LUNATIK_XDP=m
make[1]: Entering directory '/usr/src/linux-headers-6.8.0-40-lowlatency'
warning: the compiler differs from the one used to build the kernel
  The kernel was built by: x86_64-linux-gnu-gcc-12 (Ubuntu 12.3.0-1ubuntu1~22.04) 12.3.0
  You are using:           gcc-12 (Ubuntu 12.3.0-1ubuntu1~22.04) 12.3.0
  CC [M]  /usr/src/lunatik/lua/linit.o
  CC [M]  /usr/src/lunatik/lua/loadlib.o
  AS [M]  /usr/src/lunatik//klibc/usr/klibc/arch/x86_64/setjmp.o
/usr/src/lunatik//klibc/usr/klibc/arch/x86_64/setjmp.o: warning: objtool: setjmp+0x23: 'naked' return found in RETHUNK build
/usr/src/lunatik//klibc/usr/klibc/arch/x86_64/setjmp.o: warning: objtool: longjmp+0x1d: indirect jump found in RETPOLINE build
make[3]: *** [scripts/Makefile.build:361: /usr/src/lunatik//klibc/usr/klibc/arch/x86_64/setjmp.o] Error 254
make[3]: *** Deleting file '/usr/src/lunatik//klibc/usr/klibc/arch/x86_64/setjmp.o'
make[2]: *** [/usr/src/linux-headers-6.8.0-40-lowlatency/Makefile:1926: /usr/src/lunatik] Error 2
make[1]: *** [Makefile:240: __sub-make] Error 2
make[1]: Leaving directory '/usr/src/linux-headers-6.8.0-40-lowlatency'
make: *** [Makefile:11: all] Error 2
lneto commented 4 days ago

Can you try the master branch? It's supposed to be fixed there..

lneto commented 4 days ago

I think your makefile isn't handling well the header dependency.. I would just remove it.. e.g., s/lunatik_sym.h: $(LUA_API)/lunatik_sym.h:/

lneto commented 4 days ago

Thanks for quick reply, BPFire is fork of IPFire which has https://www.ipfire.org/docs/devel/ipfire-2-x/addon-howto to add third party software, I will try your workaround suggestion, like changing lunatik Makefile to LUA_API = $(DIR_APP)/lua/lua.h $(DIR_APP)/lua/lauxlib.h $(DIR_APP)/lua/lualib.h

Nice! Will take a look ;-)

vincentmli commented 4 days ago

Can you try the master branch? It's supposed to be fixed there..

I checked the master Makefile seems to be same as lunatik v3.5 in regard to lunatik_sym.h

all: lunatik_sym.h
        make -C ${KDIR} M=${PWD} CONFIG_LUNATIK=m       \
        CONFIG_LUNATIK_RUN=m CONFIG_LUNATIK_RUNTIME=y CONFIG_LUNATIK_DEVICE=m   \
        CONFIG_LUNATIK_LINUX=m CONFIG_LUNATIK_NOTIFIER=m CONFIG_LUNATIK_SOCKET=m \
        CONFIG_LUNATIK_RCU=m CONFIG_LUNATIK_THREAD=m CONFIG_LUNATIK_FIB=m \
        CONFIG_LUNATIK_DATA=m CONFIG_LUNATIK_PROBE=m CONFIG_LUNATIK_SYSCALL=m \
        CONFIG_LUNATIK_XDP=m
...SNIP...
lunatik_sym.h: $(LUA_API)
        ${shell ./gensymbols.sh $(LUA_API) > lunatik_sym.h}

or you mean the build error for normal Ubuntu build, yes, it looks the master branch competed the build without [scripts/Makefile.build:361: /usr/src/lunatik//klibc/usr/klibc/arch/x86_64/setjmp.o] Error 254

lneto commented 4 days ago

Yup, I meant regarding Ubuntu build..

vincentmli commented 4 days ago

Thanks for quick reply, BPFire is fork of IPFire which has https://www.ipfire.org/docs/devel/ipfire-2-x/addon-howto to add third party software, I will try your workaround suggestion, like changing lunatik Makefile to LUA_API = $(DIR_APP)/lua/lua.h $(DIR_APP)/lua/lauxlib.h $(DIR_APP)/lua/lualib.h

Nice! Will take a look ;-)

in BPFire, there is also section on how to build BPFire which already have xdp-tools, libbpf...etc addon, IPFire does not have kernel with eBPF enabled, so you won't get too far with it :), if you want to try, you might just try BPFire build. I will add lunatik source packages to BPFire cache directory, and addon lfs/lunatik, so it is easier for you to build test lunatik if you ever want to try.

vincentmli commented 4 days ago

if I understand you correctly, I git clone the master branch and made following changes in Makefile

root@r210:/home/vincent/go/src/github.com/vincentmli/BPFire/cache/lunatik-5.3.2# git diff
diff --git a/Makefile b/Makefile
index ec172541..2a12b68c 100644
--- a/Makefile
+++ b/Makefile
@@ -4,13 +4,13 @@
 MODULES_INSTALL_PATH = /lib/modules/${shell uname -r}
 SCRIPTS_INSTALL_PATH = /lib/modules/lua
 LUNATIK_INSTALL_PATH = /usr/local/sbin
-LUA_API = lua/lua.h lua/lauxlib.h lua/lualib.h
+LUA_API = $(PWD)/lua/lua.h $(PWD)/lua/lauxlib.h $(PWD)/lua/lualib.h
 KDIR ?= ${MODULES_INSTALL_PATH}/build
 RM = rm -f
 MKDIR = mkdir -p -m 0755
 INSTALL = install -o root -g root

-all: lunatik_sym.h
+all: $(LUA_API)lunatik_sym.h
        ${MAKE} -C ${KDIR} M=${PWD} CONFIG_LUNATIK=m    \
        CONFIG_LUNATIK_RUN=m CONFIG_LUNATIK_RUNTIME=y CONFIG_LUNATIK_DEVICE=m   \
        CONFIG_LUNATIK_LINUX=m CONFIG_LUNATIK_NOTIFIER=m CONFIG_LUNATIK_SOCKET=m \
@@ -70,6 +70,6 @@ install: scripts_install modules_install
 uninstall: scripts_uninstall modules_uninstall
        depmod -a

-lunatik_sym.h: $(LUA_API)
+$(LUA_API)/lunatik_sym.h: $(LUA_API)
        ${shell ./gensymbols.sh $(LUA_API) > lunatik_sym.h}

then I got error Circular denpendency, Am I missing anything?

    Sep 14 21:05:26: Building lunatik lunatik-5.3.2.tar.gz checksum OK
    + cd /usr/src/lfs
    + make -f lunatik LFS_BASEDIR=/usr/src install
    ====================================== Installing lunatik-5.3.2 ...
    Install started; saving file list to /usr/src/lsalr ...
    cd /usr/src/lunatik-5.3.2 && make btf_install
    make[1]: Entering directory '/usr/src/lunatik-5.3.2'
    cp /sys/kernel/btf/vmlinux /lib/modules/6.6.15-ipfire/build
    make[1]: Leaving directory '/usr/src/lunatik-5.3.2'
    cd /usr/src/lunatik-5.3.2 && make
    make[1]: Entering directory '/usr/src/lunatik-5.3.2'
    make[1]: Circular /usr/src/lunatik-5.3.2/lua/lua.h <- /usr/src/lunatik-5.3.2/lua/lua.h dependency dropped.
    make[1]: Circular /usr/src/lunatik-5.3.2/lua/lauxlib.h <- /usr/src/lunatik-5.3.2/lua/lua.h dependency dropped.
    make[1]: Circular /usr/src/lunatik-5.3.2/lua/lauxlib.h <- /usr/src/lunatik-5.3.2/lua/lauxlib.h dependency dropped.
    make[1]: *** No rule to make target '/usr/src/lunatik-5.3.2/lua/lualib.hlunatik_sym.h', needed by 'all'.  Stop.
    make[1]: Leaving directory '/usr/src/lunatik-5.3.2'
    make: *** [lunatik:75: /usr/src/log/lunatik-5.3.2] Error 2
vincentmli commented 4 days ago

sorry missed / above in +all: $(LUA_API)lunatik_sym.h, corrected the mistake, now making some progress

root@r210:/home/vincent/go/src/github.com/vincentmli/BPFire/cache/lunatik-5.3.2# git diff
diff --git a/Makefile b/Makefile
index ec172541..33580878 100644
--- a/Makefile
+++ b/Makefile
@@ -4,13 +4,13 @@
 MODULES_INSTALL_PATH = /lib/modules/${shell uname -r}
 SCRIPTS_INSTALL_PATH = /lib/modules/lua
 LUNATIK_INSTALL_PATH = /usr/local/sbin
-LUA_API = lua/lua.h lua/lauxlib.h lua/lualib.h
+LUA_API = $(PWD)/lua/lua.h $(PWD)/lua/lauxlib.h $(PWD)/lua/lualib.h
 KDIR ?= ${MODULES_INSTALL_PATH}/build
 RM = rm -f
 MKDIR = mkdir -p -m 0755
 INSTALL = install -o root -g root

-all: lunatik_sym.h
+all: $(LUA_API)/lunatik_sym.h
        ${MAKE} -C ${KDIR} M=${PWD} CONFIG_LUNATIK=m    \
        CONFIG_LUNATIK_RUN=m CONFIG_LUNATIK_RUNTIME=y CONFIG_LUNATIK_DEVICE=m   \
        CONFIG_LUNATIK_LINUX=m CONFIG_LUNATIK_NOTIFIER=m CONFIG_LUNATIK_SOCKET=m \
@@ -70,6 +70,6 @@ install: scripts_install modules_install
 uninstall: scripts_uninstall modules_uninstall
        depmod -a

-lunatik_sym.h: $(LUA_API)
+$(LUA_API)/lunatik_sym.h: $(LUA_API)
        ${shell ./gensymbols.sh $(LUA_API) > lunatik_sym.h}

now it seems BPFire kernel source missing ./tools/bpf/resolve_btfids/resolve_btfids: No such file or directory

lunatik (5.3.2)                                                                                                                                                                              [       54 ][ FAIL ]

    /usr/src/lunatik-5.3.2/lunatik.o: warning: objtool: luaV_execute+0x75: sibling call from callable instruction with modified stack frame
    CC [M]  /usr/src/lunatik-5.3.2/lunatik_run.o
    CC [M]  /usr/src/lunatik-5.3.2/lib/luadevice.o
    CC [M]  /usr/src/lunatik-5.3.2/lib/lualinux.o
    CC [M]  /usr/src/lunatik-5.3.2/lib/luanotifier.o
    CC [M]  /usr/src/lunatik-5.3.2/lib/luasocket.o
    CC [M]  /usr/src/lunatik-5.3.2/lib/luarcu.o
    CC [M]  /usr/src/lunatik-5.3.2/lib/luathread.o
    CC [M]  /usr/src/lunatik-5.3.2/lib/luafib.o
    CC [M]  /usr/src/lunatik-5.3.2/lib/luadata.o
    CC [M]  /usr/src/lunatik-5.3.2/lib/luaprobe.o
    CC [M]  /usr/src/lunatik-5.3.2/lib/luasyscall.o
    CC [M]  /usr/src/lunatik-5.3.2/lib/luaxdp.o
    CC [M]  /usr/src/lunatik-5.3.2/lib/luafifo.o
    CC [M]  /usr/src/lunatik-5.3.2/lib/luaxtable.o
    CC [M]  /usr/src/lunatik-5.3.2/lib/luanetfilter.o
    CC [M]  /usr/src/lunatik-5.3.2/lib/luacompletion.o
    MODPOST /usr/src/lunatik-5.3.2/Module.symvers
    CC [M]  /usr/src/lunatik-5.3.2/lunatik.mod.o
    LD [M]  /usr/src/lunatik-5.3.2/lunatik.ko
    BTF [M] /usr/src/lunatik-5.3.2/lunatik.ko
    /bin/sh: line 1: ./tools/bpf/resolve_btfids/resolve_btfids: No such file or directory
    make[4]: *** [scripts/Makefile.modfinal:60: /usr/src/lunatik-5.3.2/lunatik.ko] Error 127
    make[4]: *** Deleting file '/usr/src/lunatik-5.3.2/lunatik.ko'
    make[3]: *** [/lib/modules/6.6.15-ipfire/build/Makefile:1846: modules] Error 2
    make[2]: *** [Makefile:234: __sub-make] Error 2
    make[2]: Leaving directory '/lib/modules/6.6.15-ipfire/build'
    make[1]: *** [Makefile:14: all] Error 2
    make[1]: Leaving directory '/usr/src/lunatik-5.3.2'
    make: *** [lunatik:75: /usr/src/log/lunatik-5.3.2] Error 2

the chroot build directory has the resolve_btfids directory

root@r210:/home/vincent/go/src/github.com/vincentmli/BPFire# find build/ -name "resolve_btfids*"
build/lib/modules/6.6.15-ipfire/build/tools/bpf/resolve_btfids
vincentmli commented 4 days ago

I worked around the missing resolve_btfids issue by manually copy resolve_btfids binary from the BPFire kernel source to the chroot build build/lib/modules/6.6.15-ipfire/build/tools/bpf/resolve_btfids/ directory

root@r210:/usr/src/linux-6.6.15/tools/bpf/resolve_btfids# cp resolve_btfids /home/vincent/go/src/github.com/vincentmli/BPFire/build/lib/modules/6.6.15-ipfire/build/tools/bpf/resolve_btfids/

loxilb-tc (5.11.0)                                                                                                                                                                  [ DONE ]
loxicmd (0.9.x)                                                                                                                                                                     [ DONE ]
loxilb (0.9.x)                                                                                                                                                                      [ DONE ]
lunatik (5.3.2)                                                                                                                                                         [       31 ][ DONE ]
linux (6.6.15)                                                                                                                                                     KCFG=            [ DONE ]
rtl8812au (20210629-e6a0d1704ccd31145800ff5eb09ec2435a02f995)                                                                                                      KCFG=            [ DONE ]
linux-initrd ($(KVER))                                                                                                                                             KCFG=            [ DONE ]
Building installer                                                                                                                                                                   
memtest (7.00)                                                                                                                                                                      [ DONE ]
installer                                                                                                                                                                           [ DONE ]
strip                                                                            
lneto commented 4 days ago

Perhaps you could just make a symbolic link to the path it is looking for.. as the file is already in the chroot.. is it working now? Was you able to run a lua script from an XDP/eBPF program?

vincentmli commented 4 days ago

yes, the build is ok now, will try install the new BPFire ISO later

vincentmli commented 4 days ago

ok, now run time error, I wonder if BPFire kernel has policy to restrict loading third party modules ? any clue

[root@bpfire-2 ~]# lunatik run /lib/modules/lua/examples/filter/sni.lua false
insmod: ERROR: could not insert module /lib/modules/6.6.15-ipfire/lunatik/lunatik.ko: Key was rejected by service
insmod: ERROR: could not insert module /lib/modules/6.6.15-ipfire/lunatik/luadevice.ko: Key was rejected by service
insmod: ERROR: could not insert module /lib/modules/6.6.15-ipfire/lunatik/lualinux.ko: Key was rejected by service
insmod: ERROR: could not insert module /lib/modules/6.6.15-ipfire/lunatik/luanotifier.ko: Key was rejected by service
insmod: ERROR: could not insert module /lib/modules/6.6.15-ipfire/lunatik/luasocket.ko: Key was rejected by service
insmod: ERROR: could not insert module /lib/modules/6.6.15-ipfire/lunatik/luarcu.ko: Key was rejected by service
insmod: ERROR: could not insert module /lib/modules/6.6.15-ipfire/lunatik/luathread.ko: Key was rejected by service
insmod: ERROR: could not insert module /lib/modules/6.6.15-ipfire/lunatik/luafib.ko: Key was rejected by service
insmod: ERROR: could not insert module /lib/modules/6.6.15-ipfire/lunatik/luadata.ko: Key was rejected by service
insmod: ERROR: could not insert module /lib/modules/6.6.15-ipfire/lunatik/luaprobe.ko: Key was rejected by service
insmod: ERROR: could not insert module /lib/modules/6.6.15-ipfire/lunatik/luasyscall.ko: Key was rejected by service
insmod: ERROR: could not insert module /lib/modules/6.6.15-ipfire/lunatik/luaxdp.ko: Key was rejected by service
insmod: ERROR: could not insert module /lib/modules/6.6.15-ipfire/lunatik/luafifo.ko: Key was rejected by service
insmod: ERROR: could not insert module /lib/modules/6.6.15-ipfire/lunatik/luaxtable.ko: Key was rejected by service
insmod: ERROR: could not insert module /lib/modules/6.6.15-ipfire/lunatik/luanetfilter.ko: Key was rejected by service
insmod: ERROR: could not insert module /lib/modules/6.6.15-ipfire/lunatik/luacompletion.ko: Key was rejected by service
insmod: ERROR: could not insert module /lib/modules/6.6.15-ipfire/lunatik/lunatik_run.ko: Key was rejected by service
/usr/bin/lua: /usr/sbin/lunatik:30: /dev/lunatik: No such file or directory
stack traceback:
    [C]: in function 'assert'
    /usr/sbin/lunatik:30: in field 'loadstring'
    /usr/sbin/lunatik:40: in field 'dostring'
    /usr/sbin/lunatik:94: in main chunk
    [C]: in ?
vincentmli commented 4 days ago

maybe I need to turn off BPFire kernel config CONFIG_MODULE_SIG_FORCE=y ? or boot kernel with module.sig_enforce=0 ?

lneto commented 4 days ago

It seems so, or to sign lunatik modules with the distro key.. but I think it would be simpler just to disable it in the boot.. btw, I think it should be CONFIG_MODULE_SIG_FORCE=n for disabling it..

vincentmli commented 3 days ago

now different problem after recompile kernel with sig force disabled

[root@bpfire-2 ~]# lunatik run /lib/modules/lua/examples/filter/sni.lua false
insmod: ERROR: could not insert module /lib/modules/6.6.15-ipfire/lunatik/lunatik.ko: Invalid parameters
insmod: ERROR: could not insert module /lib/modules/6.6.15-ipfire/lunatik/luadevice.ko: Unknown symbol in module
insmod: ERROR: could not insert module /lib/modules/6.6.15-ipfire/lunatik/lualinux.ko: Unknown symbol in module
insmod: ERROR: could not insert module /lib/modules/6.6.15-ipfire/lunatik/luanotifier.ko: Unknown symbol in module
insmod: ERROR: could not insert module /lib/modules/6.6.15-ipfire/lunatik/luasocket.ko: Unknown symbol in module
insmod: ERROR: could not insert module /lib/modules/6.6.15-ipfire/lunatik/luarcu.ko: Unknown symbol in module
insmod: ERROR: could not insert module /lib/modules/6.6.15-ipfire/lunatik/luathread.ko: Unknown symbol in module
insmod: ERROR: could not insert module /lib/modules/6.6.15-ipfire/lunatik/luafib.ko: Unknown symbol in module
insmod: ERROR: could not insert module /lib/modules/6.6.15-ipfire/lunatik/luadata.ko: Unknown symbol in module
insmod: ERROR: could not insert module /lib/modules/6.6.15-ipfire/lunatik/luaprobe.ko: Unknown symbol in module
insmod: ERROR: could not insert module /lib/modules/6.6.15-ipfire/lunatik/luasyscall.ko: Unknown symbol in module
insmod: ERROR: could not insert module /lib/modules/6.6.15-ipfire/lunatik/luaxdp.ko: Unknown symbol in module
insmod: ERROR: could not insert module /lib/modules/6.6.15-ipfire/lunatik/luafifo.ko: Unknown symbol in module
insmod: ERROR: could not insert module /lib/modules/6.6.15-ipfire/lunatik/luaxtable.ko: Unknown symbol in module
insmod: ERROR: could not insert module /lib/modules/6.6.15-ipfire/lunatik/luanetfilter.ko: Unknown symbol in module
insmod: ERROR: could not insert module /lib/modules/6.6.15-ipfire/lunatik/luacompletion.ko: Unknown symbol in module
insmod: ERROR: could not insert module /lib/modules/6.6.15-ipfire/lunatik/lunatik_run.ko: Unknown symbol in module
/usr/bin/lua: /usr/sbin/lunatik:30: /dev/lunatik: No such file or directory
stack traceback:
    [C]: in function 'assert'
    /usr/sbin/lunatik:30: in field 'loadstring'
    /usr/sbin/lunatik:40: in field 'dostring'
    /usr/sbin/lunatik:94: in main chunk
    [C]: in ?

here is the lunatik build log, I do not see anything wrong other than Circular dependency dropped message

1131864 ====================================== Installing lunatik-5.3.2 ...
1131865 Install started; saving file list to /usr/src/lsalr ...
1131866 cd /usr/src/lunatik-5.3.2 && make btf_install
1131867 make[1]: Entering directory '/usr/src/lunatik-5.3.2'
1131868 cp /sys/kernel/btf/vmlinux /lib/modules/6.6.15-ipfire/build
1131869 make[1]: Leaving directory '/usr/src/lunatik-5.3.2'
1131870 cd /usr/src/lunatik-5.3.2 && make
1131871 make[1]: Entering directory '/usr/src/lunatik-5.3.2'
1131872 make[1]: Circular /usr/src/lunatik-5.3.2/lua/lua.h <- /usr/src/lunatik-5.3.2/lua/lua.h dependency dropped.
1131873 make[1]: Circular /usr/src/lunatik-5.3.2/lua/lauxlib.h <- /usr/src/lunatik-5.3.2/lua/lua.h dependency dropped.
1131874 make[1]: Circular /usr/src/lunatik-5.3.2/lua/lauxlib.h <- /usr/src/lunatik-5.3.2/lua/lauxlib.h dependency dropped.
1131875 make -C /lib/modules/6.6.15-ipfire/build M=/usr/src/lunatik-5.3.2 CONFIG_LUNATIK=m      \
1131876 CONFIG_LUNATIK_RUN=m CONFIG_LUNATIK_RUNTIME=y CONFIG_LUNATIK_DEVICE=m   \
1131877 CONFIG_LUNATIK_LINUX=m CONFIG_LUNATIK_NOTIFIER=m CONFIG_LUNATIK_SOCKET=m \
1131878 CONFIG_LUNATIK_RCU=m CONFIG_LUNATIK_THREAD=m CONFIG_LUNATIK_FIB=m \
1131879 CONFIG_LUNATIK_DATA=m CONFIG_LUNATIK_PROBE=m CONFIG_LUNATIK_SYSCALL=m \
1131880 CONFIG_LUNATIK_XDP=m CONFIG_LUNATIK_FIFO=m CONFIG_LUNATIK_XTABLE=m \
1131881 CONFIG_LUNATIK_NETFILTER=m CONFIG_LUNATIK_COMPLETION=m
1131882 make[2]: Entering directory '/lib/modules/6.6.15-ipfire/build'
1131883   CC [M]  /usr/src/lunatik-5.3.2/lua/lapi.o
1131884   CC [M]  /usr/src/lunatik-5.3.2/lua/lcode.o
1131885   CC [M]  /usr/src/lunatik-5.3.2/lua/lctype.o
1131886   CC [M]  /usr/src/lunatik-5.3.2/lua/ldebug.o
1131887   CC [M]  /usr/src/lunatik-5.3.2/lua/ldo.o
1131888   CC [M]  /usr/src/lunatik-5.3.2/lua/ldump.o
1131889   CC [M]  /usr/src/lunatik-5.3.2/lua/lfunc.o
1131890   CC [M]  /usr/src/lunatik-5.3.2/lua/lgc.o
1131891   CC [M]  /usr/src/lunatik-5.3.2/lua/llex.o
1131892   CC [M]  /usr/src/lunatik-5.3.2/lua/lmem.o
1131893   CC [M]  /usr/src/lunatik-5.3.2/lua/lobject.o
1131894   CC [M]  /usr/src/lunatik-5.3.2/lua/lopcodes.o
1131895   CC [M]  /usr/src/lunatik-5.3.2/lua/lparser.o
1131896   CC [M]  /usr/src/lunatik-5.3.2/lua/lstate.o
1131897   CC [M]  /usr/src/lunatik-5.3.2/lua/lstring.o
1131898   CC [M]  /usr/src/lunatik-5.3.2/lua/ltable.o
1131899   CC [M]  /usr/src/lunatik-5.3.2/lua/ltm.o
1131900   CC [M]  /usr/src/lunatik-5.3.2/lua/lundump.o
1131901   CC [M]  /usr/src/lunatik-5.3.2/lua/lvm.o
1131902   CC [M]  /usr/src/lunatik-5.3.2/lua/lzio.o
1131903   CC [M]  /usr/src/lunatik-5.3.2/lua/lauxlib.o
1131904   CC [M]  /usr/src/lunatik-5.3.2/lua/lbaselib.o
1131905   CC [M]  /usr/src/lunatik-5.3.2/lua/lcorolib.o
1131906   CC [M]  /usr/src/lunatik-5.3.2/lua/ldblib.o
1131907   CC [M]  /usr/src/lunatik-5.3.2/lua/lstrlib.o
1131908   CC [M]  /usr/src/lunatik-5.3.2/lua/ltablib.o
1131909   CC [M]  /usr/src/lunatik-5.3.2/lua/lutf8lib.o
1131910   CC [M]  /usr/src/lunatik-5.3.2/lua/lmathlib.o
1131911   CC [M]  /usr/src/lunatik-5.3.2/lua/linit.o
1131912   CC [M]  /usr/src/lunatik-5.3.2/lua/loadlib.o
1131913   AS [M]  /usr/src/lunatik-5.3.2//klibc/usr/klibc/arch/x86_64/setjmp.o
1131914   CC [M]  /usr/src/lunatik-5.3.2/lunatik_aux.o
1131915   CC [M]  /usr/src/lunatik-5.3.2/lunatik_obj.o
1131916   CC [M]  /usr/src/lunatik-5.3.2/lunatik_core.o
1131917   LD [M]  /usr/src/lunatik-5.3.2/lunatik.o
1131918 /usr/src/lunatik-5.3.2/lunatik.o: warning: objtool: luaV_execute+0x75: sibling call from callable instruction with modified stack frame
1131919   CC [M]  /usr/src/lunatik-5.3.2/lunatik_run.o
1131920   CC [M]  /usr/src/lunatik-5.3.2/lib/luadevice.o
1131921   CC [M]  /usr/src/lunatik-5.3.2/lib/lualinux.o
1131922   CC [M]  /usr/src/lunatik-5.3.2/lib/luanotifier.o
1131923   CC [M]  /usr/src/lunatik-5.3.2/lib/luasocket.o
1131924   CC [M]  /usr/src/lunatik-5.3.2/lib/luarcu.o
1131925   CC [M]  /usr/src/lunatik-5.3.2/lib/luathread.o
1131926   CC [M]  /usr/src/lunatik-5.3.2/lib/luafib.o
1131927   CC [M]  /usr/src/lunatik-5.3.2/lib/luadata.o
1131928   CC [M]  /usr/src/lunatik-5.3.2/lib/luaprobe.o
1131929   CC [M]  /usr/src/lunatik-5.3.2/lib/luasyscall.o
1131930   CC [M]  /usr/src/lunatik-5.3.2/lib/luaxdp.o
1131931   CC [M]  /usr/src/lunatik-5.3.2/lib/luafifo.o
1131932   CC [M]  /usr/src/lunatik-5.3.2/lib/luaxtable.o
1131933   CC [M]  /usr/src/lunatik-5.3.2/lib/luanetfilter.o
1131934   CC [M]  /usr/src/lunatik-5.3.2/lib/luacompletion.o
1131935   MODPOST /usr/src/lunatik-5.3.2/Module.symvers
1131936   CC [M]  /usr/src/lunatik-5.3.2/lunatik.mod.o
1131937   LD [M]  /usr/src/lunatik-5.3.2/lunatik.ko
1131938   BTF [M] /usr/src/lunatik-5.3.2/lunatik.ko
1131939   CC [M]  /usr/src/lunatik-5.3.2/lunatik_run.mod.o
1131940   LD [M]  /usr/src/lunatik-5.3.2/lunatik_run.ko
1131941   BTF [M] /usr/src/lunatik-5.3.2/lunatik_run.ko
1131942   CC [M]  /usr/src/lunatik-5.3.2/lib/luadevice.mod.o
1131943   LD [M]  /usr/src/lunatik-5.3.2/lib/luadevice.ko
1131944   BTF [M] /usr/src/lunatik-5.3.2/lib/luadevice.ko
1131945   CC [M]  /usr/src/lunatik-5.3.2/lib/lualinux.mod.o
1131946   LD [M]  /usr/src/lunatik-5.3.2/lib/lualinux.ko
1131947   BTF [M] /usr/src/lunatik-5.3.2/lib/lualinux.ko
1131948   CC [M]  /usr/src/lunatik-5.3.2/lib/luanotifier.mod.o
1131949   LD [M]  /usr/src/lunatik-5.3.2/lib/luanotifier.ko
1131950   BTF [M] /usr/src/lunatik-5.3.2/lib/luanotifier.ko
1131951   CC [M]  /usr/src/lunatik-5.3.2/lib/luasocket.mod.o
1131952   LD [M]  /usr/src/lunatik-5.3.2/lib/luasocket.ko
1131953   BTF [M] /usr/src/lunatik-5.3.2/lib/luasocket.ko
1131954   CC [M]  /usr/src/lunatik-5.3.2/lib/luarcu.mod.o
1131955   LD [M]  /usr/src/lunatik-5.3.2/lib/luarcu.ko
1131956   BTF [M] /usr/src/lunatik-5.3.2/lib/luarcu.ko
1131957   CC [M]  /usr/src/lunatik-5.3.2/lib/luathread.mod.o
1131958   LD [M]  /usr/src/lunatik-5.3.2/lib/luathread.ko
1131959   BTF [M] /usr/src/lunatik-5.3.2/lib/luathread.ko
1131960   CC [M]  /usr/src/lunatik-5.3.2/lib/luafib.mod.o
1131961   LD [M]  /usr/src/lunatik-5.3.2/lib/luafib.ko
1131962   BTF [M] /usr/src/lunatik-5.3.2/lib/luafib.ko
1131963   CC [M]  /usr/src/lunatik-5.3.2/lib/luadata.mod.o
1131964   LD [M]  /usr/src/lunatik-5.3.2/lib/luadata.ko
1131965   BTF [M] /usr/src/lunatik-5.3.2/lib/luadata.ko
1131966   CC [M]  /usr/src/lunatik-5.3.2/lib/luaprobe.mod.o
1131967   LD [M]  /usr/src/lunatik-5.3.2/lib/luaprobe.ko
1131968   BTF [M] /usr/src/lunatik-5.3.2/lib/luaprobe.ko
1131969   CC [M]  /usr/src/lunatik-5.3.2/lib/luasyscall.mod.o
1131970   LD [M]  /usr/src/lunatik-5.3.2/lib/luasyscall.ko
1131971   BTF [M] /usr/src/lunatik-5.3.2/lib/luasyscall.ko
1131972   CC [M]  /usr/src/lunatik-5.3.2/lib/luaxdp.mod.o
1131973   LD [M]  /usr/src/lunatik-5.3.2/lib/luaxdp.ko
1131974   BTF [M] /usr/src/lunatik-5.3.2/lib/luaxdp.ko
1131975   CC [M]  /usr/src/lunatik-5.3.2/lib/luafifo.mod.o
1131976   LD [M]  /usr/src/lunatik-5.3.2/lib/luafifo.ko
1131977   BTF [M] /usr/src/lunatik-5.3.2/lib/luafifo.ko
1131978   CC [M]  /usr/src/lunatik-5.3.2/lib/luaxtable.mod.o
1131979   LD [M]  /usr/src/lunatik-5.3.2/lib/luaxtable.ko
1131980   BTF [M] /usr/src/lunatik-5.3.2/lib/luaxtable.ko
1131981   CC [M]  /usr/src/lunatik-5.3.2/lib/luanetfilter.mod.o
1131982   LD [M]  /usr/src/lunatik-5.3.2/lib/luanetfilter.ko
1131983   BTF [M] /usr/src/lunatik-5.3.2/lib/luanetfilter.ko
1131984   CC [M]  /usr/src/lunatik-5.3.2/lib/luacompletion.mod.o
1131985   LD [M]  /usr/src/lunatik-5.3.2/lib/luacompletion.ko
1131986   BTF [M] /usr/src/lunatik-5.3.2/lib/luacompletion.ko
1131987 make[2]: Leaving directory '/lib/modules/6.6.15-ipfire/build'
1131988 make[1]: Leaving directory '/usr/src/lunatik-5.3.2'
1131989 cd /usr/src/lunatik-5.3.2 && make install
1131990 make[1]: Entering directory '/usr/src/lunatik-5.3.2'
1131991 mkdir -p -m 0755 /lib/modules/lua /lib/modules/lua/socket
1131992 mkdir -p -m 0755 /lib/modules/lua /lib/modules/lua/syscall
1131993 install -o root -g root -m 0644 driver.lua /lib/modules/lua/
1131994 install -o root -g root -m 0644 lib/mailbox.lua /lib/modules/lua/
1131995 install -o root -g root -m 0644 lib/socket/*.lua /lib/modules/lua/socket
1131996 install -o root -g root -m 0644 lib/syscall/*.lua /lib/modules/lua/syscall
1131997 install -o root -g root -m 0755 bin/lunatik /usr/sbin
1131998 mkdir -p -m 0755 /lib/modules/6.6.15-ipfire/lunatik
1131999 install -o root -g root -m 0644 *.ko lib/*.ko /lib/modules/6.6.15-ipfire/lunatik
1132000 depmod -a
1132001 make[1]: Leaving directory '/usr/src/lunatik-5.3.2'
1132002 cd /usr/src/lunatik-5.3.2 && make examples_install
1132003 make[1]: Entering directory '/usr/src/lunatik-5.3.2'
1132004 mkdir -p -m 0755 /lib/modules/lua/examples
1132005 install -o root -g root -m 0644 examples/*.lua /lib/modules/lua/examples
1132006 mkdir -p -m 0755 /lib/modules/lua/examples/echod
1132007 install -o root -g root -m 0644 examples/echod/*.lua /lib/modules/lua/examples/echod
1132008 mkdir -p -m 0755 /lib/modules/lua/examples/filter
1132009 install -o root -g root -m 0644 examples/filter/*.lua /lib/modules/lua/examples/filter
1132010 mkdir -p -m 0755 /lib/modules/lua/examples/dnsblock
1132011 install -o root -g root -m 0644 examples/dnsblock/*.lua /lib/modules/lua/examples/dnsblock
1132012 mkdir -p -m 0755 /lib/modules/lua/examples/dnsdoctor
1132013 install -o root -g root -m 0644 examples/dnsdoctor/*.lua /lib/modules/lua/examples/dnsdoctor
1132014 make[1]: Leaving directory '/usr/src/lunatik-5.3.2'
1132015 cd /usr/src/lunatik-5.3.2/examples/filter && make
1132016 make[1]: Entering directory '/usr/src/lunatik-5.3.2/examples/filter'
1132017 bpftool btf dump file /sys/kernel/btf/vmlinux format c > vmlinux.h
1132018 clang -target bpf -Wall -O2 -c -g https.c
1132019 make[1]: Leaving directory '/usr/src/lunatik-5.3.2/examples/filter'
1132020 Updating linker cache...
1132021 Install done; saving file list to /usr/src/log/lunatik-5.3.2 ...
lneto commented 3 days ago

It looks like it's not finding some symbol in your kernel.. can you show dmesg? Are you sure you are building the modules against the same kernel version you are running?

lneto commented 3 days ago

can you also check your lunatik_sym.h? it should look like this..

EXPORT_SYMBOL(lua_newstate);
EXPORT_SYMBOL(lua_close);
EXPORT_SYMBOL(lua_newthread);
EXPORT_SYMBOL(lua_closethread);
EXPORT_SYMBOL(lua_resetthread);
EXPORT_SYMBOL(lua_atpanic);
EXPORT_SYMBOL(lua_version);
EXPORT_SYMBOL(lua_absindex);
EXPORT_SYMBOL(lua_gettop);
EXPORT_SYMBOL(lua_settop);
EXPORT_SYMBOL(lua_pushvalue);
EXPORT_SYMBOL(lua_rotate);
EXPORT_SYMBOL(lua_copy);
EXPORT_SYMBOL(lua_checkstack);
EXPORT_SYMBOL(lua_xmove);
EXPORT_SYMBOL(lua_isnumber);
EXPORT_SYMBOL(lua_isstring);
EXPORT_SYMBOL(lua_iscfunction);
EXPORT_SYMBOL(lua_isinteger);
EXPORT_SYMBOL(lua_isuserdata);
EXPORT_SYMBOL(lua_type);
EXPORT_SYMBOL(lua_typename);
EXPORT_SYMBOL(lua_tointegerx);
EXPORT_SYMBOL(lua_toboolean);
EXPORT_SYMBOL(lua_tolstring);
EXPORT_SYMBOL(lua_rawlen);
EXPORT_SYMBOL(lua_tocfunction);
EXPORT_SYMBOL(lua_touserdata);
EXPORT_SYMBOL(lua_tothread);
EXPORT_SYMBOL(lua_topointer);
EXPORT_SYMBOL(lua_arith);
EXPORT_SYMBOL(lua_rawequal);
EXPORT_SYMBOL(lua_compare);
EXPORT_SYMBOL(lua_pushnil);
EXPORT_SYMBOL(lua_pushinteger);
EXPORT_SYMBOL(lua_pushlstring);
EXPORT_SYMBOL(lua_pushstring);
EXPORT_SYMBOL(lua_pushvfstring);
EXPORT_SYMBOL(lua_pushfstring);
EXPORT_SYMBOL(lua_pushcclosure);
EXPORT_SYMBOL(lua_pushboolean);
EXPORT_SYMBOL(lua_pushlightuserdata);
EXPORT_SYMBOL(lua_pushthread);
EXPORT_SYMBOL(lua_getglobal);
EXPORT_SYMBOL(lua_gettable);
EXPORT_SYMBOL(lua_getfield);
EXPORT_SYMBOL(lua_geti);
EXPORT_SYMBOL(lua_rawget);
EXPORT_SYMBOL(lua_rawgeti);
EXPORT_SYMBOL(lua_rawgetp);
EXPORT_SYMBOL(lua_createtable);
EXPORT_SYMBOL(lua_newuserdatauv);
EXPORT_SYMBOL(lua_getmetatable);
EXPORT_SYMBOL(lua_getiuservalue);
EXPORT_SYMBOL(lua_setglobal);
EXPORT_SYMBOL(lua_settable);
EXPORT_SYMBOL(lua_setfield);
EXPORT_SYMBOL(lua_seti);
EXPORT_SYMBOL(lua_rawset);
EXPORT_SYMBOL(lua_rawseti);
EXPORT_SYMBOL(lua_rawsetp);
EXPORT_SYMBOL(lua_setmetatable);
EXPORT_SYMBOL(lua_setiuservalue);
EXPORT_SYMBOL(lua_callk);
EXPORT_SYMBOL(lua_pcallk);
EXPORT_SYMBOL(lua_load);
EXPORT_SYMBOL(lua_dump);
EXPORT_SYMBOL(lua_yieldk);
EXPORT_SYMBOL(lua_resume);
EXPORT_SYMBOL(lua_status);
EXPORT_SYMBOL(lua_isyieldable);
EXPORT_SYMBOL(lua_setwarnf);
EXPORT_SYMBOL(lua_warning);
EXPORT_SYMBOL(lua_gc);
EXPORT_SYMBOL(lua_error);
EXPORT_SYMBOL(lua_next);
EXPORT_SYMBOL(lua_concat);
EXPORT_SYMBOL(lua_len);
EXPORT_SYMBOL(lua_stringtonumber);
EXPORT_SYMBOL(lua_getallocf);
EXPORT_SYMBOL(lua_setallocf);
EXPORT_SYMBOL(lua_toclose);
EXPORT_SYMBOL(lua_closeslot);
EXPORT_SYMBOL(lua_getstack);
EXPORT_SYMBOL(lua_getinfo);
EXPORT_SYMBOL(lua_getlocal);
EXPORT_SYMBOL(lua_setlocal);
EXPORT_SYMBOL(lua_getupvalue);
EXPORT_SYMBOL(lua_setupvalue);
EXPORT_SYMBOL(lua_upvalueid);
EXPORT_SYMBOL(lua_upvaluejoin);
EXPORT_SYMBOL(lua_sethook);
EXPORT_SYMBOL(lua_gethook);
EXPORT_SYMBOL(lua_gethookmask);
EXPORT_SYMBOL(lua_gethookcount);
EXPORT_SYMBOL(lua_setcstacklimit);
EXPORT_SYMBOL(luaL_checkversion_);
EXPORT_SYMBOL(luaL_getmetafield);
EXPORT_SYMBOL(luaL_callmeta);
EXPORT_SYMBOL(luaL_tolstring);
EXPORT_SYMBOL(luaL_argerror);
EXPORT_SYMBOL(luaL_typeerror);
EXPORT_SYMBOL(luaL_checklstring);
EXPORT_SYMBOL(luaL_optlstring);
EXPORT_SYMBOL(luaL_checknumber);
EXPORT_SYMBOL(luaL_optnumber);
EXPORT_SYMBOL(luaL_checkstack);
EXPORT_SYMBOL(luaL_checktype);
EXPORT_SYMBOL(luaL_checkany);
EXPORT_SYMBOL(luaL_newmetatable);
EXPORT_SYMBOL(luaL_setmetatable);
EXPORT_SYMBOL(luaL_testudata);
EXPORT_SYMBOL(luaL_checkudata);
EXPORT_SYMBOL(luaL_where);
EXPORT_SYMBOL(luaL_error);
EXPORT_SYMBOL(luaL_checkoption);
EXPORT_SYMBOL(luaL_ref);
EXPORT_SYMBOL(luaL_unref);
EXPORT_SYMBOL(luaL_loadbufferx);
EXPORT_SYMBOL(luaL_loadstring);
EXPORT_SYMBOL(luaL_newstate);
EXPORT_SYMBOL(luaL_len);
EXPORT_SYMBOL(luaL_addgsub);
EXPORT_SYMBOL(luaL_gsub);
EXPORT_SYMBOL(luaL_setfuncs);
EXPORT_SYMBOL(luaL_getsubtable);
EXPORT_SYMBOL(luaL_traceback);
EXPORT_SYMBOL(luaL_requiref);
EXPORT_SYMBOL(luaL_buffinit);
EXPORT_SYMBOL(luaL_prepbuffsize);
EXPORT_SYMBOL(luaL_addlstring);
EXPORT_SYMBOL(luaL_addstring);
EXPORT_SYMBOL(luaL_addvalue);
EXPORT_SYMBOL(luaL_pushresult);
EXPORT_SYMBOL(luaL_pushresultsize);
EXPORT_SYMBOL(luaL_buffinitsize);
EXPORT_SYMBOL(luaopen_base);
EXPORT_SYMBOL(luaopen_coroutine);
EXPORT_SYMBOL(luaopen_table);
EXPORT_SYMBOL(luaopen_string);
EXPORT_SYMBOL(luaopen_utf8);
EXPORT_SYMBOL(luaopen_math);
EXPORT_SYMBOL(luaopen_debug);
EXPORT_SYMBOL(luaopen_package);
EXPORT_SYMBOL(luaL_openlibs);
lneto commented 3 days ago

sorry missed / above in +all: $(LUA_API)lunatik_sym.h, corrected the mistake, now making some progress

root@r210:/home/vincent/go/src/github.com/vincentmli/BPFire/cache/lunatik-5.3.2# git diff
diff --git a/Makefile b/Makefile
index ec172541..33580878 100644
--- a/Makefile
+++ b/Makefile
@@ -4,13 +4,13 @@
 MODULES_INSTALL_PATH = /lib/modules/${shell uname -r}
 SCRIPTS_INSTALL_PATH = /lib/modules/lua
 LUNATIK_INSTALL_PATH = /usr/local/sbin
-LUA_API = lua/lua.h lua/lauxlib.h lua/lualib.h
+LUA_API = $(PWD)/lua/lua.h $(PWD)/lua/lauxlib.h $(PWD)/lua/lualib.h
 KDIR ?= ${MODULES_INSTALL_PATH}/build
 RM = rm -f
 MKDIR = mkdir -p -m 0755
 INSTALL = install -o root -g root

-all: lunatik_sym.h
+all: $(LUA_API)/lunatik_sym.h
        ${MAKE} -C ${KDIR} M=${PWD} CONFIG_LUNATIK=m    \
        CONFIG_LUNATIK_RUN=m CONFIG_LUNATIK_RUNTIME=y CONFIG_LUNATIK_DEVICE=m   \
        CONFIG_LUNATIK_LINUX=m CONFIG_LUNATIK_NOTIFIER=m CONFIG_LUNATIK_SOCKET=m \
@@ -70,6 +70,6 @@ install: scripts_install modules_install
 uninstall: scripts_uninstall modules_uninstall
        depmod -a

-lunatik_sym.h: $(LUA_API)
+$(LUA_API)/lunatik_sym.h: $(LUA_API)
        ${shell ./gensymbols.sh $(LUA_API) > lunatik_sym.h}

I was actually suggesting:

 -lunatik_sym.h: $(LUA_API)
 +lunatik_sym.h:
         ${shell ./gensymbols.sh $(LUA_API) > lunatik_sym.h}

or just running by hand ./gensymbols.sh lua/lua.h lua/lauxlib.h lua/lualib.h before building it.. we use this rule only to update symbols automatically anytime we update Lua version.. it won't be your case..

lneto commented 3 days ago

can you also try out this patch and share the build error if any?

diff --git a/Makefile b/Makefile
index ec172541..b1e801fe 100644
--- a/Makefile
+++ b/Makefile
@@ -4,7 +4,8 @@
 MODULES_INSTALL_PATH = /lib/modules/${shell uname -r}
 SCRIPTS_INSTALL_PATH = /lib/modules/lua
 LUNATIK_INSTALL_PATH = /usr/local/sbin
-LUA_API = lua/lua.h lua/lauxlib.h lua/lualib.h
+LUA = ${PWD}/lua
+LUA_API = ${LUA}/lua.h ${LUA}/lauxlib.h ${LUA}/lualib.h
 KDIR ?= ${MODULES_INSTALL_PATH}/build
 RM = rm -f
 MKDIR = mkdir -p -m 0755

I would like to make Lunatik build "chroot-friendly" ;-)

vincentmli commented 3 days ago

It looks like it's not finding some symbol in your kernel.. can you show dmesg? Are you sure you are building the modules against the same kernel version you are running?

here is dmesg, yes, the chroot built kernel is same as the running kernel, the build will package everything together as flash image and ISO, I install the ISO on physical machine to test, the ISO can also be installed as virtual guest in virtual environment. the error failed to validate module [lunatik] BTF: -22 seems to indicate BTF info missing for lunatik modules, right?

[43763.847199] BPF: [105867] ENUM _info 
[43763.847208] BPF: size=4 vlen=46
[43763.847210] BPF:  
[43763.847212] BPF: Invalid name
[43763.847214] BPF: 
[43763.847220] failed to validate module [lunatik] BTF: -22
[43763.905024] BPF: [105867] ENUM _info 
[43763.905033] BPF: size=4 vlen=46
[43763.905036] BPF:  
[43763.905037] BPF: Invalid name
[43763.905039] BPF: 
[43763.905046] failed to validate module [lunatik] BTF: -22
[43763.969863] BPF: [105867] ENUM _info 
[43763.969872] BPF: size=4 vlen=46
[43763.969875] BPF:  
[43763.969877] BPF: Invalid name
[43763.969878] BPF: 
[43763.969885] failed to validate module [lunatik] BTF: -22
[43763.996682] luadevice: Unknown symbol lunatik_deleteobject (err -2)
[43763.996704] luadevice: Unknown symbol lua_pcallk (err -2)
[43763.996728] luadevice: Unknown symbol lua_getfield (err -2)
[43763.996746] luadevice: Unknown symbol lua_gettop (err -2)
[43763.996758] luadevice: Unknown symbol lua_tointegerx (err -2)
[43763.996771] luadevice: Unknown symbol lua_rotate (err -2)
[43763.996783] luadevice: Unknown symbol lua_setfield (err -2)
[43763.996796] luadevice: Unknown symbol lua_rawgetp (err -2)
[43763.996808] luadevice: Unknown symbol luaL_checkversion_ (err -2)
[43763.996823] luadevice: Unknown symbol lua_pushvalue (err -2)
[43763.996862] luadevice: Unknown symbol lua_pushnil (err -2)
[43763.996876] luadevice: Unknown symbol lua_rawsetp (err -2)
[43763.996889] luadevice: Unknown symbol luaL_error (err -2)
[43763.996903] luadevice: Unknown symbol lua_settop (err -2)
[43763.996921] luadevice: Unknown symbol lua_tolstring (err -2)
[43763.996941] luadevice: Unknown symbol luaL_newmetatable (err -2)
[43763.996957] luadevice: Unknown symbol luaL_pushresultsize (err -2)
[43763.996978] luadevice: Unknown symbol luaL_setfuncs (err -2)
[43763.996990] luadevice: Unknown symbol lunatik_newobject (err -2)
[43763.997003] luadevice: Unknown symbol luaL_optnumber (err -2)
[43763.997015] luadevice: Unknown symbol luaL_buffinitsize (err -2)
[43763.997027] luadevice: Unknown symbol luaL_checktype (err -2)
[43763.997040] luadevice: Unknown symbol lua_typename (err -2)
[43763.997054] luadevice: Unknown symbol lunatik_checkpobject (err -2)
[43763.997068] luadevice: Unknown symbol lua_createtable (err -2)
[43763.997082] luadevice: Unknown symbol lunatik_releaseobject (err -2)
[43763.997095] luadevice: Unknown symbol lua_pushinteger (err -2)
[43764.058455] BPF: [105867] ENUM _info 
[43764.058464] BPF: size=4 vlen=46
[43764.058467] BPF:  
[43764.058469] BPF: Invalid name
[43764.058471] BPF: 
[43764.058477] failed to validate module [lunatik] BTF: -22
[43764.086365] lualinux: Unknown symbol lua_pushlightuserdata (err -2)
[43764.086394] lualinux: Unknown symbol lua_gettop (err -2)
[43764.086410] lualinux: Unknown symbol luaL_checklstring (err -2)
[43764.086423] lualinux: Unknown symbol lua_setfield (err -2)
[43764.086436] lualinux: Unknown symbol luaL_checkversion_ (err -2)
[43764.086451] lualinux: Unknown symbol luaL_error (err -2)
[43764.086463] lualinux: Unknown symbol lunatik_lookup (err -2)
[43764.086479] lualinux: Unknown symbol luaL_checknumber (err -2)
[43764.086503] lualinux: Unknown symbol lua_pushboolean (err -2)
[43764.086528] lualinux: Unknown symbol luaL_argerror (err -2)
[43764.086543] lualinux: Unknown symbol luaL_setfuncs (err -2)
[43764.086585] lualinux: Unknown symbol luaL_optnumber (err -2)
[43764.086599] lualinux: Unknown symbol lua_toboolean (err -2)
[43764.086615] lualinux: Unknown symbol lua_createtable (err -2)
[43764.086628] lualinux: Unknown symbol lua_pushinteger (err -2)
[43764.146264] BPF: [105867] ENUM _info 
[43764.146273] BPF: size=4 vlen=46
[43764.146275] BPF:  
[43764.146277] BPF: Invalid name
[43764.146279] BPF: 
[43764.146286] failed to validate module [lunatik] BTF: -22
[43764.179733] luanotifier: Unknown symbol lua_pcallk (err -2)
[43764.179756] luanotifier: Unknown symbol lua_getfield (err -2)
[43764.179769] luanotifier: Unknown symbol lua_gettop (err -2)
[43764.179782] luanotifier: Unknown symbol lua_tointegerx (err -2)
[43764.179794] luanotifier: Unknown symbol lua_setfield (err -2)
[43764.179807] luanotifier: Unknown symbol lua_rawgetp (err -2)
[43764.179819] luanotifier: Unknown symbol luaL_checkversion_ (err -2)
[43764.179867] luanotifier: Unknown symbol lua_pushvalue (err -2)
[43764.179882] luanotifier: Unknown symbol lua_pushnil (err -2)
[43764.179896] luanotifier: Unknown symbol lua_rawsetp (err -2)
[43764.179909] luanotifier: Unknown symbol luaL_error (err -2)
[43764.179923] luanotifier: Unknown symbol lua_settop (err -2)
[43764.179939] luanotifier: Unknown symbol lua_tolstring (err -2)
[43764.179952] luanotifier: Unknown symbol lua_pushboolean (err -2)
[43764.179967] luanotifier: Unknown symbol luaL_newmetatable (err -2)
[43764.179987] luanotifier: Unknown symbol lua_pushstring (err -2)
[43764.180008] luanotifier: Unknown symbol luaL_setfuncs (err -2)
[43764.180022] luanotifier: Unknown symbol lunatik_newobject (err -2)
[43764.180035] luanotifier: Unknown symbol luaL_checktype (err -2)
[43764.180047] luanotifier: Unknown symbol lunatik_checkpobject (err -2)
[43764.180060] luanotifier: Unknown symbol lua_createtable (err -2)
[43764.180072] luanotifier: Unknown symbol lunatik_releaseobject (err -2)
[43764.180085] luanotifier: Unknown symbol lua_pushinteger (err -2)
[43764.240287] BPF: [105867] ENUM _info 
[43764.240296] BPF: size=4 vlen=46
[43764.240299] BPF:  
[43764.240301] BPF: Invalid name
[43764.240303] BPF: 
[43764.240309] failed to validate module [lunatik] BTF: -22
[43764.268601] luasocket: Unknown symbol lunatik_closeobject (err -2)
[43764.268623] luasocket: Unknown symbol lunatik_deleteobject (err -2)
[43764.268636] luasocket: Unknown symbol lua_touserdata (err -2)
[43764.268649] luasocket: Unknown symbol lua_getfield (err -2)
[43764.268665] luasocket: Unknown symbol lua_gettop (err -2)
[43764.268678] luasocket: Unknown symbol luaL_checklstring (err -2)
[43764.268691] luasocket: Unknown symbol lua_setfield (err -2)
[43764.268707] luasocket: Unknown symbol luaL_checkversion_ (err -2)
[43764.268720] luasocket: Unknown symbol lua_pushlstring (err -2)
[43764.268735] luasocket: Unknown symbol lua_pushvalue (err -2)
[43764.268748] luasocket: Unknown symbol luaL_error (err -2)
[43764.268760] luasocket: Unknown symbol lua_settop (err -2)
[43764.268774] luasocket: Unknown symbol luaL_checknumber (err -2)
[43764.268787] luasocket: Unknown symbol lunatik_monitorobject (err -2)
[43764.268803] luasocket: Unknown symbol luaL_newmetatable (err -2)
[43764.268815] luasocket: Unknown symbol luaL_pushresultsize (err -2)
[43764.268829] luasocket: Unknown symbol lua_error (err -2)
[43764.268878] luasocket: Unknown symbol luaL_argerror (err -2)
[43764.268894] luasocket: Unknown symbol luaL_setfuncs (err -2)
[43764.268906] luasocket: Unknown symbol lunatik_newobject (err -2)
[43764.268919] luasocket: Unknown symbol luaL_optnumber (err -2)
[43764.268931] luasocket: Unknown symbol luaL_buffinitsize (err -2)
[43764.268945] luasocket: Unknown symbol lua_toboolean (err -2)
[43764.268957] luasocket: Unknown symbol lua_createtable (err -2)
[43764.268970] luasocket: Unknown symbol lua_pushinteger (err -2)
[43764.337723] BPF: [105867] ENUM _info 
[43764.337732] BPF: size=4 vlen=46
[43764.337734] BPF:  
[43764.337736] BPF: Invalid name
[43764.337738] BPF: 
[43764.337744] failed to validate module [lunatik] BTF: -22
[43764.365339] luarcu: Unknown symbol lunatik_deleteobject (err -2)
[43764.365360] luarcu: Unknown symbol lua_pcallk (err -2)
[43764.365373] luarcu: Unknown symbol lua_touserdata (err -2)
[43764.365386] luarcu: Unknown symbol lua_pushlightuserdata (err -2)
[43764.365398] luarcu: Unknown symbol lunatik_createobject (err -2)
[43764.365420] luarcu: Unknown symbol lua_getfield (err -2)
[43764.365434] luarcu: Unknown symbol luaL_checklstring (err -2)
[43764.365447] luarcu: Unknown symbol lua_setfield (err -2)
[43764.365459] luarcu: Unknown symbol luaL_checkversion_ (err -2)
[43764.365477] luarcu: Unknown symbol lua_pushvalue (err -2)
[43764.365490] luarcu: Unknown symbol lunatik_cloneobject (err -2)
[43764.365502] luarcu: Unknown symbol lua_pushnil (err -2)
[43764.365515] luarcu: Unknown symbol luaL_error (err -2)
[43764.365527] luarcu: Unknown symbol lua_settop (err -2)
[43764.365540] luarcu: Unknown symbol lua_pushcclosure (err -2)
[43764.365558] luarcu: Unknown symbol lua_type (err -2)
[43764.365574] luarcu: Unknown symbol luaL_newmetatable (err -2)
[43764.365593] luarcu: Unknown symbol lua_error (err -2)
[43764.365608] luarcu: Unknown symbol lua_pushstring (err -2)
[43764.365625] luarcu: Unknown symbol luaS_hash (err -2)
[43764.365638] luarcu: Unknown symbol luaL_setfuncs (err -2)
[43764.365650] luarcu: Unknown symbol lunatik_newobject (err -2)
[43764.365663] luarcu: Unknown symbol luaL_optnumber (err -2)
[43764.365675] luarcu: Unknown symbol lua_callk (err -2)
[43764.365689] luarcu: Unknown symbol luaL_checktype (err -2)
[43764.365705] luarcu: Unknown symbol lunatik_checkpobject (err -2)
[43764.365717] luarcu: Unknown symbol lua_createtable (err -2)
[43764.365730] luarcu: Unknown symbol lunatik_releaseobject (err -2)
[43764.423599] BPF: [105867] ENUM _info 
[43764.423608] BPF: size=4 vlen=46
[43764.423611] BPF:  
[43764.423612] BPF: Invalid name
[43764.423614] BPF: 
[43764.423621] failed to validate module [lunatik] BTF: -22
[43764.453094] luathread: Unknown symbol lua_resume (err -2)
[43764.453116] luathread: Unknown symbol lunatik_deleteobject (err -2)
[43764.453129] luathread: Unknown symbol lua_touserdata (err -2)
[43764.453142] luathread: Unknown symbol lua_getfield (err -2)
[43764.453154] luathread: Unknown symbol lua_gettop (err -2)
[43764.453170] luathread: Unknown symbol luaL_checklstring (err -2)
[43764.453182] luathread: Unknown symbol lua_setfield (err -2)
[43764.453197] luathread: Unknown symbol luaL_checkversion_ (err -2)
[43764.453216] luathread: Unknown symbol lua_pushvalue (err -2)
[43764.453228] luathread: Unknown symbol luaL_error (err -2)
[43764.453243] luathread: Unknown symbol lua_settop (err -2)
[43764.453261] luathread: Unknown symbol lua_tolstring (err -2)
[43764.453274] luathread: Unknown symbol lunatik_monitorobject (err -2)
[43764.453286] luathread: Unknown symbol lua_pushboolean (err -2)
[43764.453299] luathread: Unknown symbol luaL_newmetatable (err -2)
[43764.453318] luathread: Unknown symbol lua_pushstring (err -2)
[43764.453332] luathread: Unknown symbol luaL_argerror (err -2)
[43764.453346] luathread: Unknown symbol luaL_setfuncs (err -2)
[43764.453359] luathread: Unknown symbol lunatik_newobject (err -2)
[43764.453371] luathread: Unknown symbol lunatik_checkpobject (err -2)
[43764.453384] luathread: Unknown symbol lua_createtable (err -2)
[43764.453396] luathread: Unknown symbol lunatik_releaseobject (err -2)
[43764.453409] luathread: Unknown symbol lua_pushinteger (err -2)
[43764.512516] BPF: [105867] ENUM _info 
[43764.512525] BPF: size=4 vlen=46
[43764.512528] BPF:  
[43764.512530] BPF: Invalid name
[43764.512532] BPF: 
[43764.512538] failed to validate module [lunatik] BTF: -22
[43764.540207] luafib: Unknown symbol lua_getfield (err -2)
[43764.540229] luafib: Unknown symbol lua_setfield (err -2)
[43764.540243] luafib: Unknown symbol luaL_checkversion_ (err -2)
[43764.540258] luafib: Unknown symbol lua_pushvalue (err -2)
[43764.540272] luafib: Unknown symbol luaL_error (err -2)
[43764.540284] luafib: Unknown symbol lua_settop (err -2)
[43764.540299] luafib: Unknown symbol luaL_checknumber (err -2)
[43764.540322] luafib: Unknown symbol luaL_newmetatable (err -2)
[43764.540340] luafib: Unknown symbol luaL_setfuncs (err -2)
[43764.540353] luafib: Unknown symbol lua_createtable (err -2)
[43764.600159] BPF: [105867] ENUM _info 
[43764.600168] BPF: size=4 vlen=46
[43764.600171] BPF:  
[43764.600173] BPF: Invalid name
[43764.600174] BPF: 
[43764.600181] failed to validate module [lunatik] BTF: -22
[43764.627524] luadata: Unknown symbol lunatik_deleteobject (err -2)
[43764.627545] luadata: Unknown symbol lua_touserdata (err -2)
[43764.627559] luadata: Unknown symbol lua_getallocf (err -2)
[43764.627571] luadata: Unknown symbol lunatik_createobject (err -2)
[43764.627584] luadata: Unknown symbol lua_getfield (err -2)
[43764.627601] luadata: Unknown symbol luaL_checklstring (err -2)
[43764.627614] luadata: Unknown symbol lua_setfield (err -2)
[43764.627626] luadata: Unknown symbol luaL_checkversion_ (err -2)
[43764.627638] luadata: Unknown symbol lua_pushlstring (err -2)
[43764.627654] luadata: Unknown symbol lua_pushvalue (err -2)
[43764.627668] luadata: Unknown symbol luaL_error (err -2)
[43764.627680] luadata: Unknown symbol lua_settop (err -2)
[43764.627697] luadata: Unknown symbol luaL_checknumber (err -2)
[43764.627709] luadata: Unknown symbol lunatik_monitorobject (err -2)
[43764.627722] luadata: Unknown symbol luaL_newmetatable (err -2)
[43764.627737] luadata: Unknown symbol luaL_argerror (err -2)
[43764.627752] luadata: Unknown symbol luaL_setfuncs (err -2)
[43764.627764] luadata: Unknown symbol lunatik_newobject (err -2)
[43764.627777] luadata: Unknown symbol luaL_optnumber (err -2)
[43764.627789] luadata: Unknown symbol lua_createtable (err -2)
[43764.627802] luadata: Unknown symbol lua_pushinteger (err -2)
[43764.682072] BPF: [105867] ENUM _info 
[43764.682081] BPF: size=4 vlen=46
[43764.682083] BPF:  
[43764.682085] BPF: Invalid name
[43764.682087] BPF: 
[43764.682094] failed to validate module [lunatik] BTF: -22
[43764.709471] luaprobe: Unknown symbol lunatik_deleteobject (err -2)
[43764.709493] luaprobe: Unknown symbol lua_pcallk (err -2)
[43764.709506] luaprobe: Unknown symbol lua_touserdata (err -2)
[43764.709519] luaprobe: Unknown symbol lua_pushlightuserdata (err -2)
[43764.709532] luaprobe: Unknown symbol lua_getfield (err -2)
[43764.709550] luaprobe: Unknown symbol lua_gettop (err -2)
[43764.709565] luaprobe: Unknown symbol lua_rotate (err -2)
[43764.709577] luaprobe: Unknown symbol luaL_checklstring (err -2)
[43764.709590] luaprobe: Unknown symbol lua_setfield (err -2)
[43764.709602] luaprobe: Unknown symbol lua_rawgetp (err -2)
[43764.709614] luaprobe: Unknown symbol luaL_checkversion_ (err -2)
[43764.709630] luaprobe: Unknown symbol lua_pushvalue (err -2)
[43764.709643] luaprobe: Unknown symbol lua_pushnil (err -2)
[43764.709657] luaprobe: Unknown symbol lua_rawsetp (err -2)
[43764.709670] luaprobe: Unknown symbol luaL_error (err -2)
[43764.709685] luaprobe: Unknown symbol lua_settop (err -2)
[43764.709697] luaprobe: Unknown symbol lunatik_lookup (err -2)
[43764.709710] luaprobe: Unknown symbol lua_pushcclosure (err -2)
[43764.709728] luaprobe: Unknown symbol lua_tolstring (err -2)
[43764.709741] luaprobe: Unknown symbol lua_type (err -2)
[43764.709755] luaprobe: Unknown symbol luaL_newmetatable (err -2)
[43764.709771] luaprobe: Unknown symbol lua_pushstring (err -2)
[43764.709784] luaprobe: Unknown symbol luaL_argerror (err -2)
[43764.709802] luaprobe: Unknown symbol lua_setupvalue (err -2)
[43764.709815] luaprobe: Unknown symbol luaL_setfuncs (err -2)
[43764.709827] luaprobe: Unknown symbol lunatik_newobject (err -2)
[43764.709868] luaprobe: Unknown symbol luaL_checktype (err -2)
[43764.709882] luaprobe: Unknown symbol lua_toboolean (err -2)
[43764.709899] luaprobe: Unknown symbol lunatik_checkpobject (err -2)
[43764.709911] luaprobe: Unknown symbol lua_createtable (err -2)
[43764.709924] luaprobe: Unknown symbol lunatik_releaseobject (err -2)
[43764.773432] BPF: [105867] ENUM _info 
[43764.773438] BPF: size=4 vlen=46
[43764.773441] BPF:  
[43764.773443] BPF: Invalid name
[43764.773445] BPF: 
[43764.773451] failed to validate module [lunatik] BTF: -22
[43764.803069] luasyscall: Unknown symbol lua_pushlightuserdata (err -2)
[43764.803091] luasyscall: Unknown symbol lua_setfield (err -2)
[43764.803104] luasyscall: Unknown symbol luaL_checkversion_ (err -2)
[43764.803120] luasyscall: Unknown symbol lunatik_lookup (err -2)
[43764.803132] luasyscall: Unknown symbol luaL_checknumber (err -2)
[43764.803147] luasyscall: Unknown symbol luaL_argerror (err -2)
[43764.803160] luasyscall: Unknown symbol luaL_setfuncs (err -2)
[43764.803172] luasyscall: Unknown symbol lua_createtable (err -2)
[43764.803185] luasyscall: Unknown symbol lua_pushinteger (err -2)
[43764.861063] BPF: [105867] ENUM _info 
[43764.861073] BPF: size=4 vlen=46
[43764.861076] BPF:  
[43764.861077] BPF: Invalid name
[43764.861079] BPF: 
[43764.861086] failed to validate module [lunatik] BTF: -22
[43764.889293] luaxdp: Unknown symbol luarcu_gettable (err -2)
[43764.889315] luaxdp: Unknown symbol lua_pcallk (err -2)
[43764.889329] luaxdp: Unknown symbol lua_touserdata (err -2)
[43764.889341] luaxdp: Unknown symbol lua_pushlightuserdata (err -2)
[43764.889354] luaxdp: Unknown symbol luadata_new (err -2)
[43764.889366] luaxdp: Unknown symbol lua_gettop (err -2)
[43764.889378] luaxdp: Unknown symbol lua_tointegerx (err -2)
[43764.889391] luaxdp: Unknown symbol lua_setfield (err -2)
[43764.889403] luaxdp: Unknown symbol lua_rawgetp (err -2)
[43764.889416] luaxdp: Unknown symbol luaL_checkversion_ (err -2)
[43764.889432] luaxdp: Unknown symbol lua_pushvalue (err -2)
[43764.889445] luaxdp: Unknown symbol lunatik_cloneobject (err -2)
[43764.889457] luaxdp: Unknown symbol lunatik_runtimes (err -2)
[43764.889470] luaxdp: Unknown symbol lua_pushnil (err -2)
[43764.889482] luaxdp: Unknown symbol lua_rawsetp (err -2)
[43764.889494] luaxdp: Unknown symbol luaL_error (err -2)
[43764.889509] luaxdp: Unknown symbol lua_settop (err -2)
[43764.889522] luaxdp: Unknown symbol lua_pushcclosure (err -2)
[43764.889538] luaxdp: Unknown symbol lua_tolstring (err -2)
[43764.889550] luaxdp: Unknown symbol luaopen_data (err -2)
[43764.889564] luaxdp: Unknown symbol luaL_requiref (err -2)
[43764.889577] luaxdp: Unknown symbol luadata_reset (err -2)
[43764.889589] luaxdp: Unknown symbol lua_error (err -2)
[43764.889610] luaxdp: Unknown symbol luaL_setfuncs (err -2)
[43764.889622] luaxdp: Unknown symbol luaL_checktype (err -2)
[43764.889634] luaxdp: Unknown symbol lua_createtable (err -2)
[43764.889647] luaxdp: Unknown symbol lunatik_releaseobject (err -2)
[43764.889659] luaxdp: Unknown symbol lua_pushinteger (err -2)
[43764.952673] BPF: [105867] ENUM _info 
[43764.952682] BPF: size=4 vlen=46
[43764.952685] BPF:  
[43764.952687] BPF: Invalid name
[43764.952689] BPF: 
[43764.952696] failed to validate module [lunatik] BTF: -22
[43764.981337] luafifo: Unknown symbol lunatik_closeobject (err -2)
[43764.981359] luafifo: Unknown symbol lunatik_deleteobject (err -2)
[43764.981372] luafifo: Unknown symbol lua_touserdata (err -2)
[43764.981385] luafifo: Unknown symbol lua_getfield (err -2)
[43764.981401] luafifo: Unknown symbol luaL_checklstring (err -2)
[43764.981414] luafifo: Unknown symbol lua_setfield (err -2)
[43764.981426] luafifo: Unknown symbol luaL_checkversion_ (err -2)
[43764.981442] luafifo: Unknown symbol lua_pushvalue (err -2)
[43764.981455] luafifo: Unknown symbol luaL_error (err -2)
[43764.981467] luafifo: Unknown symbol lua_settop (err -2)
[43764.981483] luafifo: Unknown symbol luaL_checknumber (err -2)
[43764.981500] luafifo: Unknown symbol lunatik_monitorobject (err -2)
[43764.981513] luafifo: Unknown symbol luaL_newmetatable (err -2)
[43764.981525] luafifo: Unknown symbol luaL_pushresultsize (err -2)
[43764.981540] luafifo: Unknown symbol luaL_argerror (err -2)
[43764.981553] luafifo: Unknown symbol luaL_setfuncs (err -2)
[43764.981565] luafifo: Unknown symbol lunatik_newobject (err -2)
[43764.981577] luafifo: Unknown symbol luaL_buffinitsize (err -2)
[43764.981592] luafifo: Unknown symbol lua_createtable (err -2)
[43764.981605] luafifo: Unknown symbol lua_pushinteger (err -2)
[43765.043167] BPF: [105867] ENUM _info 
[43765.043176] BPF: size=4 vlen=46
[43765.043179] BPF:  
[43765.043181] BPF: Invalid name
[43765.043183] BPF: 
[43765.043190] failed to validate module [lunatik] BTF: -22
[43765.071431] luaxtable: Unknown symbol luarcu_gettable (err -2)
[43765.071453] luaxtable: Unknown symbol lunatik_deleteobject (err -2)
[43765.071467] luaxtable: Unknown symbol lua_pcallk (err -2)
[43765.071480] luaxtable: Unknown symbol lua_touserdata (err -2)
[43765.071496] luaxtable: Unknown symbol lua_getfield (err -2)
[43765.071509] luaxtable: Unknown symbol luadata_new (err -2)
[43765.071521] luaxtable: Unknown symbol luarcu_settable (err -2)
[43765.071534] luaxtable: Unknown symbol lua_gettop (err -2)
[43765.071546] luaxtable: Unknown symbol lua_tointegerx (err -2)
[43765.071559] luaxtable: Unknown symbol lua_rotate (err -2)
[43765.071571] luaxtable: Unknown symbol lua_setfield (err -2)
[43765.071584] luaxtable: Unknown symbol lua_rawgetp (err -2)
[43765.071597] luaxtable: Unknown symbol luaL_checkversion_ (err -2)
[43765.071609] luaxtable: Unknown symbol lua_pushlstring (err -2)
[43765.071625] luaxtable: Unknown symbol lua_pushvalue (err -2)
[43765.071638] luaxtable: Unknown symbol lunatik_cloneobject (err -2)
[43765.071650] luaxtable: Unknown symbol lua_rawsetp (err -2)
[43765.071663] luaxtable: Unknown symbol luaL_error (err -2)
[43765.071678] luaxtable: Unknown symbol lua_settop (err -2)
[43765.071697] luaxtable: Unknown symbol lua_tolstring (err -2)
[43765.071710] luaxtable: Unknown symbol lua_pushboolean (err -2)
[43765.071724] luaxtable: Unknown symbol luaopen_data (err -2)
[43765.071737] luaxtable: Unknown symbol luaL_newmetatable (err -2)
[43765.071753] luaxtable: Unknown symbol luaL_requiref (err -2)
[43765.071766] luaxtable: Unknown symbol luadata_reset (err -2)
[43765.071784] luaxtable: Unknown symbol luarcu_newtable (err -2)
[43765.071797] luaxtable: Unknown symbol luaL_setfuncs (err -2)
[43765.071810] luaxtable: Unknown symbol lunatik_newobject (err -2)
[43765.071822] luaxtable: Unknown symbol luaL_checktype (err -2)
[43765.071855] luaxtable: Unknown symbol lua_toboolean (err -2)
[43765.071870] luaxtable: Unknown symbol lua_typename (err -2)
[43765.071882] luaxtable: Unknown symbol lua_createtable (err -2)
[43765.071895] luaxtable: Unknown symbol lunatik_releaseobject (err -2)
[43765.071909] luaxtable: Unknown symbol lua_pushinteger (err -2)
[43765.132042] BPF: [105867] ENUM _info 
[43765.132051] BPF: size=4 vlen=46
[43765.132054] BPF:  
[43765.132056] BPF: Invalid name
[43765.132057] BPF: 
[43765.132064] failed to validate module [lunatik] BTF: -22
[43765.160748] luanetfilter: Unknown symbol lunatik_deleteobject (err -2)
[43765.160770] luanetfilter: Unknown symbol lua_pcallk (err -2)
[43765.160783] luanetfilter: Unknown symbol lua_touserdata (err -2)
[43765.160796] luanetfilter: Unknown symbol lua_getfield (err -2)
[43765.160808] luanetfilter: Unknown symbol luadata_new (err -2)
[43765.160821] luanetfilter: Unknown symbol lua_gettop (err -2)
[43765.160865] luanetfilter: Unknown symbol lua_tointegerx (err -2)
[43765.160880] luanetfilter: Unknown symbol lua_setfield (err -2)
[43765.160893] luanetfilter: Unknown symbol lua_rawgetp (err -2)
[43765.160905] luanetfilter: Unknown symbol luaL_checkversion_ (err -2)
[43765.160922] luanetfilter: Unknown symbol lua_pushvalue (err -2)
[43765.160935] luanetfilter: Unknown symbol lunatik_cloneobject (err -2)
[43765.160947] luanetfilter: Unknown symbol lua_rawsetp (err -2)
[43765.160960] luanetfilter: Unknown symbol luaL_error (err -2)
[43765.160975] luanetfilter: Unknown symbol lua_settop (err -2)
[43765.160991] luanetfilter: Unknown symbol lua_tolstring (err -2)
[43765.161010] luanetfilter: Unknown symbol luaopen_data (err -2)
[43765.161023] luanetfilter: Unknown symbol luaL_newmetatable (err -2)
[43765.161038] luanetfilter: Unknown symbol luaL_requiref (err -2)
[43765.161051] luanetfilter: Unknown symbol luadata_reset (err -2)
[43765.161070] luanetfilter: Unknown symbol luaL_setfuncs (err -2)
[43765.161082] luanetfilter: Unknown symbol lunatik_newobject (err -2)
[43765.161095] luanetfilter: Unknown symbol luaL_checktype (err -2)
[43765.161107] luanetfilter: Unknown symbol lua_typename (err -2)
[43765.161120] luanetfilter: Unknown symbol lua_createtable (err -2)
[43765.161133] luanetfilter: Unknown symbol lunatik_releaseobject (err -2)
[43765.161145] luanetfilter: Unknown symbol lua_pushinteger (err -2)
[43765.219810] BPF: [105867] ENUM _info 
[43765.219819] BPF: size=4 vlen=46
[43765.219822] BPF:  
[43765.219824] BPF: Invalid name
[43765.219826] BPF: 
[43765.219845] failed to validate module [lunatik] BTF: -22
[43765.247933] luacompletion: Unknown symbol lunatik_deleteobject (err -2)
[43765.247960] luacompletion: Unknown symbol lua_getfield (err -2)
[43765.247975] luacompletion: Unknown symbol lua_setfield (err -2)
[43765.247988] luacompletion: Unknown symbol luaL_checkversion_ (err -2)
[43765.248003] luacompletion: Unknown symbol lua_pushvalue (err -2)
[43765.248016] luacompletion: Unknown symbol lua_pushnil (err -2)
[43765.248031] luacompletion: Unknown symbol luaL_error (err -2)
[43765.248044] luacompletion: Unknown symbol lua_settop (err -2)
[43765.248056] luacompletion: Unknown symbol lua_pushboolean (err -2)
[43765.248069] luacompletion: Unknown symbol luaL_newmetatable (err -2)
[43765.248084] luacompletion: Unknown symbol lua_pushstring (err -2)
[43765.248097] luacompletion: Unknown symbol luaL_setfuncs (err -2)
[43765.248109] luacompletion: Unknown symbol lunatik_newobject (err -2)
[43765.248122] luacompletion: Unknown symbol luaL_optnumber (err -2)
[43765.248134] luacompletion: Unknown symbol lunatik_checkpobject (err -2)
[43765.248147] luacompletion: Unknown symbol lua_createtable (err -2)
[43765.311869] BPF: [105867] ENUM _info 
[43765.311878] BPF: size=4 vlen=46
[43765.311881] BPF:  
[43765.311883] BPF: Invalid name
[43765.311885] BPF: 
[43765.311890] failed to validate module [lunatik] BTF: -22
[43765.340485] lunatik_run: Unknown symbol lunatik_runtimes (err -2)
[43765.340508] lunatik_run: Unknown symbol lunatik_runtime (err -2)
[43765.340524] lunatik_run: Unknown symbol lunatik_stop (err -2)
[43765.340537] lunatik_run: Unknown symbol luarcu_newtable (err -2)
[43765.340549] lunatik_run: Unknown symbol lunatik_releaseobject (err -2)
vincentmli commented 3 days ago

It looks like it's not finding some symbol in your kernel.. can you show dmesg? Are you sure you are building the modules against the same kernel version you are running?

here is dmesg, yes, the chroot built kernel is same as the running kernel, the build will package everything together as flash image and ISO, I install the ISO on physical machine to test, the ISO can also be installed as virtual guest in virtual environment. the error failed to validate module [lunatik] BTF: -22 seems to indicate BTF info missing for lunatik modules, right?

built kernel source kernel/bpf/btf.c has:

        case MODULE_STATE_COMING:
                btf_mod = kzalloc(sizeof(*btf_mod), GFP_KERNEL);
                if (!btf_mod) {
                        err = -ENOMEM;
                        goto out;
                }
                btf = btf_parse_module(mod->name, mod->btf_data, mod->btf_data_size);
                if (IS_ERR(btf)) {
                        kfree(btf_mod);
                        if (!IS_ENABLED(CONFIG_MODULE_ALLOW_BTF_MISMATCH)) {
                                pr_warn("failed to validate module [%s] BTF: %ld\n",
                                        mod->name, PTR_ERR(btf));
                                err = PTR_ERR(btf);
                        } else {
                                pr_warn_once("Kernel module BTF mismatch detected, BTF debug info may be unavailable for some modules\n");
                        }
                        goto out;
                }

and the running kernel has

[root@bpfire-2 ~]# grep 'MISMATCH' /boot/config-6.6.15-ipfire 
# CONFIG_MODULE_ALLOW_BTF_MISMATCH is not set
# CONFIG_DEBUG_SECTION_MISMATCH is not set
CONFIG_SECTION_MISMATCH_WARN_ONLY=y

I will try CONFIG_MODULE_ALLOW_BTF_MISMATCH=y first :)

lneto commented 3 days ago

Ack; but it seems to me that these are two no related issues.. one is BTF and another is EXPORT_SYMBOL; I would try to fix the latter first.. I would also try to firstly run lunatik without eBPF.. then, I would go to fix BTF.. btw, on Ubuntu I fix it with make btf_install before building lunatik

vincentmli commented 3 days ago

ok got it, how to run lunatik without eBPF?

lneto commented 3 days ago

You can run any example. Especially, you can just run the lunatik prompt (sudo lunatik) and type Lua code directly (e.g., > return 42)

lneto commented 3 days ago

can you also check your lunatik_sym.h? it should look like this..

EXPORT_SYMBOL(lua_newstate);
EXPORT_SYMBOL(lua_close);
EXPORT_SYMBOL(lua_newthread);
EXPORT_SYMBOL(lua_closethread);
EXPORT_SYMBOL(lua_resetthread);
EXPORT_SYMBOL(lua_atpanic);
EXPORT_SYMBOL(lua_version);
EXPORT_SYMBOL(lua_absindex);
EXPORT_SYMBOL(lua_gettop);
EXPORT_SYMBOL(lua_settop);
EXPORT_SYMBOL(lua_pushvalue);
EXPORT_SYMBOL(lua_rotate);
EXPORT_SYMBOL(lua_copy);
EXPORT_SYMBOL(lua_checkstack);
EXPORT_SYMBOL(lua_xmove);
EXPORT_SYMBOL(lua_isnumber);
EXPORT_SYMBOL(lua_isstring);
EXPORT_SYMBOL(lua_iscfunction);
EXPORT_SYMBOL(lua_isinteger);
EXPORT_SYMBOL(lua_isuserdata);
EXPORT_SYMBOL(lua_type);
EXPORT_SYMBOL(lua_typename);
EXPORT_SYMBOL(lua_tointegerx);
EXPORT_SYMBOL(lua_toboolean);
EXPORT_SYMBOL(lua_tolstring);
EXPORT_SYMBOL(lua_rawlen);
EXPORT_SYMBOL(lua_tocfunction);
EXPORT_SYMBOL(lua_touserdata);
EXPORT_SYMBOL(lua_tothread);
EXPORT_SYMBOL(lua_topointer);
EXPORT_SYMBOL(lua_arith);
EXPORT_SYMBOL(lua_rawequal);
EXPORT_SYMBOL(lua_compare);
EXPORT_SYMBOL(lua_pushnil);
EXPORT_SYMBOL(lua_pushinteger);
EXPORT_SYMBOL(lua_pushlstring);
EXPORT_SYMBOL(lua_pushstring);
EXPORT_SYMBOL(lua_pushvfstring);
EXPORT_SYMBOL(lua_pushfstring);
EXPORT_SYMBOL(lua_pushcclosure);
EXPORT_SYMBOL(lua_pushboolean);
EXPORT_SYMBOL(lua_pushlightuserdata);
EXPORT_SYMBOL(lua_pushthread);
EXPORT_SYMBOL(lua_getglobal);
EXPORT_SYMBOL(lua_gettable);
EXPORT_SYMBOL(lua_getfield);
EXPORT_SYMBOL(lua_geti);
EXPORT_SYMBOL(lua_rawget);
EXPORT_SYMBOL(lua_rawgeti);
EXPORT_SYMBOL(lua_rawgetp);
EXPORT_SYMBOL(lua_createtable);
EXPORT_SYMBOL(lua_newuserdatauv);
EXPORT_SYMBOL(lua_getmetatable);
EXPORT_SYMBOL(lua_getiuservalue);
EXPORT_SYMBOL(lua_setglobal);
EXPORT_SYMBOL(lua_settable);
EXPORT_SYMBOL(lua_setfield);
EXPORT_SYMBOL(lua_seti);
EXPORT_SYMBOL(lua_rawset);
EXPORT_SYMBOL(lua_rawseti);
EXPORT_SYMBOL(lua_rawsetp);
EXPORT_SYMBOL(lua_setmetatable);
EXPORT_SYMBOL(lua_setiuservalue);
EXPORT_SYMBOL(lua_callk);
EXPORT_SYMBOL(lua_pcallk);
EXPORT_SYMBOL(lua_load);
EXPORT_SYMBOL(lua_dump);
EXPORT_SYMBOL(lua_yieldk);
EXPORT_SYMBOL(lua_resume);
EXPORT_SYMBOL(lua_status);
EXPORT_SYMBOL(lua_isyieldable);
EXPORT_SYMBOL(lua_setwarnf);
EXPORT_SYMBOL(lua_warning);
EXPORT_SYMBOL(lua_gc);
EXPORT_SYMBOL(lua_error);
EXPORT_SYMBOL(lua_next);
EXPORT_SYMBOL(lua_concat);
EXPORT_SYMBOL(lua_len);
EXPORT_SYMBOL(lua_stringtonumber);
EXPORT_SYMBOL(lua_getallocf);
EXPORT_SYMBOL(lua_setallocf);
EXPORT_SYMBOL(lua_toclose);
EXPORT_SYMBOL(lua_closeslot);
EXPORT_SYMBOL(lua_getstack);
EXPORT_SYMBOL(lua_getinfo);
EXPORT_SYMBOL(lua_getlocal);
EXPORT_SYMBOL(lua_setlocal);
EXPORT_SYMBOL(lua_getupvalue);
EXPORT_SYMBOL(lua_setupvalue);
EXPORT_SYMBOL(lua_upvalueid);
EXPORT_SYMBOL(lua_upvaluejoin);
EXPORT_SYMBOL(lua_sethook);
EXPORT_SYMBOL(lua_gethook);
EXPORT_SYMBOL(lua_gethookmask);
EXPORT_SYMBOL(lua_gethookcount);
EXPORT_SYMBOL(lua_setcstacklimit);
EXPORT_SYMBOL(luaL_checkversion_);
EXPORT_SYMBOL(luaL_getmetafield);
EXPORT_SYMBOL(luaL_callmeta);
EXPORT_SYMBOL(luaL_tolstring);
EXPORT_SYMBOL(luaL_argerror);
EXPORT_SYMBOL(luaL_typeerror);
EXPORT_SYMBOL(luaL_checklstring);
EXPORT_SYMBOL(luaL_optlstring);
EXPORT_SYMBOL(luaL_checknumber);
EXPORT_SYMBOL(luaL_optnumber);
EXPORT_SYMBOL(luaL_checkstack);
EXPORT_SYMBOL(luaL_checktype);
EXPORT_SYMBOL(luaL_checkany);
EXPORT_SYMBOL(luaL_newmetatable);
EXPORT_SYMBOL(luaL_setmetatable);
EXPORT_SYMBOL(luaL_testudata);
EXPORT_SYMBOL(luaL_checkudata);
EXPORT_SYMBOL(luaL_where);
EXPORT_SYMBOL(luaL_error);
EXPORT_SYMBOL(luaL_checkoption);
EXPORT_SYMBOL(luaL_ref);
EXPORT_SYMBOL(luaL_unref);
EXPORT_SYMBOL(luaL_loadbufferx);
EXPORT_SYMBOL(luaL_loadstring);
EXPORT_SYMBOL(luaL_newstate);
EXPORT_SYMBOL(luaL_len);
EXPORT_SYMBOL(luaL_addgsub);
EXPORT_SYMBOL(luaL_gsub);
EXPORT_SYMBOL(luaL_setfuncs);
EXPORT_SYMBOL(luaL_getsubtable);
EXPORT_SYMBOL(luaL_traceback);
EXPORT_SYMBOL(luaL_requiref);
EXPORT_SYMBOL(luaL_buffinit);
EXPORT_SYMBOL(luaL_prepbuffsize);
EXPORT_SYMBOL(luaL_addlstring);
EXPORT_SYMBOL(luaL_addstring);
EXPORT_SYMBOL(luaL_addvalue);
EXPORT_SYMBOL(luaL_pushresult);
EXPORT_SYMBOL(luaL_pushresultsize);
EXPORT_SYMBOL(luaL_buffinitsize);
EXPORT_SYMBOL(luaopen_base);
EXPORT_SYMBOL(luaopen_coroutine);
EXPORT_SYMBOL(luaopen_table);
EXPORT_SYMBOL(luaopen_string);
EXPORT_SYMBOL(luaopen_utf8);
EXPORT_SYMBOL(luaopen_math);
EXPORT_SYMBOL(luaopen_debug);
EXPORT_SYMBOL(luaopen_package);
EXPORT_SYMBOL(luaL_openlibs);

Did you check this?

vincentmli commented 3 days ago

can you also check your lunatik_sym.h? it should look like this..

where is lunatik_sym.h located? in the build system or in the running system?

lneto commented 3 days ago

In the building system.. at the lunatik root source directory..

vincentmli commented 3 days ago

ah, the lunatik root source is deleted automatically after built in chroot build, need to check how not to delete it

vincentmli commented 3 days ago
$(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
        @$(PREBUILD)
        @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar zxf $(DIR_DL)/$(DL_FILE)

        cd $(DIR_APP) && make btf_install
        cd $(DIR_APP) && make
        cd $(DIR_APP) && make install
        cd $(DIR_APP) && make examples_install
        cd $(DIR_APP)/examples/filter && make

        @rm -rf $(DIR_APP)
        @$(POSTBUILD)

remove the @rm -rf $(DIR_APP) should do it

lneto commented 3 days ago

sorry missed / above in +all: $(LUA_API)lunatik_sym.h, corrected the mistake, now making some progress

root@r210:/home/vincent/go/src/github.com/vincentmli/BPFire/cache/lunatik-5.3.2# git diff
diff --git a/Makefile b/Makefile
index ec172541..33580878 100644
--- a/Makefile
+++ b/Makefile
@@ -4,13 +4,13 @@
 MODULES_INSTALL_PATH = /lib/modules/${shell uname -r}
 SCRIPTS_INSTALL_PATH = /lib/modules/lua
 LUNATIK_INSTALL_PATH = /usr/local/sbin
-LUA_API = lua/lua.h lua/lauxlib.h lua/lualib.h
+LUA_API = $(PWD)/lua/lua.h $(PWD)/lua/lauxlib.h $(PWD)/lua/lualib.h
 KDIR ?= ${MODULES_INSTALL_PATH}/build
 RM = rm -f
 MKDIR = mkdir -p -m 0755
 INSTALL = install -o root -g root

-all: lunatik_sym.h
+all: $(LUA_API)/lunatik_sym.h
        ${MAKE} -C ${KDIR} M=${PWD} CONFIG_LUNATIK=m    \
        CONFIG_LUNATIK_RUN=m CONFIG_LUNATIK_RUNTIME=y CONFIG_LUNATIK_DEVICE=m   \
        CONFIG_LUNATIK_LINUX=m CONFIG_LUNATIK_NOTIFIER=m CONFIG_LUNATIK_SOCKET=m \
@@ -70,6 +70,6 @@ install: scripts_install modules_install
 uninstall: scripts_uninstall modules_uninstall
        depmod -a

-lunatik_sym.h: $(LUA_API)
+$(LUA_API)/lunatik_sym.h: $(LUA_API)
        ${shell ./gensymbols.sh $(LUA_API) > lunatik_sym.h}

I was actually suggesting:

 -lunatik_sym.h: $(LUA_API)
 +lunatik_sym.h:
         ${shell ./gensymbols.sh $(LUA_API) > lunatik_sym.h}

or just running by hand ./gensymbols.sh lua/lua.h lua/lauxlib.h lua/lualib.h before building it.. we use this rule only to update symbols automatically anytime we update Lua version.. it won't be your case..

I would try this at least.. it looks to me that the symbols are not being exported..

lneto commented 3 days ago

can you also check your lunatik_sym.h? it should look like this..

EXPORT_SYMBOL(lua_newstate);
EXPORT_SYMBOL(lua_close);
EXPORT_SYMBOL(lua_newthread);
EXPORT_SYMBOL(lua_closethread);
EXPORT_SYMBOL(lua_resetthread);
EXPORT_SYMBOL(lua_atpanic);
EXPORT_SYMBOL(lua_version);
EXPORT_SYMBOL(lua_absindex);
EXPORT_SYMBOL(lua_gettop);
EXPORT_SYMBOL(lua_settop);
EXPORT_SYMBOL(lua_pushvalue);
EXPORT_SYMBOL(lua_rotate);
EXPORT_SYMBOL(lua_copy);
EXPORT_SYMBOL(lua_checkstack);
EXPORT_SYMBOL(lua_xmove);
EXPORT_SYMBOL(lua_isnumber);
EXPORT_SYMBOL(lua_isstring);
EXPORT_SYMBOL(lua_iscfunction);
EXPORT_SYMBOL(lua_isinteger);
EXPORT_SYMBOL(lua_isuserdata);
EXPORT_SYMBOL(lua_type);
EXPORT_SYMBOL(lua_typename);
EXPORT_SYMBOL(lua_tointegerx);
EXPORT_SYMBOL(lua_toboolean);
EXPORT_SYMBOL(lua_tolstring);
EXPORT_SYMBOL(lua_rawlen);
EXPORT_SYMBOL(lua_tocfunction);
EXPORT_SYMBOL(lua_touserdata);
EXPORT_SYMBOL(lua_tothread);
EXPORT_SYMBOL(lua_topointer);
EXPORT_SYMBOL(lua_arith);
EXPORT_SYMBOL(lua_rawequal);
EXPORT_SYMBOL(lua_compare);
EXPORT_SYMBOL(lua_pushnil);
EXPORT_SYMBOL(lua_pushinteger);
EXPORT_SYMBOL(lua_pushlstring);
EXPORT_SYMBOL(lua_pushstring);
EXPORT_SYMBOL(lua_pushvfstring);
EXPORT_SYMBOL(lua_pushfstring);
EXPORT_SYMBOL(lua_pushcclosure);
EXPORT_SYMBOL(lua_pushboolean);
EXPORT_SYMBOL(lua_pushlightuserdata);
EXPORT_SYMBOL(lua_pushthread);
EXPORT_SYMBOL(lua_getglobal);
EXPORT_SYMBOL(lua_gettable);
EXPORT_SYMBOL(lua_getfield);
EXPORT_SYMBOL(lua_geti);
EXPORT_SYMBOL(lua_rawget);
EXPORT_SYMBOL(lua_rawgeti);
EXPORT_SYMBOL(lua_rawgetp);
EXPORT_SYMBOL(lua_createtable);
EXPORT_SYMBOL(lua_newuserdatauv);
EXPORT_SYMBOL(lua_getmetatable);
EXPORT_SYMBOL(lua_getiuservalue);
EXPORT_SYMBOL(lua_setglobal);
EXPORT_SYMBOL(lua_settable);
EXPORT_SYMBOL(lua_setfield);
EXPORT_SYMBOL(lua_seti);
EXPORT_SYMBOL(lua_rawset);
EXPORT_SYMBOL(lua_rawseti);
EXPORT_SYMBOL(lua_rawsetp);
EXPORT_SYMBOL(lua_setmetatable);
EXPORT_SYMBOL(lua_setiuservalue);
EXPORT_SYMBOL(lua_callk);
EXPORT_SYMBOL(lua_pcallk);
EXPORT_SYMBOL(lua_load);
EXPORT_SYMBOL(lua_dump);
EXPORT_SYMBOL(lua_yieldk);
EXPORT_SYMBOL(lua_resume);
EXPORT_SYMBOL(lua_status);
EXPORT_SYMBOL(lua_isyieldable);
EXPORT_SYMBOL(lua_setwarnf);
EXPORT_SYMBOL(lua_warning);
EXPORT_SYMBOL(lua_gc);
EXPORT_SYMBOL(lua_error);
EXPORT_SYMBOL(lua_next);
EXPORT_SYMBOL(lua_concat);
EXPORT_SYMBOL(lua_len);
EXPORT_SYMBOL(lua_stringtonumber);
EXPORT_SYMBOL(lua_getallocf);
EXPORT_SYMBOL(lua_setallocf);
EXPORT_SYMBOL(lua_toclose);
EXPORT_SYMBOL(lua_closeslot);
EXPORT_SYMBOL(lua_getstack);
EXPORT_SYMBOL(lua_getinfo);
EXPORT_SYMBOL(lua_getlocal);
EXPORT_SYMBOL(lua_setlocal);
EXPORT_SYMBOL(lua_getupvalue);
EXPORT_SYMBOL(lua_setupvalue);
EXPORT_SYMBOL(lua_upvalueid);
EXPORT_SYMBOL(lua_upvaluejoin);
EXPORT_SYMBOL(lua_sethook);
EXPORT_SYMBOL(lua_gethook);
EXPORT_SYMBOL(lua_gethookmask);
EXPORT_SYMBOL(lua_gethookcount);
EXPORT_SYMBOL(lua_setcstacklimit);
EXPORT_SYMBOL(luaL_checkversion_);
EXPORT_SYMBOL(luaL_getmetafield);
EXPORT_SYMBOL(luaL_callmeta);
EXPORT_SYMBOL(luaL_tolstring);
EXPORT_SYMBOL(luaL_argerror);
EXPORT_SYMBOL(luaL_typeerror);
EXPORT_SYMBOL(luaL_checklstring);
EXPORT_SYMBOL(luaL_optlstring);
EXPORT_SYMBOL(luaL_checknumber);
EXPORT_SYMBOL(luaL_optnumber);
EXPORT_SYMBOL(luaL_checkstack);
EXPORT_SYMBOL(luaL_checktype);
EXPORT_SYMBOL(luaL_checkany);
EXPORT_SYMBOL(luaL_newmetatable);
EXPORT_SYMBOL(luaL_setmetatable);
EXPORT_SYMBOL(luaL_testudata);
EXPORT_SYMBOL(luaL_checkudata);
EXPORT_SYMBOL(luaL_where);
EXPORT_SYMBOL(luaL_error);
EXPORT_SYMBOL(luaL_checkoption);
EXPORT_SYMBOL(luaL_ref);
EXPORT_SYMBOL(luaL_unref);
EXPORT_SYMBOL(luaL_loadbufferx);
EXPORT_SYMBOL(luaL_loadstring);
EXPORT_SYMBOL(luaL_newstate);
EXPORT_SYMBOL(luaL_len);
EXPORT_SYMBOL(luaL_addgsub);
EXPORT_SYMBOL(luaL_gsub);
EXPORT_SYMBOL(luaL_setfuncs);
EXPORT_SYMBOL(luaL_getsubtable);
EXPORT_SYMBOL(luaL_traceback);
EXPORT_SYMBOL(luaL_requiref);
EXPORT_SYMBOL(luaL_buffinit);
EXPORT_SYMBOL(luaL_prepbuffsize);
EXPORT_SYMBOL(luaL_addlstring);
EXPORT_SYMBOL(luaL_addstring);
EXPORT_SYMBOL(luaL_addvalue);
EXPORT_SYMBOL(luaL_pushresult);
EXPORT_SYMBOL(luaL_pushresultsize);
EXPORT_SYMBOL(luaL_buffinitsize);
EXPORT_SYMBOL(luaopen_base);
EXPORT_SYMBOL(luaopen_coroutine);
EXPORT_SYMBOL(luaopen_table);
EXPORT_SYMBOL(luaopen_string);
EXPORT_SYMBOL(luaopen_utf8);
EXPORT_SYMBOL(luaopen_math);
EXPORT_SYMBOL(luaopen_debug);
EXPORT_SYMBOL(luaopen_package);
EXPORT_SYMBOL(luaL_openlibs);

Dropping this content in lunatik_sym.h and remove the rule from the makefile should get the work done as well

vincentmli commented 3 days ago

or just running by hand ./gensymbols.sh lua/lua.h lua/lauxlib.h lua/lualib.h before building it.. we use this rule only to update symbols automatically anytime we update Lua version.. it won't be your case..

I would try this at least.. it looks to me that the symbols are not being exported..

ok, good, let me explain the build steps for lunatik in chroot, so you can point out which steps to manually run ./gensymbols.sh lua/lua.h lua/lauxlib.h lua/lualib.h before building lunatik

1, I have the lunatik source in BPFire source tree cache/lunatik-5.3.2 2, make Makefile changes in cache/lunatik-5.3.2 3, create cache/lunatik-5.3.2.tar.gz tar ball and b2sum cache/lunatik-5.3.2.tar.gz to get checksum and update checksum in lfs/lunatik 4, start the chroot build process ./make.sh build which would look into lfs/lunatik, the cache/lunatik-5.3.2.tar.gz will be extracted to build/usr/src/lunatik-5.3.2 which is the chroot build directory, and start to build lunatik under build/usr/src/lunatik-5.3.2, after lunatik is built, build/usr/src/lunatik-5.3.2 will be removed as @rm -rf $(DIR_APP) in lfs/lunatik below

include Config

VER        = 5.3.2

THISAPP    = lunatik-$(VER)
DL_FILE    = $(THISAPP).tar.gz
DL_FROM    = $(URL_IPFIRE)
DIR_APP    = $(DIR_SRC)/$(THISAPP)
TARGET     = $(DIR_INFO)/$(THISAPP)

###############################################################################
# Top-level Rules
###############################################################################

objects = $(DL_FILE)

$(DL_FILE) = $(DL_FROM)/$(DL_FILE)

$(DL_FILE)_BLAKE2 = 351c7b889e27a9fe05a0f425114ff3089e6cd50a838fcf520ce19b6c4512c42902d0923089c0135ff5d60b7aa418c4bbbafd9707fc4a19a2abfe7c65cfd3d59b

install : $(TARGET)

check : $(patsubst %,$(DIR_CHK)/%,$(objects))

download :$(patsubst %,$(DIR_DL)/%,$(objects))

b2 : $(subst %,%_BLAKE2,$(objects))

###############################################################################
# Downloading, checking, b2sum
###############################################################################

$(patsubst %,$(DIR_CHK)/%,$(objects)) :
        @$(CHECK)

$(patsubst %,$(DIR_DL)/%,$(objects)) :
        @$(LOAD)

$(subst %,%_BLAKE2,$(objects)) :
        @$(B2SUM)

###############################################################################
# Installation Details
###############################################################################

$(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
        @$(PREBUILD)
        @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar zxf $(DIR_DL)/$(DL_FILE)

        cd $(DIR_APP) && make btf_install
        cd $(DIR_APP) && make
        cd $(DIR_APP) && make install
        cd $(DIR_APP) && make examples_install
        cd $(DIR_APP)/examples/filter && make

        @rm -rf $(DIR_APP)
        @$(POSTBUILD)
lneto commented 3 days ago

I think you can just add lunatik_sym.h to the tarball..

lneto commented 3 days ago

That is, you do not need to run gensymbols.sh inside the chroot.. you can just create lunatik_sym.h outside it, either running the script or copying the content I pasted here...then, add it to the tarball (of course, removing the rule from the makefile as well.. otherwise, it will be overwritten)

vincentmli commented 3 days ago

That is, you do not need to run gensymbols.sh inside the chroot.. you can just create lunatik_sym.h outside it, either running the script or copying the content I pasted here...then, add it to the tarball (of course, removing the rule from the makefile as well.. otherwise, it will be overwritten)

ok, so run ./gensymbols.sh lua/lua.h lua/lauxlib.h lua/lualib.h > lunatik_sym.h under cache/lunatik-5.3.2

then remove below in Makefile, and prepare the lunatik-5.3.2 tar ball

lunatik_sym.h:
        ${shell ./gensymbols.sh $(LUA_API) > lunatik_sym.h}
vincentmli commented 3 days ago

this is the Makefile change, does it look good, what about +all: $(LUA_API)/lunatik_sym.h ?

root@r210:/home/vincent/go/src/github.com/vincentmli/BPFire/cache/lunatik-5.3.2# git diff
diff --git a/Makefile b/Makefile
index ec172541..a8e62f82 100644
--- a/Makefile
+++ b/Makefile
@@ -3,14 +3,15 @@

 MODULES_INSTALL_PATH = /lib/modules/${shell uname -r}
 SCRIPTS_INSTALL_PATH = /lib/modules/lua
-LUNATIK_INSTALL_PATH = /usr/local/sbin
-LUA_API = lua/lua.h lua/lauxlib.h lua/lualib.h
+LUNATIK_INSTALL_PATH = /usr/sbin
+LUA = ${PWD}/lua
+LUA_API = ${LUA}/lua.h ${LUA}/lauxlib.h ${LUA}/lualib.h
 KDIR ?= ${MODULES_INSTALL_PATH}/build
 RM = rm -f
 MKDIR = mkdir -p -m 0755
 INSTALL = install -o root -g root

-all: lunatik_sym.h
+all: $(LUA_API)/lunatik_sym.h
        ${MAKE} -C ${KDIR} M=${PWD} CONFIG_LUNATIK=m    \
        CONFIG_LUNATIK_RUN=m CONFIG_LUNATIK_RUNTIME=y CONFIG_LUNATIK_DEVICE=m   \
        CONFIG_LUNATIK_LINUX=m CONFIG_LUNATIK_NOTIFIER=m CONFIG_LUNATIK_SOCKET=m \
@@ -69,7 +70,3 @@ install: scripts_install modules_install

 uninstall: scripts_uninstall modules_uninstall
        depmod -a
-
-lunatik_sym.h: $(LUA_API)
-       ${shell ./gensymbols.sh $(LUA_API) > lunatik_sym.h}
lneto commented 3 days ago

If you're gonna add lunatik_sym.h manually, I would remove all references to it and LUA_API in the makefile.. the header is already included in lunatik_core.c, if it's present in the tarball.. it should export the symbols just fine..

lneto commented 3 days ago

That is, you do not need to run gensymbols.sh inside the chroot.. you can just create lunatik_sym.h outside it, either running the script or copying the content I pasted here...then, add it to the tarball (of course, removing the rule from the makefile as well.. otherwise, it will be overwritten)

ok, so run ./gensymbols.sh lua/lua.h lua/lauxlib.h lua/lualib.h > lunatik_sym.h under cache/lunatik-5.3.2

then remove below in Makefile, and prepare the lunatik-5.3.2 tar ball

lunatik_sym.h:
        ${shell ./gensymbols.sh $(LUA_API) > lunatik_sym.h}

Also, check the generated content.. make sure the EXPORT_SYMBOL(...) entries are there

vincentmli commented 3 days ago

@lneto great news, the BTF and symbol issues are resolved

[root@bpfire-2 lua]# lsmod | grep luna
lunatik_run            12288  0
luarcu                 12288  4 luaxtable,luaxdp,lunatik_run
lunatik               376832  16 luaprobe,luaxtable,luafib,luaxdp,luasyscall,luarcu,luathread,lualinux,luasocket,lunatik_run,luadata,luacompletion,luafifo,luadevice,luanetfilter,luanotifier

just minor things like https.o is missing in the running system, need to find out why :).

lneto commented 3 days ago

@lneto great news, the BTF and symbol issues are resolved

[root@bpfire-2 lua]# lsmod | grep luna
lunatik_run            12288  0
luarcu                 12288  4 luaxtable,luaxdp,lunatik_run
lunatik               376832  16 luaprobe,luaxtable,luafib,luaxdp,luasyscall,luarcu,luathread,lualinux,luasocket,lunatik_run,luadata,luacompletion,luafifo,luadevice,luanetfilter,luanotifier

awesome! how did you fix BTF? with that kernel config?

just minor things like https.o is missing in the running system, need to find out why :).

ah.. examples are not build automatically.. you need to cd examples/filter && make && make install

vincentmli commented 3 days ago

Yes, I enabled BTF module mismatch in kernel, and I missed make install for filter

vincentmli commented 3 days ago

it looks examples_install is missing installing *.o and the Makefile in examples/filter is missing install target.

@@ -46,6 +45,7 @@ examples_install:
        ${INSTALL} -m 0644 examples/echod/*.lua ${SCRIPTS_INSTALL_PATH}/examples/echod
        ${MKDIR} ${SCRIPTS_INSTALL_PATH}/examples/filter
        ${INSTALL} -m 0644 examples/filter/*.lua ${SCRIPTS_INSTALL_PATH}/examples/filter
+       ${INSTALL} -m 0644 examples/filter/*.o ${SCRIPTS_INSTALL_PATH}/examples/filter
lneto commented 3 days ago

it looks examples_install is missing installing *.o and the Makefile in examples/filter is missing install target.

@@ -46,6 +45,7 @@ examples_install:
        ${INSTALL} -m 0644 examples/echod/*.lua ${SCRIPTS_INSTALL_PATH}/examples/echod
        ${MKDIR} ${SCRIPTS_INSTALL_PATH}/examples/filter
        ${INSTALL} -m 0644 examples/filter/*.lua ${SCRIPTS_INSTALL_PATH}/examples/filter
+       ${INSTALL} -m 0644 examples/filter/*.o ${SCRIPTS_INSTALL_PATH}/examples/filter

actually, we don't have a default path for ebpf programs.. do you have any suggestion? I don't think it should go under /lib/modules/lua

lneto commented 3 days ago

perhaps we can do the same as bpfd.. https://bpfman.io/v0.2.1/getting-started/example-bpf-local/, that is, /run/bpfd/examples/.. what do you think? can you create a PR with this change?

vincentmli commented 3 days ago

in BPFire, I use xdp-tools which install bpf program by default in /usr/local/lib/bpf directory, I don't use bpfd, what do you think of /usr/local/lib/bpf ?

lneto commented 3 days ago

in BPFire, I use xdp-tools which install bpf program by default in /usr/local/lib/bpf directory, I don't use bpfd, what do you think of /usr/local/lib/bpf ?

I think we can use it, if it's used for xdp-tools..

vincentmli commented 3 days ago

now I need to learn Lua to use lunatik effectively :)