Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

https://github.com/andrewchambers/bupstash

Easy and efficient encrypted backups.
https://github.com/andrewchambers/bupstash

backups encryption

Last synced: about 2 months ago
JSON representation

Easy and efficient encrypted backups.

Lists

README

        

# Bupstash

[![Gitter](https://badges.gitter.im/bupstash/community.svg)](https://gitter.im/bupstash/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)

Bupstash is a tool for encrypted backups - if you need secure backups, Bupstash is the tool for you.

Bupstash was designed to have:

- Efficient deduplication - Bupstash can store thousands of encrypted directory snapshots using a fraction of the space encrypted tarballs would require.

- Strong privacy - Data is encrypted client side and the repository never needs has access to the decryption keys.

- Offline decryption keys - Backups do not require the decryption key be anywhere near an at-risk server or computer.

- Key/value tagging with search - all while keeping the tags fully encrypted.

- Great performance on slow networks - Bupstash really strives to work well on high latency networks like cellular and connections to far-off lands.

- Secure remote access controls - Ransomware, angry spouses, and disgruntled business partners will be powerless to delete your remote backups.

- Efficient incremental backups - Bupstash knows what it backed up last time and skips that work.

- Fantastic performance with low ram usage - Bupstash won't bog down your production servers.

- Safety against malicious attacks - Bupstash is written in a memory safe language to dramatically reduce the attack surface over the network.

## Stability and Backwards Compatibility

Bupstash is beta software, while all efforts are made to keep bupstash bug free, we currently recommend
using bupstash for making *REDUNDANT* backups where failure can be tolerated.

The repository format is approaching stability, and will not be changed
in a backwards incompatible way unless there is *very* strong justification. Future changes will most likely be backwards compatible, or come with a migration path if it is needed at all.

# Guides, documentation and support

- Visit the [project website](https://bupstash.io).
- Visit the [quickstart guide](https://bupstash.io/doc/guides/Getting%20Started.html) for an introductory tutorial.
- Visit the [filesystem backups guide](https://bupstash.io/doc/guides/Filesystem%20Backups.html) for examples of making backups.
- Visit the [man pages](https://bupstash.io/doc/man/bupstash.html) for more comprehensive documentation.
- Visit the [community chat](https://gitter.im/bupstash/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link) or the [community forum](https://github.com/andrewchambers/bupstash/discussions) to ask questions.
- Read the introductory [blog post](https://acha.ninja/blog/introducing_bupstash/).
- Read the [technical overview](./doc/technical_overview.md) to understand how it works.

# Typical usage

Initialize a new Bupstash repository via ssh.
```
$ export BUPSTASH_REPOSITORY=ssh://$SERVER/home/me/backups
$ # Ensure bupstash is on the $PATH of both machines.
$ bupstash init
```

Create a new encryption key, and tell bupstash to use it.
```
$ bupstash new-key -o backups.key
$ export BUPSTASH_KEY="$(pwd)/backups.key"
```

Save a directory as a tarball snapshot.
```
$ bupstash put hostname="$(hostname)" ./some-data
ebb66f3baa5d432e9f9a28934888a23d
```
Save the output of a command, checking for errors.
```
$ bupstash put --exec name=database.sql pgdump mydatabase
14ebd2073b258b1f55c5bbc889c49db4
```

List items matching a query.
```
$ bupstash list name="backup.tar" and hostname="server-1"
id="bcb8684e6bf5cb453e77486decf61685" name="some-file.txt" hostname="server-1" timestamp="2020/07/27 11:26:16"
```

List files in a backup.
```
$ bupstash list-contents id=bcb86*
drwxr-xr-x 0B 2020/10/30 13:32:04 .
-rw-r--r-- 7B 2020/10/30 13:32:04 hello.txt
```

Get an item matching a query.
```
$ bupstash get id=bcb8684e6bf5cb453e77486decf61685
some data...

$ bupstash get id="ebb66*" | tar -C ./restore -xf -
```

Fetch a single file from a backup.
```
$ bupstash get --pick hello.txt id="bcb86*"
hello!
```

Diff backups, with local directories or other backups.
```
$ bupstash diff /home/ac :: id="a4b8f*"
...
- -rw------- 14.50KiB 2021/08/01 02:36:19 .bash_history
+ -rw------- 13.66KiB 2021/08/01 11:51:23 .bash_history
```

Restore backups to a local directory.

```
$ mkdir restore-dir
$ bupstash restore --into ./restore-dir id="a4b8f*"
```

Remove items matching a query.
```
$ bupstash rm name=some-data.txt and older-than 30d
```

Run the garbage collector to reclaim disk space.
```
$ bupstash gc
```

# Installation

## From source

First ensure you have a recent rust+cargo, pkg-config and libsodium-dev (>= 1.0.14) package installed.

Next clone the repository and run cargo build.
```
$ git clone https://github.com/andrewchambers/bupstash
$ cd bupstash
$ cargo build --release
$ cp ./target/release/bupstash $INSTALL_DIR
```

### Pkgconf

You can use pkgconf instead of pkg-config (this is required on freebsd) by setting
the PKG_CONFIG environment variable.

```
$ export PKG_CONFIG=pkgconf
```

## Building man pages

The man pages are currently build using a markdown to man page renderer called [ronn](https://github.com/rtomayko/ronn).

```
$ cd doc/man
$ ronn -r *.md
```

## Generating release tarballs

```
$ sh support/src-release.sh $tag
$ echo bupstash-*.tar.gz
bupstash-$version-man.tar.gz
bupstash-$version-src+deps.tar.gz
```

## Test suites

Install bash automated test framework and run the following to run both the unit tests, and cli integration test suite.

```
$ cargo test
$ cargo build --release
$ export PATH=${CARGO_TARGET_DIR:-$PWD/target}/release:$PATH
$ bats ./cli-tests
```

## Precompiled releases

Head to the [releases page](https://github.com/andrewchambers/bupstash/releases) and download for
a build for your platform. Simply extract the archive and add the single bupstash binary to your PATH.

Currently we only precompile for linux (help wanted for more platforms).