From c007b763dc9027bc15361e0e8a8facd9aa8b46f2 Mon Sep 17 00:00:00 2001 From: Miroslav Crnic Date: Tue, 8 Jul 2025 10:53:45 +0000 Subject: [PATCH] kmod: dkms support --- .gitignore | 5 +++-- kmod/.gitignore | 8 +++++++- kmod/Makefile | 35 ++++++++++++++++++++++++++++------- kmod/build_deb.sh | 26 -------------------------- kmod/ci.sh | 6 +++--- kmod/crc32c.c | 1 - kmod/debian/changelog | 5 +++++ kmod/debian/compat | 1 + kmod/debian/control | 11 +++++++++++ kmod/debian/dkms | 9 +++++++++ kmod/debian/install | 3 +++ kmod/debian/rules | 6 ++++++ kmod/debian/source/format | 1 + kmod/debian/source/options | 3 +++ kmod/gf_tables.c | 1 - kmod/iscsi.h | 1 - kmod/rs_core.c | 1 - 17 files changed, 80 insertions(+), 43 deletions(-) delete mode 100755 kmod/build_deb.sh delete mode 120000 kmod/crc32c.c create mode 100644 kmod/debian/changelog create mode 100644 kmod/debian/compat create mode 100644 kmod/debian/control create mode 100644 kmod/debian/dkms create mode 100644 kmod/debian/install create mode 100755 kmod/debian/rules create mode 100644 kmod/debian/source/format create mode 100644 kmod/debian/source/options delete mode 120000 kmod/gf_tables.c delete mode 120000 kmod/iscsi.h delete mode 120000 kmod/rs_core.c diff --git a/.gitignore b/.gitignore index b625d498..67e44926 100644 --- a/.gitignore +++ b/.gitignore @@ -12,5 +12,6 @@ kmod/test-out kmod/trace kmod/vm-out linux-*.tar.gz -eggs-integrationtest.* -.go-cache \ No newline at end of file +tern-integrationtest.* +.go-cache +ternfs-client* diff --git a/kmod/.gitignore b/kmod/.gitignore index bf583ebe..eac212d0 100644 --- a/kmod/.gitignore +++ b/kmod/.gitignore @@ -11,6 +11,12 @@ modules.order ternfs-client-* linux* *.img -revision.c html Doxyfile +revision.c +crc32c.c +gf_tables.c +iscsi.h +rs_core.c +debian/debhelper-build-stamp +debian/files diff --git a/kmod/Makefile b/kmod/Makefile index 61969e8c..6dfe18f8 100644 --- a/kmod/Makefile +++ b/kmod/Makefile @@ -1,9 +1,9 @@ KDIR ?= /lib/modules/$(shell uname -r)/build LLVM ?= 0 -obj-m += ternfs.o +obj-m += ternfs-client.o -ternfs-objs += \ +ternfs-client-objs += \ dir.o \ err.o \ export.o \ @@ -37,19 +37,40 @@ export CF = -Wbitwise -Wcontext -Wcast_truncate -Wsparse-all -Wno-shadow -Wnopoi revision.c: printf "#include \"sysfs.h\"\nconst char* ternfs_revision = \"$(shell git describe --always --dirty)\";\n" > revision.c +EXTRA_FILES := ../cpp/crc32c/crc32c.c ../cpp/rs/gf_tables.c ../cpp/crc32c/iscsi.h ../cpp/rs/rs_core.c + +extra-files: $(EXTRA_FILES) + $(foreach file,$(EXTRA_FILES),cp $(file) .;) + +LOCAL_FILES := $(notdir $(EXTRA_FILES)) +extra-files-clean: + rm -f $(LOCAL_FILES) revision.c *.o + # C=1 builds with sparse -kmod: revision.c +ternfs-client-tests: revision.c extra-files $(MAKE) -C $(KDIR) M=$(PWD) C=1 modules -# Target to build the kmod when packaging it up (e.g. via dkms) +# Targets to build/clean the kmod when packaging it up (e.g. via dkms) # We'll generate revision.c separatedly, and we also don't want # sparse as a dependency. -kmod_package: +ternfs-client: $(MAKE) -C $(KDIR) M=$(PWD) modules -clean: +ternfs-client-clean: $(MAKE) -C $(KDIR) M=$(PWD) clean - rm -f bincode_tests rs_tests + rm -f *.o *.ko + +ternfs-client-local: revision.c extra-files + $(MAKE) -C $(KDIR) M=$(PWD) modules bincode_tests: bincode_tests.c bincodegen.h bincode.h gcc -Wall -g -O2 -fsanitize=undefined,address -fno-sanitize-recover=all bincode_tests.c -o bincode_tests + +bincode_tests-clean: + rm -f bincode_tests rs_tests ubuntu.img test-out trace vm-out dmesg + rm -rf tmp + +deb-package: revision.c extra-files + dpkg-buildpackage -us -uc + +clean: ternfs-client-clean bincode_tests-clean diff --git a/kmod/build_deb.sh b/kmod/build_deb.sh deleted file mode 100755 index e5cc2990..00000000 --- a/kmod/build_deb.sh +++ /dev/null @@ -1,26 +0,0 @@ -#!/bin/bash - -set -e - -VERSION=${1:?} - -BASE_DIR="eggsfs-client-${VERSION}" -MOD_DIR="${BASE_DIR}/lib/modules/$(uname -r)/fs/eggsfs" -SVC_DIR="${BASE_DIR}/etc/systemd/system" -MOD_LOAD_DIR="${BASE_DIR}/etc/modules-load.d" - -mkdir -p ${BASE_DIR}/DEBIAN -cat debian/control | sed "s/##VERSION##/${VERSION}/g" > ${BASE_DIR}/DEBIAN/control - -mkdir -p ${MOD_LOAD_DIR} -cp debian/eggsfs_load.conf ${MOD_LOAD_DIR}/eggsfs.conf - -mkdir -p ${MOD_DIR} -cp eggsfs.ko ${MOD_DIR} - -mkdir -p ${SVC_DIR} -cp debian/eggsfs-client.service ${SVC_DIR} - -mkdir -p ${BASE_DIR}/mnt/eggsfs - -dpkg-deb --build --root-owner-group ${BASE_DIR} diff --git a/kmod/ci.sh b/kmod/ci.sh index ddfe035f..cb562f04 100755 --- a/kmod/ci.sh +++ b/kmod/ci.sh @@ -34,7 +34,7 @@ SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) cd $SCRIPT_DIR # build kernel module -make "KDIR=${SCRIPT_DIR}/linux" -j kmod +make "KDIR=${SCRIPT_DIR}/linux" -j ternfs-client-local # start VM in the background function cleanup { @@ -49,7 +49,7 @@ trap cleanup EXIT # Wait for VM to go up by trying to copy the kernel module to it chmod 0600 image-key scp_attempts=0 -while ! scp -v -P 2223 -o StrictHostKeyChecking=no -i image-key ternfs.ko fmazzol@localhost: ; do +while ! scp -v -P 2223 -o StrictHostKeyChecking=no -i image-key ternfs-client.ko fmazzol@localhost: ; do sleep 1 scp_attempts=$((scp_attempts + 1)) if [ $scp_attempts -ge 20 ]; then @@ -62,7 +62,7 @@ done ./vm_deploy.py # Insert module -ssh -p 2223 -i image-key fmazzol@localhost "sudo insmod ternfs.ko" +ssh -p 2223 -i image-key fmazzol@localhost "sudo insmod ternfs-client.ko" # Set up permissions to read kmsg ssh -p 2223 -i image-key fmazzol@localhost "sudo chmod 666 /dev/kmsg" diff --git a/kmod/crc32c.c b/kmod/crc32c.c deleted file mode 120000 index 39c848fa..00000000 --- a/kmod/crc32c.c +++ /dev/null @@ -1 +0,0 @@ -../cpp/crc32c/crc32c.c \ No newline at end of file diff --git a/kmod/debian/changelog b/kmod/debian/changelog new file mode 100644 index 00000000..73cebdf1 --- /dev/null +++ b/kmod/debian/changelog @@ -0,0 +1,5 @@ +ternfs-client (1.0-xxxxxx) unstable; urgency=low + + * Initial release. + + -- Miroslav Crnic Mon, 07 Jul 2025 11:23:34 +0000 diff --git a/kmod/debian/compat b/kmod/debian/compat new file mode 100644 index 00000000..f599e28b --- /dev/null +++ b/kmod/debian/compat @@ -0,0 +1 @@ +10 diff --git a/kmod/debian/control b/kmod/debian/control new file mode 100644 index 00000000..b6717402 --- /dev/null +++ b/kmod/debian/control @@ -0,0 +1,11 @@ +Source: ternfs-client +Section: misc +Priority: optional +Maintainer: restech +Build-Depends: debhelper (>= 10), dkms + +Package: ternfs-client-dkms +Architecture: amd64 +Depends: dkms (>= 2.2), ${misc:Depends}, linux-headers-generic +Description: ternfs client module (DKMS) + Builds and installs the ternfs kernel module for all installed kernels. diff --git a/kmod/debian/dkms b/kmod/debian/dkms new file mode 100644 index 00000000..35637ed1 --- /dev/null +++ b/kmod/debian/dkms @@ -0,0 +1,9 @@ +PACKAGE_NAME="ternfs-client" +PACKAGE_VERSION="1.0-xxxxxx" + +BUILT_MODULE_NAME[0]="$PACKAGE_NAME" # build from top-level +DEST_MODULE_LOCATION[0]="/kernel/drivers/extra" + +MAKE[0]="make \"KDIR=${kernel_source_dir}\" ternfs-client" +CLEAN="make ternfs-client-clean" +AUTOINSTALL="yes" diff --git a/kmod/debian/install b/kmod/debian/install new file mode 100644 index 00000000..3aeffc10 --- /dev/null +++ b/kmod/debian/install @@ -0,0 +1,3 @@ +*.c /usr/src/ternfs-client-1.0-xxxxxx/ +*.h /usr/src/ternfs-client-1.0-xxxxxx/ +Makefile /usr/src/ternfs-client-1.0-xxxxxx/ diff --git a/kmod/debian/rules b/kmod/debian/rules new file mode 100755 index 00000000..fd57bc56 --- /dev/null +++ b/kmod/debian/rules @@ -0,0 +1,6 @@ +#!/usr/bin/make -f +%: + dh $@ --with dkms + +override_dh_auto_clean: + make clean diff --git a/kmod/debian/source/format b/kmod/debian/source/format new file mode 100644 index 00000000..89ae9db8 --- /dev/null +++ b/kmod/debian/source/format @@ -0,0 +1 @@ +3.0 (native) diff --git a/kmod/debian/source/options b/kmod/debian/source/options new file mode 100644 index 00000000..235a0edb --- /dev/null +++ b/kmod/debian/source/options @@ -0,0 +1,3 @@ +tar-ignore = "linux*" + + diff --git a/kmod/gf_tables.c b/kmod/gf_tables.c deleted file mode 120000 index d383acb1..00000000 --- a/kmod/gf_tables.c +++ /dev/null @@ -1 +0,0 @@ -../cpp/rs/gf_tables.c \ No newline at end of file diff --git a/kmod/iscsi.h b/kmod/iscsi.h deleted file mode 120000 index 43773d2b..00000000 --- a/kmod/iscsi.h +++ /dev/null @@ -1 +0,0 @@ -../cpp/crc32c/iscsi.h \ No newline at end of file diff --git a/kmod/rs_core.c b/kmod/rs_core.c deleted file mode 120000 index 7af65eb2..00000000 --- a/kmod/rs_core.c +++ /dev/null @@ -1 +0,0 @@ -../cpp/rs/rs_core.c \ No newline at end of file