48 lines
1.5 KiB
Bash
48 lines
1.5 KiB
Bash
#!/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 <<EOF
|
|
bootstrap_status: PASS
|
|
root: $ROOT
|
|
source_worktree: $SOURCE
|
|
bare_repo: $BARE
|
|
worktree_root: $WORKTREES
|
|
runtime_user: $RUNTIME_USER
|
|
runtime_group: $RUNTIME_GROUP
|
|
EOF
|