feat(update): route reset/reinstall recovery paths through the release fetch (phase D)

The git-era recovery commands now do the right thing in release mode instead of
attempting a clone:
- gitReset (libreportal reset / update reset) and runReinstall (CLI/system reset,
  missing-files recovery): a release branch re-fetches the verified tarball via
  lpFetchRelease, then refreshes /root/init.sh + ownership.
- the CLI wrapper's clone_and_install (libreportal reset): sources fetch.sh and
  re-fetches the release; falls back to directing the user to the install.sh
  bootstrap if the helper isn't present.

git/local behaviour unchanged. Wrapper still bakes cleanly (no placeholders left).

Phases A–D (release build, bootstrap installer, fetch abstraction, release-aware
install + update + recovery) are complete and locally verified. Remaining: phase E
(host install.sh + channels + tarballs on get.libreportal.org) and a real fresh
install on a throwaway box.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Signed-off-by: librelad <librelad@digitalangels.vip>
This commit is contained in:
librelad 2026-05-25 18:16:35 +01:00
parent 540b0518c5
commit ddea6b8a4d
3 changed files with 40 additions and 2 deletions

14
init.sh
View File

@ -1424,6 +1424,20 @@ clone_and_install() {
echo "NOTICE: Local install detected — no Git remote to clone."
return 0
fi
if [[ "$CFG_INSTALL_MODE" == "release" ]]; then
if [ -f "$install_scripts_dir/source/fetch.sh" ] && [ -f "$install_scripts_dir/docker/command/run_privileged.sh" ]; then
source "$install_scripts_dir/docker/command/run_privileged.sh"
source "$install_scripts_dir/source/fetch.sh"
if lpFetchRelease; then
echo "SUCCESS: Re-fetched the verified release. Run 'libreportal run' to continue."
else
echo "ERROR: release re-fetch failed."
fi
else
echo "NOTICE: Release install — reinstall via the bootstrap: curl -fsSL <host>/install.sh | sudo bash"
fi
return 0
fi
update_config_values;
setup_repo;
clone_repo;

View File

@ -1,9 +1,21 @@
#!/bin/bash
runReinstall()
runReinstall()
{
isHeader "Reinstalling LibrePortal"
# Release mode: re-fetch the verified tarball instead of re-cloning from git.
if [[ "$CFG_INSTALL_MODE" == "release" ]]; then
if declare -f lpFetchRelease >/dev/null 2>&1 && lpFetchRelease; then
runSystem cp -f "$script_dir/init.sh" /root/ 2>/dev/null || true
runInstallOp chown -R "$sudo_user_name:$sudo_user_name" "$script_dir"
isSuccessful "Re-fetched the verified release. Run 'libreportal run' to continue."
else
isError "Release re-fetch failed — install unchanged."
fi
return
fi
# Check if this is a local installation
if [[ "$CFG_INSTALL_MODE" == "local" ]]; then
echo "NOTICE: Local installation detected - cannot reinstall from Git."

View File

@ -2,6 +2,18 @@
gitReset()
{
# Release mode: re-fetch the verified tarball instead of re-cloning.
if [[ "$CFG_INSTALL_MODE" == "release" ]]; then
if declare -f lpFetchRelease >/dev/null 2>&1 && lpFetchRelease; then
runSystem cp -f "$script_dir/init.sh" /root/ 2>/dev/null || true
runInstallOp chown -R "$sudo_user_name:$sudo_user_name" "$script_dir"
isSuccessful "Re-fetched the verified release."
else
isError "Release re-fetch failed — install unchanged."
fi
return
fi
# Check if this is a local installation
if [[ "$CFG_INSTALL_MODE" == "local" ]]; then
isNotice "Local installation detected - Git reset is not applicable."