mirror of
https://git.in.rschanz.org/ryan77627/guix.git
synced 2025-01-12 06:06:53 -05:00
gnu: Add restic.
* gnu/packages/backup.scm (restic): New variable.
This commit is contained in:
parent
e8b3a15849
commit
f77886c1c5
1 changed files with 112 additions and 0 deletions
|
@ -10,6 +10,7 @@
|
||||||
;;; Copyright © 2017 Christopher Allan Webber <cwebber@dustycloud.org>
|
;;; Copyright © 2017 Christopher Allan Webber <cwebber@dustycloud.org>
|
||||||
;;; Copyright © 2017 Rutger Helling <rhelling@mykolab.com>
|
;;; Copyright © 2017 Rutger Helling <rhelling@mykolab.com>
|
||||||
;;; Copyright © 2018 Mark H Weaver <mhw@netris.org>
|
;;; Copyright © 2018 Mark H Weaver <mhw@netris.org>
|
||||||
|
;;; Copyright © 2018 Oleg Pykhalov <go.wigust@gmail.com>
|
||||||
;;;
|
;;;
|
||||||
;;; This file is part of GNU Guix.
|
;;; This file is part of GNU Guix.
|
||||||
;;;
|
;;;
|
||||||
|
@ -32,6 +33,7 @@ (define-module (gnu packages backup)
|
||||||
#:use-module (guix download)
|
#:use-module (guix download)
|
||||||
#:use-module (guix utils)
|
#:use-module (guix utils)
|
||||||
#:use-module (guix build-system gnu)
|
#:use-module (guix build-system gnu)
|
||||||
|
#:use-module (guix build-system go)
|
||||||
#:use-module (guix build-system python)
|
#:use-module (guix build-system python)
|
||||||
#:use-module (gnu packages)
|
#:use-module (gnu packages)
|
||||||
#:use-module (gnu packages acl)
|
#:use-module (gnu packages acl)
|
||||||
|
@ -45,6 +47,7 @@ (define-module (gnu packages backup)
|
||||||
#:use-module (gnu packages ftp)
|
#:use-module (gnu packages ftp)
|
||||||
#:use-module (gnu packages glib)
|
#:use-module (gnu packages glib)
|
||||||
#:use-module (gnu packages gnupg)
|
#:use-module (gnu packages gnupg)
|
||||||
|
#:use-module (gnu packages golang)
|
||||||
#:use-module (gnu packages gperf)
|
#:use-module (gnu packages gperf)
|
||||||
#:use-module (gnu packages guile)
|
#:use-module (gnu packages guile)
|
||||||
#:use-module (gnu packages linux)
|
#:use-module (gnu packages linux)
|
||||||
|
@ -822,3 +825,112 @@ (define write-man
|
||||||
is like a time machine for your data. ")
|
is like a time machine for your data. ")
|
||||||
(license (license:fsf-free "file://COPYING"
|
(license (license:fsf-free "file://COPYING"
|
||||||
"Open Software License 2.0"))))
|
"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)))
|
||||||
|
|
Loading…
Reference in a new issue