Files
Bose-SoundTouch/scripts/raspberry-pi/README.md
T
Tobias GesellchenandClaude Sonnet 4.6 adcdc26d8d feat(web): add RPi installer for soundtouch-web + GET /health endpoint
- Add scripts/raspberry-pi/install-web.sh: mirrors install.sh but for
  the stateless soundtouch-web binary (no privileged ports, no data dir,
  no HTTPS). Default port 8080; override via HTTP_PORT at install time.
- Add GET /health to soundtouch-web (handler + mount); returns
  {"status":"ok","version":"…"} — used by the installer's health check
  and by monitoring.
- Update scripts/raspberry-pi/README.md to document both installers side
  by side (installation, config, service management, updates, removal).
- Bump default VERSION to v0.97.0 in all three installer scripts
  (install.sh, install-web.sh, on-device-install/install.sh).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-28 22:59:35 +02:00

4.7 KiB

Raspberry Pi installers

Two installer scripts are available, one for each binary:

Script Binary Role Default port
install.sh soundtouch-service Cloud-replacement relay — must run 24/7 80 / 443
install-web.sh soundtouch-web Browser control panel — run on demand 8080

Both scripts auto-detect CPU architecture (armv7 / arm64 / amd64), create a systemd unit, and are safe to re-run for updates.


soundtouch-service

Installation

curl -fsSL -o install.sh \
  https://raw.githubusercontent.com/gesellix/Bose-SoundTouch/main/scripts/raspberry-pi/install.sh
sudo bash install.sh

Override defaults at install time:

sudo \
  VERSION=v0.97.0 \
  HOSTNAME_FQDN=soundtouch.local \
  HTTP_PORT=80 \
  HTTPS_PORT=443 \
  bash install.sh

Configuration

/etc/soundtouch-service/soundtouch-service.env

Example:

PORT=80
HTTPS_PORT=443
DATA_DIR=/var/lib/soundtouch-service

LOG_PROXY_BODY=false
REDACT_PROXY_LOGS=true
RECORD_INTERACTIONS=true
DISCOVERY_INTERVAL=5m

SERVER_URL=http://soundtouch.local
HTTPS_SERVER_URL=https://soundtouch.local

After editing the env file:

sudo systemctl restart soundtouch-service

Service management

systemctl status soundtouch-service
sudo systemctl enable soundtouch-service   # start on boot
sudo systemctl disable soundtouch-service
sudo systemctl stop soundtouch-service
sudo systemctl start soundtouch-service
sudo systemctl restart soundtouch-service

Logs

journalctl -u soundtouch-service -e --no-pager   # recent
journalctl -u soundtouch-service -f               # follow
journalctl -u soundtouch-service -b               # this boot

Updates

sudo bash install.sh vX.Y.Z

The script self-updates, downloads the new binary, backs up the old one to .old, and restarts the service. Your env file and data are preserved.

Removal

sudo systemctl disable --now soundtouch-service
sudo rm /etc/systemd/system/soundtouch-service.service
sudo rm -rf /etc/soundtouch-service
sudo rm -rf /var/lib/soundtouch-service
sudo rm /usr/local/bin/soundtouch-service
sudo systemctl daemon-reload

soundtouch-web

Installation

curl -fsSL -o install-web.sh \
  https://raw.githubusercontent.com/gesellix/Bose-SoundTouch/main/scripts/raspberry-pi/install-web.sh
sudo bash install-web.sh

Override defaults at install time:

sudo \
  VERSION=v0.97.0 \
  HTTP_PORT=8081 \
  bash install-web.sh

soundtouch-web is stateless — it holds no persistent data and can be stopped or restarted at any time without data loss.

Configuration

/etc/soundtouch-web/soundtouch-web.env

Example:

PORT=8080
BIND_ADDR=
DISCOVERY_INTERFACE=
SOUNDTOUCH_DEVICES=

SOUNDTOUCH_DEVICES accepts a comma-separated list of IP addresses for manual device registration (useful when mDNS auto-discovery is unreliable on your network).

After editing the env file:

sudo systemctl restart soundtouch-web

Port conflicts

Port 8080 is a common default for other services. To use a different port, either pass HTTP_PORT=<port> to the installer, or edit the env file after installation:

sudo ss -tulpn | grep :8080   # check what's using the port

Service management

systemctl status soundtouch-web
sudo systemctl enable soundtouch-web    # start on boot
sudo systemctl disable soundtouch-web
sudo systemctl stop soundtouch-web
sudo systemctl start soundtouch-web
sudo systemctl restart soundtouch-web

Logs

journalctl -u soundtouch-web -e --no-pager
journalctl -u soundtouch-web -f

Updates

sudo bash install-web.sh vX.Y.Z

Removal

sudo systemctl disable --now soundtouch-web
sudo rm /etc/systemd/system/soundtouch-web.service
sudo rm -rf /etc/soundtouch-web
sudo rm /usr/local/bin/soundtouch-web
sudo systemctl daemon-reload

Architecture auto-detection

Both installers detect the CPU and pick the matching release asset automatically:

uname -m asset suffix
aarch64 linux-arm64
armv7l / armv6l linux-armv7
x86_64 linux-amd64

Override if needed:

sudo ARCH_ASSET=linux-arm64 bash install.sh
sudo ARCH_ASSET=linux-arm64 bash install-web.sh

Security

Both services run as the soundtouch system user (no login shell, no home directory ownership required for soundtouch-web). soundtouch-service additionally uses AmbientCapabilities=CAP_NET_BIND_SERVICE to bind ports 80/443 without root.