repositories / bugabinga.net
bugabinga.net
personal infrastructure for bugabinga!
owned by admin
services/pufferpanel/deploy/start.sh
Raw#!/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