#!/usr/bin/env bash set -euo pipefail # Build Linux distribution (self-contained venv + tarball) # Usage: ./build-dist-linux.sh [VERSION] source "$(dirname "$0")/build-common.sh" detect_version "${1:-}" echo "Building Media Server v${VERSION_CLEAN} for Linux" # --- Configuration --- DIST_DIR="dist/media-server" BUILD_OUTPUT="build/MediaServer-v${VERSION_CLEAN}-linux-x64" clean_dist "${DIST_DIR}" build verify_frontend # --- Create self-contained virtualenv --- echo "Creating virtualenv..." python3 -m venv "${DIST_DIR}/venv" source "${DIST_DIR}/venv/bin/activate" pip install --quiet --upgrade pip pip install --quiet "." # Remove the installed package (app source is on PYTHONPATH via launcher) rm -rf "${DIST_DIR}"/venv/lib/python*/site-packages/media_server* rm -rf "${DIST_DIR}"/venv/lib/python*/site-packages/media_server*.dist-info deactivate # Trim venv site-packages LINUX_SP=$(echo "${DIST_DIR}"/venv/lib/python*/site-packages) cleanup_site_packages "$LINUX_SP" "so" "so" copy_app_files "$DIST_DIR" # --- Create launcher --- cat > "${DIST_DIR}/media-server.sh" << 'LAUNCHER' #!/usr/bin/env bash set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" export PYTHONPATH="$SCRIPT_DIR/app" source "$SCRIPT_DIR/venv/bin/activate" exec python -m media_server.main "$@" LAUNCHER chmod +x "${DIST_DIR}/media-server.sh" # --- Create systemd service installer --- cat > "${DIST_DIR}/install-service.sh" << 'SERVICE' #!/usr/bin/env bash set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" SERVICE_NAME="media-server" SERVICE_FILE="/etc/systemd/system/${SERVICE_NAME}.service" if [ "$EUID" -ne 0 ]; then echo "Please run with sudo: sudo ./install-service.sh" exit 1 fi REAL_USER="${SUDO_USER:-$USER}" cat > "$SERVICE_FILE" << EOF [Unit] Description=Media Server After=network.target sound.target [Service] Type=simple User=${REAL_USER} WorkingDirectory=${SCRIPT_DIR} ExecStart=${SCRIPT_DIR}/media-server.sh Restart=on-failure RestartSec=5 Environment=PYTHONUNBUFFERED=1 [Install] WantedBy=multi-user.target EOF systemctl daemon-reload systemctl enable "${SERVICE_NAME}" systemctl start "${SERVICE_NAME}" echo "Service '${SERVICE_NAME}' installed and started." echo "Check status: systemctl status ${SERVICE_NAME}" SERVICE chmod +x "${DIST_DIR}/install-service.sh" # --- Package --- echo "Creating archive..." cp -r "${DIST_DIR}" "${BUILD_OUTPUT}" tar -czf "${BUILD_OUTPUT}.tar.gz" -C build "MediaServer-v${VERSION_CLEAN}-linux-x64" echo "Build complete: ${BUILD_OUTPUT}.tar.gz"