Send patches - preferably formatted by git format-patch - to patches at archlinux32 dot org.
summaryrefslogtreecommitdiff
path: root/examples/minimal_installation.py
diff options
context:
space:
mode:
Diffstat (limited to 'examples/minimal_installation.py')
-rw-r--r--examples/minimal_installation.py86
1 files changed, 86 insertions, 0 deletions
diff --git a/examples/minimal_installation.py b/examples/minimal_installation.py
new file mode 100644
index 00000000..c91a5d46
--- /dev/null
+++ b/examples/minimal_installation.py
@@ -0,0 +1,86 @@
+from pathlib import Path
+from typing import TYPE_CHECKING, Any, List
+
+import archinstall
+from archinstall import disk
+from archinstall import Installer
+from archinstall import profile
+from archinstall import models
+from archinstall import interactions
+from archinstall.default_profiles.minimal import MinimalProfile
+
+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(models.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 = profile.ProfileConfiguration(MinimalProfile())
+ profile.profile_handler.install_profile_config(installation, profile_config)
+
+ user = models.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 = interactions.select_devices()
+ modifications = interactions.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.Luks,
+ 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)