Skip to content

Simple shell script to update your rustdesk server running on your uberspace instance

Thanks to the wonderful rustdesk howto, I was able to quickly setup my own rustdesk instance.

With this benefit, I know I have to maintain yet another software so I wrote a dead simple "update_rustdesk.sh" I want to share.

#!/bin/bash
####
# @ref: https://lab.uberspace.de/guide_rustdesk/
# @since: 2025-04-19
# @author: stev leibelt <artodeto@bazzline.net>
####

function _main ()
{
    local CURRENT_WORKING_DIRECTORY
    local INSTALLED_VERSION
    local LOCAL_BASE_PATH
    local VERSION_TO_DOWNLOAD

    CURRENT_WORKING_DIRECTORY=$(pwd)
    # adapt this line
    LOCAL_BASE_PATH="${2:-/home/<string: your_user>/rustdesk}"
    VERSION_TO_DOWNLOAD="${1}"

    if [[ -z "${VERSION_TO_DOWNLOAD}" ]];
    then
        echo ":: Usage"
        echo "   ${0} <string: latest_rustdesk_version> [<string: local_installed_path>"
        echo ""

        return 0
    fi

    if [[ ! -d "${LOCAL_BASE_PATH}" ]];
    then
        echo ":: Error"
        echo "   >>${LOCAL_BASE_PATH}<< is not a directory."
        echo ""

        return 10
    fi

    cd "${LOCAL_BASE_PATH}"

    if [[ ! -f ".current_version" ]];
    then
        echo ":: Error"
        echo "   >>${LOCAL_BASE_PATH}/.current_version<< is not a file."
        echo ""
        cd "${CURRENT_WORKING_DIRECTORY}"

        return 15
    fi

    INSTALLED_VERSION=$(cat ".current_version")

    if [[ "${INSTALLED_VERSION}" == "${VERSION_TO_DOWNLOAD}" ]];
    then
        echo ":: Nothing to do"
        echo "   ${INSTALLED_VERSION} already installed."
        echo ""
        cd "${CURRENT_WORKING_DIRECTORY}"

        return 0
    fi

    if [[ -d "new" ]];
    then
        rm -fr "new"
    fi

    supervisorctl stop rustdesk_hbbr
    supervisorctl stop rustdesk_hbbs

    mkdir -p "new"
    cd new
    if wget "https://github.com/rustdesk/rustdesk-server/releases/download/${VERSION_TO_DOWNLOAD}/rustdesk-server-linux-amd64.zip";
    then
        unzip -j rustdesk-server-linux-amd64.zip

        if [[ ! -f hbbr ]];
        then
            echo ":: Error"
            echo "   >>${LOCAL_BASE_PATH}/new/hbbr is not a file."
            echo ""
            cd "${CURRENT_WORKING_DIRECTORY}"

            return 30
        fi

        if [[ ! -f hbbs ]];
        then
            echo ":: Error"
            echo "   >>${LOCAL_BASE_PATH}/new/hbbs is not a file."
            echo ""
            cd "${CURRENT_WORKING_DIRECTORY}"

            return 32
        fi

        if [[ ! -f rustdesk-utils ]];
        then
            echo ":: Error"
            echo "   >>${LOCAL_BASE_PATH}/new/rustdesk-utils is not a file."
            echo ""
            cd "${CURRENT_WORKING_DIRECTORY}"

            return 34
        fi

        mv ../hbbr ../hbbr.previous
        mv ../hbbs ../hbbs.previous
        mv ../rustdesk-utils ../rustdesk-utils.previous

        mv hbbr ../
        mv hbbs ../
        mv rustdesk-utils ../

        echo "${VERSION_TO_DOWNLOAD}" > ../.current_version

        supervisorctl start rustdesk_hbbs
        supervisorctl start rustdesk_hbbr

        echo "   Switched from >>${INSTALLED_VERSION}<< to >>${VERSION_TO_DOWNLOAD}<<"
    else
        echo ":: Error"
        echo "   wget last exit code ${?}"
        echo ""
        cd "${CURRENT_WORKING_DIRECTORY}"

        return 20
    fi
}

_main "${@}"

You only have to adapt one line, all else should work out of the box.