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>
This commit is contained in:
Kent 2026-10-06 18:55:10 +02:00
parent 756a234b13
commit ad1715838e
3 changed files with 128 additions and 4 deletions

105
install.sh Executable file
View file

@ -0,0 +1,105 @@
#!/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