Files
2026-07-05 21:22:05 +02:00

49 lines
1.9 KiB
Bash
Executable File

#!/usr/bin/env bash
# REFERENCE / OPTIONAL — the normal flow uses the official Arch ISO + `git clone`
# (see README). Kept in case a self-contained custom ISO is ever wanted.
#
# Build the thin custom Arch ISO by extending the official `releng` profile with:
# - a few explicit installer packages (extra-packages.x86_64)
# - this repo baked into /root/arch-system-hyprland
# - a login MOTD with install instructions (airootfs/etc/motd)
#
# Run on a machine with the `archiso` package installed (needs root for mkarchiso):
# sudo ./run.sh [output_dir]
set -euo pipefail
cd "$(dirname "$0")"
REPO_ROOT="$(cd .. && pwd)"
OUTDIR="${1:-$REPO_ROOT/out}"
RELENG=/usr/share/archiso/configs/releng
command -v mkarchiso >/dev/null || { echo "install archiso first: pacman -S archiso"; exit 1; }
[ -d "$RELENG" ] || { echo "releng profile missing at $RELENG"; exit 1; }
WORK="$(mktemp -d)"; PROFILE="$WORK/profile"
trap 'rm -rf "$WORK"' EXIT
cp -r "$RELENG" "$PROFILE"
# extra installer packages
cat extra-packages.x86_64 >> "$PROFILE/packages.x86_64"
# our airootfs overlay (motd, etc.)
cp -aT airootfs "$PROFILE/airootfs"
# bake the repo into the live root (without git history / build output)
dest="$PROFILE/airootfs/root/arch-system-hyprland"
mkdir -p "$dest"
cp -a "$REPO_ROOT/." "$dest/"
rm -rf "$dest/.git" "$dest/out"
# mkarchiso copies airootfs with --no-preserve=mode, so exec bits are dropped and
# must be declared in profiledef's file_permissions array (the same way releng's
# own scripts get +x). We only need the bootstrap executable here; run.sh then
# restores +x across the rest of the repo at runtime, which propagates to the
# installed system. file_permissions+=(...) appends to the array defined in releng.
printf '\nfile_permissions+=(["/root/arch-system-hyprland/01-install/run.sh"]="0:0:755")\n' \
>> "$PROFILE/profiledef.sh"
mkdir -p "$OUTDIR"
mkarchiso -v -w "$WORK/work" -o "$OUTDIR" "$PROFILE"
echo "ISO written to $OUTDIR"