announcer/install.sh
Kent 3f37b0a7fb install.sh: åpne også 22022 (NetBird SSH-server) på wt0
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-06 19:22:19 +02:00

117 lines
4 KiB
Bash
Executable file
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env bash
# Installerer SG Announcer på en Debian/Ubuntu-maskin (testet mot Linux Mint).
#
# git clone https://git.1x1.no/kent/sg-announcer.git
# cd sg-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
# 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
REPO_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PORT="${ANNOUNCER_PORT:-8090}"
PIN="${ANNOUNCER_PIN:-}"
UNIT_DIR="$HOME/.config/systemd/user"
UNIT="$UNIT_DIR/sg-announcer.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
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 "systemd-brukertjeneste"
mkdir -p "$UNIT_DIR"
{
cat <<UNIT
[Unit]
Description=SG Announcer – TTS-utrop på høyttaleranlegget
After=pipewire.service pulseaudio.service
[Service]
WorkingDirectory=$REPO_DIR
ExecStart=$UV run announcer.py
Environment=ANNOUNCER_PORT=$PORT
UNIT
if [[ -n "$PIN" ]]; then
echo "Environment=ANNOUNCER_PIN=$PIN"
else
echo "# Environment=ANNOUNCER_PIN=1234"
fi
cat <<'UNIT'
# Environment=ANNOUNCER_SINK=alsa_output.xxx
Restart=on-failure
RestartSec=3
[Install]
WantedBy=default.target
UNIT
} > "$UNIT"
systemctl --user daemon-reload
systemctl --user enable --now sg-announcer
systemctl --user restart sg-announcer
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 "sg-announcer 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 <lan-subnett> to any port $PORT proto tcp"
elif sudo ufw status 2>/dev/null | grep -q "Status: active"; then
sudo ufw allow "$PORT/tcp" comment "sg-announcer"
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 sg-announcer | head -5 || true
cat <<MSG
Åpne http://${IP:-<denne-maskinens-ip>}:$PORT fra hva som helst på nettet.
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 sg-announcer -f
MSG