push sheeet
Some checks failed
Periodic Merges (6h) / master → staging-nixos (push) Failing after 12m50s
Periodic Merges (6h) / master → staging-next (push) Failing after 12m54s
Periodic Merges (24h) / merge-base(master,staging) → haskell-updates (push) Failing after 11m54s
Periodic Merges (6h) / staging-next → staging (push) Failing after 12m13s
Periodic Merges (24h) / staging-next-25.05 → staging-25.05 (push) Failing after 13m24s
Periodic Merges (24h) / release-25.05 → staging-next-25.05 (push) Failing after 14m28s

This commit is contained in:
Dark Steveneq
2025-10-09 14:15:47 +02:00
commit 646b892680
49168 changed files with 5897842 additions and 0 deletions

View File

@@ -0,0 +1,148 @@
{ version, hash }:
{
lib,
stdenv,
fetchFromGitHub,
fetchpatch,
fusePackages,
util-linux,
gettext,
shadow,
meson,
ninja,
pkg-config,
autoreconfHook,
runtimeShell,
udevCheckHook,
}:
let
isFuse3 = lib.hasPrefix "3" version;
in
stdenv.mkDerivation rec {
pname = "fuse";
inherit version;
src = fetchFromGitHub {
owner = "libfuse";
repo = "libfuse";
rev = "${pname}-${version}";
inherit hash;
};
patches =
lib.optional (!isFuse3 && (stdenv.hostPlatform.isAarch64 || stdenv.hostPlatform.isLoongArch64))
(fetchpatch {
url = "https://github.com/libfuse/libfuse/commit/914871b20a901e3e1e981c92bc42b1c93b7ab81b.patch";
sha256 = "1w4j6f1awjrycycpvmlv0x5v9gprllh4dnbjxl4dyl2jgbkaw6pa";
})
++ (
if isFuse3 then
[
./fuse3-install.patch
./fuse3-Do-not-set-FUSERMOUNT_DIR.patch
]
else
[
./fuse2-Do-not-set-FUSERMOUNT_DIR.patch
(fetchpatch {
url = "https://gitweb.gentoo.org/repo/gentoo.git/plain/sys-fs/fuse/files/fuse-2.9.9-closefrom-glibc-2-34.patch?id=8a970396fca7aca2d5a761b8e7a8242f1eef14c9";
sha256 = "sha256-ELYBW/wxRcSMssv7ejCObrpsJHtOPJcGq33B9yHQII4=";
})
./fuse2-gettext-0.25.patch
]
);
nativeBuildInputs =
if isFuse3 then
[
meson
ninja
pkg-config
]
++ lib.optionals (!stdenv.hostPlatform.isMusl) [ udevCheckHook ] # inf rec on musl, so skip
else
[
autoreconfHook
gettext
];
outputs = [
"bin"
"out"
"dev"
"man"
]
++ lib.optional isFuse3 "udev";
mesonFlags = lib.optionals isFuse3 [
"-Dudevrulesdir=/udev/rules.d"
"-Duseroot=false"
"-Dinitscriptdir="
"-Dexamples=false" # examples fail on musl and are just generally useless
];
# 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.
env.NIX_CFLAGS_COMPILE = ''-DFUSERMOUNT_DIR="/run/wrappers/bin"'';
preConfigure = ''
substituteInPlace lib/mount_util.c \
--replace-fail "/bin/mount" "${lib.getBin util-linux}/bin/mount" \
--replace-fail "/bin/umount" "${lib.getBin util-linux}/bin/umount"
substituteInPlace util/mount.fuse.c \
--replace-fail "/bin/sh" "${runtimeShell}"
''
+ lib.optionalString (!isFuse3) ''
export MOUNT_FUSE_PATH=$bin/bin
# Do not install these files for fuse2 which are not useful for NixOS.
export INIT_D_PATH=$TMPDIR/etc/init.d
export UDEV_RULES_PATH=$TMPDIR/etc/udev/rules.d
# This is for `setuid=`, and needs root permission anyway.
# No need to use the SUID wrapper.
substituteInPlace util/mount.fuse.c \
--replace-fail '"su"' '"${lib.getBin shadow.su}/bin/su"'
'';
# v2: no tests, v3: all tests get skipped in a sandbox
doCheck = false;
doInstallCheck = true;
# Drop `/etc/fuse.conf` because it is a no-op config and
# would conflict with our fuse module.
postInstall = lib.optionalString isFuse3 ''
rm $out/etc/fuse.conf
mkdir $udev
mv $out/etc $udev
'';
# Don't pull in SUID `fusermount{,3}` binaries into development environment.
propagatedBuildOutputs = [ "out" ];
meta = {
description = "Library that allows filesystems to be implemented in user space";
longDescription = ''
FUSE (Filesystem in Userspace) is an interface for userspace programs to
export a filesystem to the Linux kernel. The FUSE project consists of two
components: The fuse kernel module (maintained in the regular kernel
repositories) and the libfuse userspace library (this package). libfuse
provides the reference implementation for communicating with the FUSE
kernel module.
'';
homepage = "https://github.com/libfuse/libfuse";
changelog = "https://github.com/libfuse/libfuse/releases/tag/fuse-${version}";
platforms = lib.platforms.linux;
license = with lib.licenses; [
gpl2Only
lgpl21Only
];
maintainers = with lib.maintainers; [
oxalica
];
outputsToInstall = [ "bin" ];
};
}

