diff --git a/ct/rustdeskserver.sh b/ct/rustdeskserver.sh index b270d95fc..35023dab2 100644 --- a/ct/rustdeskserver.sh +++ b/ct/rustdeskserver.sh @@ -11,6 +11,7 @@ var_tags="${var_tags:-remote-desktop}" var_cpu="${var_cpu:-1}" var_arm64="${var_arm64:-yes}" var_unprivileged="${var_unprivileged:-1}" +export var_rustdesk_api="${var_rustdesk_api:-}" if [[ -z "${var_os:-}" ]] && command -v pveversion >/dev/null 2>&1; then var_os=$(msg_menu "Choose the container OS" \ "debian" "Debian 13" \ @@ -38,25 +39,32 @@ update_deb_based() { exit fi - if check_for_gh_release "rustdesk-hbbs" "lejianwen/rustdesk-server"; then - msg_info "Stopping Service" - systemctl stop rustdesk-hbbr - systemctl stop rustdesk-hbbs - if [[ -f /lib/systemd/system/rustdesk-api.service ]]; then - systemctl stop rustdesk-api - fi - msg_ok "Stopped Service" + if check_for_gh_release "rustdesk-hbbs" "rustdesk/rustdesk-server"; then + msg_info "Stopping RustDesk Server" + systemctl stop rustdesk-hbbr rustdesk-hbbs + msg_ok "Stopped RustDesk Server" + + 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" + + msg_info "Starting RustDesk Server" + systemctl start rustdesk-hbbs rustdesk-hbbr + msg_ok "Started RustDesk Server" + msg_ok "Updated RustDesk Server" + fi + + if [[ -f /lib/systemd/system/rustdesk-api.service ]] && check_for_gh_release "rustdesk-api" "lejianwen/rustdesk-api"; then + msg_info "Stopping RustDesk API" + systemctl stop rustdesk-api + msg_ok "Stopped RustDesk API" - fetch_and_deploy_gh_release "rustdesk-hbbr" "lejianwen/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-hbbr*$(arch_resolve).deb" - fetch_and_deploy_gh_release "rustdesk-hbbs" "lejianwen/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-hbbs*$(arch_resolve).deb" - fetch_and_deploy_gh_release "rustdesk-utils" "lejianwen/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-utils*$(arch_resolve).deb" fetch_and_deploy_gh_release "rustdesk-api" "lejianwen/rustdesk-api" "binary" "latest" "/opt/rustdesk" "rustdesk-api-server*$(arch_resolve).deb" - msg_info "Starting services" - systemctl start -q rustdesk-* - msg_ok "Services started" - - msg_ok "Updated successfully!" + msg_info "Starting RustDesk API" + systemctl start rustdesk-api + msg_ok "Started RustDesk API" + msg_ok "Updated RustDesk API" fi } @@ -66,21 +74,26 @@ update_alpine() { exit fi - if check_for_gh_release "rustdesk-server" "lejianwen/rustdesk-server"; then + msg_info "Updating Alpine Packages" + $STD apk -U upgrade + msg_ok "Updated Alpine Packages" + + if check_for_gh_release "rustdesk-server" "rustdesk/rustdesk-server"; then msg_info "Stopping RustDesk Server" - $STD apk -U upgrade $STD service rustdesk-server-hbbs stop $STD service rustdesk-server-hbbr stop msg_ok "Stopped RustDesk Server" - fetch_and_deploy_gh_release "rustdesk-server" "lejianwen/rustdesk-server" "prebuild" "latest" "/opt/rustdesk-server" "rustdesk-server-linux-$(arch_resolve "amd64" "arm64v8").zip" + 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 "Starting RustDesk Server" $STD service rustdesk-server-hbbs start $STD service rustdesk-server-hbbr start msg_ok "Started RustDesk Server" + msg_ok "Updated RustDesk Server" fi - if check_for_gh_release "rustdesk-api" "lejianwen/rustdesk-api"; then + + if [[ -x /opt/rustdesk-api/apimain ]] && check_for_gh_release "rustdesk-api" "lejianwen/rustdesk-api"; then msg_info "Stopping RustDesk API" $STD service rustdesk-api stop msg_ok "Stopped RustDesk API" @@ -90,8 +103,8 @@ update_alpine() { msg_info "Starting RustDesk API" $STD service rustdesk-api start msg_ok "Started RustDesk API" + msg_ok "Updated RustDesk API" fi - msg_ok "Updated successfully!" } function update_script() { @@ -107,5 +120,7 @@ description msg_ok "Completed successfully!\n" echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" -echo -e "${INFO}${YW}Access it using the following URL:${CL}" -echo -e "${GATEWAY}${BGN}http://${IP}:21114${CL}" +echo -e "${INFO}${YW}Set this as ID server in the RustDesk client, the key is in ~/rustdesk.creds:${CL}" +echo -e "${GATEWAY}${BGN}${IP}${CL}" +echo -e "${INFO}${YW}Web UI, if selected during setup:${CL}" +echo -e "${GATEWAY}${BGN}http://${IP}:21114/_admin/${CL}" diff --git a/install/rustdeskserver-install.sh b/install/rustdeskserver-install.sh index 5b0ae06fa..cfcc3fb2f 100644 --- a/install/rustdeskserver-install.sh +++ b/install/rustdeskserver-install.sh @@ -13,108 +13,126 @@ setting_up_container network_check update_os +if [[ -n "${var_rustdesk_api:-}" ]]; then + prompt="$var_rustdesk_api" +else + read -r -p "${TAB3}Would you like to add the RustDesk API web UI (lejianwen/rustdesk-api, unmaintained since 09/2025)? " prompt +fi +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" +} + +# 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 + cat <~/rustdesk.creds +RustDesk Server +ID Server: ${LOCAL_IP} +Key: $(<"$key_file") +EOF + if ((INSTALL_API)); then + cat <>~/rustdesk.creds + +RustDesk API Web UI: http://${LOCAL_IP}:21114/_admin/ +Username: admin +Password: ${API_PASS} +EOF + fi +} + setup_deb_based() { - fetch_and_deploy_gh_release "rustdesk-hbbr" "lejianwen/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-hbbr*$(arch_resolve).deb" - fetch_and_deploy_gh_release "rustdesk-hbbs" "lejianwen/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-hbbs*$(arch_resolve).deb" - fetch_and_deploy_gh_release "rustdesk-utils" "lejianwen/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-utils*$(arch_resolve).deb" - fetch_and_deploy_gh_release "rustdesk-api" "lejianwen/rustdesk-api" "binary" "latest" "/opt/rustdesk" "rustdesk-api-server*$(arch_resolve).deb" - systemctl enable -q --now rustdesk-hbbr - systemctl enable -q --now rustdesk-hbbs - systemctl enable -q --now rustdesk-api + 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 } setup_alpine() { - fetch_and_deploy_gh_release "rustdesk-server" "lejianwen/rustdesk-server" "prebuild" "latest" "/opt/rustdesk-server" "rustdesk-server-linux-$(arch_resolve "amd64" "arm64v8").zip" + 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 "Configuring RustDesk Server" - mkdir -p /root/.config/rustdesk - cd /opt/rustdesk-server - ./rustdesk-utils genkeypair >/tmp/rustdesk_keys.txt - grep "Public Key" /tmp/rustdesk_keys.txt | awk '{print $3}' >/root/.config/rustdesk/id_ed25519.pub - grep "Secret Key" /tmp/rustdesk_keys.txt | awk '{print $3}' >/root/.config/rustdesk/id_ed25519 - chmod 600 /root/.config/rustdesk/id_ed25519 - chmod 644 /root/.config/rustdesk/id_ed25519.pub - rm /tmp/rustdesk_keys.txt - msg_ok "Configured RustDesk Server" - - 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" - cd /opt/rustdesk-api - ADMINPASS=$(head -c 16 /dev/urandom | xxd -p -c 16) - $STD ./apimain reset-admin-pwd "$ADMINPASS" - cat <~/rustdesk.creds -RustDesk WebUI - -Username: admin -Password: $ADMINPASS -EOF - msg_ok "Configured RustDesk API" - - msg_info "Enabling RustDesk Server Services" - cat </etc/init.d/rustdesk-server-hbbs + msg_info "Creating RustDesk Server Services" + for svc in hbbs hbbr; do + cat <"/etc/init.d/rustdesk-server-${svc}" #!/sbin/openrc-run -description="RustDesk HBBS Service" +description="RustDesk ${svc^^} Service" directory="/opt/rustdesk-server" -command="/opt/rustdesk-server/hbbs" -command_args="" +command="/opt/rustdesk-server/${svc}" command_background="true" -command_user="root" -pidfile="/var/run/rustdesk-server-hbbs.pid" -output_log="/var/log/rustdesk-hbbs.log" -error_log="/var/log/rustdesk-hbbs.err" +pidfile="/var/run/rustdesk-server-${svc}.pid" +output_log="/var/log/rustdesk-${svc}.log" +error_log="/var/log/rustdesk-${svc}.err" depend() { use net } EOF + 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 - cat </etc/init.d/rustdesk-server-hbbr -#!/sbin/openrc-run -description="RustDesk HBBR Service" -directory="/opt/rustdesk-server" -command="/opt/rustdesk-server/hbbr" -command_args="" -command_background="true" -command_user="root" -pidfile="/var/run/rustdesk-server-hbbr.pid" -output_log="/var/log/rustdesk-hbbr.log" -error_log="/var/log/rustdesk-hbbr.err" - -depend() { - use net -} -EOF - - cat </etc/init.d/rustdesk-api + 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 </etc/init.d/rustdesk-api #!/sbin/openrc-run description="RustDesk API Service" directory="/opt/rustdesk-api" command="/opt/rustdesk-api/apimain" -command_args="" command_background="true" -command_user="root" pidfile="/var/run/rustdesk-api.pid" output_log="/var/log/rustdesk-api.log" error_log="/var/log/rustdesk-api.err" depend() { use net + after rustdesk-server-hbbs } EOF - chmod +x /etc/init.d/rustdesk-server-hbbs - chmod +x /etc/init.d/rustdesk-server-hbbr - chmod +x /etc/init.d/rustdesk-api - $STD rc-update add rustdesk-server-hbbs default - $STD rc-update add rustdesk-server-hbbr default - $STD rc-update add rustdesk-api default - msg_ok "Enabled RustDesk Server Services" - - msg_info "Starting RustDesk Server" - $STD service rustdesk-server-hbbs start - $STD service rustdesk-server-hbbr start - $STD service rustdesk-api start - msg_ok "Started RustDesk Server" + 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 } run_os_setup