Corrected some minor modifications mentioned in #595 as well as merged in latest changes from master. For future PR's do create a patch-branch for upstream patches to avoid changes to your local repo.

This commit is contained in:
Anton Hvornum 2021-09-06 12:22:57 +00:00
commit 025dc83194
6 changed files with 52 additions and 58 deletions

View File

@ -64,7 +64,7 @@ def initialize_arguments():
config[key] = val config[key] = val
config["script"] = args.script config["script"] = args.script
if args.dry_run is not None: if args.dry_run is not None:
config["dry_run"] = args.dry_run config["dry-run"] = args.dry_run
return config return config

View File

@ -523,13 +523,17 @@ class Filesystem:
self.blockdevice.partition[0].allow_formatting = True self.blockdevice.partition[0].allow_formatting = True
self.blockdevice.partition[1].allow_formatting = True self.blockdevice.partition[1].allow_formatting = True
else: else:
self.add_partition('primary', start='1MiB', end='513MiB', partition_format='ext2') if not self.parted_mklabel(self.blockdevice.device, "msdos"):
raise KeyError(f"Could not create a MSDOS label on {self}")
self.add_partition('primary', start='1MiB', end='513MiB', partition_format='ext4')
self.set(0, 'boot on') self.set(0, 'boot on')
self.add_partition('primary', start='513MiB', end='100%') self.add_partition('primary', start='513MiB', end='100%')
self.blockdevice.partition[0].filesystem = 'ext2' self.blockdevice.partition[0].filesystem = 'ext4' # TODO: Up for debate weither or not this should be user-supplied: https://github.com/archlinux/archinstall/pull/595/files
self.blockdevice.partition[1].filesystem = root_filesystem_type self.blockdevice.partition[1].filesystem = root_filesystem_type
log(f"Set the boot partition {self.blockdevice.partition[0]} to use filesystem {'ext4'}.", level=logging.DEBUG)
log(f"Set the root partition {self.blockdevice.partition[1]} to use filesystem {root_filesystem_type}.", level=logging.DEBUG) log(f"Set the root partition {self.blockdevice.partition[1]} to use filesystem {root_filesystem_type}.", level=logging.DEBUG)
self.blockdevice.partition[0].target_mountpoint = '/boot' self.blockdevice.partition[0].target_mountpoint = '/boot'
@ -552,11 +556,9 @@ class Filesystem:
if partitioning: if partitioning:
start_wait = time.time() start_wait = time.time()
while previous_partitions == self.blockdevice.partitions: time.sleep(0.025) # Let the new partition come up in the kernel
time.sleep(0.025) # Let the new partition come up in the kernel if time.time() - start_wait > 20:
if time.time() - start_wait > 10: raise DiskError(f"New partition never showed up after adding new partition on {self} (timeout 10 seconds).")
raise DiskError(f"New partition never showed up after adding new partition on {self} (timeout 10 seconds).")
return True return True
def set_name(self, partition: int, name: str): def set_name(self, partition: int, name: str):

View File

@ -710,7 +710,8 @@ def select_driver(options=AVAILABLE_GFX_DRIVERS):
if has_nvidia_graphics(): if has_nvidia_graphics():
print('For the best compatibility with your Nvidia hardware, you may want to use the Nvidia proprietary driver.') print('For the best compatibility with your Nvidia hardware, you may want to use the Nvidia proprietary driver.')
arguments['gfx_driver'] = generic_select(drivers, input_text="Select a graphics driver or leave blank to install all open-source drivers: ") if not arguments.get('gfx_driver', None):
arguments['gfx_driver'] = generic_select(drivers, input_text="Select a graphics driver or leave blank to install all open-source drivers: ")
if arguments.get('gfx_driver', None) is None: if arguments.get('gfx_driver', None) is None:
arguments['gfx_driver'] = "All open-source (default)" arguments['gfx_driver'] = "All open-source (default)"

View File

