add wget handler, add released tag to the changelog and setup changelog for next...
authorMicah Anderson <micah@riseup.net>
Sun, 2 Dec 2007 17:34:26 +0000 (17:34 +0000)
committerMicah Anderson <micah@riseup.net>
Sun, 2 Dec 2007 17:34:26 +0000 (17:34 +0000)
ChangeLog
handlers/wget [new file with mode: 0644]

index fab6fca55fbf35b57e387622c0ae698df6297511..b1583eb94095724d42bd83fcee4823b4fca66105 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -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 (file)
index 0000000..51054ea
--- /dev/null
@@ -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
+