Download and extract the s3napback package. There's no "make" or any such needed, so just extract it to some convenient location (I use /usr/local/s3napback).
- Java 1.5 or above. Note that you must use the standard Sun JDK (or JRE); libgcj will not work. (The s3napback script just executes whatever "java" it finds in the path, so you may need to adjust your path so that the Sun java takes precedence. On some systems there are symlinks in /etc/alternatives that point at one version or the other.)
- gpg (if you want encryption)
On many systems you can install the latter three packages from the command line like this:
sudo cpan Date::Format Config::ApacheFormat Log::Log4perl
Configure s3napback with your S3 login information by creating a file called e.g. /usr/local/s3napback/key.txt containing
key=your AWS key secret=your AWS secret
You probably want to take care that this file is readable only by the user that s3napback will be running as, so chown and chmod 600 it, as appropriate.
Note: if you don't care about encryption, you can skip this section, and simply don't specify a GpgRecipient in the configuration file below.
You'll need a GPG key pair for encryption. Create it with
Since you'll need the secret key to decrypt your backups, you'll obviously need to store it in a safe place (see the GPG manual).
If you'll be backing up a different machine from the one where you generated the key pair, export the public key:
gpg --export email@example.com > backup.pubkey
and import it on the machine to be backed up:
gpg --import backup.pubkey gpg --edit-key firstname.lastname@example.org
then (in the gpg key editing interface), "trust" the key.
If you want to run s3napback as root (e.g., from cron), you'll want to make sure that the right gpg keyring is used. Gpg will look for a keyring under ~/.gnupg, but on some systems /etc/crontab sets the HOME environment variable to "/"; consequently during the cron job gpg may look in /.gnupg instead of /root/.gnupg. Thus, you may want to change /etc/crontab to set HOME to "/root"; or actually create and populate /.gnupg; or just use the GpgKeyring option in the s3napback config file to specify a keyring explicitly.
Defining backup sets
Create a configuration file something like this (descriptions of the options are here, if they're not entirely obvious):
DiffDir /usr/local/s3napback/diffs Bucket dev.davidsoergel.com.backup1 GpgRecipient email@example.com S3Keyfile /usr/local/s3napback/key.txt ChunkSize 25000000 # make diffs of these every day, store fulls once a week, and keep two weeks <Cycle daily-example> #CycleType SimpleCycle # this is the default Frequency 1 Diffs 6 Fulls 2 Directory /etc Directory /home/build Directory /home/notebook Directory /home/trac Directory /usr Directory /var </Cycle> # make full backups of these every day on a decaying schedule. # Keep a total of five backups, spread out such that the oldest # backup is between 8 and 16 days old. Each additional disc # increases the age of the oldest backup by a factor of two. <Cycle decaying-example> CycleType HanoiCycle Frequency 1 Discs 5 Directory /etc Directory /home/build Directory /home/notebook Directory /home/trac Directory /usr Directory /var </Cycle> # make diffs of these every week, store fulls once a month, and keep two months <Cycle weekly-example> Frequency 7 Diffs 3 Fulls 2 Directory /bin Directory /boot Directory /lib Directory /lib64 Directory /opt Exclude /opt/useless Directory /root Directory /sbin </Cycle> # make a diff of this every day, store fulls once a week, and keep eight weeks <Directory /home/foobar> Frequency 1 Diffs 6 Fulls 8 Exclude /home/foobar/wumpus </Directory> # backup an entire machine <Directory /> Frequency 1 Diffs 6 Fulls 8 Exclude /proc Exclude /dev Exclude /sys Exclude /tmp Exclude /var/run </Directory> # store a MySQL dump of all databases every day, keeping 14. <MySQL all> Frequency 1 Fulls 14 </MySQL> # store a MySQL dump of a specific database every day, keeping 14. <MySQL mydatabase> Frequency 1 Fulls 14 </MySQL> # store a full dump of all Subversion repos every day, keeping 10. <SubversionDir /home/svn/repos> Frequency 1 Fulls 10 </SubversionDir> # store a diff of a specific Subversion repo every day, with a full dump every fourth day, keeping 10 fulls. <Subversion /home/svn/repos/myproject> Frequency 1 Phase 0 Diffs 3 Fulls 10 </Subversion>
Run the backup
To run it, just run the script, passing the config file with the -c option:
./s3snapback.pl -c s3napback.conf
That's it! You can put that command in a cron job to run once a day.
The log destinations and formatting are specified in s3napback.logconfig included in the package archive. Log rotation and emailing work too as long as you install Log::Dispatch (sudo cpan Log::Dispatch) and Mail::Sender (sudo cpan Mail::Sender), as needed.
Next: Principles of Operation