From f77886c1c5f3c2bf33b78391cea5c4e5b2c05948 Mon Sep 17 00:00:00 2001 From: Oleg Pykhalov Date: Wed, 13 Jun 2018 22:17:05 +0300 Subject: gnu: Add restic. * gnu/packages/backup.scm (restic): New variable. --- gnu/packages/backup.scm | 112 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 112 insertions(+) (limited to 'gnu/packages') diff --git a/gnu/packages/backup.scm b/gnu/packages/backup.scm index 711bd32245..85764b073e 100644 --- a/gnu/packages/backup.scm +++ b/gnu/packages/backup.scm @@ -10,6 +10,7 @@ ;;; Copyright © 2017 Christopher Allan Webber ;;; Copyright © 2017 Rutger Helling ;;; Copyright © 2018 Mark H Weaver +;;; Copyright © 2018 Oleg Pykhalov ;;; ;;; This file is part of GNU Guix. ;;; @@ -32,6 +33,7 @@ (define-module (gnu packages backup) #: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 @@ (define-module (gnu packages backup) #: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) @@ -822,3 +825,112 @@ (define write-man is like a time machine for your data. ") (license (license:fsf-free "file://COPYING" "Open Software License 2.0")))) + +(define-public restic ; bundled / vendored dependencies + (package + (name "restic") + (version "0.9.1") + (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))) -- cgit v1.2.3