--- a/sync-to-usb.sh Fri Feb 17 12:37:57 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,187 +0,0 @@
-#!/bin/sh
-#
-#
-# Copyright (C) 2012 Christian Arnold <arnold@schlittermann.de>
-#
-# Schlittermann internet & unix support
-#
-# This program 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 of the License, or
-# (at your option) any later version.
-#
-# This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
-
-
-export LANG=C LANGUAGE=C LC_ALL=C
-
-ME=$(basename $0)
-LOGGING=1
-DEBUG=0
-
-### DON'T TOUCH ANYTHING BELOW THIS LINES ###
-
-SUUID=$1
-SPATH=$2
-DUUID=$3
-DPATH=$4
-KEY=$5
-
-usage() {
- cat <<__ >&2
-Usage: $ME <suuid> <spath> <duuid> <dpath>
-
- <suuid> UUID of the source LUKS partition
- <spath> Mount point for the source filesystem
- <duuid> UUID of the destination LUKS partition
- <dpath> Mount point for the destination filesystem
- <key> Key file to decrypt LUKS partition
-__
-}
-
-debug() {
- if [ $DEBUG -gt 0 ]; then
- echo "$@" >&2
- fi
-}
-
-check_mountpoint() {
- MOUNTPOINT=$1
- if [ ! -d $MOUNTPOINT ]; then
- debug "ERROR: [$ME] $MOUNTPOINT don't exists"
- [ $LOGGING -eq 1 ] && logger -p local0.err -t $ME "ERROR: $MOUNTPOINT don't exist"
- exit 1
- fi
-
- debug "OK: [$ME] $MOUNTPOINT exists"
- if cut -d' ' -f2 /proc/mounts | grep -q "^$MOUNTPOINT$"; then
- debug "ERROR: [$ME] anything is mounted on $MOUNTPOINT"
- [ $LOGGING -eq 1 ] && logger -p local0.err -t $ME "ERROR: anything is mounted on $MOUNTPOINT"
- exit 1
- fi
-
- debug "OK: [$ME] nothing is mounted on $MOUNTPOINT"
- [ $LOGGING -eq 1 ] && logger -p local0.notice -t $ME "OK: nothing is mounted on $MOUNTPOINT"
- return 0
-}
-
-open_cryptdev() {
- TYPE=$1
- if [ ! $(blkid -U $2) ]; then
- debug "ERROR: [$ME] can't get device path for UUID: $2"
- exit 1
- fi
- DEV=$(blkid -U $2)
- CRYPTDEV="cbackup.$TYPE.$$"
- KEYFILE=$3
- cryptsetup luksOpen $DEV $CRYPTDEV --key-file $KEYFILE 2>/dev/null
- if [ ! -h /dev/mapper/$CRYPTDEV ]; then
- debug "ERROR: [$ME] can't luksOpen cryptdev '$CRYPTDEV'"
- [ $LOGGING -eq 1 ] && logger -p local0.err -t $ME "ERROR: can't luksOpen cryptdev '$CRYPTDEV'"
- exit 1
- fi
-
- debug "OK: [$ME] luksOpen cryptdev '$CRYPTDEV'"
- [ $LOGGING -eq 1 ] && logger -p local0.notice -t $ME "OK: luksOpen cryptdev $CRYPTDEV"
- return 0
-}
-
-mount_cryptdev() {
- TYPE=$1
- CRYPTDEV="cbackup.$TYPE.$$"
- MOUNTPOINT=$2
- MOUNTOPT=""
- test "$TYPE" = "src" && MOUNTOPT="--read-only"
- if mount $MOUNTOPT /dev/mapper/$CRYPTDEV $MOUNTPOINT; then
- debug "OK: [$ME] mount $CRYPTDEV $MOUNTOPT to $MOUNTPOINT"
- [ $LOGGING -eq 1 ] && logger -p local0.notice -t $ME "OK: mount $CRYPTDEV to $MOUNTPOINT"
- else
- debug "ERROR: [$ME] can't mount $CRYPTDEV to $MOUNTPOINT"
- [ $LOGGING -eq 1 ] && logger -p local0.err -t $ME "ERROR: can't mount $CRYPTDEV to $MOUNTPOINT"
- exit 1
- fi
- return 0
-}
-
-umount_cryptdev() {
- MOUNTPOINT=$1
- if umount $MOUNTPOINT 2>/dev/null; then
- debug "OK: [$ME] umount $MOUNTPOINT"
- [ $LOGGING -eq 1 ] && logger -p local0.notice -t $ME "OK: umount $MOUNTPOINT"
- else
- debug "ERROR: [$ME] can't umount $MOUNTPOINT"
- [ $LOGGING -eq 1 ] && logger -p local0.err -t $ME "ERROR: can't umount $MOUNTPOINT"
- exit 1
- fi
- return 0
-}
-
-close_cryptdev() {
- TYPE=$1
- CRYPTDEV="cbackup.$TYPE.$$"
- if [ -h /dev/mapper/$CRYPTDEV ]; then
- cryptsetup luksClose $CRYPTDEV
- if [ -h /dev/mapper/$CRYPTDEV ]; then
- debug "ERROR: [$ME] can't luksClose cryptdev '$CRYPTDEV'"
- [ $LOGGING -eq 1 ] && logger -p local0.err -t $ME "ERROR: can't luksClose cryptdev '$CRYPTDEV'"
- exit 1
- fi
-
- debug "OK: [$ME] luksClose cryptdev '$CRYPTDEV'"
- [ $LOGGING -eq 1 ] && logger -p local0.notice -t $ME "OK: luksClose cryptdev '$CRYPTDEV'"
- fi
- return 0
-}
-
-do_sync() {
- SOURCE=$1
- DESTINATION=$2
- VERBOSE=""
- test $DEBUG -gt 0 && VERBOSE="--verbose --progress"
- if rsync -Ha $VERBOSE --numeric-ids --delete $SOURCE $DESTINATION; then
- debug "OK: [$ME] sync is done from '$SOURCE' to '$DESTINATION'"
- [ $LOGGING -eq 1 ] && logger -p local0.notice -t $ME "OK: sync is done from '$SOURCE' to '$DESTINATION'"
- else
- debug "ERROR: [$ME] sync error from '$SOURCE' to '$DESTINATION'"
- [ $LOGGING -eq 1 ] && logger -p local0.err -t $ME "ERROR: sync error from '$SOURCE' to '$DESTINATION'"
- exit 1
- fi
- return 0
-}
-
-cleanup() {
- check_mountpoint $SPATH || umount_cryptdev $SPATH
- check_mountpoint $DPATH || umount_cryptdev $DPATH
- close_cryptdev src
- close_cryptdev dst
-}
-
-# MAIN
-
-trap cleanup INT EXIT
-
-if [ $# -ne 5 ]; then
- usage
- exit 1
-fi
-
-check_mountpoint $SPATH
-check_mountpoint $DPATH
-open_cryptdev src $SUUID $KEY
-open_cryptdev dst $DUUID $KEY
-mount_cryptdev src $SPATH
-mount_cryptdev dst $DPATH
-
-do_sync $SPATH $DPATH
-
-umount_cryptdev $SPATH
-umount_cryptdev $DPATH
-close_cryptdev src
-close_cryptdev dst
-