Merge pull request #65490 from lopsided98/zfs-cross
zfs: fix kernel module cross-compile
This commit is contained in:
commit
d9eeb35588
@ -1,6 +1,6 @@
|
|||||||
{ stdenv, fetchurl, fetchpatch, lib, pkgconfig, utillinux, libcap, libtirpc, libevent
|
{ stdenv, fetchurl, fetchpatch, lib, pkgconfig, utillinux, libcap, libtirpc, libevent
|
||||||
, sqlite, kerberos, kmod, libuuid, keyutils, lvm2, systemd, coreutils, tcp_wrappers
|
, sqlite, kerberos, kmod, libuuid, keyutils, lvm2, systemd, coreutils, tcp_wrappers
|
||||||
, python3
|
, python3, buildPackages
|
||||||
}:
|
}:
|
||||||
|
|
||||||
let
|
let
|
||||||
@ -20,7 +20,7 @@ stdenv.mkDerivation rec {
|
|||||||
# put it in the "lib" output, and the headers in "dev"
|
# put it in the "lib" output, and the headers in "dev"
|
||||||
outputs = [ "out" "dev" "lib" "man" ];
|
outputs = [ "out" "dev" "lib" "man" ];
|
||||||
|
|
||||||
nativeBuildInputs = [ pkgconfig ];
|
nativeBuildInputs = [ pkgconfig buildPackages.stdenv.cc ];
|
||||||
|
|
||||||
buildInputs = [
|
buildInputs = [
|
||||||
libtirpc libcap libevent sqlite lvm2
|
libtirpc libcap libevent sqlite lvm2
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
{ stdenv, fetchFromGitHub, autoreconfHook, utillinux, nukeReferences, coreutils
|
{ stdenv, fetchFromGitHub, autoreconfHook, utillinux, nukeReferences, coreutils
|
||||||
, perl
|
, perl, buildPackages
|
||||||
, configFile ? "all"
|
, configFile ? "all"
|
||||||
|
|
||||||
# Userspace dependencies
|
# Userspace dependencies
|
||||||
@ -43,53 +43,43 @@ let
|
|||||||
|
|
||||||
postPatch = optionalString buildKernel ''
|
postPatch = optionalString buildKernel ''
|
||||||
patchShebangs scripts
|
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 ''
|
'' + optionalString stdenv.hostPlatform.isMusl ''
|
||||||
substituteInPlace config/user-libtirpc.m4 \
|
substituteInPlace config/user-libtirpc.m4 \
|
||||||
--replace /usr/include/tirpc ${libtirpc}/include/tirpc
|
--replace /usr/include/tirpc ${libtirpc}/include/tirpc
|
||||||
'';
|
'';
|
||||||
|
|
||||||
nativeBuildInputs = [ autoreconfHook nukeReferences ]
|
nativeBuildInputs = [ autoreconfHook nukeReferences ]
|
||||||
++ optional buildKernel (kernel.moduleBuildDependencies ++ [ perl ]);
|
++ optionals buildKernel (kernel.moduleBuildDependencies ++ [ perl ]);
|
||||||
buildInputs = optionals buildUser [ zlib libuuid python3 attr ]
|
buildInputs = optionals buildUser [ zlib libuuid attr ]
|
||||||
++ optionals (buildUser) [ openssl ]
|
++ optionals (buildUser) [ openssl python3 ]
|
||||||
++ optional stdenv.hostPlatform.isMusl [ libtirpc ];
|
++ optional stdenv.hostPlatform.isMusl libtirpc;
|
||||||
|
|
||||||
# for zdb to get the rpath to libgcc_s, needed for pthread_cancel to work
|
# for zdb to get the rpath to libgcc_s, needed for pthread_cancel to work
|
||||||
NIX_CFLAGS_LINK = "-lgcc_s";
|
NIX_CFLAGS_LINK = "-lgcc_s";
|
||||||
|
|
||||||
hardeningDisable = [ "fortify" "stackprotector" "pic" ];
|
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 = [
|
configureFlags = [
|
||||||
"--with-config=${configFile}"
|
"--with-config=${configFile}"
|
||||||
"--with-python=${python3.interpreter}"
|
(withFeatureAs buildUser "python" python3.interpreter)
|
||||||
] ++ optionals buildUser [
|
] ++ optionals buildUser [
|
||||||
"--with-dracutdir=$(out)/lib/dracut"
|
"--with-dracutdir=$(out)/lib/dracut"
|
||||||
"--with-udevdir=$(out)/lib/udev"
|
"--with-udevdir=$(out)/lib/udev"
|
||||||
@ -97,13 +87,16 @@ let
|
|||||||
"--with-systemdpresetdir=$(out)/etc/systemd/system-preset"
|
"--with-systemdpresetdir=$(out)/etc/systemd/system-preset"
|
||||||
"--with-systemdgeneratordir=$(out)/lib/systemd/system-generator"
|
"--with-systemdgeneratordir=$(out)/lib/systemd/system-generator"
|
||||||
"--with-mounthelperdir=$(out)/bin"
|
"--with-mounthelperdir=$(out)/bin"
|
||||||
|
"--libexecdir=$(out)/libexec"
|
||||||
"--sysconfdir=/etc"
|
"--sysconfdir=/etc"
|
||||||
"--localstatedir=/var"
|
"--localstatedir=/var"
|
||||||
"--enable-systemd"
|
"--enable-systemd"
|
||||||
] ++ optionals buildKernel [
|
] ++ optionals buildKernel ([
|
||||||
"--with-linux=${kernel.dev}/lib/modules/${kernel.modDirVersion}/source"
|
"--with-linux=${kernel.dev}/lib/modules/${kernel.modDirVersion}/source"
|
||||||
"--with-linux-obj=${kernel.dev}/lib/modules/${kernel.modDirVersion}/build"
|
"--with-linux-obj=${kernel.dev}/lib/modules/${kernel.modDirVersion}/build"
|
||||||
];
|
] ++ kernel.makeFlags);
|
||||||
|
|
||||||
|
makeFlags = optionals buildKernel kernel.makeFlags;
|
||||||
|
|
||||||
enableParallelBuilding = true;
|
enableParallelBuilding = true;
|
||||||
|
|
||||||
@ -112,9 +105,10 @@ let
|
|||||||
"DEFAULT_INITCONF_DIR=\${out}/default"
|
"DEFAULT_INITCONF_DIR=\${out}/default"
|
||||||
];
|
];
|
||||||
|
|
||||||
postInstall = ''
|
postInstall = optionalString buildKernel ''
|
||||||
# Prevent kernel modules from depending on the Linux -dev output.
|
# Add reference that cannot be detected due to compressed kernel module
|
||||||
nuke-refs $(find $out -name "*.ko")
|
mkdir -p "$out/nix-support"
|
||||||
|
echo "${utillinux}" >> "$out/nix-support/extra-refs"
|
||||||
'' + optionalString buildUser ''
|
'' + optionalString buildUser ''
|
||||||
# Remove provided services as they are buggy
|
# Remove provided services as they are buggy
|
||||||
rm $out/etc/systemd/system/zfs-import-*.service
|
rm $out/etc/systemd/system/zfs-import-*.service
|
||||||
@ -174,7 +168,6 @@ in {
|
|||||||
# incompatibleKernelVersion = "4.19";
|
# incompatibleKernelVersion = "4.19";
|
||||||
|
|
||||||
# this package should point to a version / git revision compatible with the latest kernel release
|
# 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";
|
version = "0.8.1";
|
||||||
|
|
||||||
sha256 = "0wlbziijx08a9bmbyq4gfz4by9l5jrx44g18i99qnfm78k2q8a84";
|
sha256 = "0wlbziijx08a9bmbyq4gfz4by9l5jrx44g18i99qnfm78k2q8a84";
|
||||||
|
Loading…
x
Reference in New Issue
Block a user