diff --git a/lib.sh b/lib.sh index 6b6e75f..68755ac 100644 --- a/lib.sh +++ b/lib.sh @@ -6,11 +6,19 @@ true ############ Variables +# PATH & DIR RUSTDESK_INSTALL_DIR=/var/lib/rustdesk-server RUSTDESK_LOG_DIR=/var/log/rustdesk-server +# OS ARCH=$(uname -m) -TITLE="RustDesk Linux installer" +# Network WANIP4=$(curl -s -k -m 5 -4 https://api64.ipify.org) +# Whiptail menus +TITLE="RustDesk - $(date +%Y)" +[ -n "$SCRIPT_NAME" ] && TITLE+=" - $SCRIPT_NAME" +CHECKLIST_GUIDE="Navigate with the [ARROW] keys and (de)select with the [SPACE] key. \ +Confirm by pressing [ENTER]. Cancel by pressing [ESC]." +MENU_GUIDE="Navigate with the [ARROW] keys and confirm by pressing [ENTER]. Cancel by pressing [ESC]." ############ Functions @@ -67,6 +75,115 @@ input_box_flow() { echo "$RESULT" } +identify_os() { +if [ -f /etc/os-release ] +then + # freedesktop.org and systemd + # shellcheck source=/dev/null + source /etc/os-release + OS=$NAME + VER=$VERSION_ID + UPSTREAM_ID=${ID_LIKE,,} + + # Fallback to ID_LIKE if ID was not 'ubuntu' or 'debian' + if [ "${UPSTREAM_ID}" != "debian" ] && [ "${UPSTREAM_ID}" != "ubuntu" ] + then + UPSTREAM_ID="$(echo "${ID_LIKE,,}" | sed s/\"//g | cut -d' ' -f1)" + fi +elif type lsb_release >/dev/null 2>&1 +then + # linuxbase.org + OS=$(lsb_release -si) + VER=$(lsb_release -sr) +elif [ -f /etc/lsb-release ] +then + # For some versions of Debian/Ubuntu without lsb_release command + # shellcheck source=/dev/null + source /etc/os-release + OS=$DISTRIB_ID + VER=$DISTRIB_RELEASE +elif [ -f /etc/debian_version ] +then + # Older Debian, Ubuntu, etc. + OS=Debian + VER=$(cat /etc/debian_version) +elif [ -f /etc/SuSE-release ] +then + # Older SuSE, etc. + OS=SuSE + VER=$(cat /etc/SuSE-release) +elif [ -f /etc/redhat-release ] +then + # Older Red Hat, CentOS, etc. + OS=RedHat + VER=$(cat /etc/redhat-release) +else + # Fall back to uname, e.g. "Linux ", also works for BSD, etc. + OS=$(uname -s) + VER=$(uname -r) +fi +} + +install_linux_package() { + # Install based on OS + # osInfo[/etc/redhat-release]=yum + # osInfo[/etc/arch-release]=pacman + # osInfo[/etc/gentoo-release]=emerge + # osInfo[/etc/SuSE-release]=zypp + # osInfo[/etc/debian_version]=apt-get + # osInfo[/etc/alpine-release]=apk + if [ -x "$(command -v apt-get)" ] + then + sudo apt-get install "${1}" -y + elif [ -x "$(command -v apk)" ] + then + sudo apk add --no-cache "${1}" + elif [ -x "$(command -v dnf)" ] + then + sudo dnf install "${1}" + elif [ -x "$(command -v zypper)" ] + then + sudo zypper install "${1}" + elif [ -x "$(command -v pacman)" ] + then + sudo pacman -S install "${1}" + elif [ -x "$(command -v yum)" ] + then + sudo yum install "${1}" + elif [ -x "$(command -v emerge)" ] + then + sudo emerge -av "${1}" + else + echo "FAILED TO INSTALL ${1}! Package manager not found: Your OS is currently unsupported." + fi +} + +purge_linux_package() { + if [ -x "$(command -v apt-get)" ] + then + sudo apt-get purge --autoremove -y "${1}" + elif [ -x "$(command -v apk)" ] + then + sudo apk del "${1}" + elif [ -x "$(command -v dnf)" ] + then + sudo dnf purge "${1}" + elif [ -x "$(command -v zypper)" ] + then + sudo zypper remove "${1}" + elif [ -x "$(command -v pacman)" ] + then + sudo pacman -Rs "${1}" + elif [ -x "$(command -v yum)" ] + then + sudo yum remove "${1}" + elif [ -x "$(command -v emerge)" ] + then + sudo emerge -Cv "${1}" + else + echo "FAILED TO REMOVE ${1}! Package manager not found: Your OS is currently unsupported." + fi +} ## bash colors # Reset diff --git a/uninstall.sh b/uninstall.sh new file mode 100644 index 0000000..e3360eb --- /dev/null +++ b/uninstall.sh @@ -0,0 +1,240 @@ +#!/bin/bash + +################################################################################################################## + +if [[ "$EUID" -ne 0 ]] +then + echo "Sorry, you are not root. You now have two options:" + echo + echo "1. Use SUDO directly:" + echo " a) :~$ sudo bash install.sh" + echo + echo "2. Become ROOT and then type your command:" + echo " a) :~$ sudo -i" + echo " b) :~# bash install.sh" + echo + echo "More information can be found here: https://unix.stackexchange.com/a/3064" + exit 1 +fi + +# Download the lib file +if ! curl -fSL https://raw.githubusercontent.com/rustdesk/rustdesk-server-pro/main/lib.sh -o lib.sh +then + echo "Failed to download the lib.sh file. Please try again" + exit 1 +fi + +# shellcheck disable=2034,2059,2164 +true +SCRIPT_NAME="Uninstall Script" +# shellcheck source=lib.sh +source lib.sh + +# Output debugging info if $DEBUG set +if [ "$DEBUG" = "true" ] +then + identify_os + print_text_in_color "$ICyan" "OS: $OS" + print_text_in_color "$ICyan" "VER: $VER" + print_text_in_color "$ICyan" "UPSTREAM_ID: $UPSTREAM_ID" + exit 0 +fi + + +# Switch for Certbot +if [ -d /etc/letsencrypt ] +then + CERTBOT_SWITCH=ON +else + CERTBOT_SWITCH=OFF +fi + +# Uninstall Rustdesk Menu +choice=$(whiptail --title "$TITLE" --checklist \ +"What do you want to uninstall? +$CHECKLIST_GUIDE\n\n$RUN_LATER_GUIDE" "$WT_HEIGHT" "$WT_WIDTH" 4 \ +"curl" "(Removes curl:// linux package)" OFF \ +"nginxconf" "(Removes Rustdesk Nginx config)" OFF \ +"nginxall" "(Removes *everything* releated to Nginx)" ON \ +"wget" "(Removes wget linux package)" ON \ +"unzip" "(Removes unzip linux package)" ON \ +"whiptail" "(Removes whiptail linux package)" ON \ +"dnsutils" "(Removes dnsutils linux package)" ON \ +"bind-utils" "(Removes bind-utils linux package)" ON \ +"bind" "(Removes bind linux package)" ON \ +"UFW" "(Removes UFW linux package plus rules)" ON \ +"Rustdesk LOGs" "(Removes RustDesk log dir)" ON \ +"Rustdesk Server" "(Removes Rustdesk server + services)" ON \ +"Certbot" "(Removes Certbot package plus Let's Encrypt)" "$CERTBOT_SWITCH" 3>&1 1>&2 2>&3) + +case "$choice" in + *"curl"*) + REMOVE_CURL="yes" + ;;& + *"nginxconf"*) + REMOVE_NGINX_CONF="yes" + ;;& + *"nginxall"*) + REMOVE_NGINX_ALL="yes" + ;;& + *"wget"*) + REMOVE_WGET="yes" + ;;& + *"unzip"*) + REMOVE_UNZIP="yes" + ;;& + *"whiptail"*) + REMOVE_WHIPTAIL="yes" + ;;& + *"dnsutils"*) + REMOVE_DNSUTILS="yes" + ;;& + *"bind-utils"*) + REMOVE_BIND_UTILS="yes" + ;;& + *"bind"*) + REMOVE_BIND="yes" + ;;& + *"UFW"*) + REMOVE_UFW="yes" + ;;& + *"Rustdesk LOGs"*) + REMOVE_RUSTDESK_LOG="yes" + ;;& + *"Rustdesk SERVER"*) + REMOVE_RUSTDESK_SERVER="yes" + ;;& + *"Certbot"*) + REMOVE_CERTBOT="yes" + ;;& + *) + ;; +esac + +msg_box "WARNING WARNING WARNING + +This script will remove EVERYTHING that was you chose in the previous selection. +You can choose to opt out after you hit OK." + +if ! yesno_box_no "Are you REALLY sure you want to continue with the uninstallation?" +then + exit 0 +fi + +if [ -n "$UFW" ] +then + # Deleting UFW rules + ufw delete allow 21115:21119/tcp + # ufw delete 22/tcp # If connected to a remote VPS, this deletion will make the connection go down + ufw delete allow 21116/udp + if [ -f "/etc/nginx/sites-available/rustdesk.conf" ] + then + ufw delete allow 80/tcp + ufw delete allow 443/tcp + else + ufw delete allow 21114/tcp + fi + ufw disable + ufw reload +fi + +# Rustdesk Server +if [ -n "$REMOVE_RUSTDESK_SERVER" ] +then + # Rustdesk installation dir + print_text_in_color "$IGreen" "Removing RustDesk Server..." + rm -rf "$RUSTDESK_INSTALL_DIR" + rm -rf /usr/bin/hbbr + rm -rf /usr/bin/hbbr + + # systemctl services + # HBBS + systemctl disable rustdesk-hbbs.service + systemctl stop rustdesk-hbbs.service + rm -f "/etc/systemd/system/rustdesk-hbbs.service" + # HBBR + systemctl disable rustdesk-hbbr.service + systemctl stop rustdesk-hbbr.service + rm -f "/etc/systemd/system/rustdesk-hbbr.service" + # daemon-reload + systemctl daemon-reload +fi + +# Rustdesk LOG +if [ -n "$REMOVE_RUSTDESK_LOG" ] +then + # Rustdesk LOG dir + rm -rf "$RUSTDESK_LOG_DIR" +fi + +# Certbot +if [ -n "$REMOVE_CERTBOT" ] +then + if snap list | grep -q certbot > /dev/null + then + purge_linux_package snap + snap remove certbot + else + purge_linux_package python3-certbot-nginx -y + fi + # Also remove the actual certs + rm -rf /etc/letsencrypt +fi + +# Nginx +if [ -n "$REMOVE_NGINX_CONF" ] +then + rm -f "/etc/nginx/sites-available/rustdesk.conf" + rm -f "/etc/nginx/sites-enabled/rustdesk.conf" + service nginx restart +elif [ -n "$REMOVE_NGINX_ALL" ] +then + purge_linux_package nginx + rm -rf "/etc/nginx" +fi + +# The rest +if [ -n "$REMOVE_CURL" ] +then + purge_linux_package curl +fi + +if [ -n "$REMOVE_WGET" ] +then + purge_linux_package wget +fi + +if [ -n "$REMOVE_UNZIP" ] +then + purge_linux_package unzip +fi + +if [ -n "$REMOVE_DNSUTILS" ] +then + purge_linux_package dnsutils +fi + +if [ -n "$REMOVE_BIND_UTILS" ] +then + purge_linux_package bind-utils +fi + +if [ -n "$REMOVE_BIND" ] +then + purge_linux_package bind +fi + +if [ -n "$REMOVE_UFW" ] +then + purge_linux_package ufw +fi + +msg_box "Uninstallation complete! + +Please hit OK to remove the last file." + +if [ -n "$REMOVE_WHIPTAIL" ] +then + purge_linux_package whiptail +fi +rm -f lib.sh