示例#1
0
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)")
示例#2
0
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)
示例#3
0
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)
示例#4
0
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')
示例#5
0
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()):
示例#6
0
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)
示例#7
0
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)
示例#8
0
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)
示例#9
0
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')
示例#11
0
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)
示例#12
0
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)
示例#13
0
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)
示例#14
0
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)