diff options
| author | Micah Anderson <micah@riseup.net> | 2007-12-02 17:34:26 +0000 | 
|---|---|---|
| committer | Micah Anderson <micah@riseup.net> | 2007-12-02 17:34:26 +0000 | 
| commit | 4af05505849d1fa2509899c52af7fb1c69c4897b (patch) | |
| tree | 4be90d62450df2be99713a456a496b08ea86adc5 | |
| parent | cb2de66fc83c10fce3b8d6f1d5e439c9d9890f4c (diff) | |
| download | backupninja-4af05505849d1fa2509899c52af7fb1c69c4897b.tar.gz backupninja-4af05505849d1fa2509899c52af7fb1c69c4897b.tar.bz2 | |
add wget handler, add released tag to the changelog and setup changelog for next release
| -rw-r--r-- | ChangeLog | 11 | ||||
| -rw-r--r-- | handlers/wget | 220 | 
2 files changed, 229 insertions, 2 deletions
| @@ -1,4 +1,12 @@ -version 0.9.5 -- unreleased +version 0.9.6 -- unreleased +    backupninja changes + +    handler changes +	wget: +	 . New handler from rhatto designed to incrementally pull content from +	   a website to a local folder, based on the rsync handler + +version 0.9.5 -- December 2, 2007      backupninja changes  	 . Fixed checks on configuration files permissions, since the patch  	   applied to fix #370396 broke this, especially for configuration files @@ -83,7 +91,6 @@ version 0.9.5 -- unreleased      changed spaces to tabs in Makefile.am      updated redhat spec file (thanks Adam Monsen) -  version 0.9.4 -- October 6th, 2006      backupninja changes  	 . Fixed bug in toint(), and thus isnow(), which caused it diff --git a/handlers/wget b/handlers/wget new file mode 100644 index 0000000..51054ea --- /dev/null +++ b/handlers/wget @@ -0,0 +1,220 @@ +# +# backupninja handler to do incremental backups using +# wget and hardlinks, based on rsync handler +# +# feedback: rhatto at riseup.net | gpl +# +# Config file options +# ------------------- +# +#   [general] +#   log = wget log file +#   partition = partition where the backup lives +#   fscheck = set to 1 if fsck should run on $partition after the backup is made +#   read_only = set to 1 if $partition is mounted read-only +#   mountpoint = backup partition mountpoint or backup main folder +#   backupdir = folder relative do $mountpoint where the backup should be stored +#   days = number of backup increments (min = 5) +#   lockfile = lockfile to be kept during backup execution +#   nicelevel = wget command nice level +#   enable_mv_timestamp_bug = set to "yes" if your system isnt handling timestamps correctly +#   tmp = temp folder +# +#   [source] +#   wget = wget program +#   wget_options = wget command options +#   url = remote data url +#   bandwidthlimit = set a badnwidth limit in kbps (remote source only) +# +#   [destination] +#   folder = local folder +# +# You can also specify some system comands if you don't want the default system values: +# +#   [system] +#   rm = rm command +#   cp = cp command +#   touch = touch command +#   mv = mv command +#   fsck = fsck command +# +# TODO: Daily, weekly and monthly snapshot rotation (like the one present on maildir handler). +# + +# config file evaluation + +setsection system +getconf rm rm +getconf cp cp +getconf touch touch +getconf mv mv +getconf fsck fsck + +setsection general +getconf log /var/log/backup/wget.log +getconf partition +getconf fscheck +getconf read_only +getconf mountpoint +getconf backupdir +getconf rotate +getconf days +getconf lockfile +getconf nicelevel 0 +getconf enable_mv_timestamp_bug no +getconf tmp /tmp + +setsection source +getconf wget wget +getconf wget_options +getconf url +getconf bandwidthlimit + +setsection destination +getconf folder + +# function definitions + +function rotate { + +  if [[ "$2" < 4 ]]; then +    error "Rotate: minimum of 4 rotations" +    exit 1 +  fi + +  if [ -d $1.$2 ]; then +    $nice $mv /$1.$2 /$1.tmp +  fi + +  for ((n=`echo "$2 - 1" | bc`; n >= 0; n--)); do +    if [ -d $1.$n ]; then +      dest=`echo "$n + 1" | bc` +      $nice $mv /$1.$n /$1.$dest +      $touch /$1.$dest +    fi +  done + +  if [ -d $1.tmp ]; then +    $nice $mv /$1.tmp /$1.0 +  fi + +  if [ -d $1.1 ]; then +    $nice $cp -alf /$1.1/. /$1.0 +  fi + +} + +function move_files { + + ref=$tmp/makesnapshot-mymv-$$; + $touch -r $1 $ref; + $mv $1 $2; + $touch -r $ref $2; + $rm $ref; + +} + +backupdir="$mountpoint/$backupdir" + +# does $backupdir exists? + +if [ ! -d "$backupdir" ]; then  +  error "Backupdir $backupdir does not exist" +  exit 1 +fi + +# setup number of increments + +if [ -z "$days" ]; then +  keep="4" +else +  keep="`echo $days - 1 | bc -l`" +fi + +# lockfile setup + +if [ ! -z "$lockfile" ]; then +  $touch $lockfile || warning "Could not create lockfile $lockfile" +fi + +# nicelevel setup + +if [ ! -z "$nicelevel" ]; then  +  nice="nice -n $nicelevel" +else  +  nice="" +fi + +# set mv procedure + +if [ $enable_mv_timestamp_bug == "yes" ]; then +  mv=move_files +fi + +# set excludes + +for path in $exclude; do +  EXCLUDES="$EXCLUDES --exclude=$path" +done + +echo "Starting backup at `date`" >> $log + +# mount backup destination folder as read-write + +if [ "$read_only" == "1" ] || [ "$read_only" == "yes" ]; then +  if [ -d "$mountpoint" ]; then +    mount -o remount,rw $mountpoint +    if (($?)); then +      error "Could not mount $mountpoint" +      exit 1 +    fi +  fi +fi + +# the backup procedure + +if [ ! -d "$backupdir/$folder/$folder.0" ]; then +  mkdir -p $backupdir/$folder/$folder.0 +fi + +info "Rotating $backupdir/$folder/$folder..." +echo "Rotating $backupdir/$folder/$folder..." >> $log +rotate $backupdir/$folder/$folder $keep +info "Wget'ing $SECTION on $backupdir/$folder/$folder.0..." + +if [ ! -z "$badnwidth" ]; then +  limit_rate="--limit-rate=$badnwidth""k" +fi + +cd $backupdir/$folder/$folder.0 +wget $wget_options $limit-rate -r -c -N -e robots=off $url +cd - + +$touch $backupdir/$folder/$folder.0 + +# remount backup destination as read-only + +if [ "$read_only" == "1" ] || [ "$read_only" == "yes" ]; then +  mount -o remount,ro $mountpoint +fi + +# check partition for errors + +if [ "$fscheck" == "1" ] || [ "$fscheck" == "yes" ]; then +  umount $mountpoint +  if (($?)); then +    warning "Could not umount $mountpoint to run fsck" +  else +    $nice $fsck -v -y $partition >> $log +    mount $mountpoint +  fi +fi + +# removes the lockfile + +if [ ! -z "$lockfile" ]; then +  $rm $lockfile || warning "Could not remove lockfile $lockfile" +fi + +echo "Finnishing backup at `date`" >> $log + | 
