summaryrefslogtreecommitdiffabout
authorSergey Poznyakoff <gray@gnu.org>2014-03-19 05:44:16 (GMT)
committer Sergey Poznyakoff <gray@gnu.org>2014-03-19 05:44:16 (GMT)
commit22cddd5c61d150584a065c1a5e6963e8e95a43cb (patch) (side-by-side diff)
tree86859e8dc93677226d668cd20a71f805d99181eb
parent10d30373c6fdf0dd23f16251fa2302c18b7eef97 (diff)
downloadbeam-22cddd5c61d150584a065c1a5e6963e8e95a43cb.tar.gz
beam-22cddd5c61d150584a065c1a5e6963e8e95a43cb.tar.bz2
Use uniform indentation, add missing copyleft headers, update years.
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,8 +1,8 @@
# 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
# the Free Software Foundation; either version 3, or (at your option)
# any later version.
#
diff --git a/Makefile.am b/Makefile.am
index c65a39d..551f7b2 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,8 +1,8 @@
# 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
# the Free Software Foundation; either version 3, or (at your option)
# any later version.
#
diff --git a/NEWS b/NEWS
index 7ef3571..1671079 100644
--- a/NEWS
+++ b/NEWS
@@ -1,8 +1,8 @@
-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>.
Version 1.5, 2013-08-05
@@ -41,13 +41,13 @@ Version 1.2 (git)
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
copyright notice and this permission notice are preserved,
thus giving the recipient permission to redistribute in turn.
diff --git a/README b/README
index c407c0a..9e7410c 100644
--- a/README
+++ b/README
@@ -1,8 +1,8 @@
BEAM README file.
-Copyright (C) 2012 Sergey Poznyakoff
+Copyright (C) 2012-2014 Sergey Poznyakoff
See the end of file for copying conditions.
* Introduction
BEAM is a flexible and configurable tool for backup management. Its
name is an acronym for "Backup Easy And Manageable". The tool
@@ -109,13 +109,13 @@ The documentation in man page format is available:
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
the copyright notice and this permission notice are preserved,
thus giving the recipient permission to redistribute in turn.
diff --git a/backup.in b/backup.in
index ca479b1..477b839 100644
--- a/backup.in
+++ b/backup.in
@@ -1,9 +1,9 @@
#! /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
# the Free Software Foundation; either version 3, or (at your option)
# any later version.
#
@@ -20,28 +20,28 @@ set -e
. $libdir/common.sh
set +e
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
taroptions="-c -Hpax $backup_tar_options $backup_rsh_command"
###########################################################
# Global variables
###########################################################
# 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
# Number of tar errors detected during the run
tarerror=0
@@ -51,13 +51,13 @@ round=0
###########################################################
# Utility functions
###########################################################
help() {
- cat <<EOF
+ cat <<EOF
usage: $0 [OPTIONS]
makes incremental backup of that system
OPTIONS:
-v, --verbose increase verbosity
@@ -68,77 +68,77 @@ OPTIONS:
-R, --round N mark archives with incremental round N
--week N force using week number N instead of the current one
-h, --help produce this help list
Report bugs to <@PACKAGE_BUGREPORT@>
EOF
- exit 0
+ exit 0
}
###########################################################
# Main
###########################################################
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
# finis coronat opus
diff --git a/beam.in b/beam.in
index 480351c..7281a18 100644
--- a/beam.in
+++ b/beam.in
@@ -1,58 +1,73 @@
#! /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
. $libdir/common.sh
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,7 +1,22 @@
#! /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
. $libdir/common.sh
set +e
@@ -26,63 +41,63 @@ OPTIONS are:
EOF
exit 0
}
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)
# Warning: do not use shell arithmetic expansions on week numbers,
# 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,8 +1,8 @@
# 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
# the Free Software Foundation; either version 3, or (at your option)
# any later version.
#
diff --git a/doc/Makefile.am b/doc/Makefile.am
index 846c1de..0d82900 100644
--- a/doc/Makefile.am
+++ b/doc/Makefile.am
@@ -1,8 +1,8 @@
# 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
# the Free Software Foundation; either version 3, or (at your option)
# any later version.
#
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,8 +1,8 @@
.\" 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
.\" the Free Software Foundation; either version 3, or (at your option)
.\" any later version.
.\"
@@ -11,13 +11,13 @@
.\" 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/>.
.\"
-.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
.B beam backup
[\fB\-vnN\fR] [\fB\-\-verbose\fR] [\fB\-l\fR \fIFILE\fR]\
[\fB\-\-logfile\fR \fIFILE\fR]\
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,8 +1,8 @@
.\" 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
.\" the Free Software Foundation; either version 3, or (at your option)
.\" any later version.
.\"
@@ -11,13 +11,13 @@
.\" 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/>.
.\"
-.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
.B beam\-cleaner
[\fB\-s\fR \fISUF\fR] [\fB\-r\fR \fIN\fs] [\fB\-vn\fR] \
[\fB\-\-suffix\fR \fISUF\fR] [\fB\-\-retain\fR \fIN\fR] \
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,8 +1,8 @@
.\" 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
.\" the Free Software Foundation; either version 3, or (at your option)
.\" any later version.
.\"
@@ -11,13 +11,13 @@
.\" 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/>.
.\"
-.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
.B beam list
[\fB\-l\fR] [\fB\-\-number\fR]
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,8 +1,8 @@
.\" 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
.\" the Free Software Foundation; either version 3, or (at your option)
.\" any later version.
.\"
@@ -11,13 +11,13 @@
.\" 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/>.
.\"
-.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)
modules
.SH DESCRIPTION
This manual page explains how to write new modules for
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,8 +1,8 @@
.\" 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
.\" the Free Software Foundation; either version 3, or (at your option)
.\" any later version.
.\"
@@ -11,13 +11,13 @@
.\" 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/>.
.\"
-.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
.B beam restore
[\fB\-cntv\fR] [\fB\-\-confirm\fR] [\fB\-C\fR \fIDIR\fR]\
[\fB\-\-directory\fR \fIDIR\fR] [\fB\-\-verbose\fR]
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,8 +1,8 @@
.\" 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
.\" the Free Software Foundation; either version 3, or (at your option)
.\" any later version.
.\"
@@ -11,13 +11,13 @@
.\" 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/>.
.\"
-.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
.B beam s3
mount
diff --git a/doc/beam.1in b/doc/beam.1in
index fc15064..0fd3ce5 100644
--- a/doc/beam.1in
+++ b/doc/beam.1in
@@ -1,8 +1,8 @@
.\" 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
.\" the Free Software Foundation; either version 3, or (at your option)
.\" any later version.
.\"
@@ -11,13 +11,13 @@
.\" 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/>.
.\"
-.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
.B beam
backup [\fIoptions\fB]
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,8 +1,8 @@
# 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
# the Free Software Foundation; either version 3, or (at your option)
# any later version.
#
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
@@ -31,117 +31,117 @@ backup_snapshot_dir=
backup_verbose=
backup_logfile="/var/log/backup"
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() {
if [ -z "$beam_rsh" ]; then
set -- $(echo "$@" | sed 's/\\\\\([bcfnrtv0]\)/\\\1/g')
"$@"
@@ -149,105 +149,105 @@ beam_exec() {
set -- $(echo "$@" | sed 's/\\\\\([bcfnrtv0]\)/\\\1/g;s/[]\[\\\*]/\\&/g')
$beam_rsh "$@"
fi
}
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
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,9 +1,9 @@
#! /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
# the Free Software Foundation; either version 3, or (at your option)
# any later version.
#
@@ -25,124 +25,124 @@
# item_tar_options=STRING [optional internal]
#
# 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,9 +1,9 @@
#! /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
# the Free Software Foundation; either version 3, or (at your option)
# any later version.
#
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,9 +1,9 @@
#! /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
# the Free Software Foundation; either version 3, or (at your option)
# any later version.
#
@@ -19,84 +19,84 @@
#
# item_type=postgres [mandatory]
# item_database=STRING [mandatory]
# 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,9 +1,9 @@
#! /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
# the Free Software Foundation; either version 3, or (at your option)
# any later version.
#
@@ -22,82 +22,84 @@
test -z "$backup_mp_s3backer" && backup_mp_s3backer=/mnt/s3backer
# The actual file system is mounted to /mnt/s3
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
# (rw,nosuid,nodev,allow_other,default_permissions)
# 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,9 +1,9 @@
#! /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
# the Free Software Foundation; either version 3, or (at your option)
# any later version.
#
@@ -18,84 +18,84 @@
libdir=@LIBDIR@/beam
set -e
. $libdir/common.sh
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
OPTIONS:
-l, --number produce a numbered list
-h, --help produce this help list
-V, --version print program version
Report bugs to <@PACKAGE_BUGREPORT@>
EOF
- exit 0
+ exit 0
}
###########################################################
# Main
###########################################################
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"
exit 0
diff --git a/restore.in b/restore.in
index c1dc0c6..8618e2d 100644
--- a/restore.in
+++ b/restore.in
@@ -18,14 +18,14 @@
libdir=@LIBDIR@/beam
set -e
. $libdir/common.sh
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
taroptions="$backup_tar_options $backup_rsh_command"
# Options
@@ -34,22 +34,22 @@ verbose=
logfile=
dry_run=
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
OPTIONS:
-c, --confirm do not ask for confirmation; run straight into restoring
-C, --directory DIR restore into directory DIR instead of $root
@@ -63,101 +63,101 @@ OPTIONS:
-h, --help produce this help list
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.
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
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"
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
runhook epilogue_hook
logit "finished"
diff --git a/s3.in b/s3.in
index e4d838f..3d9f2c5 100644
--- a/s3.in
+++ b/s3.in
@@ -1,9 +1,9 @@
#! /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
# the Free Software Foundation; either version 3, or (at your option)
# any later version.
#
@@ -17,69 +17,69 @@
set -e
. @LIBDIR@/beam/common.sh
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
OPTIONS:
-V, --version print program version and exit
-h, --help produce this help list
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.