Dotfiles/setup/archiso/overlay/airootfs/root/.automated_script.sh

49 lines
2.4 KiB
Bash

#!/usr/bin/env bash
# =============================================================================
# .automated_script.sh — Entry point triggered by the archiso live environment
#
# PURPOSE:
# This script is called by the archiso systemd getty service (or directly
# from .zlogin) immediately after the root user logs in on the live ISO.
# It acts as the single decision point that determines whether to run the
# automated unattended installer or the guided interactive installer.
#
# HOW IT WORKS:
# archiso's default releng profile ships a .automated_script.sh that starts
# a graphical session or similar. We replace it with this simpler dispatcher.
#
# The presence or absence of /answerfile.json is the determining signal:
# - EXISTS → machine has been configured for unattended deployment
# (answerfile was embedded by build.sh --preconf, or placed
# on the live system via another mechanism such as a USB drive).
# → launch.sh is called in "auto" mode and /answerfile.json is passed as
# the configuration source for arch-autoinstall.sh.
#
# - MISSING → this is a standard interactive boot (no pre-configuration).
# → launch.sh is called in "guided" mode which starts the interactive
# guided installer after prompting for keyboard layout and action.
#
# WHY exec:
# Using exec replaces this process with launch.sh rather than spawning a
# child. This means the PID stays the same and signals propagate correctly.
# If launch.sh exits, the shell exits too, which is the correct behaviour
# for an installer that terminates after completing or being cancelled.
# =============================================================================
set -euo pipefail
ANSWERFILE="/answerfile.json"
# Check whether an answerfile was embedded in the ISO (or placed on the live
# system). The answerfile contains all installation parameters as JSON, allowing
# completely unattended installation with zero user interaction.
if [[ -f "$ANSWERFILE" ]]; then
# Automated mode: pass "auto" as the first arg and the answerfile path as
# the second. launch.sh will forward these to arch-autoinstall.sh.
exec /root/launch.sh auto "$ANSWERFILE"
else
# Guided mode: start the interactive installer. The user will be prompted
# for keyboard layout and installation action before anything happens.
exec /root/launch.sh guided
fi