--- /dev/null
+### -*-bash-*-
+###
+### Common utilities for rsync-backup scripts
+###
+### (c) 2014 Mark Wooding
+###
+
+###----- Licensing notice ---------------------------------------------------
+###
+### This file is part of the `rsync-backup' program.
+###
+### rsync-backup 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 2 of the License, or
+### (at your option) any later version.
+###
+### rsync-backup 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 rsync-backup; if not, write to the Free Software Foundation,
+### Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+###--------------------------------------------------------------------------
+### Configuration.
+
+VERSION=@VERSION@
+pkgdatadir=@pkgdatadir@
+mntbkpdir=@mntbkpdir@
+logdir=@logdir@
+fshashdir=@fshashdir@
+conf=@sysconfdir@/rsync-backup.conf
+
+INDEXDB=@pkglocalstatedir@/index.db
+
+SNAPDIR=$mntbkpdir/snap
+STOREDIR=$mntbkpdir/store
+METADIR=$mntbkpdir/meta
+
+config () {
+ echo
+ cat <<EOF
+conf = $conf
+mntbkpdir = $mntbkpdir
+fshashdir = $fshashdir
+logdir = $logdir
+EOF
+}
+
+###--------------------------------------------------------------------------
+### Date hacking.
+
+parsedate () {
+ date=$1
+ ## Parse an ISO8601 DATE, and set YEAR, MONTH, DAY appropriately (and
+ ## without leading zeros).
+
+ ## Extract the components of the date and trim leading zeros (which will
+ ## cause things to be interpreted as octal and fail).
+ year=${date%%-*} rest=${date#*-}; month=${rest%%-*} day=${rest#*-}
+ year=${year#0} month=${month#0} day=${day#0}
+}
+
+julian () {
+ date=$1
+ ## Convert an ISO8601 DATE to a Julian Day Number.
+
+ parsedate $date
+
+ ## The actual calculation: convert a (proleptic) Gregorian calendar date
+ ## into a Julian day number. This is taken from Wikipedia's page
+ ## http://en.wikipedia.org/wiki/Julian_day#Calculation but the commentary
+ ## is mine. The epoch is 4713BC-01-01 (proleptic) Julian, or 4714BC-11-24
+ ## proleptic Gregorian.
+
+ ## If the MONTH is January or February then set a = 1, otherwise set a = 0.
+ a=$(( (14 - $month)/12 ))
+
+ ## Compute a year offset relative to 4799BC-03-01. This puts the leap day
+ ## as the very last day in a year, which is very convenient. The offset
+ ## here is sufficient to make all y values positive (within the range of
+ ## the JDN calendar), and is a multiple of 400, which is the Gregorian
+ ## cycle length.
+ y=$(( $year + 4800 - $a ))
+
+ ## Compute the offset month number in that year. These months count from
+ ## zero, not one.
+ m=$(( $month + 12*$a - 3 ))
+
+ ## Now for the main event. The (153 m + 2)/5 term is a surprising but
+ ## correct trick for obtaining the number of days in the first m months of
+ ## the (shifted) year). The magic offset 32045 is what you get when you
+ ## plug the proper JDN epoch (year = -4713, month = 11, day = 24) into the
+ ## above machinery.
+ jdn=$(( $day + (153*$m + 2)/5 + 365*$y + $y/4 - $y/100 + $y/400 - 32045 ))
+
+ echo $jdn
+}
+
+###----- That's all, folks --------------------------------------------------
thishost=$(hostname -s)
quis=${0##*/}
-
-VERSION=@VERSION@
-mntbkpdir=@mntbkpdir@
-logdir=@logdir@
-fshashdir=@fshashdir@
-conf=@sysconfdir@/rsync-backup.conf
+. @pkgdatadir@/lib.sh
verbose=:
dryrun=nil
###--------------------------------------------------------------------------
### Database operations.
-INDEXDB=@pkglocalstatedir@/index.db
-
insert_index () {
host=$1 fs=$2 date=$3 vol=$4
## Snapshot using LVM.
SNAPSIZE="-l10%ORIGIN"
-SNAPDIR=@mntbkpdir@/snap
snap_lvm () {
vg=$1 lv=$2
###--------------------------------------------------------------------------
### Expiry computations.
-parsedate () {
- date=$1
- ## Parse an ISO8601 DATE, and set YEAR, MONTH, DAY appropriately (and
- ## without leading zeros).
-
- ## Extract the components of the date and trim leading zeros (which will
- ## cause things to be interpreted as octal and fail).
- year=${date%%-*} rest=${date#*-}; month=${rest%%-*} day=${rest#*-}
- year=${year#0} month=${month#0} day=${day#0}
-}
-
-julian () {
- date=$1
- ## Convert an ISO8601 DATE to a Julian Day Number.
-
- parsedate $date
-
- ## The actual calculation: convert a (proleptic) Gregorian calendar date
- ## into a Julian day number. This is taken from Wikipedia's page
- ## http://en.wikipedia.org/wiki/Julian_day#Calculation but the commentary
- ## is mine. The epoch is 4713BC-01-01 (proleptic) Julian, or 4714BC-11-24
- ## proleptic Gregorian.
-
- ## If the MONTH is January or February then set a = 1, otherwise set a = 0.
- a=$(( (14 - $month)/12 ))
-
- ## Compute a year offset relative to 4799BC-03-01. This puts the leap day
- ## as the very last day in a year, which is very convenient. The offset
- ## here is sufficient to make all y values positive (within the range of
- ## the JDN calendar), and is a multiple of 400, which is the Gregorian
- ## cycle length.
- y=$(( $year + 4800 - $a ))
-
- ## Compute the offset month number in that year. These months count from
- ## zero, not one.
- m=$(( $month + 12*$a - 3 ))
-
- ## Now for the main event. The (153 m + 2)/5 term is a surprising but
- ## correct trick for obtaining the number of days in the first m months of
- ## the (shifted) year). The magic offset 32045 is what you get when you
- ## plug the proper JDN epoch (year = -4713, month = 11, day = 24) into the
- ## above machinery.
- jdn=$(( $day + (153*$m + 2)/5 + 365*$y + $y/4 - $y/100 + $y/400 - 32045 ))
-
- echo $jdn
-}
-
expire () {
## Read dates on stdin; write to stdout `EXPIRE date' for dates which
## should be expired and `RETAIN date' for dates which should be retained.
###--------------------------------------------------------------------------
### Actually taking backups of filesystems.
-STOREDIR=@mntbkpdir@/store
-METADIR=@mntbkpdir@/meta
MAXLOG=14
HASH=sha256
unset VOLUME
echo "$quis version $VERSION"
}
-config () {
- echo
- cat <<EOF
-conf = $conf
-mntbkpdir = $mntbkpdir
-fshashdir = $fshashdir
-logdir = $logdir
-EOF
-}
-
whine () { echo >&8 "$@"; }
while getopts "hVvc:n" opt; do