1.9 KiB
Task Record:
Date: 2026-04-22
Related Module: install/uninstall scripts (install.sh, x-ui.sh)
Change Type: Fix
Background
Installation could get stuck or fail at x-ui migrate before service installation completed.
When this happened, service files were not installed, but files under /usr/local/x-ui or /etc/x-ui could already exist.
Then x-ui.sh uninstall might reject uninstall with "please install first" because installation detection relied only on service file presence.
Changes
In install.sh, changed migration call to non-blocking behavior:
- Use
timeout 30when available for${xui_folder}/x-ui migrate. - If migration times out or fails, print warning and continue installation.
- Keep manual migration command hint for follow-up.
In x-ui.sh, improved install detection in check_status:
- If service/init file is missing but residual install artifacts exist (
${xui_folder}/x-ui,${xui_folder}, or/etc/x-ui), treat it as installed-but-not-running instead of not installed. - This allows
x-ui uninstallto proceed and clean residual files.
Added tests/install_uninstall_resilience_test.sh for static regression checks of the new logic.
Impact
Affected files:
install.shx-ui.shtests/install_uninstall_resilience_test.sh
No API or database schema changes. Installer runtime behavior is more resilient when migration has connectivity issues. Uninstall command now works for partial/failed installation residue.
Verification
Commands:
bash -n install.shbash -n x-ui.shbash tests/install_uninstall_resilience_test.shbash tests/panel_port_prompt_test.shbash tests/mariadb_install_switch_test.sh
Result:
- All commands passed.
Risks And Follow-Up
Migration failure is now non-blocking, so some environments may finish install while still requiring manual migration. For complete runtime coverage, a pty-driven install E2E test with unreachable MariaDB simulation can be added later.