Initial commit: Media Server for remote media control
FastAPI REST API server for controlling system-wide media playback on Windows, Linux, macOS, and Android. Features: - Play/Pause/Stop/Next/Previous track controls - Volume control and mute - Seek within tracks - Current track info (title, artist, album, artwork) - WebSocket real-time status updates - Script execution API - Token-based authentication - Cross-platform support Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
144
media_server/service/install_linux.sh
Normal file
144
media_server/service/install_linux.sh
Normal file
@@ -0,0 +1,144 @@
|
||||
#!/bin/bash
|
||||
# Linux service installation script for Media Server
|
||||
|
||||
set -e
|
||||
|
||||
SERVICE_NAME="media-server"
|
||||
INSTALL_DIR="/opt/media-server"
|
||||
SERVICE_FILE="/etc/systemd/system/${SERVICE_NAME}@.service"
|
||||
CURRENT_USER=$(whoami)
|
||||
|
||||
# Colors for output
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
echo_info() {
|
||||
echo -e "${GREEN}[INFO]${NC} $1"
|
||||
}
|
||||
|
||||
echo_warn() {
|
||||
echo -e "${YELLOW}[WARN]${NC} $1"
|
||||
}
|
||||
|
||||
echo_error() {
|
||||
echo -e "${RED}[ERROR]${NC} $1"
|
||||
}
|
||||
|
||||
check_root() {
|
||||
if [[ $EUID -ne 0 ]]; then
|
||||
echo_error "This script must be run as root (use sudo)"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
install_dependencies() {
|
||||
echo_info "Installing system dependencies..."
|
||||
|
||||
if command -v apt-get &> /dev/null; then
|
||||
apt-get update
|
||||
apt-get install -y python3 python3-pip python3-venv python3-dbus python3-gi libdbus-1-dev libglib2.0-dev
|
||||
elif command -v dnf &> /dev/null; then
|
||||
dnf install -y python3 python3-pip python3-dbus python3-gobject dbus-devel glib2-devel
|
||||
elif command -v pacman &> /dev/null; then
|
||||
pacman -S --noconfirm python python-pip python-dbus python-gobject
|
||||
else
|
||||
echo_warn "Unknown package manager. Please install dependencies manually:"
|
||||
echo " - python3, python3-pip, python3-venv"
|
||||
echo " - python3-dbus, python3-gi"
|
||||
echo " - libdbus-1-dev, libglib2.0-dev"
|
||||
fi
|
||||
}
|
||||
|
||||
install_service() {
|
||||
echo_info "Installing Media Server..."
|
||||
|
||||
# Create installation directory
|
||||
mkdir -p "$INSTALL_DIR"
|
||||
|
||||
# Copy source files
|
||||
cp -r "$(dirname "$0")/../"* "$INSTALL_DIR/"
|
||||
|
||||
# Create virtual environment
|
||||
echo_info "Creating Python virtual environment..."
|
||||
python3 -m venv "$INSTALL_DIR/venv"
|
||||
|
||||
# Install Python dependencies
|
||||
echo_info "Installing Python dependencies..."
|
||||
"$INSTALL_DIR/venv/bin/pip" install --upgrade pip
|
||||
"$INSTALL_DIR/venv/bin/pip" install -r "$INSTALL_DIR/requirements.txt"
|
||||
|
||||
# Install systemd service file
|
||||
echo_info "Installing systemd service..."
|
||||
cp "$INSTALL_DIR/service/media-server.service" "$SERVICE_FILE"
|
||||
|
||||
# Reload systemd
|
||||
systemctl daemon-reload
|
||||
|
||||
# Generate config if not exists
|
||||
if [[ ! -f "/home/$SUDO_USER/.config/media-server/config.yaml" ]]; then
|
||||
echo_info "Generating configuration file..."
|
||||
sudo -u "$SUDO_USER" "$INSTALL_DIR/venv/bin/python" -m media_server.main --generate-config
|
||||
fi
|
||||
|
||||
echo_info "Installation complete!"
|
||||
echo ""
|
||||
echo "To enable and start the service for user '$SUDO_USER':"
|
||||
echo " sudo systemctl enable ${SERVICE_NAME}@${SUDO_USER}"
|
||||
echo " sudo systemctl start ${SERVICE_NAME}@${SUDO_USER}"
|
||||
echo ""
|
||||
echo "To view the API token:"
|
||||
echo " cat ~/.config/media-server/config.yaml"
|
||||
echo ""
|
||||
echo "To view logs:"
|
||||
echo " journalctl -u ${SERVICE_NAME}@${SUDO_USER} -f"
|
||||
}
|
||||
|
||||
uninstall_service() {
|
||||
echo_info "Uninstalling Media Server..."
|
||||
|
||||
# Stop and disable service
|
||||
systemctl stop "${SERVICE_NAME}@*" 2>/dev/null || true
|
||||
systemctl disable "${SERVICE_NAME}@*" 2>/dev/null || true
|
||||
|
||||
# Remove service file
|
||||
rm -f "$SERVICE_FILE"
|
||||
systemctl daemon-reload
|
||||
|
||||
# Remove installation directory
|
||||
rm -rf "$INSTALL_DIR"
|
||||
|
||||
echo_info "Uninstallation complete!"
|
||||
echo "Note: Configuration files in ~/.config/media-server were not removed."
|
||||
}
|
||||
|
||||
show_usage() {
|
||||
echo "Usage: $0 [install|uninstall|deps]"
|
||||
echo ""
|
||||
echo "Commands:"
|
||||
echo " install Install the Media Server as a systemd service"
|
||||
echo " uninstall Remove the Media Server service"
|
||||
echo " deps Install system dependencies only"
|
||||
}
|
||||
|
||||
# Main
|
||||
case "${1:-}" in
|
||||
install)
|
||||
check_root
|
||||
install_dependencies
|
||||
install_service
|
||||
;;
|
||||
uninstall)
|
||||
check_root
|
||||
uninstall_service
|
||||
;;
|
||||
deps)
|
||||
check_root
|
||||
install_dependencies
|
||||
;;
|
||||
*)
|
||||
show_usage
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
Reference in New Issue
Block a user