]> gitweb.morketsmerke.org Git - immudex.git/commitdiff
Narzędzie immudex-crypt z obsługą LVM do testów.
authorxf0r3m <jakubstasinski@protonmail.com>
Sun, 6 Jul 2025 13:38:08 +0000 (15:38 +0200)
committerxf0r3m <jakubstasinski@protonmail.com>
Sun, 6 Jul 2025 13:38:08 +0000 (15:38 +0200)
tools/sbin/immudex-crypt

index 964558d0ad36716508ac121d23ad0df1e913c02e..d951a5fbf1eab2aa8e4a91352aa53268aa895ec9 100755 (executable)
@@ -29,7 +29,7 @@ function list() {
   if [ "$mapperDeviceList" ]; then
          for dmDevice in $mapperDeviceList; do
                    if cryptsetup status /dev/mapper/${dmDevice} > /dev/null 2>&1; then
-                           mountPoint=$(df --output=source,target /dev/mapper/${dmDevice} | tail -n 1 | awk '{printf $2}');
+                           mountPoint=$(df --output=source,target /media/${USER}/${dmDevice} | tail -n 1 | awk '{printf $2}');
           device=$(sudo cryptsetup status /dev/mapper/${dmDevice} | grep "device" | awk '{printf $2}');
                  if [ "$mountPoint" ] && [ "$mountPoint" != "/dev" ]; then
             echo -e "$device\t /dev/mapper/${dmDevice}\t$mountPoint"; 
@@ -78,18 +78,42 @@ function open() {
     lastField=$(ls -l /dev/mapper/immudex-crypt${index} | grep -o ' ' | wc -l);
     dmDevice=$(ls -al /dev/mapper/immudex-crypt${index} | cut -d " " -f ${lastField}- | cut -d "/" -f2);
     if ! $(sudo file -s /dev/${dmDevice} | grep -q 'ext4'); then
-      echo "Could not determine filesystem of unlocked device.";
-      echo -n "Format this device to ext4? (y/n): "
-      read format;
-      if [ "$format" = "y" ]; then
-        mkfs.ext4 /dev/mapper/immudex-crypt${index};
+      if $(sudo file -s /dev/${dmDevice} | grep -q 'LVM'); then
+        lvm_member=0;
+      else
+        echo "Could not determine filesystem of unlocked device.";
+        echo -n "Format this device to ext4? (y/n): "
+        read format;
+        if [ "$format" = "y" ]; then
+          mkfs.ext4 /dev/mapper/immudex-crypt${index};
+        else
+          echo "Refuse to mount.";
+          cryptsetup close immudex-crypt${index};
+          exit 1;
+        fi
+      fi
+    fi
+    if [ "$lvm_member" ]; then
+      luksDeviceName="immudex-crypt${index}";
+      vgName=$(sudo pvs | grep "$luksDeviceName" | awk '{printf $2}');
+      extLVS=$(sudo blkid | grep "$(echo "$vgName" | sed 's,-,--,g')" | grep 'ext4' | sed 's/://g' | awk '{printf $1" "}');
+      if [ $(echo $extLVS | wc -w) -gt 0 ]; then
+        if [ $(echo $extLVS | wc -w) -gt 1 ]; then
+          select extLV in $extLVS; do
+            break;
+          done
+          mount $extLV /media/${USER}/immudex-crypt${index};
+        else
+          mount $extLVS /media/${USER}/immudex-crypt${index};
+        fi
       else
         echo "Refuse to mount.";
         cryptsetup close immudex-crypt${index};
         exit 1;
-      fi
+      fi 
+    else
+      mount /dev/mapper/immudex-crypt${index} /media/${USER}/immudex-crypt${index};
     fi
-    mount /dev/mapper/immudex-crypt${index} /media/${USER}/immudex-crypt${index};
     if [ ! -e /ic${index} ]; then
       ln -s /media/${USER}/immudex-crypt${index} /ic${index};
     fi
@@ -109,11 +133,24 @@ function close() {
         cryptfsName=$1;
     fi
     if cryptsetup status /dev/mapper/${cryptfsName} > /dev/null 2>&1; then
-      mountPoint=$(df --output=source,target /dev/mapper/${cryptfsName} | tail -1 | awk '{printf $2}');
+      mountPoint=$(df --output=source,target /media/${USER}/${cryptfsName} | tail -1 | awk '{printf $2}');
       if [ "$mountPoint" ] && [ "$mountPoint" != "/dev" ]; then
         umount -R $mountPoint;
+        if $(sudo blkid | grep "$cryptfsName" | grep -q 'LVM2_member'); then
+          vgName=$(sudo pvs | grep "$cryptfsName" | awk '{printf $2}' | sed 's/-/--/g');
+          swapFile=$(cat /proc/swaps | sed -n 2p | awk '{printf $1}');
+          if [ "$swapFile" ]; then 
+            if $(ls -l /dev/mapper | grep "$(basename $swapFile)" | grep -q "$vgName"); then
+              sudo swapoff $swapFile;
+            fi
+          fi 
+          sudo vgchange -a n;
+        fi
         cryptsetup close ${cryptfsName};
       else
+        if $(sudo blkid | grep "${cryptfsName}" | grep -q 'LVM2_member'); then
+          sudo vgchange -a n;
+        fi
         cryptsetup close ${cryptfsName};
       fi
     else