diff --git a/build_library/sysext_mangle_flatcar-nvidia-drivers-535 b/build_library/sysext_mangle_flatcar-nvidia-drivers-535 new file mode 100755 index 00000000000..40cb56d05c6 --- /dev/null +++ b/build_library/sysext_mangle_flatcar-nvidia-drivers-535 @@ -0,0 +1,14 @@ +#!/bin/bash + +set -euo pipefail + +SCRIPT_NAME=$(basename "$(realpath "${BASH_SOURCE[0]}")") +SYSEXT_NAME=${SCRIPT_NAME#sysext_mangle_} +SYSEXT_NAME=${SYSEXT_NAME%.sh} +DIR=$(dirname "$(realpath "${BASH_SOURCE[0]}")") +. "$DIR/sysext_mangle_kmod" + +rootfs="${1}" + +cd "${rootfs}" +configure_modprobe "$SYSEXT_NAME" diff --git a/build_library/sysext_mangle_flatcar-nvidia-drivers-535-open b/build_library/sysext_mangle_flatcar-nvidia-drivers-535-open new file mode 120000 index 00000000000..25e899f70a6 --- /dev/null +++ b/build_library/sysext_mangle_flatcar-nvidia-drivers-535-open @@ -0,0 +1 @@ +sysext_mangle_flatcar-nvidia-drivers-535 \ No newline at end of file diff --git a/build_library/sysext_mangle_flatcar-nvidia-drivers-550 b/build_library/sysext_mangle_flatcar-nvidia-drivers-550 new file mode 120000 index 00000000000..25e899f70a6 --- /dev/null +++ b/build_library/sysext_mangle_flatcar-nvidia-drivers-550 @@ -0,0 +1 @@ +sysext_mangle_flatcar-nvidia-drivers-535 \ No newline at end of file diff --git a/build_library/sysext_mangle_flatcar-nvidia-drivers-550-open b/build_library/sysext_mangle_flatcar-nvidia-drivers-550-open new file mode 120000 index 00000000000..25e899f70a6 --- /dev/null +++ b/build_library/sysext_mangle_flatcar-nvidia-drivers-550-open @@ -0,0 +1 @@ +sysext_mangle_flatcar-nvidia-drivers-535 \ No newline at end of file diff --git a/build_library/sysext_mangle_flatcar-nvidia-drivers-570 b/build_library/sysext_mangle_flatcar-nvidia-drivers-570 new file mode 120000 index 00000000000..25e899f70a6 --- /dev/null +++ b/build_library/sysext_mangle_flatcar-nvidia-drivers-570 @@ -0,0 +1 @@ +sysext_mangle_flatcar-nvidia-drivers-535 \ No newline at end of file diff --git a/build_library/sysext_mangle_flatcar-nvidia-drivers-570-open b/build_library/sysext_mangle_flatcar-nvidia-drivers-570-open new file mode 120000 index 00000000000..25e899f70a6 --- /dev/null +++ b/build_library/sysext_mangle_flatcar-nvidia-drivers-570-open @@ -0,0 +1 @@ +sysext_mangle_flatcar-nvidia-drivers-535 \ No newline at end of file diff --git a/build_library/sysext_mangle_flatcar-zfs b/build_library/sysext_mangle_flatcar-zfs index 13e9135b3c7..e9ffdb11861 100755 --- a/build_library/sysext_mangle_flatcar-zfs +++ b/build_library/sysext_mangle_flatcar-zfs @@ -3,6 +3,9 @@ set -euo pipefail rootfs="${1}" +DIR="$(dirname "$(realpath "${BASH_SOURCE[0]}")")" +. "$DIR/sysext_mangle_kmod" + pushd "${rootfs}" rm -rf ./usr/{lib/debug/,lib64/cmake/,include/} @@ -40,4 +43,5 @@ cat <./usr/lib/systemd/system/systemd-udevd.service.d/10-zfs.conf [Unit] After=systemd-sysext.service EOF +configure_modprobe flatcar-zfs popd diff --git a/build_library/sysext_mangle_kmod b/build_library/sysext_mangle_kmod new file mode 100644 index 00000000000..b00d48914a6 --- /dev/null +++ b/build_library/sysext_mangle_kmod @@ -0,0 +1,48 @@ +#!/bin/bash + +configure_modprobe() { + local sysext_name="${1}" + shift + + local module_directories=(./usr/lib/modules/*-flatcar/) + + mkdir -p ./usr/lib/modprobe.d/ + for module_name in $(find "${module_directories[@]}" -type f \( -name "*.ko" -o -name "*.ko.*" \) -printf "%f\n" | sed -E 's/\.ko(\.\w+)?$//'); do + cat <> "./usr/lib/modprobe.d/10-${sysext_name}-kmod-sysext.conf" +install $module_name /usr/local/bin/_${sysext_name}_modprobe_helper $module_name +remove $module_name /usr/local/bin/_${sysext_name}_modprobe_helper -r $module_name +EOF + done + + mkdir -p ./usr/local/bin/ + install -m0755 -D /dev/stdin "./usr/local/bin/_${sysext_name}_modprobe_helper" <<'EOF' +#!/bin/bash + +set -euo pipefail + +action="Loading" +for arg in "$@"; do + if [[ $arg == "-r" ]]; then + action="Unloading" + fi +done +echo "$action kernel module from a sysext..." + +KMOD_PATH=/usr/lib/modules/$(uname -r) +TMP_DIR=$(mktemp -d) +trap "rm -rf -- '${TMP_DIR}'" EXIT +mkdir "${TMP_DIR}"/{upper,work} + +unshare -m bash -s -- "${@}" <