diff --git a/pkgs/os-specific/linux/kernel/build.nix b/pkgs/os-specific/linux/kernel/build.nix index 0e1b774515d7..390238c89ba0 100644 --- a/pkgs/os-specific/linux/kernel/build.nix +++ b/pkgs/os-specific/linux/kernel/build.nix @@ -23,6 +23,8 @@ rustc-unwrapped, rust-bindgen-unwrapped, rustPlatform, + makeSetupHook, + xz, }: let @@ -158,6 +160,11 @@ lib.makeOverridable ( elfutils # module makefiles often run uname commands to find out the kernel version (buildPackages.deterministic-uname.override { inherit modDirVersion; }) + (makeSetupHook { + name = "setup-module-compression"; + substitutions = { inherit configfile modDirVersion; }; + propagatedNativeBuildInputs = [ xz ]; + } ./setup-module-compression.sh) ] ++ optional (lib.versionAtLeast version "5.13") zstd ++ optionals withRust [ diff --git a/pkgs/os-specific/linux/kernel/setup-module-compression.sh b/pkgs/os-specific/linux/kernel/setup-module-compression.sh new file mode 100644 index 000000000000..dc357ad30943 --- /dev/null +++ b/pkgs/os-specific/linux/kernel/setup-module-compression.sh @@ -0,0 +1,11 @@ +# shellcheck shell=bash + +setupModuleCompressionHook() { + # Ensure CRC32 is used, which the kernel is capable of decompressing natively (enabled by CONFIG_MODULE_DECOMPRESS=y). + export XZ_OPT="--check=crc32" +} + +if [[ -z "${dontSetupModuleCompression-}" ]]; then + nixInfoLog "Using setupModuleCompressionHook" + postConfigureHooks+=(setupModuleCompressionHook) +fi