- FastAPI server for Windows media control via WinRT/SMTC - Home Assistant custom integration with media player entity - Script button entities for system commands - Position tracking with grace period for track skip handling - Server availability detection in HA entity Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
145 lines
3.8 KiB
Bash
145 lines
3.8 KiB
Bash
#!/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
|