#!/usr/bin/env bash # Installerer Announcer på en Debian/Ubuntu-maskin (testet mot Linux Mint). # # git clone https://git.1x1.no/kent/announcer.git # cd announcer && ./install.sh # # Kjør som vanlig bruker (ikke sudo); skriptet spør om passord der det trengs. # Valgfritt: ANNOUNCER_PIN=1234 ./install.sh -> sida krever PIN # ANNOUNCER_PORT=8090 ./install.sh -> annen port # ANNOUNCER_TITLE="Utrop" ./install.sh # Resten av konfigurasjonen hører hjemme i config.toml, se config.example.toml. # Kan kjøres på nytt; da oppdateres avhengigheter og tjenesten startes om. set -euo pipefail if [[ $EUID -eq 0 ]]; then echo "Kjør som vanlig bruker, ikke root/sudo." >&2 exit 1 fi APP="announcer" OLD_APP="sg-announcer" # het dette før; enheten ryddes bort nedenfor REPO_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PORT="${ANNOUNCER_PORT:-8090}" PIN="${ANNOUNCER_PIN:-}" TITLE="${ANNOUNCER_TITLE:-}" UNIT_DIR="$HOME/.config/systemd/user" UNIT="$UNIT_DIR/$APP.service" step() { printf '\n\033[1m==> %s\033[0m\n' "$*"; } step "Systempakker (apt)" sudo apt-get update -qq sudo apt-get install -y -qq git curl ca-certificates ffmpeg pulseaudio-utils # pw-play finnes i pipewire-bin på Mint 22 / Ubuntu 24.04. På eldre (PulseAudio) # faller appen tilbake til paplay, så dette er ikke kritisk. sudo apt-get install -y -qq pipewire-bin 2>/dev/null || true step "uv (Python-pakkehåndterer)" if command -v uv >/dev/null 2>&1; then UV="$(command -v uv)" elif [[ -x "$HOME/.local/bin/uv" ]]; then UV="$HOME/.local/bin/uv" else curl -LsSf https://astral.sh/uv/install.sh | sh UV="$HOME/.local/bin/uv" fi echo "uv: $UV ($("$UV" --version))" step "Python 3.13 og avhengigheter" cd "$REPO_DIR" "$UV" sync mkdir -p cache chimes voices logs instance step "Laster ned Piper-stemmene (lokal reserve, ca. 600 MB, kun første gang)" "$UV" run python -c "import logging, announcer; logging.basicConfig(level=logging.INFO, format='%(message)s'); announcer.ensure_voices()" step "Rydder bort gammel tjeneste" # Tjenesten het sg-announcer før. Uten dette slåss to enheter om porten. if [[ -f "$UNIT_DIR/$OLD_APP.service" ]]; then systemctl --user disable --now "$OLD_APP" >/dev/null 2>&1 || true rm -f "$UNIT_DIR/$OLD_APP.service" echo "fjernet $OLD_APP.service" else echo "ingenting å rydde." fi step "systemd-brukertjeneste" mkdir -p "$UNIT_DIR" { cat < "$UNIT" chmod 600 "$UNIT" # PIN og nøkler står i klartekst her systemctl --user daemon-reload systemctl --user enable --now "$APP" systemctl --user restart "$APP" step "Brannmur" if ip link show wt0 >/dev/null 2>&1; then # NetBird er installert: slipp inn kun via VPN-grensesnittet, blokker alt annet. sudo ufw default deny incoming sudo ufw default allow outgoing sudo ufw allow in on wt0 to any port 22 proto tcp comment "ssh via netbird" sudo ufw allow in on wt0 to any port 22022 proto tcp comment "netbird ssh-server" sudo ufw allow in on wt0 to any port "$PORT" proto tcp comment "$APP via netbird" sudo ufw delete allow "$PORT/tcp" >/dev/null 2>&1 || true sudo ufw --force enable echo "ufw aktiv: port $PORT, 22 og 22022 er åpne kun på wt0 (NetBird)." echo "Vil du også nå sida fra lokalt LAN uten VPN:" echo " sudo ufw allow from to any port $PORT proto tcp" elif sudo ufw status 2>/dev/null | grep -q "Status: active"; then sudo ufw allow "$PORT/tcp" comment "$APP" else echo "ufw er ikke aktiv, ingen regel nødvendig." fi sleep 2 IP="$(hostname -I 2>/dev/null | awk '{print $1}')" step "Ferdig" systemctl --user --no-pager status "$APP" | head -5 || true cat <}:$PORT fra hva som helst på nettet. Uten config.toml er sida åpen for alle som når porten. Vil du ha innlogging: cp config.example.toml config.toml og les kommentarene der. Mot crew-panelet: docs/crew-integration.md Tips for en laptop på arrangementet: - Lyden spilles i din innloggede økt, så maskinen må være logget inn. Slå på automatisk innlogging (Innstillinger -> Påloggingsvindu). - Hindre at den sover med lokket igjen: sudo sed -i 's/^#\?HandleLidSwitch=.*/HandleLidSwitch=ignore/' /etc/systemd/logind.conf sudo systemctl restart systemd-logind - Logg: journalctl --user -u $APP -f MSG