feat(installer): add -version flag to pin 3x-ui release
Accepts 3.4.2 or v3.4.2; validates the tag exists on GitHub before download, falls back to latest when omitted. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5
parent
c3926222c2
commit
6d0876fd19
@@ -27,7 +27,7 @@ effect on servers only after push to `main`.
|
|||||||
## What x-ui-latest.sh does
|
## What x-ui-latest.sh does
|
||||||
|
|
||||||
1. Checks OS (Ubuntu 24.04/26.04, Debian 12/13) and rejects QEMU-emulated CPUs
|
1. Checks OS (Ubuntu 24.04/26.04, Debian 12/13) and rejects QEMU-emulated CPUs
|
||||||
2. Parses CLI arguments (`-install y`, `-subdomain`, `-reality_domain`, `-auto_domain y`, `-uninstall y`)
|
2. Parses CLI arguments (`-install y`, `-subdomain`, `-reality_domain`, `-auto_domain y`, `-version <ver>`, `-uninstall y`)
|
||||||
3. Validates domains (panel ≠ REALITY), then stops/cleans any previous install
|
3. Validates domains (panel ≠ REALITY), then stops/cleans any previous install
|
||||||
4. Installs packages (`install_packages`) — nginx-full, certbot, sqlite3, ufw, mtr, python3 …
|
4. Installs packages (`install_packages`) — nginx-full, certbot, sqlite3, ufw, mtr, python3 …
|
||||||
5. Obtains Let's Encrypt certs via certbot standalone (`get_ssl_certs`) — panel + reality domains
|
5. Obtains Let's Encrypt certs via certbot standalone (`get_ssl_certs`) — panel + reality domains
|
||||||
|
|||||||
@@ -88,6 +88,7 @@ bash x-ui-latest.sh -uninstall y
|
|||||||
| `-subdomain <домен>` | Домен панели и подписок |
|
| `-subdomain <домен>` | Домен панели и подписок |
|
||||||
| `-reality_domain <домен>` | Домен назначения для REALITY |
|
| `-reality_domain <домен>` | Домен назначения для REALITY |
|
||||||
| `-auto_domain y` | Автоопределение домена (без ручного ввода) |
|
| `-auto_domain y` | Автоопределение домена (без ручного ввода) |
|
||||||
|
| `-version <версия>` | Установить конкретную версию 3x-ui (например `3.4.2`), по умолчанию — последняя |
|
||||||
| `-uninstall y` | Полное удаление |
|
| `-uninstall y` | Полное удаление |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|||||||
@@ -88,6 +88,7 @@ bash x-ui-latest.sh -uninstall y
|
|||||||
| `-subdomain <domain>` | Panel and subscription domain |
|
| `-subdomain <domain>` | Panel and subscription domain |
|
||||||
| `-reality_domain <domain>` | REALITY destination domain |
|
| `-reality_domain <domain>` | REALITY destination domain |
|
||||||
| `-auto_domain y` | Auto-detect domain (no manual input) |
|
| `-auto_domain y` | Auto-detect domain (no manual input) |
|
||||||
|
| `-version <version>` | Install specific 3x-ui version (e.g. `3.4.2`), default — latest |
|
||||||
| `-uninstall y` | Full uninstall |
|
| `-uninstall y` | Full uninstall |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|||||||
+16
-7
@@ -126,6 +126,7 @@ while [ "$#" -gt 0 ]; do
|
|||||||
-subdomain) domain="$2"; shift 2 ;;
|
-subdomain) domain="$2"; shift 2 ;;
|
||||||
-reality_domain) reality_domain="$2"; shift 2 ;;
|
-reality_domain) reality_domain="$2"; shift 2 ;;
|
||||||
-ONLY_CF_IP_ALLOW) CFALLOW="$2"; shift 2 ;;
|
-ONLY_CF_IP_ALLOW) CFALLOW="$2"; shift 2 ;;
|
||||||
|
-version) PANEL_VERSION="$2"; shift 2 ;;
|
||||||
-uninstall) UNINSTALL="$2"; shift 2 ;;
|
-uninstall) UNINSTALL="$2"; shift 2 ;;
|
||||||
*) shift 1 ;;
|
*) shift 1 ;;
|
||||||
esac
|
esac
|
||||||
@@ -727,14 +728,22 @@ install_panel() {
|
|||||||
|
|
||||||
cd /usr/local/
|
cd /usr/local/
|
||||||
|
|
||||||
tag_version=$(curl -Ls "https://api.github.com/repos/MHSanaei/3x-ui/releases/latest" \
|
if [[ -n "$PANEL_VERSION" ]]; then
|
||||||
| grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/')
|
tag_version="v${PANEL_VERSION#v}"
|
||||||
if [[ -z "$tag_version" ]]; then
|
if ! curl -fsLo /dev/null "https://api.github.com/repos/MHSanaei/3x-ui/releases/tags/${tag_version}" \
|
||||||
tag_version=$(curl -4 -Ls "https://api.github.com/repos/MHSanaei/3x-ui/releases/latest" \
|
&& ! curl -4 -fsLo /dev/null "https://api.github.com/repos/MHSanaei/3x-ui/releases/tags/${tag_version}"; then
|
||||||
|
echo "3x-ui release ${tag_version} not found." && exit 1
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
tag_version=$(curl -Ls "https://api.github.com/repos/MHSanaei/3x-ui/releases/latest" \
|
||||||
| grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/')
|
| grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/')
|
||||||
fi
|
if [[ -z "$tag_version" ]]; then
|
||||||
if [[ -z "$tag_version" ]]; then
|
tag_version=$(curl -4 -Ls "https://api.github.com/repos/MHSanaei/3x-ui/releases/latest" \
|
||||||
echo "Failed to fetch 3x-ui version." && exit 1
|
| grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/')
|
||||||
|
fi
|
||||||
|
if [[ -z "$tag_version" ]]; then
|
||||||
|
echo "Failed to fetch 3x-ui version." && exit 1
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "Installing 3x-ui ${tag_version} ..."
|
echo "Installing 3x-ui ${tag_version} ..."
|
||||||
|
|||||||
Reference in New Issue
Block a user