#!/usr/bin/env bash # ============================================================================= # Local Radio Station — Initial Setup Script # Run as root on Debian 13 # ============================================================================= set -euo pipefail INSTALL_DIR="/opt/localradio" RADIO_USER="localradio" RADIO_GROUP="localradio" echo "=== Local Radio Station Setup ===" # --- Install system packages -------------------------------------------------- echo "[1/7] Installing system packages..." apt-get update apt-get install -y \ icecast2 \ liquidsoap \ python3 \ python3-venv \ python3-pip \ ffmpeg \ sqlite3 # --- Create system user ------------------------------------------------------ echo "[2/7] Creating system user..." if ! id "$RADIO_USER" &>/dev/null; then useradd --system --home-dir "$INSTALL_DIR" --shell /usr/sbin/nologin "$RADIO_USER" echo " Created user: $RADIO_USER" else echo " User $RADIO_USER already exists" fi # --- Create directory structure ----------------------------------------------- echo "[3/7] Creating directory structure..." mkdir -p "$INSTALL_DIR"/{config,scripts,state/queue,media/music/{morning,day,night,weekend},media/podcasts,media/fallback,logs} # --- Copy project files ------------------------------------------------------- echo "[4/7] Copying project files..." SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" cp "$SCRIPT_DIR/config/station.liq" "$INSTALL_DIR/config/" cp "$SCRIPT_DIR/config/icecast.xml" "$INSTALL_DIR/config/" cp "$SCRIPT_DIR/config/station.yaml" "$INSTALL_DIR/config/" cp "$SCRIPT_DIR/config/localradio.env" "$INSTALL_DIR/config/" # Only copy feeds.yaml if it doesn't already exist (preserve user edits) if [ ! -f "$INSTALL_DIR/config/feeds.yaml" ]; then cp "$SCRIPT_DIR/config/feeds.yaml" "$INSTALL_DIR/config/" fi cp "$SCRIPT_DIR/scripts/"*.py "$INSTALL_DIR/scripts/" cp "$SCRIPT_DIR/scripts/"*.sh "$INSTALL_DIR/scripts/" 2>/dev/null || true cp "$SCRIPT_DIR/requirements.txt" "$INSTALL_DIR/" # Copy web UI cp -r "$SCRIPT_DIR/web" "$INSTALL_DIR/" # --- Set up Python virtual environment ---------------------------------------- echo "[5/7] Setting up Python virtual environment..." python3 -m venv "$INSTALL_DIR/venv" "$INSTALL_DIR/venv/bin/pip" install --upgrade pip "$INSTALL_DIR/venv/bin/pip" install -r "$INSTALL_DIR/requirements.txt" # --- Build frontend ----------------------------------------------------------- echo "[5b/7] Building frontend..." if command -v npm &>/dev/null; then cd "$INSTALL_DIR/web/frontend" npm install npm run build cd - echo " Frontend built successfully" else echo " WARNING: npm not found. Install Node.js and run:" echo " cd $INSTALL_DIR/web/frontend && npm install && npm run build" fi # --- Initialize database ------------------------------------------------------ echo "[6/7] Initializing database..." PYTHONPATH="$INSTALL_DIR/scripts" "$INSTALL_DIR/venv/bin/python" \ "$INSTALL_DIR/scripts/init_db.py" "$INSTALL_DIR/state/radio.db" # --- Set ownership ------------------------------------------------------------ echo "[7/7] Setting file ownership..." chown -R "$RADIO_USER:$RADIO_GROUP" "$INSTALL_DIR" # Make scripts executable chmod +x "$INSTALL_DIR/scripts/"*.sh 2>/dev/null || true chmod +x "$INSTALL_DIR/scripts/"*.py # --- Install systemd services ------------------------------------------------- echo "" echo "=== Installing systemd services ===" cp "$SCRIPT_DIR/systemd/"*.service /etc/systemd/system/ systemctl daemon-reload systemctl enable localradio-icecast localradio-stream localradio-poller localradio-web echo "" echo "=== Setup Complete ===" echo "" echo "Next steps:" echo " 1. Add music files to $INSTALL_DIR/media/music/{morning,day,night,weekend}/" echo " 2. Add at least one audio file to $INSTALL_DIR/media/fallback/" echo " 3. Edit $INSTALL_DIR/config/feeds.yaml to add your podcast RSS feeds" echo " 4. Review $INSTALL_DIR/config/icecast.xml passwords" echo " 5. Start services:" echo " systemctl start localradio-icecast" echo " systemctl start localradio-stream" echo " systemctl start localradio-poller" echo " systemctl start localradio-web" echo " 6. Listen at: http://localhost:8000/stream" echo " 7. Web dashboard: http://localhost:5000" echo ""