gnu: Add dirvish.
* gnu/packages/backup.scm (dirvish): New variable. Signed-off-by: Ricardo Wurmus <rekado@elephly.net>master
parent
a1777c77f0
commit
0ff4425cea
|
@ -6,6 +6,7 @@
|
||||||
;;; Copyright © 2017 Thomas Danckaert <post@thomasdanckaert.be>
|
;;; Copyright © 2017 Thomas Danckaert <post@thomasdanckaert.be>
|
||||||
;;; Copyright © 2017 Arun Isaac <arunisaac@systemreboot.net>
|
;;; Copyright © 2017 Arun Isaac <arunisaac@systemreboot.net>
|
||||||
;;; Copyright © 2017 Kei Kebreau <kkebreau@posteo.net>
|
;;; Copyright © 2017 Kei Kebreau <kkebreau@posteo.net>
|
||||||
|
;;; Copyright © 2017 Christopher Allan Webber <cwebber@dustycloud.org>
|
||||||
;;;
|
;;;
|
||||||
;;; This file is part of GNU Guix.
|
;;; This file is part of GNU Guix.
|
||||||
;;;
|
;;;
|
||||||
|
@ -690,3 +691,110 @@ using GnuPG. Backups can be stored on local hard disks, or online via
|
||||||
the SSH SFTP protocol. The backup server, if used, does not require
|
the SSH SFTP protocol. The backup server, if used, does not require
|
||||||
any special software, on top of SSH.")
|
any special software, on top of SSH.")
|
||||||
(license license:gpl3+)))
|
(license license:gpl3+)))
|
||||||
|
|
||||||
|
(define-public dirvish
|
||||||
|
(package
|
||||||
|
(name "dirvish")
|
||||||
|
(version "1.2.1")
|
||||||
|
(build-system gnu-build-system)
|
||||||
|
(source (origin
|
||||||
|
(method url-fetch)
|
||||||
|
(uri (string-append
|
||||||
|
"http://dirvish.org/dirvish-" version ".tgz"))
|
||||||
|
(sha256
|
||||||
|
(base32
|
||||||
|
"1kbxa1irszp2zw8hd5qzqnrrzb4vxfivs1vn64yxnj0lak1jjzvb"))))
|
||||||
|
(arguments
|
||||||
|
`(#:modules ((ice-9 match) (ice-9 rdelim)
|
||||||
|
,@%gnu-build-system-modules)
|
||||||
|
#:phases
|
||||||
|
;; This mostly mirrors the steps taken in the install.sh that ships
|
||||||
|
;; with dirvish, but simplified because we aren't prompting interactively
|
||||||
|
(modify-phases %standard-phases
|
||||||
|
(delete 'configure)
|
||||||
|
(delete 'build)
|
||||||
|
(delete 'check)
|
||||||
|
(replace 'install
|
||||||
|
(lambda* (#:key inputs outputs #:allow-other-keys)
|
||||||
|
;; These are mostly the same steps the install.sh that comes with
|
||||||
|
;; dirvish does
|
||||||
|
(let* (;; Files we'll be copying
|
||||||
|
(executables
|
||||||
|
'("dirvish" "dirvish-runall"
|
||||||
|
"dirvish-expire" "dirvish-locate"))
|
||||||
|
(man-pages
|
||||||
|
'(("dirvish" "8") ("dirvish-runall" "8")
|
||||||
|
("dirvish-expire" "8") ("dirvish-locate" "8")
|
||||||
|
("dirvish.conf" "5")))
|
||||||
|
|
||||||
|
(output-dir
|
||||||
|
(assoc-ref outputs "out"))
|
||||||
|
|
||||||
|
;; Just a default... not so useful on guixsd though
|
||||||
|
;; You probably want to a service with file(s) to point to.
|
||||||
|
(confdir "/etc/dirvish")
|
||||||
|
|
||||||
|
(perl (string-append (assoc-ref %build-inputs "perl")
|
||||||
|
"/bin/perl"))
|
||||||
|
(loadconfig.pl (call-with-input-file "loadconfig.pl"
|
||||||
|
read-string)))
|
||||||
|
|
||||||
|
|
||||||
|
(define (write-pl filename)
|
||||||
|
(define pl-header
|
||||||
|
(string-append "#!" perl "\n\n"
|
||||||
|
"$CONFDIR = \"" confdir "\";\n\n"))
|
||||||
|
(define input-file-location
|
||||||
|
(string-append filename ".pl"))
|
||||||
|
(define target-file-location
|
||||||
|
(string-append output-dir "/bin/" filename ".pl"))
|
||||||
|
(define text-to-write
|
||||||
|
(string-append pl-header
|
||||||
|
(call-with-input-file input-file-location
|
||||||
|
read-string)
|
||||||
|
"\n" loadconfig.pl))
|
||||||
|
(with-output-to-file target-file-location
|
||||||
|
(lambda ()
|
||||||
|
(display text-to-write)))
|
||||||
|
(chmod target-file-location #o755)
|
||||||
|
(wrap-program target-file-location
|
||||||
|
`("PERL5LIB" ":" prefix
|
||||||
|
,(map (lambda (l) (string-append (assoc-ref %build-inputs l)
|
||||||
|
"/lib/perl5/site_perl"))
|
||||||
|
'("perl-libtime-period"
|
||||||
|
"perl-libtime-parsedate")))))
|
||||||
|
|
||||||
|
(define write-man
|
||||||
|
(match-lambda
|
||||||
|
((file-base man-num)
|
||||||
|
(let* ((filename
|
||||||
|
(string-append file-base "." man-num))
|
||||||
|
(output-path
|
||||||
|
(string-append output-dir
|
||||||
|
"/share/man/man" man-num
|
||||||
|
"/" filename)))
|
||||||
|
(copy-file filename output-path)))))
|
||||||
|
|
||||||
|
;; Make directories
|
||||||
|
(mkdir-p (string-append output-dir "/bin/"))
|
||||||
|
(mkdir-p (string-append output-dir "/share/man/man8/"))
|
||||||
|
(mkdir-p (string-append output-dir "/share/man/man5/"))
|
||||||
|
|
||||||
|
;; Write out executables
|
||||||
|
(for-each write-pl executables)
|
||||||
|
;; Write out man pages
|
||||||
|
(for-each write-man man-pages)
|
||||||
|
#t))))))
|
||||||
|
(inputs
|
||||||
|
`(("perl" ,perl)
|
||||||
|
("rsync" ,rsync)
|
||||||
|
("perl-libtime-period" ,perl-libtime-period)
|
||||||
|
("perl-libtime-parsedate" ,perl-libtime-parsedate)))
|
||||||
|
(home-page "http://dirvish.org/")
|
||||||
|
(synopsis "Fast, disk based, rotating network backup system")
|
||||||
|
(description
|
||||||
|
"With dirvish you can maintain a set of complete images of your
|
||||||
|
filesystems with unattended creation and expiration. A dirvish backup vault
|
||||||
|
is like a time machine for your data. ")
|
||||||
|
(license (license:fsf-free "file://COPYING"
|
||||||
|
"Open Software License 2.0"))))
|
||||||
|
|
Reference in New Issue