Fixed remaining installation steps and remove legacy references to archinstall.storage['_guided'] and archinstall.storage['_guided_hidden']. Which were great at the time, but they are not deprecated and moved into archinstall.arguments instead to support parameters on command-line. As well as being a bit more description, since they are arguments afterall to various setup instructions.

This commit is contained in:
Anton Hvornum 2021-03-09 16:10:57 +01:00
parent 1167cf589b
commit aafe3d19c6
1 changed files with 230 additions and 227 deletions

View File

@ -43,67 +43,66 @@ def perform_installation(device, boot_partition, language, mirrors):
# If user selected to copy the current ISO network configuration # If user selected to copy the current ISO network configuration
# Perform a copy of the config # Perform a copy of the config
if archinstall.storage['_guided']['network'] == 'Copy ISO network configuration to installation': if archinstall.arguments.get('nic', None) == 'Copy ISO network configuration to installation':
installation.copy_ISO_network_config(enable_services=True) # Sources the ISO network configuration to the install medium. installation.copy_ISO_network_config(enable_services=True) # Sources the ISO network configuration to the install medium.
# Otherwise, if a interface was selected, configure that interface # Otherwise, if a interface was selected, configure that interface
elif archinstall.storage['_guided']['network']: elif archinstall.arguments.get('nic', None):
installation.configure_nic(**archinstall.storage['_guided']['network']) installation.configure_nic(**archinstall.arguments.get('nic', {}))
installation.enable_service('systemd-networkd') installation.enable_service('systemd-networkd')
installation.enable_service('systemd-resolved') installation.enable_service('systemd-resolved')
if archinstall.storage['_guided']['packages'] and archinstall.storage['_guided']['packages'][0] != '': if archinstall.arguments.get('packages', None) and archinstall.arguments.get('packages', None)[0] != '':
installation.add_additional_packages(archinstall.storage['_guided']['packages']) installation.add_additional_packages(archinstall.arguments.get('packages', None))
if 'profile' in archinstall.storage['_guided'] and len(profile := archinstall.storage['_guided']['profile']['path'].strip()): if archinstall.arguments.get('profile', None) and len(profile := archinstall.arguments.get('profile').strip()):
installation.install_profile(profile) installation.install_profile(profile)
if archinstall.storage['_guided']['users']: if archinstall.arguments.get('users', None):
for user in archinstall.storage['_guided']['users']: for user, password in archinstall.arguments.get('users').items():
password = users[user] installation.user_create(user, password, sudo=False)
sudo = False if archinstall.arguments.get('superusers', None):
if 'root_pw' not in archinstall.storage['_guided_hidden'] or len(archinstall.storage['_guided_hidden']['root_pw'].strip()) == 0: for user, password in archinstall.arguments.get('superusers').items():
sudo = True installation.user_create(user, password, sudo=True)
installation.user_create(user, password, sudo=sudo) if (root_pw := archinstall.arguments.get('!root-password', None)) and len(root_pw):
installation.user_set_pw('root', root_pw)
if 'root_pw' in archinstall.storage['_guided_hidden'] and archinstall.storage['_guided_hidden']['root_pw']: def ask_user_questions():
installation.user_set_pw('root', archinstall.storage['_guided_hidden']['root_pw']) """
"""
First, we'll ask the user for a bunch of user input. First, we'll ask the user for a bunch of user input.
Not until we're satisfied with what we want to install Not until we're satisfied with what we want to install
will we continue with the actual installation steps. will we continue with the actual installation steps.
""" """
if not archinstall.arguments.get('keyboard-language', None): if not archinstall.arguments.get('keyboard-language', None):
archinstall.arguments['keyboard-language'] = archinstall.select_language(archinstall.list_keyboard_languages()).strip() archinstall.arguments['keyboard-language'] = archinstall.select_language(archinstall.list_keyboard_languages()).strip()
# Before continuing, set the preferred keyboard layout/language in the current terminal. # Before continuing, set the preferred keyboard layout/language in the current terminal.
# This will just help the user with the next following questions. # This will just help the user with the next following questions.
if len(archinstall.arguments['keyboard-language']): if len(archinstall.arguments['keyboard-language']):
archinstall.set_keyboard_language(archinstall.arguments['keyboard-language']) archinstall.set_keyboard_language(archinstall.arguments['keyboard-language'])
# Set which region to download packages from during the installation # Set which region to download packages from during the installation
if not archinstall.arguments.get('mirror-region', None): if not archinstall.arguments.get('mirror-region', None):
archinstall.arguments['mirror-region'] = archinstall.select_mirror_regions(archinstall.list_mirrors()) archinstall.arguments['mirror-region'] = archinstall.select_mirror_regions(archinstall.list_mirrors())
else: else:
selected_region = archinstall.arguments['mirror-region'] selected_region = archinstall.arguments['mirror-region']
archinstall.arguments['mirror-region'] = {selected_region : archinstall.list_mirrors()[selected_region]} archinstall.arguments['mirror-region'] = {selected_region : archinstall.list_mirrors()[selected_region]}
# 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 archinstall.arguments.get('harddrive', None):
archinstall.arguments['harddrive'] = archinstall.BlockDevice(archinstall.arguments['harddrive']) archinstall.arguments['harddrive'] = archinstall.BlockDevice(archinstall.arguments['harddrive'])
else: else:
archinstall.arguments['harddrive'] = archinstall.select_disk(archinstall.all_disks()) archinstall.arguments['harddrive'] = archinstall.select_disk(archinstall.all_disks())
# Perform a quick sanity check on the selected harddrive. # Perform a quick sanity check on the selected harddrive.
# 1. Check if it has partitions # 1. Check if it has partitions
# 3. Check that we support the current partitions # 3. Check that we support the current partitions
# 2. If so, ask if we should keep them or wipe everything # 2. If so, ask if we should keep them or wipe everything
if archinstall.arguments['harddrive'].has_partitions(): if archinstall.arguments['harddrive'].has_partitions():
archinstall.log(f"{archinstall.arguments['harddrive']} contains the following partitions:", fg='red') archinstall.log(f"{archinstall.arguments['harddrive']} contains the following partitions:", fg='red')
# We curate a list pf supported paritions # We curate a list pf supported paritions
@ -179,43 +178,43 @@ if archinstall.arguments['harddrive'].has_partitions():
archinstall.arguments['filesystem'] = archinstall.ask_for_main_filesystem_format() archinstall.arguments['filesystem'] = archinstall.ask_for_main_filesystem_format()
archinstall.arguments['harddrive'].keep_partitions = False archinstall.arguments['harddrive'].keep_partitions = False
# Get disk encryption password (or skip if blank) # Get disk encryption password (or skip if blank)
if not archinstall.arguments.get('!encryption-password', None): if not archinstall.arguments.get('!encryption-password', None):
archinstall.arguments['!encryption-password'] = archinstall.get_password(prompt='Enter disk encryption password (leave blank for no encryption): ') archinstall.arguments['!encryption-password'] = archinstall.get_password(prompt='Enter disk encryption password (leave blank for no encryption): ')
archinstall.arguments['harddrive'].encryption_password = archinstall.arguments['!encryption-password'] archinstall.arguments['harddrive'].encryption_password = archinstall.arguments['!encryption-password']
# Get the hostname for the machine # Get the hostname for the machine
if not archinstall.arguments.get('hostname', None): if not archinstall.arguments.get('hostname', None):
archinstall.arguments['hostname'] = input('Desired hostname for the installation: ').strip(' ') archinstall.arguments['hostname'] = input('Desired hostname for the installation: ').strip(' ')
# Ask for a root password (optional, but triggers requirement for super-user if skipped) # Ask for a root password (optional, but triggers requirement for super-user if skipped)
if not archinstall.arguments.get('!root-password', None): if not archinstall.arguments.get('!root-password', None):
archinstall.arguments['!root-password'] = archinstall.get_password(prompt='Enter root password (Recommended: leave blank to leave root disabled): ') archinstall.arguments['!root-password'] = archinstall.get_password(prompt='Enter root password (Recommended: leave blank to leave root disabled): ')
# # Storing things in _guided_hidden helps us avoid printing it # # Storing things in _guided_hidden helps us avoid printing it
# # when echoing user configuration: archinstall.storage['_guided'] # # when echoing user configuration: archinstall.storage['_guided']
# archinstall.storage['_guided_hidden']['root_pw'] = root_pw # archinstall.storage['_guided_hidden']['root_pw'] = root_pw
# archinstall.storage['_guided']['root_unlocked'] = True # archinstall.storage['_guided']['root_unlocked'] = True
# break # break
# 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'] = {} archinstall.arguments['users'] = {}
archinstall.arguments['superusers'] = {} archinstall.arguments['superusers'] = {}
if not archinstall.arguments.get('!root-password', None): 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('Any additional users to install (leave blank for no users): ') users, superusers = archinstall.ask_for_additional_users('Any additional users to install (leave blank for no users): ')
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.list_profiles()) archinstall.arguments['profile'] = archinstall.select_profile(archinstall.list_profiles())
else: else:
archinstall.arguments['profile'] = archinstall.list_profiles()[archinstall.arguments['profile']] archinstall.arguments['profile'] = archinstall.list_profiles()[archinstall.arguments['profile']]
# Check the potentially selected profiles preperations to get early checks if some additional questions are needed. # Check the potentially selected profiles preperations 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():
with archinstall.arguments['profile'].load_instructions(namespace=f"{archinstall.arguments['profile'].namespace}.py") as imported: with archinstall.arguments['profile'].load_instructions(namespace=f"{archinstall.arguments['profile'].namespace}.py") as imported:
if not imported._prep_function(): if not imported._prep_function():
archinstall.log( archinstall.log(
@ -225,37 +224,38 @@ if archinstall.arguments['profile'] and archinstall.arguments['profile'].has_pre
) )
exit(1) exit(1)
# Additional packages (with some light weight error handling for invalid package names) # Additional packages (with some light weight error handling for invalid package names)
if not archinstall.arguments.get('packages', None): if not archinstall.arguments.get('packages', None):
archinstall.arguments['packages'] = [package for package in input('Additional packages aside from base (space separated): ').split(' ') if len(package)] archinstall.arguments['packages'] = [package for package in input('Additional packages aside from base (space separated): ').split(' ') if len(package)]
# Verify packages that were given # Verify packages that were given
try: try:
archinstall.validate_package_list(archinstall.arguments['packages']) archinstall.validate_package_list(archinstall.arguments['packages'])
except archinstall.RequirementError as e: except archinstall.RequirementError as e:
archinstall.log(e, fg='red') archinstall.log(e, fg='red')
exit(1) exit(1)
# Ask or Call the helper function that asks the user to optionally configure a network. # Ask or Call the helper function that asks the user to optionally configure a network.
if not archinstall.arguments.get('nic', None): if not archinstall.arguments.get('nic', None):
archinstall.arguments['nic'] = archinstall.ask_to_configure_network() archinstall.arguments['nic'] = archinstall.ask_to_configure_network()
print() def perform_installation_steps():
print('This is your chosen configuration:') print()
archinstall.log("-- Guided template chosen (with below config) --", level=archinstall.LOG_LEVELS.Debug) print('This is your chosen configuration:')
archinstall.log(json.dumps(archinstall.arguments, indent=4, sort_keys=True, cls=archinstall.JSON), level=archinstall.LOG_LEVELS.Info) archinstall.log("-- Guided template chosen (with below config) --", level=archinstall.LOG_LEVELS.Debug)
print() archinstall.log(json.dumps(archinstall.arguments, indent=4, sort_keys=True, cls=archinstall.JSON), level=archinstall.LOG_LEVELS.Info)
print()
input('Press Enter to continue.') input('Press Enter to continue.')
""" """
Issue a final warning before we continue with something un-revertable. Issue a final warning before we continue with something un-revertable.
We mention the drive one last time, and count from 5 to 0. We mention the drive one last time, and count from 5 to 0.
""" """
print(f" ! Formatting {archinstall.arguments['harddrive']} in ", end='') print(f" ! Formatting {archinstall.arguments['harddrive']} in ", end='')
for i in range(5, 0, -1): for i in range(5, 0, -1):
print(f"{i}", end='') print(f"{i}", end='')
for x in range(4): for x in range(4):
@ -273,16 +273,16 @@ for i in range(5, 0, -1):
SIG_TRIGGER = False SIG_TRIGGER = False
signal.signal(signal.SIGINT, sig_handler) signal.signal(signal.SIGINT, sig_handler)
# Put back the default/original signal handler now that we're done catching # Put back the default/original signal handler now that we're done catching
# and interrupting SIGINT with "Do you really want to abort". # and interrupting SIGINT with "Do you really want to abort".
print() print()
signal.signal(signal.SIGINT, original_sigint_handler) signal.signal(signal.SIGINT, original_sigint_handler)
""" """
Setup the blockdevice, filesystem (and optionally encryption). Setup the blockdevice, filesystem (and optionally encryption).
Once that's done, we'll hand over to perform_installation() Once that's done, we'll hand over to perform_installation()
""" """
with archinstall.Filesystem(archinstall.arguments['harddrive'], archinstall.GPT) as fs: with archinstall.Filesystem(archinstall.arguments['harddrive'], archinstall.GPT) as fs:
# Wipe the entire drive if the disk flag `keep_partitions`is False. # Wipe the entire drive if the disk flag `keep_partitions`is False.
if archinstall.arguments['harddrive'].keep_partitions is False: if archinstall.arguments['harddrive'].keep_partitions is False:
fs.use_entire_disk(root_filesystem_type=archinstall.arguments.get('filesystem', 'btrfs'), fs.use_entire_disk(root_filesystem_type=archinstall.arguments.get('filesystem', 'btrfs'),
@ -320,3 +320,6 @@ with archinstall.Filesystem(archinstall.arguments['harddrive'], archinstall.GPT)
boot_partition=fs.find_partition('/boot'), boot_partition=fs.find_partition('/boot'),
language=archinstall.arguments['keyboard-language'], language=archinstall.arguments['keyboard-language'],
mirrors=archinstall.arguments['mirror-region']) mirrors=archinstall.arguments['mirror-region'])
ask_user_questions()
perform_pre_installation_steps()