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
34 lines
1.3 KiB
Desktop File
34 lines
1.3 KiB
Desktop File
# starshipos-demo.service -- the public demo's web terminal (issue #114): ttyd on localhost, one
|
|
# throwaway StarshipOS machine per browser connection (start-session.sh). Apache in front
|
|
# (apache-demo.conf) does TLS and the websocket.
|
|
#
|
|
# Install: the repository's demo/ at /opt/starshipos-demo/demo, the saved machine (make-snapshot.sh)
|
|
# in /var/lib/starshipos-demo, a user starshipos-demo; then systemctl enable --now starshipos-demo.
|
|
[Unit]
|
|
Description=StarshipOS public demo terminal (ttyd)
|
|
After=network.target
|
|
|
|
[Service]
|
|
User=starshipos-demo
|
|
Group=starshipos-demo
|
|
Environment=DEMO_STATE=/var/lib/starshipos-demo
|
|
Environment=DEMO_SESSION_LIMIT=1800
|
|
# -m: sessions at once -- each a QEMU of about 1 GiB and most of a core (issue #116 measures it)
|
|
ExecStart=/usr/bin/ttyd --port 7681 --interface lo --writable --max-clients 3 \
|
|
--client-option titleFixed=StarshipOS --client-option disableLeaveAlert=true \
|
|
/opt/starshipos-demo/demo/start-session.sh
|
|
Restart=on-failure
|
|
# Each session is already a sandboxed QEMU with no network; this fences ttyd and its children too.
|
|
NoNewPrivileges=yes
|
|
ProtectSystem=strict
|
|
ProtectHome=yes
|
|
PrivateTmp=yes
|
|
PrivateDevices=yes
|
|
ReadOnlyPaths=/var/lib/starshipos-demo
|
|
MemoryMax=4G
|
|
CPUQuota=300%
|
|
TasksMax=200
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target
|