diff options
Diffstat (limited to 'gnu/packages/backup.scm')
-rw-r--r-- | gnu/packages/backup.scm | 193 |
1 files changed, 147 insertions, 46 deletions
diff --git a/gnu/packages/backup.scm b/gnu/packages/backup.scm index 8d988a08a2..9884f58fc3 100644 --- a/gnu/packages/backup.scm +++ b/gnu/packages/backup.scm @@ -10,6 +10,7 @@ ;;; Copyright © 2017 Christopher Allan Webber <cwebber@dustycloud.org> ;;; Copyright © 2017 Rutger Helling <rhelling@mykolab.com> ;;; Copyright © 2018 Mark H Weaver <mhw@netris.org> +;;; Copyright © 2018 Oleg Pykhalov <go.wigust@gmail.com> ;;; ;;; This file is part of GNU Guix. ;;; @@ -32,6 +33,7 @@ #:use-module (guix download) #:use-module (guix utils) #:use-module (guix build-system gnu) + #:use-module (guix build-system go) #:use-module (guix build-system python) #:use-module (gnu packages) #:use-module (gnu packages acl) @@ -45,6 +47,7 @@ #:use-module (gnu packages ftp) #:use-module (gnu packages glib) #:use-module (gnu packages gnupg) + #:use-module (gnu packages golang) #:use-module (gnu packages gperf) #:use-module (gnu packages guile) #:use-module (gnu packages linux) @@ -64,7 +67,7 @@ (define-public duplicity (package (name "duplicity") - (version "0.7.12") + (version "0.7.17") (source (origin (method url-fetch) @@ -74,12 +77,13 @@ version ".tar.gz")) (sha256 (base32 - "1rhgrz2lm9vbfdp2raykrih1c6n2lw5jd572z4dsz488m52avjqi")))) + "0jmh3h09680xyf33hzxxxl74bwz66zqhzvjlj7j89r9rz3qwa91p")))) (build-system python-build-system) (native-inputs `(("util-linux" ,util-linux) ;setsid command, for the tests ("par2cmdline" ,par2cmdline) ("python-pexpect" ,python2-pexpect) + ("python-fasteners" ,python2-fasteners) ("mock" ,python2-mock))) (propagated-inputs `(("lockfile" ,python2-lockfile) @@ -143,7 +147,7 @@ spying and/or modification by the server.") `(#:phases (modify-phases %standard-phases (add-after 'unpack 'autoreconf - (lambda _ (zero? (system* "autoreconf" "-vfi"))))))) + (lambda _ (invoke "autoreconf" "-vfi")))))) (synopsis "File verification and repair tools") (description "Par2cmdline uses Reed-Solomon error-correcting codes to generate and verify PAR2 recovery files. These files can be distributed @@ -416,7 +420,7 @@ rdiff-backup is easy to use and settings have sensible defaults.") "t/backup_exec/conf/backup_exec.conf") (("/bin/true") (which "true")) (("/bin/false") (which "false"))) - (zero? (system* "make" "test"))))))) + (invoke "make" "test")))))) (inputs `(("perl" ,perl) ("rsync" ,rsync))) @@ -471,13 +475,13 @@ detection, and lossless compression.") (define-public borg (package (name "borg") - (version "1.1.5") + (version "1.1.6") (source (origin (method url-fetch) (uri (pypi-uri "borgbackup" version)) (sha256 - (base32 "0gbdnq7ks46diz6y2pf6wpwkb9hy6hp3immi7jg3h7w72b3ycmj3")) + (base32 "0c09j46fi8i7klas0bh82a4whlwnajshk0izkgax6fjxr1sf9lm1")) (modules '((guix build utils))) (snippet '(begin @@ -510,17 +514,6 @@ detection, and lossless compression.") ;; HOME=/homeless-shelter. (setenv "HOME" "/tmp") #t))) - ;; Later versions of msgpack were disallowed to some warnings and lack - ;; of support for Python versions that we don't support anyways. So, - ;; it's okay to to keep using more recents versions of msgpack for - ;; Borg. Also see the note about msgpack in the list of inputs. - ;; https://github.com/borgbackup/borg/issues/3517#issuecomment-357221978 - (add-before 'build 'adjust-msgpack-dependency - (lambda _ - (substitute* "setup.py" - (("msgpack-python>=0.4.6,<0.5.0") - "msgpack-python>=0.4.6")) - #t)) ;; The tests need to be run after Borg is installed. (delete 'check) (add-after 'install 'check @@ -530,25 +523,24 @@ detection, and lossless compression.") ;; The tests should be run in an empty directory. (mkdir-p "tests") (with-directory-excursion "tests" - (zero? - (system* "py.test" "-v" "--pyargs" "borg.testsuite" "-k" - (string-append - ;; These tests need to write to '/var'. - "not test_get_cache_dir " - "and not test_get_config_dir " - "and not test_get_keys_dir " - "and not test_get_security_dir " - ;; These tests assume there is a root user in - ;; '/etc/passwd'. - "and not test_access_acl " - "and not test_default_acl " - "and not test_non_ascii_acl " - ;; This test needs the unpackaged pytest-benchmark. - "and not benchmark " - ;; These tests assume the kernel supports FUSE. - "and not test_fuse " - "and not test_fuse_allow_damaged_files " - "and not test_mount_hardlinks")))))) + (invoke "py.test" "-v" "--pyargs" "borg.testsuite" "-k" + (string-append + ;; These tests need to write to '/var'. + "not test_get_cache_dir " + "and not test_get_config_dir " + "and not test_get_keys_dir " + "and not test_get_security_dir " + ;; These tests assume there is a root user in + ;; '/etc/passwd'. + "and not test_access_acl " + "and not test_default_acl " + "and not test_non_ascii_acl " + ;; This test needs the unpackaged pytest-benchmark. + "and not benchmark " + ;; These tests assume the kernel supports FUSE. + "and not test_fuse " + "and not test_fuse_allow_damaged_files " + "and not test_mount_hardlinks"))))) (add-after 'install 'install-doc (lambda* (#:key inputs outputs #:allow-other-keys) (let* ((out (assoc-ref outputs "out")) @@ -559,11 +551,9 @@ detection, and lossless compression.") "docs/misc/internals-picture.txt" "docs/misc/prune-example.txt")) (add-installed-pythonpath inputs outputs) - (and - (zero? (system* "python3" "setup.py" "build_man")) - (begin - (copy-recursively "docs/man" man) - #t)))))))) + (invoke "python3" "setup.py" "build_man") + (copy-recursively "docs/man" man) + #t)))))) (native-inputs `(("python-cython" ,python-cython) ("python-setuptools-scm" ,python-setuptools-scm) @@ -693,17 +683,17 @@ NTFS volumes using @code{ntfs-3g}, preserving NTFS-specific attributes.") (replace 'check (lambda _ (substitute* "obnamlib/vfs_local_tests.py" - ;; Check for the nobody user instead of root + ;; Check for the nobody user instead of root. (("self.fs.get_username\\(0\\), 'root'") "self.fs.get_username(65534), 'nobody'") - ;; Disable tests checking for root group + ;; Disable tests checking for root group. (("self.fs.get_groupname\\(0\\)") "'root'")) (substitute* "obnamlib/vfs_local.py" - ;; Don't cover get_groupname function + ;; Don't cover get_groupname function. (("def get_groupname\\(self, gid\\):") "def get_groupname(self, gid): # pragma: no cover")) - ;; Can't run network tests - (zero? (system* "./check" "--unit-tests"))))))) + ;; Can't run network tests. + (invoke "./check" "--unit-tests")))))) (inputs `(("python2-cliapp" ,python2-cliapp) ("python2-larch" ,python2-larch) @@ -832,3 +822,114 @@ file systems 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")))) + +(define-public restic + (package + (name "restic") + (version "0.9.1") + ;; TODO Try packaging the bundled / vendored dependencies in the 'vendor/' + ;; directory. + (source (origin + (method url-fetch) + (uri (string-append + "https://github.com/restic/restic/releases/download/" + "v" version "/restic-" version ".tar.gz")) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "15f0rsm2lxk4lmn4773q28g49p68pqyyx0ccp7r556asan73p79m")))) + (build-system go-build-system) + (arguments + `(#:import-path "github.com/restic/restic" + #:unpack-path "github.com/restic" + ;; We don't need to install the source code for end-user applications. + #:install-source? #f + #:phases + (modify-phases %standard-phases + (replace 'build + (lambda* (#:key inputs #:allow-other-keys) + (with-directory-excursion (string-append + "src/github.com/restic/restic-" + ,version) + (invoke "go" "run" "build.go")))) + + (replace 'install + (lambda* (#:key outputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out")) + (src (string-append "src/github.com/restic/restic-" + ,version))) + (install-file (string-append src "/restic") + (string-append out "/bin")) + #t))) + + (add-after 'install 'install-docs + (lambda* (#:key outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (man "/share/man") + (man-section (string-append man "/man")) + (src (string-append "src/github.com/restic/restic-" + ,version "/doc/man/"))) + ;; Install all the man pages to "out". + (for-each + (lambda (file) + (install-file file + (string-append out man-section + (string-take-right file 1)))) + (find-files src "\\.[1-9]")) + #t))) + + (add-after 'install-docs 'install-shell-completion + (lambda* (#:key outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (bin (string-append out "/bin")) + (etc (string-append out "/etc")) + (share (string-append out "/share"))) + (for-each + (lambda (shell) + (let* ((shell-name (symbol->string shell)) + (dir (string-append "etc/completion/" shell-name))) + (mkdir-p dir) + (invoke (string-append bin "/restic") "generate" + (string-append "--" shell-name "-completion") + (string-append dir "/" + (case shell + ((bash) "restic") + ((zsh) "_restic")))))) + '(bash zsh)) + (with-directory-excursion "etc/completion" + (install-file "bash/restic" + (string-append etc "/bash_completion.d")) + (install-file "zsh/_restic" + (string-append share "/zsh/site-functions"))) + #t)))))) + (home-page "https://restic.net/") + (synopsis "Backup program with multiple revisions, encryption and more") + (description "Restic is a program that does backups right and was designed +with the following principles in mind: + +@itemize +@item Easy: Doing backups should be a frictionless process, otherwise you +might be tempted to skip it. Restic should be easy to configure and use, so +that, in the event of a data loss, you can just restore it. Likewise, +restoring data should not be complicated. + +@item Fast: Backing up your data with restic should only be limited by your +network or hard disk bandwidth so that you can backup your files every day. +Nobody does backups if it takes too much time. Restoring backups should only +transfer data that is needed for the files that are to be restored, so that +this process is also fast. + +@item Verifiable: Much more important than backup is restore, so restic +enables you to easily verify that all data can be restored. @item Secure: +Restic uses cryptography to guarantee confidentiality and integrity of your +data. The location the backup data is stored is assumed not to be a trusted +environment (e.g. a shared space where others like system administrators are +able to access your backups). Restic is built to secure your data against +such attackers. + +@item Efficient: With the growth of data, additional snapshots should only +take the storage of the actual increment. Even more, duplicate data should be +de-duplicated before it is actually written to the storage back end to save +precious backup space. +@end itemize") + (license license:bsd-2))) |