From 68af0f5b4173df7956977a0d13fee7670c326d6a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20FERREIRA?= <30830768+ferr079@users.noreply.github.com> Date: Mon, 8 Jun 2026 11:33:50 +0000 Subject: [PATCH] homelable: preserve MCP server config across updates (#14996) * homelable: preserve MCP server config across updates The update path runs CLEAN_INSTALL=1 fetch_and_deploy_gh_release, which wipes /opt/homelable before redeploying. The backup/restore only covers backend/.env and data/, so an optionally-installed MCP server (set up via Pouzor/homelable's own scripts/lxc-mcp-install.sh, which targets exactly this LXC and lives in /opt/homelable/mcp) loses its .env and .venv on every update. The homelable-mcp service then keeps running on deleted inodes and dies at the next restart. Back up mcp/.env when present, and after the deploy restore it, rebuild the venv (same uv pattern as the backend), restore ownership and restart the service. Fully conditional: installs without the MCP are unaffected. * homelable: remove comments per maintainer review --- ct/homelable.sh | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/ct/homelable.sh b/ct/homelable.sh index f6da445d4..8348cd529 100644 --- a/ct/homelable.sh +++ b/ct/homelable.sh @@ -38,6 +38,9 @@ function update_script() { msg_info "Backing up Configuration and Data" cp /opt/homelable/backend/.env /opt/homelable.env.bak cp -r /opt/homelable/data /opt/homelable_data_bak + if [[ -f /opt/homelable/mcp/.env ]]; then + cp -a /opt/homelable/mcp/.env /opt/homelable-mcp.env.bak + fi msg_ok "Backed up Configuration and Data" CLEAN_INSTALL=1 fetch_and_deploy_gh_release "homelable" "Pouzor/homelable" "tarball" "latest" "/opt/homelable" @@ -61,6 +64,19 @@ function update_script() { rm -rf /opt/homelable_data_bak msg_ok "Restored Configuration and Data" + if [[ -f /opt/homelable-mcp.env.bak ]]; then + msg_info "Restoring MCP Server" + cp -a /opt/homelable-mcp.env.bak /opt/homelable/mcp/.env + rm -f /opt/homelable-mcp.env.bak + MCP_OWNER=$(stat -c '%U' /opt/homelable/mcp/.env) + cd /opt/homelable/mcp + $STD uv venv --clear /opt/homelable/mcp/.venv + $STD uv pip install --python /opt/homelable/mcp/.venv/bin/python -r requirements.txt + chown -R "$MCP_OWNER":"$MCP_OWNER" /opt/homelable/mcp + systemctl restart homelable-mcp + msg_ok "Restored MCP Server" + fi + msg_info "Starting Service" systemctl start homelable msg_ok "Started Service"