What: Baccus
Description: Baccus - Trivial Use File Backup and Restore Snapshot a file system (directory) as often as you like and at any time retrieve any of the snapshots. Baccus uses content addressable storage on the local filesystem for filesystem archival.
Currently at version 0.1
Note: this is pre-alpha development quality, if it breaks you have to keep the parts (tm).
Updated: 08/2015
Contact: See LEG and the website

Bits and Pieces:

astra, fp, atexit and tie_sqlite3

This one is easy.

astra: set*, incr*, assign*, puts*, gets*, close* etc. do almost the same as set, incr, assign, puts, gets, `close` - however they allow an arbitrary number of arguments, sometimes for benefit and sometimes yielding confusion.

 assign* 5  a b c
 incr* a 1  b 2  c 3

is cool to write, though. It yields a = 6, b = 7, c = 8.

Here you can get astra:

fp: a collection of functional programming idioms like map, filter, iota, or K*, S, I, as well as playing Lisp as of cond or prefix math operators for pre 8.6 Tcl. Mostly stolen from this wiki.

The use of fp like that of 'astra' also has the effect of only sometimes shed light on a program, but most times its shadows :)

Here you can get fp:

atexit: is AtExit handlers put together into a package.

For tie_sqlite3': see Sqlite3 Data Source for Tie


Baccus needs a fast hash function. Currently I use sha1, because it is in Trf and easily installable, however initially I wanted to use Daniel Bernsteins Salsa20 algorithm .

The Salsa20 core allows to hash and encrypt a piece of data in one run. This is implemented as Brisa in the Baccus package.

The snuffle package uses Critcl 3 and contains probably the worst Tcl embedded C code you have ever seen.

Here you can get the Salsa20 implementation as snuffle:

urta and afis

Urta stands for unordered radix tree archive.

Files are stored as hashed blocks in the archive. With the unordered radix tree index, block are found again very fast, even with a huge amount of blocks.

Afis stands for Archival file storage. Afis arranges for a whole directory tree to be traversed hashed and stored into an Urta. Apart from the file data, Afis also packs metadata into the Urta.

Some History:

August 2015: was killed by and i have been busy with real live stuff for a long time. Now I need Baccus again and after re-viving MagmaSoft at Baccus got a new home at . Fixed some minor stuff and wrote installation instructions. Its much more usable now.

May 2013: tried other things and got back to Baccus again. Since installation was anything less then smooth, fixed some minor problems. urta persistent parameter store using Tie with file data source does not work out, because the file grows Megas with one large run. So decided to implement Sqlite3 Data Source for Tie. Another critical bug: files with non-ASCII characters in their name do not get backed up - going to fix that in the next days. Will bump version to 0.2 then.

March 2009: After some three or four months of working out the basics of Baccus I dare to expose this baby to the rough world. It still stands on very wiggly feed so please take it up with care, and only when you know what you are doing.

I plan to use Baccus as a professional backup solution for a small webhosting company as well as for the personal computers in my family environment, so it surely will evolve over time. This release shall encourage other developers to take a look and try it out, and if it pleases to contribute bug reports, patches, ideas, or nice comments.

Baccus is hosted in a darcs repository at: , together with bits and pieces required to install and use it.