aboutsummaryrefslogtreecommitdiff
path: root/backends/tar.sh
diff options
context:
space:
mode:
Diffstat (limited to 'backends/tar.sh')
-rw-r--r--backends/tar.sh73
1 files changed, 73 insertions, 0 deletions
diff --git a/backends/tar.sh b/backends/tar.sh
new file mode 100644
index 0000000..6748ac9
--- /dev/null
+++ b/backends/tar.sh
@@ -0,0 +1,73 @@
+function tar_init() {
+ # nothing to do for tar?
+ :
+}
+
+# TODO: Make default .tar with optional bup
+function tar_create_backup() {
+ log_debug "tar: backing up..."
+
+ local status
+
+ # save world to a temporary archive
+ local archname="/tmp/${BACKUP_NAME}_`date +%F_%H-%M-%S`.tar.gz"
+ tar -czf "$archname" "./$WORLD_NAME"
+ status=$?
+ if [ $status -ne 0 ]; then
+ log_error "tar: failed to save the world"
+ rm "$archname" #remove (probably faulty) archive
+ return 1
+ fi
+ log_debug "tar: world saved to $archname, pushing it to backup directories..."
+
+ # 0 if could save to at least one backup dir
+ # TODO: make more strict?
+ local retcode=1
+ for backup_dir in ${BACKUP_DIRS[*]}
+ do
+ log_info "tar: backing up to \"$backup_dir\""
+ # scp acts as cp for local destination directories
+ scp "$archname" "$backup_dir/"
+ status=$?
+ if [ $status -ne 0 ]; then
+ log_error "tar: failed pushing to \"$backup_dir\", moving on"
+ else
+ retcode=0
+ fi
+ done
+
+ rm "$archname"
+
+ log_debug "tar: backup finished"
+
+ return $retcode
+}
+
+# server_restore relies on output format of this function
+function tar_ls() {
+ local backup_dir="$1"
+
+ if [[ "$backup_dir" == *:* ]]; then
+ local remote="$(echo "$backup_dir" | cut -d: -f1)"
+ local remote_dir="$(echo "$backup_dir" | cut -d: -f2)"
+ ssh "$remote" "ls -1 $remote_dir" | grep "tar.gz" | sort -r
+ else
+ ls -1 "$backup_dir" | grep "tar.gz" | sort -r
+ fi
+}
+
+function tar_restore() {
+ local remote="$1"
+ local snapshot="$2"
+ local dest="$3"
+ local status
+
+ scp "$remote/$snapshot" "/tmp/"
+ status=$?
+ if [ $status -ne 0 ]; then
+ log_error "tar: failed to get archive from \"$remote/$snapshot\""
+ return 1
+ fi
+
+ tar -xzf "/tmp/$snapshot" -C "$dest"
+}