summaryrefslogtreecommitdiffabout
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--Make.rules2
-rw-r--r--Makefile.am2
-rw-r--r--NEWS6
-rw-r--r--README4
-rw-r--r--backup.in100
-rw-r--r--beam.in77
-rwxr-xr-xcleaner.in85
-rw-r--r--configure.ac2
-rw-r--r--doc/Makefile.am2
-rw-r--r--doc/beam-backup.1in4
-rw-r--r--doc/beam-cleaner.1in4
-rw-r--r--doc/beam-list.1in4
-rw-r--r--doc/beam-module.5in4
-rw-r--r--doc/beam-restore.1in4
-rw-r--r--doc/beam-s3.1in4
-rw-r--r--doc/beam.1in4
-rw-r--r--lib/beam/Makefile.am2
-rw-r--r--lib/beam/common.in264
-rwxr-xr-xlib/beam/fs.sh186
-rwxr-xr-xlib/beam/ldap.sh2
-rwxr-xr-xlib/beam/postgres.sh106
-rw-r--r--lib/beam/s3.sh114
-rw-r--r--list.in68
-rw-r--r--restore.in104
-rw-r--r--s3.in58
25 files changed, 622 insertions, 590 deletions
diff --git a/Make.rules b/Make.rules
index 186de06..cafa879 100644
--- a/Make.rules
+++ b/Make.rules
@@ -1,5 +1,5 @@
# This file is part of BEAM
-# Copyright (C) 2012 Sergey Poznyakoff
+# Copyright (C) 2012-2014 Sergey Poznyakoff
#
# BEAM is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
diff --git a/Makefile.am b/Makefile.am
index c65a39d..551f7b2 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,5 +1,5 @@
# This file is part of BEAM
-# Copyright (C) 2012 Sergey Poznyakoff
+# Copyright (C) 2012-2014 Sergey Poznyakoff
#
# BEAM is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
diff --git a/NEWS b/NEWS
index 7ef3571..1671079 100644
--- a/NEWS
+++ b/NEWS
@@ -1,5 +1,5 @@
-BEAM NEWS -- history of user-visible changes. 2013-08-05
-Copyright (C) 2012, 2013 Sergey Poznyakoff.
+BEAM NEWS -- history of user-visible changes. 2014-03-19
+Copyright (C) 2012-2014 Sergey Poznyakoff.
See the end of file for copying conditions.
Please send mailutils bug reports to <gray@gnu.org.ua>.
@@ -44,7 +44,7 @@ First release.
----------------------------------------------------------------------
Copyright information:
-Copyright (C) 2012, 2013 Sergey Poznyakoff.
+Copyright (C) 2012-2014 Sergey Poznyakoff.
Permission is granted to anyone to make or distribute verbatim copies
of this document as received, in any medium, provided that the
diff --git a/README b/README
index c407c0a..9e7410c 100644
--- a/README
+++ b/README
@@ -1,5 +1,5 @@
BEAM README file.
-Copyright (C) 2012 Sergey Poznyakoff
+Copyright (C) 2012-2014 Sergey Poznyakoff
See the end of file for copying conditions.
* Introduction
@@ -112,7 +112,7 @@ Send bug reports to <gray@gnu.org.ua>.
* Copyright information:
-Copyright (C) 2012 Sergey Poznyakoff
+Copyright (C) 2012-2014 Sergey Poznyakoff
Permission is granted to anyone to make or distribute verbatim
copies of this document as received, in any medium, provided that
diff --git a/backup.in b/backup.in
index ca479b1..477b839 100644
--- a/backup.in
+++ b/backup.in
@@ -1,6 +1,6 @@
#! /bin/sh
# This file is part of BEAM
-# Copyright (C) 2012 Sergey Poznyakoff
+# Copyright (C) 2012-2014 Sergey Poznyakoff
#
# BEAM is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -23,8 +23,8 @@ ts=`date +%Y%m%d`;
week=`date +%U`
if [ "$1" = "--wtf" ]; then
- wtf $(basename $0) create a backup
- exit 0
+ wtf $(basename $0) create a backup
+ exit 0
fi
load_config
@@ -36,9 +36,9 @@ taroptions="-c -Hpax $backup_tar_options $backup_rsh_command"
# Set it to "-v" to make script verbose
if [ -n "$backup_verbose" ]; then
- verbose=-v
+ verbose=-v
else
- verbose=
+ verbose=
fi
# Set it to "echo" to initiate dry-run mode.
unset dry_run
@@ -54,7 +54,7 @@ round=0
###########################################################
help() {
- cat <<EOF
+ cat <<EOF
usage: $0 [OPTIONS]
makes incremental backup of that system
@@ -71,7 +71,7 @@ OPTIONS:
Report bugs to <@PACKAGE_BUGREPORT@>
EOF
- exit 0
+ exit 0
}
###########################################################
@@ -80,63 +80,63 @@ EOF
while [ $# -ne 0 ]
do
- case $1 in
- -v|--verbose) verbose="$verbose -v";;
- -l|--logfile) shift; backup_logfile=$1;;
- -n|--dry-run) dry_run=echo; backup_logfile=;;
- -N|--no-logfile) backup_logfile=;;
- -h|--help) help;;
- -V|--version) print_version;;
- -L|--level) shift; level=$1;;
- -R|--round) shift; round=$1;;
- --week) shift; week=$1;;
- *) echo >&2 "$0: unrecognized option $1"; exit 1;;
- esac
- shift
+ case $1 in
+ -v|--verbose) verbose="$verbose -v";;
+ -l|--logfile) shift; backup_logfile=$1;;
+ -n|--dry-run) dry_run=echo; backup_logfile=;;
+ -N|--no-logfile) backup_logfile=;;
+ -h|--help) help;;
+ -V|--version) print_version;;
+ -L|--level) shift; level=$1;;
+ -R|--round) shift; round=$1;;
+ --week) shift; week=$1;;
+ *) echo >&2 "$0: unrecognized option $1"; exit 1;;
+ esac
+ shift
done
backup() {
- logit "started"
-
- runhook prologue_hook
- trap "runhook epilogue_hook" EXIT INT QUIT TERM
-
- if test -n "$backup_retain_interval" &&
- test $backup_retain_interval -gt 0; then
- @LIBEXECDIR@/beam-cleaner --retain $backup_retain_interval $verbose \
+ logit "started"
+
+ runhook prologue_hook
+ trap "runhook epilogue_hook" EXIT INT QUIT TERM
+
+ if test -n "$backup_retain_interval" &&
+ test $backup_retain_interval -gt 0; then
+ @LIBEXECDIR@/beam-cleaner --retain $backup_retain_interval $verbose \
${dry_run+--dry-run} --suffix $backup_suffix $backup_archive_dir
- @LIBEXECDIR@/beam-cleaner --retain $backup_retain_interval $verbose \
+ @LIBEXECDIR@/beam-cleaner --retain $backup_retain_interval $verbose \
${dry_run+--dry-run} --suffix .db $backup_snapshot_dir
- fi
-
- for item in $backup_items
- do
- eval type=\$${item}_type
- ${type}_backup $item
- done
-
- trap - EXIT INT QUIT TERM
- runhook epilogue_hook
-
- logit "finished"
+ fi
+
+ for item in $backup_items
+ do
+ eval type=\$${item}_type
+ ${type}_backup $item
+ done
+
+ trap - EXIT INT QUIT TERM
+ runhook epilogue_hook
+
+ logit "finished"
}
umask ${backup_umask:-077}
prologue_hook="beam_lock $prologue_hook"
if [ -n "$backup_logfile" ]; then
- runhook openlog_hook
- exec >>$backup_logfile
- exec 2>&1
+ runhook openlog_hook
+ exec >>$backup_logfile
+ exec 2>&1
fi
if [ -z "$backup_notify_email" ]; then
- backup
+ backup
else
- report=$backup_snapshot_dir/report.$$
- touch $report
- backup 2>&1 | tee $report
- mail_report $report
- rm $report
+ report=$backup_snapshot_dir/report.$$
+ touch $report
+ backup 2>&1 | tee $report
+ mail_report $report
+ rm $report
fi
diff --git a/beam.in b/beam.in
index 480351c..7281a18 100644
--- a/beam.in
+++ b/beam.in
@@ -1,4 +1,19 @@
#! /bin/sh
+# This file is part of BEAM
+# Copyright (C) 2012-2014 Sergey Poznyakoff
+#
+# BEAM is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# BEAM is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with BEAM. If not, see <http://www.gnu.org/licenses/>.
libdir=@LIBDIR@/beam
set -e
@@ -6,53 +21,53 @@ set -e
set +e
help() {
- cat <<EOT
+ cat <<EOT
usage: beam COMMAND [OPTIONS] [ITEM [ITEM...]]
COMMANDS are:
EOT
- for cmd in @LIBEXECDIR@/beam-*
- do
- test -x $cmd && $cmd --wtf
- done
- wtf help display help page for a particular command
- echo ""
- echo "Report bugs to <@PACKAGE_BUGREPORT@>"
- exit 0
+ for cmd in @LIBEXECDIR@/beam-*
+ do
+ test -x $cmd && $cmd --wtf
+ done
+ wtf help display help page for a particular command
+ echo ""
+ echo "Report bugs to <@PACKAGE_BUGREPORT@>"
+ exit 0
}
while [ $# -ne 0 ]
do
- case $1 in
- -h|--help) help;;
- -V|--version) print_version;;
- --) shift; break;;
- -*) echo >&2 "$0: unrecognized option $1"; exit 1;;
- *) break;;
- esac
- shift
+ case $1 in
+ -h|--help) help;;
+ -V|--version) print_version;;
+ --) shift; break;;
+ -*) echo >&2 "$0: unrecognized option $1"; exit 1;;
+ *) break;;
+ esac
+ shift
done
if [ $# -eq 0 ]; then
- error "command not specified"
- abend 1 "try $0 --help for more details"
+ error "command not specified"
+ abend 1 "try $0 --help for more details"
fi
if [ $1 = "help" ]; then
- shift
- if [ $# -eq 0 ]; then
- man 1 beam
- else
- man 1 beam-$1
- fi
- exit $?
+ shift
+ if [ $# -eq 0 ]; then
+ man 1 beam
+ else
+ man 1 beam-$1
+ fi
+ exit $?
fi
if [ -x @LIBEXECDIR@/beam-$1 ]; then
- cmd=@LIBEXECDIR@/beam-$1
- shift
- $cmd $@
+ cmd=@LIBEXECDIR@/beam-$1
+ shift
+ $cmd $@
else
- error "unknown command"
- abend 1 "try $0 --help for more details"
+ error "unknown command"
+ abend 1 "try $0 --help for more details"
fi
diff --git a/cleaner.in b/cleaner.in
index 035892f..0a9a35f 100755
--- a/cleaner.in
+++ b/cleaner.in
@@ -1,4 +1,19 @@
#! /bin/sh
+# This file is part of BEAM
+# Copyright (C) 2012-2014 Sergey Poznyakoff
+#
+# BEAM is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# BEAM is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with BEAM. If not, see <http://www.gnu.org/licenses/>.
libdir=@LIBDIR@/beam
set -e
@@ -29,27 +44,27 @@ EOF
while [ $# -ne 0 ]
do
- case $1 in
- -s|--suffix) shift; suffix=$1;;
- -r|--retain) shift; retainweeks=$1;;
- -v|--verbose) verbose=echo;;
- -n|--dry-run) dry_run=echo; verbose=echo;;
- -h|--help) help;;
- --wtf) wtf $(basename $0) clean up old files; exit 0;;
- --) shift; break;;
- -*) echo >&2 "$0: unrecognized option $1"
- exit 1;;
- *) break
- esac
- shift
+ case $1 in
+ -s|--suffix) shift; suffix=$1;;
+ -r|--retain) shift; retainweeks=$1;;
+ -v|--verbose) verbose=echo;;
+ -n|--dry-run) dry_run=echo; verbose=echo;;
+ -h|--help) help;;
+ --wtf) wtf $(basename $0) clean up old files; exit 0;;
+ --) shift; break;;
+ -*) echo >&2 "$0: unrecognized option $1"
+ exit 1;;
+ *) break
+ esac
+ shift
done
case $# in
-0) echo >&2 "$0: not enough arguments"
- exit 1;;
-1) dir=$1;;
-*) echo >&2 "$0: too many arguments"
- exit 1;;
+ 0) echo >&2 "$0: not enough arguments"
+ exit 1;;
+ 1) dir=$1;;
+ *) echo >&2 "$0: too many arguments"
+ exit 1;;
esac
thisweek=$(date +%U)
@@ -58,31 +73,31 @@ thisweek=$(date +%U)
# because weeks prior to 10 begin with 0 and therefore are processed
# as octal numbers. This causes grief for weeks 08 and 09.
if [ $thisweek -gt $retainweeks ]; then
- lastweek=$(expr $thisweek - $retainweeks)
+ lastweek=$(expr $thisweek - $retainweeks)
else
- lastweek=$(expr $thisweek + 54 - $retainweeks)
+ lastweek=$(expr $thisweek + 54 - $retainweeks)
fi
$verbose \# removing from $dir files ending in $suffix and older than week $lastweek
if [ -z "$suffix" ]; then
- find $dir -maxdepth 1 -type f -printf '%f\n'
+ find $dir -maxdepth 1 -type f -printf '%f\n'
else
- find $dir -maxdepth 1 -type f -name "*$suffix" -printf '%f\n'
+ find $dir -maxdepth 1 -type f -name "*$suffix" -printf '%f\n'
fi |
while read name
do
- $verbose \# considering $name
- week=$(expr "$name" : '[^-][^-]*-\([0-9][0-9]*\)-.*')
- if [ $thisweek -ge $week ]; then
- if [ $(expr $thisweek - $week) -gt $retainweeks ]; then
- $verbose \# removing $name
- $dry_run rm $dir/$name
- fi
- else
- if [ $(expr $thisweek + 54 - $week) -gt $retainweeks ]; then
- $verbose \# removing $name
- $dry_run rm $dir/$name
- fi
- fi
+ $verbose \# considering $name
+ week=$(expr "$name" : '[^-][^-]*-\([0-9][0-9]*\)-.*')
+ if [ $thisweek -ge $week ]; then
+ if [ $(expr $thisweek - $week) -gt $retainweeks ]; then
+ $verbose \# removing $name
+ $dry_run rm $dir/$name
+ fi
+ else
+ if [ $(expr $thisweek + 54 - $week) -gt $retainweeks ]; then
+ $verbose \# removing $name
+ $dry_run rm $dir/$name
+ fi
+ fi
done
diff --git a/configure.ac b/configure.ac
index a90c938..6e39a4a 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,5 +1,5 @@
# This file is part of BEAM -*- autoconf -*-
-# Copyright (C) 2012, 2013 Sergey Poznyakoff
+# Copyright (C) 2012-2014 Sergey Poznyakoff
#
# BEAM is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
diff --git a/doc/Makefile.am b/doc/Makefile.am
index 846c1de..0d82900 100644
--- a/doc/Makefile.am
+++ b/doc/Makefile.am
@@ -1,5 +1,5 @@
# This file is part of BEAM
-# Copyright (C) 2012 Sergey Poznyakoff
+# Copyright (C) 2012-2014 Sergey Poznyakoff
#
# BEAM is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
diff --git a/doc/beam-backup.1in b/doc/beam-backup.1in
index be45a44..2438d7b 100644
--- a/doc/beam-backup.1in
+++ b/doc/beam-backup.1in
@@ -1,5 +1,5 @@
.\" This file is part of BEAM -*- nroff -*-
-.\" Copyright (C) 2012 Sergey Poznyakoff
+.\" Copyright (C) 2012-2014 Sergey Poznyakoff
.\"
.\" BEAM is free software; you can redistribute it and/or modify
.\" it under the terms of the GNU General Public License as published by
@@ -14,7 +14,7 @@
.\" You should have received a copy of the GNU General Public License
.\" along with BEAM. If not, see <http://www.gnu.org/licenses/>.
.\"
-.TH BEAM\-BACKUP 1 "October 24, 2012" "BEAM" "BEAM User Reference"
+.TH BEAM\-BACKUP 1 "March 19, 2014" "BEAM" "BEAM User Reference"
.SH NAME
beam\-backup \- create a back up.
.SH SYNOPSIS
diff --git a/doc/beam-cleaner.1in b/doc/beam-cleaner.1in
index 36f2de7..59a39b4 100644
--- a/doc/beam-cleaner.1in
+++ b/doc/beam-cleaner.1in
@@ -1,5 +1,5 @@
.\" This file is part of BEAM -*- nroff -*-
-.\" Copyright (C) 2012 Sergey Poznyakoff
+.\" Copyright (C) 2012-2014 Sergey Poznyakoff
.\"
.\" BEAM is free software; you can redistribute it and/or modify
.\" it under the terms of the GNU General Public License as published by
@@ -14,7 +14,7 @@
.\" You should have received a copy of the GNU General Public License
.\" along with BEAM. If not, see <http://www.gnu.org/licenses/>.
.\"
-.TH BEAM\-CLEANER 1 "October 24, 2012" "BEAM" "BEAM User Reference"
+.TH BEAM\-CLEANER 1 "March 19, 2014" "BEAM" "BEAM User Reference"
.SH NAME
beam\-cleaner \- clean up old backup files.
.SH SYNOPSIS
diff --git a/doc/beam-list.1in b/doc/beam-list.1in
index 0614e81..57aa537 100644
--- a/doc/beam-list.1in
+++ b/doc/beam-list.1in
@@ -1,5 +1,5 @@
.\" This file is part of BEAM -*- nroff -*-
-.\" Copyright (C) 2012 Sergey Poznyakoff
+.\" Copyright (C) 2012-2014 Sergey Poznyakoff
.\"
.\" BEAM is free software; you can redistribute it and/or modify
.\" it under the terms of the GNU General Public License as published by
@@ -14,7 +14,7 @@
.\" You should have received a copy of the GNU General Public License
.\" along with BEAM. If not, see <http://www.gnu.org/licenses/>.
.\"
-.TH BEAM\-LIST 1 "October 24, 2012" "BEAM" "BEAM User Reference"
+.TH BEAM\-LIST 1 "March 19, 2014" "BEAM" "BEAM User Reference"
.SH NAME
beam\-list \- list items included in backup
.SH SYNOPSIS
diff --git a/doc/beam-module.5in b/doc/beam-module.5in
index f650c65..9ba239f 100644
--- a/doc/beam-module.5in
+++ b/doc/beam-module.5in
@@ -1,5 +1,5 @@
.\" This file is part of BEAM -*- nroff -*-
-.\" Copyright (C) 2012 Sergey Poznyakoff
+.\" Copyright (C) 2012-2014 Sergey Poznyakoff
.\"
.\" BEAM is free software; you can redistribute it and/or modify
.\" it under the terms of the GNU General Public License as published by
@@ -14,7 +14,7 @@
.\" You should have received a copy of the GNU General Public License
.\" along with BEAM. If not, see <http://www.gnu.org/licenses/>.
.\"
-.TH BEAM\-MODULE 5 "January 16, 2013" "BEAM" "BEAM Programmer Reference"
+.TH BEAM\-MODULE 5 "March 19, 2014" "BEAM" "BEAM Programmer Reference"
.SH NAME
beam\-module \- format of
.BR beam (1)
diff --git a/doc/beam-restore.1in b/doc/beam-restore.1in
index bbbfbba..6d24ad8 100644
--- a/doc/beam-restore.1in
+++ b/doc/beam-restore.1in
@@ -1,5 +1,5 @@
.\" This file is part of BEAM -*- nroff -*-
-.\" Copyright (C) 2012 Sergey Poznyakoff
+.\" Copyright (C) 2012-2014 Sergey Poznyakoff
.\"
.\" BEAM is free software; you can redistribute it and/or modify
.\" it under the terms of the GNU General Public License as published by
@@ -14,7 +14,7 @@
.\" You should have received a copy of the GNU General Public License
.\" along with BEAM. If not, see <http://www.gnu.org/licenses/>.
.\"
-.TH BEAM\-RESTORE 1 "October 24, 2012" "BEAM" "BEAM User Reference"
+.TH BEAM\-RESTORE 1 "March 19, 2014" "BEAM" "BEAM User Reference"
.SH NAME
beam\-restore \- restore file system from a backup.
.SH SYNOPSIS
diff --git a/doc/beam-s3.1in b/doc/beam-s3.1in
index 68dc66b..a295270 100644
--- a/doc/beam-s3.1in
+++ b/doc/beam-s3.1in
@@ -1,5 +1,5 @@
.\" This file is part of BEAM -*- nroff -*-
-.\" Copyright (C) 2012 Sergey Poznyakoff
+.\" Copyright (C) 2012-2014 Sergey Poznyakoff
.\"
.\" BEAM is free software; you can redistribute it and/or modify
.\" it under the terms of the GNU General Public License as published by
@@ -14,7 +14,7 @@
.\" You should have received a copy of the GNU General Public License
.\" along with BEAM. If not, see <http://www.gnu.org/licenses/>.
.\"
-.TH BEAM\-S3 1 "October 24, 2012" "BBE" "BBE User Reference"
+.TH BEAM\-S3 1 "March 19, 2014" "BBE" "BBE User Reference"
.SH NAME
beam\-s3 \- manage a backup s3 bucket
.SH SYNOPSIS
diff --git a/doc/beam.1in b/doc/beam.1in
index fc15064..0fd3ce5 100644
--- a/doc/beam.1in
+++ b/doc/beam.1in
@@ -1,5 +1,5 @@
.\" This file is part of BEAM -*- nroff -*-
-.\" Copyright (C) 2012 Sergey Poznyakoff
+.\" Copyright (C) 2012-2014 Sergey Poznyakoff
.\"
.\" BEAM is free software; you can redistribute it and/or modify
.\" it under the terms of the GNU General Public License as published by
@@ -14,7 +14,7 @@
.\" You should have received a copy of the GNU General Public License
.\" along with BEAM. If not, see <http://www.gnu.org/licenses/>.
.\"
-.TH BEAM 1 "October 24, 2012" "BEAM" "BEAM User Reference"
+.TH BEAM 1 "March 19, 2014" "BEAM" "BEAM User Reference"
.SH NAME
beam \- a backup manager
.SH SYNOPSIS
diff --git a/lib/beam/Makefile.am b/lib/beam/Makefile.am
index 22c9a12..81385ad 100644
--- a/lib/beam/Makefile.am
+++ b/lib/beam/Makefile.am
@@ -1,5 +1,5 @@
# This file is part of BEAM
-# Copyright (C) 2012 Sergey Poznyakoff
+# Copyright (C) 2012-2014 Sergey Poznyakoff
#
# BEAM is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
diff --git a/lib/beam/common.in b/lib/beam/common.in
index 4f2184b..94b4565 100644
--- a/lib/beam/common.in
+++ b/lib/beam/common.in
@@ -34,111 +34,111 @@ backup_pidfile="/var/run/beam.pid"
backup_tmp_dir=/tmp
error() {
- echo >&2 $0: $*
+ echo >&2 $0: $*
}
logit() {
- echo `date`: $*
+ echo `date`: $*
}
abend() {
- ec=$1
- shift
- error $@
- exit $ec
+ ec=$1
+ shift
+ error $@
+ exit $ec
}
beam_lock() {
- if [ -r $backup_pidfile ]; then
+ if [ -r $backup_pidfile ]; then
pid=$(head -n 1 $backup_pidfile)
if [ -z "$pid" ]; then
- abend 1 "pidfile $backup_pidfile exists but is unreadable or empty"
+ abend 1 "pidfile $backup_pidfile exists but is unreadable or empty"
fi
abend 1 "another beam process (pid $pid) is still running; exiting"
- fi
- echo $$ > $backup_pidfile || exit 1
- epilogue_hook="$epilogue_hook beam_unlock"
+ fi
+ echo $$ > $backup_pidfile || exit 1
+ epilogue_hook="$epilogue_hook beam_unlock"
}
beam_unlock() {
- rm -f $backup_pidfile
+ rm -f $backup_pidfile
}
tarcode() {
- case $1 in
- 0) logit "success";;
- 1) logit "some files changed while being archived";;
- 2) logit "fatal error occurred, but trying to continue anyway"
- tarerror=$((tarerror + 1));;
- *) logit "unexpected error code $1"
- tarerror=$((tarerror + 1));
- esac
+ case $1 in
+ 0) logit "success";;
+ 1) logit "some files changed while being archived";;
+ 2) logit "fatal error occurred, but trying to continue anyway"
+ tarerror=$((tarerror + 1));;
+ *) logit "unexpected error code $1"
+ tarerror=$((tarerror + 1));
+ esac
}
load_config() {
- local delayed_exit remote
-
- test -z "$BEAM_CONFIG" && BEAM_CONFIG=@SYSCONFDIR@/beam.conf
- if [ -r $BEAM_CONFIG ]; then
- . $BEAM_CONFIG
- else
- abend 1 "configuration file $BEAM_CONFIG does not exist or is unreadable"
- fi
+ local delayed_exit remote
- if [ -z "$backup_items" ]; then
- abend 1 "backup_items not specified"
- fi
-
- if [ -z "$backup_archive_dir" ]; then
- if [ -n "$backup_bucket_name" ]; then
- backup_archive_dir=$backup_mp_s3
+ test -z "$BEAM_CONFIG" && BEAM_CONFIG=@SYSCONFDIR@/beam.conf
+ if [ -r $BEAM_CONFIG ]; then
+ . $BEAM_CONFIG
else
- abend 1 "backup_archive_dir not set"
+ abend 1 "configuration file $BEAM_CONFIG does not exist or is unreadable"
fi
- fi
-
- delayed_exit=
- loaded_types=
- for item in $backup_items
- do
- eval type=\$${item}_type
- if [ -z "$type" ]; then
- error "${item}_type not set"
- delayed_exit=1
- continue
+
+ if [ -z "$backup_items" ]; then
+ abend 1 "backup_items not specified"
fi
+
+ if [ -z "$backup_archive_dir" ]; then
+ if [ -n "$backup_bucket_name" ]; then
+ backup_archive_dir=$backup_mp_s3
+ else
+ abend 1 "backup_archive_dir not set"
+ fi
+ fi
+
+ delayed_exit=
+ loaded_types=
+ for item in $backup_items
+ do
+ eval type=\$${item}_type
+ if [ -z "$type" ]; then
+ error "${item}_type not set"
+ delayed_exit=1
+ continue
+ fi
- if echo "$loaded_types" | grep -wq $type; then
- :
- elif [ -x $libdir/${type}.sh ]; then
- . $libdir/${type}.sh || delayed_exit=1
- loaded_types="$loaded_files
+ if echo "$loaded_types" | grep -wq $type; then
+ :
+ elif [ -x $libdir/${type}.sh ]; then
+ . $libdir/${type}.sh || delayed_exit=1
+ loaded_types="$loaded_files
$type"
- else
- error "$libdir/${type}.sh not found"
- delayed_exit=1
- fi
+ else
+ error "$libdir/${type}.sh not found"
+ delayed_exit=1
+ fi
- ${type}_check $item || delayed_exit=1
- done
+ ${type}_check $item || delayed_exit=1
+ done
- test -n "$delayed_exit" && abend 1 "aborting"
+ test -n "$delayed_exit" && abend 1 "aborting"
- tar_suffix=${backup_suffix:-.tar}
+ tar_suffix=${backup_suffix:-.tar}
- if [ -n "$backup_bucket_name" ]; then
- . @LIBDIR@/beam/s3.sh
- prologue_hook="s3_mount $prologue_hook"
- fi
+ if [ -n "$backup_bucket_name" ]; then
+ . @LIBDIR@/beam/s3.sh
+ prologue_hook="s3_mount $prologue_hook"
+ fi
- remote=${backup_archive_dir%%:*}
- if [ "$remote" != "$backup_archive_dir" ]; then
- beam_rsh="${backup_rsh:-ssh} $remote"
- backup_local_archive_dir=${backup_archive_dir#*:}
- else
- beam_rsh=
- backup_local_archive_dir=$backup_archive_dir
- fi
+ remote=${backup_archive_dir%%:*}
+ if [ "$remote" != "$backup_archive_dir" ]; then
+ beam_rsh="${backup_rsh:-ssh} $remote"
+ backup_local_archive_dir=${backup_archive_dir#*:}
+ else
+ beam_rsh=
+ backup_local_archive_dir=$backup_archive_dir
+ fi
}
beam_exec() {
@@ -152,67 +152,67 @@ beam_exec() {
}
runhook() {
- local hook_list
+ local hook_list
- eval hook_list=\$$1
- for hook in $hook_list
- do
- $hook
- done
+ eval hook_list=\$$1
+ for hook in $hook_list
+ do
+ $hook
+ done
}
print_version() {
- name=$(basename $0)
- cat <<EOF
+ name=$(basename $0)
+ cat <<EOF
$name (@PACKAGE_NAME@) @PACKAGE_VERSION@
Copyright (C) 2012 Sergey Poznyakoff
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
EOF
- exit 0
+ exit 0
}
wtf() {
- l=`echo "${1#beam-}"|sed "s|.|.|g"`
- s=$(echo " " | sed "s|$l|${1#beam-}|")
- shift
- echo " $s $@"
+ l=$(echo "${1#beam-}"|sed "s|.|.|g")
+ s=$(echo " " | sed "s|$l|${1#beam-}|")
+ shift
+ echo " $s $@"
}
dry_mail() {
- echo "============================================================="
- cat -
- echo "============================================================="
+ echo "============================================================="
+ cat -
+ echo "============================================================="
}
# mail_report FILE
mail_report() {
- : ${backup_mailer_program:=/usr/sbin/sendmail -oi -t -F $backup_sender_email}
- if [ -n "$dry_run" ]; then
- echo "Sending mail using $backup_mailer_program"
- backup_mailer_program=dry_mail
- fi
- if [ -z "$backup_sender_email" ]; then
- backup_sender_email=root@$(hostname)
- fi
- case $backup_sender_email in
- "<"*) ;;
- *) backup_sender_email="<$backup_sender_email>"
- esac
- if [ -n "$backup_sender_personal" ]; then
- case $backup_sender_personal in
- \"*) ;;
- *) backup_sender_personal="\"$backup_sender_personal\""
+ : ${backup_mailer_program:=/usr/sbin/sendmail -oi -t -F $backup_sender_email}
+ if [ -n "$dry_run" ]; then
+ echo "Sending mail using $backup_mailer_program"
+ backup_mailer_program=dry_mail
+ fi
+ if [ -z "$backup_sender_email" ]; then
+ backup_sender_email=root@$(hostname)
+ fi
+ case $backup_sender_email in
+ "<"*) ;;
+ *) backup_sender_email="<$backup_sender_email>"
esac
- backup_sender_personal="$backup_sender_personal "
- fi
- if [ -z "$backup_report_subject" ]; then
- backup_report_subject="Backup of $(hostname) on $(date)"
- fi
- test -n "$backup_report_signature" &&
- echo "$backup_report_signature" >> $report
- (cat - <<EOF
+ if [ -n "$backup_sender_personal" ]; then
+ case $backup_sender_personal in
+ \"*) ;;
+ *) backup_sender_personal="\"$backup_sender_personal\""
+ esac
+ backup_sender_personal="$backup_sender_personal "
+ fi
+ if [ -z "$backup_report_subject" ]; then
+ backup_report_subject="Backup of $(hostname) on $(date)"
+ fi
+ test -n "$backup_report_signature" &&
+ echo "$backup_report_signature" >> $report
+ (cat - <<EOF
From: ${backup_sender_personal}$backup_sender_email
To: $backup_notify_email
Subject: $backup_report_subject
@@ -220,34 +220,34 @@ X-Beam-Items: $backup_items
X-Beam-Round: $round
X-Beam-Level: $level
EOF
- if [ -n "$backup_report_headers" ]; then
- echo "$backup_report_headers"
- fi
- echo ""
- if [ -n "$backup_report_intro" ]; then
- echo "$backup_report_intro"
- fi
- cat $report
-) | $backup_mailer_program
+ if [ -n "$backup_report_headers" ]; then
+ echo "$backup_report_headers"
+ fi
+ echo ""
+ if [ -n "$backup_report_intro" ]; then
+ echo "$backup_report_intro"
+ fi
+ cat $report
+ ) | $backup_mailer_program
}
beam_logrotate() {
- local conf=/tmp/beam-logrotate.conf u
- if test -z "$backup_logrotate_conf"; then
- backup_logrotate_conf="weekly
+ local conf=/tmp/beam-logrotate.conf u
+ if test -z "$backup_logrotate_conf"; then
+ backup_logrotate_conf="weekly
rotate 4
"
- fi
- u=$(umask)
- umask 077
- cat > $conf <<EOF
+ fi
+ u=$(umask)
+ umask 077
+ cat > $conf <<EOF
$backup_logfile {
$backup_logrotate_conf
missingok
}
EOF
- umask $u
- test -d @LOCALSTATEDIR@/lib/beam || mkdir @LOCALSTATEDIR@/lib/beam
- logrotate ${dry_run+-d} $verbose --state @LOCALSTATEDIR@/lib/beam/logrotate.state $conf
- rm $conf
+ umask $u
+ test -d @LOCALSTATEDIR@/lib/beam || mkdir @LOCALSTATEDIR@/lib/beam
+ logrotate ${dry_run+-d} $verbose --state @LOCALSTATEDIR@/lib/beam/logrotate.state $conf
+ rm $conf
}
diff --git a/lib/beam/fs.sh b/lib/beam/fs.sh
index b4d0c2d..015082b 100755
--- a/lib/beam/fs.sh
+++ b/lib/beam/fs.sh
@@ -1,6 +1,6 @@
#! /bin/sh
# This file is part of BEAM
-# Copyright (C) 2012 Sergey Poznyakoff
+# Copyright (C) 2012-2014 Sergey Poznyakoff
#
# BEAM is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -28,121 +28,121 @@
# initdb item
# Initializes snapshot for the given basename.
initdb() {
- local filename
-
- if [ -n "$dry_run" ]; then
- logit "initializing snapshot for $1"
- return
- fi
-
- if [ $level -eq 0 ]; then
- filename=$backup_snapshot_dir/$1-$week-$round-$level.db
- test -r $filename && rm $filename
- else
- if [ $level -eq 1 ]; then
- filename=$backup_snapshot_dir/$1-$week-0-0.db
- else
- filename=$backup_snapshot_dir/$1-$week-$round-$((level - 1)).db
+ local filename
+
+ if [ -n "$dry_run" ]; then
+ logit "initializing snapshot for $1"
+ return
fi
- if [ -r $filename ]; then
- cp $filename $backup_snapshot_dir/$1-$week-$round-$level.db
- else
- logit "previous snapshot file $filename not found; falling back to level 0"
- filename=$backup_snapshot_dir/$1-$week-$round-$level.db
- test -r $filename && rm $filename
+
+ if [ $level -eq 0 ]; then
+ filename=$backup_snapshot_dir/$1-$week-$round-$level.db
+ test -r $filename && rm $filename
+ else
+ if [ $level -eq 1 ]; then
+ filename=$backup_snapshot_dir/$1-$week-0-0.db
+ else
+ filename=$backup_snapshot_dir/$1-$week-$round-$((level - 1)).db
+ fi
+ if [ -r $filename ]; then
+ cp $filename $backup_snapshot_dir/$1-$week-$round-$level.db
+ else
+ logit "previous snapshot file $filename not found; falling back to level 0"
+ filename=$backup_snapshot_dir/$1-$week-$round-$level.db
+ test -r $filename && rm $filename
+ fi
fi
- fi
}
# fs_check item
fs_check() {
- local rc=0 root files
+ local rc=0 root files
- eval root=\$${1}_dir
- eval files=\$${1}_files
+ eval root=\$${1}_dir
+ eval files=\$${1}_files
- test -z "$root" && rc=1 && error "${1}_dir not set"
- test -z "$files" && rc=1 && error "${1}_files not set"
- return $rc
+ test -z "$root" && rc=1 && error "${1}_dir not set"
+ test -z "$files" && rc=1 && error "${1}_files not set"
+ return $rc
}
# fs_list item prefix
fs_list() {
- local dir files lsf=
+ local dir files lsf=
- eval dir=\$${1}_dir files=\$${1}_files
- for file in $files
- do
- if [ -d "$dir/$file" ]; then
- lsf="$lsf $file/"
- else
- lsf="$lsf $file"
- fi
- done
- echo "${2}Files and directories in $dir:$lsf"
+ eval dir=\$${1}_dir files=\$${1}_files
+ for file in $files
+ do
+ if [ -d "$dir/$file" ]; then
+ lsf="$lsf $file/"
+ else
+ lsf="$lsf $file"
+ fi
+ done
+ echo "${2}Files and directories in $dir:$lsf"
}
# fs_backup item
fs_backup() {
- local basename text root files exclude addopts s e
-
- basename=$1-$week-$round-$level
- eval text=\$${1}_text
- eval root=\$${1}_dir
- eval files=\$${1}_files
- eval addopts=\$${1}_tar_options
-
- eval exclude=\$${1}_exclude
- for e in $exclude
- do
- eval s="$e"
- addopts="$addopts --exclude=$s"
- done
-
- eval exclude=\$${1}_exclude_from
- for e in $exclude
- do
- addopts="$addopts --exclude-from=$e"
- done
-
- test -z "$root" && abend 1 "${1}_dir not set"
- test -z "$files" && abend 1 "${1}_files not set"
- test -z "$text" && text="$1"
- initdb $1
- logit "backing up $text ($basename.$tar_suffix)"
- $dry_run tar $verbose $taroptions $addopts \
- -f $backup_archive_dir/$basename.$tar_suffix \
- --listed=$backup_snapshot_dir/$basename.db \
- -C $root $files
- tarcode $?
+ local basename text root files exclude addopts s e
+
+ basename=$1-$week-$round-$level
+ eval text=\$${1}_text
+ eval root=\$${1}_dir
+ eval files=\$${1}_files
+ eval addopts=\$${1}_tar_options
+
+ eval exclude=\$${1}_exclude
+ for e in $exclude
+ do
+ eval s="$e"
+ addopts="$addopts --exclude=$s"
+ done
+
+ eval exclude=\$${1}_exclude_from
+ for e in $exclude
+ do
+ addopts="$addopts --exclude-from=$e"
+ done
+
+ test -z "$root" && abend 1 "${1}_dir not set"
+ test -z "$files" && abend 1 "${1}_files not set"
+ test -z "$text" && text="$1"
+ initdb $1
+ logit "backing up $text ($basename.$tar_suffix)"
+ $dry_run tar $verbose $taroptions $addopts \
+ -f $backup_archive_dir/$basename.$tar_suffix \
+ --listed=$backup_snapshot_dir/$basename.db \
+ -C $root $files
+ tarcode $?
}
# fs_restore item
fs_restore() {
- local i text root files tarcommand
-
- eval text=\$${1}_text
- eval root=\$${1}_dir
- eval files=\$${1}_files
-
- test -z "$root" && abend 1 "${1}_dir not set"
- test -z "$files" && abend 1 "${1}_files not set"
- test -z "$text" && text="$1"
-
- tarcommand="tar $verbose $taroptions -C $root --listed-incremental=/dev/null -f"
+ local i text root files tarcommand
+
+ eval text=\$${1}_text
+ eval root=\$${1}_dir
+ eval files=\$${1}_files
+
+ test -z "$root" && abend 1 "${1}_dir not set"
+ test -z "$files" && abend 1 "${1}_files not set"
+ test -z "$text" && text="$1"
+
+ tarcommand="tar $verbose $taroptions -C $root --listed-incremental=/dev/null -f"
- logit "restoring $text"
- logit "restoring from level 0 backup"
-
- $dry_run $tarcommand $backup_archive_dir/$1-$week-0-0.$tar_suffix
- tarcode $?
+ logit "restoring $text"
+ logit "restoring from level 0 backup"
- for i in $(seq 1 $level)
- do
- logit "restoring from the $round/$i backup"
- $dry_run $tarcommand $backup_archive_dir/$1-$week-$round-$i.$tar_suffix
+ $dry_run $tarcommand $backup_archive_dir/$1-$week-0-0.$tar_suffix
tarcode $?
- done
- logit "finished restoring $text"
+
+ for i in $(seq 1 $level)
+ do
+ logit "restoring from the $round/$i backup"
+ $dry_run $tarcommand $backup_archive_dir/$1-$week-$round-$i.$tar_suffix
+ tarcode $?
+ done
+ logit "finished restoring $text"
}
diff --git a/lib/beam/ldap.sh b/lib/beam/ldap.sh
index f6e56b8..40b9a4b 100755
--- a/lib/beam/ldap.sh
+++ b/lib/beam/ldap.sh
@@ -1,6 +1,6 @@
#! /bin/sh
# This file is part of BEAM
-# Copyright (C) 2012 Sergey Poznyakoff
+# Copyright (C) 2012-2014 Sergey Poznyakoff
#
# BEAM is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
diff --git a/lib/beam/postgres.sh b/lib/beam/postgres.sh
index b5a9b6e..3938c1a 100755
--- a/lib/beam/postgres.sh
+++ b/lib/beam/postgres.sh
@@ -1,6 +1,6 @@
#! /bin/sh
# This file is part of BEAM
-# Copyright (C) 2012 Sergey Poznyakoff
+# Copyright (C) 2012-2014 Sergey Poznyakoff
#
# BEAM is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -22,81 +22,81 @@
# postgres_check item
postgres_check() {
- local database
+ local database
- eval database=\$${1}_database
- test -z "$database" && error "${1}_database not set" && return 1
- return 0
+ eval database=\$${1}_database
+ test -z "$database" && error "${1}_database not set" && return 1
+ return 0
}
# postgres_list item prefix
postgres_list() {
- local database
+ local database
- eval database=\$${1}_database
- echo "${2}PostgreSQL database $database"
+ eval database=\$${1}_database
+ echo "${2}PostgreSQL database $database"
}
# postgres_backup item
postgres_backup() {
- local database
+ local database
- eval database=\$${1}_database
- logit "backing up PostgreSQL database $database"
- test -z "$database" && abend 1 "${1}_database not set"
- if [ -z "$dry_run" ]; then
- su postgres -c "pg_dump $verbose $database" > $backup_tmp_dir/$1-$week-$round-$level
- else
- echo "su postgres -c \"pg_dump $verbose $database\" > $backup_tmp_dir/$1-$week-$round-$level"
- fi
+ eval database=\$${1}_database
+ logit "backing up PostgreSQL database $database"
+ test -z "$database" && abend 1 "${1}_database not set"
+ if [ -z "$dry_run" ]; then
+ su postgres -c "pg_dump $verbose $database" > $backup_tmp_dir/$1-$week-$round-$level
+ else
+ echo "su postgres -c \"pg_dump $verbose $database\" > $backup_tmp_dir/$1-$week-$round-$level"
+ fi
- if [ $? -ne 0 ]; then
- tarerror=$((tarerror + 1))
- logit "failed"
- else
- logit "creating $1-$week-$round-$level.$tar_suffix"
- $dry_run tar $verbose $taroptions \
+ if [ $? -ne 0 ]; then
+ tarerror=$((tarerror + 1))
+ logit "failed"
+ else
+ logit "creating $1-$week-$round-$level.$tar_suffix"
+ $dry_run tar $verbose $taroptions \
-f $backup_archive_dir/$1-$week-$round-$level.$tar_suffix \
-C $backup_tmp_dir $1-$week-$round-$level
- tarcode $?
- $dry_run rm $backup_tmp_dir/$1-$week-$round-$level
- fi
+ tarcode $?
+ $dry_run rm $backup_tmp_dir/$1-$week-$round-$level
+ fi
}
postgres_restore() {
- local u database
+ local u database
- eval database=\$${1}_database
- logit "restoring PostgreSQL database $database"
- u=$(umask)
- trap "umask $u" 1 2 3 13 15
- umask 077
- $dry_run tar $verbose $taroptions \
+ eval database=\$${1}_database
+ logit "restoring PostgreSQL database $database"
+ u=$(umask)
+ trap "umask $u" 1 2 3 13 15
+ umask 077
+ $dry_run tar $verbose $taroptions \
-f $backup_archive_dir/$1-$week-$round-$level.$tar_suffix
- e=$?
- tarcode $e
- if [ $e -eq 0 ]; then
- logit "restoring database from the dump"
- if [ -n "$dry_run" ]; then
- cat <<-EOT
+ e=$?
+ tarcode $e
+ if [ $e -eq 0 ]; then
+ logit "restoring database from the dump"
+ if [ -n "$dry_run" ]; then
+ cat <<-EOT
su postgres -c "dropdb $database"
su postgres -c "createdb $database"
su postgres -c "psql -d $database -f $1-$week-$round-$level"
rm $1-$week-$round-$level
EOT
- elif [ -r $1-$week-$round-$level ]; then
- su postgres -c "dropdb $database"
- su postgres -c "createdb $database"
- su postgres -c "psql -d $database -f $1-$week-$round-$level" > db-$1.log
- if grep ERROR db-$1.log >/dev/null; then
- error "errors occurred during restore; see db-$1.log for details"
- error "dump preserved in file $1-$week-$round-$level"
- tarerror=$((tarerror + 1))
- else
- rm $1-$week-$round-$level
- fi
+ elif [ -r $1-$week-$round-$level ]; then
+ su postgres -c "dropdb $database"
+ su postgres -c "createdb $database"
+ su postgres -c "psql -d $database -f $1-$week-$round-$level" > db-$1.log
+ if grep ERROR db-$1.log >/dev/null; then
+ error "errors occurred during restore; see db-$1.log for details"
+ error "dump preserved in file $1-$week-$round-$level"
+ tarerror=$((tarerror + 1))
+ else
+ rm $1-$week-$round-$level
+ fi
+ fi
fi
- fi
- umask $u
- trap - 1 2 3 13 15
+ umask $u
+ trap - 1 2 3 13 15
}
diff --git a/lib/beam/s3.sh b/lib/beam/s3.sh
index d2fcfe6..7b6ad91 100644
--- a/lib/beam/s3.sh
+++ b/lib/beam/s3.sh
@@ -1,6 +1,6 @@
#! /bin/sh
# This file is part of BEAM
-# Copyright (C) 2012 Sergey Poznyakoff
+# Copyright (C) 2012-2014 Sergey Poznyakoff
#
# BEAM is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -25,7 +25,7 @@ test -z "$backup_mp" && backup_mp_s3=/mnt/s3
s3_getmpoint()
{
- case $1 in
+ case $1 in
# Sample mount output, split into several lines:
# a) With --vhost:
# http://BUCKETNAME.s3.amazonaws.com/ on /mnt/s3backer type fuse.s3backer
@@ -33,71 +33,73 @@ s3_getmpoint()
# b) Without --vhost:
# http://s3.amazonaws.com/BUCKETNAME/ on /mnt/s3backer type fuse.s3backer
# (rw,nosuid,nodev,allow_other,default_permissions)
- backer)
- mount -tfuse.s3backer |
- awk '/https?:\/\/.*'$backup_bucket_name'/ { print $3 }';;
- s3)
- s=$(mount | grep "^${backup_mp_s3backer}/file" | awk '{ print $3 }')
- if [ -z "$s" ]; then
- # Some kernels print device name instead of the actual mount file:
- s=$(mount | grep "^/dev/loop[0-9] on ${backup_mp_s3}" | awk '{ print $3 }')
- fi
- echo $s;;
- *)
- abent 1 "invalid usage of getmpoint"
- esac
+ backer)
+ mount -tfuse.s3backer |
+ awk '/https?:\/\/.*'$backup_bucket_name'/ { print $3 }';;
+ s3)
+ s=$(mount | grep "^${backup_mp_s3backer}/file" | awk '{ print $3 }')
+ if [ -z "$s" ]; then
+ # Some kernels print device name instead of the actual mount file:
+ s=$(mount | grep "^/dev/loop[0-9] on ${backup_mp_s3}" |
+ awk '{ print $3 }')
+ fi
+ echo $s;;
+ *)
+ abent 1 "invalid usage of getmpoint"
+ esac
}
# This variable is populated by s3_mount and is used by s3_unmount to unmount
# s3-backed file system.
umount_list=""
-s3_mount() {
- # Make sure both mountpoints exist
- test -d $backup_mp_s3backer || mkdir $backup_mp_s3backer
- test -d $backup_mp_s3 || mkdir $backup_mp_s3
+s3_mount() {
+ # Make sure both mountpoints exist
+ test -d $backup_mp_s3backer || mkdir $backup_mp_s3backer
+ test -d $backup_mp_s3 || mkdir $backup_mp_s3
- set -- $(s3_getmpoint backer)
- if test -z "$1"; then
- $dry_run s3backer $backup_s3backer_options \
+ set -- $(s3_getmpoint backer)
+ if test -z "$1"; then
+ $dry_run s3backer $backup_s3backer_options \
$backup_bucket_name $backup_mp_s3backer ||
abend 1 "unable to mount $backup_bucket_name"
- umount_list="$backup_mp_s3backer"
- else
- backup_mp_s3backer=$1
- fi
- set -- $(s3_getmpoint s3)
- if test -z "$1"; then
- case $(basename $0) in
- beam-restore|restore) mountopt=",ro";;
- beam-backup|backup) mountopt=",rw";;
- beam-s3) ;;
- *) error "called as $0: assuming default mount options"
- esac
- test -n "$backup_s3_mount_options" &&
- mountopt="$mountopt,$backup_s3_mount_options"
- # NOTE: For ext4 add the journal_async_commit option.
- $dry_run mount -oloop$mountopt $backup_mp_s3backer/file $backup_mp_s3 ||
- abend 1 "unable to mount $backup_mp_s3backer/file"
- umount_list="$backup_mp_s3 $umount_list"
- else
- backup_mp_s3=$1
- fi
- epilogue_hook="s3_unmount $epilogue_hook"
+ umount_list="$backup_mp_s3backer"
+ else
+ backup_mp_s3backer=$1
+ fi
+ set -- $(s3_getmpoint s3)
+ if test -z "$1"; then
+ case $(basename $0) in
+ beam-restore|restore) mountopt=",ro";;
+ beam-backup|backup) mountopt=",rw";;
+ beam-s3) ;;
+ *) error "called as $0: assuming default mount options"
+ esac
+ test -n "$backup_s3_mount_options" &&
+ mountopt="$mountopt,$backup_s3_mount_options"
+ # NOTE: For ext4 add the journal_async_commit option.
+ $dry_run mount -oloop$mountopt \
+ $backup_mp_s3backer/file $backup_mp_s3 ||
+ abend 1 "unable to mount $backup_mp_s3backer/file"
+ umount_list="$backup_mp_s3 $umount_list"
+ else
+ backup_mp_s3=$1
+ fi
+ epilogue_hook="s3_unmount $epilogue_hook"
}
s3_unmount()
{
- if test "$1" = "--force"; then
- for id in s3 backer
- do
- mpoint=$(s3_getmpoint $id)
- test -n "$mpoint" && $dry_run umount $mpoint
- done
- else
- for mpoint in $umount_list
- do
- test -n "$mpoint" && $dry_run umount $mpoint
- done
- fi
+ if test "$1" = "--force"; then
+ for id in s3 backer
+ do
+ mpoint=$(s3_getmpoint $id)
+ test -n "$mpoint" && $dry_run umount $mpoint
+ done
+ else
+ for mpoint in $umount_list
+ do
+ test -n "$mpoint" && $dry_run umount $mpoint
+ done
+ fi
}
diff --git a/list.in b/list.in
index 1452a9d..4198d3c 100644
--- a/list.in
+++ b/list.in
@@ -1,6 +1,6 @@
#! /bin/sh
# This file is part of BEAM
-# Copyright (C) 2012 Sergey Poznyakoff
+# Copyright (C) 2012-2014 Sergey Poznyakoff
#
# BEAM is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -21,12 +21,12 @@ set -e
set +e
if [ "$1" = "--wtf" ]; then
- wtf $(basename $0) list what is included in backups
- exit 0
+ wtf $(basename $0) list what is included in backups
+ exit 0
fi
help() {
- cat <<EOF
+ cat <<EOF
usage: $0
list what is included in backups
@@ -39,7 +39,7 @@ OPTIONS:
Report bugs to <@PACKAGE_BUGREPORT@>
EOF
- exit 0
+ exit 0
}
###########################################################
@@ -49,51 +49,51 @@ EOF
numbered_list=
while [ $# -ne 0 ]
do
- case $1 in
- -l|--number) numbered_list=1;;
- -h|--help) help;;
- -V|--version) print_version;;
- *) echo >&2 "$0: unrecognized option $1"; exit 1;;
- esac
- shift
+ case $1 in
+ -l|--number) numbered_list=1;;
+ -h|--help) help;;
+ -V|--version) print_version;;
+ *) echo >&2 "$0: unrecognized option $1"; exit 1;;
+ esac
+ shift
done
load_config
if [ -z "$backup_items" ]; then
- echo "Nothing is being backed up"
+ echo "Nothing is being backed up"
fi
delayed_exit=
loaded_types=
if test -n "$numbered_list"; then
- n=0
+ n=0
fi
prefix=
for item in $backup_items
do
- eval type=\$${item}_type
- if [ -z "$type" ]; then
- error "${item}_type not set"
- delayed_exit=1
- continue
- fi
- if echo "$loaded_types" | grep -wq $type; then
- :
- elif [ -x $libdir/${type}.sh ]; then
- . $libdir/${type}.sh || delayed_exit=1
- loaded_types="$loaded_files
+ eval type=\$${item}_type
+ if [ -z "$type" ]; then
+ error "${item}_type not set"
+ delayed_exit=1
+ continue
+ fi
+ if echo "$loaded_types" | grep -wq $type; then
+ :
+ elif [ -x $libdir/${type}.sh ]; then
+ . $libdir/${type}.sh || delayed_exit=1
+ loaded_types="$loaded_files
$type"
- else
- error "$libdir/${type}.sh not found"
- delayed_exit=1
- fi
+ else
+ error "$libdir/${type}.sh not found"
+ delayed_exit=1
+ fi
- if test -n "$numbered_list"; then
- n=$((n + 1))
- prefix="$n. "
- fi
- ${type}_list $item "$prefix" || delayed_exit=1
+ if test -n "$numbered_list"; then
+ n=$((n + 1))
+ prefix="$n. "
+ fi
+ ${type}_list $item "$prefix" || delayed_exit=1
done
test -n "$delayed_exit" && abend 1 "aborting"
diff --git a/restore.in b/restore.in
index c1dc0c6..8618e2d 100644
--- a/restore.in
+++ b/restore.in
@@ -21,8 +21,8 @@ set -e
set +e
if [ "$1" = "--wtf" ]; then
- wtf $(basename $0) create a backup
- exit 0
+ wtf $(basename $0) create a backup
+ exit 0
fi
load_config
@@ -37,16 +37,16 @@ listonly=
confirm=1
getyn() {
- echo -n "$0:" $* " [Y/n]? "
- read REPLY
- case $REPLY in
- ''|y*|Y*) REPLY=y;;
- *) REPLY=n;;
- esac
+ echo -n "$0:" $* " [Y/n]? "
+ read REPLY
+ case $REPLY in
+ ''|y*|Y*) REPLY=y;;
+ *) REPLY=n;;
+ esac
}
help() {
- cat <<EOT
+ cat <<EOT
usage: restore [OPTIONS] [ITEM [ITEM...]]
restores this system from a backup
@@ -66,34 +66,34 @@ Valid ITEMs are: $backup_items
Report bugs to <@PACKAGE_BUGREPORT@>
EOT
- exit 0
+ exit 0
}
while [ $# -ne 0 ]
do
- case $1 in
- -C|--directory) shift; root=$1;;
- -c|--confirm) confirm=0;;
- -v|--verbose) verbose="$verbose -v";;
- -t|--list) listonly=1;;
- -l|--logfile) shift; logfile=$1; confirm=0;;
- -n|--dry-run) dry_run=echo;;
- -h|--help) help;;
- -V|--version) print_version;;
- -L|--level) shift; level=$1;;
- -R|--round) shift; round=$1;;
- -W|--week) shift; week=$1;;
- --) shift; break;;
- -*) echo >&2 "$0: unrecognized option $1"; exit 1;;
- *) break;;
- esac
- shift
+ case $1 in
+ -C|--directory) shift; root=$1;;
+ -c|--confirm) confirm=0;;
+ -v|--verbose) verbose="$verbose -v";;
+ -t|--list) listonly=1;;
+ -l|--logfile) shift; logfile=$1; confirm=0;;
+ -n|--dry-run) dry_run=echo;;
+ -h|--help) help;;
+ -V|--version) print_version;;
+ -L|--level) shift; level=$1;;
+ -R|--round) shift; round=$1;;
+ -W|--week) shift; week=$1;;
+ --) shift; break;;
+ -*) echo >&2 "$0: unrecognized option $1"; exit 1;;
+ *) break;;
+ esac
+ shift
done
if [ -z "$listonly" ]; then
- taroptions="$taroptions -x"
+ taroptions="$taroptions -x"
else
- taroptions="$taroptions -t"
+ taroptions="$taroptions -t"
fi
# Collect items to be restored.
@@ -102,9 +102,9 @@ items=$*
test -z "$items" && items="$backup_items"
if [ -n "$logfile" ]; then
- confirm=0
- exec >>$logfile
- exec 2>&1
+ confirm=0
+ exec >>$logfile
+ exec 2>&1
fi
runhook prologue_hook
@@ -112,32 +112,32 @@ trap "runhook epilogue_hook" EXIT INT QUIT TERM
# Guess missing values
if [ -z "$week" ]; then
- hour=$(date +%H)
- if [ $hour -gt 6 ]; then
- week=$(date +%U)
- else
- week=$(date -d yesterday +%U)
- fi
+ hour=$(date +%H)
+ if [ $hour -gt 6 ]; then
+ week=$(date +%U)
+ else
+ week=$(date -d yesterday +%U)
+ fi
fi
if [ -z "$round" ]; then
- round=$(beam_exec find $backup_local_archive_dir \
+ round=$(beam_exec find $backup_local_archive_dir \
-regex '.*-'$week'-[0-9][0-9]*-[0-9][0-9]*\..*' \
-printf '%f\\n' |
- sed 's/.*-'$week'-\([0-9][0-9]*\)-[0-9][0-9]*\..*/\1/' |
- sort +0 -1 |
- tail -1)
- test -z "$round" && abend 1 "cannot determine last round number"
+ sed 's/.*-'$week'-\([0-9][0-9]*\)-[0-9][0-9]*\..*/\1/' |
+ sort +0 -1 |
+ tail -1)
+ test -z "$round" && abend 1 "cannot determine last round number"
fi
if [ -z "$level" ]; then
- level=$(beam_exec find $backup_local_archive_dir \
+ level=$(beam_exec find $backup_local_archive_dir \
-regex '.*-'$week-$round'-[0-9][0-9]*\..*' \
-printf '%f\\n' |
- sed 's/.*-'$week-$round'-\([0-9][0-9]*\)\..*/\1/' |
- sort +0 -1 |
- tail -1)
- test -z "$level" && abend 1 "cannot determine last level number"
+ sed 's/.*-'$week-$round'-\([0-9][0-9]*\)\..*/\1/' |
+ sort +0 -1 |
+ tail -1)
+ test -z "$level" && abend 1 "cannot determine last level number"
fi
echo "$0: target root directory $root"
@@ -145,16 +145,16 @@ echo "$0: items to be restored: $items"
echo "$0: restoring from week $week, round $round, level $level"
if [ $confirm -ne 0 ]; then
- getyn "Do you wish to proceed"
- test $REPLY = "n" && exit 0
+ getyn "Do you wish to proceed"
+ test $REPLY = "n" && exit 0
fi
logit "started"
for item in $items
do
- eval type=\$${item}_type
- ${type}_restore $item
+ eval type=\$${item}_type
+ ${type}_restore $item
done
trap - EXIT INT QUIT TERM
diff --git a/s3.in b/s3.in
index e4d838f..3d9f2c5 100644
--- a/s3.in
+++ b/s3.in
@@ -1,6 +1,6 @@
#! /bin/sh
# This file is part of BEAM
-# Copyright (C) 2012 Sergey Poznyakoff
+# Copyright (C) 2012-2014 Sergey Poznyakoff
#
# BEAM is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -20,27 +20,27 @@ set -e
set +e
if [ "$1" = "--wtf" ]; then
- wtf $(basename $0) mount or unmount a backup s3 bucket
- exit 0
+ wtf $(basename $0) mount or unmount a backup s3 bucket
+ exit 0
fi
test -z "$BEAM_CONFIG" && BEAM_CONFIG=@SYSCONFDIR@/beam.conf
if [ ! -r $BEAM_CONFIG ]; then
- echo >&2 "$0: configuration file $BEAM_CONFIG is not found or is unreadable"
- exit 1
+ echo >&2 "$0: configuration file $BEAM_CONFIG is not found or is unreadable"
+ exit 1
fi
. $BEAM_CONFIG
. @LIBDIR@/beam/s3.sh
if [ -z "$backup_bucket_name" ]; then
- echo >&2 "$0: backup_bucket_name is not defined (examine $BEAM_CONFIG)"
- exit 1
+ echo >&2 "$0: backup_bucket_name is not defined (examine $BEAM_CONFIG)"
+ exit 1
fi
help() {
- cat <<EOT
+ cat <<EOT
usage: beam s3 [OPTIONS]
or: beam s3 {mount|umount|status}
$0 mounts or unmounts a backup s3 bucket, as configured in $BEAM_CONFIG
@@ -53,33 +53,33 @@ Valid ITEMs are: $backup_items
Report bugs to <@PACKAGE_BUGREPORT@>
EOT
- exit 0
+ exit 0
}
while [ $# -ne 0 ]
do
- case $1 in
- -h|--help) help;;
- -V|--version) print_version;;
- *) break;;
- esac
+ case $1 in
+ -h|--help) help;;
+ -V|--version) print_version;;
+ *) break;;
+ esac
done
case $1 in
-mount)
- s3_mount
- echo "$backup_bucket_name mounted under $backup_mp_s3";;
-umount|unmount)
- s3_unmount --force;;
-status)
- for id in s3 backer
- do
- mpoint=$(s3_getmpoint $id)
- if [ -n "$mpoint" ]; then
- echo "$id is mounted on $mpoint"
- fi
- done;;
+ mount)
+ s3_mount
+ echo "$backup_bucket_name mounted under $backup_mp_s3";;
+ umount|unmount)
+ s3_unmount --force;;
+ status)
+ for id in s3 backer
+ do
+ mpoint=$(s3_getmpoint $id)
+ if [ -n "$mpoint" ]; then
+ echo "$id is mounted on $mpoint"
+ fi
+ done;;
-*) help
- exit 1;;
+ *) help
+ exit 1;;
esac

Return to:

Send suggestions and report system problems to the System administrator.