nixpkgs/pkgs/applications/virtualization/lkl/default.nix
Archit Gupta 2efcf8291e lkl: Let mount find lklfuse mount helper
This enables mount to find lklfuse when mounting with the type
"fuse.lklfuse". With this fix, lklfuse can be used to mount filesystems
with NixOS filesystem options.

This is the same fix as has been applied to bindfs, mergerfs, and
apfs-fuse.
2023-06-30 16:27:11 -07:00

94 lines
3.3 KiB
Nix

{ lib, stdenv, fetchFromGitHub, bc, python3, bison, flex, fuse, libarchive
, buildPackages
, firewallSupport ? false
}:
stdenv.mkDerivation rec {
pname = "lkl";
# NOTE: pinned to the last known version that doesn't have a hang in cptofs.
# Please verify `nix build -f nixos/release-combined.nix nixos.ova` works
# before attempting to update again.
# ref: https://github.com/NixOS/nixpkgs/pull/219434
version = "2022-08-08";
outputs = [ "dev" "lib" "out" ];
src = fetchFromGitHub {
owner = "lkl";
repo = "linux";
rev = "ffbb4aa67b3e0a64f6963f59385a200d08cb2d8b";
sha256 = "sha256-24sNREdnhkF+P+3P0qEh2tF1jHKF7KcbFSn/rPK2zWs=";
};
nativeBuildInputs = [ bc bison flex python3 ];
buildInputs = [ fuse libarchive ];
postPatch = ''
# Fix a /usr/bin/env reference in here that breaks sandboxed builds
patchShebangs arch/lkl/scripts
patchShebangs scripts/ld-version.sh
# Fixup build with newer Linux headers: https://github.com/lkl/linux/pull/484
sed '1i#include <linux/sockios.h>' -i tools/lkl/lib/hijack/xlate.c
'' + lib.optionalString stdenv.isi686 ''
echo CONFIG_KALLSYMS=n >> arch/lkl/configs/defconfig
echo CONFIG_KALLSYMS_BASE_RELATIVE=n >> arch/lkl/configs/defconfig
'' + lib.optionalString firewallSupport ''
cat ${./lkl-defconfig-enable-nftables} >> arch/lkl/configs/defconfig
'';
installPhase = ''
mkdir -p $out/bin $lib/lib $dev
cp tools/lkl/bin/lkl-hijack.sh $out/bin
sed -i $out/bin/lkl-hijack.sh \
-e "s,LD_LIBRARY_PATH=.*,LD_LIBRARY_PATH=$lib/lib,"
cp tools/lkl/{cptofs,fs2tar,lklfuse} $out/bin
ln -s cptofs $out/bin/cpfromfs
cp -r tools/lkl/include $dev/
cp tools/lkl/liblkl.a \
tools/lkl/lib/liblkl.so \
tools/lkl/lib/hijack/liblkl-hijack.so $lib/lib
'';
postFixup = ''
ln -s $out/bin/lklfuse $out/bin/mount.fuse.lklfuse
'';
# We turn off format and fortify because of these errors (fortify implies -O2, which breaks the jitter entropy code):
# fs/xfs/xfs_log_recover.c:2575:3: error: format not a string literal and no format arguments [-Werror=format-security]
# crypto/jitterentropy.c:54:3: error: #error "The CPU Jitter random number generator must not be compiled with optimizations. See documentation. Use the compiler switch -O0 for compiling jitterentropy.c."
hardeningDisable = [ "format" "fortify" ];
# Fixes the following error when using liblkl-hijack.so on aarch64-linux:
# symbol lookup error: liblkl-hijack.so: undefined symbol: __aarch64_ldadd4_sync
env.NIX_CFLAGS_LINK = "-lgcc_s";
makeFlags = [
"-C tools/lkl"
"CC=${stdenv.cc}/bin/${stdenv.cc.targetPrefix}cc"
"HOSTCC=${buildPackages.stdenv.cc}/bin/${buildPackages.stdenv.cc.targetPrefix}cc"
"CROSS_COMPILE=${stdenv.cc.targetPrefix}"
];
enableParallelBuilding = true;
meta = with lib; {
description = "The Linux kernel as a library";
longDescription = ''
LKL (Linux Kernel Library) aims to allow reusing the Linux kernel code as
extensively as possible with minimal effort and reduced maintenance
overhead
'';
homepage = "https://github.com/lkl/linux/";
platforms = platforms.linux; # Darwin probably works too but I haven't tested it
license = licenses.gpl2;
maintainers = with maintainers; [ copumpkin raitobezarius ];
};
}