Files
dropshell-templates/squashkiwi-streaming/install.sh
Your Name 97c4e8f925
All checks were successful
Test and Publish Templates / test-and-publish (push) Successful in 22s
Update API URL format to use club code + court number (e.g., otog2 for Otago Court 2)
2025-09-02 10:03:20 +12:00

76 lines
3.3 KiB
Bash
Executable File

#!/bin/bash
# shellcheck disable=SC1091
source "${AGENT_PATH}/common.sh"
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "${SCRIPT_DIR}/_paths.sh"
_check_required_env_vars "PROJECT_NAME" "LOCAL_DATA_FOLDER" "CAMERA_IP" "CLUB_CODE" "COURT_NUMBER" "RECORDINGS_FOLDER"
# Create directories
# shellcheck disable=SC2046
create_items $(get_squashkiwi_streaming_paths) || _die "Failed to create directories"
mkdir -p "${RECORDINGS_FOLDER}/court_main"
mkdir -p "${RECORDINGS_FOLDER}/court_sub"
mkdir -p "${LOCAL_DATA_FOLDER}/config"
mkdir -p "${LOCAL_DATA_FOLDER}/config/overlay"
mkdir -p "${LOCAL_DATA_FOLDER}/config/web"
# Copy configuration files
cp -r "${SCRIPT_DIR}/config/"* "${LOCAL_DATA_FOLDER}/config/" || _die "Failed to copy config files"
# URL-encode the camera password if it contains special characters
# Only encode if not already encoded (check for % sign)
if [[ "${CAMERA_PASSWORD}" == *[!\@\#\$\&]* ]] && [[ "${CAMERA_PASSWORD}" != *%* ]]; then
echo "Note: Camera password contains special characters. Encoding for RTSP URL..."
CAMERA_PASSWORD=$(echo -n "${CAMERA_PASSWORD}" | sed 's/!/%21/g; s/@/%40/g; s/#/%23/g; s/\$/%24/g; s/&/%26/g')
fi
# Create .env file for docker-compose with all required variables
echo "Creating environment file for docker-compose..."
cat > "${LOCAL_DATA_FOLDER}/config/.env" <<EOF
# Auto-generated environment file for docker-compose
PROJECT_NAME=${PROJECT_NAME}
RECORDINGS_FOLDER=${RECORDINGS_FOLDER}
MTX_PATHS_COURT_SOURCE=rtsp://${CAMERA_USER}:${CAMERA_PASSWORD}@${CAMERA_IP}:${CAMERA_RTSP_PORT}/cam/realmonitor?channel=1&subtype=0
MTX_PATHS_COURT_MAIN_SOURCE=rtsp://${CAMERA_USER}:${CAMERA_PASSWORD}@${CAMERA_IP}:${CAMERA_RTSP_PORT}/cam/realmonitor?channel=1&subtype=0
MTX_PATHS_COURT_SUB_SOURCE=rtsp://${CAMERA_USER}:${CAMERA_PASSWORD}@${CAMERA_IP}:${CAMERA_RTSP_PORT}/cam/realmonitor?channel=1&subtype=1
MEDIAMTX_USER=${MEDIAMTX_USER}
MEDIAMTX_PASS=${MEDIAMTX_PASS}
SQUASHKIWI_API=${SQUASHKIWI_API}
CLUB_CODE=${CLUB_CODE}
COURT_NUMBER=${COURT_NUMBER}
COURT_NAME=${COURT_NAME}
IDLE_TIMEOUT=${IDLE_TIMEOUT}
RECORDING_RETENTION_DAYS=${RECORDING_RETENTION_DAYS}
HOST_PORT=${HOST_PORT}
CLOUDFLARE_TUNNEL_TOKEN=${CLOUDFLARE_TUNNEL_TOKEN}
GRAFANA_PASSWORD=${GRAFANA_PASSWORD}
EOF
# Test Docker
_check_docker_installed || _die "Docker test failed, aborting installation..."
# Test camera connection (optional check)
echo "Testing camera connection to ${CAMERA_IP}..."
if ping -c 1 -W 2 "${CAMERA_IP}" > /dev/null 2>&1; then
echo "✓ Camera IP is reachable"
else
echo "⚠ Warning: Camera IP ${CAMERA_IP} is not reachable. Please check camera connection."
fi
# Build overlay service
cd "${LOCAL_DATA_FOLDER}/config" || _die "Failed to change to config directory"
docker compose build overlay-service || _die "Failed to build overlay service"
# Stop any existing containers
bash "${SCRIPT_DIR}/stop.sh" 2>/dev/null || true
# Start services
bash "${SCRIPT_DIR}/start.sh" || _die "Failed to start services"
echo ""
echo "Installation of ${PROJECT_NAME} complete!"
echo "Access the stream at: http://$(hostname -I | awk '{print $1}'):${HOST_PORT}"
echo ""
echo "To enable optional features:"
echo " - Cloudflare tunnel: Set CLOUDFLARE_TUNNEL_TOKEN in service.env and run: docker compose --profile tunnel up -d"
echo " - Monitoring: docker compose --profile monitoring up -d"