announcer/install.sh
Kent ad1715838e install.sh for ny maskin + paplay-reserve når PipeWire mangler
Skriptet installerer apt-pakker, uv, Python 3.13, Piper-stemmene og
systemd-brukerenheten, og åpner porten i ufw hvis den er aktiv. Avspilling
velger pw-play når PipeWire kjører, ellers paplay (Linux Mint 21).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-06 18:55:10 +02:00

105 lines
3.2 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 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