Management

Verifying an Installation

What row-template verify checks on 3X-UI, PasarGuard and Rebecca, how to read every line it prints, and which results are failures and which are only warnings.

row-template verify

Run it after installing, after any change, and before reporting a problem. Run it as root: as another user it cannot read config.env or the panel’s settings.

verify never changes your page, your branding or your panel. Run as root, it does one thing first: it puts the template store right — designs left outside dist/templates/ by an earlier update are moved back in, and designs the installed version ships but the server lacks are downloaded from that same release (checksum-verified). It changes nothing else.

Reading the result

Each check prints one line:

  • ok — the check passed.
  • warn — worth fixing, but the page works. Warnings never fail the command.
  • FAIL — a hard problem. The command ends with verification FAILED (…) and exits with status 1.
  • A line with no tag is information, such as a check that could not run here.

The last line sums it up:

  ok   verification passed with no warnings.
  warn verification passed with 2 warning(s).
  FAIL verification FAILED (1 hard issue(s), 2 warning(s)).

Every check

Files and integrity

Result Line What to do
ok Install root present: … —
FAIL install root missing or is a symlink: … Re-run the installer. The install directory must be a real directory.
ok Canonical artifact integrity verified. —
FAIL canonical artifact missing checksum or does not match it. The installed design was changed or damaged. Run row-template update to reinstall it.
FAIL canonical artifact missing or unreadable: … Run row-template update, or re-run the installer.
ok Live template is structurally valid and readable. —
FAIL live template failed structural validation. / live template missing or unreadable: … Regenerate it: row-template update, or re-run the installer to repair.
ok VERSION present: … —
FAIL VERSION file missing or empty. Re-run the installer to repair.

Designs

Result Line What to do
ok Template store verified (17 design(s)). —
FAIL a template in the store does not match its checksum: … A design file was altered; the message names it. Run row-template update to reinstall the store.
warn template store is incomplete (… of … designs); missing: … Run row-template update.
warn templates were found outside the store at …; run 'row-template verify' as root to move them. Run verify as root.
ok Template: … The selected design.
ok Canonical artifact matches the selected template. —
FAIL canonical artifact does not match the selected template (…). The saved choice and the installed design disagree. Run row-template config and press Enter at each question — it realigns the installed design with the saved choice — or run row-template update.
FAIL selected template '…' is missing from the template store. Run row-template update.
FAIL template store missing or empty; run 'row-template update' to install it. Run verify as root, or row-template update — see Upgrading from 1.1.0 or 1.2.0.

Configuration and tools

Result Line What to do
ok Config present and readable. —
— No config.env (white-label defaults). Nothing: no branding has been set.
warn config present but not readable. Run verify as root.
warn config.env is other-writable (mode …); tighten to 640. chmod 640 the config.env in the install directory.
ok Management library present. —
warn management library not found under the install root. Re-run the installer to repair.
ok Installer components present. —
warn installer components are missing (lib/transaction.sh, panels/), … Run verify as root, or row-template update.
ok CLI present: /usr/local/bin/row-template —
warn CLI not found or not executable at … Re-run the installer to repair.

The panel

Result Line What to do
ok 3x-ui … meets the minimum 3.6.0. —
FAIL 3x-ui … is below the minimum 3.6.0. Update 3X-UI.
warn could not determine the 3x-ui version. / 3x-ui installation was not detected. See the error reference.
ok Panel subThemeDir points at Row-Template. —
warn panel subThemeDir is empty; set it to … Activate.
warn panel subThemeDir does not point at Row-Template. Activate — or leave it, if you deliberately use another theme.
— subThemeDir not checked (sqlite3/DB unavailable). Install sqlite3 to have it checked.
Result Line What to do
ok PasarGuard detected. —
warn PasarGuard was not detected on this host. Run verify on the panel’s server, as root.
ok PasarGuard selects the Row-Template page, and the placed page is current. —
FAIL PasarGuard's Row-Template page is out of step (see above); … Read the panel pasarguard: line above it, then re-apply from the manager (5 — Activate / Re-apply theme).
ok Live check: the running PasarGuard uses the Row-Template page. The running container reads the setting and can see the page.
— Live check skipped (not available for this panel layout). A source install: there is no container to ask.
warn the running PasarGuard does not use the Row-Template page yet; restart the panel. pasarguard restart, then verify again.
warn PasarGuard does not select the Row-Template page; activate it from the manager. Activate.
warn the PasarGuard configuration could not be read. Check /opt/pasarguard/.env, and run verify as root.
warn panel pasarguard: … admin(s) set their own subscription page (sub_template); … Those admins’ users keep their own page.
warn panel pasarguard: the panel's 'disable subscription template' setting is on, … Browsers get the raw subscription: turn the setting off in PasarGuard.
Result Line What to do
ok Rebecca detected. —
warn Rebecca was not detected on this host. Run verify on the panel’s server, as root.
FAIL panel rebecca: this is Rebecca 0.0.x, the Python edition … Rebecca’s Docker image cannot serve the page: install Rebecca 1.x with its binary installer (rebecca-binary.sh).
ok Rebecca selects the Row-Template page, and the placed page is current. —
FAIL Rebecca's Row-Template page is out of step (see above); … Read the panel rebecca: line above it, then re-apply from the manager (5 — Activate / Re-apply theme).
— Live check skipped (not available for this panel layout). Always, on Rebecca: it reads its settings on every request, so the check above is the one that counts.
warn Rebecca does not select the Row-Template page; activate it from the manager. Activate, or leave it if you chose another page on purpose.
— Panel selection not checked (activation is manual here: …) MySQL/MariaDB, or no sqlite3: check Settings → Subscription → Templates yourself.
warn panel rebecca: … admin(s) override the subscription page for their own users; … Those admins’ users keep their own page.
Result Line What to do
FAIL the panel components are missing; run 'row-template update'. PasarGuard and Rebecca are checked through the installer’s companion files. Run row-template update.
warn leftover staging files found under the install root (possible interrupted update). See below.

Live checks

verify requests a subscription locally twice — once as a browser, once as a VPN app. On 3X-UI it finds a client’s subscription to test with through sqlite3; on PasarGuard and Rebecca, where Row-Template never looks up a subscription link itself, the checks run only when you give one in RT_SMOKE_URL:

RT_SMOKE_URL='https://your-panel.example.com/sub/…' row-template verify
Result Line What to do
ok Live render check: a browser receives Row-Template. —
warn live render check: the panel served its built-in page. The panel is not serving Row-Template yet — check activation, then restart the panel.
warn live render check: the subscription endpoint was unreachable. The subscription port did not answer locally. Check the panel is running and the subscription service is enabled.
— Live render check skipped (no test URL available). Nothing to fix.
ok VPN-client check: normal subscription content is served. —
warn VPN-client check: HTML was returned instead of subscription content. VPN apps would receive the page instead of their configuration. Check any proxy or CDN in front of the panel is not rewriting the request.

Never paste the subscription link you use for RT_SMOKE_URL into a bug report.

Leftover staging files

Every file Row-Template replaces is first written under a temporary name starting with .stage. or .live., then renamed into place. If a command was interrupted — the server lost power, or the process was killed — one can be left behind. They are never used. When no row-template command is running, it is safe to delete them (on PasarGuard and Rebecca, use /etc/row-template):

find /etc/3x-ui/sub_templates/row-template -maxdepth 2 \( -name '.stage.*' -o -name '.live.*' \) -print -delete

Then run row-template verify again.

Edit this page on GitHubApplies to Row-Template 1.4.0
Esc
↑↓ to navigate↵ to selectEsc to close