Skip to main content

Configurable restic

Project description

Crestic - configurable Restic

This is a slim configuration wrapper for Restic, a pretty awesome backup tool.

Why? Because restic is unfortunately still missing config files.

Usage

This tool does not try to be clever, it simply maps any commandline options for restic to a key in an config file.

For example, to use restic to back up your home directory with a password and an exclude-file, you would use

restic backup \
    --repo sftp:your_server:my_computer.restic \
    --password-file ~/.config/restic/password \
    --exclude-file ~/.config/restic/excludes \
    ~

With crestic, you can set all these values in a config file

[home]
repo: sftp:your_server:my_computer.restic
password-file: ~/.config/restic/password

[home.backup]
exclude-file: ~/.config/restic/excludes
arguments: ~

and then call one simple command

crestic home backup

More advanced usage examples can be found further down this file.

Installation

Just install it using pip

pip install crestic

or download crestic into your $PATH

curl https://raw.githubusercontent.com/nils-werner/crestic/master/crestic.py --output ~/.local/bin/crestic
chmod +x ~/.local/bin/crestic

Config File Detection

The following locations are used in descending order of importance:

  • environment variable $CRESTIC_CONFIG_FILE, a single filename
  • environment variable $CRESTIC_CONFIG_PATHS, a colon separated list of directories containing a file crestic.cfg
  • ~/.config/crestic/crestic.cfg
  • /etc/crestic.cfg

crestic may also optionally use appdirs to automatically pick up config files from platform-dependent locations. This is especially useful on macOS or Windows. Just install appdirs

pip install appdirs

Requirements

Plain Python 3.6+ on a UNIX system. Nothing else.

Debugging

If you set the environment variable $CRESTIC_DRYRUN, crestic will not run restic but instead output

  • the config files in use
  • the config sections in use
  • the final command
env CRESTIC_DRYRUN=1 crestic home backup

will print

             Warning: Executing in debug mode. restic will not run, backups are not touched!
        Config files: examples/multiple_presets.cfg
   Config files used: examples/multiple_presets.cfg
     Config sections: global, global.backup, home, home.backup
Config sections used: global, global.backup
        Env sections: global.environ, global.backup.environ, home.environ, home.backup.environ
   Env sections used:
    Expanded command: restic backup --password-file ~/.config/restic/password --exclude-file ~/.config/restic/excludes --exclude config.py --exclude passwords.txt

Config File Parsing

On the commandline, crestic commands follow the syntax

crestic preset command [--options, ...]

Where preset is a preset key in the config file, and command is the restic command.

Crestic config keys follow the convention

[preset]
[preset.command]

where preset and command are the preset and command names from above. For example

[home]
...
[home.backup]
...

are read for crestic home backup calls.

There exist a few special config keys:

  • [global] is a special pseudo preset which is always read before any actual preset value.
  • [global.command] is a special pseudo command which is always read before any actual preset command. These two keys can be used to set global values, valid for any preset, i.e. a password-file
  • [global.environ], [preset.environ], [global.command.environ] and [preset.command.environ] are special pseudo commands which are used to set environment variables for the restic command. They are usually used to set cloud provider credentials.

Config keys are always read in the following order, of ascending importance. Later values override earlier ones:

  1. [global]
  2. [global.command]
  3. [preset]
  4. [preset.command]
  5. options from the commandline

Advanced Usage

Multiple preset

crestic allows multiple presets per config file, so you can define config files

[global]
password-file: ~/.config/restic/password

[global]
repo: sftp:your_server:my_computer.restic

[global.backup]
exclude-file: ~/.config/restic/excludes

[home.backup]
arguments: ~

[work.backup]
arguments: ~/work

Which can be used as crestic home backup and crestic work backup

See examples/multiple_presets.cfg for a more complicated example with multiple repos and directories and forgetting rules.

Split preset

crestic allows for so-called split presets. These split presets are in the format of prefix@suffix and are usually used to separate local location values from remote repo locations, i.e. location@repo.

Using this techique you can back up several locations on your machine to several remote repositories, i.e. a home and a work location to a disk and a cloud repo

crestic home@disk backup
crestic home@cloud backup
crestic work@disk backup
crestic work@cloud backup

To use these split presets, simply define location keys with an @ suffix

[home@.backup]
arguments: ~

[work@.backup]
arguments: ~/work

and repo keys with an @ prefix

[@disk]
repo: /Volumes/Backup

[@cloud]
repo: b2:bucketname:my_computer.restic

[@cloud.environ]
B2_ACCOUNT_ID: <MY_APPLICATION_KEY_ID>
B2_ACCOUNT_KEY: <MY_APPLICATION_KEY>

Split config keys are always read in the following order, of ascending importance. Later values override earlier ones:

  1. [global]
  2. [global.command]
  3. [@repo]
  4. [@repo.command]
  5. [location@]
  6. [location@.command]
  7. [location@repo]
  8. [location@repo.command]
  9. options from the commandline

See examples/split_presets.cfg for a complete example of location@repo split presets.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

crestic-0.5.0.tar.gz (6.7 kB view details)

Uploaded Source

Built Distribution

crestic-0.5.0-py3-none-any.whl (6.5 kB view details)

Uploaded Python 3

File details

Details for the file crestic-0.5.0.tar.gz.

File metadata

  • Download URL: crestic-0.5.0.tar.gz
  • Upload date:
  • Size: 6.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.46.0 CPython/3.6.10

File hashes

Hashes for crestic-0.5.0.tar.gz
Algorithm Hash digest
SHA256 cb29f861a25a28310e3373507b6990ef2bc66d840d7bb91f64340d43404076a3
MD5 c76a2602d6a9321e0f254f7e59ed2a52
BLAKE2b-256 f63940a7f9a112288c778f17c485c725a760872601c4223d2b693d8c653f626a

See more details on using hashes here.

File details

Details for the file crestic-0.5.0-py3-none-any.whl.

File metadata

  • Download URL: crestic-0.5.0-py3-none-any.whl
  • Upload date:
  • Size: 6.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.46.0 CPython/3.6.10

File hashes

Hashes for crestic-0.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 558888beee660c29705b1def5fb3a736c28317f6d52c18571be4a80a015967e4
MD5 6c1a7d8e59b7aaa0c1df83f7747246ab
BLAKE2b-256 18bcac743c4356a5c5ca7c07fcb956a95c6f8abfb39bfa0e7dabfd7d052db2e8

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page