Captain Bob, 2026-11-06: a terminal with QEMU amd64 for people to play with; "Mint Zuse for demo console" (#111); "Make the most recent of builds that's green the demo"; a Try-it XWiki page with the console embedded. demo/ -- see its README: mint-zuse.sh a Zuse of the demo's own, as a stick: blank pair, system=v3 genesis, a second boot to confirm, make zusestick. Never anyone's real Zuse build-iso.sh the amd64 ISO, packed as make qemu packs it make-snapshot.sh boot once to [zuse@Hera] ok>, save the machine start-session.sh one visitor: the saved machine resumed, ended on hang-up, close or time-out console.py joins the visitor's terminal only once the machine runs; keys typed while it loads are discarded qemu-args.sh the machine, shared by save and resume starshipos-demo.service, apache-demo.conf, xwiki-try-it.xwiki Every session is a copy: no network, read-only image, the Zuse stick's writes discarded, QEMU's seccomp sandbox, an unprivileged user, a fenced systemd unit, 30 minutes at most. Tested here, from the sources master accepted (run 153): the Zuse minted (logs/20261106-192626, -192739); the saved machine at POST 538/538 and [zuse@Hera] ok>; a session through ttyd's websocket ready in 0.2 s, 3 4 + . -> 7 ok, 7 SQUARE . -> 49 ok; QEMU gone at once on hang-up, close and time-out. Found and fixed on the way: a machine saved stopped resumes stopped; a prompt matched as a regex; QEMU left behind by a hang-up; keys lost while the machine loads. Not tested here: Apache, several sessions at once (#116). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2
23 lines
1.2 KiB
Bash
Executable File
23 lines
1.2 KiB
Bash
Executable File
#!/bin/bash
|
|
# build-iso.sh -- the demo's ISO: the amd64 kernel's loader on an El Torito ISO, packed as
|
|
# `make -f kernel/Makefile ARCH=amd64 qemu` packs it (kernel/Makefile, target qemu).
|
|
#
|
|
# demo/build-iso.sh <out.iso> [VAR=value ...]
|
|
#
|
|
# The VAR=value arguments go to the kernel build: EMERGENCY_CONSOLE_ENABLED=1 for a console with
|
|
# no identity drive -- one of the two answers to issue #111, not yet ruled. A nightly's
|
|
# StarshipOS.iso can be used in place of this, once the ruling says which image the demo serves.
|
|
set -euo pipefail
|
|
cd "$(dirname "$0")/.."
|
|
out=$(realpath -m "${1:?usage: demo/build-iso.sh <out.iso> [VAR=value ...]}"); shift
|
|
make --no-print-directory -f kernel/Makefile ARCH=amd64 clean
|
|
make --no-print-directory -f kernel/Makefile ARCH=amd64 all "$@"
|
|
tmp=$(mktemp -d); trap 'rm -rf "$tmp"' EXIT
|
|
dd if=/dev/zero of="$tmp/efi.img" bs=512 count=8192 2>/dev/null
|
|
mformat -i "$tmp/efi.img" ::
|
|
mmd -i "$tmp/efi.img" ::/EFI ::/EFI/BOOT
|
|
mcopy -i "$tmp/efi.img" build/amd64/kernel/starkernel_loader.efi ::/EFI/BOOT/BOOTX64.EFI
|
|
xorriso -as mkisofs -r -J -e efi.img -no-emul-boot -o "$out" "$tmp" 2>/dev/null
|
|
git checkout -q -- capsules/BLOCK_MAP.md v3/include/version.h 2>/dev/null || true # the build regenerates these
|
|
echo "demo: $out"
|