#!/usr/bin/env bash set -euo pipefail # RustDesk Server Native Installer (hbbs + hbbr) # Debian 12 / x86_64 / static musl binaries from GitHub releases # Idempotent VERSION="1.1.15" ARCH="amd64" ZIP_URL="https://github.com/rustdesk/rustdesk-server/releases/download/${VERSION}/rustdesk-server-linux-${ARCH}.zip" INSTALL_DIR="/usr/local/bin" DATA_DIR="/var/lib/rustdesk-server" CONFIG_DIR="/etc/rustdesk-server" SERVICE_DIR="/etc/systemd/system" TMP_DIR=$(mktemp -d) trap 'rm -rf "$TMP_DIR"' EXIT log() { echo "[$(date +'%Y-%m-%dT%H:%M:%S%z')] $*" } need_cmd() { if ! command -v "$1" >/dev/null 2>&1; then log "Installing: $1" apt-get update -qq apt-get install -y -qq "$1" fi } log "=== RustDesk Server Install ===" log "Version: $VERSION" log "Arch: $ARCH" need_cmd curl need_cmd unzip log "Downloading release $VERSION..." curl -fsSL -o "$TMP_DIR/rustdesk-server.zip" "$ZIP_URL" log "Extracting..." unzip -q -o "$TMP_DIR/rustdesk-server.zip" -d "$TMP_DIR" log "Installing binaries to $INSTALL_DIR..." install -m 755 "$TMP_DIR/$ARCH/hbbs" "$INSTALL_DIR/hbbs" install -m 755 "$TMP_DIR/$ARCH/hbbr" "$INSTALL_DIR/hbbr" install -m 755 "$TMP_DIR/$ARCH/rustdesk-utils" "$INSTALL_DIR/rustdesk-utils" log "Creating directories..." mkdir -p "$DATA_DIR" "$CONFIG_DIR" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" for service in rustdesk-hbbs.service rustdesk-hbbr.service; do src="$SCRIPT_DIR/$service" dst="$SERVICE_DIR/$service" if [ -f "$src" ]; then cp -f "$src" "$dst" chmod 644 "$dst" log "Installed: $dst" else log "WARNING: $src not found — ensure systemd unit files are in the same directory." fi done log "Reloading systemd..." systemctl daemon-reload log "Enabling services..." systemctl enable rustdesk-hbbs.service || true systemctl enable rustdesk-hbbr.service || true log "Starting services..." systemctl restart rustdesk-hbbs.service || true systemctl restart rustdesk-hbbr.service || true sleep 2 log "=== Status ===" systemctl status rustdesk-hbbs.service --no-pager || true systemctl status rustdesk-hbbr.service --no-pager || true PUB_KEY="$DATA_DIR/id_ed25519.pub" if [ -f "$PUB_KEY" ]; then log "=== Server Public Key ===" cat "$PUB_KEY" else log "Public key not found yet. It will be generated on first successful hbbs start." fi log "=== Listening Ports ===" ss -tlnp | grep -E '21115|21116|21117' || true log "=== Done ==="