Files
Frametop--frametop/scripts/container-up.sh
T
DeeJanuzandClaude Opus 5.5 6dd9fb1ad8 One launch switch: scripts/in-box runs a program in the container it was built for
Every place an installed Frametop started a program with `distrobox enter dev --` now goes
through scripts/in-box: the pointer and power units, ft-gazed (ft-gaze, ft-eyes), the gaze
check's panel, the desktop's ft-screens, the remote desktop's krdp and VNC, and the three
settings apps. in-box starts the container in a scope of its own (container-up.sh, which now
takes the container's name) and becomes `distrobox enter BOX --`, so callers behave as before.

BOX is "dev" for a source install. A release names its own container in .frametop-release,
so the same tree runs from an image without editing nine call sites. FRAMETOP_BOX overrides
both. Development tools (frame.sh, the headless test, the gaze probe and lab) and hand
tracking, which install.sh doesn't install, keep using the dev container.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 20:54:13 -06:00

29 lines
1.6 KiB
Bash
Executable File

#!/bin/bash
# Runs on the Frame host. Starts the dev container, if it isn't running, in a systemd scope
# of its own. Whoever starts a podman container owns its monitor (conmon): started from one
# of our services (distrobox enter starts it on demand), the container, and everything in it
# like the desktop's compositor, would be killed when that service stops. Call this before
# `distrobox enter` (scripts/in-box does).
# Usage: scripts/container-up.sh [BOX] (default: FRAME_BOX, else "dev")
box=${1:-${FRAME_BOX:-dev}}
export XDG_RUNTIME_DIR=${XDG_RUNTIME_DIR:-/run/user/$(id -u)}
running() { [ "$(podman container inspect -f '{{.State.Running}}' "$box" 2>/dev/null)" = true ]; }
running && exit 0
podman container exists "$box" 2>/dev/null || exit 0 # not created yet: setup/dev-container.sh does that
since=$(date -u +%FT%T)
systemd-run --user --scope --quiet --collect --description="$box container (started for Frametop)" \
podman start "$box" >/dev/null || exit
# Every start runs distrobox-init in the container, and `distrobox enter` only waits for it
# when it starts the container itself. The first start installs what distrobox needs and sets
# up passwordless sudo, which takes a minute or more; until then sudo in the container asks
# for a password (issue #9). Later starts take a few seconds.
for i in $(seq 600); do
podman logs --since "$since" "$box" 2>&1 | grep -q '^container_setup_done' && exit 0
running || break
[ "$i" = 10 ] && echo "setting up the $box container (the first start takes a few minutes)" >&2
sleep 1
done
echo "the $box container didn't finish starting; see: podman logs $box" >&2
exit 1