zfs: fix cross compilation
This commit is contained in:
parent
a0dcccc67a
commit
27e830fff9
|
@ -1,5 +1,5 @@
|
|||
{ stdenv, fetchFromGitHub, autoreconfHook, utillinux, nukeReferences, coreutils
|
||||
, perl
|
||||
, perl, buildPackages
|
||||
, configFile ? "all"
|
||||
|
||||
# Userspace dependencies
|
||||
|
@ -43,53 +43,43 @@ let
|
|||
|
||||
postPatch = optionalString buildKernel ''
|
||||
patchShebangs scripts
|
||||
# The arrays must remain the same length, so we repeat a flag that is
|
||||
# already part of the command and therefore has no effect.
|
||||
substituteInPlace ./module/zfs/zfs_ctldir.c --replace '"/usr/bin/env", "umount"' '"${utillinux}/bin/umount", "-n"' \
|
||||
--replace '"/usr/bin/env", "mount"' '"${utillinux}/bin/mount", "-n"'
|
||||
'' + optionalString buildUser ''
|
||||
substituteInPlace ./lib/libzfs/libzfs_mount.c --replace "/bin/umount" "${utillinux}/bin/umount" \
|
||||
--replace "/bin/mount" "${utillinux}/bin/mount"
|
||||
substituteInPlace ./lib/libshare/nfs.c --replace "/usr/sbin/exportfs" "${nfs-utils}/bin/exportfs"
|
||||
substituteInPlace ./config/user-systemd.m4 --replace "/usr/lib/modules-load.d" "$out/etc/modules-load.d"
|
||||
substituteInPlace ./config/zfs-build.m4 --replace "\$sysconfdir/init.d" "$out/etc/init.d"
|
||||
substituteInPlace ./etc/zfs/Makefile.am --replace "\$(sysconfdir)" "$out/etc"
|
||||
substituteInPlace ./cmd/zed/Makefile.am --replace "\$(sysconfdir)" "$out/etc"
|
||||
substituteInPlace ./etc/systemd/system/zfs-share.service.in \
|
||||
--replace "/bin/rm " "${coreutils}/bin/rm "
|
||||
|
||||
substituteInPlace ./cmd/vdev_id/vdev_id \
|
||||
--replace "PATH=/bin:/sbin:/usr/bin:/usr/sbin" \
|
||||
"PATH=${makeBinPath [ coreutils gawk gnused gnugrep systemd ]}"
|
||||
'' + optionalString stdenv.hostPlatform.isMusl ''
|
||||
substituteInPlace config/user-libtirpc.m4 \
|
||||
--replace /usr/include/tirpc ${libtirpc}/include/tirpc
|
||||
'';
|
||||
|
||||
nativeBuildInputs = [ autoreconfHook nukeReferences ]
|
||||
++ optional buildKernel (kernel.moduleBuildDependencies ++ [ perl ]);
|
||||
buildInputs = optionals buildUser [ zlib libuuid python3 attr ]
|
||||
++ optionals (buildUser) [ openssl ]
|
||||
++ optional stdenv.hostPlatform.isMusl [ libtirpc ];
|
||||
++ optionals buildKernel (kernel.moduleBuildDependencies ++ [ perl ]);
|
||||
buildInputs = optionals buildUser [ zlib libuuid attr ]
|
||||
++ optionals (buildUser) [ openssl python3 ]
|
||||
++ optional stdenv.hostPlatform.isMusl libtirpc;
|
||||
|
||||
# for zdb to get the rpath to libgcc_s, needed for pthread_cancel to work
|
||||
NIX_CFLAGS_LINK = "-lgcc_s";
|
||||
|
||||
hardeningDisable = [ "fortify" "stackprotector" "pic" ];
|
||||
|
||||
preConfigure = ''
|
||||
substituteInPlace ./module/zfs/zfs_ctldir.c --replace "umount -t zfs" "${utillinux}/bin/umount -t zfs"
|
||||
substituteInPlace ./module/zfs/zfs_ctldir.c --replace "mount -t zfs" "${utillinux}/bin/mount -t zfs"
|
||||
substituteInPlace ./lib/libzfs/libzfs_mount.c --replace "/bin/umount" "${utillinux}/bin/umount"
|
||||
substituteInPlace ./lib/libzfs/libzfs_mount.c --replace "/bin/mount" "${utillinux}/bin/mount"
|
||||
substituteInPlace ./lib/libshare/nfs.c --replace "/usr/sbin/exportfs" "${nfs-utils}/bin/exportfs"
|
||||
substituteInPlace ./cmd/ztest/ztest.c --replace "/usr/sbin/ztest" "$out/sbin/ztest"
|
||||
substituteInPlace ./cmd/ztest/ztest.c --replace "/usr/sbin/zdb" "$out/sbin/zdb"
|
||||
substituteInPlace ./config/user-systemd.m4 --replace "/usr/lib/modules-load.d" "$out/etc/modules-load.d"
|
||||
substituteInPlace ./config/zfs-build.m4 --replace "\$sysconfdir/init.d" "$out/etc/init.d"
|
||||
substituteInPlace ./etc/zfs/Makefile.am --replace "\$(sysconfdir)" "$out/etc"
|
||||
substituteInPlace ./cmd/zed/Makefile.am --replace "\$(sysconfdir)" "$out/etc"
|
||||
substituteInPlace ./module/Makefile.in --replace "/bin/cp" "cp"
|
||||
substituteInPlace ./etc/systemd/system/zfs-share.service.in \
|
||||
--replace "/bin/rm " "${coreutils}/bin/rm "
|
||||
|
||||
for f in ./udev/rules.d/*
|
||||
do
|
||||
substituteInPlace "$f" --replace "/lib/udev/vdev_id" "$out/lib/udev/vdev_id"
|
||||
done
|
||||
substituteInPlace ./cmd/vdev_id/vdev_id \
|
||||
--replace "PATH=/bin:/sbin:/usr/bin:/usr/sbin" \
|
||||
"PATH=${makeBinPath [ coreutils gawk gnused gnugrep systemd ]}"
|
||||
|
||||
./autogen.sh
|
||||
configureFlagsArray+=("--libexecdir=$out/libexec")
|
||||
'';
|
||||
|
||||
configureFlags = [
|
||||
"--with-config=${configFile}"
|
||||
"--with-python=${python3.interpreter}"
|
||||
(withFeatureAs buildUser "python" python3.interpreter)
|
||||
] ++ optionals buildUser [
|
||||
"--with-dracutdir=$(out)/lib/dracut"
|
||||
"--with-udevdir=$(out)/lib/udev"
|
||||
|
@ -97,13 +87,16 @@ let
|
|||
"--with-systemdpresetdir=$(out)/etc/systemd/system-preset"
|
||||
"--with-systemdgeneratordir=$(out)/lib/systemd/system-generator"
|
||||
"--with-mounthelperdir=$(out)/bin"
|
||||
"--libexecdir=$(out)/libexec"
|
||||
"--sysconfdir=/etc"
|
||||
"--localstatedir=/var"
|
||||
"--enable-systemd"
|
||||
] ++ optionals buildKernel [
|
||||
] ++ optionals buildKernel ([
|
||||
"--with-linux=${kernel.dev}/lib/modules/${kernel.modDirVersion}/source"
|
||||
"--with-linux-obj=${kernel.dev}/lib/modules/${kernel.modDirVersion}/build"
|
||||
];
|
||||
] ++ kernel.makeFlags);
|
||||
|
||||
makeFlags = optionals buildKernel kernel.makeFlags;
|
||||
|
||||
enableParallelBuilding = true;
|
||||
|
||||
|
@ -112,9 +105,10 @@ let
|
|||
"DEFAULT_INITCONF_DIR=\${out}/default"
|
||||
];
|
||||
|
||||
postInstall = ''
|
||||
# Prevent kernel modules from depending on the Linux -dev output.
|
||||
nuke-refs $(find $out -name "*.ko")
|
||||
postInstall = optionalString buildKernel ''
|
||||
# Add reference that cannot be detected due to compressed kernel module
|
||||
mkdir -p "$out/nix-support"
|
||||
echo "${utillinux}" >> "$out/nix-support/extra-refs"
|
||||
'' + optionalString buildUser ''
|
||||
# Remove provided services as they are buggy
|
||||
rm $out/etc/systemd/system/zfs-import-*.service
|
||||
|
@ -174,7 +168,6 @@ in {
|
|||
# incompatibleKernelVersion = "4.19";
|
||||
|
||||
# this package should point to a version / git revision compatible with the latest kernel release
|
||||
# This is now "stable". Move to zfsStable after it's tested more.
|
||||
version = "0.8.1";
|
||||
|
||||
sha256 = "0wlbziijx08a9bmbyq4gfz4by9l5jrx44g18i99qnfm78k2q8a84";
|
||||
|
|
Loading…
Reference in a new issue