Import alt-mysql plugin
This commit is contained in:
@@ -0,0 +1,126 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
PLUGIN_DIR="$(cd "$(dirname "$0")/../.." && pwd)"
|
||||
CUSTOMBUILD_ROOT="${CUSTOMBUILD_ROOT:-/usr/local/directadmin/custombuild}"
|
||||
ACTION="${1:-install}"
|
||||
SETTINGS_FILE="${MYSQL_PLUGIN_SETTINGS_FILE:-$PLUGIN_DIR/plugin-settings.conf}"
|
||||
MARKER="managed by DirectAdmin MySQL plugin CustomBuild hook"
|
||||
|
||||
log() {
|
||||
printf 'mysql custombuild-hooks: %s\n' "$*"
|
||||
}
|
||||
|
||||
die() {
|
||||
printf 'mysql custombuild-hooks: %s\n' "$*" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
read_setting() {
|
||||
local key="$1"
|
||||
local default="$2"
|
||||
local line value
|
||||
|
||||
[ -r "$SETTINGS_FILE" ] || {
|
||||
printf '%s\n' "$default"
|
||||
return 0
|
||||
}
|
||||
|
||||
line="$(grep -E "^${key}=" "$SETTINGS_FILE" | tail -n 1 || true)"
|
||||
[ -n "$line" ] || {
|
||||
printf '%s\n' "$default"
|
||||
return 0
|
||||
}
|
||||
|
||||
value="${line#*=}"
|
||||
value="${value%%#*}"
|
||||
value="${value%\"}"
|
||||
value="${value#\"}"
|
||||
value="${value%\'}"
|
||||
value="${value#\'}"
|
||||
value="$(printf '%s' "$value" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')"
|
||||
printf '%s\n' "${value:-$default}"
|
||||
}
|
||||
|
||||
custombuild_hooks_enabled() {
|
||||
case "$(read_setting CUSTOMBUILD_HOOKS_ENABLED true)" in
|
||||
true|yes|on|1) return 0 ;;
|
||||
*) return 1 ;;
|
||||
esac
|
||||
}
|
||||
|
||||
write_hook() {
|
||||
local target="$1"
|
||||
local app="$2"
|
||||
local repair_script="$3"
|
||||
local health_script="$4"
|
||||
local repair_name health_name tmp
|
||||
|
||||
[ -f "$repair_script" ] || die "missing repair script: $repair_script"
|
||||
[ -f "$health_script" ] || die "missing health check script: $health_script"
|
||||
repair_name="$(basename "$repair_script")"
|
||||
health_name="$(basename "$health_script")"
|
||||
|
||||
mkdir -p "$(dirname "$target")"
|
||||
tmp="$(mktemp)"
|
||||
cat > "$tmp" <<EOF
|
||||
#!/bin/bash
|
||||
# $MARKER
|
||||
set -euo pipefail
|
||||
|
||||
PLUGIN_DIR='$PLUGIN_DIR'
|
||||
LOG_DIR="\$PLUGIN_DIR/data/logs"
|
||||
LOG_FILE="\$LOG_DIR/custombuild-${app}-repair.log"
|
||||
|
||||
mkdir -p "\$LOG_DIR" 2>/dev/null || true
|
||||
|
||||
{
|
||||
printf '%s\\n' "=== \$(date '+%Y-%m-%d %H:%M:%S') ${app} CustomBuild post hook ==="
|
||||
"\$PLUGIN_DIR/scripts/setup/${repair_name}"
|
||||
if ! "\$PLUGIN_DIR/scripts/setup/${health_name}"; then
|
||||
printf '%s\\n' "${app}: warning: health check failed after repair"
|
||||
fi
|
||||
} >> "\$LOG_FILE" 2>&1
|
||||
EOF
|
||||
install -m 0755 "$tmp" "$target"
|
||||
rm -f "$tmp"
|
||||
log "installed CustomBuild post hook: $target"
|
||||
}
|
||||
|
||||
install_all() {
|
||||
custombuild_hooks_enabled || {
|
||||
log "disabled by CUSTOMBUILD_HOOKS_ENABLED"
|
||||
return 0
|
||||
}
|
||||
|
||||
write_hook \
|
||||
"$CUSTOMBUILD_ROOT/custom/hooks/roundcube/post/90-alt-mysql-repair.sh" \
|
||||
"roundcube" \
|
||||
"$PLUGIN_DIR/scripts/setup/roundcube_repair_config.sh" \
|
||||
"$PLUGIN_DIR/scripts/setup/roundcube_health_check.sh"
|
||||
|
||||
write_hook \
|
||||
"$CUSTOMBUILD_ROOT/custom/hooks/phpmyadmin/post/90-alt-mysql-repair.sh" \
|
||||
"phpmyadmin" \
|
||||
"$PLUGIN_DIR/scripts/setup/phpmyadmin_repair.sh" \
|
||||
"$PLUGIN_DIR/scripts/setup/phpmyadmin_health_check.sh"
|
||||
}
|
||||
|
||||
uninstall_all() {
|
||||
local hook
|
||||
for hook in \
|
||||
"$CUSTOMBUILD_ROOT/custom/hooks/roundcube/post/90-alt-mysql-repair.sh" \
|
||||
"$CUSTOMBUILD_ROOT/custom/hooks/phpmyadmin/post/90-alt-mysql-repair.sh"
|
||||
do
|
||||
if [ -f "$hook" ] && grep -Fq "$MARKER" "$hook"; then
|
||||
rm -f "$hook"
|
||||
log "removed CustomBuild post hook: $hook"
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
case "$ACTION" in
|
||||
install) install_all ;;
|
||||
uninstall) uninstall_all ;;
|
||||
*) die "unknown action: $ACTION" ;;
|
||||
esac
|
||||
Reference in New Issue
Block a user