#!/usr/bin/bash set -e Version="1.1.1" Usage="dmount PARAMETER Script which permit to mount/unmount an LVM on LUKS using dmcrypt, doas and fstab. Actually works only on cryptdata, my extern SSD. PARAMETRES -h, --help Print this help and exit -v, --version Print the version and exit -m, --mount Mount cryptdata -u, --umount Unmount cryptdata " Mountpoint_cours=/home/primardj/cours Mountpoint_doc=/home/primardj/Documents Mountpoint_virt_machine=/home/primardj/virtual_machine Mountpoint_data=/home/primardj/data force_remove_vgdevice() { echo "force remove vg cryptdata" #doas dmsetup info --columns doas dmsetup remove /dev/mapper/cryptdata-* doas dmsetup remove /dev/mapper/cryptdata } mount_lvm_on_luks() { echo "unlocking device cryptdata" #doas rc-service dmcrypt restart doas /etc/rc/sysinit/35-cryptsetup start #doas vgchange -a y cryptdata doas mount -a } umount_devices() { echo "umount devices" doas umount -R $Mountpoint_cours || lsof +D $Mountpoint_cours doas umount -R $Mountpoint_doc || lsof +D $Mountpoint_doc doas umount -R $Mountpoint_virt_machine || lsof +D $Mountpoint_virt_machine doas umount -R $Mountpoint_data || lsof +D $Mountpoint_data } error_umount() { echo "Error, can't umount all devices, need some manual help." >&2 lsblk exit 1 } error_deactivate_vg() { echo "Error, impossible de deactive vg." >&2 echo "Try to force remove vgdisk from memory." >&2 if force_remove_vgdevice then echo "could at list remove vgdevice." exit 0 else lsblk doas dmsetup info --columns echo "couldn't remove vgdevice. need manual intervention." >&2 exit 1 fi } umount_lvm_on_luks() { echo "locking device cryptdata" umount_devices || error_umount doas lvchange -a n cryptdata || error_deactivate_vg doas cryptsetup close --deferred cryptdata } for i in "$@"; do case "$i" in "-h" | "--help") echo "${Usage}" exit 0 ;; "-v" | "--version") echo "dmount v.${Version}" exit 0 ;; "-m" | "--mount") mount_lvm_on_luks exit 0 ;; "-u" | "--umount") umount_lvm_on_luks exit 0 ;; *) echo "Error, uknown args $i" >&2 exit 1 ;; esac done