From 50ddb3ef47f8f808219ac39b29a288d002a18912 Mon Sep 17 00:00:00 2001 From: Jiri Uhlir Date: Mon, 8 Jun 2026 12:56:57 +0200 Subject: [PATCH] Make bootstrap ownership repair tolerate container-owned files --- maintenance/bootstrap-v2.sh | 36 ++++++++++++++++++++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/maintenance/bootstrap-v2.sh b/maintenance/bootstrap-v2.sh index 9f9ffce..476bb7c 100755 --- a/maintenance/bootstrap-v2.sh +++ b/maintenance/bootstrap-v2.sh @@ -38,6 +38,16 @@ require_file() { [ -f "$path" ] || fail "Required file missing: $path" } +run_privileged() { + if [ "$(id -u)" -eq 0 ]; then + "$@" + elif command -v sudo >/dev/null 2>&1; then + sudo "$@" + else + fail "Need root privileges for: $*" + fi +} + check_mode() { case "$MODE" in check|repair|deploy) @@ -108,8 +118,30 @@ check_directories() { repair_ownership() { log "Repairing ownership" - chown -R "$APPFACTORY_UID:$APPFACTORY_GID" "$APPFACTORY_ROOT" - ok "Ownership repaired" + + if run_privileged chown -R "$APPFACTORY_UID:$APPFACTORY_GID" "$APPFACTORY_ROOT"; then + ok "Ownership repaired" + else + warn "Ownership repair reported errors. This can happen for files owned/locked by running containers." + + run_privileged chown -R "$APPFACTORY_UID:$APPFACTORY_GID" \ + "$APPFACTORY_ROOT/apps" \ + "$APPFACTORY_ROOT/backups" \ + "$APPFACTORY_ROOT/config" \ + "$APPFACTORY_ROOT/deploy" \ + "$APPFACTORY_ROOT/gateway" \ + "$APPFACTORY_ROOT/services" \ + "$APPFACTORY_ROOT/templates" \ + "$APPFACTORY_ROOT/tools" \ + "$APPFACTORY_ROOT/workspace" \ + "$APPFACTORY_ROOT/data/appfactory" \ + "$APPFACTORY_ROOT/data/registry" \ + "$APPFACTORY_ROOT/data/caddy" \ + "$APPFACTORY_ROOT/data/caddy-config" \ + 2>/tmp/appfactory-bootstrap-chown.log || true + + ok "Ownership repair completed with tolerated warnings" + fi } check_ownership() {