[Box Backup] Wanting to write a new program.

Ben Summers boxbackup at fluffy.co.uk
Mon May 16 10:51:17 BST 2005


On 16 May 2005, at 09:52, Scott McNee wrote:

> Hi All,
>             Thankyou for writing a very complete backup system. I am
> interested in developing an addition to the existing system. I would 
> like to
> develop a command line client for windows that will directly access a 
> backup
> stored on disc/CD/DVD. i.e.. A copy of the Server directory for the
> username.
>
> Is there any information that you could provide to assist in this 
> process.
> i.e.. pseudo code on accessing the file structures Directly?

There is plenty of actual code to look at! And some overview docs in 
the notes directory.

The relevant code is in lib/backupstore and lib/backupclient. You can 
easily create a new executable which includes these bits of code, look 
in the modules.txt file.

Look in StoreStructure.h for functions to generate local filenames from 
object IDs. Start by loading the root directory with ID 
BACKUPSTORE_ROOT_DIRECTORY_ID as a BackupStoreDirectory (Use the 
filename with a RaidFileRead stream, then use 
BackupStoreDirectory::ReadFromStream() to load up the contents.) Then 
go through the entries with a BackupStoreDirectory::Iterator, and 
examine them. Recurse to other directories. To restore a file, use 
BackupStoreFile::DecodeFile().

To set up the crypto so dirs and files can be decoded properly, use 
BackupClientCryptoKeys_Setup(), given the keys file used to create the 
data. To be able to use the RaidFile stuff, call 
RaidFileController::GetController().Initialise() with the path to a 
suitable configuration file, which you'll probably have to generate on 
the fly given the location of the data on the CD.

There are some tests which show these principles. The tests are not 
written to the same quality standards as the rest of the code. 
test/backupstore is worth a look, even if most of the code communicates 
with the server. (But bear in mind that the structures are all the 
same, just downloaded from the server rather than loaded from the 
disc.)

Finally, ask Nick for a copy of the source for the Win32 port, which 
will make it easier to work under Windows. The RaidFile stuff won't 
have been ported, and indeed some of it might not be possible given 
that the write side of things relies on the way UNIX filesystems work. 
But you should be able to get the RaidFileRead stuff to work. 
Alternatively, if your server doesn't use the RaidFile in RAID mode (ie 
just one disc in each set, not three) simply append ".rfw" and prepend 
the root of the "RAID" files to the names given by the StoreStructure 
utilities, and use a FileStream object instead. It'd be better to use 
the proper interface, but you may have no choice under Win32. Maybe you 
could use a special function to open the files, and later it could be 
replaced by one which used the RaidFile interface properly?

I'm curious, why do you want this tool?

Ben





More information about the Boxbackup mailing list