RENAMING.md: exact mapping, LUI_ inventory, sing-box orphan-scan re-verification, Tianyi badge mechanism, intentionally-kept items (module path, upstream mentions, frozen Windows, ps1, log filenames, Postgres creds, generated schemas, stale test binaries), and pending items (repo spelling BLOCKER, version bump, ps1 URL after repo rename, schema regeneration). docs/migration-l-ui.md: operator-only mv table, DB file rename, unit-env translation, backup-then-delete, old-core stop rule, rollback before acceptance only, per-machine acceptance checklist, pilot order (probe node, master, rest one by one, TYYUN untouched). docs/release.md: placeholder-repo warning.
11 KiB
Renaming: 3x-ui / x-ui → L-UI / l-ui / lui-agent
Base: 8158ced (panel V2.6.0 / agent A2.5.0). This batch is a pure
rename: no version bump, no feature change, no production change,
no Gitea change, no release. Versions stay V2.6.0 / A2.5.0; the
version bump is left to the release step (see Pending below).
Mapping (exact — do not invent other aliases)
| old | new | where it shows up |
|---|---|---|
display brand 3x-ui / x-ui |
L-UI |
panel UI, i18n, README, docs |
| panel binary / process | l-ui |
release asset, ps, /usr/bin/l-ui (Docker), l-ui setting … |
| agent binary / process | lui-agent |
release asset, ps, lui-agent agent … |
| install dir | /usr/local/l-ui |
panel + agent binaries |
| config / state dir | /etc/l-ui |
agent.json, node_token_key.json, env files |
| panel DB | /etc/l-ui/l-ui.db |
driven by internal/config/name (l-ui) via GetName() + GetDBFolderPath() — no separate DB-name constant |
| probe DB | /etc/l-ui/probe.db |
name unchanged, directory moved (probe/store.go joins GetDBFolderPath()) |
| cert dir | /etc/l-ui/cert |
panel + subscription share it |
| binary dir | /usr/local/l-ui/bin |
DefaultBinFolder; sing-box live config config-singbox.json lives here |
| log dir | /var/log/l-ui |
panel log, agent log, sing-box log |
| panel service | l-ui.service |
systemd units l-ui.service.{debian,arch,rhel}, OpenRC l-ui.rc |
| agent service | lui-agent.service |
systemd/lui-agent.service, OpenRC openrc/lui-agent |
| management CLI | l-ui.sh |
was x-ui.sh; Docker copies it to /usr/bin/l-ui |
| panel release assets | l-ui-linux-amd64, l-ui-linux-arm64 (+ .sha256) |
scripts/release-build.sh, selfupdate.AssetName |
| agent release assets | lui-agent-linux-amd64, lui-agent-linux-arm64 (+ .sha256) |
scripts/release-build.sh, selfupdate.AgentAssetName |
| agent version marker | agent-version.txt |
name unchanged |
| env prefix | LUI_ |
every XUI_ variable, code + scripts + docs + tests (inventory below) |
| source dir (Linux agent) | cmd/lui-agent |
was cmd/xui-agent; release-build.sh builds ./cmd/lui-agent |
| Gitea repo (PLACEHOLDER) | rogue/l-ui |
see Pending — not yet real |
Environment variables renamed
Code reads only the new LUI_ prefix. There is no dual-read
fallback in code: an old unit file that still exports XUI_* will
silently lose those settings, which is why the migration doc
(docs/migration-l-ui.md) has an explicit unit-env translation
table. Old units must be replaced, not edited in place.
Full inventory (from a whole-tree scan; LUI_DB_* below is a docs
glob, not a variable):
LUI_ACCESS_URL, LUI_ACME_EMAIL, LUI_ACME_HTTP_PORT,
LUI_API_TOKEN, LUI_B1_OLD_BACKUP, LUI_B2_OLD_DB,
LUI_BIN_FOLDER, LUI_DB_CACHE_MB, LUI_DB_DSN,
LUI_DB_FOLDER, LUI_DB_JOURNAL_MODE, LUI_DB_MAX_IDLE_CONNS,
LUI_DB_MAX_OPEN_CONNS, LUI_DB_MMAP_MB, LUI_DB_SYNCHRONOUS,
LUI_DB_TYPE, LUI_DEBUG, LUI_DOMAIN, LUI_ENABLE_FAIL2BAN,
LUI_GOGC, LUI_HOME (install-agent.sh only), LUI_INIT_SYSTEM
(install-agent.sh only), LUI_INIT_WEB_BASE_PATH, LUI_IN_DOCKER,
LUI_LOG_FOLDER, LUI_LOG_LEVEL, LUI_MAIN_FOLDER,
LUI_MEMORY_LIMIT, LUI_MEMORY_RELEASE_INTERVAL,
LUI_NODE_TOKEN_KEY, LUI_NODE_TOKEN_KEY_FILE,
LUI_NODE_TOKEN_KEY_TEST, LUI_NONINTERACTIVE,
LUI_ORPHAN_DUMMY, LUI_PANEL_PORT, LUI_PASSWORD, LUI_PORT,
LUI_PPROF, LUI_RELEASE_BASE_URL, LUI_RELEASE_LATEST_URL,
LUI_ROOT (install-agent.sh only), LUI_SCALE_DB_PATH,
LUI_SCALE_SIZES, LUI_SCALE_TEST, LUI_SELFUPDATE_SYSTEMD,
LUI_SERVER_IP, LUI_SERVICE, LUI_SERVICE_NAME,
LUI_SINGBOX_BIN, LUI_SKIP_HSTS, LUI_SMOKE_VERSION,
LUI_SOURCEMAP, LUI_SSL_IPV6, LUI_SSL_MODE,
LUI_TEST_PG_DSN, LUI_TUNNEL_HEALTH_COOLDOWN,
LUI_TUNNEL_HEALTH_FAILURES, LUI_TUNNEL_HEALTH_INTERVAL,
LUI_TUNNEL_HEALTH_MONITOR, LUI_TUNNEL_HEALTH_PROXY,
LUI_TUNNEL_HEALTH_TIMEOUT, LUI_TUNNEL_HEALTH_URL,
LUI_UPDATE_RUN_ID, LUI_UPDATE_STATUS_FILE, LUI_UPDATE_TAG,
LUI_URL (install scripts only), LUI_USERNAME,
LUI_WEB_BASE_PATH.
sing-box orphan-core check (special re-verification)
The orphan scan (internal/agent/singbox.go,
singboxCmdlineMatchesConfig) matches a core process by the exact
argv triple run -c <live config path>. Both sides use the same
source: the live path is filepath.Join(config.GetBinFolderPath(), "config-singbox.json"), and the agent sets LUI_BIN_FOLDER to
DefaultBinFolder (/usr/local/l-ui/bin) when unset. So the rename
propagates to both the writer and the matcher automatically; there
is no hardcoded old path in singbox.go. After migration the only
cores the new agent will reap are cores started with
/usr/local/l-ui/bin/config-singbox.json — a core still running
the old /usr/local/x-ui/bin/config-singbox.json is not matched
and must be killed by the migration step (see migration doc), or it
will hold the inbound ports and the new core will fail to bind.
This is the one place where "rename both sides" is not enough: the
old core has to be stopped, not re-adopted.
Tianyi update badge (same batch, panel side only)
- Backend:
NodeView.agentOs(fromAgentNode.ProbeOS), overlaid inannotateAgentTelemetryahead of the telemetry early-exit, likeProbeOnly. - Frontend: both badge sites in
NodeList.tsx(list column + detail) now gate on!isWindowsAgentOS(agentOs), where the helper (inpanel-version.ts) is a case-insensitivewindowsprefix test. Empty OS fails open (badge as before). - Backend:
requestAgentUpdaterefuses Windows rows up front ("not available on Windows … re-running install-agent.ps1") instead of recording an intent that would only age out. The one-click action button itself is unchanged; clicking it on a Windows row now errors clearly. - Why ProbeOS is reliable: the frozen A2.2.1 Windows agent reports
probeFacts.os=winOSName()— registry ProductName ("Windows 10", "Windows 11", …) with DisplayVersion appended, falling back to bare "Windows" — on register and on heartbeat, and the panel persists it toprobe_os(pinned byTestAgentLegacyWindows221Contract). No fake version, no per-node freeze switch, no Windows agent change, no new win asset. - Tianyi's machine itself is untouched; its agent stays A2.2.1.
Intentionally kept (not omissions)
- Go module path
github.com/mhsanaei/3x-ui/v3— the upstream import path. Renaming it would break every import and the-ldflags -Xinjection paths; it is not user-visible. - Upstream mentions — sentences that name the upstream original
("upstream 3x-ui", "stock 3x-ui", "based on upstream 3x-ui",
ghcr.io/mhsanaei/3x-ui,raw.githubusercontent.com/mhsanaei/3x-ui) stay, because that is the upstream project's actual name. - Windows agent, frozen —
cmd/xui-agent-windows/untouched: service namex-ui-agent,C:\x-ui\agent.json, display name "3x-ui Agent",x-ui-agent-windows.exe. The shipped A2.2.1 binary cannot change without a new win release, which this batch explicitly does not ship. Renaming its source would only make the source lie about the shipped binary. install-agent.ps1untouched — see Pending.- Log filenames
3xui.log,3xipl.log,3xipl-banned.logand the fail2ban jail name3x-ipl— only their directory moves (/var/log/l-ui/). Renaming the files would break external fail2ban configs beyond the directory move the migration already requires. - Docker Postgres user/DB
xui— renaming them would orphan existingpgdatavolumes (a fresh empty DB would appear and the panel would start empty). Service/container names were renamed (l-ui,l-ui_app,l-ui_postgres); credentials kept. - Windows-only DB copy in
internal/config/config.goinit()— its source is now explicitly/etc/x-ui/x-ui.db(the only pre-rename path left in Go code, as a copy source only). Normal operation never reads it; operator migration moves the DB by mv. install-agent.shlegacy-process kill — it now kills both/usr/local/l-ui/l-ui agentand/usr/local/x-ui/x-ui agent. The old form is a one-time migration cleanup, not a runtime dual-path fallback; it can be deleted once old forms are gone.frontend/src/generated/schemas.ts— generated bytools/openapigen, marked DO NOT EDIT. Its three "3x-ui panel" descriptions come from Go model comments and will refresh on the next regeneration; hand-editing a generated file would be overwritten anyway.- Tracked test binaries
x-ui-agent-test-amd64,x-ui-master-new-amd64,x-ui-with-ui-amd64— stale ELF artifacts committed earlier, not referenced by any script or byrelease-build.sh, not release assets. Left untouched (not rebuilt, not renamed); deleting committed binaries is a separate cleanup decision, not part of this rename. docs/release.mdversion-table examples (V2.4.0 / A2.3.0) — pre-existing stale examples, not version constants; left as-is so this diff stays a rename. The agent-change glob there now readscmd/lui-agent*, which correctly excludes the frozen Windows dir (Windows-only changes must not move the agent line).
Pending / must be decided before any release
- Gitea repo spelling (BLOCKER).
rogue/l-uiis a placeholder. The Gitea repo has NOT been renamed in this batch and must not be assumed renamed. Before any release: user confirms the exact spelling, then updateinternal/selfupdate/selfupdate.go(annotated in code),internal/web/service/panel/panel.go,scripts/release-build.sh,install-agent.sh,install-master.sh,update.sh,install.sh,docs/release.mdand everyrogue/l-uiURL in the tree to the confirmed spelling. Until then, the renamed update check points at a repo that does not exist yet — this branch must not be released as-is. - Version bump. Panel stays V2.6.0, agent stays A2.5.0 in this
diff. The release step must bump the panel line (and the agent
line only if agent code changed in the release commit) and
install-agent.sh'sRELEASE_BASE. install-agent.ps1(Windows, frozen, TYYUN only). Untouched on purpose: it is pinned to the V2.4.0 release base and downloadsx-ui-agent-windows-amd64.exeintoC:\x-ui. After the Gitea repo is renamed, that download URL (rogue/3x-ui-agent/releases/download/V2.4.0/…) will 404 unless one of these is chosen: (a) leave ps1 alone and accept that a future Windows reinstall needs a manual exe (the frozen line needs no reinstall by design); (b) update only its repo segment to the confirmed spelling, keeping the V2.4.0 pin and the old asset name (the V2.4.0 release's assets keep their old names only if the repo is renamed without re-uploading them — verify before choosing); (c) unfreeze Windows and ship a new win asset (out of scope for this batch). Do NOT quietly bump its pin to a release that has no win asset.- Generated schemas regeneration — run
tools/openapigenat release time sofrontend/src/generated/schemas.tsdescriptions pick up the L-UI wording. - Tracked test binaries — decide separately whether to delete the three stale ELF files from the repo.