From 918ac5c76589a69d821f3c74f0eff74bcb3118a1 Mon Sep 17 00:00:00 2001 From: Daniel Girtler Date: Mon, 4 Nov 2024 22:42:12 +1100 Subject: [PATCH] Fix 2735 - Erase luks partition explicitly (#2745) --- archinstall/lib/disk/device_handler.py | 4 ++++ archinstall/lib/luks.py | 13 +++++++++++++ 2 files changed, 17 insertions(+) diff --git a/archinstall/lib/disk/device_handler.py b/archinstall/lib/disk/device_handler.py index cfc3a633..5e9d510c 100644 --- a/archinstall/lib/disk/device_handler.py +++ b/archinstall/lib/disk/device_handler.py @@ -803,6 +803,10 @@ class DeviceHandler(object): """ info(f'Wiping partitions and metadata: {block_device.device_info.path}') for partition in block_device.partition_infos: + luks = Luks2(partition.path) + if luks.isLuks(): + luks.erase() + self._wipe(partition.path) self._wipe(block_device.device_info.path) diff --git a/archinstall/lib/luks.py b/archinstall/lib/luks.py index 723271f2..2e2c830b 100644 --- a/archinstall/lib/luks.py +++ b/archinstall/lib/luks.py @@ -30,6 +30,19 @@ class Luks2: return Path(f'/dev/mapper/{self.mapper_name}') return None + def isLuks(self) -> bool: + try: + SysCommand(f'cryptsetup isLuks {self.luks_dev_path}') + return True + except SysCallError: + return False + + def erase(self) -> None: + debug(f'Erasing luks partition: {self.luks_dev_path}') + worker = SysCommandWorker(f'cryptsetup erase {self.luks_dev_path}') + worker.poll() + worker.write(b'YES\n', line_ending=False) + def __post_init__(self) -> None: if self.luks_dev_path is None: raise ValueError('Partition must have a path set')