blob: 9f9e488aa671aca7f169161ed29abf879f5672c0 (
plain) (
tree)
|
|
━━━━━━━━━
LEO
Andinus
━━━━━━━━━
Table of Contents
─────────────────
1. Installation
2. Documentation
.. 1. Profile
.. 2. Options
..... 1. encrypt/sign
..... 2. signify
..... 3. gzip
..... 4. help
3. Example
4. Demo
5. History
Leo is a simple backup program. It creates tar(1) files from a
pre-defined list. It can encrypt/sign files with gpg2(1) & sign files
with signify(1).
• Web-site: <https://andinus.nand.sh/leo>
• Source: <https://git.tilde.institute/andinus/leo>
• Source (mirror): <https://github.com/andinus/leo>
1 Installation
══════════════
┌────
│ # Install all the dependencies. (OpenBSD)
│ doas pkg_add p5-IPC-Run3 p5-Config-Tiny p5-Path-Tiny
│
│ # Clone the project.
│ git clone https://git.tilde.institute/andinus/leo && \
│ cd leo
│
│ # Install dependencies with cpanm.
│ cpanm --installdeps .
│
│ # Copy the config.
│ cp share/leo.conf $HOME/.config/leo.conf
│
│ # Copy the script & make it executable.
│ cp leo.pl $HOME/bin/leo && \
│ chmod +x $HOME/bin/leo
└────
2 Documentation
═══════════════
I use this to quickly backup some of my files. It works on profiles,
profiles are simple lists of files which get backed up.
2.1 Profile
───────────
Profile is a simple hash table (`%profile') which contains the list of
profiles. The profiles are mapped to a list of file paths which are to
be backed up.
You can run `help' to see all the profiles along with the paths.
2.2 Options
───────────
Some options can also be passed through environment variables. That
allows for configuration in shell rc file & the user can run leo
directly without looking at options.
━━━━━━━━━━━━━━━━━━━━━━━━
encrypt `LEO_ENCRYPT'
sign `LEO_SIGN'
signify `LEO_SIGNIFY'
gzip `LEO_GZIP'
━━━━━━━━━━━━━━━━━━━━━━━━
2.2.1 encrypt/sign
╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌
`encrypt_sign' handles `gpg2' related functions. It passes `--yes' by
default.
• `encrypt' / `sign' can also be set in configuration file, one can
also configure it for specific profile.
*Note*: `gpg2' might compress the backups depending on your config.
Default is to enable compression, if you don't want this then add `-z
0' to `@options'. `-z' specifies the compression level & 0 means no
compression.
2.2.2 signify
╌╌╌╌╌╌╌╌╌╌╌╌╌
`signify' will invoke `signify(1)' & the file will be signed.
2.2.3 gzip
╌╌╌╌╌╌╌╌╌╌
`gzip' will compress the tar archive with `gzip(1)'.
2.2.4 help
╌╌╌╌╌╌╌╌╌╌
Running just `leo' will print help.
3 Example
═════════
┌────
│ # This will encrypt, sign the tar file for documents, journal, pass &
│ # ssh profile.
│ leo --encrypt --sign documents journal pass ssh
│
│ # This will do the same. You can add these environment variables to
│ # your shell rc & then just run ``leo documents journal ssh pass'' to
│ # do the same.
│ LEO_ENCRYPT=1 LEO_SIGN=1 leo documents journal ssh pass
│
│ # Sign the file with signify(1).
│ leo --signify journal
└────
4 Demo
══════
It's very easy to setup `leo', I made a demo video to show this. I
already have Perl environment setup for this.
*Note*: Leo has changed since this was published.
• Leo 2020-08-31: <https://asciinema.org/a/F97hVfgXDcd9g5IlST1t27ps3>
You can also download the [cast file] directly & play it with
`asciinema'.
[cast file]
<https://andinus.nand.sh/static/leo/2020-08-31_leo-demo.cast>
5 History
═════════
This was Leo's initial description:
Leo is a program to run my personal scripts. You might not
find them useful, these were previously shell scripts that
I rewrote in Perl.
I had created a sync function initially & was going to expand it. Then
I decided to remove those sync functions because it was too complex, I
replaced then with simple `sh' scripts.
I added a simple `archive' function later & decided to turn Leo into
that function. So, it's not a meta-program anymore. I was thinking of
creating something that does all the things for me but that'll be too
complex.
Later on the same day I removed dispatch table & switched to using
simple hash of lists to store backup paths mapped to profiles. And
also changed the word "archive" to "backup" everywhere.
I added a simple INI based config file before 0.1.0 release.
|