def install_on(mountpoint): # We kick off the installer by telling it where the with archinstall.Installer(mountpoint) as installation: # Strap in the base system, add a boot loader and configure # some other minor details as specified by this profile and user. if installation.minimal_installation(): installation.set_hostname('minimal-arch') installation.add_bootloader() # Optionally enable networking: if archinstall.arguments.get('network', None): installation.copy_ISO_network_config(enable_services=True) installation.add_additional_packages(['nano', 'wget', 'git']) installation.install_profile('minimal') installation.user_create('devel', 'devel') installation.user_set_pw('root', 'airoot') # Once this is done, we output some useful information to the user # And the installation is complete. archinstall.log( f"There are two new accounts in your installation after reboot:") archinstall.log(f" * root (password: airoot)") archinstall.log(f" * devel (password: devel)")
def perform_installation(mountpoint): """ Performs the installation steps on a block device. Only requirement is that the block devices are formatted and setup prior to entering this function. """ with archinstall.Installer(mountpoint, kernels=None) as installation: # Mount all the drives to the desired mountpoint # This *can* be done outside of the installation, but the installer can deal with it. if archinstall.storage.get('disk_layouts'): installation.mount_ordered_layout( archinstall.storage['disk_layouts']) # Placing /boot check during installation because this will catch both re-use and wipe scenarios. for partition in installation.partitions: if partition.mountpoint == installation.target + '/boot': if partition.size <= 0.25: # in GB raise archinstall.DiskError( f"The selected /boot partition in use is not large enough to properly install a boot loader. Please resize it to at least 256MB and re-run the installation." ) # to generate a fstab directory holder. Avoids an error on exit and at the same time checks the procedure target = pathlib.Path(f"{mountpoint}/etc/fstab") if not target.parent.exists(): target.parent.mkdir(parents=True) # For support reasons, we'll log the disk layout post installation (crash or no crash) archinstall.log( f"Disk states after installing: {archinstall.disk_layouts()}", level=logging.DEBUG)
def perform_installation(mountpoint, mode): """ Performs the installation steps on a block device. Only requirement is that the block devices are formatted and setup prior to entering this function. """ with archinstall.Installer(mountpoint, kernels=archinstall.arguments.get('kernels', ['linux'])) as installation: if mode in ('full','only_hd'): disk_setup(installation) if mode == 'only_hd': target = pathlib.Path(f"{mountpoint}/etc/fstab") if not target.parent.exists(): target.parent.mkdir(parents=True) if mode in ('full','only_os'): os_setup(installation) installation.log("For post-installation tips, see https://wiki.archlinux.org/index.php/Installation_guide#Post-installation", fg="yellow") if not archinstall.arguments.get('silent'): prompt = 'Would you like to chroot into the newly created installation and perform post-installation configuration?' choice = Menu(prompt, Menu.yes_no(), default_option=Menu.yes()).run() if choice == Menu.yes(): try: installation.drop_to_shell() except: pass # For support reasons, we'll log the disk layout post installation (crash or no crash) archinstall.log(f"Disk states after installing: {archinstall.disk_layouts()}", level=logging.DEBUG)
def install_on (mountpoint): with archinstall.Installer(mountpoint) as installation: if installation.minimal_installation(): installation.set_hostname('vm01') installation.add_bootloader() installation.add_additional_packages(__packages__) installation.install_profile('minimal') installation.user_create('sean', 'monkeys') installation.user_set_pw('root', 'monkeys')
def perform_installation(device, boot_partition, language, mirrors): """ Performs the installation steps on a block device. Only requirement is that the block devices are formatted and setup prior to entering this function. """ with archinstall.Installer(device, boot_partition=boot_partition, hostname=archinstall.storage['_guided'] ['hostname']) as installation: ## if len(mirrors): # Certain services might be running that affects the system during installation. # Currently, only one such service is "reflector.service" which updates /etc/pacman.d/mirrorlist # We need to wait for it before we continue since we opted in to use a custom mirror/region. installation.log( f'Waiting for automatic mirror selection has completed before using custom mirrors.' ) while 'dead' not in (status := archinstall.service_state('reflector')): time.sleep(1) archinstall.use_mirrors(mirrors) # Set the mirrors for the live medium if installation.minimal_installation(): installation.set_mirrors( mirrors) # Set the mirrors in the installation medium installation.set_keyboard_language(language) installation.add_bootloader() # If user selected to copy the current ISO network configuration # Perform a copy of the config if archinstall.storage['_guided'][ 'network'] == 'Copy ISO network configuration to installation': 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 elif archinstall.storage['_guided']['network']: installation.configure_nic( **archinstall.storage['_guided']['network']) installation.enable_service('systemd-networkd') installation.enable_service('systemd-resolved') if archinstall.storage['_guided'][ 'packages'] and archinstall.storage['_guided']['packages'][ 0] != '': installation.add_additional_packages( archinstall.storage['_guided']['packages']) if 'profile' in archinstall.storage['_guided'] and len( profile := archinstall.storage['_guided']['profile'] ['path'].strip()):
def perform_installation(device, boot_partition, language, mirrors): """ Performs the installation steps on a block device. Only requirement is that the block devices are formatted and setup prior to entering this function. """ with archinstall.Installer(device, boot_partition=boot_partition, hostname=archinstall.arguments.get('hostname', 'Archinstall')) as installation: ## if len(mirrors): # Certain services might be running that affects the system during installation. # Currently, only one such service is "reflector.service" which updates /etc/pacman.d/mirrorlist # We need to wait for it before we continue since we opted in to use a custom mirror/region. installation.log(f'Waiting for automatic mirror selection has completed before using custom mirrors.') while 'dead' not in (status := archinstall.service_state('reflector')): time.sleep(1) archinstall.use_mirrors(mirrors) # Set the mirrors for the live medium if installation.minimal_installation(): installation.set_mirrors(mirrors) # Set the mirrors in the installation medium installation.set_keyboard_language(language) installation.add_bootloader() # If user selected to copy the current ISO network configuration # Perform a copy of the config 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. # Otherwise, if a interface was selected, configure that interface elif archinstall.arguments.get('nic', None): installation.configure_nic(**archinstall.arguments.get('nic', {})) installation.enable_service('systemd-networkd') installation.enable_service('systemd-resolved') if archinstall.arguments.get('packages', None) and archinstall.arguments.get('packages', None)[0] != '': installation.add_additional_packages(archinstall.arguments.get('packages', None)) if archinstall.arguments.get('profile', None): installation.install_profile(archinstall.arguments.get('profile', None)) for user, user_info in archinstall.arguments.get('users', {}).items(): installation.user_create(user, user_info["!password"], sudo=False) for superuser, user_info in archinstall.arguments.get('superusers', {}).items(): installation.user_create(superuser, user_info["!password"], sudo=True) if (timezone := archinstall.arguments.get('timezone', None)): installation.set_timezone(timezone) if (root_pw := archinstall.arguments.get('!root-password', None)) and len(root_pw): installation.user_set_pw('root', root_pw)
def install_on(mountpoint): # We kick off the installer by telling it where the with archinstall.Installer(mountpoint) as installation: # Strap in the base system, add a boot loader and configure # some other minor details as specified by this profile and user. if installation.minimal_installation(): installation.set_hostname(f"{USER}-{pc_name}") installation.add_bootloader() installation.install_profile('xorg') installation.set_timezone(timezone) installation.add_additional_packages(packages) installation.user_create(USER, user_pasword, sudo=True) installation.user_set_pw('root', "toor") installation.add_additional_packages("networkmanager") installation.enable_service('NetworkManager.service') with open(mountpoint + '/etc/sudoers', "a+") as f: f.write("Defaults !requiretty \n Defaults !tty_tickets") with UserHook() as h: h.set_shell("/bin/zsh") h.add_aur_packages(aur_packages)
def perform_installation(device, boot_partition, language, mirrors): """ Performs the installation steps on a block device. Only requirement is that the block devices are formatted and setup prior to entering this function. """ with archinstall.Installer(device, boot_partition=boot_partition, hostname=hostname) as installation: ## if len(mirrors): # Certain services might be running that affects the system during installation. # Currently, only one such service is "reflector.service" which updates /etc/pacman.d/mirrorlist # We need to wait for it before we continue since we opted in to use a custom mirror/region. archinstall.log(f'Waiting for automatic mirror selection has completed before using custom mirrors.') while 'dead' not in (status := archinstall.service_state('reflector')): time.sleep(1) archinstall.use_mirrors(mirrors) # Set the mirrors for the live medium if installation.minimal_installation(): installation.set_mirrors(mirrors) # Set the mirrors in the installation medium installation.set_keyboard_language(language) installation.add_bootloader() if len(packages) and packages[0] != '': installation.add_additional_packages(packages) if len(profile.strip()): installation.install_profile(profile) for user, password in users.items(): sudo = False if len(root_pw.strip()) == 0: sudo = True installation.user_create(user, password, sudo=sudo) if root_pw: installation.user_set_pw('root', root_pw)
def perform_installation(mountpoint): """ Performs the installation steps on a block device. Only requirement is that the block devices are formatted and setup prior to entering this function. """ with archinstall.Installer(mountpoint, kernels=archinstall.arguments.get( 'kernels', 'linux')) as installation: # if len(mirrors): # Certain services might be running that affects the system during installation. # Currently, only one such service is "reflector.service" which updates /etc/pacman.d/mirrorlist # We need to wait for it before we continue since we opted in to use a custom mirror/region. installation.log( 'Waiting for automatic mirror selection (reflector) to complete.', level=logging.INFO) while archinstall.service_state('reflector') not in ('dead', 'failed'): time.sleep(1) # Set mirrors used by pacstrap (outside of installation) if archinstall.arguments.get('mirror-region', None): archinstall.use_mirrors(archinstall.arguments['mirror-region'] ) # Set the mirrors for the live medium if installation.minimal_installation(): installation.set_hostname(archinstall.arguments['hostname']) if archinstall.arguments['mirror-region'].get("mirrors", None) is not None: installation.set_mirrors( archinstall.arguments['mirror-region'] ) # Set the mirrors in the installation medium if archinstall.arguments[ "bootloader"] == "grub-install" and has_uefi(): installation.add_additional_packages("grub") installation.add_bootloader(archinstall.arguments["bootloader"]) # If user selected to copy the current ISO network configuration # Perform a copy of the config if archinstall.arguments.get( 'nic', {}) == 'Copy ISO network configuration to installation': installation.copy_iso_network_config( enable_services=True ) # Sources the ISO network configuration to the install medium. elif archinstall.arguments.get('nic', {}).get('NetworkManager', False): installation.add_additional_packages("networkmanager") installation.enable_service('NetworkManager.service') # Otherwise, if a interface was selected, configure that interface elif archinstall.arguments.get('nic', {}): installation.configure_nic( **archinstall.arguments.get('nic', {})) installation.enable_service('systemd-networkd') installation.enable_service('systemd-resolved') if archinstall.arguments.get('audio', None) is not None: installation.log( f"This audio server will be used: {archinstall.arguments.get('audio', None)}", level=logging.INFO) if archinstall.arguments.get('audio', None) == 'pipewire': print('Installing pipewire ...') installation.add_additional_packages([ "pipewire", "pipewire-alsa", "pipewire-jack", "pipewire-media-session", "pipewire-pulse", "gst-plugin-pipewire", "libpulse" ]) elif archinstall.arguments.get('audio', None) == 'pulseaudio': print('Installing pulseaudio ...') installation.add_additional_packages("pulseaudio") else: installation.log("No audio server will be installed.", level=logging.INFO) if archinstall.arguments.get('packages', None) and archinstall.arguments.get( 'packages', None)[0] != '': installation.add_additional_packages( archinstall.arguments.get('packages', None)) if archinstall.arguments.get('profile', None): installation.install_profile( archinstall.arguments.get('profile', None)) for user, user_info in archinstall.arguments.get('users', {}).items(): installation.user_create(user, user_info["!password"], sudo=False) for superuser, user_info in archinstall.arguments.get( 'superusers', {}).items(): installation.user_create(superuser, user_info["!password"], sudo=True) if timezone := archinstall.arguments.get('timezone', None): installation.set_timezone(timezone) if (root_pw := archinstall.arguments.get('!root-password', None)) and len(root_pw): installation.user_set_pw('root', root_pw) # This step must be after profile installs to allow profiles to install language pre-requisits. # After which, this step will set the language both for console and x11 if x11 was installed for instance. installation.set_keyboard_language( archinstall.arguments['keyboard-language']) if archinstall.arguments['profile'] and archinstall.arguments[ 'profile'].has_post_install(): with archinstall.arguments['profile'].load_instructions( namespace= f"{archinstall.arguments['profile'].namespace}.py" ) as imported: if not imported._post_install(): archinstall.log( ' * Profile\'s post configuration requirements was not fulfilled.', fg='red') exit(1)
disk_password = '******' with archinstall.Filesystem(harddrive, archinstall.GPT) as fs: # Use the entire disk instead of setting up partitions on your own fs.use_entire_disk('luks2') if harddrive.partition[1].size == '512M': raise OSError('Trying to encrypt the boot partition for petes sake..') harddrive.partition[0].format('fat32') with archinstall.luks2(harddrive.partition[1], 'luksloop', disk_password) as unlocked_device: unlocked_device.format('btrfs') with archinstall.Installer( unlocked_device, boot_partition=harddrive.partition[0], hostname="testmachine" ) as installation: if installation.minimal_installation(): installation.add_bootloader() installation.add_additional_packages(['nano', 'wget', 'git']) installation.install_profile('awesome') installation.user_create('anton', 'test') installation.user_set_pw('root', 'toor') repo = git.Repo('./') commit = repo.head.commit.hexsha[:7] print(f'Submitting {commit}: success')
def perform_installation(mountpoint): """ Performs the installation steps on a block device. Only requirement is that the block devices are formatted and setup prior to entering this function. """ with archinstall.Installer(mountpoint) as installation: ## if len(mirrors): # Certain services might be running that affects the system during installation. # Currently, only one such service is "reflector.service" which updates /etc/pacman.d/mirrorlist # We need to wait for it before we continue since we opted in to use a custom mirror/region. installation.log( f'Waiting for automatic mirror selection has completed before using custom mirrors.' ) while 'dead' not in (status := archinstall.service_state('reflector')): time.sleep(1) archinstall.use_mirrors(archinstall.arguments['mirror-region'] ) # Set the mirrors for the live medium if installation.minimal_installation(): installation.set_hostname(archinstall.arguments['hostname']) installation.set_mirrors( archinstall.arguments['mirror-region'] ) # Set the mirrors in the installation medium installation.set_keyboard_language( archinstall.arguments['keyboard-language']) installation.add_bootloader() # If user selected to copy the current ISO network configuration # Perform a copy of the config 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. elif archinstall.arguments.get('nic', {}).get('NetworkManager', False): installation.add_additional_packages("networkmanager") installation.enable_service('NetworkManager.service') # Otherwise, if a interface was selected, configure that interface elif archinstall.arguments.get('nic', None): installation.configure_nic( **archinstall.arguments.get('nic', {})) installation.enable_service('systemd-networkd') installation.enable_service('systemd-resolved') if archinstall.arguments.get('audio', None) != None: installation.log( f"The {archinstall.arguments.get('audio', None)} audio server will be used.", level=archinstall.LOG_LEVELS.Info) if archinstall.arguments.get('audio', None) == 'pipewire': print('Installing pipewire ...') installation.add_additional_packages([ "pipewire", "pipewire-alsa", "pipewire-jack", "pipewire-media-session", "pipewire-pulse", "gst-plugin-pipewire", "libpulse" ]) elif archinstall.arguments.get('audio', None) == 'pulseaudio': print('Installing pulseaudio ...') installation.add_additional_packages("pulseaudio") if archinstall.arguments.get('packages', None) and archinstall.arguments.get( 'packages', None)[0] != '': installation.add_additional_packages( archinstall.arguments.get('packages', None)) if archinstall.arguments.get('profile', None): installation.install_profile( archinstall.arguments.get('profile', None)) for user, user_info in archinstall.arguments.get('users', {}).items(): installation.user_create(user, user_info["!password"], sudo=False) for superuser, user_info in archinstall.arguments.get( 'superusers', {}).items(): installation.user_create(superuser, user_info["!password"], sudo=True) if (timezone := archinstall.arguments.get('timezone', None)): installation.set_timezone(timezone) if (root_pw := archinstall.arguments.get('!root-password', None)) and len(root_pw): installation.user_set_pw('root', root_pw)
def perform_installation(mountpoint): user_credentials = {} if archinstall.arguments.get('!users'): user_credentials["!users"] = archinstall.arguments['!users'] if archinstall.arguments.get('!superusers'): user_credentials["!superusers"] = archinstall.arguments['!superusers'] if archinstall.arguments.get('!encryption-password'): user_credentials["!encryption-password"] = archinstall.arguments['!encryption-password'] with open("/var/log/archinstall/user_credentials.json", "w") as config_file: config_file.write(json.dumps(user_credentials, indent=4, sort_keys=True, cls=archinstall.UNSAFE_JSON)) """ Performs the installation steps on a block device. Only requirement is that the block devices are formatted and setup prior to entering this function. """ with archinstall.Installer(mountpoint, kernels=archinstall.arguments.get('kernels', 'linux')) as installation: # Mount all the drives to the desired mountpoint # This *can* be done outside of the installation, but the installer can deal with it. if archinstall.storage.get('disk_layouts'): installation.mount_ordered_layout(archinstall.storage['disk_layouts']) # Placing /boot check during installation because this will catch both re-use and wipe scenarios. for partition in installation.partitions: if partition.mountpoint == installation.target + '/boot': if partition.size <= 0.25: # in GB _msg = "The selected /boot partition in use is not large enough to properly install a boot loader. " _msg += "Please resize it to at least 256MB and re-run the installation." raise archinstall.DiskError(_msg) # Certain services might be running that affects the system during installation. # Currently, only one such service is "reflector.service" which updates /etc/pacman.d/mirrorlist # We need to wait for it before we continue since we opted in to use a custom mirror/region. if not is_chroot(): installation.log('Waiting for automatic mirror selection (reflector) to complete.', level=logging.INFO) while archinstall.service_state('reflector') not in ('dead', 'failed'): time.sleep(1) # Set mirrors used by pacstrap (outside of installation) if archinstall.arguments.get('mirror-region', None): archinstall.use_mirrors(archinstall.arguments['mirror-region']) # Set the mirrors for the live medium if installation.minimal_installation(): installation.set_locale(archinstall.arguments['sys-language'], archinstall.arguments['sys-encoding'].upper()) installation.set_hostname(archinstall.arguments['hostname']) if archinstall.arguments['mirror-region'].get("mirrors", None) is not None: installation.set_mirrors(archinstall.arguments['mirror-region']) # Set the mirrors in the installation medium if archinstall.arguments["bootloader"] == "grub-install" and archinstall.has_uefi(): installation.add_additional_packages("grub") installation.add_bootloader(archinstall.arguments["bootloader"]) if archinstall.arguments['swap']: installation.setup_swap('zram') # If user selected to copy the current ISO network configuration # Perform a copy of the config if archinstall.arguments.get('nic', {}) == 'Copy ISO network configuration to installation': installation.copy_iso_network_config(enable_services=True) # Sources the ISO network configuration to the install medium. elif archinstall.arguments.get('nic', {}).get('NetworkManager', False): installation.add_additional_packages("networkmanager") installation.enable_service('NetworkManager.service') # Otherwise, if a interface was selected, configure that interface elif archinstall.arguments.get('nic', {}): installation.configure_nic(**archinstall.arguments.get('nic', {})) installation.enable_service('systemd-networkd') installation.enable_service('systemd-resolved') if archinstall.arguments.get('audio', None) is not None: installation.log(f"This audio server will be used: {archinstall.arguments.get('audio', None)}", level=logging.INFO) if archinstall.arguments.get('audio', None) == 'pipewire': print('Installing pipewire ...') installation.add_additional_packages(["pipewire", "pipewire-alsa", "pipewire-jack", "pipewire-media-session", "pipewire-pulse", "gst-plugin-pipewire", "libpulse"]) elif archinstall.arguments.get('audio', None) == 'pulseaudio': print('Installing pulseaudio ...') installation.add_additional_packages("pulseaudio") else: installation.log("No audio server will be installed.", level=logging.INFO) if archinstall.arguments.get('packages', None) and archinstall.arguments.get('packages', None)[0] != '': installation.add_additional_packages(archinstall.arguments.get('packages', None)) if archinstall.arguments.get('profile', None): installation.install_profile(archinstall.arguments.get('profile', None)) for user, user_info in archinstall.arguments.get('!users', {}).items(): installation.user_create(user, user_info["!password"], sudo=False) for superuser, user_info in archinstall.arguments.get('!superusers', {}).items(): installation.user_create(superuser, user_info["!password"], sudo=True) if timezone := archinstall.arguments.get('timezone', None): installation.set_timezone(timezone) if archinstall.arguments.get('ntp', False): installation.activate_time_syncronization() if archinstall.accessibility_tools_in_use(): installation.enable_espeakup() if (root_pw := archinstall.arguments.get('!root-password', None)) and len(root_pw): installation.user_set_pw('root', root_pw) # This step must be after profile installs to allow profiles to install language pre-requisits. # After which, this step will set the language both for console and x11 if x11 was installed for instance. installation.set_keyboard_language(archinstall.arguments['keyboard-layout']) if archinstall.arguments['profile'] and archinstall.arguments['profile'].has_post_install(): with archinstall.arguments['profile'].load_instructions(namespace=f"{archinstall.arguments['profile'].namespace}.py") as imported: if not imported._post_install(): archinstall.log(' * Profile\'s post configuration requirements was not fulfilled.', fg='red') exit(1)
import archinstall, getpass with archinstall.Filesystem(harddrive, archinstall.GPT) as fs: boot = fs.find_partion('/boot') root = fs.find_partion('/') root.format('btrfs') with archinstall.Installer('/mnt') as installation: if installation.minimal_installation(): installation.set_hostname("testing") installation.add_bootloader(bootloader='grub-install') installation.add_additional_packages( ['vim', 'wget', 'openssh', 'python']) installation.install_profile('minimal') installation.user_create('giuliano', 'giuliano', sudo=True) password = getpass.getpass(prompt='Inserisci la password: '******'giuliano', password)
def perform_installation(mountpoint): """ Performs the installation steps on a block device. Only requirement is that the block devices are formatted and setup prior to entering this function. """ with archinstall.Installer(mountpoint, kernels=archinstall.arguments.get( 'kernels', ['linux'])) as installation: # Mount all the drives to the desired mountpoint # This *can* be done outside of the installation, but the installer can deal with it. if archinstall.arguments.get('disk_layouts'): installation.mount_ordered_layout( archinstall.arguments['disk_layouts']) # Placing /boot check during installation because this will catch both re-use and wipe scenarios. for partition in installation.partitions: if partition.mountpoint == installation.target + '/boot': if partition.size < 0.19: # ~200 MiB in GiB raise archinstall.DiskError( f"The selected /boot partition in use is not large enough to properly install a boot loader. Please resize it to at least 200MiB and re-run the installation." ) # if len(mirrors): # Certain services might be running that affects the system during installation. # Currently, only one such service is "reflector.service" which updates /etc/pacman.d/mirrorlist # We need to wait for it before we continue since we opted in to use a custom mirror/region. installation.log( 'Waiting for automatic mirror selection (reflector) to complete.', level=logging.INFO) while archinstall.service_state('reflector') not in ('dead', 'failed'): time.sleep(1) # If we've activated NTP, make sure it's active in the ISO too and # make sure at least one time-sync finishes before we continue with the installation if archinstall.arguments.get('ntp', False): # Activate NTP in the ISO archinstall.SysCommand('timedatectl set-ntp true') # TODO: This block might be redundant, but this service is not activated unless # `timedatectl set-ntp true` is executed. logged = False while archinstall.service_state( 'dbus-org.freedesktop.timesync1.service') not in ( 'running'): if not logged: installation.log( f"Waiting for dbus-org.freedesktop.timesync1.service to enter running state", level=logging.INFO) logged = True time.sleep(1) logged = False while 'Server: n/a' in archinstall.SysCommand( 'timedatectl timesync-status --no-pager --property=Server --value' ): if not logged: installation.log( f"Waiting for timedatectl timesync-status to report a timesync against a server", level=logging.INFO) logged = True time.sleep(1) # Set mirrors used by pacstrap (outside of installation) if archinstall.arguments.get('mirror-region', None): archinstall.use_mirrors(archinstall.arguments['mirror-region'] ) # Set the mirrors for the live medium # Retrieve list of additional repositories and set boolean values appropriately enable_testing = 'testing' in archinstall.arguments.get( 'additional-repositories', None) enable_multilib = 'multilib' in archinstall.arguments.get( 'additional-repositories', None) if installation.minimal_installation(testing=enable_testing, multilib=enable_multilib): installation.set_locale( archinstall.arguments['sys-language'], archinstall.arguments['sys-encoding'].upper()) installation.set_hostname(archinstall.arguments['hostname']) if archinstall.arguments['mirror-region'].get("mirrors", None) is not None: installation.set_mirrors( archinstall.arguments['mirror-region'] ) # Set the mirrors in the installation medium if archinstall.arguments['swap']: installation.setup_swap('zram') if archinstall.arguments[ "bootloader"] == "grub-install" and archinstall.has_uefi(): installation.add_additional_packages("grub") installation.add_bootloader(archinstall.arguments["bootloader"]) # If user selected to copy the current ISO network configuration # Perform a copy of the config network_config = archinstall.arguments.get('nic', None) if network_config: handler = NetworkConfigurationHandler(network_config) handler.config_installer(installation) if archinstall.arguments.get('audio', None) is not None: installation.log( f"This audio server will be used: {archinstall.arguments.get('audio', None)}", level=logging.INFO) if archinstall.arguments.get('audio', None) == 'pipewire': archinstall.Application(installation, 'pipewire').install() elif archinstall.arguments.get('audio', None) == 'pulseaudio': print('Installing pulseaudio ...') installation.add_additional_packages("pulseaudio") else: installation.log("No audio server will be installed.", level=logging.INFO) if archinstall.arguments.get('packages', None) and archinstall.arguments.get( 'packages', None)[0] != '': installation.add_additional_packages( archinstall.arguments.get('packages', None)) if archinstall.arguments.get('profile', None): installation.install_profile( archinstall.arguments.get('profile', None)) if archinstall.arguments.get('!users', {}): for user, user_info in archinstall.arguments.get('!users', {}).items(): installation.user_create(user, user_info["!password"], sudo=False) if archinstall.arguments.get('!superusers', {}): for superuser, user_info in archinstall.arguments.get( '!superusers', {}).items(): installation.user_create(superuser, user_info["!password"], sudo=True) if timezone := archinstall.arguments.get('timezone', None): installation.set_timezone(timezone) if archinstall.arguments.get('ntp', False): installation.activate_time_syncronization() if archinstall.accessibility_tools_in_use(): installation.enable_espeakup() if (root_pw := archinstall.arguments.get('!root-password', None)) and len(root_pw): installation.user_set_pw('root', root_pw) # This step must be after profile installs to allow profiles to install language pre-requisits. # After which, this step will set the language both for console and x11 if x11 was installed for instance. installation.set_keyboard_language( archinstall.arguments['keyboard-layout']) if archinstall.arguments['profile'] and archinstall.arguments[ 'profile'].has_post_install(): with archinstall.arguments['profile'].load_instructions( namespace= f"{archinstall.arguments['profile'].namespace}.py" ) as imported: if not imported._post_install(): archinstall.log( ' * Profile\'s post configuration requirements was not fulfilled.', fg='red') exit(1)