Two user-visible polish passes on top of the walking-skeleton install: - Console welcome: live ISO's getty no longer shows the bare Arch prompt. `/etc/hostname` is now `proksi` so avahi advertises `proksi.local`; a systemd oneshot (`furtka-issue.service`, runs after network-online.target) regenerates `/etc/issue` via `/usr/local/bin/furtka-update-issue` to show both `http://proksi.local:5000` (preferred, via mDNS — avahi and nss-mdns are already in `packages.extra`) and the raw IP as a fallback for networks where mDNS is flaky. `agetty --reload` nudges the already- running login prompt to redraw. - /install/log now polls a JSON endpoint (`/install/log.json`) every 3 s instead of meta-refresh, so expanding the collapsed log `<details>` doesn't get eaten by the refresh. Noscript fallback keeps the meta-refresh for JS-off users. When the install finishes, the Done state shows a Reboot-now button that POSTs to `/install/reboot` (guarded server-side to only reboot once status is "done", so a panicked click mid-pacstrap can't brick the box). A confirm() reminds the user to pull the USB / eject the ISO first. End-to-end tested on a Proxmox VM 2026-04-14: boot → wizard → archinstall → Done state → Reboot now → VM came back up → login as created user → `docker ps` worked. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| overlay | ||
| build.sh | ||
| README.md | ||
Live ISO build
Builds a bootable Arch-based live ISO that auto-starts the Flask webinstaller from ../webinstaller/ on boot. User plugs in a USB, boots, and the installer wizard comes up on http://<vm-ip>:5000.
Directly runnable; CI integration comes later once the build is stable.
Run a build
Needs a host with Docker. Disk space required: ~15 GB scratch during the build, ~1.5 GB for the final ISO.
./iso/build.sh
Output ISO ends up in iso/out/furtka-<date>-x86_64.iso. Around 3–10 min on a 4-core VM. First run is slower because it pulls archlinux:latest and all packages from upstream.
The script re-execs itself inside a privileged archlinux:latest container. That's so mkarchiso has root + loop-mount access without polluting the host — Ubuntu hosts don't ship archiso natively anyway.
What gets baked in
The build starts from Arch's stock releng profile (the same one used to build the official Arch ISO), then overlays our customizations from overlay/:
| Overlay file | Effect |
|---|---|
overlay/packages.extra |
Appended to the package list. Adds python, python-flask, avahi, nss-mdns |
overlay/profiledef.sh |
Appended to profiledef.sh. Renames the ISO to furtka-* with a dated version |
overlay/airootfs/opt/furtka/ |
Directory where webinstaller/ is copied at build time |
overlay/airootfs/etc/systemd/system/ |
Contains furtka-webinstaller.service + a symlink into multi-user.target.wants/ so it auto-starts on boot |
The systemd service runs flask --app app run --host 0.0.0.0 --port 5000 under /opt/furtka. The 0.0.0.0 binding is important — the Flask default is localhost-only, which wouldn't be reachable from another machine on the LAN.
mDNS (proksi.local) via avahi is installed but not yet wired. First milestone is just "boot → browser → wizard at raw IP". Naming comes next.
Test flow
- Build:
./iso/build.sh - Copy the ISO to your Proxmox host's ISO storage (typically
/var/lib/vz/template/iso/). Browser uploads of 1.5 GB truncate silently — preferscpover the Proxmox WebUI. - Create a VM with:
- 2 vCPU, 4 GB RAM, 20 GB disk (empty)
- BIOS: OVMF (UEFI), add EFI Disk on
local-lvm. SeaBIOS fails to loadldlinux.c32from our ISO; only the UEFI path works reliably. - Secure Boot disabled. Our GRUB isn't signed, so Secure Boot rejects it with
Access Denied. Either boot into OVMF setup (Esc during boot) → Device Manager → Secure Boot Configuration → Attempt Secure Boot [ ] → F10 → reboot. Or remove the EFI Disk and re-add it with "Pre-Enroll keys" unchecked. - CD-ROM attached with the Furtka ISO
- Boot order: CD before disk
- Network: same bridge as your LAN, DHCP
- Start the VM. Wait ~30 s for boot.
- Find its IP in Proxmox's VM summary (or your router's DHCP table)
- Open
http://<vm-ip>:5000— the existing 3-screen wizard should be there
Known rough edges
- Disk space: the first time you build on a fresh host, the squashfs/xorriso steps need ~15 GB free. If the host's LVM-root is smaller,
xorrisosilently dies at the very end with "Image size exceeds free space on media". - No HTTPS yet. The Furtka plan is "local CA + green padlock on
https://proksi.local" — that's a later milestone. For now, plain HTTP. - Drive list includes
/dev/loop0and/dev/sr0./dev/loop0is the live ISO's own squashfs mounted in RAM;/dev/sr0is the CD-ROM itself. Both appear as install targets, which is wrong. Filter lives inwebinstaller/drives.pyand hasn't been added yet.