0% found this document useful (0 votes)
6 views4 pages

Arch Linux Kiosk ISO Build Guide

The document outlines the requirements and critical fixes needed to build an archive-box-kiosk ISO on an Arch Linux host. It specifies the necessary tools, modifications to scripts, and package lists to ensure a non-interactive, reproducible build that boots into a locked kiosk environment. Additionally, it includes mandatory build and verification steps, output requirements, and failure handling rules for the build process.

Uploaded by

krimzonking782
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
6 views4 pages

Arch Linux Kiosk ISO Build Guide

The document outlines the requirements and critical fixes needed to build an archive-box-kiosk ISO on an Arch Linux host. It specifies the necessary tools, modifications to scripts, and package lists to ensure a non-interactive, reproducible build that boots into a locked kiosk environment. Additionally, it includes mandatory build and verification steps, output requirements, and failure handling rules for the build process.

Uploaded by

krimzonking782
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd

Final Prompt for AI Agent (Codex) — Archive Box

Kiosk ISO (End-to-End)


You are Codex with full privileges on an Arch Linux build host. Your job is to make the archive-box-
kiosk ISO build reproducibly, non-interactively, and boot into a locked kiosk that can run the PySide6
launcher + the OCR/search app offline.

This prompt consolidates ALL fixes discovered so far. Implement them cleanly, verify them, and stop
only when the ISO is produced and the boot checklist passes.

A. Build Host Requirements (assume Arch)


Ensure the build host has: - archiso , rsync , python , curl - qemu-full , edk2-ovmf (for
UEFI VM test)

B. Critical Fixes You MUST Apply

1) Stop sourcing releng [Link] (UEFI bootmodes parsing)

In iso/[Link] , do NOT source upstream releng/[Link] because it can break on


arrays like file_permissions (e.g., /etc/shadow arithmetic error) and fails in restricted shells.

Instead, parse bootmodes safely and extract the UEFI boot modes by reading the file as text (Python/
regex is fine). The script must detect [Link]-boot and continue.

2) Enforce root for mkarchiso (fail fast)

mkarchiso needs root. The build must fail immediately and clearly if not root: - Error message:
mkarchiso requires root. Run: sudo ISO_VERSION=[Link] iso/[Link] - No noisy
permission spam.

3) Make work directory unique per build + safe cleanup

Root-owned .work from prior builds must never block future runs.

Implement: - choose_work_root() in iso/[Link] : - Honor $WORK_ROOT if set. - Otherwise


default to iso/.work-<ISO_VERSION> and if exists, suffix with epoch. - prepare_dirs() : - Only
deletes old work trees if running as root. - If non-root and dir exists, roll to a new unique suffix.

Add iso/[Link] : - If root: remove iso/.work-* and iso/out . - If non-root: print Cleanup
requires root. Run: sudo iso/[Link] .

1
4) Fix ArchISO package list to current repo names + eliminate interactive providers

Edit iso/profile/packages.x86_64 :

• REMOVE (not needed for kiosk and/or missing):


• archinstall
• reflector
• ttf-amiri

• broadcom-wl (causes provider prompt)

• FIX wrong names:

• fonts-noto-cjk -> noto-fonts-cjk

• python-pyside6 -> pyside6

• ENSURE present:

• pyside6
• qt6-wayland
• qt6-virtualkeyboard
• noto-fonts

• noto-fonts-cjk

• PIN kernel to avoid provider prompt:

• Replace generic linux with linux66 (or another concrete linux6x that exists on the
mirror). Build must be non-interactive.

Update any validation logic in iso/[Link] so it checks for pyside6 (not python-pyside6).

5) Strict wheelhouse fix for Python 3.13: remove editdistance wheel dependency

Strict wheelhouse ( pip download --only-binary=:all: ) must succeed on the build host.

editdistance==0.8.1 has no cp313 wheel. Fix by:

• Remove editdistance==0.8.1 from [Link] .


• Add a vendored pure-Python replacement module at repo root: [Link]
implementing:
• eval(a: str, b: str) -> int
• distance(a: str, b: str) -> int alias

Use a two-row Levenshtein DP implementation.

Smoke test must pass: - python -c "import editdistance;


print([Link]('abc','yabd'))" -> prints 2 .

Do NOT disable strict mode. Do NOT set WHEELHOUSE_STRICT=0 unless explicitly instructed later.

2
C. Build & Verification Steps (MANDATORY)

1) Clean

Run:

sudo iso/[Link]

2) Build ISO (strict wheelhouse)

Run:

sudo ISO_VERSION=2024.12.26 iso/[Link]

Expected: - Detects: Using UEFI boot modes: [Link]-boot - Wheelhouse downloads


without fatal errors - mkarchiso installs packages without provider prompts - ISO artifact produced
under iso/out/

3) Verify checksum

cd iso/out
sha256sum -c SHA256SUMS

Must output OK .

4) UEFI Boot Test in QEMU

sudo pacman -S --needed qemu-full edk2-ovmf


ISO=$(ls -1 iso/out/archive-box-kiosk-*.iso | tail -n1)
qemu-system-x86_64 -m 4096 -smp 4 -enable-kvm
-bios /usr/share/edk2/x64/[Link]
-cdrom "$ISO"

Boot must satisfy: - UEFI-only boot works - greetd auto-login into kiosk - sway starts and shows
launcher full-screen - Settings opens foot with restricted maintenance TUI only - Maintenance option
1 creates /var/lib/archive-box/venv from wheelhouse - Maintenance option 5 runs selftest
successfully - Run Software launches /opt/archive-box/app/[Link] using the venv

D. Output Requirements (you must produce these)


1) A list of files changed. 2) git diff for: - iso/[Link] - iso/profile/packages.x86_64 -
iso/[Link] - [Link] - [Link] 3) The final 60 lines of a successful

3
build log. 4) Confirmation of checksum verification. 5) A short pass/fail report for each boot checklist
item.

E. Failure Handling Rules


If the build fails: - Do NOT guess. - Print ONLY the relevant error section and apply the smallest patch.

If the wheelhouse fails for another package: - Prefer removing dev-only deps from runtime
requirements. - Prefer vendoring tiny pure-python replacements. - Only compile sdists into wheels if
absolutely necessary.

Proceed now.

You might also like