Send patches - preferably formatted by git format-patch - to patches at archlinux32 dot org.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnton Hvornum <anton@hvornum.se>2022-05-17 10:06:37 +0200
committerGitHub <noreply@github.com>2022-05-17 10:06:37 +0200
commit3d102854a7ad31659f65961966665f8c975f8d71 (patch)
treea769a402839bf34a802c1b597320fb355e207e7b
parent4e39bfb5638598b81829752f22beb56cb0c095e6 (diff)
Reworking select_encrypted_partitions() to use the new Menu system, (#1201)
* Reworking select_encrypted_partitions() to use the new Menu system, and allow granularity. * Listing partitions and enabling a index selection. Also when selecting 'delete all partitions' wipe=True will get set on the blockdevice now. Otherwise the new partitions won't be able to be created without deleting them first. * flake8 fix * Removed old select_encrypted_partitions()
-rw-r--r--archinstall/lib/menu/global_menu.py11
-rw-r--r--archinstall/lib/user_interaction/partitioning_conf.py37
2 files changed, 33 insertions, 15 deletions
diff --git a/archinstall/lib/menu/global_menu.py b/archinstall/lib/menu/global_menu.py
index f0f327ee..963766a2 100644
--- a/archinstall/lib/menu/global_menu.py
+++ b/archinstall/lib/menu/global_menu.py
@@ -193,8 +193,15 @@ class GlobalMenu(GeneralMenu):
# If no partitions was marked as encrypted, but a password was supplied and we have some disks to format..
# Then we need to identify which partitions to encrypt. This will default to / (root).
if len(list(encrypted_partitions(storage['arguments'].get('disk_layouts', [])))) == 0:
- storage['arguments']['disk_layouts'] = select_encrypted_partitions(
- storage['arguments']['disk_layouts'], storage['arguments']['!encryption-password'])
+ for blockdevice in storage['arguments']['disk_layouts']:
+ for partition_index in select_encrypted_partitions(
+ title="Select which partitions to encrypt:",
+ partitions=storage['arguments']['disk_layouts'][blockdevice]['partitions']
+ ):
+
+ partition = storage['arguments']['disk_layouts'][blockdevice]['partitions'][partition_index]
+ partition['encrypted'] = True
+ partition['!password'] = storage['arguments']['!encryption-password']
def _install_text(self):
missing = len(self._missing_configs())
diff --git a/archinstall/lib/user_interaction/partitioning_conf.py b/archinstall/lib/user_interaction/partitioning_conf.py
index c3dc4146..741decc1 100644
--- a/archinstall/lib/user_interaction/partitioning_conf.py
+++ b/archinstall/lib/user_interaction/partitioning_conf.py
@@ -8,7 +8,6 @@ from ..menu.menu import MenuSelectionType
from ..output import log
from ..disk.validators import fs_types
-from ..disk.helpers import has_mountpoint
if TYPE_CHECKING:
from ..disk import BlockDevice
@@ -271,6 +270,7 @@ def manage_new_and_existing_partitions(block_device: 'BlockDevice') -> Dict[str,
block_device_struct["partitions"][partition]["filesystem"]["mount_options"].append("compress=zstd")
elif task == delete_all_partitions:
block_device_struct["partitions"] = []
+ block_device_struct["wipe"] = True
elif task == assign_mount_point:
title = _('{}\n\nSelect by index which partition to mount where').format(current_layout)
partition = select_partition(title, block_device_struct["partitions"])
@@ -360,19 +360,30 @@ def manage_new_and_existing_partitions(block_device: 'BlockDevice') -> Dict[str,
return block_device_struct
+def select_encrypted_partitions(
+ title :str,
+ partitions :List[Partition],
+ multiple :bool = True,
+ filter_ :Callable = None
+) -> Optional[int, List[int]]:
+ partition_indexes = _get_partitions(partitions, filter_)
-def select_encrypted_partitions(block_devices: dict, password: str) -> dict:
- for device in block_devices:
- for partition in block_devices[device]['partitions']:
- if partition.get('mountpoint', None) != '/boot':
- partition['encrypted'] = True
- partition['!password'] = password
+ if len(partition_indexes) == 0:
+ return None
- if not has_mountpoint(partition,'/'):
- # Tell the upcoming steps to generate a key-file for non root mounts.
- partition['generate-encryption-key-file'] = True
+ title = _('Select which partitions to mark for formatting:')
- return block_devices
+ # show current partition layout:
+ if len(partitions):
+ title += _current_partition_layout(partitions) + '\n'
- # TODO: Next version perhaps we can support mixed multiple encrypted partitions
- # Users might want to single out a partition for non-encryption to share between dualboot etc.
+ choice = Menu(title, partition_indexes, multi=multiple).run()
+
+ if choice.type_ == MenuSelectionType.Esc:
+ return None
+
+ if isinstance(choice.value, list):
+ for partition_index in choice.value:
+ yield int(partition_index)
+ else:
+ yield (partition_index) \ No newline at end of file