Browse Source

Update for Red Hat base Linux (#3589)

* Update install.sh

* Update update.sh

* Update x-ui.sh

* Update install.sh

* Update update.sh

* Update x-ui.sh

* fix
JieXu 1 day ago
parent
commit
e8c509c720
3 changed files with 271 additions and 247 deletions
  1. 47 43
      install.sh
  2. 190 186
      update.sh
  3. 34 18
      x-ui.sh

+ 47 - 43
install.sh

@@ -15,7 +15,7 @@ cur_dir=$(pwd)
 if [[ -f /etc/os-release ]]; then
     source /etc/os-release
     release=$ID
-elif [[ -f /usr/lib/os-release ]]; then
+    elif [[ -f /usr/lib/os-release ]]; then
     source /usr/lib/os-release
     release=$ID
 else
@@ -26,14 +26,14 @@ echo "The OS release is: $release"
 
 arch() {
     case "$(uname -m)" in
-    x86_64 | x64 | amd64) echo 'amd64' ;;
-    i*86 | x86) echo '386' ;;
-    armv8* | armv8 | arm64 | aarch64) echo 'arm64' ;;
-    armv7* | armv7 | arm) echo 'armv7' ;;
-    armv6* | armv6) echo 'armv6' ;;
-    armv5* | armv5) echo 'armv5' ;;
-    s390x) echo 's390x' ;;
-    *) echo -e "${green}Unsupported CPU architecture! ${plain}" && rm -f install.sh && exit 1 ;;
+        x86_64 | x64 | amd64) echo 'amd64' ;;
+        i*86 | x86) echo '386' ;;
+        armv8* | armv8 | arm64 | aarch64) echo 'arm64' ;;
+        armv7* | armv7 | arm) echo 'armv7' ;;
+        armv6* | armv6) echo 'armv6' ;;
+        armv5* | armv5) echo 'armv5' ;;
+        s390x) echo 's390x' ;;
+        *) echo -e "${green}Unsupported CPU architecture! ${plain}" && rm -f install.sh && exit 1 ;;
     esac
 }
 
@@ -41,26 +41,30 @@ echo "Arch: $(arch)"
 
 install_base() {
     case "${release}" in
-    ubuntu | debian | armbian)
-        apt-get update && apt-get install -y -q wget curl tar tzdata
+        ubuntu | debian | armbian)
+            apt-get update && apt-get install -y -q wget curl tar tzdata
         ;;
-    centos | rhel | almalinux | rocky | ol)
-        yum -y update && yum install -y -q wget curl tar tzdata
+        fedora | amzn | virtuozzo | rhel | almalinux | rocky | ol)
+            dnf -y update && dnf install -y -q wget curl tar tzdata
         ;;
-    fedora | amzn | virtuozzo)
-        dnf -y update && dnf install -y -q wget curl tar tzdata
+        centos)
+            if [[ "${VERSION_ID}" =~ ^7 ]]; then
+                yum -y update && yum install -y wget curl tar tzdata
+            else
+                dnf -y update && dnf install -y -q wget curl tar tzdata
+            fi
         ;;
-    arch | manjaro | parch)
-        pacman -Syu && pacman -Syu --noconfirm wget curl tar tzdata
+        arch | manjaro | parch)
+            pacman -Syu && pacman -Syu --noconfirm wget curl tar tzdata
         ;;
-    opensuse-tumbleweed | opensuse-leap)
-        zypper refresh && zypper -q install -y wget curl tar timezone
+        opensuse-tumbleweed | opensuse-leap)
+            zypper refresh && zypper -q install -y wget curl tar timezone
         ;;
-    alpine)
-        apk update && apk add wget curl tar tzdata
+        alpine)
+            apk update && apk add wget curl tar tzdata
         ;;
-    *)
-        apt-get update && apt-get install -y -q wget curl tar tzdata
+        *)
+            apt-get update && apt-get install -y -q wget curl tar tzdata
         ;;
     esac
 }
