index : archinstall32 | |
Archlinux32 installer | gitolite user |
summaryrefslogtreecommitdiff |
author | Daniel Girtler <blackrabbit256@gmail.com> | 2023-04-19 20:55:42 +1000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-04-19 12:55:42 +0200 |
commit | 00b0ae7ba439a5a420095175b3bedd52c569db51 (patch) | |
tree | f02d081e361d5e65603f74dea3873dcc6606cf7c /examples/minimal_installation.py | |
parent | 5253e57e9f26cf3e59cb2460544af13f56e485bb (diff) |
-rw-r--r-- | examples/minimal_installation.py | 85 |
diff --git a/examples/minimal_installation.py b/examples/minimal_installation.py new file mode 100644 index 00000000..8bd6fd55 --- /dev/null +++ b/examples/minimal_installation.py @@ -0,0 +1,85 @@ +from pathlib import Path +from typing import TYPE_CHECKING, Any, List + +import archinstall +from archinstall.lib import disk +from archinstall import Installer, ProfileConfiguration, profile_handler +from archinstall.default_profiles.minimal import MinimalProfile +from archinstall.lib.models import Bootloader, User +from archinstall.lib.user_interaction.disk_conf import select_devices, suggest_single_disk_layout + +if TYPE_CHECKING: + _: Any + + +def perform_installation(mountpoint: Path): + disk_config: disk.DiskLayoutConfiguration = archinstall.arguments['disk_config'] + disk_encryption: disk.DiskEncryption = archinstall.arguments.get('disk_encryption', None) + + with Installer( + mountpoint, + disk_config, + disk_encryption=disk_encryption, + kernels=archinstall.arguments.get('kernels', ['linux']) + ) 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(Bootloader.Systemd) + + # Optionally enable networking: + if archinstall.arguments.get('network', None): + installation.copy_iso_network_config(enable_services=True) + + installation.add_additional_packages(['nano', 'wget', 'git']) + + profile_config = ProfileConfiguration(MinimalProfile()) + profile_handler.install_profile_config(installation, profile_config) + + user = User('devel', 'devel', False) + installation.create_users(user) + + +def prompt_disk_layout(): + fs_type = None + if filesystem := archinstall.arguments.get('filesystem', None): + fs_type = disk.FilesystemType(filesystem) + + devices = select_devices() + modifications = suggest_single_disk_layout(devices[0], filesystem_type=fs_type) + + archinstall.arguments['disk_config'] = disk.DiskLayoutConfiguration( + config_type=disk.DiskLayoutType.Default, + device_modifications=[modifications] + ) + + +def parse_disk_encryption(): + if enc_password := archinstall.arguments.get('!encryption-password', None): + modification: List[disk.DeviceModification] = archinstall.arguments['disk_config'] + partitions: List[disk.PartitionModification] = [] + + # encrypt all partitions except the /boot + for mod in modification: + partitions += list(filter(lambda x: x.mountpoint != Path('/boot'), mod.partitions)) + + archinstall.arguments['disk_encryption'] = disk.DiskEncryption( + encryption_type=disk.EncryptionType.Partition, + encryption_password=enc_password, + partitions=partitions + ) + + +prompt_disk_layout() +parse_disk_encryption() + +fs_handler = disk.FilesystemHandler( + archinstall.arguments['disk_config'], + archinstall.arguments.get('disk_encryption', None) +) + +fs_handler.perform_filesystem_operations() + +mount_point = Path('/mnt') +perform_installation(mount_point) |