X-Git-Url: https://fleuret.org/cgi-bin/gitweb/gitweb.cgi?a=blobdiff_plain;ds=sidebyside;f=rsync-luks.sh;h=7f0a5e0a8cb4b4ee76ec08d32e6b3800a15ae823;hb=d1b9247802bf8ae3cef68070b2e6e1422470f2b2;hp=87daf192cbae0327cb000e4c4f005c3c6cecd9ed;hpb=71bcbb9518bc6512f6ff22c0aa8fc04b2e921a52;p=scripts.git
diff --git a/rsync-luks.sh b/rsync-luks.sh
index 87daf19..7f0a5e0 100755
--- a/rsync-luks.sh
+++ b/rsync-luks.sh
@@ -14,24 +14,19 @@
# along with this program. If not, see . #
# #
# Written by and Copyright (C) Francois Fleuret #
-# Contact for comments & bug reports #
+# Contact for comments & bug reports #
#########################################################################
-# This script takes two filenames as arguments, mounts them as luks
-# volumes, and synchronizes their contents.
-
-# IT CHANGES THE CONTENT OF THE SECOND ARGUMENT
-
set -e
set -o pipefail
-if [ "$1" == "-h" ] || [ "$1" == "--help" ]; then
+if [[ "$1" == "-h" ]] || [[ "$1" == "--help" ]]; then
cat <
-Mounts both files as LUKS volume and rsync the source to the dest. It
-first performs a dry-run and then asks for interactive confirmation
-before synchronizing for real.
+Mounts both files as LUKS volumes and rsyncs the source to the
+dest. It first performs a dry-run and then asks for interactive
+confirmation before synchronizing for real.
Comments and bug reports to francois@fleuret.org
@@ -39,21 +34,21 @@ EOF
exit 0
fi
-[ -f "$1" ] && [ -f "$2" ] || (echo "$0 " >&2 && exit 1)
+[[ -f "$1" ]] && [[ -f "$2" ]] || (echo "$0 " >&2 && exit 1)
-[ -e "/dev/mapper/crypt-src" ] && (echo "/dev/mapper/crypt-src already exists." >&2 && exit 1)
+[[ -e "/dev/mapper/crypt-src" ]] && (echo "/dev/mapper/crypt-src already exists." >&2 && exit 1)
-[ -e "/dev/mapper/crypt-dst" ] && (echo "/dev/mapper/crypt-dst already exists." >&2 && exit 1)
+[[ -e "/dev/mapper/crypt-dst" ]] && (echo "/dev/mapper/crypt-dst already exists." >&2 && exit 1)
function exit_handler () {
- [ -n "${VOL_SRC+yes}" ] && umount "${VOL_SRC}" && rmdir "${VOL_SRC}" && unset VOL_SRC
- [ -e "/dev/mapper/crypt-src" ] && cryptsetup luksClose crypt-src
- [ -n "${LOOP_SRC+yes}" ] && losetup -d "${LOOP_SRC}" && unset LOOP_SRC
+ [[ -n "${VOL_SRC+yes}" ]] && umount "${VOL_SRC}" && rmdir "${VOL_SRC}" && unset VOL_SRC
+ [[ -e "/dev/mapper/crypt-src" ]] && cryptsetup luksClose crypt-src
+ [[ -n "${LOOP_SRC+yes}" ]] && losetup -d "${LOOP_SRC}" && unset LOOP_SRC
- [ -n "${VOL_DST+yes}" ] && umount "${VOL_DST}" && rmdir "${VOL_DST}" && unset VOL_DST
- [ -e "/dev/mapper/crypt-dst" ] && cryptsetup luksClose crypt-dst
- [ -n "${LOOP_DST+yes}" ] && losetup -d "${LOOP_DST}" && unset LOOP_DST
+ [[ -n "${VOL_DST+yes}" ]] && umount "${VOL_DST}" && rmdir "${VOL_DST}" && unset VOL_DST
+ [[ -e "/dev/mapper/crypt-dst" ]] && cryptsetup luksClose crypt-dst
+ [[ -n "${LOOP_DST+yes}" ]] && losetup -d "${LOOP_DST}" && unset LOOP_DST
}
@@ -66,7 +61,7 @@ LOOP_SRC="$(losetup -f)"
losetup "${LOOP_SRC}" "$1"
cryptsetup luksOpen "${LOOP_SRC}" crypt-src
VOL_SRC="$(mktemp -d /tmp/sync-luks.XXXXXX)"
-mount /dev/mapper/crypt-src "${VOL_SRC}"
+mount -o ro /dev/mapper/crypt-src "${VOL_SRC}"
LOOP_DST="$(losetup -f)"
losetup "${LOOP_DST}" "$2"
@@ -86,11 +81,11 @@ rsync -n --itemize-changes --delete --progress -axz "${VOL_SRC}/" "${VOL_DST}/"
# Ask for confirmation and synchronize
echo "**********************************************************************"
-echo "* Synchronize [y]/N ?"
+echo "* Press 'y' to synchronize, anything else to cancel."
read -n 1 KEY
-if [ "${KEY}" == "y" ]; then
+if [[ "${KEY}" == "y" ]]; then
rsync --itemize-changes --delete --progress -axz "${VOL_SRC}/" "${VOL_DST}/"
else
echo "No synchronization."