Backupninja provides a centralized way to configure and schedule many different backup utilities. It allows for secure, remote, incremental filesytem backup (via rdiff-backup), compressed incremental data, backup system and hardware info, encrypted remote backups (via duplicity), safe backup of MySQL/PostgreSQL databases, subversion or trac repositories, burn CD/DVDs or create ISOs, incremental rsync with hardlinking.
This walkthrough will describe how to setup Backupninja together with rdiff-backup in unattended mode.
The two partners in this setup are server.example.net and backup.example.net. The former should backup its data nightly to the latter. The user service will be the backup system account using password-less ssh access. The target directory is /data/backup, so the complete backup target address in ssh notation is service@backup.example.net:/data/backup.
backup.example.net:~$ useradd -m service backup.example.net:~$ passwd service # ^^ only required for copying over ssh public identities; can be disabled later: backup.example.net:~$ passwd --lock service
rdiff-backup requires pyxattr >=0.4 (looks like)
python-pyxattr has Version: 0.4.0-1, while python-xattr has Version: 0.4-4 backup.example.net:~$ aptitude install backupninja rdiff-backup python-pyxattr
python-pyxattr has Version: 0.2.1-1.1, so use python-xattr 0.4-4~bpo40+1 from etch-backports: backup.example.net:~$ aptitude install python-xattr -t etch-backports
backup.example.net:~$ mkdir -p /data/backup/{customer}/server.example.net/rdiff backup.example.net:~$ chown -R service:service /data/backup/{customer}/server.example.net/rdiff
server.example.net:~$ aptitude install backupninja rdiff-backup python-pyxattr debconf-utils hwinfo
pyxattr >=0.4 required (so on debian etch): (see above “target: install backup software”)
server.example.net:~$ aptitude install python-xattr -t etch-backports
server.example.net:~$ useradd -m service server.example.net:~$ su - service service@server.example.net:~$ ssh-keygen service@server.example.net:~$ ssh-copy-id service@backup.example.net service@server.example.net:~$ logout
reportemail = root@example.net when = everyday at 00:45
server.example.net:~$ cp /usr/share/doc/backupninja/examples/example.sys /etc/backup.d/10.sys server.example.net:~$ cp /usr/share/doc/backupninja/examples/example.mysql /etc/backup.d/20.mysql server.example.net:~$ cp /usr/share/doc/backupninja/examples/example.ldap /etc/backup.d/30.ldap server.example.net:~$ cp /usr/share/doc/backupninja/examples/example.rdiff /etc/backup.d/90.rdiff server.example.net:~$ chmod go-r /etc/backup.d/*
slapcat for LDAP.
... options = --force --remote-schema 'ssh -i /home/service/.ssh/id_rsa -C %s rdiff-backup --server' ... #label = thishostname ... include = /var/mail ... [dest] directory = /data/backup/{customer}/server.example.net/rdiff host = backup.example.net user = service sshoptions = -i /home/service/.ssh/id_rsa
server.example.net:~$ backupninja --test --now server.example.net:~$ screen -S backup server.example.net:~$ backupninja --debug --now
detach from screen: Ctrl+A, D
hypervisor is the machine backup.example.net is running on. We'll mount another partition with plenty of backup space. Here's how (LVM + Xen):
hypervisor:~$ lvcreate -L 250G vg0 -n backup-data hypervisor:~$ mkfs.ext3 /dev/vg0/backup-data hypervisor:~$ nano /etc/xen/backup.example.net.cfg
... disk = [ ... 'phy:vg0/backup-data,sda6,w', ] ...
backup.example.net:~$ mkdir /data backup.example.net:~$ nano /etc/fstab
... /dev/sda6 /data ext3 noatime,nodiratime,errors=remount-ro 0 1
backup.example.net:~$ halt hypervisor:~$ xm create /etc/xen/backup.example.net.cfg
Exclude backup path from being scanned by “locate” & Co.:
backup.example.net:~$ nano /etc/updatedb.findutils.cron.local PRUNEPATHS="/data/backup"