2025-02-13 11:57:22 +01:00
#!/usr/bin/env bash
2026-01-06 13:28:12 +01:00
# Copyright (c) 2021-2026 community-scripts ORG
2025-02-13 11:57:22 +01:00
# Author: Slaviša Arežina (tremor021)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/rustdesk/rustdesk-server
2025-03-24 14:20:56 +01:00
source /dev/stdin <<< " $FUNCTIONS_FILE_PATH "
2025-02-13 11:57:22 +01:00
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
2026-10-24 17:55:50 +02:00
prompt = " ${ var_rustdesk_api :- } "
[[ -n " $prompt " ]] || read -r -p " ${ TAB3 } Would you like to add the RustDesk API web UI (lejianwen/rustdesk-api, unmaintained since 09/2025)? <y/N> " prompt || true
2026-10-11 16:14:47 +02:00
INSTALL_API = 0
[[ " ${ prompt ,, } " = ~ ^( y| yes| true ) $ ]] && INSTALL_API = 1
API_PASS = " $( random_password 16) "
# rustdesk-api hands these to clients; its shipped defaults point at 192.168.1.66
api_env() {
printf '%s\n' \
"RUSTDESK_API_RUSTDESK_ID_SERVER= ${ LOCAL_IP } :21116" \
"RUSTDESK_API_RUSTDESK_RELAY_SERVER= ${ LOCAL_IP } :21117" \
"RUSTDESK_API_RUSTDESK_API_SERVER=http:// ${ LOCAL_IP } :21114" \
"RUSTDESK_API_RUSTDESK_KEY_FILE= $1 "
2026-08-18 12:38:22 +02:00
}
2026-10-11 16:14:47 +02:00
# hbbs creates its key pair in its working directory on first start
write_creds() {
local key_file = " $1 "
for _ in $( seq 1 30) ; do
[[ -s " $key_file " ]] && break
sleep 1
done
if [[ ! -s " $key_file " ]] ; then
msg_error "hbbs did not create ${ key_file } "
exit 1
fi
2026-08-18 12:38:22 +02:00
cat <<EOF >~/rustdesk.creds
2026-10-11 16:14:47 +02:00
RustDesk Server
ID Server: ${LOCAL_IP}
Key: $(<"$key_file")
EOF
if (( INSTALL_API)) ; then
cat <<EOF >>~/rustdesk.creds
2026-08-18 12:38:22 +02:00
2026-10-11 16:14:47 +02:00
RustDesk API Web UI: http://${LOCAL_IP}:21114/_admin/
2026-08-18 12:38:22 +02:00
Username: admin
2026-10-11 16:14:47 +02:00
Password: ${API_PASS}
2026-08-18 12:38:22 +02:00
EOF
2026-10-11 16:14:47 +02:00
fi
}
2026-08-18 12:38:22 +02:00
2026-10-11 16:14:47 +02:00
setup_deb_based() {
fetch_and_deploy_gh_release "rustdesk-hbbr" "rustdesk/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-hbbr* $( arch_resolve) .deb"
fetch_and_deploy_gh_release "rustdesk-hbbs" "rustdesk/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-hbbs* $( arch_resolve) .deb"
fetch_and_deploy_gh_release "rustdesk-utils" "rustdesk/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-utils* $( arch_resolve) .deb"
systemctl enable -q --now rustdesk-hbbs rustdesk-hbbr
write_creds /var/lib/rustdesk-server/id_ed25519.pub
if (( INSTALL_API)) ; then
fetch_and_deploy_gh_release "rustdesk-api" "lejianwen/rustdesk-api" "binary" "latest" "/opt/rustdesk" "rustdesk-api-server* $( arch_resolve) .deb"
msg_info "Configuring RustDesk API"
mkdir -p /etc/systemd/system/rustdesk-api.service.d
{
echo "[Service]"
api_env /var/lib/rustdesk-server/id_ed25519.pub | sed 's/^/Environment=/'
} >/etc/systemd/system/rustdesk-api.service.d/override.conf
systemctl daemon-reload
systemctl stop rustdesk-api
cd /var/lib/rustdesk-api
$STD rustdesk-api reset-admin-pwd " $API_PASS "
systemctl enable -q --now rustdesk-api
msg_ok "Configured RustDesk API"
fi
2026-08-18 12:38:22 +02:00
}
2026-10-11 16:14:47 +02:00
setup_alpine() {
fetch_and_deploy_gh_release "rustdesk-server" "rustdesk/rustdesk-server" "prebuild" "latest" "/opt/rustdesk-server" "rustdesk-server-linux- $( arch_resolve "amd64" "arm64v8" ) .zip"
msg_info "Creating RustDesk Server Services"
for svc in hbbs hbbr; do
cat <<EOF >"/etc/init.d/rustdesk-server-${svc}"
2026-08-18 12:38:22 +02:00
#!/sbin/openrc-run
2026-10-11 16:14:47 +02:00
description="RustDesk ${svc^^} Service"
2026-08-18 12:38:22 +02:00
directory="/opt/rustdesk-server"
2026-10-11 16:14:47 +02:00
command="/opt/rustdesk-server/${svc}"
2026-08-18 12:38:22 +02:00
command_background="true"
2026-10-11 16:14:47 +02:00
pidfile="/var/run/rustdesk-server-${svc}.pid"
output_log="/var/log/rustdesk-${svc}.log"
error_log="/var/log/rustdesk-${svc}.err"
2026-08-18 12:38:22 +02:00
depend() {
use net
}
EOF
2026-10-11 16:14:47 +02:00
chmod +x "/etc/init.d/rustdesk-server- ${ svc } "
$STD rc-update add "rustdesk-server- ${ svc } " default
$STD service "rustdesk-server- ${ svc } " start
done
msg_ok "Created RustDesk Server Services"
write_creds /opt/rustdesk-server/id_ed25519.pub
if (( INSTALL_API)) ; then
fetch_and_deploy_gh_release "rustdesk-api" "lejianwen/rustdesk-api" "prebuild" "latest" "/opt/rustdesk-api" "linux- $( arch_resolve) .tar.gz"
msg_info "Configuring RustDesk API"
api_env /opt/rustdesk-server/id_ed25519.pub | sed 's/^/export /' >/etc/conf.d/rustdesk-api
cd /opt/rustdesk-api
$STD ./apimain reset-admin-pwd " $API_PASS "
cat <<EOF >/etc/init.d/rustdesk-api
2026-08-18 12:38:22 +02:00
#!/sbin/openrc-run
description="RustDesk API Service"
directory="/opt/rustdesk-api"
command="/opt/rustdesk-api/apimain"
command_background="true"
pidfile="/var/run/rustdesk-api.pid"
output_log="/var/log/rustdesk-api.log"
error_log="/var/log/rustdesk-api.err"
depend() {
use net
2026-10-11 16:14:47 +02:00
after rustdesk-server-hbbs
2026-08-18 12:38:22 +02:00
}
EOF
2026-10-11 16:14:47 +02:00
chmod +x /etc/init.d/rustdesk-api
$STD rc-update add rustdesk-api default
$STD service rustdesk-api start
msg_ok "Configured RustDesk API"
fi
2026-08-18 12:38:22 +02:00
}
run_os_setup
2025-04-01 11:12:42 +02:00
2025-02-13 11:57:22 +01:00
motd_ssh
customize
2025-11-22 17:27:13 +01:00
cleanup_lxc