archinstall/examples/full_automated_installation.py

116 lines
3.4 KiB
Python

from pathlib import Path
from archinstall.default_profiles.minimal import MinimalProfile
from archinstall.lib.disk.device_handler import device_handler
from archinstall.lib.disk.filesystem import FilesystemHandler
from archinstall.lib.installer import Installer
from archinstall.lib.models.device_model import (
DeviceModification,
DiskEncryption,
DiskLayoutConfiguration,
DiskLayoutType,
EncryptionType,
FilesystemType,
ModificationStatus,
PartitionFlag,
PartitionModification,
PartitionType,
Size,
Unit,
)
from archinstall.lib.models.profile_model import ProfileConfiguration
from archinstall.lib.models.users import Password, User
from archinstall.lib.profile.profiles_handler import profile_handler
# we're creating a new ext4 filesystem installation
fs_type = FilesystemType("ext4")
device_path = Path("/dev/sda")
# get the physical disk device
device = device_handler.get_device(device_path)
if not device:
raise ValueError("No device found for given path")
# create a new modification for the specific device
device_modification = DeviceModification(device, wipe=True)
# create a new boot partition
boot_partition = PartitionModification(
status=ModificationStatus.Create,
type=PartitionType.Primary,
start=Size(1, Unit.MiB, device.device_info.sector_size),
length=Size(512, Unit.MiB, device.device_info.sector_size),
mountpoint=Path("/boot"),
fs_type=FilesystemType.Fat32,
flags=[PartitionFlag.BOOT],
)
device_modification.add_partition(boot_partition)
# create a root partition
root_partition = PartitionModification(
status=ModificationStatus.Create,
type=PartitionType.Primary,
start=Size(513, Unit.MiB, device.device_info.sector_size),
length=Size(20, Unit.GiB, device.device_info.sector_size),
mountpoint=None,
fs_type=fs_type,
mount_options=[],
)
device_modification.add_partition(root_partition)
start_home = root_partition.length
length_home = device.device_info.total_size - start_home
# create a new home partition
home_partition = PartitionModification(
status=ModificationStatus.Create,
type=PartitionType.Primary,
start=start_home,
length=length_home,
mountpoint=Path("/home"),
fs_type=fs_type,
mount_options=[],
)
device_modification.add_partition(home_partition)
disk_config = DiskLayoutConfiguration(
config_type=DiskLayoutType.Default,
device_modifications=[device_modification],
)
# disk encryption configuration (Optional)
disk_encryption = DiskEncryption(
encryption_password=Password(plaintext="enc_password"),
encryption_type=EncryptionType.Luks,
partitions=[home_partition],
hsm_device=None,
)
# initiate file handler with the disk config and the optional disk encryption config
fs_handler = FilesystemHandler(disk_config, disk_encryption)
# perform all file operations
# WARNING: this will potentially format the filesystem and delete all data
fs_handler.perform_filesystem_operations(show_countdown=False)
mountpoint = Path("/tmp")
with Installer(
mountpoint,
disk_config,
disk_encryption=disk_encryption,
kernels=["linux"],
) as installation:
installation.mount_ordered_layout()
installation.minimal_installation(hostname="minimal-arch")
installation.add_additional_packages(["nano", "wget", "git"])
# Optionally, install a profile of choice.
# In this case, we install a minimal profile that is empty
profile_config = ProfileConfiguration(MinimalProfile())
profile_handler.install_profile_config(installation, profile_config)
user = User("archinstall", Password(plaintext="password"), True)
installation.create_users(user)