Files
xui_installer/README.md
T
Joel MattisonandClaude Opus 4.8 863a050413 Run XUI installer non-interactively with auto-generated license
XUI 1.5.13 is the post-shutdown license-free build: the installer's
isValidLicense() only checks len==16 + hex, and the license servers are
offline. Auto-generate a 16-hex key (openssl rand -hex 8), inject it, and
answer the sysctl prompt — fully unattended by default. Adds XUI_LICENSE,
XUI_SYSCTL, XUI_INTERACTIVE env vars and surfaces the panel setup URL.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-25 20:32:23 -04:00

133 lines
5.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# XUI.ONE 1.5.13 Installer
A bootstrap installer for the pre-patched **XUI.ONE 1.5.13** panel, modeled on
the midesi.net `installxui.sh` wrapper. The release package is mirrored to our
own **Gitea generic-package registry** (fast, self-hosted), with the upstream
[XUIPatch](https://github.com/xuione/XUIPatch) GitHub release as an automatic
fallback.
## What it does
`install_xui.sh` is a thin, safe wrapper around the official XUI installer:
1. Pre-flight checks — root, Ubuntu 20.04/22.04/24.04, x86_64, RAM/disk, re-install guard
2. Installs missing deps (`wget`, `unzip`, `tar`)
3. Downloads `XUI_1.5.13.zip` (~661 MB) from the Gitea mirror (falls back to GitHub)
4. Verifies the SHA-256 checksum (on by default)
5. Extracts `install`, `database.sql`, `xui.tar.gz`
6. Runs the bundled `./install` **non-interactively** — auto-generates a valid
license key and answers the sysctl prompt
7. Prints the panel **setup URL**; MySQL credentials are saved to
`<workdir>/credentials.txt`
### About the "license"
XUI.ONE 1.5.13 is the **post-shutdown, license-free build**. The developer
(GTAXUI) wound down the product and took the license servers offline, then
released a clean 1.5.13 with all license verification patched out (unlocked
extensions for PHP 7.2 / 7.4). It **never phones home**.
The bundled installer still asks for a key, but it only checks the format —
`isValidLicense()` is literally `len == 16 and all hex`. So **any valid 16-char
hex string works** (e.g. `a9f3b7e2c6d8140f`). This wrapper auto-generates a
random one with `openssl rand -hex 8`, exactly like the community auto-installers.
Set `XUI_LICENSE` to pin a specific key.
## Usage
On a clean Ubuntu server, as **root**:
```bash
# One-liner — pulls the latest installer from the Gitea repo, then runs it:
bash <(wget -qO- https://git.ops01.hprx.zip/seed/xui_installer/raw/branch/main/install_xui.sh)
# Or locally:
chmod +x install_xui.sh
./install_xui.sh
```
The installer lives in the Gitea repo **`seed/xui_installer`**. The `raw/branch/main`
URL above always serves the latest committed version — just `git push` an update
and the one-liner picks it up, no version bump needed.
## Mirror (where the package lives)
The 661 MB release is hosted on our Gitea, publicly downloadable with **no auth**:
```
https://git.ops01.hprx.zip/api/packages/seed/generic/xui/1.5.13/XUI_1.5.13.zip
sha256: a92e5f21a338c56190d7580f449492c970b5d4219474548ca5ec2f06bc57b2e7
```
Re-uploading later (e.g. a new version) — from any box with the Gitea token:
```bash
curl -X PUT \
-H "Authorization: token <TOKEN>" \
-H "Content-Type: application/octet-stream" \
-T XUI_1.5.13.zip \
"https://git.ops01.hprx.zip/api/packages/seed/generic/xui/<version>/XUI_1.5.13.zip"
```
> `Content-Type: application/octet-stream` is **required** — Gitea's generic
> registry returns HTTP 500 ("isn't multipart/form-data") without it.
## Configuration (env vars)
| Variable | Default | Purpose |
|---------------------|------------------------------------------------------|------------------------------------------------------|
| `XUI_URL` | Gitea mirror URL (above) | Override the primary download source |
| `XUI_FALLBACK_URL` | GitHub XUIPatch release | Override the fallback source |
| `XUI_SHA256` | baked-in known-good hash | Override, or set to `""` to skip checksum verify |
| `XUI_WORKDIR` | `/opt/xui_install` | Where the package is downloaded/extracted/run |
| `XUI_LICENSE` | auto-generated 16-hex | Pin a specific 16-char hex license key |
| `XUI_SYSCTL` | `Y` | Answer to the installer's sysctl-overwrite prompt |
| `XUI_INTERACTIVE` | `0` | Set to `1` to answer the installer's prompts yourself|
Example pinning a license and running fully unattended:
```bash
XUI_LICENSE="a9f3b7e2c6d8140f" ./install_xui.sh
```
Example pointing at a different mirror:
```bash
XUI_URL="https://cdn.example.com/xui/XUI_1.5.13.zip" \
XUI_SHA256="a92e5f21a338c56190d7580f449492c970b5d4219474548ca5ec2f06bc57b2e7" \
./install_xui.sh
```
## Local archive (`release/`)
The package itself is **not** kept in this repo (661 MB, git-ignored) — the
durable copy is the Gitea mirror above. Only the checksum is tracked:
- `release/XUI_1.5.13.zip.sha256` — feed to `XUI_SHA256` for integrity checks.
Package contents (the three files midesi's tarball also ships):
```
install # the XUI installer (prompts for license + sysctl)
database.sql # initial schema
xui.tar.gz # the panel itself
```
To pull a local copy anytime:
```bash
curl -L -o release/XUI_1.5.13.zip \
"https://git.ops01.hprx.zip/api/packages/seed/generic/xui/1.5.13/XUI_1.5.13.zip"
```
## Credentials
Gitea creds live in `.gitea/` (git-ignored): `token` and `url`. The token is
scoped **public-only + write:repository + write:package**. Rotate it in Gitea
(Settings → Applications) if it's ever exposed.
## System requirements
- Ubuntu 20.04 / 22.04 / 24.04 LTS, clean install, x86_64
- 6+ CPU cores, 1632 GB RAM, 480 GB+ SSD/NVMe, 1 Gbps recommended