From 4182815b4c6e3b7ceb46fe80816ebf30f5f5ac3a Mon Sep 17 00:00:00 2001 From: Paladin <62039396+CommanderPaladin@users.noreply.github.com> Date: Mon, 25 Aug 2025 10:14:01 -0700 Subject: [PATCH] FileBrowser Quantum: safer update (tmp download + atomic replace + arch autodetect) (#7174) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * FileBrowser Quantum: safer update (tmp download + atomic replace + arch autodetect) **What** Safer updater for FileBrowser Quantum addon: - Download to temp file, then atomic `mv` into INSTALL_PATH - Stop/start service around the swap - CPU arch autodetect (amd64/arm64/armv7/armv6) - Proper error handling & version verification before printing success **Why** Current update streams `curl` directly to `/usr/local/bin/filebrowser` and prints success even if `curl` fails. I hit: * fix(filebrowser-quantum): add missing `fi` before install section Closes the conditional started with `if [[ -f "$INSTALL_PATH" ]]` so the script doesn’t hit a bash syntax error when reaching the install path. * refactor(update): minimal fix - temp file + atomic mv; amd64 only * style(update): remove comments/blank lines; drop restart (alpine-safe) --- tools/addon/filebrowser-quantum.sh | 54 ++++++++++++++++++------------ 1 file changed, 32 insertions(+), 22 deletions(-) diff --git a/tools/addon/filebrowser-quantum.sh b/tools/addon/filebrowser-quantum.sh index 4ebf98b31..87b621774 100644 --- a/tools/addon/filebrowser-quantum.sh +++ b/tools/addon/filebrowser-quantum.sh @@ -97,31 +97,41 @@ if [[ -f "$LEGACY_DB" || -f "$LEGACY_BIN" && ! -f "$CONFIG_PATH" ]]; then fi # Check existing installation -if [[ -f "$INSTALL_PATH" ]]; then - echo -e "${YW}⚠️ ${APP} is already installed.${CL}" - echo -n "Uninstall ${APP}? (y/N): " - read -r uninstall_prompt - if [[ "${uninstall_prompt,,}" =~ ^(y|yes)$ ]]; then - msg_info "Uninstalling ${APP}" - if [[ "$OS" == "Debian" ]]; then - systemctl disable --now filebrowser.service &>/dev/null - rm -f "$SERVICE_PATH" - else - rc-service filebrowser stop &>/dev/null - rc-update del filebrowser &>/dev/null - rm -f "$SERVICE_PATH" + if [[ -f "$INSTALL_PATH" ]]; then + echo -e "${YW}⚠️ ${APP} is already installed.${CL}" + echo -n "Uninstall ${APP}? (y/N): " + read -r uninstall_prompt + if [[ "${uninstall_prompt,,}" =~ ^(y|yes)$ ]]; then + msg_info "Uninstalling ${APP}" + if [[ "$OS" == "Debian" ]]; then + systemctl disable --now filebrowser.service &>/dev/null + rm -f "$SERVICE_PATH" + else + rc-service filebrowser stop &>/dev/null + rc-update del filebrowser &>/dev/null + rm -f "$SERVICE_PATH" + fi + rm -f "$INSTALL_PATH" "$CONFIG_PATH" + msg_ok "${APP} has been uninstalled." + exit 0 fi - rm -f "$INSTALL_PATH" "$CONFIG_PATH" - msg_ok "${APP} has been uninstalled." - exit 0 - fi - - echo -n "Update ${APP}? (y/N): " - read -r update_prompt + + echo -n "Update ${APP}? (y/N): " + read -r update_prompt if [[ "${update_prompt,,}" =~ ^(y|yes)$ ]]; then msg_info "Updating ${APP}" - curl -fsSL https://github.com/gtsteffaniak/filebrowser/releases/latest/download/linux-amd64-filebrowser -o "$INSTALL_PATH" - chmod +x "$INSTALL_PATH" + tmp="${INSTALL_PATH}.tmp.$$" + if ! curl -fSL https://github.com/gtsteffaniak/filebrowser/releases/latest/download/linux-amd64-filebrowser -o "$tmp"; then + msg_error "Download failed" + rm -f "$tmp" + exit 1 + fi + chmod 0755 "$tmp" + if ! mv -f "$tmp" "$INSTALL_PATH"; then + msg_error "Install failed (cannot move into $INSTALL_PATH)" + rm -f "$tmp" + exit 1 + fi msg_ok "Updated ${APP}" exit 0 else