@ -26,6 +26,32 @@ archinstall.log(f"Graphics devices detected: {archinstall.graphics_devices().key
# For support reasons, we'll log the disk layout pre installation to match against post-installation layout # For support reasons, we'll log the disk layout pre installation to match against post-installation layout
archinstall.log(f"Disk states before installing: {archinstall.disk_layouts()}", level=logging.DEBUG) archinstall.log(f"Disk states before installing: {archinstall.disk_layouts()}", level=logging.DEBUG)
def load_config():
if archinstall.arguments.get('harddrive', None) is not None:
archinstall.arguments['harddrive'] = archinstall.BlockDevice(path=archinstall.arguments['harddrive']['path'])
# Temporarily disabling keep_partitions if config file is loaded
archinstall.arguments['harddrive'].keep_partitions = False
# Temporary workaround to make Desktop Environments work
if archinstall.arguments.get('profile', None) is not None:
if type(archinstall.arguments.get('profile', None)) is dict:
archinstall.arguments['profile'] = archinstall.Profile(None, archinstall.arguments.get('profile', None)['path'])
else:
archinstall.arguments['profile'] = archinstall.Profile(None, archinstall.arguments.get('profile', None))
archinstall.storage['_desktop_profile'] = archinstall.arguments.get('desktop-environment', None)
if archinstall.arguments.get('mirror-region', None) is not None:
if type(archinstall.arguments.get('mirror-region', None)) is dict:
archinstall.arguments['mirror-region'] = archinstall.arguments.get('mirror-region', None)
else:
selected_region = archinstall.arguments.get('mirror-region', None)
archinstall.arguments['mirror-region'] = {selected_region: archinstall.list_mirrors()[selected_region]}
if archinstall.arguments.get('sys-language', None) is not None:
archinstall.arguments['sys-language'] = archinstall.arguments.get('sys-language', 'en_US')
if archinstall.arguments.get('sys-encoding', None) is not None:
archinstall.arguments['sys-encoding'] = archinstall.arguments.get('sys-encoding', 'utf-8')
if archinstall.arguments.get('gfx_driver', None) is not None:
archinstall.storage['gfx_driver_packages'] = AVAILABLE_GFX_DRIVERS.get(archinstall.arguments.get('gfx_driver', None), None)
if archinstall.arguments.get('servers', None) is not None:
archinstall.storage['_selected_servers'] = archinstall.arguments.get('servers', None)
def ask_user_questions(): def ask_user_questions():
""" """
@ -54,9 +80,6 @@ def ask_user_questions():
break break
except archinstall.RequirementError as e: except archinstall.RequirementError as e:
archinstall.log(e, fg="red") archinstall.log(e, fg="red")
else:
selected_region = archinstall.arguments['mirror-region']
archinstall.arguments['mirror-region'] = {selected_region: archinstall.list_mirrors()[selected_region]}
if not archinstall.arguments.get('sys-language', None) and archinstall.arguments.get('advanced', False): if not archinstall.arguments.get('sys-language', None) and archinstall.arguments.get('advanced', False):
archinstall.arguments['sys-language'] = input("Enter a valid locale (language) for your OS, (Default: en_US): ").strip() archinstall.arguments['sys-language'] = input("Enter a valid locale (language) for your OS, (Default: en_US): ").strip()
@ -69,9 +92,7 @@ def ask_user_questions():
archinstall.arguments['sys-encoding'] = 'utf-8' archinstall.arguments['sys-encoding'] = 'utf-8'
# Ask which harddrive/block-device we will install to # Ask which harddrive/block-device we will install to
if archinstall.arguments.get('harddrive', None): if not archinstall.arguments.get('harddrive', None):
archinstall.arguments['harddrive'] = archinstall.BlockDevice(archinstall.arguments['harddrive'])
else:
archinstall.arguments['harddrive'] = archinstall.select_disk(archinstall.all_disks()) archinstall.arguments['harddrive'] = archinstall.select_disk(archinstall.all_disks())
if archinstall.arguments['harddrive'] is None: if archinstall.arguments['harddrive'] is None:
archinstall.arguments['target-mount'] = archinstall.storage.get('MOUNT_POINT', '/mnt') archinstall.arguments['target-mount'] = archinstall.storage.get('MOUNT_POINT', '/mnt')
@ -188,20 +209,15 @@ def ask_user_questions():
archinstall.arguments['!root-password'] = archinstall.get_password(prompt='Enter root password (Recommendation: leave blank to leave root disabled): ') archinstall.arguments['!root-password'] = archinstall.get_password(prompt='Enter root password (Recommendation: leave blank to leave root disabled): ')
# Ask for additional users (super-user if root pw was not set) # Ask for additional users (super-user if root pw was not set)
archinstall.arguments['users'] = {} if not archinstall.arguments.get('!root-password', None) and not archinstall.arguments.get('superusers', None):
archinstall.arguments['superusers'] = {}
if not archinstall.arguments.get('!root-password', None):
archinstall.arguments['superusers'] = archinstall.ask_for_superuser_account('Create a required super-user with sudo privileges: ', forced=True) archinstall.arguments['superusers'] = archinstall.ask_for_superuser_account('Create a required super-user with sudo privileges: ', forced=True)
users, superusers = archinstall.ask_for_additional_users('Enter a username to create a additional user (leave blank to skip & continue): ')
users, superusers = archinstall.ask_for_additional_users('Enter a username to create a additional user (leave blank to skip & continue): ') archinstall.arguments['users'] = users
archinstall.arguments['users'] = users archinstall.arguments['superusers'] = {**archinstall.arguments['superusers'], **superusers}
archinstall.arguments['superusers'] = {**archinstall.arguments['superusers'], **superusers}
# Ask for archinstall-specific profiles (such as desktop environments etc) # Ask for archinstall-specific profiles (such as desktop environments etc)
if not archinstall.arguments.get('profile', None): if not archinstall.arguments.get('profile', None):
archinstall.arguments['profile'] = archinstall.select_profile() archinstall.arguments['profile'] = archinstall.select_profile()
else:
archinstall.arguments['profile'] = Profile(installer=None, path=archinstall.arguments['profile'])
# Check the potentially selected profiles preparations to get early checks if some additional questions are needed. # Check the potentially selected profiles preparations to get early checks if some additional questions are needed.
if archinstall.arguments['profile'] and archinstall.arguments['profile'].has_prep_function(): if archinstall.arguments['profile'] and archinstall.arguments['profile'].has_prep_function():
@ -266,7 +282,7 @@ def perform_installation_steps():
config_file.write(user_configuration) config_file.write(user_configuration)
print() print()
if archinstall.arguments.get('dry_run'): if archinstall.arguments.get('dry-run'):
exit(0) exit(0)
if not archinstall.arguments.get('silent'): if not archinstall.arguments.get('silent'):
@ -436,33 +452,8 @@ if not check_mirror_reachable():
archinstall.log(f"Arch Linux mirrors are not reachable. Please check your internet connection and the log file '{log_file}'.", level=logging.INFO, fg="red") archinstall.log(f"Arch Linux mirrors are not reachable. Please check your internet connection and the log file '{log_file}'.", level=logging.INFO, fg="red")
exit(1) exit(1)
load_config()
if not archinstall.arguments.get('silent'): if not archinstall.arguments.get('silent'):
ask_user_questions() ask_user_questions()
else:
# Workarounds if config is loaded from a file
# The harddrive section should be moved to perform_installation_steps, where it's actually being performed
# Blockdevice object should be created in perform_installation_steps
# This needs to be done until then
archinstall.arguments['harddrive'] = archinstall.BlockDevice(path=archinstall.arguments['harddrive']['path'])
# Temporarily disabling keep_partitions if config file is loaded
archinstall.arguments['harddrive'].keep_partitions = False
# Temporary workaround to make Desktop Environments work
if archinstall.arguments.get('profile', None) is not None:
if type(archinstall.arguments.get('profile', None)) is dict:
archinstall.arguments['profile'] = archinstall.Profile(None, archinstall.arguments.get('profile', None)['path'])
else:
archinstall.arguments['profile'] = archinstall.Profile(None, archinstall.arguments.get('profile', None))
else:
archinstall.arguments['profile'] = None
if archinstall.arguments.get('mirror-region', None) is not None:
if type(archinstall.arguments.get('mirror-region', None)) is dict:
archinstall.arguments['mirror-region'] = archinstall.arguments.get('mirror-region', None)
else:
selected_region = archinstall.arguments.get('mirror-region', None)
archinstall.arguments['mirror-region'] = {selected_region: archinstall.list_mirrors()[selected_region]}
archinstall.arguments['sys-language'] = archinstall.arguments.get('sys-language', 'en_US')
archinstall.arguments['sys-encoding'] = archinstall.arguments.get('sys-encoding', 'utf-8')
if archinstall.arguments.get('gfx_driver', None) is not None:
archinstall.storage['gfx_driver_packages'] = AVAILABLE_GFX_DRIVERS.get(archinstall.arguments.get('gfx_driver', None), None)
perform_installation_steps() perform_installation_steps()

View File

@ -50,12 +50,11 @@ def _prep_function(*args, **kwargs):
# Temporarily store the selected desktop profile # Temporarily store the selected desktop profile
# in a session-safe location, since this module will get reloaded # in a session-safe location, since this module will get reloaded
# the next time it gets executed. # the next time it gets executed.
if '_desktop_profile' not in archinstall.storage.keys(): if not archinstall.storage.get('_desktop_profile', None):
archinstall.storage['_desktop_profile'] = desktop archinstall.storage['_desktop_profile'] = desktop
if not archinstall.arguments.get('desktop-environment', None):
archinstall.arguments['desktop-environment'] = desktop
profile = archinstall.Profile(None, desktop) profile = archinstall.Profile(None, desktop)
# Set the resolved profile path to the actual desktop environment
archinstall.arguments['profile'] = profile
# Loading the instructions with a custom namespace, ensures that a __name__ comparison is never triggered. # Loading the instructions with a custom namespace, ensures that a __name__ comparison is never triggered.
with profile.load_instructions(namespace=f"{desktop}.py") as imported: with profile.load_instructions(namespace=f"{desktop}.py") as imported:
if hasattr(imported, '_prep_function'): if hasattr(imported, '_prep_function'):

View File

@ -26,8 +26,9 @@ def _prep_function(*args, **kwargs):
Magic function called by the importing installer Magic function called by the importing installer
before continuing any further. before continuing any further.
""" """
selected_servers = archinstall.generic_multi_select(available_servers, "Choose which servers to install and enable (leave blank for a minimal installation): ") if not archinstall.storage.get('_selected_servers', None):
archinstall.storage['_selected_servers'] = selected_servers selected_servers = archinstall.generic_multi_select(available_servers, "Choose which servers to install and enable (leave blank for a minimal installation): ")
archinstall.storage['_selected_servers'] = selected_servers
return True return True