;;; Copyright © 2021 raid5atemyhomework <raid5atemyhomework@protonmail.com>
;;; Copyright © 2021 Stefan Reichör <stefan@xsteve.at>
;;; Copyright © 2021 Noisytoot <noisytoot@disroot.org>
+;;; Copyright © 2021 Jack Hill <jackhill@jackhill.us>
;;;
;;; This file is part of GNU Guix.
;;;
#:use-module (gnu packages kerberos)
#:use-module (gnu packages libffi)
#:use-module (gnu packages linux)
+ #:use-module (gnu packages markup)
#:use-module (gnu packages nfs)
#:use-module (gnu packages onc-rpc)
#:use-module (gnu packages openldap)
(license (list license:bsd-3 ; modules/cyrus-sasl.c
license:gpl2+)))) ; the rest
+(define-public bees
+ (package
+ (name "bees")
+ (version "0.6.5")
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/Zygo/bees")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "11ppbf23b8ngzfy02am0skxlybzmgsp6kna21jimb01x9pp1q7l7"))))
+ (build-system gnu-build-system)
+ (arguments
+ `(#:make-flags
+ (let ((out (assoc-ref %outputs "out")))
+ (list (string-append "CC=" ,(cc-for-target))
+ (string-append "DESTDIR=" out)
+ "LIBEXEC_PREFIX=/libexec"
+ "PREFIX=/"
+ "SYSTEMD_SYSTEM_UNIT_DIR=/lib/systemd/system"))
+ #:phases
+ (modify-phases %standard-phases
+ (replace 'configure
+ (lambda* (#:key outputs #:allow-other-keys)
+ (let ((out (assoc-ref outputs "out")))
+ (substitute* "src/Makefile"
+ (("^LDFLAGS.*")
+ (string-append "LDFLAGS=-L../lib -Wl,-rpath=" out "/lib"))))))
+ ;; Substitute external commands in beesds shell script with absolute
+ ;; store paths. When updating package, this phase is worth extra
+ ;; review.
+ (add-after 'configure 'patch-beesd
+ (lambda* (#:key inputs outputs #:allow-other-keys)
+ (let ((btrfs (assoc-ref inputs "btrfs-progs"))
+ (coreutils (assoc-ref inputs "coreutils"))
+ (gawk (assoc-ref inputs "gawk"))
+ (grep (assoc-ref inputs "grep"))
+ (out (assoc-ref outputs "out"))
+ (sed (assoc-ref inputs "sed"))
+ (util-linux (assoc-ref inputs "util-linux")))
+ (substitute* "scripts/beesd.in"
+ (("(readonly bees_bin=).*" _ start)
+ (string-append start out "/libexec/bees"))
+ (("\\$\\(blkid")
+ (string-append "$(" util-linux "/sbin/blkid"))
+ (("^([[:blank:]]+)btrfs([[:blank:]].*)" _ indent args)
+ (string-append indent (string-append btrfs "/bin/btrfs")
+ args))
+ (("([[:blank:]]+)chmod([[:blank:]]+)" _ before after)
+ (string-append before coreutils "/bin/chmod" after))
+ (("([[:blank:]]+)cut([[:blank:]]+)" _ before after)
+ (string-append before coreutils "/bin/cut" after))
+ (("\\$\\(egrep")
+ (string-append "$(" grep "/bin/egrep"))
+ (("\\$\\(du")
+ (string-append "$(" coreutils "/bin/du"))
+ (("([[:blank:]]+)awk([[:blank:]]+)" _ before after)
+ (string-append before gawk "/bin/awk" after))
+ (("([[:blank:]]+)grep([[:blank:]]+)" _ before after)
+ (string-append before grep "/bin/grep" after))
+ (("([[:blank:]]+)head([[:blank:]]+)" _ before after)
+ (string-append before coreutils "/bin/head" after))
+ (("^mkdir([[:blank:]]+)" _ after)
+ (string-append coreutils "/bin/mkdir" after))
+ (("^mount([[:blank:]]+)" _ after)
+ (string-append util-linux "/bin/mount" after))
+ (("([[:blank:]]+)mountpoint([[:blank:]]+)" _ before after)
+ (string-append before util-linux "/bin/mountpoint" after))
+ (("\\$\\(realpath")
+ (string-append "$(" coreutils "/bin/realpath"))
+ (("([[:blank:]]+)rm([[:blank:]]+)" _ before after)
+ (string-append before coreutils "/bin/rm" after))
+ (("([[:blank:]]+)sed([[:blank:]]+)" _ before after)
+ (string-append before sed "/bin/sed" after))
+ (("([[:blank:]]+)touch([[:blank:]]+)" _ before after)
+ (string-append before coreutils "/bin/touch" after))
+ (("([[:blank:]]+)truncate([[:blank:]]+)" _ before after)
+ (string-append before coreutils "/bin/truncate" after))
+ (("([[:blank:]]+)umount([[:blank:]]+)" _ before after)
+ (string-append before util-linux "/bin/umount" after))
+ (("([[:blank:]]+)uuidparse([[:blank:]]+)" _ before after)
+ (string-append before util-linux "/bin/uuidparse" after))))))
+ (add-after 'install 'install-docs
+ (lambda* (#:key outputs #:allow-other-keys)
+ (install-file "README.html"
+ (string-append (assoc-ref outputs "out") "/share/doc/"
+ ,name "-" ,version)))))
+ #:test-target "test"))
+ (native-inputs
+ `(("markdown" ,markdown)))
+ (inputs
+ `(("gawk" ,gawk)
+ ("btrfs-progs" ,btrfs-progs)
+ ("util-linux" ,util-linux "lib")))
+ (home-page "https://github.com/Zygo/bees")
+ (synopsis "Deduplication for btrfs")
+ (description "@acronym{BEES, Best-Effort Extent-Same} is a deduplication
+agent for btrfs. It scans a btrfs filesystem for duplicate blocks and submits
+them for deduplication. As new data are added to the filesystem, the BEES
+daemon will scan it.")
+ (license license:gpl3+)))
+
(define-public bindfs
(package
(name "bindfs")