Files
apxtri/setup/grant-dev.sh
T
2026-06-15 15:50:41 +00:00

72 lines
2.0 KiB
Bash
Executable File

#!/bin/bash
# grant-dev.sh - Donne les droits de dev au current user via ACL
# Usage: sudo ./grant-dev.sh [town] [nation]
set -euo pipefail
if [[ $EUID -ne 0 ]]; then
echo "ERROR: Must be run with sudo." >&2
exit 1
fi
# --- Ensure setfacl is installed ---
if ! command -v setfacl &>/dev/null; then
echo "[INFO] setfacl not found. Installing acl..."
if command -v apt &>/dev/null; then
apt update -qq && apt install -y acl
elif command -v dnf &>/dev/null; then
dnf install -y acl
elif command -v yum &>/dev/null; then
yum install -y acl
elif command -v apk &>/dev/null; then
apk add acl
else
echo "ERROR: Cannot detect package manager. Install 'acl' manually." >&2
exit 1
fi
echo "[INFO] acl package installed."
fi
# --- Detect developer user ---
DEV_USER="${SUDO_USER:-$USER}"
if [[ -z "$DEV_USER" || "$DEV_USER" == "root" ]]; then
echo "ERROR: Could not detect developer user." >&2
exit 1
fi
echo "[INFO] Granting dev access to: $DEV_USER"
# --- Target ---
NODEPATH_BASE="/opt/apxtowns"
DATAPATH_BASE="/var/lib/apxtowns"
apply_acl() {
local path="$1"
echo " → $path"
setfacl -R -m "u:${DEV_USER}:rwx" "$path"
setfacl -R -d -m "u:${DEV_USER}:rwx" "$path"
}
if [[ $# -eq 2 ]]; then
TOWN="$1"
NATION="$2"
NODEPATH="${NODEPATH_BASE}/${TOWN}.${NATION}"
DATAPATH="${DATAPATH_BASE}/${TOWN}.${NATION}"
apply_acl "$NODEPATH"
[[ -d "$DATAPATH" ]] && apply_acl "$DATAPATH"
else
echo "[INFO] No town/nation specified, applying to all instances..."
for dir in "$NODEPATH_BASE"/*.*/; do
[[ -d "$dir" ]] || continue
instance=$(basename "$dir")
town="${instance%%.*}"
nation="${instance##*.}"
echo "[${town}.${nation}]"
apply_acl "$NODEPATH_BASE/$instance"
[[ -d "$DATAPATH_BASE/$instance" ]] && apply_acl "$DATAPATH_BASE/$instance"
done
fi
echo ""
echo "Done. $DEV_USER can now edit files."
echo "Verify: getfacl ${NODEPATH_BASE}/*/ 2>/dev/null | head -20"