#!/usr/bin/env bash set -euo pipefail ROOT="${AIOS_GITOPS_ROOT:-/data/aios-gitops}" SOURCE="${AIOS_SOURCE_WORKTREE:-$ROOT/workspace}" BARE="${AIOS_BARE_REPO:-$ROOT/repo.git}" WORKTREES="${AIOS_WORKTREE_ROOT:-$ROOT/worktrees}" RUNTIME_USER="${AIOS_RUNTIME_USER:-aiman}" RUNTIME_GROUP="${AIOS_RUNTIME_GROUP:-gitops}" if [[ "$(id -u)" -ne 0 ]]; then echo "ERROR: bootstrap must run as root" >&2 exit 2 fi getent passwd "$RUNTIME_USER" >/dev/null getent group "$RUNTIME_GROUP" >/dev/null [[ -d "$SOURCE/.git" || -f "$SOURCE/.git" ]] || { echo "ERROR: source worktree not found: $SOURCE" >&2 exit 3 } install -d -o "$RUNTIME_USER" -g "$RUNTIME_GROUP" -m 2775 "$ROOT" "$WORKTREES" install -d -o "$RUNTIME_USER" -g "$RUNTIME_GROUP" -m 2775 \ "$WORKTREES/openclaw" "$WORKTREES/chatgpt" "$WORKTREES/controller" if [[ ! -d "$BARE" ]]; then sudo -u "$RUNTIME_USER" -g "$RUNTIME_GROUP" git clone --bare "$SOURCE" "$BARE" fi chown -R "$RUNTIME_USER:$RUNTIME_GROUP" "$BARE" "$WORKTREES" find "$BARE" "$WORKTREES" -type d -exec chmod 2775 {} + find "$BARE" "$WORKTREES" -type f -exec chmod ug+rw {} + setfacl -R -m "u:${RUNTIME_USER}:rwX,g:${RUNTIME_GROUP}:rwX,m::rwX" "$BARE" "$WORKTREES" find "$BARE" "$WORKTREES" -type d -exec \ setfacl -m "d:u:${RUNTIME_USER}:rwx,d:g:${RUNTIME_GROUP}:rwx,d:m::rwx" {} + cat <