Beginning work on simplifying disk process in guided.py by reducing complexity and code logic.
This commit is contained in:
parent
a0947f527a
commit
8bc3dd685e
|
|
@ -53,106 +53,8 @@ def ask_user_questions():
|
||||||
allow_empty=True)
|
allow_empty=True)
|
||||||
]
|
]
|
||||||
|
|
||||||
|
if archinstall.arguments.get('harddrives', None):
|
||||||
|
archinstall.storage['disk_layouts'] = archinstall.select_disk_layout(archinstall.arguments['harddrives'])
|
||||||
# Perform a quick sanity check on the selected harddrive.
|
|
||||||
# 1. Check if it has partitions
|
|
||||||
# 3. Check that we support the current partitions
|
|
||||||
# 2. If so, ask if we should keep them or wipe everything
|
|
||||||
if archinstall.arguments['harddrive'] and archinstall.arguments['harddrive'].has_partitions():
|
|
||||||
archinstall.log(f"{archinstall.arguments['harddrive']} contains the following partitions:", fg='yellow')
|
|
||||||
|
|
||||||
# We curate a list pf supported partitions
|
|
||||||
# and print those that we don't support.
|
|
||||||
partition_mountpoints = {}
|
|
||||||
for partition in archinstall.arguments['harddrive']:
|
|
||||||
try:
|
|
||||||
if partition.filesystem_supported():
|
|
||||||
archinstall.log(f" {partition}")
|
|
||||||
partition_mountpoints[partition] = None
|
|
||||||
except archinstall.UnknownFilesystemFormat as err:
|
|
||||||
archinstall.log(f" {partition} (Filesystem not supported)", fg='red')
|
|
||||||
|
|
||||||
|
|
||||||
# We then ask what to do with the partitions.
|
|
||||||
if (option := archinstall.ask_for_disk_layout()) == 'abort':
|
|
||||||
archinstall.log(f"Safely aborting the installation. No changes to the disk or system has been made.")
|
|
||||||
exit(1)
|
|
||||||
elif option == 'keep-existing':
|
|
||||||
archinstall.arguments['harddrive'].keep_partitions = True
|
|
||||||
|
|
||||||
archinstall.log(f" ** You will now select which partitions to use by selecting mount points (inside the installation). **")
|
|
||||||
archinstall.log(f" ** The root would be a simple / and the boot partition /boot (as all paths are relative inside the installation). **")
|
|
||||||
mountpoints_set = []
|
|
||||||
while True:
|
|
||||||
# Select a partition
|
|
||||||
# If we provide keys as options, it's better to convert them to list and sort before passing
|
|
||||||
mountpoints_list = sorted(list(partition_mountpoints.keys()))
|
|
||||||
partition = archinstall.generic_select(mountpoints_list,
|
|
||||||
"Select a partition by number that you want to set a mount-point for (leave blank when done): ")
|
|
||||||
if not partition:
|
|
||||||
if set(mountpoints_set) & {'/', '/boot'} == {'/', '/boot'}:
|
|
||||||
break
|
|
||||||
|
|
||||||
continue
|
|
||||||
|
|
||||||
# Select a mount-point
|
|
||||||
mountpoint = input(f"Enter a mount-point for {partition}: ").strip(' ')
|
|
||||||
if len(mountpoint):
|
|
||||||
|
|
||||||
# Get a valid & supported filesystem for the partition:
|
|
||||||
while 1:
|
|
||||||
new_filesystem = input(f"Enter a valid filesystem for {partition} (leave blank for {partition.filesystem}): ").strip(' ')
|
|
||||||
if len(new_filesystem) <= 0:
|
|
||||||
if partition.encrypted and partition.filesystem == 'crypto_LUKS':
|
|
||||||
old_password = archinstall.arguments.get('!encryption-password', None)
|
|
||||||
if not old_password:
|
|
||||||
old_password = input(f'Enter the old encryption password for {partition}: ')
|
|
||||||
|
|
||||||
if (autodetected_filesystem := partition.detect_inner_filesystem(old_password)):
|
|
||||||
new_filesystem = autodetected_filesystem
|
|
||||||
else:
|
|
||||||
archinstall.log(f"Could not auto-detect the filesystem inside the encrypted volume.", fg='red')
|
|
||||||
archinstall.log(f"A filesystem must be defined for the unlocked encrypted partition.")
|
|
||||||
continue
|
|
||||||
break
|
|
||||||
|
|
||||||
# Since the potentially new filesystem is new
|
|
||||||
# we have to check if we support it. We can do this by formatting /dev/null with the partitions filesystem.
|
|
||||||
# There's a nice wrapper for this on the partition object itself that supports a path-override during .format()
|
|
||||||
try:
|
|
||||||
partition.format(new_filesystem, path='/dev/null', log_formatting=False, allow_formatting=True)
|
|
||||||
except archinstall.UnknownFilesystemFormat:
|
|
||||||
archinstall.log(f"Selected filesystem is not supported yet. If you want archinstall to support '{new_filesystem}', please create a issue-ticket suggesting it on github at https://github.com/archlinux/archinstall/issues.")
|
|
||||||
archinstall.log(f"Until then, please enter another supported filesystem.")
|
|
||||||
continue
|
|
||||||
except archinstall.SysCallError:
|
|
||||||
pass # Expected exception since mkfs.<format> can not format /dev/null.
|
|
||||||
# But that means our .format() function supported it.
|
|
||||||
break
|
|
||||||
|
|
||||||
# When we've selected all three criteria,
|
|
||||||
# We can safely mark the partition for formatting and where to mount it.
|
|
||||||
# TODO: allow_formatting might be redundant since target_mountpoint should only be
|
|
||||||
# set if we actually want to format it anyway.
|
|
||||||
mountpoints_set.append(mountpoint)
|
|
||||||
partition.allow_formatting = True
|
|
||||||
partition.target_mountpoint = mountpoint
|
|
||||||
# Only overwrite the filesystem definition if we selected one:
|
|
||||||
if len(new_filesystem):
|
|
||||||
partition.filesystem = new_filesystem
|
|
||||||
|
|
||||||
archinstall.log('Using existing partition table reported above.')
|
|
||||||
elif option == 'format-all':
|
|
||||||
if not archinstall.arguments.get('filesystem', None):
|
|
||||||
archinstall.arguments['filesystem'] = archinstall.ask_for_main_filesystem_format()
|
|
||||||
archinstall.arguments['harddrive'].keep_partitions = False
|
|
||||||
elif archinstall.arguments['harddrive']:
|
|
||||||
# If the drive doesn't have any partitions, safely mark the disk with keep_partitions = False
|
|
||||||
# and ask the user for a root filesystem.
|
|
||||||
if not archinstall.arguments.get('filesystem', None):
|
|
||||||
archinstall.arguments['filesystem'] = archinstall.ask_for_main_filesystem_format()
|
|
||||||
archinstall.arguments['harddrive'].keep_partitions = False
|
|
||||||
|
|
||||||
# Get disk encryption password (or skip if blank)
|
# Get disk encryption password (or skip if blank)
|
||||||
if archinstall.arguments['harddrive'] and archinstall.arguments.get('!encryption-password', None) is None:
|
if archinstall.arguments['harddrive'] and archinstall.arguments.get('!encryption-password', None) is None:
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue