You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
415 lines
17 KiB
415 lines
17 KiB
#!/usr/bin/env bash |
|
# migrate_superx_webapp.sh |
|
# Version 1.5 |
|
# |
|
# Migriert eine bestehende SuperX-Installation in eine neue Webapp-Struktur. |
|
# Standardziel: /home/superx/webapps/superx |
|
# Optional: Symlink aus Tomcat-webapps auf TARGET_WEBAPP. |
|
|
|
set -euo pipefail |
|
|
|
SCRIPT_NAME="$(basename "$0")" |
|
SCRIPT_VERSION="1.5" |
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" |
|
CONFIG_FILE="$SCRIPT_DIR/migrate_superx.conf" |
|
|
|
log() { echo "[$SCRIPT_NAME] $*"; } |
|
warn() { echo "[$SCRIPT_NAME] WARNUNG: $*" >&2; } |
|
fail() { echo "[$SCRIPT_NAME] FEHLER: $*" >&2; exit 1; } |
|
|
|
is_true() { case "${1:-false}" in true|TRUE|yes|YES|ja|JA|1) return 0;; *) return 1;; esac; } |
|
is_false() { case "${1:-false}" in false|FALSE|no|NO|nein|NEIN|0|"") return 0;; *) return 1;; esac; } |
|
is_auto() { case "${1:-}" in auto|AUTO|Auto) return 0;; *) return 1;; esac; } |
|
is_root() { [ "$(id -u)" -eq 0 ]; } |
|
current_user() { id -un; } |
|
user_exists() { id "$1" >/dev/null 2>&1; } |
|
group_exists() { getent group "$1" >/dev/null 2>&1; } |
|
user_in_group() { id -nG "$1" 2>/dev/null | tr ' ' '\n' | grep -qx "$2"; } |
|
current_user_matches_target() { [ "$(current_user)" = "$WEBAPP_USER" ] && user_in_group "$(current_user)" "$WEBAPP_GROUP"; } |
|
canon_path() { if command -v realpath >/dev/null 2>&1; then realpath -m "$1"; else printf '%s\n' "$1"; fi; } |
|
|
|
run() { |
|
if is_true "${DRY_RUN:-false}"; then |
|
echo "[DRY-RUN] $*" |
|
else |
|
if is_true "${VERBOSE:-false}"; then echo "+ $*"; fi |
|
eval "$@" |
|
fi |
|
} |
|
|
|
usage() { |
|
cat <<USAGE |
|
Nutzung: |
|
./$SCRIPT_NAME |
|
|
|
Die Datei migrate_superx.conf muss im selben Verzeichnis liegen wie dieses Skript. |
|
Erwartet: $CONFIG_FILE |
|
|
|
MIGRATION_MODE: full | db_only |
|
DB_TRANSFER_MODE: copy | move |
|
USAGE |
|
} |
|
|
|
load_config() { |
|
[ -f "$CONFIG_FILE" ] || { usage; fail "Config-Datei nicht gefunden: $CONFIG_FILE"; } |
|
# shellcheck disable=SC1090 |
|
. "$CONFIG_FILE" |
|
|
|
: "${SQL_ENV:?SQL_ENV ist nicht gesetzt}" |
|
: "${TARGET_WEBAPP:?TARGET_WEBAPP ist nicht gesetzt}" |
|
: "${WEBAPP_USER:?WEBAPP_USER ist nicht gesetzt}" |
|
: "${WEBAPP_GROUP:?WEBAPP_GROUP ist nicht gesetzt}" |
|
|
|
MIGRATION_MODE="${MIGRATION_MODE:-full}" |
|
DB_TRANSFER_MODE="${DB_TRANSFER_MODE:-copy}" |
|
STOP_TOMCAT="${STOP_TOMCAT:-false}" |
|
START_TOMCAT="${START_TOMCAT:-false}" |
|
TOMCAT_SERVICE="${TOMCAT_SERVICE:-tomcat10}" |
|
CREATE_TOMCAT_SYMLINK="${CREATE_TOMCAT_SYMLINK:-false}" |
|
TOMCAT_WEBAPPS_DIR="${TOMCAT_WEBAPPS_DIR:-/var/lib/tomcat10/webapps}" |
|
TOMCAT_CONTEXT_NAME="${TOMCAT_CONTEXT_NAME:-superx}" |
|
REPLACE_EXISTING_SYMLINK="${REPLACE_EXISTING_SYMLINK:-false}" |
|
DELETE_TARGET="${DELETE_TARGET:-false}" |
|
ALLOW_EXISTING_TARGET="${ALLOW_EXISTING_TARGET:-true}" |
|
ALLOW_EXISTING_TARGET_DB="${ALLOW_EXISTING_TARGET_DB:-true}" |
|
DRY_RUN="${DRY_RUN:-false}" |
|
ADD_WEBAPP_USER_TO_GROUP="${ADD_WEBAPP_USER_TO_GROUP:-true}" |
|
CREATE_GROUP_IF_MISSING="${CREATE_GROUP_IF_MISSING:-false}" |
|
UPDATE_SQL_ENV="${UPDATE_SQL_ENV:-true}" |
|
SET_RIGHTS="${SET_RIGHTS:-true}" |
|
SET_OWNER="${SET_OWNER:-auto}" |
|
SET_CHMOD="${SET_CHMOD:-true}" |
|
FORCE_ALREADY_MIGRATED="${FORCE_ALREADY_MIGRATED:-false}" |
|
VERBOSE="${VERBOSE:-true}" |
|
|
|
case "$MIGRATION_MODE" in full|db_only) ;; *) fail "Ungueltiger MIGRATION_MODE: $MIGRATION_MODE";; esac |
|
case "$DB_TRANSFER_MODE" in copy|move) ;; *) fail "Ungueltiger DB_TRANSFER_MODE: $DB_TRANSFER_MODE";; esac |
|
case "$SET_OWNER" in auto|AUTO|Auto|true|TRUE|yes|YES|ja|JA|1|false|FALSE|no|NO|nein|NEIN|0) ;; *) fail "Ungueltiger SET_OWNER: $SET_OWNER";; esac |
|
} |
|
|
|
validate_basic_paths() { |
|
[ -f "$SQL_ENV" ] || fail "SQL_ENV nicht gefunden: $SQL_ENV" |
|
if [ "$MIGRATION_MODE" = "full" ]; then |
|
[ "$TARGET_WEBAPP" != "auto" ] || fail "TARGET_WEBAPP=auto ist bei MIGRATION_MODE=full nicht erlaubt." |
|
fi |
|
if [ "$TARGET_WEBAPP" != "auto" ]; then |
|
case "$TARGET_WEBAPP" in |
|
""|"/"|"/var"|"/var/lib"|"/var/lib/tomcat"|"/var/lib/tomcat/webapps"|"/var/lib/tomcat10"|"/var/lib/tomcat10/webapps"|"/srv"|"/srv/tomcat"|"/srv/tomcat/webapps"|"/home"|"/tmp") |
|
fail "TARGET_WEBAPP ist zu allgemein/gefaehrlich: $TARGET_WEBAPP";; |
|
esac |
|
fi |
|
if is_true "$CREATE_TOMCAT_SYMLINK"; then |
|
[ -n "$TOMCAT_WEBAPPS_DIR" ] || fail "TOMCAT_WEBAPPS_DIR ist leer." |
|
[ -n "$TOMCAT_CONTEXT_NAME" ] || fail "TOMCAT_CONTEXT_NAME ist leer." |
|
case "$TOMCAT_CONTEXT_NAME" in */*|.*|"") fail "TOMCAT_CONTEXT_NAME ist ungueltig: $TOMCAT_CONTEXT_NAME";; esac |
|
fi |
|
} |
|
|
|
check_source_not_already_migrated() { |
|
SOURCE_SUPERX_DIR_REAL="$(canon_path "$SOURCE_SUPERX_DIR")" |
|
SOURCE_WEBAPP_REAL="$(canon_path "$SOURCE_WEBAPP")" |
|
case "$SOURCE_SUPERX_DIR_REAL" in |
|
"$SOURCE_WEBAPP_REAL"/*) |
|
if is_true "$FORCE_ALREADY_MIGRATED"; then |
|
warn "SUPERX_DIR liegt bereits innerhalb von WEBAPP. FORCE_ALREADY_MIGRATED=true, Migration wird trotzdem fortgesetzt." |
|
else |
|
fail "SUPERX_DIR liegt bereits innerhalb von WEBAPP. Die Installation sieht bereits migriert aus. |
|
|
|
SUPERX_DIR=$SOURCE_SUPERX_DIR |
|
WEBAPP=$SOURCE_WEBAPP |
|
|
|
Nur im Notfall uebersteuern mit: |
|
FORCE_ALREADY_MIGRATED=\"true\"" |
|
fi;; |
|
esac |
|
} |
|
|
|
load_old_sql_env() { |
|
# shellcheck disable=SC1090 |
|
. "$SQL_ENV" |
|
[ -n "${SUPERX_DIR:-}" ] || fail "SUPERX_DIR wurde durch SQL_ENV nicht gesetzt." |
|
[ -n "${WEBAPP:-}" ] || fail "WEBAPP wurde durch SQL_ENV nicht gesetzt." |
|
|
|
SOURCE_SUPERX_DIR="$SUPERX_DIR" |
|
SOURCE_WEBAPP="$WEBAPP" |
|
check_source_not_already_migrated |
|
|
|
if [ -d "$SOURCE_SUPERX_DIR/db/bin" ]; then |
|
SOURCE_DB="$SOURCE_SUPERX_DIR/db" |
|
SOURCE_TYPE="ALT_ODER_FULL_RELEASE" |
|
elif [ -d "$SOURCE_SUPERX_DIR/bin" ] && [ "$(basename "$SOURCE_SUPERX_DIR")" = "db" ]; then |
|
SOURCE_DB="$SOURCE_SUPERX_DIR" |
|
SOURCE_TYPE="DB_DIREKT" |
|
elif [ -d "$SOURCE_SUPERX_DIR/db" ]; then |
|
SOURCE_DB="$SOURCE_SUPERX_DIR/db" |
|
SOURCE_TYPE="ALT_ODER_FULL_RELEASE" |
|
else |
|
fail "DB-Verzeichnis konnte nicht erkannt werden. SUPERX_DIR=$SOURCE_SUPERX_DIR" |
|
fi |
|
|
|
[ -d "$SOURCE_WEBAPP/WEB-INF" ] || fail "WEBAPP scheint keine SuperX-Webapp zu sein: $SOURCE_WEBAPP/WEB-INF fehlt." |
|
[ -d "$SOURCE_DB/bin" ] || fail "DB-bin-Verzeichnis fehlt: $SOURCE_DB/bin" |
|
|
|
if [ "$MIGRATION_MODE" = "db_only" ] && [ "$TARGET_WEBAPP" = "auto" ]; then |
|
TARGET_WEBAPP="$SOURCE_WEBAPP" |
|
fi |
|
|
|
TARGET_SUPERX_DIR="$TARGET_WEBAPP/WEB-INF/conf/edustore" |
|
TARGET_DB="$TARGET_SUPERX_DIR/db" |
|
TARGET_SQL_ENV="$TARGET_DB/bin/SQL_ENV" |
|
SOURCE_DB_REAL="$(canon_path "$SOURCE_DB")" |
|
TARGET_DB_REAL="$(canon_path "$TARGET_DB")" |
|
TARGET_WEBAPP_REAL="$(canon_path "$TARGET_WEBAPP")" |
|
TOMCAT_SYMLINK_PATH="$TOMCAT_WEBAPPS_DIR/$TOMCAT_CONTEXT_NAME" |
|
} |
|
|
|
normalize_owner_mode() { |
|
EFFECTIVE_SET_OWNER="$SET_OWNER" |
|
if ! is_true "$SET_RIGHTS" || is_false "$SET_OWNER"; then EFFECTIVE_SET_OWNER="false"; return 0; fi |
|
if is_auto "$SET_OWNER"; then |
|
if is_root; then EFFECTIVE_SET_OWNER="true"; return 0; fi |
|
if current_user_matches_target; then |
|
EFFECTIVE_SET_OWNER="false" |
|
log "SET_OWNER=auto: chown wird uebersprungen, weil laufender User '$WEBAPP_USER' ist und zur Gruppe '$WEBAPP_GROUP' gehoert." |
|
return 0 |
|
fi |
|
EFFECTIVE_SET_OWNER="true"; return 0 |
|
fi |
|
if is_true "$SET_OWNER"; then EFFECTIVE_SET_OWNER="true"; return 0; fi |
|
} |
|
|
|
root_needed_reasons() { |
|
local reasons=() |
|
is_true "$STOP_TOMCAT" && reasons+=("STOP_TOMCAT=true") |
|
is_true "$START_TOMCAT" && reasons+=("START_TOMCAT=true") |
|
is_true "$CREATE_GROUP_IF_MISSING" && ! group_exists "$WEBAPP_GROUP" && reasons+=("CREATE_GROUP_IF_MISSING=true und Gruppe '$WEBAPP_GROUP' fehlt") |
|
if is_true "$ADD_WEBAPP_USER_TO_GROUP" && user_exists "$WEBAPP_USER" && group_exists "$WEBAPP_GROUP" && ! user_in_group "$WEBAPP_USER" "$WEBAPP_GROUP"; then |
|
reasons+=("ADD_WEBAPP_USER_TO_GROUP=true und '$WEBAPP_USER' ist noch nicht in Gruppe '$WEBAPP_GROUP'") |
|
fi |
|
is_true "$SET_RIGHTS" && is_true "$EFFECTIVE_SET_OWNER" && reasons+=("chown auf '$WEBAPP_USER:$WEBAPP_GROUP'") |
|
if is_true "$CREATE_TOMCAT_SYMLINK" && [ -d "$TOMCAT_WEBAPPS_DIR" ] && [ ! -w "$TOMCAT_WEBAPPS_DIR" ]; then |
|
reasons+=("CREATE_TOMCAT_SYMLINK=true und TOMCAT_WEBAPPS_DIR ist nicht beschreibbar: $TOMCAT_WEBAPPS_DIR") |
|
fi |
|
[ "${#reasons[@]}" -gt 0 ] && printf '%s\n' "${reasons[@]}" && return 0 |
|
return 1 |
|
} |
|
|
|
validate_privileges() { |
|
normalize_owner_mode |
|
is_root && return 0 |
|
local reasons |
|
if reasons="$(root_needed_reasons)"; then |
|
fail "Dieses Skript laeuft nicht als root, aber folgende Aktionen brauchen root-Rechte: |
|
|
|
$reasons" |
|
fi |
|
} |
|
|
|
print_summary() { |
|
cat <<EOF_SUM |
|
|
|
=== SuperX Migration Tool $SCRIPT_VERSION === |
|
|
|
Config: |
|
CONFIG_FILE = $CONFIG_FILE |
|
DRY_RUN = $DRY_RUN |
|
RUNNING_AS = $(current_user) |
|
IS_ROOT = $(is_root && echo true || echo false) |
|
|
|
Modus: |
|
MIGRATION_MODE = $MIGRATION_MODE |
|
DB_TRANSFER_MODE = $DB_TRANSFER_MODE |
|
|
|
Quelle: |
|
SQL_ENV = $SQL_ENV |
|
SOURCE_TYPE = $SOURCE_TYPE |
|
SOURCE_SUPERX_DIR = $SOURCE_SUPERX_DIR |
|
SOURCE_WEBAPP = $SOURCE_WEBAPP |
|
SOURCE_DB = $SOURCE_DB |
|
|
|
Ziel: |
|
TARGET_WEBAPP = $TARGET_WEBAPP |
|
TARGET_SUPERX_DIR = $TARGET_SUPERX_DIR |
|
TARGET_DB = $TARGET_DB |
|
TARGET_SQL_ENV = $TARGET_SQL_ENV |
|
|
|
Symlink: |
|
CREATE_TOMCAT_SYMLINK = $CREATE_TOMCAT_SYMLINK |
|
TOMCAT_WEBAPPS_DIR = $TOMCAT_WEBAPPS_DIR |
|
TOMCAT_CONTEXT_NAME = $TOMCAT_CONTEXT_NAME |
|
TOMCAT_SYMLINK_PATH = $TOMCAT_SYMLINK_PATH |
|
REPLACE_EXISTING_SYMLINK = $REPLACE_EXISTING_SYMLINK |
|
|
|
Rechte: |
|
WEBAPP_USER = $WEBAPP_USER |
|
WEBAPP_GROUP = $WEBAPP_GROUP |
|
SET_RIGHTS = $SET_RIGHTS |
|
SET_OWNER = $SET_OWNER |
|
EFFECTIVE_SET_OWNER = $EFFECTIVE_SET_OWNER |
|
SET_CHMOD = $SET_CHMOD |
|
|
|
======================================== |
|
|
|
EOF_SUM |
|
} |
|
|
|
validate_users_and_groups() { |
|
user_exists "$WEBAPP_USER" || fail "WEBAPP_USER existiert nicht: $WEBAPP_USER" |
|
if ! group_exists "$WEBAPP_GROUP"; then |
|
if is_true "$CREATE_GROUP_IF_MISSING"; then run "groupadd '$WEBAPP_GROUP'"; else fail "Gruppe existiert nicht: $WEBAPP_GROUP"; fi |
|
fi |
|
if is_true "$ADD_WEBAPP_USER_TO_GROUP"; then |
|
if user_in_group "$WEBAPP_USER" "$WEBAPP_GROUP"; then |
|
log "WEBAPP_USER '$WEBAPP_USER' ist bereits Mitglied der Gruppe '$WEBAPP_GROUP'." |
|
else |
|
run "usermod -aG '$WEBAPP_GROUP' '$WEBAPP_USER'" |
|
warn "Falls ein Dienst mit diesem User laeuft, muss er neu gestartet werden, damit die neue Gruppenmitgliedschaft aktiv wird." |
|
fi |
|
fi |
|
} |
|
|
|
validate_target() { |
|
[ "$TARGET_WEBAPP" = "$SOURCE_WEBAPP" ] && [ "$MIGRATION_MODE" = "full" ] && fail "TARGET_WEBAPP darf bei MIGRATION_MODE=full nicht identisch mit SOURCE_WEBAPP sein." |
|
[ -e "$TARGET_WEBAPP" ] && [ ! -d "$TARGET_WEBAPP" ] && fail "TARGET_WEBAPP existiert, ist aber kein Verzeichnis: $TARGET_WEBAPP" |
|
[ "$MIGRATION_MODE" = "full" ] && [ -d "$TARGET_WEBAPP/WEB-INF" ] && ! is_true "$ALLOW_EXISTING_TARGET" && fail "Ziel-Webapp existiert bereits: $TARGET_WEBAPP" |
|
[ "$SOURCE_DB_REAL" = "$TARGET_DB_REAL" ] && fail "SOURCE_DB und TARGET_DB sind identisch." |
|
case "$TARGET_DB_REAL" in "$SOURCE_DB_REAL"/*) fail "TARGET_DB liegt innerhalb von SOURCE_DB.";; esac |
|
case "$SOURCE_DB_REAL" in "$TARGET_DB_REAL"/*) fail "SOURCE_DB liegt innerhalb von TARGET_DB.";; esac |
|
[ "$DB_TRANSFER_MODE" = "move" ] && [ -e "$TARGET_DB" ] && fail "DB_TRANSFER_MODE=move, aber TARGET_DB existiert bereits: $TARGET_DB" |
|
[ "$DB_TRANSFER_MODE" = "copy" ] && [ -e "$TARGET_DB" ] && ! is_true "$ALLOW_EXISTING_TARGET_DB" && fail "TARGET_DB existiert bereits: $TARGET_DB" |
|
if is_true "$CREATE_TOMCAT_SYMLINK" && { [ -e "$TOMCAT_SYMLINK_PATH" ] || [ -L "$TOMCAT_SYMLINK_PATH" ]; }; then |
|
if [ -L "$TOMCAT_SYMLINK_PATH" ] && is_true "$REPLACE_EXISTING_SYMLINK"; then :; else |
|
fail "Tomcat-Symlink/Ziel existiert bereits: $TOMCAT_SYMLINK_PATH" |
|
fi |
|
fi |
|
} |
|
|
|
stop_tomcat_if_requested() { is_true "$STOP_TOMCAT" && run "systemctl stop '$TOMCAT_SERVICE'"; } |
|
start_tomcat_if_requested() { is_true "$START_TOMCAT" && run "systemctl start '$TOMCAT_SERVICE'"; } |
|
|
|
copy_webapp_if_requested() { |
|
[ "$MIGRATION_MODE" != "full" ] && { log "MIGRATION_MODE=db_only: Webapp wird nicht kopiert."; return 0; } |
|
command -v rsync >/dev/null 2>&1 || fail "rsync ist nicht installiert oder nicht im PATH." |
|
run "mkdir -p '$TARGET_WEBAPP'" |
|
RSYNC_DELETE=""; is_true "$DELETE_TARGET" && RSYNC_DELETE="--delete" |
|
log "Kopiere Webapp..." |
|
run "rsync -a $RSYNC_DELETE '$SOURCE_WEBAPP/' '$TARGET_WEBAPP/'" |
|
} |
|
|
|
transfer_db() { |
|
run "mkdir -p '$TARGET_SUPERX_DIR'" |
|
if [ "$DB_TRANSFER_MODE" = "copy" ]; then |
|
command -v rsync >/dev/null 2>&1 || fail "rsync ist nicht installiert oder nicht im PATH." |
|
RSYNC_DELETE=""; is_true "$DELETE_TARGET" && RSYNC_DELETE="--delete" |
|
log "Kopiere DB-Verzeichnis nach WEB-INF/conf/edustore/db..." |
|
run "mkdir -p '$TARGET_DB'" |
|
run "rsync -a $RSYNC_DELETE '$SOURCE_DB/' '$TARGET_DB/'" |
|
else |
|
log "Verschiebe DB-Verzeichnis nach WEB-INF/conf/edustore/db..." |
|
run "mkdir -p '$(dirname "$TARGET_DB")'" |
|
run "mv '$SOURCE_DB' '$TARGET_DB'" |
|
fi |
|
} |
|
|
|
backup_target_sql_env() { |
|
if [ -f "$TARGET_SQL_ENV" ]; then |
|
TS="$(date +%Y%m%d_%H%M%S)" |
|
run "cp -p '$TARGET_SQL_ENV' '$TARGET_SQL_ENV.bak.$TS'" |
|
else |
|
warn "Ziel-SQL_ENV existiert noch nicht: $TARGET_SQL_ENV" |
|
fi |
|
} |
|
|
|
update_target_sql_env() { |
|
is_true "$UPDATE_SQL_ENV" || return 0 |
|
[ -f "$TARGET_SQL_ENV" ] || fail "Ziel-SQL_ENV nicht gefunden: $TARGET_SQL_ENV" |
|
backup_target_sql_env |
|
if is_true "$DRY_RUN"; then echo "[DRY-RUN] passe SQL_ENV an: $TARGET_SQL_ENV"; return 0; fi |
|
python3 - "$TARGET_SQL_ENV" "$TARGET_SUPERX_DIR" "$TARGET_WEBAPP" <<'PY' |
|
from pathlib import Path |
|
import re, sys |
|
path = Path(sys.argv[1]); new_superx_dir = sys.argv[2]; new_webapp = sys.argv[3] |
|
lines = path.read_text(encoding='utf-8', errors='surrogateescape').splitlines() |
|
out=[]; seen_umask=seen_superx=seen_webapp=seen_export_superx=seen_export_webapp=False |
|
for line in lines: |
|
s=line.strip() |
|
if re.match(r'^umask\s+', s): |
|
if not seen_umask: out.append('umask 002'); seen_umask=True |
|
else: out.append('# '+line) |
|
elif re.match(r'^SUPERX_DIR\s*=', s): |
|
if not seen_superx: out.append(f'SUPERX_DIR="{new_superx_dir}"'); seen_superx=True |
|
else: out.append('# '+line) |
|
elif re.match(r'^WEBAPP\s*=', s): |
|
if not seen_webapp: out.append(f'WEBAPP="{new_webapp}"'); seen_webapp=True |
|
else: out.append('# '+line) |
|
elif re.match(r'^export\s+SUPERX_DIR\b', s): |
|
seen_export_superx=True; out.append(line) |
|
elif re.match(r'^export\s+WEBAPP\b', s): |
|
seen_export_webapp=True; out.append(line) |
|
else: out.append(line) |
|
insert=[] |
|
if not seen_umask: insert.append('umask 002') |
|
if not seen_superx: insert.append(f'SUPERX_DIR="{new_superx_dir}"') |
|
if not seen_export_superx: insert.append('export SUPERX_DIR') |
|
if not seen_webapp: insert.append(f'WEBAPP="{new_webapp}"') |
|
if not seen_export_webapp: insert.append('export WEBAPP') |
|
if insert: out = insert + [''] + out |
|
path.write_text('\n'.join(out)+'\n', encoding='utf-8', errors='surrogateescape') |
|
PY |
|
} |
|
|
|
set_rights() { |
|
is_true "$SET_RIGHTS" || { log "Rechte setzen ist deaktiviert."; return 0; } |
|
[ -d "$TARGET_WEBAPP" ] || fail "TARGET_WEBAPP fehlt: $TARGET_WEBAPP" |
|
if is_true "$EFFECTIVE_SET_OWNER"; then run "chown -R '$WEBAPP_USER:$WEBAPP_GROUP' '$TARGET_WEBAPP'"; else log "Owner/Gruppe werden nicht gesetzt."; fi |
|
if is_true "$SET_CHMOD"; then |
|
run "find '$TARGET_WEBAPP' -type d -exec chmod 2775 {} +" |
|
run "find '$TARGET_WEBAPP' -type f -exec chmod 664 {} +" |
|
[ -d "$TARGET_DB/bin" ] && run "find '$TARGET_DB/bin' -type f -exec chmod 775 {} +" |
|
run "find '$TARGET_WEBAPP' -type f \\( -name '*.x' -o -name '*.sh' \\) -exec chmod 775 {} +" |
|
fi |
|
} |
|
|
|
create_tomcat_symlink_if_requested() { |
|
is_true "$CREATE_TOMCAT_SYMLINK" || { log "Tomcat-Symlink wird nicht erstellt."; return 0; } |
|
log "Erstelle Tomcat-Symlink..." |
|
run "mkdir -p '$TOMCAT_WEBAPPS_DIR'" |
|
[ -L "$TOMCAT_SYMLINK_PATH" ] && is_true "$REPLACE_EXISTING_SYMLINK" && run "rm '$TOMCAT_SYMLINK_PATH'" |
|
run "ln -s '$TARGET_WEBAPP' '$TOMCAT_SYMLINK_PATH'" |
|
} |
|
|
|
final_notes() { |
|
cat <<EOF_NOTE |
|
|
|
Migration abgeschlossen. |
|
|
|
Pruefen: |
|
ls -ld "$TARGET_WEBAPP" |
|
ls -ld "$TARGET_DB" |
|
ls -l "$TARGET_DB/bin/SQL_ENV" |
|
. "$TARGET_SQL_ENV" |
|
echo \$SUPERX_DIR |
|
echo \$WEBAPP |
|
EOF_NOTE |
|
is_true "$CREATE_TOMCAT_SYMLINK" && echo " ls -l \"$TOMCAT_SYMLINK_PATH\"" |
|
[ "$DB_TRANSFER_MODE" = "move" ] && warn "DB_TRANSFER_MODE=move wurde verwendet. Alte DB-Quelle wurde verschoben: $SOURCE_DB" |
|
} |
|
|
|
main() { |
|
load_config |
|
validate_basic_paths |
|
load_old_sql_env |
|
validate_privileges |
|
print_summary |
|
validate_users_and_groups |
|
validate_target |
|
stop_tomcat_if_requested |
|
copy_webapp_if_requested |
|
transfer_db |
|
update_target_sql_env |
|
set_rights |
|
create_tomcat_symlink_if_requested |
|
start_tomcat_if_requested |
|
final_notes |
|
} |
|
main "$@"
|
|
|