generated from bisco/codex-bootstrap
100 lines
3.1 KiB
Bash
Executable File
100 lines
3.1 KiB
Bash
Executable File
#!/bin/sh
|
|
set -eu
|
|
|
|
ROOT_DIR="$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd)"
|
|
ENV_FILE="${ENV_FILE:-$ROOT_DIR/.env}"
|
|
|
|
DB_DATA_PATH="${DB_DATA_PATH:-./runtime/db}"
|
|
WORDPRESS_DATA_PATH="${WORDPRESS_DATA_PATH:-./runtime/wordpress}"
|
|
LETSENCRYPT_DATA_PATH="${LETSENCRYPT_DATA_PATH:-./runtime/letsencrypt}"
|
|
CERTBOT_CHALLENGES_PATH="${CERTBOT_CHALLENGES_PATH:-./runtime/certbot/www}"
|
|
|
|
MARIADB_VOLUME_UID="${MARIADB_VOLUME_UID:-999}"
|
|
MARIADB_VOLUME_GID="${MARIADB_VOLUME_GID:-999}"
|
|
WORDPRESS_VOLUME_UID="${WORDPRESS_VOLUME_UID:-33}"
|
|
WORDPRESS_VOLUME_GID="${WORDPRESS_VOLUME_GID:-33}"
|
|
CERTBOT_VOLUME_UID="${CERTBOT_VOLUME_UID:-0}"
|
|
CERTBOT_VOLUME_GID="${CERTBOT_VOLUME_GID:-0}"
|
|
|
|
load_env_file() {
|
|
[ -f "$ENV_FILE" ] || return 0
|
|
|
|
while IFS= read -r line || [ -n "$line" ]; do
|
|
case "$line" in
|
|
"" | \#*) continue ;;
|
|
esac
|
|
|
|
key="${line%%=*}"
|
|
value="${line#*=}"
|
|
value="${value%\"}"
|
|
value="${value#\"}"
|
|
value="${value%\'}"
|
|
value="${value#\'}"
|
|
|
|
case "$key" in
|
|
DB_DATA_PATH) DB_DATA_PATH="$value" ;;
|
|
WORDPRESS_DATA_PATH) WORDPRESS_DATA_PATH="$value" ;;
|
|
LETSENCRYPT_DATA_PATH) LETSENCRYPT_DATA_PATH="$value" ;;
|
|
CERTBOT_CHALLENGES_PATH) CERTBOT_CHALLENGES_PATH="$value" ;;
|
|
MARIADB_VOLUME_UID) MARIADB_VOLUME_UID="$value" ;;
|
|
MARIADB_VOLUME_GID) MARIADB_VOLUME_GID="$value" ;;
|
|
WORDPRESS_VOLUME_UID) WORDPRESS_VOLUME_UID="$value" ;;
|
|
WORDPRESS_VOLUME_GID) WORDPRESS_VOLUME_GID="$value" ;;
|
|
CERTBOT_VOLUME_UID) CERTBOT_VOLUME_UID="$value" ;;
|
|
CERTBOT_VOLUME_GID) CERTBOT_VOLUME_GID="$value" ;;
|
|
esac
|
|
done < "$ENV_FILE"
|
|
}
|
|
|
|
resolve_path() {
|
|
case "$1" in
|
|
/*) printf '%s\n' "$1" ;;
|
|
*) printf '%s/%s\n' "$ROOT_DIR" "$1" ;;
|
|
esac
|
|
}
|
|
|
|
apply_ownership() {
|
|
path="$1"
|
|
uid="$2"
|
|
gid="$3"
|
|
|
|
if chown -R "$uid:$gid" "$path" 2>/dev/null; then
|
|
return 0
|
|
fi
|
|
|
|
if [ "$(id -u)" -eq 0 ]; then
|
|
echo "WARN: cannot chown $path to $uid:$gid." >&2
|
|
return 0
|
|
fi
|
|
|
|
if command -v sudo >/dev/null 2>&1; then
|
|
if sudo -n chown -R "$uid:$gid" "$path" 2>/dev/null; then
|
|
return 0
|
|
fi
|
|
echo "WARN: sudo cannot chown $path to $uid:$gid without a password." >&2
|
|
echo "WARN: run this script with sudo if the service cannot write this path." >&2
|
|
return 0
|
|
fi
|
|
|
|
echo "WARN: cannot chown $path to $uid:$gid; rerun as root or install sudo." >&2
|
|
}
|
|
|
|
prepare_dir() {
|
|
path="$1"
|
|
uid="$2"
|
|
gid="$3"
|
|
mode="$4"
|
|
|
|
mkdir -p "$path"
|
|
apply_ownership "$path" "$uid" "$gid"
|
|
chmod "$mode" "$path"
|
|
echo "Prepared $path as $uid:$gid mode $mode"
|
|
}
|
|
|
|
load_env_file
|
|
|
|
prepare_dir "$(resolve_path "$DB_DATA_PATH")" "$MARIADB_VOLUME_UID" "$MARIADB_VOLUME_GID" 750
|
|
prepare_dir "$(resolve_path "$WORDPRESS_DATA_PATH")" "$WORDPRESS_VOLUME_UID" "$WORDPRESS_VOLUME_GID" 755
|
|
prepare_dir "$(resolve_path "$LETSENCRYPT_DATA_PATH")" "$CERTBOT_VOLUME_UID" "$CERTBOT_VOLUME_GID" 750
|
|
prepare_dir "$(resolve_path "$CERTBOT_CHALLENGES_PATH")" "$CERTBOT_VOLUME_UID" "$CERTBOT_VOLUME_GID" 755
|