@@ -77,11 +81,11 @@ config_after_install() {
     local existing_port=$(/usr/local/x-ui/x-ui setting -show true | grep -Eo 'port: .+' | awk '{print $2}')
     local URL_lists=(
         "https://api4.ipify.org"
-		"https://ipv4.icanhazip.com"
-		"https://v4.api.ipinfo.io/ip"
-		"https://ipv4.myexternalip.com/raw"
-		"https://4.ident.me"
-		"https://check-host.net/ip"
+        "https://ipv4.icanhazip.com"
+        "https://v4.api.ipinfo.io/ip"
+        "https://ipv4.myexternalip.com/raw"
+        "https://4.ident.me"
+        "https://check-host.net/ip"
     )
     local server_ip=""
     for ip_address in "${URL_lists[@]}"; do
@@ -90,13 +94,13 @@ config_after_install() {
             break
         fi
     done
-
+    
     if [[ ${#existing_webBasePath} -lt 4 ]]; then
         if [[ "$existing_hasDefaultCredential" == "true" ]]; then
             local config_webBasePath=$(gen_random_string 18)
             local config_username=$(gen_random_string 10)
             local config_password=$(gen_random_string 10)
-
+            
             read -rp "Would you like to customize the Panel Port settings? (If not, a random port will be applied) [y/n]: " config_confirm
             if [[ "${config_confirm}" == "y" || "${config_confirm}" == "Y" ]]; then
                 read -rp "Please set up the panel port: " config_port
@@ -105,7 +109,7 @@ config_after_install() {
                 local config_port=$(shuf -i 1024-62000 -n 1)
                 echo -e "${yellow}Generated random port: ${config_port}${plain}"
             fi
-
+            
             /usr/local/x-ui/x-ui setting -username "${config_username}" -password "${config_password}" -port "${config_port}" -webBasePath "${config_webBasePath}"
             echo -e "This is a fresh installation, generating random login info for security concerns:"
             echo -e "###############################################"
@@ -126,7 +130,7 @@ config_after_install() {
         if [[ "$existing_hasDefaultCredential" == "true" ]]; then
             local config_username=$(gen_random_string 10)
             local config_password=$(gen_random_string 10)
-
+            
             echo -e "${yellow}Default credentials detected. Security update required...${plain}"
             /usr/local/x-ui/x-ui setting -username "${config_username}" -password "${config_password}"
             echo -e "Generated new random login credentials:"
@@ -138,13 +142,13 @@ config_after_install() {
             echo -e "${green}Username, Password, and WebBasePath are properly set. Exiting...${plain}"
         fi
     fi
-
+    
     /usr/local/x-ui/x-ui migrate
 }
 
 install_x-ui() {
     cd /usr/local/
-
+    
     # Download resources
     if [ $# == 0 ]; then
         tag_version=$(curl -Ls "https://api.github.com/repos/MHSanaei/3x-ui/releases/latest" | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/')
@@ -166,12 +170,12 @@ install_x-ui() {
         tag_version=$1
         tag_version_numeric=${tag_version#v}
         min_version="2.3.5"
-
+        
         if [[ "$(printf '%s\n' "$min_version" "$tag_version_numeric" | sort -V | head -n1)" != "$min_version" ]]; then
             echo -e "${red}Please use a newer version (at least v2.3.5). Exiting installation.${plain}"
             exit 1
         fi
-
+        
         url="https://github.com/MHSanaei/3x-ui/releases/download/${tag_version}/x-ui-linux-$(arch).tar.gz"
         echo -e "Beginning to install x-ui $1"
         wget --inet4-only -N -O /usr/local/x-ui-linux-$(arch).tar.gz ${url}
@@ -185,7 +189,7 @@ install_x-ui() {
         echo -e "${red}Failed to download x-ui.sh${plain}"
         exit 1
     fi
-
+    
     # Stop x-ui service and remove old resources
     if [[ -e /usr/local/x-ui/ ]]; then
         if [[ $release == "alpine" ]]; then
@@ -195,7 +199,7 @@ install_x-ui() {
         fi
         rm /usr/local/x-ui/ -rf
     fi
-
+    
     # Extract resources and set permissions
     tar zxvf x-ui-linux-$(arch).tar.gz
     rm x-ui-linux-$(arch).tar.gz -f
@@ -203,19 +207,19 @@ install_x-ui() {
     cd x-ui
     chmod +x x-ui
     chmod +x x-ui.sh
-
+    
     # Check the system's architecture and rename the file accordingly
     if [[ $(arch) == "armv5" || $(arch) == "armv6" || $(arch) == "armv7" ]]; then
         mv bin/xray-linux-$(arch) bin/xray-linux-arm
         chmod +x bin/xray-linux-arm
     fi
     chmod +x x-ui bin/xray-linux-$(arch)
-
+    
     # Update x-ui cli and se set permission
     mv -f /usr/bin/x-ui-temp /usr/bin/x-ui
     chmod +x /usr/bin/x-ui
     config_after_install
-
+    
     if [[ $release == "alpine" ]]; then
         wget --inet4-only -O /etc/init.d/x-ui https://raw.githubusercontent.com/MHSanaei/3x-ui/main/x-ui.rc
         if [[ $? -ne 0 ]]; then
@@ -231,7 +235,7 @@ install_x-ui() {
         systemctl enable x-ui
         systemctl start x-ui
     fi
-
+    
     echo -e "${green}x-ui ${tag_version}${plain} installation finished, it is running now..."
     echo -e ""
     echo -e "┌───────────────────────────────────────────────────────┐
@@ -251,7 +255,7 @@ install_x-ui() {
 │  ${blue}x-ui legacy${plain}       - Legacy version                   │
 │  ${blue}x-ui install${plain}      - Install                          │
 │  ${blue}x-ui uninstall${plain}    - Uninstall                        │
-└───────────────────────────────────────────────────────┘"
+    └───────────────────────────────────────────────────────┘"
 }
 
 echo -e "${green}Running...${plain}"

+ 190 - 186
update.sh

@@ -9,233 +9,237 @@ plain='\033[0m'
 # Don't edit this config
 b_source="${BASH_SOURCE[0]}"
 while [ -h "$b_source" ]; do
-	b_dir="$(cd -P "$(dirname "$b_source")" >/dev/null 2>&1 && pwd || pwd -P)"
-	b_source="$(readlink "$b_source")"
-	[[ $b_source != /* ]] && b_source="$b_dir/$b_source"
+    b_dir="$(cd -P "$(dirname "$b_source")" >/dev/null 2>&1 && pwd || pwd -P)"
+    b_source="$(readlink "$b_source")"
+    [[ $b_source != /* ]] && b_source="$b_dir/$b_source"
 done
 cur_dir="$(cd -P "$(dirname "$b_source")" >/dev/null 2>&1 && pwd || pwd -P)"
 script_name=$(basename "$0")
 
 # Check command exist function
 _command_exists() {
-	type "$1" &>/dev/null
+    type "$1" &>/dev/null
 }
 
 # Fail, log and exit script function
 _fail() {
-	local msg=${1}
-	echo -e "${red}${msg}${plain}"
-	exit 2
+    local msg=${1}
+    echo -e "${red}${msg}${plain}"
+    exit 2
 }
 
 # check root
 [[ $EUID -ne 0 ]] && _fail "FATAL ERROR: Please run this script with root privilege."
 
 if _command_exists wget; then
-	wget_bin=$(which wget)
+    wget_bin=$(which wget)
 else
-	_fail "ERROR: Command 'wget' not found."
+    _fail "ERROR: Command 'wget' not found."
 fi
 
 if _command_exists curl; then
-	curl_bin=$(which curl)
+    curl_bin=$(which curl)
 else
-	_fail "ERROR: Command 'curl' not found."
+    _fail "ERROR: Command 'curl' not found."
 fi
 
 # Check OS and set release variable
 if [[ -f /etc/os-release ]]; then
-	source /etc/os-release
-	release=$ID
-elif [[ -f /usr/lib/os-release ]]; then
-	source /usr/lib/os-release
-	release=$ID
+    source /etc/os-release
+    release=$ID
+    elif [[ -f /usr/lib/os-release ]]; then
+    source /usr/lib/os-release
+    release=$ID
 else
-	_fail "Failed to check the system OS, please contact the author!"
+    _fail "Failed to check the system OS, please contact the author!"
 fi
 echo "The OS release is: $release"
 
 arch() {
-	case "$(uname -m)" in
-	x86_64 | x64 | amd64) echo 'amd64' ;;
-	i*86 | x86) echo '386' ;;
-	armv8* | armv8 | arm64 | aarch64) echo 'arm64' ;;
-	armv7* | armv7 | arm) echo 'armv7' ;;
-	armv6* | armv6) echo 'armv6' ;;
-	armv5* | armv5) echo 'armv5' ;;
-	s390x) echo 's390x' ;;
-	*) echo -e "${red}Unsupported CPU architecture!${plain}" && rm -f "${cur_dir}/${script_name}" >/dev/null 2>&1 && exit 2;;
-	esac
+    case "$(uname -m)" in
+        x86_64 | x64 | amd64) echo 'amd64' ;;
+        i*86 | x86) echo '386' ;;
+        armv8* | armv8 | arm64 | aarch64) echo 'arm64' ;;
+        armv7* | armv7 | arm) echo 'armv7' ;;
+        armv6* | armv6) echo 'armv6' ;;
+        armv5* | armv5) echo 'armv5' ;;
+        s390x) echo 's390x' ;;
+        *) echo -e "${red}Unsupported CPU architecture!${plain}" && rm -f "${cur_dir}/${script_name}" >/dev/null 2>&1 && exit 2;;
+    esac
 }
 
 echo "Arch: $(arch)"
 
 install_base() {
-	echo -e "${green}Updating and install dependency packages...${plain}"
-	case "${release}" in
-	ubuntu | debian | armbian)
-		apt-get update >/dev/null 2>&1 && apt-get install -y -q wget curl tar tzdata >/dev/null 2>&1
-		;;
-	centos | rhel | almalinux | rocky | ol)
-		yum -y update >/dev/null 2>&1 && yum install -y -q wget curl tar tzdata >/dev/null 2>&1
-		;;
-	fedora | amzn | virtuozzo)
-		dnf -y update >/dev/null 2>&1 && dnf install -y -q wget curl tar tzdata >/dev/null 2>&1
-		;;
-	arch | manjaro | parch)
-		pacman -Syu >/dev/null 2>&1 && pacman -Syu --noconfirm wget curl tar tzdata >/dev/null 2>&1
-		;;
-	opensuse-tumbleweed | opensuse-leap)
-		zypper refresh >/dev/null 2>&1 && zypper -q install -y wget curl tar timezone >/dev/null 2>&1
-		;;
-	alpine)
-		apk update >/dev/null 2>&1 && apk add wget curl tar tzdata >/dev/null 2>&1
-		;;
-	*)
-		apt-get update >/dev/null 2>&1 && apt install -y -q wget curl tar tzdata >/dev/null 2>&1
-		;;
-	esac
+    echo -e "${green}Updating and install dependency packages...${plain}"
+    case "${release}" in
+        ubuntu | debian | armbian)
+            apt-get update >/dev/null 2>&1 && apt-get install -y -q wget curl tar tzdata >/dev/null 2>&1
+        ;;
+        fedora | amzn | virtuozzo | rhel | almalinux | rocky | ol)
+            dnf -y update >/dev/null 2>&1 && dnf install -y -q wget curl tar tzdata >/dev/null 2>&1
+        ;;
+        centos)
+            if [[ "${VERSION_ID}" =~ ^7 ]]; then
+                yum -y update >/dev/null 2>&1 && yum install -y -q wget curl tar tzdata >/dev/null 2>&1
+            else
+                dnf -y update >/dev/null 2>&1 && dnf install -y -q wget curl tar tzdata >/dev/null 2>&1
+            fi
+        ;;
+        arch | manjaro | parch)
+            pacman -Syu >/dev/null 2>&1 && pacman -Syu --noconfirm wget curl tar tzdata >/dev/null 2>&1
+        ;;
+        opensuse-tumbleweed | opensuse-leap)
+            zypper refresh >/dev/null 2>&1 && zypper -q install -y wget curl tar timezone >/dev/null 2>&1
+        ;;
+        alpine)
+            apk update >/dev/null 2>&1 && apk add wget curl tar tzdata >/dev/null 2>&1
+        ;;
+        *)
+            apt-get update >/dev/null 2>&1 && apt install -y -q wget curl tar tzdata >/dev/null 2>&1
+        ;;
+    esac
 }
 
 config_after_update() {
-	echo -e "${yellow}x-ui settings:${plain}"
-	/usr/local/x-ui/x-ui setting -show true
-	/usr/local/x-ui/x-ui migrate
+    echo -e "${yellow}x-ui settings:${plain}"
+    /usr/local/x-ui/x-ui setting -show true
+    /usr/local/x-ui/x-ui migrate
 }
 
 update_x-ui() {
-	cd /usr/local/
-
-	if [ -f "/usr/local/x-ui/x-ui" ]; then
-		current_xui_version=$(/usr/local/x-ui/x-ui -v)
-		echo -e "${green}Current x-ui version: ${current_xui_version}${plain}"
-	else
-		_fail "ERROR: Current x-ui version: unknown"
-	fi
-
-	echo -e "${green}Downloading new x-ui version...${plain}"
-
-	tag_version=$(${curl_bin} -Ls "https://api.github.com/repos/MHSanaei/3x-ui/releases/latest" 2>/dev/null | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/')
-	if [[ ! -n "$tag_version" ]]; then
-		echo -e "${yellow}Trying to fetch version with IPv4...${plain}"
-		tag_version=$(${curl_bin} -4 -Ls "https://api.github.com/repos/MHSanaei/3x-ui/releases/latest" | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/')
-		if [[ ! -n "$tag_version" ]]; then
-			_fail "ERROR: Failed to fetch x-ui version, it may be due to GitHub API restrictions, please try it later"
-		fi
-	fi
-	echo -e "Got x-ui latest version: ${tag_version}, beginning the installation..."
-	${wget_bin} -N -O /usr/local/x-ui-linux-$(arch).tar.gz https://github.com/MHSanaei/3x-ui/releases/download/${tag_version}/x-ui-linux-$(arch).tar.gz 2>/dev/null
-	if [[ $? -ne 0 ]]; then
-		echo -e "${yellow}Trying to fetch version with IPv4...${plain}"
-		${wget_bin} --inet4-only -N -O /usr/local/x-ui-linux-$(arch).tar.gz https://github.com/MHSanaei/3x-ui/releases/download/${tag_version}/x-ui-linux-$(arch).tar.gz 2>/dev/null
-		if [[ $? -ne 0 ]]; then
-			_fail "ERROR: Failed to download x-ui, please be sure that your server can access GitHub"
-		fi
-	fi
-
-	if [[ -e /usr/local/x-ui/ ]]; then
-		echo -e "${green}Stopping x-ui...${plain}"
-		if [[ $release == "alpine" ]]; then
-			if [ -f "/etc/init.d/x-ui" ]; then
-				rc-service x-ui stop >/dev/null 2>&1
-				rc-update del x-ui >/dev/null 2>&1
-				echo -e "${green}Removing old service unit version...${plain}"
-				rm -f /etc/init.d/x-ui >/dev/null 2>&1
-			else
-				rm x-ui-linux-$(arch).tar.gz -f >/dev/null 2>&1
-				_fail "ERROR: x-ui service unit not installed."
-			fi
-		else
-			if [ -f "/etc/systemd/system/x-ui.service" ]; then
-				systemctl stop x-ui >/dev/null 2>&1
-				systemctl disable x-ui >/dev/null 2>&1
-				echo -e "${green}Removing old systemd unit version...${plain}"
-				rm /etc/systemd/system/x-ui.service -f >/dev/null 2>&1
-				systemctl daemon-reload >/dev/null 2>&1
-			else
-				rm x-ui-linux-$(arch).tar.gz -f >/dev/null 2>&1
-				_fail "ERROR: x-ui systemd unit not installed."
-			fi
-		fi
-		echo -e "${green}Removing old x-ui version...${plain}"
-		rm /usr/bin/x-ui -f >/dev/null 2>&1
-		rm /usr/local/x-ui/x-ui.service -f >/dev/null 2>&1
-		rm /usr/local/x-ui/x-ui -f >/dev/null 2>&1
-		rm /usr/local/x-ui/x-ui.sh -f >/dev/null 2>&1
-		echo -e "${green}Removing old xray version...${plain}"
-		rm /usr/local/x-ui/bin/xray-linux-amd64 -f >/dev/null 2>&1
-		echo -e "${green}Removing old README and LICENSE file...${plain}"
-		rm /usr/local/x-ui/bin/README.md -f >/dev/null 2>&1
-		rm /usr/local/x-ui/bin/LICENSE -f >/dev/null 2>&1
-	else
-		rm x-ui-linux-$(arch).tar.gz -f >/dev/null 2>&1
-		_fail "ERROR: x-ui not installed."
-	fi
-
-	echo -e "${green}Installing new x-ui version...${plain}"
-	tar zxvf x-ui-linux-$(arch).tar.gz >/dev/null 2>&1
-	rm x-ui-linux-$(arch).tar.gz -f >/dev/null 2>&1
-	cd x-ui >/dev/null 2>&1
-	chmod +x x-ui >/dev/null 2>&1
-
-	# Check the system's architecture and rename the file accordingly
-	if [[ $(arch) == "armv5" || $(arch) == "armv6" || $(arch) == "armv7" ]]; then
-		mv bin/xray-linux-$(arch) bin/xray-linux-arm >/dev/null 2>&1
-		chmod +x bin/xray-linux-arm >/dev/null 2>&1
-	fi
-
-	chmod +x x-ui bin/xray-linux-$(arch) >/dev/null 2>&1
-
-	echo -e "${green}Downloading and installing x-ui.sh script...${plain}"
-	${wget_bin} -O /usr/bin/x-ui https://raw.githubusercontent.com/MHSanaei/3x-ui/main/x-ui.sh >/dev/null 2>&1
-	if [[ $? -ne 0 ]]; then
-		echo -e "${yellow}Trying to fetch x-ui with IPv4...${plain}"
-		${wget_bin} --inet4-only -O /usr/bin/x-ui https://raw.githubusercontent.com/MHSanaei/3x-ui/main/x-ui.sh >/dev/null 2>&1
-		if [[ $? -ne 0 ]]; then
-			_fail "ERROR: Failed to download x-ui.sh script, please be sure that your server can access GitHub"
-		fi
-	fi
-
-	chmod +x /usr/local/x-ui/x-ui.sh >/dev/null 2>&1
-	chmod +x /usr/bin/x-ui >/dev/null 2>&1
-
-	echo -e "${green}Changing owner...${plain}"
-	chown -R root:root /usr/local/x-ui >/dev/null 2>&1
-
-	if [ -f "/usr/local/x-ui/bin/config.json" ]; then
-		echo -e "${green}Changing on config file permissions...${plain}"
-		chmod 640 /usr/local/x-ui/bin/config.json >/dev/null 2>&1
-	fi
-
-	if [[ $release == "alpine" ]]; then
-		echo -e "${green}Downloading and installing startup unit x-ui.rc...${plain}"
-		${wget_bin} -O /etc/init.d/x-ui https://raw.githubusercontent.com/MHSanaei/3x-ui/main/x-ui.rc >/dev/null 2>&1
-		if [[ $? -ne 0 ]]; then
-			${wget_bin} --inet4-only -O /etc/init.d/x-ui https://raw.githubusercontent.com/MHSanaei/3x-ui/main/x-ui.rc >/dev/null 2>&1
-			if [[ $? -ne 0 ]]; then
-				_fail "ERROR: Failed to download startup unit x-ui.rc, please be sure that your server can access GitHub"
-			fi
-		fi
-		chmod +x /etc/init.d/x-ui >/dev/null 2>&1
-		chown root:root /etc/init.d/x-ui >/dev/null 2>&1
-		rc-update add x-ui >/dev/null 2>&1
-		rc-service x-ui start >/dev/null 2>&1
-	else
-		echo -e "${green}Installing systemd unit...${plain}"
-		cp -f x-ui.service /etc/systemd/system/ >/dev/null 2>&1
-		chown root:root /etc/systemd/system/x-ui.service >/dev/null 2>&1
-		systemctl daemon-reload >/dev/null 2>&1
-		systemctl enable x-ui >/dev/null 2>&1
-		systemctl start x-ui >/dev/null 2>&1
-	fi
-
-	config_after_update
-
-	echo -e "${green}x-ui ${tag_version}${plain} updating finished, it is running now..."
-	echo -e ""
-	echo -e "┌───────────────────────────────────────────────────────┐
+    cd /usr/local/
+    
+    if [ -f "/usr/local/x-ui/x-ui" ]; then
+        current_xui_version=$(/usr/local/x-ui/x-ui -v)
+        echo -e "${green}Current x-ui version: ${current_xui_version}${plain}"
+    else
+        _fail "ERROR: Current x-ui version: unknown"
+    fi
+    
+    echo -e "${green}Downloading new x-ui version...${plain}"
+    
+    tag_version=$(${curl_bin} -Ls "https://api.github.com/repos/MHSanaei/3x-ui/releases/latest" 2>/dev/null | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/')
+    if [[ ! -n "$tag_version" ]]; then
+        echo -e "${yellow}Trying to fetch version with IPv4...${plain}"
+        tag_version=$(${curl_bin} -4 -Ls "https://api.github.com/repos/MHSanaei/3x-ui/releases/latest" | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/')
+        if [[ ! -n "$tag_version" ]]; then
+            _fail "ERROR: Failed to fetch x-ui version, it may be due to GitHub API restrictions, please try it later"
+        fi
+    fi
+    echo -e "Got x-ui latest version: ${tag_version}, beginning the installation..."
+    ${wget_bin} -N -O /usr/local/x-ui-linux-$(arch).tar.gz https://github.com/MHSanaei/3x-ui/releases/download/${tag_version}/x-ui-linux-$(arch).tar.gz 2>/dev/null
+    if [[ $? -ne 0 ]]; then
+        echo -e "${yellow}Trying to fetch version with IPv4...${plain}"
+        ${wget_bin} --inet4-only -N -O /usr/local/x-ui-linux-$(arch).tar.gz https://github.com/MHSanaei/3x-ui/releases/download/${tag_version}/x-ui-linux-$(arch).tar.gz 2>/dev/null
+        if [[ $? -ne 0 ]]; then
+            _fail "ERROR: Failed to download x-ui, please be sure that your server can access GitHub"
+        fi
+    fi
+    
+    if [[ -e /usr/local/x-ui/ ]]; then
+        echo -e "${green}Stopping x-ui...${plain}"
+        if [[ $release == "alpine" ]]; then
+            if [ -f "/etc/init.d/x-ui" ]; then
+                rc-service x-ui stop >/dev/null 2>&1
+                rc-update del x-ui >/dev/null 2>&1
+                echo -e "${green}Removing old service unit version...${plain}"
+                rm -f /etc/init.d/x-ui >/dev/null 2>&1
+            else
+                rm x-ui-linux-$(arch).tar.gz -f >/dev/null 2>&1
+                _fail "ERROR: x-ui service unit not installed."
+            fi
+        else
+            if [ -f "/etc/systemd/system/x-ui.service" ]; then
+                systemctl stop x-ui >/dev/null 2>&1
+                systemctl disable x-ui >/dev/null 2>&1
+                echo -e "${green}Removing old systemd unit version...${plain}"
+                rm /etc/systemd/system/x-ui.service -f >/dev/null 2>&1
+                systemctl daemon-reload >/dev/null 2>&1
+            else
+                rm x-ui-linux-$(arch).tar.gz -f >/dev/null 2>&1
+                _fail "ERROR: x-ui systemd unit not installed."
+            fi
+        fi
+        echo -e "${green}Removing old x-ui version...${plain}"
+        rm /usr/bin/x-ui -f >/dev/null 2>&1
+        rm /usr/local/x-ui/x-ui.service -f >/dev/null 2>&1
+        rm /usr/local/x-ui/x-ui -f >/dev/null 2>&1
+        rm /usr/local/x-ui/x-ui.sh -f >/dev/null 2>&1
+        echo -e "${green}Removing old xray version...${plain}"
+        rm /usr/local/x-ui/bin/xray-linux-amd64 -f >/dev/null 2>&1
+        echo -e "${green}Removing old README and LICENSE file...${plain}"
+        rm /usr/local/x-ui/bin/README.md -f >/dev/null 2>&1
+        rm /usr/local/x-ui/bin/LICENSE -f >/dev/null 2>&1
+    else
+        rm x-ui-linux-$(arch).tar.gz -f >/dev/null 2>&1
+        _fail "ERROR: x-ui not installed."
+    fi
+    
+    echo -e "${green}Installing new x-ui version...${plain}"
+    tar zxvf x-ui-linux-$(arch).tar.gz >/dev/null 2>&1
+    rm x-ui-linux-$(arch).tar.gz -f >/dev/null 2>&1
+    cd x-ui >/dev/null 2>&1
+    chmod +x x-ui >/dev/null 2>&1
+    
+    # Check the system's architecture and rename the file accordingly
+    if [[ $(arch) == "armv5" || $(arch) == "armv6" || $(arch) == "armv7" ]]; then
+        mv bin/xray-linux-$(arch) bin/xray-linux-arm >/dev/null 2>&1
+        chmod +x bin/xray-linux-arm >/dev/null 2>&1
+    fi
+    
+    chmod +x x-ui bin/xray-linux-$(arch) >/dev/null 2>&1
+    
+    echo -e "${green}Downloading and installing x-ui.sh script...${plain}"
+    ${wget_bin} -O /usr/bin/x-ui https://raw.githubusercontent.com/MHSanaei/3x-ui/main/x-ui.sh >/dev/null 2>&1
+    if [[ $? -ne 0 ]]; then
+        echo -e "${yellow}Trying to fetch x-ui with IPv4...${plain}"
+        ${wget_bin} --inet4-only -O /usr/bin/x-ui https://raw.githubusercontent.com/MHSanaei/3x-ui/main/x-ui.sh >/dev/null 2>&1
+        if [[ $? -ne 0 ]]; then
+            _fail "ERROR: Failed to download x-ui.sh script, please be sure that your server can access GitHub"
+        fi
+    fi
+    
+    chmod +x /usr/local/x-ui/x-ui.sh >/dev/null 2>&1
+    chmod +x /usr/bin/x-ui >/dev/null 2>&1
+    
+    echo -e "${green}Changing owner...${plain}"
+    chown -R root:root /usr/local/x-ui >/dev/null 2>&1
+    
+    if [ -f "/usr/local/x-ui/bin/config.json" ]; then
+        echo -e "${green}Changing on config file permissions...${plain}"
+        chmod 640 /usr/local/x-ui/bin/config.json >/dev/null 2>&1
+    fi
+    
+    if [[ $release == "alpine" ]]; then
+        echo -e "${green}Downloading and installing startup unit x-ui.rc...${plain}"
+        ${wget_bin} -O /etc/init.d/x-ui https://raw.githubusercontent.com/MHSanaei/3x-ui/main/x-ui.rc >/dev/null 2>&1
+        if [[ $? -ne 0 ]]; then
+            ${wget_bin} --inet4-only -O /etc/init.d/x-ui https://raw.githubusercontent.com/MHSanaei/3x-ui/main/x-ui.rc >/dev/null 2>&1
+            if [[ $? -ne 0 ]]; then
+                _fail "ERROR: Failed to download startup unit x-ui.rc, please be sure that your server can access GitHub"
+            fi
+        fi
+        chmod +x /etc/init.d/x-ui >/dev/null 2>&1
+        chown root:root /etc/init.d/x-ui >/dev/null 2>&1
+        rc-update add x-ui >/dev/null 2>&1
+        rc-service x-ui start >/dev/null 2>&1
+    else
+        echo -e "${green}Installing systemd unit...${plain}"
+        cp -f x-ui.service /etc/systemd/system/ >/dev/null 2>&1
+        chown root:root /etc/systemd/system/x-ui.service >/dev/null 2>&1
+        systemctl daemon-reload >/dev/null 2>&1
+        systemctl enable x-ui >/dev/null 2>&1
+        systemctl start x-ui >/dev/null 2>&1
+    fi
+    
+    config_after_update
+    
+    echo -e "${green}x-ui ${tag_version}${plain} updating finished, it is running now..."
+    echo -e ""
+    echo -e "┌───────────────────────────────────────────────────────┐
 │  ${blue}x-ui control menu usages (subcommands):${plain}              │
-│                                                       │	
+│                                                       │
 │  ${blue}x-ui${plain}              - Admin Management Script          │
 │  ${blue}x-ui start${plain}        - Start                            │
 │  ${blue}x-ui stop${plain}         - Stop                             │
@@ -250,7 +254,7 @@ update_x-ui() {
 │  ${blue}x-ui legacy${plain}       - Legacy version                   │
 │  ${blue}x-ui install${plain}      - Install                          │
 │  ${blue}x-ui uninstall${plain}    - Uninstall                        │
-└───────────────────────────────────────────────────────┘"
+    └───────────────────────────────────────────────────────┘"
 }
 
 echo -e "${green}Running...${plain}"

+ 34 - 18
x-ui.sh

@@ -509,12 +509,16 @@ enable_bbr() {
     ubuntu | debian | armbian)
         apt-get update && apt-get install -yqq --no-install-recommends ca-certificates
         ;;
-    centos | rhel | almalinux | rocky | ol)
-        yum -y update && yum -y install ca-certificates
-        ;;
-    fedora | amzn | virtuozzo)
+    fedora | amzn | virtuozzo | rhel | almalinux | rocky | ol)
         dnf -y update && dnf -y install ca-certificates
         ;;
+    centos)
+            if [[ "${VERSION_ID}" =~ ^7 ]]; then
+                yum -y update && yum -y install ca-certificates
+            else
+                dnf -y update && dnf -y install ca-certificates
+            fi
+        ;;
     arch | manjaro | parch)
         pacman -Sy --noconfirm ca-certificates
         ;;
@@ -1073,12 +1077,15 @@ ssl_cert_issue() {
     ubuntu | debian | armbian)
         apt-get update && apt-get install socat -y
         ;;
-    centos | rhel | almalinux | rocky | ol)
-        yum -y update && yum -y install socat
-        ;;
-    fedora | amzn | virtuozzo)
+    fedora | amzn | virtuozzo | rhel | almalinux | rocky | ol)
         dnf -y update && dnf -y install socat
         ;;
+    centos)
+            if [[ "${VERSION_ID}" =~ ^7 ]]; then
+                yum -y update && yum -y install socat
+            else
+                dnf -y update && dnf -y install socat
+            fi
     arch | manjaro | parch)
         pacman -Sy --noconfirm socat
         ;;
@@ -1537,13 +1544,17 @@ install_iplimit() {
         armbian)
             apt-get update && apt-get install fail2ban -y
             ;;
-        centos | rhel | almalinux | rocky | ol)
-            yum update -y && yum install epel-release -y
-            yum -y install fail2ban
-            ;;
-        fedora | amzn | virtuozzo)
+        fedora | amzn | virtuozzo | rhel | almalinux | rocky | ol)
             dnf -y update && dnf -y install fail2ban
             ;;
+        centos)
+            if [[ "${VERSION_ID}" =~ ^7 ]]; then
+                yum update -y && yum install epel-release -y
+                yum -y install fail2ban
+            else
+                dnf -y update && dnf -y install fail2ban
+            fi
+            ;;
         arch | manjaro | parch)
             pacman -Syu --noconfirm fail2ban
             ;;
@@ -1637,14 +1648,19 @@ remove_iplimit() {
             apt-get purge -y fail2ban -y
             apt-get autoremove -y
             ;;
-        centos | rhel | almalinux | rocky | ol)
-            yum remove fail2ban -y
-            yum autoremove -y
-            ;;
-        fedora | amzn | virtuozzo)
+        fedora | amzn | virtuozzo | rhel | almalinux | rocky | ol)
             dnf remove fail2ban -y
             dnf autoremove -y
             ;;
+        centos)
+            if [[ "${VERSION_ID}" =~ ^7 ]]; then    
+                yum remove fail2ban -y
+                yum autoremove -y
+            else
+                dnf remove fail2ban -y
+                dnf autoremove -y
+            fi
+            ;;
         arch | manjaro | parch)
             pacman -Rns --noconfirm fail2ban
             ;;