Fix: sudo docker build context + bootstrap reexec sudo

This commit is contained in:
Hannes Ahlin
2026-08-22 15:28:06 +02:00
parent bd96628807
commit f2fa7ffecf
2 changed files with 69 additions and 14 deletions
+66 -8
View File
@@ -16,6 +16,68 @@ log() { printf '[integrate] %s\n' "$*"; }
warn() { printf '[integrate] VARNING: %s\n' "$*" >&2; }
die() { printf '[integrate] FEL: %s\n' "$*" >&2; exit 1; }
run_as_root() {
if [ "$(id -u)" -eq 0 ]; then
"$@"
elif command -v sudo >/dev/null 2>&1; then
sudo "$@"
else
die "sudo/root krävs för: $*"
fi
}
runtime_user() {
if [ -n "${INSTALL_USER:-}" ]; then
echo "${INSTALL_USER}"
elif id ncadmin >/dev/null 2>&1; then
echo "ncadmin"
else
id -un
fi
}
# Docker build context måste kunna läsa nodes/ (inkl. odds-scraper — rör inte innehållet)
fix_nodered_build_permissions() {
local user group
user="$(runtime_user)"
group="$(id -gn "${user}" 2>/dev/null || echo "${user}")"
if [ ! -d "${NODERED_DIR}/nodes" ]; then
return 0
fi
if run_as_root test -r "${NODERED_DIR}/nodes/odds-scraper" 2>/dev/null; then
: # root kan läsa
else
warn "nodes/odds-scraper oläsbar — fixar läsrättigheter för build (innehåll orört)"
fi
log "Säkerställer läsbar Docker build context under ${NODERED_DIR}/nodes"
run_as_root find "${NODERED_DIR}/nodes" -type d -exec chmod a+rx {} + 2>/dev/null || true
run_as_root find "${NODERED_DIR}/nodes" -type f -exec chmod a+r {} + 2>/dev/null || true
# Alternativt: ge ncadmin ägarskap om katalogen ägs av root
if [ "$(stat -c '%U' "${NODERED_DIR}" 2>/dev/null)" = "root" ]; then
run_as_root chown -R "${user}:${group}" "${NODERED_DIR}"
fi
}
compose_cmd() {
if docker compose version >/dev/null 2>&1; then
echo "docker compose"
else
echo "docker-compose"
fi
}
# sudo docker compose: root läser hela build context (fixar permission denied på odds-scraper)
compose_run() {
local compose
compose="$(compose_cmd)"
cd "${NODERED_DIR}"
if [ "$(id -u)" -eq 0 ]; then
${compose} "$@"
else
run_as_root ${compose} "$@"
fi
}
resolve_paths() {
if [ "$(id -u)" -eq 0 ] && [ -d "/home/ncadmin/nextcloud-node-red" ]; then
NODERED_DIR="${NODERED_DIR:-/home/ncadmin/nextcloud-node-red}"
@@ -106,18 +168,14 @@ connect_code_network() {
}
rebuild_nodered() {
local compose="docker compose"
if ! docker compose version >/dev/null 2>&1; then
compose="docker-compose"
fi
log "Bygger om ${NODERED_CONTAINER} (samma instans, port ${NODERED_PORT})..."
cd "${NODERED_DIR}"
fix_nodered_build_permissions
if [ "${FORCE_REBUILD:-0}" = "1" ]; then
${compose} build --no-cache
compose_run build --no-cache
else
${compose} build
compose_run build
fi
${compose} up -d
compose_run up -d
}
wait_nodered() {