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:
commit
025dc83194
|
|
@ -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
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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 > 10:
|
if time.time() - start_wait > 20:
|
||||||
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):
|
||||||
|
|
|
||||||
|
|
@ -710,6 +710,7 @@ 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.')
|
||||||
|
|
||||||
|
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: ")
|
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:
|
||||||
|
|
|
||||||
|
|
@ -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,11 +209,8 @@ 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}
|
||||||
|
|
@ -200,8 +218,6 @@ def ask_user_questions():
|
||||||
# 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()
|
||||||
|
|
|
||||||
|
|
@ -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'):
|
||||||
|
|
|
||||||
|
|
@ -26,6 +26,7 @@ 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.
|
||||||
"""
|
"""
|
||||||
|
if not archinstall.storage.get('_selected_servers', None):
|
||||||
selected_servers = archinstall.generic_multi_select(available_servers, "Choose which servers to install and enable (leave blank for a minimal installation): ")
|
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
|
archinstall.storage['_selected_servers'] = selected_servers
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue