2026-02-22 20:38:58 -05:00
|
|
|
#!/bin/bash
|
|
|
|
|
# Default to dry-run mode
|
|
|
|
|
DRY_RUN=true
|
|
|
|
|
if [[ "$1" == "--run" || "$1" == "-r" ]]; then DRY_RUN=false; fi
|
|
|
|
|
|
|
|
|
|
if [ "$DRY_RUN" = "true" ]; then
|
|
|
|
|
echo "--- DRY RUN MODE ---"
|
|
|
|
|
echo "To apply changes, run: sudo bash $0 --run"
|
|
|
|
|
echo "--------------------"
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
# Configuration
|
|
|
|
|
BASE="/volume1/docker/webtop"
|
|
|
|
|
# Replace with your actual Synology PUID/PGID for the svc-webtop user
|
2026-02-22 20:52:31 -05:00
|
|
|
USER_ID="1045:65538" # svc-webtop
|
2026-02-22 20:38:58 -05:00
|
|
|
|
|
|
|
|
# Helper functions
|
|
|
|
|
run_mkdir() {
|
|
|
|
|
local path=$1
|
|
|
|
|
if [ -d "$path" ]; then
|
|
|
|
|
echo "[OK] Folder exists, no changes will be made: $path"
|
|
|
|
|
else
|
|
|
|
|
if [ "$DRY_RUN" = "true" ]; then
|
|
|
|
|
echo "[WILL CREATE] Folder: $path"
|
|
|
|
|
else
|
|
|
|
|
echo "[EXECUTE] Creating folder: $path"
|
|
|
|
|
mkdir -p "$path"
|
|
|
|
|
fi
|
|
|
|
|
fi
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
run_chown_recursive() {
|
|
|
|
|
local owner=$1; local path=$2
|
|
|
|
|
local uid=${owner%%:*}; local gid=${owner#*:}
|
|
|
|
|
|
|
|
|
|
# Check if folder exists first
|
|
|
|
|
if [ ! -d "$path" ]; then
|
|
|
|
|
if [ "$DRY_RUN" = "true" ]; then
|
|
|
|
|
echo "[WILL SET] Owner to $owner upon creation: $path"
|
|
|
|
|
else
|
|
|
|
|
echo "[EXECUTE] Setting owner to $owner (recursive): $path"
|
|
|
|
|
chown -R "$owner" "$path"
|
|
|
|
|
fi
|
|
|
|
|
return
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
# Check if any file/folder inside diverges from the target ownership
|
|
|
|
|
if find "$path" \( ! -uid "$uid" -o ! -gid "$gid" \) | grep -q .; then
|
|
|
|
|
if [ "$DRY_RUN" = "true" ]; then
|
|
|
|
|
echo "[WILL CHANGE] Owner to $owner (recursive): $path"
|
|
|
|
|
else
|
|
|
|
|
echo "[EXECUTE] Setting owner to $owner (recursive): $path"
|
|
|
|
|
chown -R "$owner" "$path"
|
|
|
|
|
fi
|
|
|
|
|
else
|
|
|
|
|
echo "[OK] Owner is $owner, no changes will be made: $path"
|
|
|
|
|
fi
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
run_chmod_recursive() {
|
|
|
|
|
local mode=$1; local path=$2
|
|
|
|
|
|
|
|
|
|
# Check if folder exists first
|
|
|
|
|
if [ ! -d "$path" ]; then
|
|
|
|
|
if [ "$DRY_RUN" = "true" ]; then
|
|
|
|
|
echo "[WILL SET] Permissions to $mode upon creation: $path"
|
|
|
|
|
else
|
|
|
|
|
echo "[EXECUTE] Setting permissions to $mode (recursive): $path"
|
|
|
|
|
chmod -R "$mode" "$path"
|
|
|
|
|
fi
|
|
|
|
|
return
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
# Check if any file/folder inside diverges from the target permissions
|
|
|
|
|
if find "$path" ! -perm -"$mode" | grep -q .; then
|
|
|
|
|
if [ "$DRY_RUN" = "true" ]; then
|
|
|
|
|
echo "[WILL CHANGE] Permissions to $mode (recursive): $path"
|
|
|
|
|
else
|
|
|
|
|
echo "[EXECUTE] Setting permissions to $mode (recursive): $path"
|
|
|
|
|
chmod -R "$mode" "$path"
|
|
|
|
|
fi
|
|
|
|
|
else
|
|
|
|
|
echo "[OK] Permissions are $mode, no changes will be made: $path"
|
|
|
|
|
fi
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# Run tasks
|
|
|
|
|
run_mkdir "${BASE}/config"
|
|
|
|
|
run_chown_recursive "$USER_ID" "${BASE}"
|
|
|
|
|
run_chmod_recursive 750 "${BASE}"
|
|
|
|
|
|
|
|
|
|
if [ "$DRY_RUN" = "false" ]; then
|
|
|
|
|
echo "Done."
|
|
|
|
|
fi
|