gnu: cvs-fast-export: Update to 1.56.
[jackhill/guix/guix.git] / gnu / packages / backup.scm
CommitLineData
d1a5439b 1;;; GNU Guix --- Functional package management for GNU
c4a9182e 2;;; Copyright © 2014, 2015, 2020 Eric Bavier <bavier@posteo.net>
29a7c98a 3;;; Copyright © 2014 Ian Denhardt <ian@zenhack.net>
d265169b 4;;; Copyright © 2015, 2016, 2017 Leo Famulari <leo@famulari.name>
22ade268 5;;; Copyright © 2017, 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
0da4f365 6;;; Copyright © 2017 Thomas Danckaert <post@thomasdanckaert.be>
a2fa9c3d 7;;; Copyright © 2017 Arun Isaac <arunisaac@systemreboot.net>
3c8ba11a 8;;; Copyright © 2017 Kei Kebreau <kkebreau@posteo.net>
7d728270 9;;; Copyright © 2017, 2020 Efraim Flashner <efraim@flashner.co.il>
0ff4425c 10;;; Copyright © 2017 Christopher Allan Webber <cwebber@dustycloud.org>
44dd001d 11;;; Copyright © 2017 Rutger Helling <rhelling@mykolab.com>
1a3aa5ba 12;;; Copyright © 2018 Mark H Weaver <mhw@netris.org>
f77886c1 13;;; Copyright © 2018 Oleg Pykhalov <go.wigust@gmail.com>
4ac39960 14;;; Copyright © 2018, 2019, 2020 Ricardo Wurmus <rekado@elephly.net>
c824dedf 15;;; Copyright © 2019 Alex Vong <alexvong1995@gmail.com>
80ba43b5 16;;; Copyright © 2019 Marius Bakke <mbakke@fastmail.com>
5fd395db 17;;; Copyright © 2019 Mathieu Othacehe <m.othacehe@gmail.com>
61fc72d3 18;;; Copyright © 2020 Nicolas Goaziou <mail@nicolasgoaziou.fr>
c1f3382e 19;;; Copyright © 2020 Marcin Karpezo <sirmacik@wioo.waw.pl>
9d6863de 20;;; Copyright © 2020 Michael Rohleder <mike@rohleder.de>
ca5420d3 21;;; Copyright © 2021 Timothy Sample <samplet@ngyro.com>
d1a5439b
EB
22;;;
23;;; This file is part of GNU Guix.
24;;;
25;;; GNU Guix is free software; you can redistribute it and/or modify it
26;;; under the terms of the GNU General Public License as published by
27;;; the Free Software Foundation; either version 3 of the License, or (at
28;;; your option) any later version.
29;;;
30;;; GNU Guix is distributed in the hope that it will be useful, but
31;;; WITHOUT ANY WARRANTY; without even the implied warranty of
32;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
33;;; GNU General Public License for more details.
34;;;
35;;; You should have received a copy of the GNU General Public License
36;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
37
38(define-module (gnu packages backup)
39 #:use-module (guix packages)
b5b73a82 40 #:use-module ((guix licenses) #:prefix license:)
5cdbdc2b 41 #:use-module (guix git-download)
d1a5439b 42 #:use-module (guix download)
29a7c98a 43 #:use-module (guix utils)
4ac39960 44 #:use-module (guix build-system cmake)
2d762953 45 #:use-module (guix build-system gnu)
f77886c1 46 #:use-module (guix build-system go)
d1a5439b
EB
47 #:use-module (guix build-system python)
48 #:use-module (gnu packages)
0c146750 49 #:use-module (gnu packages acl)
f6875394 50 #:use-module (gnu packages autotools)
2d762953 51 #:use-module (gnu packages base)
ac257f12 52 #:use-module (gnu packages check)
2d762953 53 #:use-module (gnu packages compression)
19278d8d 54 #:use-module (gnu packages crypto)
362f496d 55 #:use-module (gnu packages databases)
7b9b203a 56 #:use-module (gnu packages datastructures)
255d1bbe 57 #:use-module (gnu packages dbm)
d42e6122 58 #:use-module (gnu packages dejagnu)
2903ee1e 59 #:use-module (gnu packages ftp)
548d4d81 60 #:use-module (gnu packages gettext)
2d762953 61 #:use-module (gnu packages glib)
d1a5439b 62 #:use-module (gnu packages gnupg)
f77886c1 63 #:use-module (gnu packages golang)
362f496d
LC
64 #:use-module (gnu packages gperf)
65 #:use-module (gnu packages guile)
ca5420d3 66 #:use-module (gnu packages guile-xyz)
335bc683 67 #:use-module (gnu packages linux)
2d762953 68 #:use-module (gnu packages mcrypt)
0b772051 69 #:use-module (gnu packages ncurses)
d42e6122 70 #:use-module (gnu packages nettle)
23b39478 71 #:use-module (gnu packages onc-rpc)
d42e6122 72 #:use-module (gnu packages pcre)
0da4f365 73 #:use-module (gnu packages perl)
2d762953 74 #:use-module (gnu packages pkg-config)
e1742318 75 #:use-module (gnu packages protobuf)
0c146750 76 #:use-module (gnu packages python)
cc6f4912 77 #:use-module (gnu packages python-crypto)
1b2f753d 78 #:use-module (gnu packages python-web)
44d10b1f 79 #:use-module (gnu packages python-xyz)
d1a5439b 80 #:use-module (gnu packages rsync)
2d762953 81 #:use-module (gnu packages ssh)
0c146750 82 #:use-module (gnu packages tls)
29a7c98a 83 #:use-module (gnu packages xml))
d1a5439b
EB
84
85(define-public duplicity
86 (package
87 (name "duplicity")
aeeb246a 88 (version "0.8.17")
d1a5439b
EB
89 (source
90 (origin
91 (method url-fetch)
92 (uri (string-append "https://code.launchpad.net/duplicity/"
29a7c98a 93 (version-major+minor version)
d1a5439b
EB
94 "-series/" version "/+download/duplicity-"
95 version ".tar.gz"))
96 (sha256
aeeb246a 97 (base32 "114rwkf9b3h4fcagrx013sb7krc4hafbwl9gawjph2wd9pkv2wx2"))))
d1a5439b
EB
98 (build-system python-build-system)
99 (native-inputs
fccc0127 100 `(("gettext" ,gettext-minimal) ; for msgfmt
548d4d81 101 ("util-linux" ,util-linux) ; setsid command, for the tests
8ef8de79 102 ("par2cmdline" ,par2cmdline)
548d4d81
EB
103 ("python-fasteners" ,python-fasteners)
104 ("python-future" ,python-future) ; for tests
105 ("python-pexpect" ,python-pexpect)
106 ("python-pytest" ,python-pytest)
107 ("python-pytest-runner" ,python-pytest-runner)
108 ("python-setuptools-scm" ,python-setuptools-scm)
5a8ef3c1 109 ("tzdata" ,tzdata-for-tests)
548d4d81 110 ("mock" ,python-mock)))
2903ee1e 111 (propagated-inputs
548d4d81
EB
112 `(("lockfile" ,python-lockfile)
113 ("urllib3" ,python-urllib3)))
d1a5439b 114 (inputs
548d4d81 115 `(("librsync" ,librsync)
2903ee1e 116 ("lftp" ,lftp)
02489a66 117 ("gnupg" ,gnupg) ; gpg executable needed
5a8ef3c1 118 ("util-linux" ,util-linux))) ; for setsid
d1a5439b 119 (arguments
548d4d81 120 `(#:test-target "test"
ad04bd6b
MB
121 #:phases
122 (modify-phases %standard-phases
7bb7920f 123 (add-before 'build 'use-store-file-names
ad04bd6b 124 (lambda* (#:key inputs #:allow-other-keys)
8ef8de79 125 (substitute* "duplicity/gpginterface.py"
548d4d81 126 (("self.call = u'gpg'")
8ef8de79 127 (string-append "self.call = '" (assoc-ref inputs "gnupg") "/bin/gpg'")))
e61f092c 128
8ef8de79
MB
129 (substitute* '("testing/functional/__init__.py"
130 "testing/overrides/bin/lftp")
ad04bd6b 131 (("/bin/sh") (which "sh")))
8ef8de79
MB
132 #t))
133 (add-before 'check 'check-setup
134 (lambda* (#:key inputs #:allow-other-keys)
02489a66
TGR
135 (setenv "HOME" (getcwd)) ; gpg needs to write to $HOME
136 (setenv "TZDIR" ; some timestamp checks need TZDIR
ad04bd6b
MB
137 (string-append (assoc-ref inputs "tzdata")
138 "/share/zoneinfo"))
139 #t)))))
d1a5439b
EB
140 (home-page "http://duplicity.nongnu.org/index.html")
141 (synopsis "Encrypted backup using rsync algorithm")
142 (description
143 "Duplicity backs up directories by producing encrypted tar-format volumes
144and uploading them to a remote or local file server. Because duplicity uses
145librsync, the incremental archives are space efficient and only record the
146parts of files that have changed since the last backup. Because duplicity
147uses GnuPG to encrypt and/or sign these archives, they will be safe from
148spying and/or modification by the server.")
b0e3635e 149 (license license:gpl2+)))
2d762953 150
f6875394
BT
151(define-public par2cmdline
152 (package
153 (name "par2cmdline")
70a17df6 154 (version "0.8.1")
f6875394 155 (source (origin
5cdbdc2b
RW
156 (method git-fetch)
157 (uri (git-reference
b0e7b699 158 (url "https://github.com/Parchive/par2cmdline")
5cdbdc2b
RW
159 (commit (string-append "v" version))))
160 (file-name (git-file-name name version))
f6875394
BT
161 (sha256
162 (base32
70a17df6 163 "11mx8q29cr0sryd11awab7y4mhqgbamb1ss77rffjj6in8pb4hdk"))))
f6875394
BT
164 (native-inputs
165 `(("automake" ,automake)
166 ("autoconf" ,autoconf)))
167 (build-system gnu-build-system)
f6d59ecf
TGR
168 (synopsis "File verification and repair tools")
169 (description "Par2cmdline uses Reed-Solomon error-correcting codes to
170generate and verify PAR2 recovery files. These files can be distributed
171alongside the source files or stored together with back-ups to protect against
172transmission errors or @dfn{bit rot}, the degradation of storage media over
173time.
174Unlike a simple checksum, PAR2 doesn't merely detect errors: as long as the
a2dd9270
TGR
175damage isn't too extensive (and smaller than the size of the recovery file), it
176can even repair them.")
f6875394
BT
177 (home-page "https://github.com/Parchive/par2cmdline")
178 (license license:gpl3+)))
179
2d762953
EB
180(define-public hdup
181 (package
182 (name "hdup")
183 (version "2.0.14")
184 (source
185 (origin
186 (method url-fetch)
35d28c60 187 (uri "https://fossies.org/linux/privat/old/hdup-2.0.14.tar.bz2")
2d762953
EB
188 (sha256
189 (base32
190 "02bnczg01cyhajmm4rhbnc0ja0dd9ikv9fwv28asxh1rlx9yr0b7"))))
191 (build-system gnu-build-system)
192 (native-inputs `(("pkg-config" ,pkg-config)))
193 (inputs
194 `(("glib" ,glib)
195 ("tar" ,tar)
196 ("lzop" ,lzop)
197 ("mcrypt" ,mcrypt)
198 ("openssh" ,openssh)
199 ("gnupg" ,gnupg-1)))
200 (arguments
201 `(#:configure-flags
202 `(,(string-append "--sbindir=" (assoc-ref %outputs "out") "/bin"))
203 #:tests? #f))
4a635d3d
TGR
204 (home-page (string-append "http://web.archive.org/web/20150925223424/"
205 "http://archive.miek.nl/projects/hdup/index.html"))
2d762953
EB
206 (synopsis "Simple incremental backup tool")
207 (description
69b4ffcf 208 "Hdup2 is a backup utility, its aim is to make backup really simple. The
2d762953
EB
209backup scheduling is done by means of a cron job. It supports an
210include/exclude mechanism, remote backups, encrypted backups and split
211backups (called chunks) to allow easy burning to CD/DVD.")
b0e3635e
LC
212 (license license:gpl2)))
213
214(define-public libarchive
215 (package
216 (name "libarchive")
7e3533a4 217 (version "3.4.2")
b0e3635e
LC
218 (source
219 (origin
220 (method url-fetch)
549f4091 221 (uri (list (string-append "https://libarchive.org/downloads/libarchive-"
ef2782d7 222 version ".tar.xz")
549f4091
MB
223 (string-append "https://github.com/libarchive/libarchive"
224 "/releases/download/v" version "/libarchive-"
ef2782d7 225 version ".tar.xz")))
b0e3635e
LC
226 (sha256
227 (base32
7e3533a4 228 "18dd01ahs2hv74xm7axjc3yhq839p0x0s4vssvlmm8fknja09qfq"))))
b0e3635e
LC
229 (build-system gnu-build-system)
230 (inputs
80ba43b5 231 `(("bzip2" ,bzip2)
b0e3635e 232 ("libxml2" ,libxml2)
80ba43b5
MB
233 ("lzo" ,lzo)
234 ("nettle" ,nettle)
235 ("xz" ,xz)
236 ("zlib" ,zlib)
237 ("zstd" ,zstd "lib")))
b0e3635e 238 (arguments
f8071e9b
MB
239 `(#:configure-flags '("--disable-static")
240 #:phases
4ac8d486
EF
241 (modify-phases %standard-phases
242 (add-before 'build 'patch-pwd
243 (lambda _
244 (substitute* "Makefile"
6266b8bc
EF
245 (("/bin/pwd") (which "pwd")))
246 #t))
4ac8d486 247 (replace 'check
5fd395db
MO
248 (lambda* (#:key (tests? #t) #:allow-other-keys)
249 (if tests?
250 ;; XXX: The test_owner_parse, test_read_disk, and
251 ;; test_write_disk_lookup tests expect user 'root' to
252 ;; exist, but the chroot's /etc/passwd doesn't have
253 ;; it. Turn off those tests.
254 ;;
255 ;; XXX: Adjust test that fails with zstd 1.4.1
256 ;; because the default options compresses two bytes
257 ;; better than this test expects.
258 ;; https://github.com/libarchive/libarchive/issues/1226
259 (begin
260 (substitute* "libarchive/test/test_write_filter_zstd.c"
261 (("compression-level\", \"6\"")
262 "compression-level\", \"7\""))
263
264 ;; The tests allow one to disable tests matching a globbing pattern.
265 (invoke "make"
266 "libarchive_test"
267 "bsdcpio_test"
268 "bsdtar_test")
80ba43b5 269
5fd395db
MO
270 ;; XXX: This glob disables too much.
271 (invoke "./libarchive_test" "^test_*_disk*")
272 (invoke "./bsdcpio_test" "^test_owner_parse")
273 (invoke "./bsdtar_test"))
274 ;; Tests may be disabled if cross-compiling.
275 (format #t "Test suite not run.~%"))))
5294836d
LC
276 (add-after 'install 'add--L-in-libarchive-pc
277 (lambda* (#:key inputs outputs #:allow-other-keys)
278 (let* ((out (assoc-ref outputs "out"))
279 (lib (string-append out "/lib"))
280 (nettle (assoc-ref inputs "nettle"))
281 (libxml2 (assoc-ref inputs "libxml2"))
282 (xz (assoc-ref inputs "xz"))
283 (zlib (assoc-ref inputs "zlib"))
80ba43b5 284 (zstd (assoc-ref inputs "zstd"))
5294836d 285 (bzip2 (assoc-ref inputs "bzip2")))
1664e2ab
MB
286 ;; Embed absolute references to these inputs to avoid propagation.
287 (substitute* (list (string-append lib "/pkgconfig/libarchive.pc")
288 (string-append lib "/libarchive.la"))
5294836d
LC
289 (("-lnettle")
290 (string-append "-L" nettle "/lib -lnettle"))
291 (("-lxml2")
292 (string-append "-L" libxml2 "/lib -lxml2"))
293 (("-llzma")
294 (string-append "-L" xz "/lib -llzma"))
295 (("-lz")
296 (string-append "-L" zlib "/lib -lz"))
80ba43b5
MB
297 (("-lzstd")
298 (string-append "-L" zstd "/lib -lzstd"))
5294836d
LC
299 (("-lbz2")
300 (string-append "-L" bzip2 "/lib -lbz2")))
7ce9139f 301 #t))))))
c824dedf 302 (home-page "https://libarchive.org/")
b0e3635e
LC
303 (synopsis "Multi-format archive and compression library")
304 (description
305 "Libarchive provides a flexible interface for reading and writing
306archives in various formats such as tar and cpio. Libarchive also supports
307reading and writing archives compressed using various compression filters such
308as gzip and bzip2. The library is inherently stream-oriented; readers
309serially iterate through the archive, writers serially add things to the
35b9e423 310archive. In particular, note that there is currently no built-in support for
b0e3635e
LC
311random access nor for in-place modification.")
312 (license license:bsd-2)))
d42e6122
EB
313
314(define-public rdup
315 (package
316 (name "rdup")
fbf210cb 317 (version "1.1.15")
d42e6122
EB
318 (source
319 (origin
658ef2ec
TGR
320 (method git-fetch)
321 (uri (git-reference
b0e7b699 322 (url "https://github.com/miekg/rdup")
658ef2ec
TGR
323 (commit version)))
324 (file-name (git-file-name name version))
d42e6122 325 (sha256
658ef2ec 326 (base32 "0bzyv6qmnivxnv9nw7lnfn46k0m1dlxcjj53zcva6v8y8084l1iw"))))
d42e6122
EB
327 (build-system gnu-build-system)
328 (native-inputs
fbf210cb
TGR
329 `(("autoconf" ,autoconf)
330 ("automake" ,automake)
331 ("pkg-config" ,pkg-config)
332
333 ;; For tests.
d42e6122
EB
334 ("dejagnu" ,dejagnu)))
335 (inputs
d939b295
TGR
336 ;; XXX Compiling with nettle (encryption) support requires patching out
337 ;; -Werror from GNUmakefile.in. Then, rdup-tr-{en,de}crypt tests fail:
338 ;; free(): invalid pointer
339 ;; ** rdup-tr: SIGPIPE received, exiting
d42e6122
EB
340 `(("glib" ,glib)
341 ("pcre" ,pcre)
342 ("libarchive" ,libarchive)
d939b295 343 ("mcrypt" ,mcrypt)))
d42e6122
EB
344 (arguments
345 `(#:parallel-build? #f ;race conditions
dc1d3cde
KK
346 #:phases
347 (modify-phases %standard-phases
fbf210cb
TGR
348 (add-before 'build 'qualify-inputs
349 (lambda* (#:key inputs #:allow-other-keys)
350 ;; This script is full of pitfalls. Fix some that particularly
351 ;; affect Guix users & leave the rest as reader excercises.
352 (substitute* "rdup-simple"
353 ;; Use the input ‘mcrypt’, not whatever's in $PATH at run time.
354 (("([' ])mcrypt " all delimiter)
355 (string-append delimiter (which "mcrypt") " "))
356 ;; Avoid frivolous dependency on ‘which’ with a shell builtin.
357 (("which") "command -v"))
dc1d3cde 358 #t))
d939b295
TGR
359 (add-before 'check 'disable-encryption-tests
360 (lambda _
361 (for-each delete-file
362 (list "testsuite/rdup/rdup.rdup-tr-crypt.exp"
363 "testsuite/rdup/rdup.rdup-tr-decrypt.exp"
364 "testsuite/rdup/rdup.rdup-tr-encrypt.exp"))
365 #t))
dc1d3cde
KK
366 (add-before 'check 'pre-check
367 (lambda _
368 (setenv "HOME" (getcwd))
369 (substitute* "testsuite/rdup/rdup.rdup-up-t-with-file.exp"
370 (("/bin/cat") (which "cat")))
371 #t)))))
fbf210cb 372 (home-page "https://github.com/miekg/rdup")
d42e6122
EB
373 (synopsis "Provide a list of files to backup")
374 (description
375 "Rdup is a utility inspired by rsync and the plan9 way of doing backups.
376Rdup itself does not backup anything, it only print a list of absolute
e881752c 377file names to standard output. Auxiliary scripts are needed that act on this
d42e6122 378list and implement the backup strategy.")
b0e3635e 379 (license license:gpl3+)))
22c24621
EB
380
381(define-public btar
382 (package
383 (name "btar")
384 (version "1.1.1")
385 (source
386 (origin
387 (method url-fetch)
388 (uri (string-append "http://vicerveza.homeunix.net/~viric/soft/btar/"
389 "btar-" version ".tar.gz"))
390 (sha256
391 (base32
392 "0miklk4bqblpyzh1bni4x6lqn88fa8fjn15x1k1n8bxkx60nlymd"))))
393 (build-system gnu-build-system)
394 (inputs
584dbd85 395 `(("librsync" ,librsync-0.9)))
22c24621
EB
396 (arguments
397 `(#:make-flags `(,(string-append "PREFIX=" (assoc-ref %outputs "out"))
7d728270 398 ,(string-append "CC=" ,(cc-for-target)))
22c24621
EB
399 #:tests? #f ;test input not distributed
400 #:phases
dc1d3cde
KK
401 ;; no configure phase
402 (modify-phases %standard-phases
403 (delete 'configure))))
22c24621
EB
404 (home-page "http://viric.name/cgi-bin/btar/doc/trunk/doc/home.wiki")
405 (synopsis "Tar-compatible archiver")
406 (description
407 "Btar is a tar-compatible archiver which allows arbitrary compression and
408ciphering, redundancy, differential backup, indexed extraction, multicore
409compression, input and output serialisation, and tolerance to partial archive
410errors.")
b0e3635e 411 (license license:gpl3+)))
bd3fc08c
EB
412
413(define-public rdiff-backup
414 (package
415 (name "rdiff-backup")
0cd02631 416 (version "2.0.5")
bd3fc08c
EB
417 (source
418 (origin
419 (method url-fetch)
c4a9182e
EB
420 (uri (string-append "https://github.com/rdiff-backup/rdiff-backup/releases/"
421 "download/v" version "/rdiff-backup-" version ".tar.gz"))
bd3fc08c 422 (sha256
0cd02631 423 (base32 "11rvjcp77zwgkphz1kyf5yqgr3rlss7dm9xzmvpvc4lp99xq7drb"))))
bd3fc08c 424 (build-system python-build-system)
c4a9182e
EB
425 (native-inputs
426 `(("python-setuptools-scm" ,python-setuptools-scm)))
bd3fc08c 427 (inputs
c4a9182e
EB
428 `(("python" ,python)
429 ("librsync" ,librsync)))
bd3fc08c 430 (arguments
c4a9182e
EB
431 `(#:tests? #f)) ; Tests require root/sudo
432 (home-page "https://rdiff-backup.net/")
bd3fc08c
EB
433 (synopsis "Local/remote mirroring+incremental backup")
434 (description
435 "Rdiff-backup backs up one directory to another, possibly over a network.
436The target directory ends up a copy of the source directory, but extra reverse
437diffs are stored in a special subdirectory of that target directory, so you
438can still recover files lost some time ago. The idea is to combine the best
439features of a mirror and an incremental backup. Rdiff-backup also preserves
440subdirectories, hard links, dev files, permissions, uid/gid ownership,
441modification times, extended attributes, acls, and resource forks. Also,
442rdiff-backup can operate in a bandwidth efficient manner over a pipe, like
443rsync. Thus you can use rdiff-backup and ssh to securely back a hard drive up
444to a remote location, and only the differences will be transmitted. Finally,
e881752c 445rdiff-backup is easy to use and settings have sensible defaults.")
b0e3635e 446 (license license:gpl2+)))
0c146750 447
0da4f365
TD
448(define-public rsnapshot
449 (package
450 (name "rsnapshot")
c57c648b 451 (version "1.4.3")
0da4f365
TD
452 (source
453 (origin
454 (method url-fetch)
455 (uri (string-append
456 "https://github.com/rsnapshot/rsnapshot/releases/download/"
457 version "/rsnapshot-" version ".tar.gz"))
458 (sha256
c57c648b 459 (base32 "1lavqmmsf53pim0nvming7fkng6p0nk2a51k2c2jdq0l7snpl31b"))))
0da4f365
TD
460 (build-system gnu-build-system)
461 (arguments
462 `(#:phases
463 (modify-phases %standard-phases
464 (replace 'check
465 (lambda _
466 (substitute* '("t/cmd-post_pre-exec/conf/pre-true-post-true.conf"
467 "t/backup_exec/conf/backup_exec_fail.conf"
468 "t/backup_exec/conf/backup_exec.conf")
469 (("/bin/true") (which "true"))
470 (("/bin/false") (which "false")))
c57c648b
TGR
471
472 ;; Disable a test that tries to connect to localhost on port 22.
473 (delete-file "t/ssh_args/ssh_args.t.in")
474
4ce7c1b3 475 (invoke "make" "test"))))))
0da4f365
TD
476 (inputs
477 `(("perl" ,perl)
478 ("rsync" ,rsync)))
7969789e 479 (home-page "https://rsnapshot.org")
0da4f365 480 (synopsis "Deduplicating snapshot backup utility based on rsync")
162a1374 481 (description "rsnapshot is a file system snapshot utility based on rsync.
0da4f365
TD
482rsnapshot makes it easy to make periodic snapshots of local machines, and
483remote machines over SSH. To reduce the disk space required for each backup,
484rsnapshot uses hard links to deduplicate identical files.")
485 (license license:gpl2+)))
486
362f496d
LC
487(define-public libchop
488 (package
489 (name "libchop")
490 (version "0.5.2")
491 (source (origin
492 (method url-fetch)
493 (uri (string-append "mirror://savannah/libchop/libchop-"
494 version ".tar.gz"))
495 (sha256
496 (base32
497 "0fpdyxww41ba52d98blvnf543xvirq1v9xz1i3x1gm9lzlzpmc2g"))
23b39478
LC
498 (patches (search-patches "diffutils-gets-undeclared.patch"))
499 (modules '((guix build utils)))
500 (snippet
501 '(begin
502 ;; Include all the libtirpc headers necessary to get the
503 ;; definitions of 'u_int', etc.
504 (substitute* '("src/block-server.c"
505 "include/chop/block-server.h"
506 "utils/chop-block-server.c")
507 (("#include <rpc/(.*)\\.h>" _ header)
508 (string-append "#include <rpc/types.h>\n"
509 "#include <rpc/rpc.h>\n"
510 "#include <rpc/" header ".h>\n")))
511 #t))))
362f496d 512 (build-system gnu-build-system)
6d1a7ce8 513 (arguments
23b39478
LC
514 '(;; Link against libtirpc.
515 #:configure-flags '("LDFLAGS=-ltirpc -Wl,--as-needed")
516
517 #:phases (modify-phases %standard-phases
6d1a7ce8
LC
518 (add-before 'configure 'adjust-configure-script
519 (lambda _
520 ;; Mimic upstream commit
521 ;; 25750ab5ef82fd3cfce5205d5f1ef07b47098091.
522 (substitute* "configure"
523 (("GUILE=(.*)--variable bindir`" _ middle)
524 (string-append "GUILE=" middle
525 "--variable bindir`/guile")))
526 #t))
23b39478
LC
527 (add-before 'build 'set-libtirpc-include-path
528 (lambda* (#:key inputs #:allow-other-keys)
529 ;; Allow <rpc/rpc.h> & co. to be found.
530 (let ((libtirpc (assoc-ref inputs "libtirpc")))
531 (setenv "CPATH"
532 (string-append (getenv "CPATH")
533 ":" libtirpc
534 "/include/tirpc"))
535 #t)))
6d1a7ce8
LC
536 (add-before 'check 'skip-test
537 (lambda _
538 ;; XXX: This test fails (1) because current GnuTLS no
539 ;; longer supports OpenPGP authentication, and (2) for
540 ;; some obscure reason. Better skip it.
541 (setenv "XFAIL_TESTS" "utils/block-server")
542 #t)))))
362f496d
LC
543 (native-inputs
544 `(("guile" ,guile-2.0)
c9f898cd 545 ("gperf" ,gperf-3.0) ;see <https://bugs.gnu.org/32382>
23b39478
LC
546 ("pkg-config" ,pkg-config)
547 ("rpcsvc-proto" ,rpcsvc-proto))) ;for 'rpcgen'
362f496d
LC
548 (inputs
549 `(("guile" ,guile-2.0)
550 ("util-linux" ,util-linux)
23b39478 551 ("libtirpc" ,libtirpc)
362f496d
LC
552 ("gnutls" ,gnutls)
553 ("tdb" ,tdb)
554 ("bdb" ,bdb)
555 ("gdbm" ,gdbm)
556 ("libgcrypt" ,libgcrypt)
557 ("lzo" ,lzo)
558 ("bzip2" ,bzip2)
559 ("zlib" ,zlib)))
340978d7 560 (home-page "https://nongnu.org/libchop/")
362f496d
LC
561 (synopsis "Tools & library for data backup and distributed storage")
562 (description
563 "Libchop is a set of utilities and library for data backup and
564distributed storage. Its main application is @command{chop-backup}, an
565encrypted backup program that supports data integrity checks, versioning,
566distribution among several sites, selective sharing of stored data, adaptive
567compression, and more. The library itself implements storage techniques such
568as content-addressable storage, content hash keys, Merkle trees, similarity
569detection, and lossless compression.")
570 (license license:gpl3+)))
6fc5c11b
LF
571
572(define-public borg
573 (package
574 (name "borg")
8cb7854d 575 (version "1.1.16")
c4556777
TGR
576 (source
577 (origin
578 (method url-fetch)
579 (uri (pypi-uri "borgbackup" version))
580 (sha256
8cb7854d 581 (base32 "0l1dqfwrd9l34rg30cmzmq5bs6yha6kg4vy313jq611jsqj94mmw"))
c4556777
TGR
582 (modules '((guix build utils)))
583 (snippet
584 '(begin
5a3bf255
LF
585 ;; Delete files generated by Cython. We used to have a regex
586 ;; that created the list of generated files but Borg has
587 ;; added new non-generated C files that cause the regex to
588 ;; generate the wrong list.
c4556777 589 (for-each delete-file
5a3bf255 590 '("src/borg/algorithms/checksums.c"
e5406632
LF
591 "src/borg/algorithms/msgpack/_packer.cpp"
592 "src/borg/algorithms/msgpack/_unpacker.cpp"
5a3bf255
LF
593 "src/borg/chunker.c"
594 "src/borg/compress.c"
595 "src/borg/crypto/low_level.c"
596 "src/borg/hashindex.c"
597 "src/borg/item.c"
598 "src/borg/platform/darwin.c"
599 "src/borg/platform/freebsd.c"
600 "src/borg/platform/linux.c"
88205d2d
LF
601 "src/borg/platform/posix.c"
602 "src/borg/platform/syncfilerange.c"))
c4556777
TGR
603 ;; Remove bundled shared libraries.
604 (with-directory-excursion "src/borg/algorithms"
605 (for-each delete-file-recursively
d46fc636
TGR
606 (list "blake2" "lz4" "msgpack" "zstd")))
607 ;; Purge some msgpack references from setup.py or the resulting
608 ;; sources will be unbuildable.
609 (substitute* "setup.py"
610 ((".*Extension\\('borg\\.algorithms\\.msgpack\\..*") "")
611 (("msgpack_packer_source, msgpack_unpacker_source") ""))
6cbee49d 612 #t))))
6fc5c11b
LF
613 (build-system python-build-system)
614 (arguments
7db756f7 615 `(#:modules ((srfi srfi-26) ; for cut
c21b1a1f
LF
616 (guix build utils)
617 (guix build python-build-system))
618 #:phases
6fc5c11b
LF
619 (modify-phases %standard-phases
620 (add-after 'unpack 'set-env
621 (lambda* (#:key inputs #:allow-other-keys)
622 (let ((openssl (assoc-ref inputs "openssl"))
19278d8d 623 (libb2 (assoc-ref inputs "libb2"))
c4556777
TGR
624 (lz4 (assoc-ref inputs "lz4"))
625 (zstd (assoc-ref inputs "zstd")))
6fc5c11b 626 (setenv "BORG_OPENSSL_PREFIX" openssl)
19278d8d 627 (setenv "BORG_LIBB2_PREFIX" libb2)
c4556777
TGR
628 (setenv "BORG_LIBLZ4_PREFIX" lz4)
629 (setenv "BORG_LIBZSTD_PREFIX" zstd)
6fc5c11b 630 (setenv "PYTHON_EGG_CACHE" "/tmp")
b4f91d0e
LF
631 ;; The test 'test_return_codes[python]' fails when
632 ;; HOME=/homeless-shelter.
633 (setenv "HOME" "/tmp")
6fc5c11b 634 #t)))
d46fc636
TGR
635 (add-after 'unpack 'use-system-msgpack
636 (lambda _
637 (substitute* "src/borg/helpers.py"
638 (("prefer_system_msgpack = False")
639 "prefer_system_msgpack = True"))
640 #t))
b4f91d0e
LF
641 ;; The tests need to be run after Borg is installed.
642 (delete 'check)
643 (add-after 'install 'check
1d60f7c2
LF
644 (lambda* (#:key inputs outputs #:allow-other-keys)
645 ;; Make the installed package available for the test suite.
646 (add-installed-pythonpath inputs outputs)
8cb3e7e7
LF
647 ;; The tests should be run in an empty directory.
648 (mkdir-p "tests")
649 (with-directory-excursion "tests"
e252ec32
TGR
650 (invoke "py.test" "-v" "--pyargs" "borg.testsuite" "-k"
651 (string-append
652 ;; These tests need to write to '/var'.
653 "not test_get_cache_dir "
654 "and not test_get_config_dir "
655 "and not test_get_keys_dir "
656 "and not test_get_security_dir "
657 ;; These tests assume there is a root user in
658 ;; '/etc/passwd'.
659 "and not test_access_acl "
660 "and not test_default_acl "
661 "and not test_non_ascii_acl "
88205d2d 662 "and not test_create_stdin "
e252ec32
TGR
663 ;; This test needs the unpackaged pytest-benchmark.
664 "and not benchmark "
665 ;; These tests assume the kernel supports FUSE.
666 "and not test_fuse "
667 "and not test_fuse_allow_damaged_files "
14adb59a
TGR
668 "and not test_mount_hardlinks "
669 "and not test_readonly_mount ")))))
6fc5c11b 670 (add-after 'install 'install-doc
6ee4fd2a 671 (lambda* (#:key inputs outputs #:allow-other-keys)
6fc5c11b 672 (let* ((out (assoc-ref outputs "out"))
c21b1a1f
LF
673 (man (string-append out "/share/man/man1"))
674 (misc (string-append out "/share/borg/misc")))
675 (for-each (cut install-file <> misc)
676 '("docs/misc/create_chunker-params.txt"
677 "docs/misc/internals-picture.txt"
678 "docs/misc/prune-example.txt"))
e252ec32 679 (copy-recursively "docs/man" man)
9d6863de
MR
680 #t)))
681 (add-after 'install-docs 'install-shell-completions
682 (lambda* (#:key outputs #:allow-other-keys)
683 (let* ((out (assoc-ref outputs "out"))
684 (etc (string-append out "/etc"))
685 (share (string-append out "/share")))
686 (with-directory-excursion "scripts/shell_completions"
687 (install-file "bash/borg"
688 (string-append etc "/bash_completion.d"))
689 (install-file "zsh/_borg"
690 (string-append share "/zsh/site-functions"))
691 (install-file "fish/borg.fish"
692 (string-append share "/fish/vendor_completions.d")))
e252ec32 693 #t))))))
6fc5c11b 694 (native-inputs
f99cfc19
EF
695 `(("python-cython" ,python-cython)
696 ("python-setuptools-scm" ,python-setuptools-scm)
d4c0053e 697 ("python-pytest" ,python-pytest)))
6fc5c11b
LF
698 (inputs
699 `(("acl" ,acl)
19278d8d 700 ("libb2" ,libb2)
6fc5c11b
LF
701 ("lz4" ,lz4)
702 ("openssl" ,openssl)
703 ("python-llfuse" ,python-llfuse)
acb59d99
LF
704 ;; The Python msgpack library changed its name so Borg requires this
705 ;; transitional package for now:
706 ;; <https://bugs.gnu.org/30662>
707 ("python-msgpack" ,python-msgpack-transitional)
ec0de9d8 708 ("zstd" ,zstd "lib")))
6fc5c11b
LF
709 (synopsis "Deduplicated, encrypted, authenticated and compressed backups")
710 (description "Borg is a deduplicating backup program. Optionally, it
711supports compression and authenticated encryption. The main goal of Borg is to
712provide an efficient and secure way to backup data. The data deduplication
713technique used makes Borg suitable for daily backups since only changes are
714stored. The authenticated encryption technique makes it suitable for backups
715to not fully trusted targets. Borg is a fork of Attic.")
18533bcf 716 (home-page "https://www.borgbackup.org/")
6fc5c11b 717 (license license:bsd-3)))
b2fe9183 718
3b402139
TGR
719(define-public wimlib
720 (package
721 (name "wimlib")
d0e9a2ed 722 (version "1.13.3")
3b402139
TGR
723 (source (origin
724 (method url-fetch)
725 (uri (string-append "https://wimlib.net/downloads/"
1a05bce2 726 "wimlib-" version ".tar.gz"))
3b402139
TGR
727 (sha256
728 (base32
d0e9a2ed 729 "0zpsbl9iicc6y81xfl6kf8farwfsyrl63shc0idp654kgp8421wa"))))
3b402139
TGR
730 (build-system gnu-build-system)
731 (native-inputs
732 `(("pkg-config" ,pkg-config)))
733 (inputs
734 `(("fuse" ,fuse)
735 ("libxml2" ,libxml2)
736 ("ntfs-3g" ,ntfs-3g)
737 ("openssl" ,openssl)))
738 (arguments
739 `(#:configure-flags (list "--enable-test-support")))
740 (home-page "https://wimlib.net/")
741 (synopsis "WIM file manipulation library and utilities")
742 (description "wimlib is a C library and set of command-line utilities for
743creating, modifying, extracting, and mounting archives in the Windows Imaging
744Format (@dfn{WIM files}). It can capture and apply WIMs directly from and to
745NTFS volumes using @code{ntfs-3g}, preserving NTFS-specific attributes.")
746 ;; wimlib is dual-licenced under version 3 or later of either the GPL or
747 ;; LGPL, except those files explicitly marked as being released into the
748 ;; public domain (CC0) in their headers.
749 (license (list license:gpl3+
750 license:lgpl3+
751 license:cc0))))
a2fa9c3d 752
0ff4425c
CAW
753(define-public dirvish
754 (package
755 (name "dirvish")
756 (version "1.2.1")
757 (build-system gnu-build-system)
758 (source (origin
759 (method url-fetch)
760 (uri (string-append
761 "http://dirvish.org/dirvish-" version ".tgz"))
762 (sha256
763 (base32
764 "1kbxa1irszp2zw8hd5qzqnrrzb4vxfivs1vn64yxnj0lak1jjzvb"))))
765 (arguments
766 `(#:modules ((ice-9 match) (ice-9 rdelim)
767 ,@%gnu-build-system-modules)
768 #:phases
769 ;; This mostly mirrors the steps taken in the install.sh that ships
770 ;; with dirvish, but simplified because we aren't prompting interactively
771 (modify-phases %standard-phases
772 (delete 'configure)
773 (delete 'build)
774 (delete 'check)
775 (replace 'install
776 (lambda* (#:key inputs outputs #:allow-other-keys)
777 ;; These are mostly the same steps the install.sh that comes with
778 ;; dirvish does
779 (let* (;; Files we'll be copying
780 (executables
781 '("dirvish" "dirvish-runall"
782 "dirvish-expire" "dirvish-locate"))
783 (man-pages
784 '(("dirvish" "8") ("dirvish-runall" "8")
785 ("dirvish-expire" "8") ("dirvish-locate" "8")
786 ("dirvish.conf" "5")))
787
788 (output-dir
789 (assoc-ref outputs "out"))
790
791 ;; Just a default... not so useful on guixsd though
792 ;; You probably want to a service with file(s) to point to.
793 (confdir "/etc/dirvish")
794
795 (perl (string-append (assoc-ref %build-inputs "perl")
796 "/bin/perl"))
797 (loadconfig.pl (call-with-input-file "loadconfig.pl"
798 read-string)))
799
800
801 (define (write-pl filename)
802 (define pl-header
803 (string-append "#!" perl "\n\n"
804 "$CONFDIR = \"" confdir "\";\n\n"))
805 (define input-file-location
806 (string-append filename ".pl"))
807 (define target-file-location
808 (string-append output-dir "/bin/" filename ".pl"))
809 (define text-to-write
810 (string-append pl-header
811 (call-with-input-file input-file-location
812 read-string)
813 "\n" loadconfig.pl))
814 (with-output-to-file target-file-location
815 (lambda ()
816 (display text-to-write)))
817 (chmod target-file-location #o755)
818 (wrap-program target-file-location
819 `("PERL5LIB" ":" prefix
820 ,(map (lambda (l) (string-append (assoc-ref %build-inputs l)
821 "/lib/perl5/site_perl"))
822 '("perl-libtime-period"
823 "perl-libtime-parsedate")))))
824
825 (define write-man
826 (match-lambda
827 ((file-base man-num)
828 (let* ((filename
829 (string-append file-base "." man-num))
830 (output-path
831 (string-append output-dir
832 "/share/man/man" man-num
833 "/" filename)))
834 (copy-file filename output-path)))))
835
836 ;; Make directories
837 (mkdir-p (string-append output-dir "/bin/"))
838 (mkdir-p (string-append output-dir "/share/man/man8/"))
839 (mkdir-p (string-append output-dir "/share/man/man5/"))
840
841 ;; Write out executables
842 (for-each write-pl executables)
843 ;; Write out man pages
844 (for-each write-man man-pages)
845 #t))))))
846 (inputs
847 `(("perl" ,perl)
848 ("rsync" ,rsync)
849 ("perl-libtime-period" ,perl-libtime-period)
850 ("perl-libtime-parsedate" ,perl-libtime-parsedate)))
851 (home-page "http://dirvish.org/")
852 (synopsis "Fast, disk based, rotating network backup system")
853 (description
854 "With dirvish you can maintain a set of complete images of your
162a1374 855file systems with unattended creation and expiration. A dirvish backup vault
0ff4425c
CAW
856is like a time machine for your data. ")
857 (license (license:fsf-free "file://COPYING"
858 "Open Software License 2.0"))))
f77886c1 859
f49d6909 860(define-public restic
f77886c1
OP
861 (package
862 (name "restic")
40df1928 863 (version "0.9.6")
f49d6909
LF
864 ;; TODO Try packaging the bundled / vendored dependencies in the 'vendor/'
865 ;; directory.
f77886c1
OP
866 (source (origin
867 (method url-fetch)
868 (uri (string-append
869 "https://github.com/restic/restic/releases/download/"
870 "v" version "/restic-" version ".tar.gz"))
871 (file-name (string-append name "-" version ".tar.gz"))
872 (sha256
873 (base32
40df1928 874 "1zmh42aah32ah8w5n6ilz9bci0y2xrf8p7qshy3yf1lzm5gnbj0w"))))
f77886c1
OP
875 (build-system go-build-system)
876 (arguments
877 `(#:import-path "github.com/restic/restic"
f77886c1
OP
878 ;; We don't need to install the source code for end-user applications.
879 #:install-source? #f
880 #:phases
881 (modify-phases %standard-phases
882 (replace 'build
883 (lambda* (#:key inputs #:allow-other-keys)
fb098182 884 (with-directory-excursion "src/github.com/restic/restic"
9cac043c
TGR
885 ;; Disable 'restic self-update'. It makes little sense in Guix.
886 (substitute* "build.go" (("selfupdate") ""))
15595644 887 (setenv "HOME" (getcwd)) ; for $HOME/.cache/go-build
f77886c1
OP
888 (invoke "go" "run" "build.go"))))
889
4976ebdd
OP
890 (replace 'check
891 (lambda _
fb098182 892 (with-directory-excursion "src/github.com/restic/restic"
77389911
OP
893 ;; Disable FUSE tests.
894 (setenv "RESTIC_TEST_FUSE" "0")
4976ebdd
OP
895 (invoke "go" "run" "build.go" "--test"))))
896
f77886c1
OP
897 (replace 'install
898 (lambda* (#:key outputs #:allow-other-keys)
899 (let ((out (assoc-ref outputs "out"))
fb098182 900 (src "src/github.com/restic/restic"))
f77886c1
OP
901 (install-file (string-append src "/restic")
902 (string-append out "/bin"))
903 #t)))
904
905 (add-after 'install 'install-docs
906 (lambda* (#:key outputs #:allow-other-keys)
907 (let* ((out (assoc-ref outputs "out"))
908 (man "/share/man")
909 (man-section (string-append man "/man"))
fb098182 910 (src "src/github.com/restic/restic/doc/man/"))
f77886c1
OP
911 ;; Install all the man pages to "out".
912 (for-each
913 (lambda (file)
914 (install-file file
915 (string-append out man-section
916 (string-take-right file 1))))
917 (find-files src "\\.[1-9]"))
918 #t)))
919
920 (add-after 'install-docs 'install-shell-completion
921 (lambda* (#:key outputs #:allow-other-keys)
922 (let* ((out (assoc-ref outputs "out"))
923 (bin (string-append out "/bin"))
924 (etc (string-append out "/etc"))
925 (share (string-append out "/share")))
926 (for-each
927 (lambda (shell)
928 (let* ((shell-name (symbol->string shell))
929 (dir (string-append "etc/completion/" shell-name)))
930 (mkdir-p dir)
931 (invoke (string-append bin "/restic") "generate"
932 (string-append "--" shell-name "-completion")
933 (string-append dir "/"
934 (case shell
935 ((bash) "restic")
936 ((zsh) "_restic"))))))
937 '(bash zsh))
938 (with-directory-excursion "etc/completion"
939 (install-file "bash/restic"
940 (string-append etc "/bash_completion.d"))
941 (install-file "zsh/_restic"
942 (string-append share "/zsh/site-functions")))
943 #t))))))
944 (home-page "https://restic.net/")
945 (synopsis "Backup program with multiple revisions, encryption and more")
946 (description "Restic is a program that does backups right and was designed
947with the following principles in mind:
948
949@itemize
950@item Easy: Doing backups should be a frictionless process, otherwise you
951might be tempted to skip it. Restic should be easy to configure and use, so
952that, in the event of a data loss, you can just restore it. Likewise,
953restoring data should not be complicated.
954
955@item Fast: Backing up your data with restic should only be limited by your
956network or hard disk bandwidth so that you can backup your files every day.
957Nobody does backups if it takes too much time. Restoring backups should only
958transfer data that is needed for the files that are to be restored, so that
959this process is also fast.
960
961@item Verifiable: Much more important than backup is restore, so restic
962enables you to easily verify that all data can be restored. @item Secure:
963Restic uses cryptography to guarantee confidentiality and integrity of your
964data. The location the backup data is stored is assumed not to be a trusted
965environment (e.g. a shared space where others like system administrators are
966able to access your backups). Restic is built to secure your data against
967such attackers.
968
969@item Efficient: With the growth of data, additional snapshots should only
970take the storage of the actual increment. Even more, duplicate data should be
971de-duplicated before it is actually written to the storage back end to save
972precious backup space.
973@end itemize")
974 (license license:bsd-2)))
7b9b203a 975
61fc72d3
NG
976(define-public zbackup
977 (package
978 (name "zbackup")
979 (version "1.4.4")
980 (source
981 (origin
982 (method git-fetch)
983 (uri (git-reference
b0e7b699 984 (url "https://github.com/zbackup/zbackup")
61fc72d3
NG
985 (commit version)))
986 (file-name (git-file-name name version))
987 (sha256
988 (base32 "14l1kyxg7pccpax3d6qcpmdycb70kn3fxp1a59w64hqy2493hngl"))))
989 (build-system cmake-build-system)
990 (arguments
991 `(#:tests? #f)) ;no test
992 (inputs
993 `(("lzo" ,lzo)
994 ("libressl" ,libressl)
995 ("protobuf" ,protobuf)
996 ("xz" ,xz)
997 ("zlib" ,zlib)))
998 (home-page "http://zbackup.org")
999 (synopsis "Versatile deduplicating backup tool")
1000 (description
1001 "ZBackup is a globally-deduplicating backup tool, based on the
1002ideas found in Rsync. Feed a large @file{.tar} into it, and it will
1003store duplicate regions of it only once, then compress and optionally
1004encrypt the result. Feed another @file{.tar} file, and it will also
1005re-use any data found in any previous backups. This way only new
1006changes are stored, and as long as the files are not very different,
1007the amount of storage required is very low. Any of the backup files
1008stored previously can be read back in full at any time. The program
1009is format-agnostic, so you can feed virtually any files to it.")
1010 (license license:gpl2+)))
1011
c1f3382e
MK
1012(define-public dump
1013 (package
1014 (name "dump")
85243d0d 1015 (version "0.4b47")
c1f3382e
MK
1016 (source
1017 (origin
1018 (method url-fetch)
1019 (uri (string-append "mirror://sourceforge/dump/dump/"
1020 version "/dump-" version ".tar.gz"))
1021 (sha256
1022 (base32
85243d0d 1023 "1l2gzzxyqhinx1yqvj4yn9k8vx3iyqi1965dxf9kvvdv9zgaq8fh"))))
c1f3382e
MK
1024 (build-system gnu-build-system)
1025 (arguments
1026 `(#:configure-flags
1027 `("--sysconfdir=/etc"
1028 "--disable-readline"
1029 "--disable-rmt")))
1030 (native-inputs
1031 `(("pkg-config" ,pkg-config)))
1032 (inputs
85243d0d 1033 `(("openssl" ,openssl)
c1f3382e
MK
1034 ("zlib" ,zlib)
1035 ("util-linux" ,util-linux "lib")
1036 ("e2fsprogs" ,e2fsprogs)))
1037 (home-page "https://dump.sourceforge.io/")
a04deba2
TGR
1038 (synopsis "Ext2/3/4 file system dump/restore utilities")
1039 (description "Dump examines files in a file system, determines which ones
c1f3382e
MK
1040need to be backed up, and copies those files to a specified disk, tape or
1041other storage medium. Subsequent incremental backups can then be layered on
1042top of the full backup. The restore command performs the inverse function of
a04deba2 1043dump; it can restore a full backup of a file system. Single files and
c1f3382e 1044directory subtrees may also be restored from full or partial backups in
49478f9d 1045interactive mode.")
c1f3382e
MK
1046 (license license:bsd-3)))
1047
7b9b203a
RW
1048(define-public burp
1049 (package
1050 (name "burp")
805559ba 1051 (version "2.3.38")
5d26ba7e
TGR
1052 (source
1053 (origin
1054 (method git-fetch)
1055 (uri (git-reference
1056 (url "https://github.com/grke/burp")
1057 (commit version)))
1058 (sha256
805559ba 1059 (base32 "0m0s6rrgxn3l6bad45vyhks6iz6bwvd0f3rzdsc7l28gar79wsj6"))
5d26ba7e 1060 (file-name (git-file-name name version))))
7b9b203a 1061 (build-system gnu-build-system)
22ade268
TGR
1062 (arguments
1063 `(#:phases
1064 (modify-phases %standard-phases
1065 (add-before 'check 'extend-test-time-outs
1066 ;; The defaults are far too low for busy boxes & spinning storage.
1067 (lambda _
1068 (substitute* (find-files "utest" "\\.c$")
1069 (("(tcase_set_timeout\\(tc_core,)[ 0-9]*(\\);.*)$" _ prefix suffix)
1070 (string-append prefix " 3600" suffix "\n")))
1071 #t)))))
7b9b203a 1072 (inputs
9f38cdac
TGR
1073 `(("acl" ,acl)
1074 ("librsync" ,librsync)
0b772051 1075 ("ncurses" ,ncurses) ; for the live status monitor
7b9b203a
RW
1076 ("openssl" ,openssl)
1077 ("uthash" ,uthash)
1078 ("zlib" ,zlib)))
1079 (native-inputs
5d26ba7e
TGR
1080 `(("autoconf" ,autoconf)
1081 ("automake" ,automake)
e1409c76 1082 ("check" ,check-0.14)
7b9b203a
RW
1083 ("pkg-config" ,pkg-config)))
1084 (home-page "https://burp.grke.org")
1085 (synopsis "Differential backup and restore")
1086 (description "Burp is a network backup and restore program. It attempts
1087to reduce network traffic and the amount of space that is used by each
1088backup.")
1089 (license license:agpl3)))
ca5420d3
TS
1090
1091(define-public disarchive
1092 (package
1093 (name "disarchive")
1094 (version "0.2.0")
1095 (source (origin
1096 (method url-fetch)
1097 (uri (string-append "https://files.ngyro.com/disarchive/"
1098 "disarchive-" version ".tar.gz"))
1099 (sha256
1100 (base32
1101 "12d4r4i7vi8fxilr2aww6kzq56jax5ymhjfm3cpgx26vj4c70kb6"))))
1102 (build-system gnu-build-system)
1103 (native-inputs
1104 `(("autoconf" ,autoconf)
1105 ("automake" ,automake)
1106 ("pkg-config" ,pkg-config)
1107 ("guile-quickcheck" ,guile-quickcheck)))
1108 (inputs
1109 `(("guile" ,guile-3.0)
1110 ("zlib" ,zlib)))
1111 (propagated-inputs
1112 `(("guile-gcrypt" ,guile-gcrypt)))
1113 (home-page "https://ngyro.com/software/disarchive.html")
1114 (synopsis "Software archive disassembler")
1115 (description "Disarchive can disassemble software archives into data
1116and metadata. The goal is to create a small amount of metadata that
1117can be used to recreate a software archive bit-for-bit from the
1118original files. For example, a software archive made using tar and
1119Gzip will need to describe the order of files in the tarball and the
1120compression parameters used by Gzip.")
1121 (license license:gpl3+)))