gnu: Update zfs to 2.0.4.
[jackhill/guix/guix.git] / gnu / packages / file-systems.scm
CommitLineData
8d5fe1f1 1;;; GNU Guix --- Functional package management for GNU
81763bc1 2;;; Copyright © 2017, 2018, 2020, 2021 Tobias Geerinckx-Rice <me@tobias.gr>
7c5cc400 3;;; Copyright © 2017 Gábor Boskovits <boskovits@gmail.com>
4be3c3df 4;;; Copyright © 2017, 2018, 2021 Ricardo Wurmus <rekado@elephly.net>
083ce0ad 5;;; Copyright © 2018 Leo Famulari <leo@famulari.name>
09d800cb 6;;; Copyright © 2019, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
c341b2ad 7;;; Copyright © 2020 Raghav Gururajan <raghavgururajan@disroot.org>
6b219b89 8;;; Copyright © 2020 Morgan Smith <Morgan.J.Smith@outlook.com>
37495db6 9;;; Copyright © 2021 raid5atemyhomework <raid5atemyhomework@protonmail.com>
8d5fe1f1
TGR
10;;;
11;;; This file is part of GNU Guix.
12;;;
13;;; GNU Guix is free software; you can redistribute it and/or modify it
14;;; under the terms of the GNU General Public License as published by
15;;; the Free Software Foundation; either version 3 of the License, or (at
16;;; your option) any later version.
17;;;
18;;; GNU Guix is distributed in the hope that it will be useful, but
19;;; WITHOUT ANY WARRANTY; without even the implied warranty of
20;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21;;; GNU General Public License for more details.
22;;;
23;;; You should have received a copy of the GNU General Public License
24;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
25
26(define-module (gnu packages file-systems)
27 #:use-module ((guix licenses) #:prefix license:)
28 #:use-module (guix packages)
29 #:use-module (guix download)
7c5cc400 30 #:use-module (guix git-download)
083ce0ad 31 #:use-module (guix build-system cmake)
4960a955 32 #:use-module (guix build-system copy)
8d5fe1f1 33 #:use-module (guix build-system gnu)
4be3c3df 34 #:use-module (guix build-system go)
fe338d7f 35 #:use-module (guix build-system linux-module)
cfa7d0cb 36 #:use-module (guix build-system python)
37899445 37 #:use-module (guix build-system trivial)
12a24ee8 38 #:use-module (guix utils)
8d5fe1f1 39 #:use-module (gnu packages)
12a24ee8 40 #:use-module (gnu packages acl)
7c5cc400 41 #:use-module (gnu packages attr)
12a24ee8 42 #:use-module (gnu packages autotools)
59d97bb4 43 #:use-module (gnu packages base)
12a24ee8
RW
44 #:use-module (gnu packages bison)
45 #:use-module (gnu packages check)
46 #:use-module (gnu packages compression)
cd328a73 47 #:use-module (gnu packages crypto)
3b1ada0d 48 #:use-module (gnu packages curl)
5c10200b 49 #:use-module (gnu packages cyrus-sasl)
12a24ee8 50 #:use-module (gnu packages datastructures)
8d5fe1f1
TGR
51 #:use-module (gnu packages documentation)
52 #:use-module (gnu packages docbook)
12a24ee8 53 #:use-module (gnu packages flex)
59d97bb4 54 #:use-module (gnu packages gawk)
3b1ada0d 55 #:use-module (gnu packages glib)
c341b2ad 56 #:use-module (gnu packages gnupg)
4be3c3df 57 #:use-module (gnu packages golang)
5c10200b 58 #:use-module (gnu packages kerberos)
fe338d7f 59 #:use-module (gnu packages libffi)
8d5fe1f1 60 #:use-module (gnu packages linux)
fe338d7f 61 #:use-module (gnu packages nfs)
327bfe8d 62 #:use-module (gnu packages onc-rpc)
5c10200b 63 #:use-module (gnu packages openldap)
4c88ae7b 64 #:use-module (gnu packages photo)
8d5fe1f1 65 #:use-module (gnu packages pkg-config)
12a24ee8 66 #:use-module (gnu packages python)
cfa7d0cb
EF
67 #:use-module (gnu packages python-crypto)
68 #:use-module (gnu packages python-web)
4960a955 69 #:use-module (gnu packages python-xyz)
12a24ee8 70 #:use-module (gnu packages readline)
4960a955 71 #:use-module (gnu packages rsync)
5c10200b 72 #:use-module (gnu packages sssd)
cd0322a3 73 #:use-module (gnu packages sqlite)
8d5fe1f1 74 #:use-module (gnu packages tls)
cd328a73 75 #:use-module (gnu packages valgrind)
c92ec095 76 #:use-module (gnu packages version-control)
8d5fe1f1
TGR
77 #:use-module (gnu packages xml))
78
5c10200b
TGR
79(define-public autofs
80 (package
81 (name "autofs")
82 (version "5.1.6")
83 (source
84 (origin
85 (method url-fetch)
86 (uri (string-append "mirror://kernel.org/linux/daemons/autofs/"
87 "v" (version-major version) "/"
88 "autofs-" version ".tar.xz"))
89 (sha256
90 (base32 "1vya21mb4izj3khcr3flibv7xc15vvx2v0rjfk5yd31qnzcy7pnx"))))
91 (build-system gnu-build-system)
92 (arguments
93 `(#:configure-flags
94 (list "--enable-ignore-busy" ; during shutdown
95 "--enable-sloppy-mount" ; support mount(8) -s
96 "--with-libtirpc"
97 (string-append "--with-openldap="
98 (assoc-ref %build-inputs "openldap"))
99 (string-append "--with-sasl="
100 (assoc-ref %build-inputs "cyrus-sasl"))
101 "HAVE_SSS_AUTOFS=1" ; required to make sssldir click
102 (string-append "sssldir="
103 (assoc-ref %build-inputs "sssd")
104 "/lib/sssd/modules"))
105 #:tests? #f ; no test suite
106 #:phases
107 (modify-phases %standard-phases
108 (add-before 'configure 'fix-hard-coded-search-path
109 (lambda _
110 (substitute* "configure"
111 (("^searchpath=\".*\"")
112 "searchpath=\"$PATH\""))
113 #t))
114 (add-before 'install 'omit-obsolete-lookup_nis.so-link
115 ;; Building lookup_yp.so depends on $(YPCLNT) but this doesn't,
116 ;; leading to a make error. Since it's broken, comment it out.
117 (lambda _
118 (substitute* "modules/Makefile"
119 (("ln -fs lookup_yp.so" match)
120 (string-append "# " match)))
121 #t)))))
122 (native-inputs
123 `(("bison" ,bison)
124 ("flex" ,flex)
125 ("pkg-config" ,pkg-config)
126 ("rpcsvc-proto" ,rpcsvc-proto)))
127 (inputs
128 `(("cyrus-sasl" ,cyrus-sasl)
129 ("e2fsprogs" ,e2fsprogs) ; for e[234]fsck
130 ("libtirpc" ,libtirpc)
131 ("libxml2" ,libxml2) ; needed for LDAP, SASL
132 ("mit-krb5" ,mit-krb5) ; needed for LDAP, SASL
133 ("nfs-utils" ,nfs-utils) ; for mount.nfs
134 ("openldap" ,openldap)
135 ("openssl" ,openssl) ; needed for SASL
136 ("sssd" ,sssd)
137 ("util-linux" ,util-linux))) ; for mount, umount
138 ;; XXX A directory index is the closest thing this has to a home page.
139 (home-page "https://www.kernel.org/pub/linux/daemons/autofs/")
140 (synopsis "Kernel-based automounter for Linux")
141 (description
142 "Autofs is a kernel-based automounter for use with the Linux autofs4
143module. It automatically mounts selected file systems when they are used and
144unmounts them after a set period of inactivity. This provides
145centrally-managed, consistent file names for users and applications, even in a
146large and/or frequently changing (network) environment.")
147 ;; fedfs/ is GPL-2-only but not built.
148 (license (list license:bsd-3 ; modules/cyrus-sasl.c
149 license:gpl2+)))) ; the rest
150
6b219b89
MS
151(define-public bindfs
152 (package
153 (name "bindfs")
f4618b13 154 (version "1.15.1")
6b219b89
MS
155 (source (origin
156 (method url-fetch)
157 (uri (string-append "https://bindfs.org/downloads/bindfs-"
158 version ".tar.gz"))
159 (sha256
160 (base32
f4618b13 161 "1av8dj9i1g0105fs5r9srqqsp7yahlhwc0yl8i1szyfdls23bp84"))))
6b219b89
MS
162 (build-system gnu-build-system)
163 (arguments
164 ;; XXX: The tests have no hope of passing until there is a "nogroup"
165 ;; entry (or at least some group to which the guix builder does
166 ;; not belong) in the /etc/group file of the build environment.
167 ;; Currently we do not have such a group. Disable tests for now.
168 '(#:tests? #f))
169 (native-inputs
170 ;; Native inputs to run the tests
171 ;; ("ruby" ,ruby)
172 ;; ("valgrind" ,valgrind)
173 ;; ("which" ,which)
174 `(("pkg-config" ,pkg-config)))
175 (inputs
176 `(("fuse" ,fuse)))
177 (home-page "https://bindfs.org")
178 (synopsis "Bind mount a directory and alter permission bits")
179 (description
180 "@command{bindfs} is a FUSE filesystem for mounting a directory to
181another location, similar to @command{mount --bind}. It can be used for:
182@itemize
183@item Making a directory read-only.
184@item Making all executables non-executable.
185@item Sharing a directory with a list of users (or groups).
186@item Modifying permission bits using rules with chmod-like syntax.
187@item Changing the permissions with which files are created.
188@end itemize ")
189 (license license:gpl2+)))
190
c92ec095
TGR
191(define-public davfs2
192 (package
193 (name "davfs2")
194 (version "1.6.0")
195 (source
196 (origin
197 (method url-fetch)
198 (uri (string-append "https://download.savannah.nongnu.org/releases/"
199 "davfs2/davfs2-" version ".tar.gz"))
200 (sha256
201 (base32 "0l1vnv5lfigciwg17p10zxwhzj4qw2d9kw30prr7g4dxhmb6fsrf"))))
202 (build-system gnu-build-system)
203 (arguments
204 `(#:configure-flags
205 (list "--sysconfdir=/etc" ; so man pages & binaries contain /etc
206 (string-append "--docdir=" (assoc-ref %outputs "out")
207 "/share/doc/" ,name "-" ,version)
208 (string-append "ssbindir=" (assoc-ref %outputs "out") "/sbin")
209 ;; The default ‘davfs2’ user and group don't exist on most systems.
210 "dav_user=nobody"
211 "dav_group=nogroup")
212 #:phases
213 (modify-phases %standard-phases
214 (add-after 'unpack 'omit-redundancy
215 ;; Don't install redundant copies of /etc examples into /share.
216 (lambda _
217 (substitute* "etc/Makefile.in"
218 (("(dist_pkgdata_DATA =.*) davfs2.conf secrets(.*)"
219 _ prefix suffix)
220 (string-append prefix suffix)))
221 #t))
222 (add-after 'unpack 'patch-file-names
223 (lambda _
224 ;; Don't auto-load the FUSE kernel module. That's up to root.
225 ;; XXX If/when we restore the previous behaviour, make sure not
226 ;; to introduce a security hole when mount.davfs is setuid.
227 (substitute* "src/kernel_interface.c"
228 (("/sbin/modprobe") "/modprobe/disabled"))
229 #t))
230 (replace 'install
231 (lambda* (#:key make-flags outputs #:allow-other-keys)
232 (let ((out (assoc-ref outputs "out")))
233 (apply invoke "make" "install"
234 (string-append "pkgsysconfdir=" out "/etc")
235 make-flags)))))))
236 (inputs
237 `(("neon" ,neon)
238
239 ;; Neon requires but doesn't propagate zlib, nor would we want that.
240 ;; XZ as well, but that's already present in the build environment.
241 ("zlib" ,zlib)))
242 (home-page "https://savannah.nongnu.org/projects/davfs2")
243 (synopsis "Mount remote WebDAV resources in the local file system")
244 (description
245 "The @acronym{WebDAV, Web Distributed Authoring and Versioning} extension
246to the HTTP protocol defines a standard way to author resources on a remote Web
247server. Davfs2 exposes such resources as a typical filesystem which can be used
248by standard applications with no built-in support for WebDAV, such as the GNU
249coreutils (@command{cp}, @command{mv}, etc.) or a graphical word processor.
250
251Davfs2 works with most WebDAV servers with no or little configuration. It
252supports TLS (HTTPS), HTTP proxies, HTTP basic and digest authentication, and
253client certificates. It performs extensive caching to avoid unnecessary network
254traffic, stay responsive even over slow or unreliable connections, and prevent
255data loss. It aims to make use by unprivileged users as easy and secure as
256possible.
257
258However, davfs2 is not a full-featured WebDAV client. The file system interface
259and the WebDAV protocol are quite different. Translating between the two is not
260always possible.")
261 (license (list license:bsd-2 ; src/fuse_kernel.h
262 license:gpl3+)))) ; everything else
263
c341b2ad
TGR
264(define-public fsarchiver
265 (package
266 (name "fsarchiver")
faaf7ef3 267 (version "0.8.6")
c341b2ad
TGR
268 (source
269 (origin
270 (method git-fetch)
271 (uri
272 (git-reference
b0e7b699 273 (url "https://github.com/fdupoux/fsarchiver")
c341b2ad
TGR
274 (commit version)))
275 (file-name (git-file-name name version))
276 (sha256
faaf7ef3 277 (base32 "1ry2sdkfbg4bwcldk42g1i3wa3z4pr9yh9dil6ilhwcvhqiw41zc"))))
c341b2ad
TGR
278 (build-system gnu-build-system)
279 (native-inputs
280 `(("autoconf" ,autoconf)
281 ("automake" ,automake)
282 ("pkg-config" ,pkg-config)))
283 (inputs
284 `(("bzip2" ,bzip2)
285 ("e2fsprogs" ,e2fsprogs)
286 ("libgcrypt" ,libgcrypt)
287 ("lz4" ,lz4)
288 ("lzo" ,lzo)
289 ("util-linux" ,util-linux "lib")
290 ("xz" ,xz)
291 ("zlib" ,zlib)
292 ("zstd:lib" ,zstd "lib")))
0f30fe7e
TGR
293 (synopsis "File system back-up, deployment, and migration tool")
294 (description
295 "FSArchiver saves the contents of a file system to a compressed archive
296file, and restores it to a different file system and/or partition. This
297partition can be of a different size than the original and FSArchiver will
298create a new file system if none exists.
299
300All standard file attributes supported by the kernel are preserved, including
301file permissions, timestamps, symbolic and hard links, and extended attributes.
302
303Each file in the archive is protected by a checksum. If part of the archive
304is corrupted you'll lose the affected file(s) but not the whole back-up.")
bf8e1005 305 (home-page "https://www.fsarchiver.org/")
c341b2ad
TGR
306 (license license:gpl2)))
307
4c88ae7b
RG
308(define-public gphotofs
309 (package
310 (name "gphotofs")
311 (version "0.5.0")
312 (source
313 (origin
314 (method url-fetch)
315 (uri
316 (string-append "mirror://sourceforge/gphoto/gphotofs/" version
317 "/gphotofs-0.5.tar.gz"))
318 (sha256
319 (base32
320 "04slwhr6ap9xcc27wphk22ad8yn79ngyy5z10lxams3k5liahvc2"))))
321 (build-system gnu-build-system)
322 (native-inputs
323 `(("pkg-config" ,pkg-config)))
324 (inputs
325 `(("fuse" ,fuse)
326 ("glib" ,glib)
327 ("libgphoto2" ,libgphoto2)))
026959f0
TGR
328 (synopsis "Virtual file system for libgphoto2 using FUSE")
329 (description "GPhotoFS is a FUSE file system module to mount your camera as
330a file system on Linux. This allow using your camera with any tool able to read
331from a mounted file system.")
4c88ae7b
RG
332 (home-page "http://www.gphoto.org/proj/gphotofs/")
333 (license license:gpl2+)))
334
cd328a73 335(define-public bcachefs-tools
81763bc1
TGR
336 (let ((commit "612f6b9ab73c7f46e0254355b707d494a8ad9270")
337 (revision "3"))
cd328a73
TGR
338 (package
339 (name "bcachefs-tools")
340 (version (git-version "0.1" revision commit))
341 (source
342 (origin
343 (method git-fetch)
344 (uri (git-reference
345 (url "https://evilpiepirate.org/git/bcachefs-tools.git")
346 (commit commit)))
347 (file-name (git-file-name name version))
348 (sha256
81763bc1 349 (base32 "1a62wkv1i6pg5k1cjw7fzn933cbz8cp8y40cdpfd8rxjx0wg2szb"))))
cd328a73
TGR
350 (build-system gnu-build-system)
351 (arguments
352 `(#:make-flags
8dca40a3
TGR
353 (list ,(string-append "VERSION=" version) ; bogus vX.Y-nogit otherwise
354 (string-append "PREFIX=" (assoc-ref %outputs "out"))
cd328a73
TGR
355 "INITRAMFS_DIR=$(PREFIX)/share/initramfs-tools"
356 "CC=gcc"
357 "PYTEST=pytest")
358 #:phases
359 (modify-phases %standard-phases
59d97bb4
TGR
360 (delete 'configure) ; no configure script
361 (add-after 'install 'promote-mount.bcachefs.sh
362 ;; XXX The (optional) mount.bcachefs helper requires rust:cargo.
363 ;; This alternative shell script does the job well enough for now.
364 (lambda* (#:key inputs outputs #:allow-other-keys)
365 (let ((out (assoc-ref outputs "out")))
366 (with-directory-excursion (string-append out "/sbin")
367 (rename-file "mount.bcachefs.sh" "mount.bcachefs")
368 ;; WRAP-SCRIPT causes bogus ‘Insufficient arguments’ errors.
369 (wrap-program "mount.bcachefs"
370 `("PATH" ":" prefix
371 ,(cons (string-append out "/sbin")
372 (map (lambda (input)
373 (string-append (assoc-ref inputs input)
374 "/bin"))
375 (list "coreutils"
376 "gawk"
377 "util-linux"))))))))))
cd328a73
TGR
378 #:tests? #f)) ; XXX 6 valgrind tests fail
379 (native-inputs
380 `(("pkg-config" ,pkg-config)
381
382 ;; For tests.
383 ("python-pytest" ,python-pytest)
384 ("valgrind" ,valgrind)))
385 (inputs
c95fbe64
TGR
386 `(("eudev" ,eudev)
387 ("keyutils" ,keyutils)
cd328a73
TGR
388 ("libaio" ,libaio)
389 ("libscrypt" ,libscrypt)
390 ("libsodium" ,libsodium)
391 ("liburcu" ,liburcu)
59d97bb4 392 ("util-linux:lib" ,util-linux "lib") ; lib{blkid,uuid}
cd328a73
TGR
393 ("lz4" ,lz4)
394 ("zlib" ,zlib)
59d97bb4
TGR
395 ("zstd:lib" ,zstd "lib")
396
397 ;; Only for mount.bcachefs.sh.
398 ("coreutils" ,coreutils-minimal)
399 ("gawk" ,gawk)
400 ("util-linux" ,util-linux)))
cd328a73
TGR
401 (home-page "https://bcachefs.org/")
402 (synopsis "Tools to create and manage bcachefs file systems")
403 (description
8ccc77a4 404 "The bcachefs-tools are command-line utilities for creating, checking,
cd328a73
TGR
405and otherwise managing bcachefs file systems.
406
407Bcachefs is a @acronym{CoW, copy-on-write} file system supporting native
408encryption, compression, snapshots, and (meta)data checksums. It can use
409multiple block devices for replication and/or performance, similar to RAID.
410
411In addition, bcachefs provides all the functionality of bcache, a block-layer
412caching system, and lets you assign different roles to each device based on its
413performance and other characteristics.")
414 (license license:gpl2+))))
415
7c5f0642
TGR
416(define-public bcachefs-tools/static
417 (package
418 (inherit bcachefs-tools)
419 (name "bcachefs-tools-static")
420 (arguments
421 (substitute-keyword-arguments (package-arguments bcachefs-tools)
422 ((#:make-flags make-flags)
423 `(append ,make-flags
424 (list "LDFLAGS=-static")))))
425 (inputs
426 `(("eudev:static" ,eudev "static")
427 ("libscrypt:static" ,libscrypt "static")
428 ("lz4:static" ,lz4 "static")
429 ("util-linux:static" ,util-linux "static") ; lib{blkid,uuid}
430 ("zlib" ,zlib "static")
431 ("zstd:static" ,zstd "static")
432 ,@(package-inputs bcachefs-tools)))))
433
16611d1c
TGR
434(define-public bcachefs/static
435 (package
436 (name "bcachefs-static")
437 (version (package-version bcachefs-tools))
438 (build-system trivial-build-system)
439 (source #f)
440 (inputs
441 `(("bcachefs-tools" ,bcachefs-tools/static)))
442 (arguments
443 `(#:modules ((guix build utils))
444 #:builder
445 (begin
446 (use-modules (guix build utils)
447 (ice-9 ftw)
448 (srfi srfi-26))
449 (let* ((bcachefs-tools (assoc-ref %build-inputs "bcachefs-tools"))
450 (out (assoc-ref %outputs "out")))
451 (mkdir-p out)
452 (with-directory-excursion out
453 (install-file (string-append bcachefs-tools
454 "/sbin/bcachefs")
455 "sbin")
456 (remove-store-references "sbin/bcachefs")
457 (invoke "sbin/bcachefs" "version") ; test suite
458 #t)))))
459 (home-page (package-home-page bcachefs-tools))
460 (synopsis "Statically-linked bcachefs command from bcachefs-tools")
461 (description "This package provides the statically-linked @command{bcachefs}
462from the bcachefs-tools package. It is meant to be used in initrds.")
463 (license (package-license bcachefs-tools))))
464
d7aef3ab
TGR
465(define-public exfatprogs
466 (package
467 (name "exfatprogs")
096a66c6 468 (version "1.1.0")
d7aef3ab
TGR
469 (source
470 (origin
471 (method git-fetch)
472 (uri (git-reference
473 (url "https://github.com/exfatprogs/exfatprogs")
474 (commit version)))
475 (file-name (git-file-name name version))
476 (sha256
096a66c6 477 (base32 "1ciy28lx7c1vr1f138qi0mkz88pzlkay6nlwmp1yjzd830x48549"))))
d7aef3ab
TGR
478 (build-system gnu-build-system)
479 (arguments
480 `(#:configure-flags
481 (list "--disable-static")))
482 (native-inputs
483 `(("autoconf" ,autoconf)
484 ("automake" ,automake)
485 ("libtool" ,libtool)
486 ("pkg-config" ,pkg-config)))
487 (home-page "https://github.com/exfatprogs/exfatprogs")
488 (synopsis "Tools to create, check, and repair exFAT file systems")
489 (description
490 "These are command-line user space tools for the @acronym{exFAT,
491Extensible File Allocation Table} file systems. Included are
492@command{mkfs.exfat} to create (format) new exFAT file systems, and
493@command{fsck.exfat} to check their consistency and repair them.")
494 (license license:gpl2+)))
495
8d5fe1f1
TGR
496(define-public httpfs2
497 (package
498 (name "httpfs2")
499 (version "0.1.5")
500 (source
501 (origin
502 (method url-fetch)
c5edec09
TGR
503 (uri (string-append "mirror://sourceforge/httpfs/httpfs2/"
504 "httpfs2-" version ".tar.gz"))
8d5fe1f1
TGR
505 (sha256
506 (base32
507 "1h8ggvhw30n2r6w11n1s458ypggdqx6ldwd61ma4yd7binrlpjq1"))))
508 (build-system gnu-build-system)
509 (native-inputs
510 `(("asciidoc" ,asciidoc)
511 ("docbook-xml" ,docbook-xml)
512 ("libxml2" ,libxml2)
513 ("libxslt" ,libxslt)
514 ("pkg-config" ,pkg-config)))
515 (inputs
516 `(("fuse" ,fuse)
517 ("gnutls" ,gnutls)))
518 (arguments
519 `(#:phases
520 (modify-phases %standard-phases
521 (delete 'configure) ; no configure script
522 (replace 'install
523 ;; There's no ‘install’ target. Install all variants manually.
524 (lambda* (#:key outputs #:allow-other-keys)
525 (let* ((out (assoc-ref outputs "out"))
526 (bin (string-append out "/bin"))
527 (man1 (string-append out "/share/man/man1")))
528 (mkdir-p bin)
529 (mkdir-p man1)
530 (for-each
531 (lambda (variant)
532 (let ((man1-page (string-append variant ".1")))
533 (install-file variant bin)
534 (install-file man1-page man1)))
535 (list "httpfs2"
536 "httpfs2-mt"
537 "httpfs2-ssl"
538 "httpfs2-ssl-mt")))
539 #t)))
540 #:make-flags (list "CC=gcc")
541 #:parallel-build? #f ; can result in missing man pages
542 #:tests? #f)) ; no tests
543 (home-page "https://sourceforge.net/projects/httpfs/")
544 (synopsis "Mount remote files over HTTP")
545 (description "httpfs2 is a @code{fuse} file system for mounting any
546@dfn{HyperText} (HTTP or HTTPS) URL. It uses HTTP/1.1 byte ranges to request
547arbitrary bytes from the web server, without needing to download the entire
548file. This is particularly useful with large archives such as ZIP files and
549ISO images when you only need to inspect their contents or extract specific
550files. Since the HTTP protocol itself has no notion of directories, only a
551single file can be mounted.")
552 (license license:gpl2+)))
7c5cc400 553
e9e75da6
TGR
554(define-public jfsutils
555 (package
556 (name "jfsutils")
557 (version "1.1.15")
558 (source
559 (origin
560 (method url-fetch)
561 (uri (string-append "http://jfs.sourceforge.net/project/pub/jfsutils-"
562 version ".tar.gz"))
563 (sha256
564 (base32 "0kbsy2sk1jv4m82rxyl25gwrlkzvl3hzdga9gshkxkhm83v1aji4"))
565 (patches (search-patches "jfsutils-add-sysmacros.patch"
566 "jfsutils-include-systypes.patch"))))
567 (build-system gnu-build-system)
568 (inputs
bb93042c 569 `(("util-linux" ,util-linux "lib")))
e9e75da6
TGR
570 (home-page "http://jfs.sourceforge.net/home.html")
571 (synopsis "Utilities for managing JFS file systems")
572 (description
573 "The JFSutils are a collection of utilities for managing the @acronym{JFS,
574Journaled File System}, a 64-bit journaling file system created by IBM and later
575ported to the kernel Linux. The following commands are available:
576@enumerate
577@item @command{fsck.jfs}: check and repair a JFS file system or replay its
578transaction log.
579@item @command{logdump}: dump the JFS journal log.
580@item @command{logredo}: replay the JFS journal log.
581@item @command{mkfs.jfs}: create a new JFS file system.
582@item @command{xchklog}: save a JFS fsck log to a file.
583@item @command{xchkdmp}: dump the contents of such a log file.
584@item @command{xpeek}: a JFS file system editor with a shell-like interface.
585@end enumerate\n")
586 (license license:gpl3+))) ; no explicit version given
587
56dad973
TGR
588(define-public jfsutils/static
589 (static-package
590 (package
591 (inherit jfsutils)
592 (name "jfsutils-static")
593 (inputs
594 `(("util-linux:static" ,util-linux "static")
595 ,@(package-inputs jfsutils))))))
596
37899445
TGR
597(define-public jfs_fsck/static
598 (package
599 (name "jfs_fsck-static")
600 (version (package-version jfsutils))
601 (source #f)
602 (build-system trivial-build-system)
603 (arguments
604 `(#:modules ((guix build utils))
605 #:builder
606 (begin
607 (use-modules (guix build utils)
608 (ice-9 ftw)
609 (srfi srfi-26))
610 (let* ((jfsutils (assoc-ref %build-inputs "jfsutils"))
611 (fsck "jfs_fsck")
612 (out (assoc-ref %outputs "out"))
613 (sbin (string-append out "/sbin")))
614 (mkdir-p sbin)
615 (with-directory-excursion sbin
616 (install-file (string-append jfsutils "/sbin/" fsck)
617 ".")
618 (remove-store-references fsck)
619 (chmod fsck #o555))
620 #t))))
621 (inputs
622 `(("jfsutils" ,jfsutils/static)))
623 (home-page (package-home-page jfsutils))
624 (synopsis "Statically-linked jfs_fsck command from jfsutils")
625 (description "This package provides statically-linked jfs_fsck command taken
626from the jfsutils package. It is meant to be used in initrds.")
627 (license (package-license jfsutils))))
628
7c5cc400
GB
629(define-public disorderfs
630 (package
631 (name "disorderfs")
599c6414 632 (version "0.5.11")
7c5cc400
GB
633 (source
634 (origin
635 (method git-fetch)
636 (uri (git-reference
3b68a9b6
TGR
637 (url "https://salsa.debian.org/reproducible-builds/disorderfs.git")
638 (commit version)))
a1dc853e 639 (file-name (git-file-name name version))
7c5cc400
GB
640 (sha256
641 (base32
599c6414 642 "1pnrj0h8sgqwgsc18vz3fkqsp6vhigdbi75vdj0si1r6wgslnr7z"))))
7c5cc400
GB
643 (build-system gnu-build-system)
644 (native-inputs
645 `(("pkg-config" ,pkg-config)))
646 (inputs
647 `(("fuse" ,fuse)
648 ("attr" ,attr)))
649 (arguments
650 `(#:phases (modify-phases %standard-phases
becee702 651 (delete 'configure)) ; no configure script
7c5cc400
GB
652 #:make-flags (let ((out (assoc-ref %outputs "out")))
653 (list (string-append "PREFIX=" out)))
654 #:test-target "test"
655 ;; FIXME: Tests require 'run-parts' which is not in Guix yet.
656 #:tests? #f))
9b478eb7 657 (home-page "https://salsa.debian.org/reproducible-builds/disorderfs")
162a1374 658 (synopsis "FUSE file system that introduces non-determinism")
7c5cc400 659 (description
162a1374
TGR
660 "An overlay FUSE file system that introduces non-determinism
661into file system metadata. For example, it can randomize the order
7c5cc400
GB
662in which directory entries are read. This is useful for detecting
663non-determinism in the build process.")
664 (license license:gpl3+)))
665
12a24ee8
RW
666(define-public glusterfs
667 (package
668 (name "glusterfs")
327bfe8d 669 (version "7.0")
12a24ee8
RW
670 (source
671 (origin
672 (method url-fetch)
673 (uri (string-append "https://download.gluster.org/pub/gluster/glusterfs/"
327bfe8d
AM
674 (version-major version) "/"
675 (version-major+minor version) "/"
676 "glusterfs-" version ".tar.gz"))
12a24ee8
RW
677 (sha256
678 (base32
327bfe8d 679 "0yzhx710ypj0j3m5dcgmmgvkp7p0rmmp2p7ld0axrm4vpwc2b1wa"))))
12a24ee8
RW
680 (build-system gnu-build-system)
681 (arguments
682 `(#:configure-flags
327bfe8d
AM
683 (let ((out (assoc-ref %outputs "out"))
684 (p2 (assoc-ref %build-inputs "python-2")))
685 (list (string-append "PYTHON=" p2 "/bin/python")
686 (string-append "--with-initdir=" out "/etc/init.d")
687 (string-append "--with-mountutildir=" out "/sbin")
688 "--enable-cmocka" ; unit tests
689 ;; "--enable-debug" ; debug build options
690 ;; "--enable-asan" ; Address Sanitizer
691 ;; "--enable-tsan" ; ThreadSanitizer
692 ))
12a24ee8
RW
693 #:phases
694 (modify-phases %standard-phases
327bfe8d
AM
695 (add-before 'configure 'autogen
696 (lambda _ (invoke "./autogen.sh"))))))
12a24ee8 697 (native-inputs
327bfe8d 698 `(("pkg-config" ,pkg-config)
1628d57b
EF
699 ("libtirpc" ,libtirpc)
700 ("rpcsvc-proto" ,rpcsvc-proto)
12a24ee8
RW
701 ("python-2" ,python-2) ; must be version 2
702 ("flex" ,flex)
703 ("bison" ,bison)
327bfe8d
AM
704 ("libtool" ,libtool)
705 ("autoconf" ,autoconf)
706 ("automake" ,automake)
707 ("cmocka" ,cmocka)))
12a24ee8
RW
708 (inputs
709 `(("acl" ,acl)
1628d57b 710 ("fuse" ,fuse)
12a24ee8
RW
711 ("openssl" ,openssl)
712 ("liburcu" ,liburcu)
bb93042c 713 ("libuuid" ,util-linux "lib")
12a24ee8 714 ("libxml2" ,libxml2)
12a24ee8 715 ("readline" ,readline)
327bfe8d 716 ("zlib" ,zlib)
1628d57b
EF
717 ("libaio" ,libaio)
718 ("rdma-core" ,rdma-core)))
12a24ee8
RW
719 (home-page "https://www.gluster.org")
720 (synopsis "Distributed file system")
162a1374 721 (description "GlusterFS is a distributed scalable network file system
12a24ee8
RW
722suitable for data-intensive tasks such as cloud storage and media streaming.
723It allows rapid provisioning of additional storage based on your storage
724consumption needs. It incorporates automatic failover as a primary feature.
725All of this is accomplished without a centralized metadata server.")
726 ;; The user may choose either LGPLv3+ or GPLv2 only.
727 (license (list license:lgpl3+ license:gpl2+))))
3b1ada0d
DM
728
729(define-public curlftpfs
730 (package
731 (name "curlftpfs")
732 (version "0.9.2")
733 (source
734 (origin
735 (method url-fetch)
736 (uri (string-append "mirror://sourceforge/curlftpfs/curlftpfs/" version
737 "/curlftpfs-" version ".tar.gz"))
738 (sha256
739 (base32
740 "0n397hmv21jsr1j7zx3m21i7ryscdhkdsyqpvvns12q7qwwlgd2f"))))
741 (build-system gnu-build-system)
742 (arguments
743 `(#:phases
744 (modify-phases %standard-phases
745 (add-after 'unpack 'fix-test
746 (lambda _
747 ;; One of the 512-Byte block counts is definitely wrong.
748 ;; See <https://sourceforge.net/p/curlftpfs/bugs/73/>.
749 (substitute* "tests/ftpfs-ls_unittest.c"
750 (("4426192") "12814800"))
751 #t)))))
752 (inputs
753 `(("curl" ,curl)
754 ("glib" ,glib)
c695fb76 755 ("fuse" ,fuse)))
3b1ada0d
DM
756 (native-inputs
757 `(("pkg-config" ,pkg-config)))
758 (home-page "http://curlftpfs.sourceforge.net/")
759 (synopsis "Mount remote file systems over FTP")
760 (description
761 "This is a file system client based on the FTP File Transfer Protocol.")
762 (license license:gpl2+)))
083ce0ad 763
3b39ae9f
RW
764(define-public libnfs
765 (package
766 (name "libnfs")
767 (version "3.0.0")
768 (source (origin
769 (method git-fetch)
770 (uri (git-reference
b0e7b699 771 (url "https://github.com/sahlberg/libnfs")
3b39ae9f
RW
772 (commit (string-append "libnfs-" version))))
773 (file-name (git-file-name name version))
774 (sha256
775 (base32
776 "115p55y2cbs92z5lmcnjx1v29lwinpgq4sha9v1kq1vd8674h404"))))
777 (build-system gnu-build-system)
778 (home-page "https://github.com/sahlberg/libnfs")
779 (native-inputs
780 `(("autoconf" ,autoconf)
781 ("automake" ,automake)
782 ("libtool" ,libtool)
783 ("pkg-config" ,pkg-config)))
784 (synopsis "Client library for accessing NFS shares")
785 (description "LIBNFS is a client library for accessing NFS shares over a
786network. LIBNFS offers three different APIs, for different use :
787
788@enumerate
789@item RAW, a fully asynchronous low level RPC library for NFS protocols. This
790 API provides very flexible and precise control of the RPC issued.
791@item NFS ASYNC, a fully asynchronous library for high level vfs functions
792@item NFS SYNC, a synchronous library for high level vfs functions.
793@end enumerate\n")
794 (license (list license:lgpl2.1+ ; library
795 license:gpl3+ ; tests
796 license:bsd-3 ; copied nsf4 files
797 ))))
798
083ce0ad 799(define-public apfs-fuse
023eea68
LF
800 ;; Later versions require FUSE 3.
801 (let ((commit "7b89418e8dc27103d3c4f8fa348086ffcd634c17")
802 (revision "1"))
083ce0ad
LF
803 (package
804 (name "apfs-fuse")
805 (version (git-version "0.0.0" revision commit))
806 (source (origin
807 (method git-fetch)
808 (uri (git-reference
809 (url "https://github.com/sgan81/apfs-fuse")
810 (recursive? #t) ; for lzfse
811 (commit commit)))
812 (sha256
813 (base32
023eea68 814 "0x2siy3cmnm9wsdfazg3xc8r3kbg73gijmnn1vjw33pp71ckylxr"))
083ce0ad
LF
815 (file-name (git-file-name name version))))
816 (build-system cmake-build-system)
817 (arguments
818 `(#:tests? #f ; No test suite
023eea68
LF
819 #:configure-flags
820 '("-DUSE_FUSE3=OFF") ; FUSE 3 is not packaged yet.
083ce0ad
LF
821 #:phases
822 (modify-phases %standard-phases
823 ;; No 'install' target in CMakeLists.txt
824 (replace 'install
825 (lambda* (#:key outputs #:allow-other-keys)
826 (let* ((out (assoc-ref outputs "out"))
827 (bin (string-append out "/bin"))
828 (lib (string-append out "/lib"))
829 (doc (string-append out "/share/doc/"
830 (string-append ,name "-" ,version))))
831 (install-file "apfs-dump" bin)
832 (install-file "apfs-dump-quick" bin)
833 (install-file "apfs-fuse" bin)
834 (install-file "libapfs.a" lib)
023eea68 835 (install-file "../source/README.md" doc)
083ce0ad
LF
836 #t))))))
837 (inputs
838 `(("bzip2" ,bzip2)
839 ("fuse" ,fuse)
840 ("zlib" ,zlib)))
c1469ab6 841 (synopsis "Read-only FUSE driver for the APFS file system")
083ce0ad
LF
842 (description "APFS-FUSE is a read-only FUSE driver for the @dfn{Apple File
843System} (APFS). It is currently in an experimental state — it may not be able
844to read all files, and it does not support all the compression methods in
845APFS.")
846 (home-page "https://github.com/sgan81/apfs-fuse")
847 (license license:gpl2+))))
fe338d7f
EF
848
849(define-public zfs
850 (package
851 (name "zfs")
495a68e8 852 (version "2.0.4")
fe338d7f
EF
853 (outputs '("out" "module" "src"))
854 (source
855 (origin
856 (method url-fetch)
857 (uri (string-append "https://github.com/zfsonlinux/zfs/releases"
858 "/download/zfs-" version
859 "/zfs-" version ".tar.gz"))
860 (sha256
495a68e8 861 (base32 "0v2zshimz5miyj8mbskb52pnzyl1s4rhpr6208zq549v8g2l84vx"))))
fe338d7f
EF
862 (build-system linux-module-build-system)
863 (arguments
864 `(;; The ZFS kernel module should not be downloaded since the license
865 ;; terms don't allow for distributing it, only building it locally.
866 #:substitutable? #f
867 ;; Tests cannot run in an unprivileged build environment.
868 #:tests? #f
869 #:phases
870 (modify-phases %standard-phases
871 (add-after 'configure 'really-configure
872 (lambda* (#:key outputs inputs #:allow-other-keys)
873 (let ((out (assoc-ref outputs "out")))
874 (substitute* "configure"
2bde4a1d 875 (("-/bin/sh") (string-append "-" (which "sh"))))
fe338d7f
EF
876 (invoke "./configure"
877 "--with-config=all"
878 (string-append "--prefix=" out)
879 (string-append "--with-dracutdir=" out "/lib/dracut")
880 (string-append "--with-udevdir=" out "/lib/udev")
881 (string-append "--with-mounthelperdir=" out "/sbin")
882 (string-append "--with-linux="
883 (assoc-ref inputs "linux-module-builder")
884 "/lib/modules/build")))))
885 (add-after 'unpack 'patch-source
886 (lambda* (#:key inputs outputs #:allow-other-keys)
887 (let ((out (assoc-ref outputs "out"))
888 (src (assoc-ref outputs "src"))
889 (util-linux (assoc-ref inputs "util-linux"))
849e3dd0 890 (nfs-utils (assoc-ref inputs "nfs-utils"))
891 (kmod (assoc-ref inputs "kmod-runtime")))
e2fe0528 892 (substitute* "etc/Makefile.in"
893 ;; This just contains an example configuration file for
894 ;; configuring ZFS on traditional init systems, skip it
895 ;; since we cannot use it anyway; the install target becomes
896 ;; misdirected.
897 (("= default ") "= "))
898 (substitute* "lib/libzfs/os/linux/libzfs_util_os.c"
899 ;; Use path to /gnu/store/*-kmod in actual path that is exec'ed.
900 (("\"/sbin/modprobe\"")
901 (string-append "\"" kmod "/bin/modprobe" "\""))
902 ;; Just use 'modprobe' in message to user, since Guix
903 ;; does not have a traditional /sbin/
904 (("'/sbin/modprobe ") "'modprobe "))
2bde4a1d
TGR
905 (substitute* "contrib/Makefile.in"
906 ;; This is not configurable nor is its hard-coded /usr prefix.
907 ((" initramfs") ""))
e2fe0528 908 (substitute* "module/os/linux/zfs/zfs_ctldir.c"
fe338d7f
EF
909 (("/usr/bin/env\", \"umount")
910 (string-append util-linux "/bin/umount\", \"-n"))
911 (("/usr/bin/env\", \"mount")
912 (string-append util-linux "/bin/mount\", \"-n")))
e2fe0528 913 (substitute* "lib/libzfs/os/linux/libzfs_mount_os.c"
fe338d7f
EF
914 (("/bin/mount") (string-append util-linux "/bin/mount"))
915 (("/bin/umount") (string-append util-linux "/bin/umount")))
e2fe0528 916 (substitute* "lib/libshare/os/linux/nfs.c"
fe338d7f
EF
917 (("/usr/sbin/exportfs")
918 (string-append nfs-utils "/sbin/exportfs")))
919 (substitute* "config/zfs-build.m4"
920 (("\\$sysconfdir/init.d") (string-append out "/etc/init.d")))
921 (substitute* '("etc/zfs/Makefile.am"
922 "cmd/zed/Makefile.am")
923 (("\\$\\(sysconfdir)") (string-append out "/etc")))
924 (substitute* "cmd/vdev_id/vdev_id"
925 (("PATH=/bin:/sbin:/usr/bin:/usr/sbin")
926 (string-append "PATH="
927 (dirname (which "chmod")) ":"
928 (dirname (which "grep")) ":"
929 (dirname (which "sed")) ":"
930 (dirname (which "gawk")))))
931 (substitute* "contrib/pyzfs/Makefile.in"
932 ((".*install-lib.*") ""))
933 (substitute* '("Makefile.am" "Makefile.in")
849e3dd0 934 (("\\$\\(prefix)/src") (string-append src "/src")))
935 (substitute* (find-files "udev/rules.d/" ".rules.in$")
936 (("/sbin/modprobe") (string-append kmod "/bin/modprobe"))))
fe338d7f
EF
937 #t))
938 (replace 'build
939 (lambda _ (invoke "make")))
940 (replace 'install
941 (lambda* (#:key outputs inputs native-inputs #:allow-other-keys)
942 (let* ((out (assoc-ref outputs "out"))
943 (moddir (assoc-ref outputs "module"))
944 (kmod (assoc-ref (or native-inputs inputs) "kmod")))
945 (invoke "make" "install"
946 (string-append "DEFAULT_INITCONF_DIR=" out "/etc/default")
947 (string-append "DEPMOD=" kmod "/bin/depmod")
948 (string-append "INSTALL_PATH=" out)
949 (string-append "INSTALL_MOD_PATH=" moddir)
950 "INSTALL_MOD_STRIP=1")
951 (install-file "contrib/bash_completion.d/zfs"
952 (string-append out "/share/bash-completion/completions"))
fe338d7f
EF
953 #t))))))
954 (native-inputs
955 `(("attr" ,attr)
ed7f4d33 956 ("kmod" ,kmod)
fe338d7f
EF
957 ("pkg-config" ,pkg-config)))
958 (inputs
959 `(("eudev" ,eudev)
849e3dd0 960 ("kmod-runtime" ,kmod)
fe338d7f
EF
961 ("libaio" ,libaio)
962 ("libtirpc" ,libtirpc)
963 ("nfs-utils" ,nfs-utils)
964 ("openssl" ,openssl)
965 ("python" ,python)
966 ("python-cffi" ,python-cffi)
8d3184c5 967 ("util-linux" ,util-linux)
968 ("util-linux:lib" ,util-linux "lib")
fe338d7f
EF
969 ("zlib" ,zlib)))
970 (home-page "https://zfsonlinux.org/")
495a68e8 971 (synopsis "OpenZFS on Linux")
fe338d7f 972 (description
495a68e8 973 "OpenZFS is an advanced file system and volume manager which was
fe338d7f
EF
974originally developed for Solaris and is now maintained by the OpenZFS
975community.")
976 (license license:cddl1.0)))
639bcf20
LDB
977
978(define-public mergerfs
979 (package
980 (name "mergerfs")
f13849a5 981 (version "2.31.0")
639bcf20
LDB
982 (source
983 (origin
984 (method url-fetch)
985 (uri (string-append "https://github.com/trapexit/mergerfs/releases/download/"
986 version "/mergerfs-" version ".tar.gz"))
987 (sha256
988 (base32
f13849a5 989 "0k4asbg5n9dhy5jpjkw6simqqnr1zira2y4i71cq05091dfwm90p"))))
639bcf20
LDB
990 (build-system gnu-build-system)
991 (arguments
992 `(#:tests? #f ; No tests exist.
993 #:phases
994 (modify-phases %standard-phases
995 (delete 'configure)
996 (add-after 'unpack 'fix-paths
997 (lambda* (#:key inputs outputs #:allow-other-keys)
998 (setenv "CC" "gcc")
999 ;; These were copied from the package libfuse.
1000 (substitute* '("libfuse/lib/mount_util.c" "libfuse/util/mount_util.c")
1001 (("/bin/(u?)mount" _ maybe-u)
1002 (string-append (assoc-ref inputs "util-linux")
1003 "/bin/" maybe-u "mount")))
1004 (substitute* '("libfuse/util/mount.mergerfs.c")
1005 (("/bin/sh")
1006 (which "sh")))
1007 ;; The Makefile does not allow overriding PREFIX via make variables.
1008 (substitute* '("Makefile" "libfuse/Makefile")
1009 (("= /usr/local") (string-append "= " (assoc-ref outputs "out")))
f13849a5 1010 (("= /sbin") "= $(EXEC_PREFIX)/sbin")
639bcf20 1011 ;; cannot chown as build user
f13849a5 1012 (("chown root(:root)?") "true"))
639bcf20
LDB
1013 #t)))))
1014 ;; mergerfs bundles a heavily modified copy of libfuse.
1015 (inputs `(("util-linux" ,util-linux)))
1016 (home-page "https://github.com/trapexit/mergerfs")
052117f8
TGR
1017 (synopsis "Featureful union file system")
1018 (description "mergerfs is a union file system geared towards simplifying
639bcf20
LDB
1019storage and management of files across numerous commodity storage devices. It
1020is similar to mhddfs, unionfs, and aufs.")
1021 (license (list
1022 license:isc ; mergerfs
1023 license:gpl2 license:lgpl2.0 ; Imported libfuse code.
1024 ))))
4960a955
LDB
1025
1026(define-public mergerfs-tools
bd994bbb
LDB
1027 (let ((commit "480296ed03d1c3c7909697d7ef96d35840ee26b8")
1028 (revision "2"))
4960a955
LDB
1029 (package
1030 (name "mergerfs-tools")
1031 ;; No released version exists.
1032 (version (git-version "0.0" revision commit))
1033 (source
1034 (origin
1035 (method git-fetch)
1036 (uri (git-reference
b0e7b699 1037 (url "https://github.com/trapexit/mergerfs-tools")
4960a955
LDB
1038 (commit commit)))
1039 (file-name (git-file-name name version))
1040 (sha256
1041 (base32
bd994bbb 1042 "0xr06gi4xcr832rzy0hkp5c1n231s7w5iq1nkjvx9kvm0dl7chpq"))))
4960a955
LDB
1043 (build-system copy-build-system)
1044 (inputs
1045 `(("python" ,python)
1046 ("python-xattr" ,python-xattr)
1047 ("rsync" ,rsync)))
1048 (arguments
1049 '(#:install-plan
1050 '(("src/" "bin/"))
1051 #:phases
1052 (modify-phases %standard-phases
1053 (add-after 'unpack 'patch-paths
1054 (lambda* (#:key inputs #:allow-other-keys)
1055 (substitute* (find-files "src" "^mergerfs\\.")
1056 (("'rsync'")
1057 (string-append "'" (assoc-ref inputs "rsync") "/bin/rsync'"))
1058 (("'rm'")
1059 (string-append "'" (assoc-ref inputs "coreutils") "/bin/rm'")))
1060 (substitute* "src/mergerfs.mktrash"
1061 (("xattr")
1062 (string-append (assoc-ref inputs "python-xattr") "/bin/xattr"))
1063 (("mkdir")
1064 (string-append (assoc-ref inputs "coreutils") "/bin/mkdir")))
1065 #t)))))
1066 (synopsis "Tools to help manage data in a mergerfs pool")
1067 (description "mergerfs-tools is a suite of programs that can audit
1068permissions and ownership of files and directories on a mergerfs volume,
1069duplicates files and directories across branches in its pool, find and remove
1070duplicate files, balance pool drives, consolidate files in a single mergerfs
1071directory onto a single drive and create FreeDesktop.org Trash specification
1072compatible directories.")
1073 (home-page "https://github.com/trapexit/mergerfs-tools")
1074 (license license:isc))))
cfa7d0cb
EF
1075
1076(define-public python-dropbox
1077 (package
1078 (name "python-dropbox")
ab5fa99a 1079 (version "11.2.0")
cfa7d0cb
EF
1080 (source
1081 (origin
1082 (method url-fetch)
1083 (uri (pypi-uri "dropbox" version))
1084 (sha256
1085 (base32
ab5fa99a 1086 "0ml6z37k6nkhkiy483kvifs8im8z7vabd2g9jl6fkf1fzy3n6bym"))))
cfa7d0cb
EF
1087 (build-system python-build-system)
1088 (arguments '(#:tests? #f)) ; Tests require a network connection.
1089 (native-inputs
1090 `(("python-pytest" ,python-pytest)
1091 ("python-pytest-runner" ,python-pytest-runner)))
1092 (propagated-inputs
1093 `(("python-certifi" ,python-certifi)
1094 ("python-chardet" ,python-chardet)
1095 ("python-requests" ,python-requests)
1096 ("python-six" ,python-six)
ad68e30c 1097 ("python-stone" ,python-stone)
cfa7d0cb
EF
1098 ("python-urllib3" ,python-urllib3)))
1099 (home-page "https://www.dropbox.com/developers")
1100 (synopsis "Official Dropbox API Client")
1101 (description "This package provides a Python SDK for integrating with the
1102Dropbox API v2.")
1103 (license license:expat)))
e0945a02
EF
1104
1105(define-public dbxfs
1106 (package
1107 (name "dbxfs")
e81457aa 1108 (version "1.0.51")
e0945a02
EF
1109 (source
1110 (origin
1111 (method url-fetch)
1112 (uri (pypi-uri "dbxfs" version))
1113 (sha256
1114 (base32
e81457aa 1115 "1zz82d0mnql55397x4jx7z5rn857rf9zhjv895j93wpxdq10xwvk"))
e0945a02
EF
1116 (patches (search-patches "dbxfs-remove-sentry-sdk.patch"))))
1117 (build-system python-build-system)
1118 (arguments
1119 '(#:tests? #f)) ; tests requires safefs
1120 (propagated-inputs
1121 `(("python-appdirs" ,python-appdirs)
1122 ("python-block-tracing" ,python-block-tracing)
1123 ("python-dropbox" ,python-dropbox)
1124 ("python-keyring" ,python-keyring)
1125 ("python-keyrings.alt" ,python-keyrings.alt)
1126 ("python-privy" ,python-privy)
1127 ("python-userspacefs" ,python-userspacefs)))
1128 (home-page "https://github.com/rianhunter/dbxfs")
1129 (synopsis "User-space file system for Dropbox")
1130 (description
1131 "@code{dbxfs} allows you to mount your Dropbox folder as if it were a
7230f6d5 1132local file system using FUSE.")
e0945a02 1133 (license license:gpl3+)))
4be3c3df
RW
1134
1135(define-public go-github-com-hanwen-fuse
1136 (package
1137 (name "go-github-com-hanwen-fuse")
1138 (version "2.0.3")
1139 (source
1140 (origin
1141 (method git-fetch)
1142 (uri (git-reference
1143 (url "https://github.com/hanwen/go-fuse")
1144 (commit (string-append "v" version))))
1145 (file-name (git-file-name name version))
1146 (sha256
1147 (base32
1148 "1y44d08fxyis99s6jxdr6dbbw5kv3wb8lkhq3xmr886i4w41lz03"))))
1149 (build-system go-build-system)
1150 (arguments
1151 `(#:import-path "github.com/hanwen/go-fuse"))
1152 (propagated-inputs
1153 `(("go-golang-org-x-sys" ,go-golang-org-x-sys)))
1154 (home-page "https://github.com/hanwen/go-fuse")
1155 (synopsis "FUSE bindings for Go")
1156 (description
1157 "This package provides Go native bindings for the FUSE kernel module.")
1158 (license license:bsd-3)))
a4cc03a8
RW
1159
1160(define-public tmsu
1161 (package
1162 (name "tmsu")
1163 (version "0.7.5")
1164 (source
1165 (origin
1166 (method git-fetch)
1167 (uri (git-reference
1168 (url "https://github.com/oniony/TMSU")
1169 (commit (string-append "v" version))))
1170 (file-name (git-file-name name version))
1171 (sha256
1172 (base32
1173 "0834hah7p6ad81w60ifnxyh9zn09ddfgrll04kwjxwp7ypbv38wq"))))
1174 (build-system go-build-system)
1175 (arguments
1176 `(#:import-path "github.com/oniony/TMSU"
1177 #:unpack-path ".."))
1178 (inputs
1179 `(("go-github-com-mattn-go-sqlite3" ,go-github-com-mattn-go-sqlite3)
1180 ("go-github-com-hanwen-fuse" ,go-github-com-hanwen-fuse)))
1181 (home-page "https://github.com/oniony/TMSU")
1182 (synopsis "Tag files and access them through a virtual filesystem")
1183 (description
1184 "TMSU is a tool for tagging your files. It provides a simple
1185command-line utility for applying tags and a virtual filesystem to give you a
1186tag-based view of your files from any other program. TMSU does not alter your
1187files in any way: they remain unchanged on disk, or on the network, wherever
1188your put them. TMSU maintains its own database and you simply gain an
1189additional view, which you can mount where you like, based upon the tags you
1190set up.")
1191 (license license:gpl3+)))