#!/bin/bash service_name="komari-agent" target_dir="/opt/komari" komari_agent_path="${target_dir}/agent" komari_args="$@" if [ "$EUID" -ne 0 ]; then echo "Error: Please run as root" exit 1 fi # Function to uninstall the previous installation uninstall_previous() { echo "Checking for previous installation..." # Stop and disable service if it exists if command -v systemctl >/dev/null 2>&1 && systemctl list-unit-files | grep -q "${service_name}.service"; then echo "Stopping and disabling existing systemd service..." systemctl stop ${service_name}.service systemctl disable ${service_name}.service rm -f "/etc/systemd/system/${service_name}.service" systemctl daemon-reload elif command -v rc-service >/dev/null 2>&1 && [ -f "/etc/init.d/${service_name}" ]; then echo "Stopping and disabling existing OpenRC service..." rc-service ${service_name} stop rc-update del ${service_name} default rm -f "/etc/init.d/${service_name}" fi # Remove old binary if it exists if [ -f "$komari_agent_path" ]; then echo "Removing old binary..." rm -f "$komari_agent_path" fi } # Uninstall previous installation uninstall_previous install_dependencies() { echo "Checking and installing dependencies..." local deps="curl" local missing_deps="" for cmd in $deps; do if ! command -v $cmd >/dev/null 2>&1; then missing_deps="$missing_deps $cmd" fi done if [ -n "$missing_deps" ]; then # Check package manager and install dependencies if command -v apt >/dev/null 2>&1; then echo "Using apt to install dependencies..." apt update apt install -y $missing_deps elif command -v yum >/dev/null 2>&1; then echo "Using yum to install dependencies..." yum install -y $missing_deps elif command -v apk >/dev/null 2>&1; then echo "Using apk to install dependencies..." apk add $missing_deps else echo "Error: No supported package manager found (apt/yum/apk)" exit 1 fi # Verify installation for cmd in $missing_deps; do if ! command -v $cmd >/dev/null 2>&1; then echo "Error: Failed to install $cmd" exit 1 fi done else echo "Dependencies already satisfied" fi } # Install dependencies install_dependencies arch=$(uname -m) case $arch in x86_64) arch="amd64" ;; aarch64) arch="arm64" ;; *) echo "Unsupported architecture: $arch" exit 1 ;; esac echo "Detected architecture: $arch" # Get latest release version latest_version=$(curl -s https://api.github.com/repos/komari-monitor/komari-agent/releases/latest | grep "tag_name" | cut -d'"' -f4) if [ -z "$latest_version" ]; then echo "Error: Could not fetch latest version" exit 1 fi echo "Latest version: $latest_version" # Construct download URL file_name="komari-agent-linux-${arch}" download_url="https://github.com/komari-monitor/komari-agent/releases/download/${latest_version}/${file_name}" mkdir -p "$target_dir" # Download binary echo "Downloading $file_name..." curl -L -o "$komari_agent_path" "$download_url" if [ $? -ne 0 ]; then echo "Download failed" exit 1 fi # Set executable permissions chmod +x "$komari_agent_path" echo "Komari-agent installed to $komari_agent_path" # Detect init system and configure service if command -v systemctl >/dev/null 2>&1; then # Systemd service configuration service_file="/etc/systemd/system/${service_name}.service" cat > "$service_file" << EOF [Unit] Description=Komari Agent Service After=network.target [Service] Type=simple ExecStart=${komari_agent_path} ${komari_args} WorkingDirectory=${target_dir} Restart=always User=root [Install] WantedBy=multi-user.target EOF # Reload systemd and start service systemctl daemon-reload systemctl enable ${service_name}.service systemctl start ${service_name}.service elif command -v rc-service >/dev/null 2>&1; then # OpenRC service configuration service_file="/etc/init.d/${service_name}" cat > "$service_file" << EOF #!/sbin/openrc-run name="Komari Agent Service" description="Komari monitoring agent" command="${komari_agent_path}" command_args="${komari_args}" command_user="root" directory="${target_dir}" pidfile="/run/${service_name}.pid" retry="SIGTERM/30" depend() { need net after network } EOF # Set permissions and enable service chmod +x "$service_file" rc-update add ${service_name} default rc-service ${service_name} start else echo "Error: Unsupported init system (neither systemd nor openrc found)" exit 1 fi echo "Komari-agent service configured and started with arguments: ${komari_args}"