From 04acb3536d36837cb49a89904a58b54f0a9a1658 Mon Sep 17 00:00:00 2001
From: David Beniamine <david.beniamine@tetras-libre.fr>
Date: Tue, 29 Sep 2020 15:52:32 +0200
Subject: [PATCH] Add luks encryption option

---
 src/scripts/backup_nocloud.sh | 24 ++++++++++++++++++++++--
 1 file changed, 22 insertions(+), 2 deletions(-)

diff --git a/src/scripts/backup_nocloud.sh b/src/scripts/backup_nocloud.sh
index 0ce9e06..2a5a30e 100755
--- a/src/scripts/backup_nocloud.sh
+++ b/src/scripts/backup_nocloud.sh
@@ -23,6 +23,10 @@ do_clean(){
     then
         fusermount -zu $encfsmount
     fi
+    if $luks
+    then
+        cryptsetup luksClose $luksname
+    fi
     umount -f $dev
 }
 
@@ -182,6 +186,8 @@ usage(){
     echo "  -i | --interrupt list   Interrompt les services donnés (liste
                                     séparé par des virgules) durant la création
                                     de l'archive tar."
+    echo "  -l | --luks    pass     Utilise des disques chiffres luks,
+                                    protégés par le mot de passe donné"
     echo "  -w | --warnonly         En cas d'erreur d'une action de sauvegarde,
                                     le programme affiche un message mais ne
                                     s'nterrompt pas"
@@ -199,6 +205,8 @@ gitlab=false
 mysql=false
 postgres=false
 encfs=false
+luks=false
+luksname=crypt_backup
 archive=false
 clone=false
 MIN_SIZE=$((1024*1024))
@@ -210,7 +218,7 @@ for arg in "$@"; do
   shift
   set -- "$@" `echo $arg | sed 's/^-\(-.\).*$/\1/'`
 done
-optspec=":hvC:dcguws:mpe:i:aP:"
+optspec=":hvC:dcguws:mpe:i:l:aP:"
 while getopts "$optspec" optchar; do
     case "${optchar}" in
         h)
@@ -257,6 +265,10 @@ while getopts "$optspec" optchar; do
         i)
             SERVICES="${OPTARG//,/ }"
             ;;
+        l)
+            luks=true
+            ENCPASS="$OPTARG"
+            ;;
         w)
             warn_only=true;
             ;;
@@ -290,7 +302,15 @@ do_log "démarrage le `date`"
 
 [ ! -d "$dest" ] && mkdir "$dest"
 
-/bin/mount -t auto $dev $dest
+if $luks
+then
+    echo $ENCPASS | cryptsetup luksOpen $dev $luksname
+    test_and_fail $? "Impossible de déchiffrer le disque, abandon"
+    /bin/mount -t auto /dev/mapper/$luksname $dest
+    echo "OK" > $dest/test
+else
+    /bin/mount -t auto $dev $dest
+fi
 test_and_fail $? "Impossible de monter le disque destination, abandon"
 
 if $encfs
-- 
GitLab