#!/usr/bin/env bash set -euo pipefail [[ "${EUID}" -eq 0 && "$#" -eq 0 ]] || { echo "usage: start.sh (as root)" >&2 exit 2 } uid="$(id -u pufferpanel)" runuser -u pufferpanel -- env \ HOME=/home/pufferpanel USER=pufferpanel LOGNAME=pufferpanel \ XDG_RUNTIME_DIR="/run/user/${uid}" DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/${uid}/bus" \ bash -s <<'START' set -euo pipefail cd "${HOME}" if [[ ! -e /data/pufferpanel/config/config.json ]]; then install -m 0600 "${HOME}/.config/pufferpanel-seed.json" /data/pufferpanel/config/config.json fi for required in \ "${HOME}/.config/containers/systemd/pufferpanel.container" \ "${HOME}/.config/containers/systemd/pufferpanel-ingress.container" \ "${HOME}/.config/containers/systemd/pufferpanel.network" \ /data/pufferpanel/gateway.Caddyfile; do [[ -f "${required}" ]] || { echo "missing pufferpanel deployment file: ${required}" >&2 exit 1 } done # Check the actual host generator before replacing a live service. QUADLET_UNIT_DIRS="${HOME}/.config/containers/systemd" \ /usr/lib/systemd/system-generators/podman-system-generator --user --dryrun systemctl --user daemon-reload systemctl --user enable --now podman.socket podman-auto-update.timer systemctl --user restart pufferpanel.service systemctl --user restart pufferpanel-ingress.service systemctl --user is-active pufferpanel.service pufferpanel-ingress.service podman.socket podman-auto-update.timer curl --fail --silent --show-error --retry 15 --retry-connrefused --retry-delay 2 http://127.0.0.1:8082/ >/dev/null for _ in $(seq 1 50); do [[ -S /data/pufferpanel-ingress/http.sock ]] && break sleep 0.2 done [[ -S /data/pufferpanel-ingress/http.sock ]] || { echo "pufferpanel ingress socket did not become ready" >&2 exit 1 } curl --fail --silent --show-error --retry 15 --retry-connrefused --retry-delay 2 \ --unix-socket /data/pufferpanel-ingress/http.sock -H 'Host: games.bugabinga.net' http://localhost/ >/dev/null podman inspect pufferpanel pufferpanel-ingress --format '{{.ImageName}} {{if .State.Health}}{{.State.Health.Status}}{{else}}{{.State.Status}}{{end}}' START