diff options
Diffstat (limited to 'nixpkgs/pkgs/os-specific/linux/fuse')
-rw-r--r-- | nixpkgs/pkgs/os-specific/linux/fuse/common.nix | 87 | ||||
-rw-r--r-- | nixpkgs/pkgs/os-specific/linux/fuse/default.nix | 17 | ||||
-rw-r--r-- | nixpkgs/pkgs/os-specific/linux/fuse/fuse3-install.patch | 34 |
3 files changed, 138 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/os-specific/linux/fuse/common.nix b/nixpkgs/pkgs/os-specific/linux/fuse/common.nix new file mode 100644 index 000000000000..15470479a3a2 --- /dev/null +++ b/nixpkgs/pkgs/os-specific/linux/fuse/common.nix @@ -0,0 +1,87 @@ +{ version, sha256Hash }: + +{ stdenv, fetchFromGitHub, fetchpatch +, fusePackages, utillinux, gettext +, meson, ninja, pkgconfig +, autoreconfHook +, python3Packages, which +}: + +let + isFuse3 = stdenv.lib.hasPrefix "3" version; +in stdenv.mkDerivation rec { + name = "fuse-${version}"; + + src = fetchFromGitHub { + owner = "libfuse"; + repo = "libfuse"; + rev = name; + sha256 = sha256Hash; + }; + + preAutoreconf = "touch config.rpath"; + + patches = + stdenv.lib.optional + (!isFuse3 && stdenv.isAarch64) + (fetchpatch { + url = "https://github.com/libfuse/libfuse/commit/914871b20a901e3e1e981c92bc42b1c93b7ab81b.patch"; + sha256 = "1w4j6f1awjrycycpvmlv0x5v9gprllh4dnbjxl4dyl2jgbkaw6pa"; + }) + ++ stdenv.lib.optional isFuse3 ./fuse3-install.patch; + + nativeBuildInputs = if isFuse3 + then [ meson ninja pkgconfig ] + else [ autoreconfHook gettext ]; + + outputs = [ "out" ] ++ stdenv.lib.optional isFuse3 "common"; + + mesonFlags = stdenv.lib.optional isFuse3 "-Dudevrulesdir=etc/udev/rules.d"; + + preConfigure = '' + export MOUNT_FUSE_PATH=$out/sbin + export INIT_D_PATH=$TMPDIR/etc/init.d + export UDEV_RULES_PATH=$out/etc/udev/rules.d + + # Ensure that FUSE calls the setuid wrapper, not + # $out/bin/fusermount. It falls back to calling fusermount in + # $PATH, so it should also work on non-NixOS systems. + export NIX_CFLAGS_COMPILE="-DFUSERMOUNT_DIR=\"/run/wrappers/bin\"" + + sed -e 's@/bin/@${utillinux}/bin/@g' -i lib/mount_util.c + '' + (if isFuse3 then '' + # The configure phase will delete these files (temporary workaround for + # ./fuse3-install_man.patch) + install -D -m444 doc/fusermount3.1 $out/share/man/man1/fusermount3.1 + install -D -m444 doc/mount.fuse3.8 $out/share/man/man8/mount.fuse3.8 + '' else '' + sed -e 's@CONFIG_RPATH=/usr/share/gettext/config.rpath@CONFIG_RPATH=${gettext}/share/gettext/config.rpath@' -i makeconf.sh + ./makeconf.sh + ''); + + checkInputs = [ which ] ++ (with python3Packages; [ python pytest ]); + + checkPhase = '' + python3 -m pytest test/ + ''; + + doCheck = false; # v2: no tests, v3: all tests get skipped in a sandbox + + postFixup = "cd $out\n" + (if isFuse3 then '' + install -D -m444 etc/fuse.conf $common/etc/fuse.conf + install -D -m444 etc/udev/rules.d/99-fuse3.rules $common/etc/udev/rules.d/99-fuse.rules + '' else '' + cp ${fusePackages.fuse_3.common}/etc/fuse.conf etc/fuse.conf + cp ${fusePackages.fuse_3.common}/etc/udev/rules.d/99-fuse.rules etc/udev/rules.d/99-fuse.rules + ''); + + enableParallelBuilding = true; + + meta = with stdenv.lib; { + inherit (src.meta) homepage; + description = "Kernel module and library that allows filesystems to be implemented in user space"; + platforms = platforms.linux; + license = with licenses; [ gpl2 lgpl21 ]; + maintainers = [ maintainers.primeos ]; + }; +} diff --git a/nixpkgs/pkgs/os-specific/linux/fuse/default.nix b/nixpkgs/pkgs/os-specific/linux/fuse/default.nix new file mode 100644 index 000000000000..d712ea995784 --- /dev/null +++ b/nixpkgs/pkgs/os-specific/linux/fuse/default.nix @@ -0,0 +1,17 @@ +{ callPackage, utillinux }: + +let + mkFuse = args: callPackage (import ./common.nix args) { + inherit utillinux; + }; +in { + fuse_2 = mkFuse { + version = "2.9.8"; + sha256Hash = "0s04ln4k9zvvbjih8ybaa19fxg8xv7dcsz2yrlbk35psnf3l67af"; + }; + + fuse_3 = mkFuse { + version = "3.4.1"; + sha256Hash = "1aihvklhqx7abqiy5n9gns7gryqgjldhzghigwrqwnwvf9z0ggyx"; + }; +} diff --git a/nixpkgs/pkgs/os-specific/linux/fuse/fuse3-install.patch b/nixpkgs/pkgs/os-specific/linux/fuse/fuse3-install.patch new file mode 100644 index 000000000000..320c328cbd92 --- /dev/null +++ b/nixpkgs/pkgs/os-specific/linux/fuse/fuse3-install.patch @@ -0,0 +1,34 @@ +--- a/util/install_helper.sh 2018-08-31 21:22:34.580563286 +0200 ++++ b/util/install_helper.sh 2018-08-31 21:30:54.837939149 +0200 +@@ -22,30 +22,11 @@ + DESTDIR="${DESTDIR%/}" + fi + +-chown root:root "${DESTDIR}${bindir}/fusermount3" +-chmod u+s "${DESTDIR}${bindir}/fusermount3" +- + install -D -m 644 "${MESON_SOURCE_ROOT}/util/fuse.conf" \ + "${DESTDIR}${sysconfdir}/fuse.conf" + +- +-if test ! -e "${DESTDIR}/dev/fuse"; then +- mkdir -p "${DESTDIR}/dev" +- mknod "${DESTDIR}/dev/fuse" -m 0666 c 10 229 +-fi +- + install -D -m 644 "${MESON_SOURCE_ROOT}/util/udev.rules" \ +- "${DESTDIR}${udevrulesdir}/99-fuse3.rules" ++ "${sysconfdir}/udev/rules.d/99-fuse3.rules" + + install -D -m 755 "${MESON_SOURCE_ROOT}/util/init_script" \ + "${DESTDIR}${sysconfdir}/init.d/fuse3" +- +- +-if test -x /usr/sbin/update-rc.d && test -z "${DESTDIR}"; then +- /usr/sbin/update-rc.d fuse3 start 34 S . start 41 0 6 . || /bin/true +-else +- echo "== FURTHER ACTION REQUIRED ==" +- echo "Make sure that your init system will start the ${sysconfdir}/init.d/fuse3 init script" +-fi +- +- |