Send patches - preferably formatted by git format-patch - to patches at archlinux32 dot org.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--archinstall/__init__.py2
-rw-r--r--archinstall/lib/disk.py10
-rw-r--r--archinstall/lib/user_interaction.py3
-rw-r--r--examples/guided.py77
-rw-r--r--profiles/desktop.py7
-rw-r--r--profiles/server.py5
6 files changed, 48 insertions, 56 deletions
diff --git a/archinstall/__init__.py b/archinstall/__init__.py
index 84595528..2eec1ce6 100644
--- a/archinstall/__init__.py
+++ b/archinstall/__init__.py
@@ -64,7 +64,7 @@ def initialize_arguments():
config[key] = val
config["script"] = args.script
if args.dry_run is not None:
- config["dry_run"] = args.dry_run
+ config["dry-run"] = args.dry_run
return config
diff --git a/archinstall/lib/disk.py b/archinstall/lib/disk.py
index de39bafd..be0e6518 100644
--- a/archinstall/lib/disk.py
+++ b/archinstall/lib/disk.py
@@ -519,6 +519,8 @@ class Filesystem:
self.blockdevice.partition[1].allow_formatting = True
else:
# we don't need a seprate boot partition it would be a waste of space
+ 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='1MB', end='100%')
self.blockdevice.partition[0].filesystem = root_filesystem_type
log(f"Set the root partition {self.blockdevice.partition[0]} to use filesystem {root_filesystem_type}.", level=logging.DEBUG)
@@ -539,11 +541,9 @@ class Filesystem:
if partitioning:
start_wait = time.time()
- while previous_partitions == self.blockdevice.partitions:
- time.sleep(0.025) # Let the new partition come up in the kernel
- if time.time() - start_wait > 10:
- raise DiskError(f"New partition never showed up after adding new partition on {self} (timeout 10 seconds).")
-
+ time.sleep(0.025) # Let the new partition come up in the kernel
+ if time.time() - start_wait > 20:
+ raise DiskError(f"New partition never showed up after adding new partition on {self} (timeout 10 seconds).")
return True
def set_name(self, partition: int, name: str):
diff --git a/archinstall/lib/user_interaction.py b/archinstall/lib/user_interaction.py
index 3c1ba04f..44dabbe6 100644
--- a/archinstall/lib/user_interaction.py
+++ b/archinstall/lib/user_interaction.py
@@ -710,7 +710,8 @@ def select_driver(options=AVAILABLE_GFX_DRIVERS):
if has_nvidia_graphics():
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:
arguments['gfx_driver'] = "All open-source (default)"
diff --git a/examples/guided.py b/examples/guided.py
index aebebcfa..273fcadf 100644
--- a/examples/guided.py
+++ b/examples/guided.py
@@ -26,7 +26,33 @@ 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
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():
"""
First, we'll ask the user for a bunch of user input.
@@ -54,9 +80,6 @@ def ask_user_questions():
break
except archinstall.RequirementError as e:
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):
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'
# Ask which harddrive/block-device we will install to
- if archinstall.arguments.get('harddrive', None):
- archinstall.arguments['harddrive'] = archinstall.BlockDevice(archinstall.arguments['harddrive'])
- else:
+ if not archinstall.arguments.get('harddrive', None):
archinstall.arguments['harddrive'] = archinstall.select_disk(archinstall.all_disks())
if archinstall.arguments['harddrive'] is None:
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): ')
# Ask for additional users (super-user if root pw was not set)
- archinstall.arguments['users'] = {}
- archinstall.arguments['superusers'] = {}
- if not archinstall.arguments.get('!root-password', None):
+ if not archinstall.arguments.get('!root-password', None) and not archinstall.arguments.get('superusers', None):
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): ')
- archinstall.arguments['users'] = users
- archinstall.arguments['superusers'] = {**archinstall.arguments['superusers'], **superusers}
+ 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['superusers'] = {**archinstall.arguments['superusers'], **superusers}
# Ask for archinstall-specific profiles (such as desktop environments etc)
if not archinstall.arguments.get('profile', None):
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.
if archinstall.arguments['profile'] and archinstall.arguments['profile'].has_prep_function():
@@ -266,7 +282,7 @@ def perform_installation_steps():
config_file.write(user_configuration)
print()
- if archinstall.arguments.get('dry_run'):
+ if archinstall.arguments.get('dry-run'):
exit(0)
if not archinstall.arguments.get('silent'):
@@ -437,33 +453,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")
exit(1)
+load_config()
if not archinstall.arguments.get('silent'):
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()
diff --git a/profiles/desktop.py b/profiles/desktop.py
index eaf145c2..b9174ac5 100644
--- a/profiles/desktop.py
+++ b/profiles/desktop.py
@@ -50,12 +50,11 @@ def _prep_function(*args, **kwargs):
# Temporarily store the selected desktop profile
# in a session-safe location, since this module will get reloaded
# 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
-
+ if not archinstall.arguments.get('desktop-environment', None):
+ archinstall.arguments['desktop-environment'] = 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.
with profile.load_instructions(namespace=f"{desktop}.py") as imported:
if hasattr(imported, '_prep_function'):
diff --git a/profiles/server.py b/profiles/server.py
index 79aa9481..731d2005 100644
--- a/profiles/server.py
+++ b/profiles/server.py
@@ -26,8 +26,9 @@ def _prep_function(*args, **kwargs):
Magic function called by the importing installer
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): ")
- archinstall.storage['_selected_servers'] = selected_servers
+ 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): ")
+ archinstall.storage['_selected_servers'] = selected_servers
return True