• Stars
    star
    892
  • Rank 51,172 (Top 2 %)
  • Language
    Rust
  • License
    MIT License
  • Created about 4 years ago
  • Updated 9 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Easy and efficient encrypted backups.

Bupstash

Gitter

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

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.

$ 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 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).

More Repositories

1

c

small self hosting C compiler
C
454
star
2

janetsh

A powerful new shell that uses the janet programming language for both the implementation and repl.
C
372
star
3

hermes

Hermes software environment manager
C
312
star
4

cc

Cross platform C preprocessor and compiler.
Go
268
star
5

minias

A mini x86-64 assembler for fun and learning.
C
203
star
6

orderly

Ordered process (re)start, shutdown, and supervision.
Rust
157
star
7

godothecorrectthing

A script to do actions based on the current window and selected text.
Shell
129
star
8

terraform-provider-nix

terraform provider that manages nix builds and nixos machines.
Go
105
star
9

janet-sh

Shorthand shell like functions for janet.
Janet
86
star
10

ws-tcp-bridge

A proxy server, using nodejs which bridges websockets and tcp servers in either direction.
JavaScript
77
star
11

sftpplease

SFTP <-> Cloud service bridge.
Go
69
star
12

cmips

cmips
C
57
star
13

hpkgs

A package repository for hermes
Shell
45
star
14

pycc

compiler
Python
35
star
15

qc

quick c
C
32
star
16

vscode-acmeish

A vscode extension to run system commands.
TypeScript
31
star
17

ddmin

A no frills delta debugger written in myrddin.
Roff
29
star
18

janet-pq

Bindings to libpq.
C
26
star
19

minipeg

A C peg parser generator (a fork of peg/leg)
C
22
star
20

janet-big

A simple big integer library for janet
C
20
star
21

janet-jdn

Janet
20
star
22

jfmt

18
star
23

janet-utf8

Janet routines for utf8 handling
C
17
star
24

coolpkg

The coolest package manager and deployment tool.
Python
16
star
25

poolparty

A synchronous, vm pooling http server for janet.
Go
16
star
26

fspec-tools

Tools to create filesystem images from an fspec filesystem specification.
C
15
star
27

hafs

A high availability distributed filesystem built on FoundationDB and fuse.
Go
15
star
28

janet-redis

Janet redis bindings based on hiredis
C
14
star
29

ShellCodeLinker

A python project that converts coffobject files (.o) built by mingw into an assembly file that can be built using nasm. When built using flat binary output this results in position independant shellcode generated by the c compiler.
Python
14
star
30

janet-uri

rfc3986 compliant url parser for janet.
Janet
13
star
31

janet-jcjit

A C extension jit for janet using libtcc.
C
13
star
32

asymcrypt

A tool for asymmetric cryptography
C
13
star
33

grafana-rrd-datasource

Graph and alert on '.rrd' data using grafana, RRDTool and RRDSrv.
Go
13
star
34

janet-posix-spawn

C
13
star
35

rrdsrv

An api server that exports a subset of rrdtool commands over http.
Go
12
star
36

magnet-linux

A decentralized linux distribution.
Shell
11
star
37

janet-yacc

An implementation of yacc for the janet programming language.
C
11
star
38

crushstore

A horizontally scaling object store based on the CRUSH placement algorithm.
Go
11
star
39

go-janet

A go port of the janet programming language.
Go
10
star
40

janet-process

A janet module for dealing with processes.
C
10
star
41

janet-pico-http-parser

http 1.1 parser for janet
C
10
star
42

bundle

Structured go concurrency with garbage collected goroutines.
Go
10
star
43

janet-ahttp

async aware http server library for janet
9
star
44

p2pkgs

A source based package tree with virtual environments, optional p2p mirrors and optional remote build caching.
Shell
9
star
45

janet-ctrl-c

A library for dealing with ctrl-c in janet
C
9
star
46

janet-where-defined

Lookup where a Janet function was defined
C
9
star
47

plumbtool

A window manager command runner and plumbing tool.
9
star
48

hm3

An embeddable programming language just for fun
C
9
star
49

janet-cloader

C
9
star
50

ddmin-python

A python implementation of delta debugging tool.
Python
9
star
51

go-cdclient

Fast implementation of the collectd network protocol for go.
Go
7
star
52

janet-rlrepl

A jpm module providing a gnu readline repl.
C
7
star
53

janet-httpkit

A framework agnostic toolkit for use when writing janet http handlers.
7
star
54

hpkg

Assembly
7
star
55

janet-md-doc

Generate markdown documentation for a janet-module
7
star
56

janet-nested-text

An implementation of NestedText for the Janet programming language
7
star
57

trusting-trust

Mostly trustworthy paths to self hosted linux userspace.
Shell
7
star
58

hm

6
star
59

janet-glob

Pure janet globbing
Janet
6
star
60

janet-datafog

A janet datalog engine
6
star
61

janet-pgjobq2

Second generation of the janet postgres job queue.
6
star
62

gslite

A lightweight alternative to google cloud sdk gsutil.
Go
5
star
63

janet-unify

5
star
64

ocker

less d than docker, more openbsd
Shell
5
star
65

syshook

Scriptable syscall tracing
C
5
star
66

go-dhallconfig

Dhall config for go.
Go
5
star
67

janet-ll

A low level rust crate providing bindings to the janet interpreter.
C
5
star
68

jsonsort

Sort large amounts of json using coreutils sort
Go
5
star
69

sup

C
5
star
70

shardfs

A sharding filesystem for linux based on the 9P2000L protocol
4
star
71

g

g programming language
Go
4
star
72

janet-logfmt

A logfmt log library for janet.
C
4
star
73

rwpart

Write partitions to raw disk images.
C
4
star
74

janet-base16

Base 16 encoding/decoding of buffers.
C
4
star
75

pkgfs

read only package union file system.
C
4
star
76

EncryptedBackupShootout

Shell
4
star
77

qasm

C
4
star
78

janet-redo

Prototype of redo in janet.
4
star
79

janet-pgjobq

A simple fifo jobq backed by postgres using redis pubsub.
3
star
80

gomodver

A package to parse version information from go.mod version identifiers.
Go
3
star
81

mips-baremetal

gcc toolchain for mips 4kc/p/m processor with no OS
C
3
star
82

fifolog

C
3
star
83

plmap-rust

Parallel pipelined map over iterators.
Rust
3
star
84

emailcontrolledgate

Shell
3
star
85

gosrcs

Print all source code for a given go package or module.
Go
3
star
86

janet-bare1

BARE encoder/decoder for janet
C
3
star
87

janet-shlex

3
star
88

cchan

Go style channels in C.
C
3
star
89

p92000l-rust

9P2000.L library for rust.
Rust
3
star
90

promcron

A simple cron service which exports prometheus metrics
Go
3
star
91

bfjit_x86_64

a brainfuck interpreter for x86_64 that uses jit
C
3
star
92

janet-flock

C
3
star
93

encr

A no frills stream encryption tool.
Roff
3
star
94

cts

c test suite
C
3
star
95

mummipy

bundles a loosely specified python requirements.txt into a standalone tarball.
Shell
3
star
96

srop

Simple remote object protocol
Go
3
star
97

cdcron

A cron daemon that exports collectd metrics.
Go
2
star
98

janet-fork

C
2
star
99

janet-rs

Higher level bindings for the janet C API.
Rust
2
star
100

qlite

A simple command line disk based queue
Python
2
star