View File

@@ -0,0 +1,20 @@
{ callPackage, util-linux }:
let
mkFuse =
args:
callPackage (import ./common.nix args) {
inherit util-linux;
};
in
{
fuse_2 = mkFuse {
version = "2.9.9";
hash = "sha256-dgjM6M7xk5MHi9xPyCyvF0vq0KM8UCsEYBcMhkrdvfs=";
};
fuse_3 = mkFuse {
version = "3.17.4";
hash = "sha256-G3+cBp8q8S8oLIcgWp0p+TAtzqXlKYbRSY/5Y3L7QO4=";
};
}

View File

@@ -0,0 +1,11 @@
--- a/lib/Makefile.am
+++ b/lib/Makefile.am
@@ -1,7 +1,7 @@
## Process this file with automake to produce Makefile.in
AUTOMAKE_OPTIONS = subdir-objects
-AM_CPPFLAGS = -I$(top_srcdir)/include -DFUSERMOUNT_DIR=\"$(bindir)\" \
+AM_CPPFLAGS = -I$(top_srcdir)/include \
-D_FILE_OFFSET_BITS=64 -D_REENTRANT -DFUSE_USE_VERSION=26
lib_LTLIBRARIES = libfuse.la libulockmgr.la

View File

@@ -0,0 +1,13 @@
diff --git a/configure.ac b/configure.ac
index 9946a0e..4621771 100644
--- a/configure.ac
+++ b/configure.ac
@@ -4,6 +4,8 @@ AC_PREREQ(2.59d)
AC_CONFIG_MACRO_DIR([m4])
AC_CANONICAL_TARGET
AM_INIT_AUTOMAKE([foreign])
+AM_GNU_GETTEXT_VERSION([0.25])
+AM_GNU_GETTEXT([external])
m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES(yes)])
AC_CONFIG_HEADERS(include/config.h)

View File

@@ -0,0 +1,13 @@
--- a/lib/meson.build
+++ b/lib/meson.build
@@ -37,8 +37,7 @@ libfuse = library('fuse3', libfuse_sources, version: meson.project_version(),
include_directories: include_dirs,
dependencies: deps,
install: true,
link_depends: 'fuse_versionscript',
- c_args: [ '-DFUSE_USE_VERSION=317',
- '-DFUSERMOUNT_DIR="@0@"'.format(fusermount_path) ],
+ c_args: [ '-DFUSE_USE_VERSION=317' ],
link_args: ['-Wl,--version-script,' + meson.current_source_dir()
+ '/fuse_versionscript' ])

View File

@@ -0,0 +1,27 @@
--- a/util/install_helper.sh 2023-08-26 22:12:11.028651669 +0200
+++ b/util/install_helper.sh 2023-08-26 22:38:03.165058694 +0200
@@ -39,12 +39,12 @@
if [ "${udevrulesdir}" != "" ]; then
install -D -m 644 "${MESON_SOURCE_ROOT}/util/udev.rules" \
- "${DESTDIR}${udevrulesdir}/99-fuse3.rules"
+ "${sysconfdir}${udevrulesdir}/99-fuse3.rules"
fi
if [ "$initscriptdir" != "" ]; then
install -D -m 755 "${MESON_SOURCE_ROOT}/util/init_script" \
- "${DESTDIR}${initscriptdir}/fuse3"
+ "${sysconfdir}${initscriptdir}/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
diff --git a/util/meson.build b/util/meson.build
index aa0e734..06d4378 100644
--- a/util/meson.build
+++ b/util/meson.build
@@ -1,4 +1,4 @@
-fuseconf_path = join_paths(get_option('prefix'), get_option('sysconfdir'), 'fuse.conf')
+fuseconf_path = join_paths('/', get_option('sysconfdir'), 'fuse.conf')
executable('fusermount3', ['fusermount.c', '../lib/mount_util.c'],
include_directories: include_dirs,