Fix git dubious ownership: chown ncadmin + safe.directory
This commit is contained in:
+67
-4
@@ -9,10 +9,14 @@
|
|||||||
# Som ncadmin (rekommenderat):
|
# Som ncadmin (rekommenderat):
|
||||||
# curl -fsSL ... | sudo -u ncadmin bash
|
# curl -fsSL ... | sudo -u ncadmin bash
|
||||||
#
|
#
|
||||||
|
# Om git "dubious ownership" (root ägde repot):
|
||||||
|
# sudo bash scripts/fix-repo-ownership.sh
|
||||||
|
#
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
||||||
VERSION="1.0.0"
|
VERSION="1.0.0"
|
||||||
GIT_REPO_URL="${GIT_REPO_URL:-https://kode.hannesahlin.se/n3wk/nextcloud-collabora-nodered.git}"
|
GIT_REPO_URL="${GIT_REPO_URL:-https://kode.hannesahlin.se/n3wk/nextcloud-collabora-nodered.git}"
|
||||||
|
BOOTSTRAP_URL="${BOOTSTRAP_URL:-https://kode.hannesahlin.se/n3wk/nextcloud-collabora-nodered/raw/branch/main/bootstrap-install.sh}"
|
||||||
GIT_BRANCH="${GIT_BRANCH:-main}"
|
GIT_BRANCH="${GIT_BRANCH:-main}"
|
||||||
INSTALL_MODE="${INSTALL_MODE:-integrate}"
|
INSTALL_MODE="${INSTALL_MODE:-integrate}"
|
||||||
|
|
||||||
@@ -40,6 +44,60 @@ run_as_root() {
|
|||||||
if [ "$(id -u)" -eq 0 ]; then "$@"; elif command -v sudo >/dev/null 2>&1; then sudo "$@"; else die "sudo krävs"; fi
|
if [ "$(id -u)" -eq 0 ]; then "$@"; elif command -v sudo >/dev/null 2>&1; then sudo "$@"; else die "sudo krävs"; fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
runtime_user() {
|
||||||
|
if [ -n "${INSTALL_USER:-}" ]; then
|
||||||
|
echo "${INSTALL_USER}"
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
if [ "$(id -u)" -eq 0 ] && id ncadmin >/dev/null 2>&1; then
|
||||||
|
echo "ncadmin"
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
id -un
|
||||||
|
}
|
||||||
|
|
||||||
|
# Root + curl|bash → kör om som ncadmin (undvik root-ägt repo i /home/ncadmin)
|
||||||
|
reexec_as_install_user() {
|
||||||
|
local user
|
||||||
|
user="$(runtime_user)"
|
||||||
|
if [ "$(id -un)" = "root" ] && [ "${user}" != "root" ] && [ -z "${BOOTSTRAP_REEXEC:-}" ]; then
|
||||||
|
log "Kör om som ${user} (inte root)..."
|
||||||
|
export BOOTSTRAP_REEXEC=1
|
||||||
|
export INSTALL_DIR NODERED_DIR INSTALL_MODE GIT_REPO_URL GIT_BRANCH
|
||||||
|
exec run_as_root sudo -u "${user}" -H env \
|
||||||
|
BOOTSTRAP_REEXEC=1 \
|
||||||
|
INSTALL_DIR="${INSTALL_DIR}" \
|
||||||
|
NODERED_DIR="${NODERED_DIR}" \
|
||||||
|
INSTALL_MODE="${INSTALL_MODE}" \
|
||||||
|
GIT_REPO_URL="${GIT_REPO_URL}" \
|
||||||
|
GIT_BRANCH="${GIT_BRANCH}" \
|
||||||
|
BOOTSTRAP_URL="${BOOTSTRAP_URL}" \
|
||||||
|
bash -c "curl -fsSL '${BOOTSTRAP_URL}' | bash"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
fix_repo_ownership() {
|
||||||
|
local user group owner
|
||||||
|
user="$(runtime_user)"
|
||||||
|
group="$(id -gn "${user}" 2>/dev/null || echo "${user}")"
|
||||||
|
[ -d "${INSTALL_DIR}" ] || return 0
|
||||||
|
owner="$(stat -c '%U' "${INSTALL_DIR}" 2>/dev/null || echo "")"
|
||||||
|
if [ -n "${owner}" ] && [ "${owner}" != "${user}" ]; then
|
||||||
|
log "Repo ägs av ${owner} — sätter ägare ${user}:${group}"
|
||||||
|
run_as_root chown -R "${user}:${group}" "${INSTALL_DIR}"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
ensure_git_safe_directory() {
|
||||||
|
local user
|
||||||
|
user="$(runtime_user)"
|
||||||
|
if [ "$(id -un)" = "${user}" ]; then
|
||||||
|
git config --global --add safe.directory "${INSTALL_DIR}" 2>/dev/null || true
|
||||||
|
else
|
||||||
|
run_as_root sudo -u "${user}" git config --global --add safe.directory "${INSTALL_DIR}" 2>/dev/null || true
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
install_apt_packages() {
|
install_apt_packages() {
|
||||||
[ "${SKIP_APT}" = "1" ] && return 0
|
[ "${SKIP_APT}" = "1" ] && return 0
|
||||||
command -v apt-get >/dev/null 2>&1 || return 0
|
command -v apt-get >/dev/null 2>&1 || return 0
|
||||||
@@ -56,6 +114,9 @@ install_docker() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
clone_or_update_repo() {
|
clone_or_update_repo() {
|
||||||
|
fix_repo_ownership
|
||||||
|
ensure_git_safe_directory
|
||||||
|
|
||||||
if [ -d "${INSTALL_DIR}/.git" ]; then
|
if [ -d "${INSTALL_DIR}/.git" ]; then
|
||||||
log "Uppdaterar ${INSTALL_DIR}..."
|
log "Uppdaterar ${INSTALL_DIR}..."
|
||||||
git -C "${INSTALL_DIR}" fetch origin
|
git -C "${INSTALL_DIR}" fetch origin
|
||||||
@@ -66,9 +127,8 @@ clone_or_update_repo() {
|
|||||||
log "Klonar ${GIT_REPO_URL} → ${INSTALL_DIR}"
|
log "Klonar ${GIT_REPO_URL} → ${INSTALL_DIR}"
|
||||||
mkdir -p "$(dirname "${INSTALL_DIR}")"
|
mkdir -p "$(dirname "${INSTALL_DIR}")"
|
||||||
git clone --branch "${GIT_BRANCH}" --depth 1 "${GIT_REPO_URL}" "${INSTALL_DIR}"
|
git clone --branch "${GIT_BRANCH}" --depth 1 "${GIT_REPO_URL}" "${INSTALL_DIR}"
|
||||||
if [ "$(id -u)" -eq 0 ] && [ -d "/home/ncadmin" ]; then
|
fix_repo_ownership
|
||||||
chown -R ncadmin:ncadmin "${INSTALL_DIR}" 2>/dev/null || true
|
ensure_git_safe_directory
|
||||||
fi
|
|
||||||
}
|
}
|
||||||
|
|
||||||
preflight() {
|
preflight() {
|
||||||
@@ -82,11 +142,14 @@ preflight() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
main() {
|
main() {
|
||||||
|
reexec_as_install_user
|
||||||
|
|
||||||
log "bootstrap v${VERSION} — läge: ${INSTALL_MODE} (befintlig Node-RED :${NODERED_PORT})"
|
log "bootstrap v${VERSION} — läge: ${INSTALL_MODE} (befintlig Node-RED :${NODERED_PORT})"
|
||||||
|
log "Användare: $(id -un)"
|
||||||
log "Repo → ${INSTALL_DIR}"
|
log "Repo → ${INSTALL_DIR}"
|
||||||
log "Integrera → ${NODERED_DIR}"
|
log "Integrera → ${NODERED_DIR}"
|
||||||
|
|
||||||
if [ "$(id -u)" -eq 0 ] && [ -z "${SUDO_USER:-}" ]; then
|
if [ "$(id -u)" -eq 0 ] && [ "$(runtime_user)" = "root" ]; then
|
||||||
warn "Körs som root — rekommenderat: curl ... | sudo -u ncadmin bash"
|
warn "Körs som root — rekommenderat: curl ... | sudo -u ncadmin bash"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,9 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Snabbfix om git "dubious ownership" efter root-kloning
|
||||||
|
set -euo pipefail
|
||||||
|
DIR="${1:-/home/ncadmin/nextcloud-collabora-nodered}"
|
||||||
|
USER="${2:-ncadmin}"
|
||||||
|
echo "chown ${USER} ${DIR}"
|
||||||
|
chown -R "${USER}:${USER}" "${DIR}"
|
||||||
|
sudo -u "${USER}" git config --global --add safe.directory "${DIR}"
|
||||||
|
echo "Klart. Kör: cd ${DIR} && ./install.sh"
|
||||||
Reference in New Issue
Block a user