archinstall/examples/only_hd_installation.py

92 lines
2.7 KiB
Python

from pathlib import Path
from archinstall.lib.args import ArchConfig, arch_config_handler
from archinstall.lib.configuration import ConfigurationOutput
from archinstall.lib.disk.filesystem import FilesystemHandler
from archinstall.lib.disk.utils import disk_layouts
from archinstall.lib.global_menu import GlobalMenu
from archinstall.lib.installer import Installer
from archinstall.lib.models.device_model import DiskLayoutConfiguration
from archinstall.lib.output import debug, error
from archinstall.tui import Tui
def ask_user_questions() -> None:
with Tui():
global_menu = GlobalMenu(arch_config_handler.config)
global_menu.disable_all()
global_menu.set_enabled('archinstall_language', True)
global_menu.set_enabled('disk_config', True)
global_menu.set_enabled('disk_encryption', True)
global_menu.set_enabled('swap', True)
global_menu.set_enabled('__config__', True)
global_menu.run()
def perform_installation(mountpoint: Path) -> None:
"""
Performs the installation steps on a block device.
Only requirement is that the block devices are
formatted and setup prior to entering this function.
"""
config: ArchConfig = arch_config_handler.config
if not config.disk_config:
error("No disk configuration provided")
return
disk_config: DiskLayoutConfiguration = config.disk_config
disk_encryption = config.disk_encryption
with Installer(
mountpoint,
disk_config,
disk_encryption=disk_encryption,
kernels=config.kernels
) 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 disk_config:
installation.mount_ordered_layout()
# to generate a fstab directory holder. Avoids an error on exit and at the same time checks the procedure
target = 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)
debug(f"Disk states after installing:\n{disk_layouts()}")
def _only_hd() -> None:
if not arch_config_handler.args.silent:
ask_user_questions()
config = ConfigurationOutput(arch_config_handler.config)
config.write_debug()
config.save()
if arch_config_handler.args.dry_run:
exit(0)
if not arch_config_handler.args.silent:
with Tui():
if not config.confirm_config():
debug('Installation aborted')
_only_hd()
if arch_config_handler.config.disk_config:
fs_handler = FilesystemHandler(
arch_config_handler.config.disk_config,
arch_config_handler.config.disk_encryption
)
fs_handler.perform_filesystem_operations()
perform_installation(arch_config_handler.args.mountpoint)
_only_hd()