@ -1,29 +1,15 @@
#!/usr/bin/env bash
#!/usr/bin/env bash
# migrate_superx_webapp.sh
# migrate_superx_webapp.sh
# Version 1.5
#
#
# Migriert eine bestehende SuperX-Installation in eine neue Tomcat-Webapp-Struktur.
# Migriert eine bestehende SuperX-Installation in eine neue Webapp-Struktur.
#
# Standardziel: /home/superx/webapps/superx
# Erwartete Dateien im selben Verzeichnis:
# Optional: Symlink aus Tomcat-webapps auf TARGET_WEBAPP.
# migrate_superx.conf
# migrate_superx_webapp.sh
#
# Modi:
# MIGRATION_MODE=full
# Webapp wird nach TARGET_WEBAPP kopiert.
# db wird nach TARGET_WEBAPP/WEB-INF/conf/edustore/db kopiert oder verschoben.
#
# MIGRATION_MODE=db_only
# Webapp wird nicht kopiert.
# db wird in die bestehende oder angegebene Webapp unter WEB-INF/conf/edustore/db kopiert oder verschoben.
#
# DB_TRANSFER_MODE:
# copy: db wird per rsync kopiert.
# move: db wird per mv verschoben. Ziel-db darf dabei noch nicht existieren.
set -euo pipefail
set -euo pipefail
SCRIPT_NAME = " $( basename " $0 " ) "
SCRIPT_NAME = " $( basename " $0 " ) "
SCRIPT_VERSION = "1.4 "
SCRIPT_VERSION = "1.5"
SCRIPT_DIR = " $( cd " $( dirname " ${ BASH_SOURCE [0] } " ) " && pwd ) "
SCRIPT_DIR = " $( cd " $( dirname " ${ BASH_SOURCE [0] } " ) " && pwd ) "
CONFIG_FILE = " $SCRIPT_DIR /migrate_superx.conf "
CONFIG_FILE = " $SCRIPT_DIR /migrate_superx.conf "
@ -31,48 +17,22 @@ log() { echo "[$SCRIPT_NAME] $*"; }
warn( ) { echo " [ $SCRIPT_NAME ] WARNUNG: $* " >& 2; }
warn( ) { echo " [ $SCRIPT_NAME ] WARNUNG: $* " >& 2; }
fail( ) { echo " [ $SCRIPT_NAME ] FEHLER: $* " >& 2; exit 1; }
fail( ) { echo " [ $SCRIPT_NAME ] FEHLER: $* " >& 2; exit 1; }
is_true( ) {
is_true( ) { case " ${ 1 :- false } " in true| TRUE| yes| YES| ja| JA| 1) return 0; ; *) return 1; ; esac ; }
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_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 ] ; }
is_root( ) { [ " $( id -u) " -eq 0 ] ; }
current_user( ) { id -un; }
current_user( ) { id -un; }
user_exists( ) { id " $1 " >/dev/null 2>& 1; }
user_exists( ) { id " $1 " >/dev/null 2>& 1; }
group_exists( ) { getent group " $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 " ; }
user_in_group( ) {
current_user_matches_target( ) { [ " $( current_user) " = " $WEBAPP_USER " ] && user_in_group " $( current_user) " " $WEBAPP_GROUP " ; }
local user = " $1 "
canon_path( ) { if command -v realpath >/dev/null 2>& 1; then realpath -m " $1 " ; else printf '%s\n' " $1 " ; fi ; }
local group = " $2 "
id -nG " $user " 2>/dev/null | tr ' ' '\n' | grep -qx " $group "
}
current_user_matches_target( ) {
[ " $( current_user) " = " $TOMCAT_USER " ] && user_in_group " $( current_user) " " $SUPERX_GROUP "
}
canon_path( ) {
if command -v realpath >/dev/null 2>& 1; then
realpath -m " $1 "
else
printf '%s\n' " $1 "
fi
}
run( ) {
run( ) {
if is_true " ${ DRY_RUN :- false } " ; then
if is_true " ${ DRY_RUN :- false } " ; then
echo " [DRY-RUN] $* "
echo " [DRY-RUN] $* "
else
else
if is_true " ${ VERBOSE :- false } " ; then
if is_true " ${ VERBOSE :- false } " ; then echo " + $* " ; fi
echo " + $* "
fi
eval " $@ "
eval " $@ "
fi
fi
}
}
@ -82,40 +42,38 @@ usage() {
Nutzung:
Nutzung:
./$SCRIPT_NAME
./$SCRIPT_NAME
Hinweis:
Die Datei migrate_superx.conf muss im selben Verzeichnis liegen wie dieses Skript.
Die Datei migrate_superx.conf muss im selben Verzeichnis liegen wie dieses Skript.
Erwartet: $CONFIG_FILE
Migrationsmodi:
MIGRATION_MODE: full | db_only
MIGRATION_MODE = full
DB_TRANSFER_MODE: copy | move
MIGRATION_MODE = db_only
DB-Uebertragung:
DB_TRANSFER_MODE = copy
DB_TRANSFER_MODE = move
USAGE
USAGE
}
}
load_config( ) {
load_config( ) {
[ -f " $CONFIG_FILE " ] || { usage; fail " Config-Datei nicht gefunden: $CONFIG_FILE " ; }
[ -f " $CONFIG_FILE " ] || { usage; fail " Config-Datei nicht gefunden: $CONFIG_FILE " ; }
# shellcheck disable=SC1090
# shellcheck disable=SC1090
. " $CONFIG_FILE "
. " $CONFIG_FILE "
: " ${ SQL_ENV : ?SQL_ENV ist nicht gesetzt } "
: " ${ SQL_ENV : ?SQL_ENV ist nicht gesetzt } "
: " ${ TARGET_WEBAPP : ?TARGET_WEBAPP ist nicht gesetzt } "
: " ${ TARGET_WEBAPP : ?TARGET_WEBAPP ist nicht gesetzt } "
: " ${ TOMCAT_USER : ?TOMCAT _USER ist nicht gesetzt} "
: " ${ WEBAPP_USER : ?WEBAPP _USER ist nicht gesetzt} "
: " ${ SUPERX_GROUP : ?SUPERX _GROUP ist nicht gesetzt} "
: " ${ WEBAPP_GROUP : ?WEBAPP _GROUP ist nicht gesetzt} "
MIGRATION_MODE = " ${ MIGRATION_MODE :- full } "
MIGRATION_MODE = " ${ MIGRATION_MODE :- full } "
DB_TRANSFER_MODE = " ${ DB_TRANSFER_MODE :- copy } "
DB_TRANSFER_MODE = " ${ DB_TRANSFER_MODE :- copy } "
STOP_TOMCAT = " ${ STOP_TOMCAT :- false } "
STOP_TOMCAT = " ${ STOP_TOMCAT :- false } "
START_TOMCAT = " ${ START_TOMCAT :- false } "
START_TOMCAT = " ${ START_TOMCAT :- false } "
TOMCAT_SERVICE = " ${ TOMCAT_SERVICE :- tomcat10 } "
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 } "
DELETE_TARGET = " ${ DELETE_TARGET :- false } "
ALLOW_EXISTING_TARGET = " ${ ALLOW_EXISTING_TARGET :- true } "
ALLOW_EXISTING_TARGET = " ${ ALLOW_EXISTING_TARGET :- true } "
ALLOW_EXISTING_TARGET_DB = " ${ ALLOW_EXISTING_TARGET_DB :- true } "
ALLOW_EXISTING_TARGET_DB = " ${ ALLOW_EXISTING_TARGET_DB :- true } "
DRY_RUN = " ${ DRY_RUN :- false } "
DRY_RUN = " ${ DRY_RUN :- false } "
ADD_TOMCAT _TO_GROUP = " ${ ADD_TOMCAT _TO_GROUP :- true } "
ADD_WEBAPP_USER _TO_GROUP = " ${ ADD_WEBAPP_USER _TO_GROUP :- true } "
CREATE_GROUP_IF_MISSING = " ${ CREATE_GROUP_IF_MISSING :- false } "
CREATE_GROUP_IF_MISSING = " ${ CREATE_GROUP_IF_MISSING :- false } "
UPDATE_SQL_ENV = " ${ UPDATE_SQL_ENV :- true } "
UPDATE_SQL_ENV = " ${ UPDATE_SQL_ENV :- true } "
SET_RIGHTS = " ${ SET_RIGHTS :- true } "
SET_RIGHTS = " ${ SET_RIGHTS :- true } "
@ -124,68 +82,56 @@ load_config() {
FORCE_ALREADY_MIGRATED = " ${ FORCE_ALREADY_MIGRATED :- false } "
FORCE_ALREADY_MIGRATED = " ${ FORCE_ALREADY_MIGRATED :- false } "
VERBOSE = " ${ VERBOSE :- true } "
VERBOSE = " ${ VERBOSE :- true } "
case " $MIGRATION_MODE " in full| db_only) ; ; *) fail " Ungueltiger Wert fuer MIGRATION_MODE: $MIGRATION_MODE . Erlaubt: full, db_only. " ; ; esac
case " $MIGRATION_MODE " in full| db_only) ; ; *) fail " Ungueltiger MIGRATION_MODE: $MIGRATION_MODE " ; ; esac
case " $DB_TRANSFER_MODE " in copy| move) ; ; *) fail " Ungueltiger Wert fuer DB_TRANSFER_MODE: $DB_TRANSFER_MODE . Erlaubt: copy, move. " ; ; 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 Wert fuer SET_OWNER: $SET_OWNER . Erlaubt: auto, true, false. " ; ; 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( ) {
validate_basic_paths( ) {
[ -f " $SQL_ENV " ] || fail " SQL_ENV nicht gefunden: $SQL_ENV "
[ -f " $SQL_ENV " ] || fail " SQL_ENV nicht gefunden: $SQL_ENV "
if [ " $MIGRATION_MODE " = "full" ] ; then
if [ " $MIGRATION_MODE " = "full" ] ; then
[ " $TARGET_WEBAPP " != "auto" ] || fail "TARGET_WEBAPP=auto ist bei MIGRATION_MODE=full nicht erlaubt."
[ " $TARGET_WEBAPP " != "auto" ] || fail "TARGET_WEBAPP=auto ist bei MIGRATION_MODE=full nicht erlaubt."
fi
fi
if [ " $TARGET_WEBAPP " != "auto" ] ; then
if [ " $TARGET_WEBAPP " != "auto" ] ; then
case " $TARGET_WEBAPP " in
case " $TARGET_WEBAPP " in
"" | "/" | "/var" | "/var/lib" | "/var/lib/tomcat" | "/var/lib/tomcat/webapps" | "/srv" | "/srv/tomcat" | "/srv/tomcat/webapps" | "/home" | "/tmp" )
"" | "/" | "/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 "
fail " TARGET_WEBAPP ist zu allgemein/gefaehrlich: $TARGET_WEBAPP " ; ;
; ;
esac
esac
fi
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( ) {
check_source_not_already_migrated( ) {
local superx_real webapp_real
SOURCE_SUPERX_DIR_REAL = " $( canon_path " $SOURCE_SUPERX_DIR " ) "
superx_real = " $( canon_path " $SOURCE_SUPERX_DIR " ) "
SOURCE_WEBAPP_REAL = " $( canon_path " $SOURCE_WEBAPP " ) "
webapp_real = " $( canon_path " $SOURCE_WEBAPP " ) "
case " $SOURCE_SUPERX_DIR_REAL " in
" $SOURCE_WEBAPP_REAL " /*)
SOURCE_SUPERX_DIR_REAL = " $superx_real "
SOURCE_WEBAPP_REAL = " $webapp_real "
case " $superx_real " in
" $webapp_real " /*)
if is_true " $FORCE_ALREADY_MIGRATED " ; then
if is_true " $FORCE_ALREADY_MIGRATED " ; then
warn "SUPERX_DIR liegt bereits innerhalb von WEBAPP. FORCE_ALREADY_MIGRATED=true ist gesetzt , Migration wird trotzdem fortgesetzt."
warn "SUPERX_DIR liegt bereits innerhalb von WEBAPP. FORCE_ALREADY_MIGRATED=true, Migration wird trotzdem fortgesetzt."
else
else
fail " SUPERX_DIR liegt bereits innerhalb von WEBAPP. Die Installation sieht bereits nach der neuen Webapp-Struktur aus.
fail " SUPERX_DIR liegt bereits innerhalb von WEBAPP. Die Installation sieht bereits migriert aus.
SUPERX_DIR = $SOURCE_SUPERX_DIR
SUPERX_DIR = $SOURCE_SUPERX_DIR
WEBAPP = $SOURCE_WEBAPP
WEBAPP = $SOURCE_WEBAPP
Realpfade:
Nur im Notfall uebersteuern mit:
SUPERX_DIR = $superx_real
WEBAPP = $webapp_real
Migration wird abgebrochen.
Nur wenn du die Risiken kennst und trotzdem migrieren willst:
FORCE_ALREADY_MIGRATED = \" true\" "
FORCE_ALREADY_MIGRATED = \" true\" "
fi
fi ; ;
; ;
esac
esac
}
}
load_old_sql_env( ) {
load_old_sql_env( ) {
# shellcheck disable=SC1090
# shellcheck disable=SC1090
. " $SQL_ENV "
. " $SQL_ENV "
[ -n " ${ SUPERX_DIR :- } " ] || fail "SUPERX_DIR wurde durch SQL_ENV nicht gesetzt."
[ -n " ${ SUPERX_DIR :- } " ] || fail "SUPERX_DIR wurde durch SQL_ENV nicht gesetzt."
[ -n " ${ WEBAPP :- } " ] || fail "WEBAPP wurde durch SQL_ENV nicht gesetzt."
[ -n " ${ WEBAPP :- } " ] || fail "WEBAPP wurde durch SQL_ENV nicht gesetzt."
SOURCE_SUPERX_DIR = " $SUPERX_DIR "
SOURCE_SUPERX_DIR = " $SUPERX_DIR "
SOURCE_WEBAPP = " $WEBAPP "
SOURCE_WEBAPP = " $WEBAPP "
check_source_not_already_migrated
check_source_not_already_migrated
if [ -d " $SOURCE_SUPERX_DIR /db/bin " ] ; then
if [ -d " $SOURCE_SUPERX_DIR /db/bin " ] ; then
@ -198,12 +144,11 @@ load_old_sql_env() {
SOURCE_DB = " $SOURCE_SUPERX_DIR /db "
SOURCE_DB = " $SOURCE_SUPERX_DIR /db "
SOURCE_TYPE = "ALT_ODER_FULL_RELEASE"
SOURCE_TYPE = "ALT_ODER_FULL_RELEASE"
else
else
fail " DB-Verzeichnis konnte nicht erkannt werden. Erwartet: \$SUPERX_DIR/db/bin oder \$SUPERX_DIR/bin. SUPERX_DIR= $SOURCE_SUPERX_DIR "
fail " DB-Verzeichnis konnte nicht erkannt werden. SUPERX_DIR= $SOURCE_SUPERX_DIR "
fi
fi
[ -d " $SOURCE_WEBAPP /WEB-INF " ] || fail " WEBAPP scheint keine SuperX-Webapp zu sein: $SOURCE_WEBAPP /WEB-INF fehlt. "
[ -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 "
[ -d " $SOURCE_DB /bin " ] || fail " DB-bin-Verzeichnis fehlt: $SOURCE_DB /bin "
[ -f " $SOURCE_DB /bin/SQL_ENV " ] || warn " Quelle enthaelt keine SQL_ENV unter: $SOURCE_DB /bin/SQL_ENV "
if [ " $MIGRATION_MODE " = "db_only" ] && [ " $TARGET_WEBAPP " = "auto" ] ; then
if [ " $MIGRATION_MODE " = "db_only" ] && [ " $TARGET_WEBAPP " = "auto" ] ; then
TARGET_WEBAPP = " $SOURCE_WEBAPP "
TARGET_WEBAPP = " $SOURCE_WEBAPP "
@ -212,92 +157,62 @@ load_old_sql_env() {
TARGET_SUPERX_DIR = " $TARGET_WEBAPP /WEB-INF/conf/edustore "
TARGET_SUPERX_DIR = " $TARGET_WEBAPP /WEB-INF/conf/edustore "
TARGET_DB = " $TARGET_SUPERX_DIR /db "
TARGET_DB = " $TARGET_SUPERX_DIR /db "
TARGET_SQL_ENV = " $TARGET_DB /bin/SQL_ENV "
TARGET_SQL_ENV = " $TARGET_DB /bin/SQL_ENV "
SOURCE_DB_REAL = " $( canon_path " $SOURCE_DB " ) "
SOURCE_DB_REAL = " $( canon_path " $SOURCE_DB " ) "
TARGET_DB_REAL = " $( canon_path " $TARGET_DB " ) "
TARGET_DB_REAL = " $( canon_path " $TARGET_DB " ) "
TARGET_WEBAPP_REAL = " $( canon_path " $TARGET_WEBAPP " ) "
TARGET_WEBAPP_REAL = " $( canon_path " $TARGET_WEBAPP " ) "
TOMCAT_SYMLINK_PATH = " $TOMCAT_WEBAPPS_DIR / $TOMCAT_CONTEXT_NAME "
}
}
normalize_owner_mode( ) {
normalize_owner_mode( ) {
EFFECTIVE_SET_OWNER = " $SET_OWNER "
EFFECTIVE_SET_OWNER = " $SET_OWNER "
if ! is_true " $SET_RIGHTS " || is_false " $SET_OWNER " ; then EFFECTIVE_SET_OWNER = "false" ; return 0; fi
if ! is_true " $SET_RIGHTS " ; then EFFECTIVE_SET_OWNER = "false" ; return 0; fi
if is_false " $SET_OWNER " ; then EFFECTIVE_SET_OWNER = "false" ; return 0; fi
if is_auto " $SET_OWNER " ; then
if is_auto " $SET_OWNER " ; then
if is_root; then EFFECTIVE_SET_OWNER = "true" ; return 0; fi
if is_root; then EFFECTIVE_SET_OWNER = "true" ; return 0; fi
if current_user_matches_target; then
if current_user_matches_target; then
EFFECTIVE_SET_OWNER = "false"
EFFECTIVE_SET_OWNER = "false"
log " SET_OWNER=auto: chown wird uebersprungen, weil laufender User ' $TOMCAT_USER ' ist und zur Gruppe ' $SUPERX _GROUP ' gehoert. "
log " SET_OWNER=auto: chown wird uebersprungen, weil laufender User ' $WEBAPP_USER ' ist und zur Gruppe ' $WEBAPP _GROUP ' gehoert. "
return 0
return 0
fi
fi
EFFECTIVE_SET_OWNER = "true"
EFFECTIVE_SET_OWNER = "true" ; return 0
return 0
fi
fi
if is_true " $SET_OWNER " ; then EFFECTIVE_SET_OWNER = "true" ; return 0; fi
if is_true " $SET_OWNER " ; then EFFECTIVE_SET_OWNER = "true" ; return 0; fi
}
}
root_needed_reasons( ) {
root_needed_reasons( ) {
local reasons = ( )
local reasons = ( )
is_true " $STOP_TOMCAT " && reasons += ( "STOP_TOMCAT=true" )
if is_true " $STOP_TOMCAT " ; then reasons += ( "STOP_TOMCAT=true" ) ; fi
is_true " $START_TOMCAT " && reasons += ( "START_TOMCAT=true" )
if is_true " $START_TOMCAT " ; then reasons += ( "START_TOMCAT=true" ) ; fi
is_true " $CREATE_GROUP_IF_MISSING " && ! group_exists " $WEBAPP_GROUP " && reasons += ( " CREATE_GROUP_IF_MISSING=true und Gruppe ' $WEBAPP_GROUP ' fehlt " )
if is_true " $CREATE_GROUP_IF_MISSING " && ! group_exists " $SUPERX_GROUP " ; then reasons += ( " CREATE_GROUP_IF_MISSING=true und Gruppe ' $SUPERX_GROUP ' fehlt " ) ; fi
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 ' " )
if is_true " $ADD_TOMCAT_TO_GROUP " ; then
if user_exists " $TOMCAT_USER " && group_exists " $SUPERX_GROUP " ; then
if ! user_in_group " $TOMCAT_USER " " $SUPERX_GROUP " ; then
reasons += ( " ADD_TOMCAT_TO_GROUP=true und ' $TOMCAT_USER ' ist noch nicht in Gruppe ' $SUPERX_GROUP ' " )
fi
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
fi
fi
[ " ${# reasons [@] } " -gt 0 ] && printf '%s\n' " ${ reasons [@] } " && return 0
if is_true " $SET_RIGHTS " && is_true " $EFFECTIVE_SET_OWNER " ; then reasons += ( " chown auf ' $TOMCAT_USER : $SUPERX_GROUP ' " ) ; fi
if [ " ${# reasons [@] } " -gt 0 ] ; then printf '%s\n' " ${ reasons [@] } " ; return 0; fi
return 1
return 1
}
}
validate_privileges( ) {
validate_privileges( ) {
normalize_owner_mode
normalize_owner_mode
if is_root; then return 0; fi
is_root && return 0
local reasons
local reasons
if reasons = " $( root_needed_reasons) " ; then
if reasons = " $( root_needed_reasons) " ; then
cat >& 2 <<ROOTER R
fail " Dieses Skript laeuft nicht als root, aber folgende Aktionen brauchen root-Rechte:
[ $SCRIPT_NAME ] FEHLER: Dieses Skript laeuft nicht als root, aber folgende Aktionen brauchen root-Rechte:
$reasons
Moeglichkeiten:
$reasons "
1. Produktiv als root ausfuehren:
sudo ./$SCRIPT_NAME
2. Test ohne root, wenn alles dem laufenden User gehoeren soll:
TOMCAT_USER = " $( current_user) "
SUPERX_GROUP = "<passende Gruppe>"
ADD_TOMCAT_TO_GROUP = "false"
STOP_TOMCAT = "false"
START_TOMCAT = "false"
SET_OWNER = "auto"
3. Rechte komplett ueberspringen:
SET_RIGHTS = "false"
ROOTERR
exit 1
fi
fi
}
}
print_summary( ) {
print_summary( ) {
cat <<SUMMARY
cat <<EOF_SUM
= = = SuperX Migration Tool $SCRIPT_VERSION = = =
= = = SuperX Migration Tool $SCRIPT_VERSION = = =
Config:
Config:
CONFIG_FILE = $CONFIG_FILE
CONFIG_FILE = $CONFIG_FILE
DRY_RUN = ${ DRY_RUN :- false }
DRY_RUN = $DRY_RUN
RUNNING_AS = $( current_user)
RUNNING_AS = $( current_user)
IS_ROOT = $( is_root && echo true || echo false )
IS_ROOT = $( is_root && echo true || echo false )
@ -311,149 +226,89 @@ Quelle:
SOURCE_SUPERX_DIR = $SOURCE_SUPERX_DIR
SOURCE_SUPERX_DIR = $SOURCE_SUPERX_DIR
SOURCE_WEBAPP = $SOURCE_WEBAPP
SOURCE_WEBAPP = $SOURCE_WEBAPP
SOURCE_DB = $SOURCE_DB
SOURCE_DB = $SOURCE_DB
SOURCE_SUPERX_DIR_REAL = ${ SOURCE_SUPERX_DIR_REAL :- }
SOURCE_WEBAPP_REAL = ${ SOURCE_WEBAPP_REAL :- }
SOURCE_DB_REAL = ${ SOURCE_DB_REAL :- }
Ziel:
Ziel:
TARGET_WEBAPP = $TARGET_WEBAPP
TARGET_WEBAPP = $TARGET_WEBAPP
TARGET_WEBAPP_REAL = ${ TARGET_WEBAPP_REAL :- }
TARGET_SUPERX_DIR = $TARGET_SUPERX_DIR
TARGET_SUPERX_DIR = $TARGET_SUPERX_DIR
TARGET_DB = $TARGET_DB
TARGET_DB = $TARGET_DB
TARGET_DB_REAL = ${ TARGET_DB_REAL :- }
TARGET_SQL_ENV = $TARGET_SQL_ENV
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:
Rechte:
TOMCAT_USER = $TOMCAT_USER
WEBAPP_USER = $WEBAPP _USER
SUPERX_GROUP = $SUPERX_GROUP
WEBAPP_GROUP = $WEBAPP _GROUP
SET_RIGHTS = $SET_RIGHTS
SET_RIGHTS = $SET_RIGHTS
SET_OWNER = $SET_OWNER
SET_OWNER = $SET_OWNER
EFFECTIVE_SET_OWNER = $EFFECTIVE_SET_OWNER
EFFECTIVE_SET_OWNER = $EFFECTIVE_SET_OWNER
SET_CHMOD = $SET_CHMOD
SET_CHMOD = $SET_CHMOD
Optionen:
STOP_TOMCAT = $STOP_TOMCAT
START_TOMCAT = $START_TOMCAT
TOMCAT_SERVICE = $TOMCAT_SERVICE
DELETE_TARGET = $DELETE_TARGET
ALLOW_EXISTING_TARGET = $ALLOW_EXISTING_TARGET
ALLOW_EXISTING_TARGET_DB = $ALLOW_EXISTING_TARGET_DB
UPDATE_SQL_ENV = $UPDATE_SQL_ENV
FORCE_ALREADY_MIGRATED = $FORCE_ALREADY_MIGRATED
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
SUMMARY
EOF_SUM
}
}
validate_users_and_groups( ) {
validate_users_and_groups( ) {
user_exists " $TOMCAT_USER " || fail " Tomcat-User existiert nicht: $TOMCAT_USER "
user_exists " $WEBAPP_USER " || fail " WEBAPP_USER existiert nicht: $WEBAPP_USER "
if ! group_exists " $WEBAPP_GROUP " ; then
if ! group_exists " $SUPERX_GROUP " ; then
if is_true " $CREATE_GROUP_IF_MISSING " ; then run " groupadd ' $WEBAPP_GROUP ' " ; else fail " Gruppe existiert nicht: $WEBAPP_GROUP " ; fi
if is_true " $CREATE_GROUP_IF_MISSING " ; then run " groupadd ' $SUPERX_GROUP ' " ; else fail " Gruppe existiert nicht: $SUPERX_GROUP . Entweder Gruppe anlegen oder CREATE_GROUP_IF_MISSING=true setzen. " ; fi
fi
fi
if is_true " $ADD_WEBAPP_USER_TO_GROUP " ; then
if is_true " $ADD_TOMCAT_TO_GROUP " ; then
if user_in_group " $WEBAPP_USER " " $WEBAPP_GROUP " ; then
if user_in_group " $TOMCAT_USER " " $SUPERX_GROUP " ; then
log " WEBAPP_USER ' $WEBAPP_USER ' ist bereits Mitglied der Gruppe ' $WEBAPP_GROUP '. "
log " Tomcat-User ' $TOMCAT_USER ' ist bereits Mitglied der Gruppe ' $SUPERX_GROUP '. "
else
else
run " usermod -aG ' $SUPERX_GROUP ' ' $TOMCAT _USER ' "
run " usermod -aG ' $WEBAPP_GROUP ' ' $WEBAPP _USER ' "
warn "Der Tomcat-Dienst muss neu gestartet werden, damit die neue Gruppenmitgliedschaft aktiv wird."
warn "Falls ein Dienst mit diesem User laeuft, muss er neu gestartet werden, damit die neue Gruppenmitgliedschaft aktiv wird."
fi
fi
fi
fi
}
}
validate_target( ) {
validate_target( ) {
if [ " $TARGET_WEBAPP " = " $SOURCE_WEBAPP " ] && [ " $MIGRATION_MODE " = "full" ] ; then
[ " $TARGET_WEBAPP " = " $SOURCE_WEBAPP " ] && [ " $MIGRATION_MODE " = "full" ] && fail "TARGET_WEBAPP darf bei MIGRATION_MODE=full nicht identisch mit SOURCE_WEBAPP sein."
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 "
fi
[ " $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."
if [ -e " $TARGET_WEBAPP " ] && [ ! -d " $TARGET_WEBAPP " ] ; then
case " $TARGET_DB_REAL " in " $SOURCE_DB_REAL " /*) fail "TARGET_DB liegt innerhalb von SOURCE_DB." ; ; esac
fail " TARGET_WEBAPP existiert, ist aber kein Verzeichnis: $TARGET_WEBAPP "
case " $SOURCE_DB_REAL " in " $TARGET_DB_REAL " /*) fail "SOURCE_DB liegt innerhalb von TARGET_DB." ; ; esac
fi
[ " $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 [ " $MIGRATION_MODE " = "full" ] && [ -d " $TARGET_WEBAPP /WEB-INF " ] && ! is_true " $ALLOW_EXISTING_TARGET " ; then
if is_true " $CREATE_TOMCAT_SYMLINK " && { [ -e " $TOMCAT_SYMLINK_PATH " ] || [ -L " $TOMCAT_SYMLINK_PATH " ] ; } ; then
fail " Ziel-Webapp existiert bereits: $TARGET_WEBAPP . Setze ALLOW_EXISTING_TARGET=true, wenn ergaenzt werden darf. "
if [ -L " $TOMCAT_SYMLINK_PATH " ] && is_true " $REPLACE_EXISTING_SYMLINK " ; then :; else
fi
fail " Tomcat-Symlink/Ziel existiert bereits: $TOMCAT_SYMLINK_PATH "
if [ " $SOURCE_DB_REAL " = " $TARGET_DB_REAL " ] ; then
fail " SOURCE_DB und TARGET_DB sind identisch. Migration wird abgebrochen.\n\nSOURCE_DB= $SOURCE_DB \nTARGET_DB= $TARGET_DB "
fi
case " $TARGET_DB_REAL " in
" $SOURCE_DB_REAL " /*)
fail " TARGET_DB liegt innerhalb von SOURCE_DB. Das wuerde zu einer Verschachtelung fuehren.\n\nSOURCE_DB= $SOURCE_DB \nTARGET_DB= $TARGET_DB "
; ;
esac
case " $SOURCE_DB_REAL " in
" $TARGET_DB_REAL " /*)
fail " SOURCE_DB liegt innerhalb von TARGET_DB. Das wuerde zu einer Verschachtelung fuehren.\n\nSOURCE_DB= $SOURCE_DB \nTARGET_DB= $TARGET_DB "
; ;
esac
if [ " $DB_TRANSFER_MODE " = "move" ] && [ -e " $TARGET_DB " ] ; then
fail " DB_TRANSFER_MODE=move ist gesetzt, aber TARGET_DB existiert bereits.\n\nTARGET_DB= $TARGET_DB \n\nBei move wird nicht in ein bestehendes Zielverzeichnis verschoben, um Verschachtelungen wie db/db zu vermeiden. "
fi
fi
if [ " $DB_TRANSFER_MODE " = "copy" ] && [ -e " $TARGET_DB " ] && ! is_true " $ALLOW_EXISTING_TARGET_DB " ; then
fail " TARGET_DB existiert bereits: $TARGET_DB . Setze ALLOW_EXISTING_TARGET_DB=true, wenn per rsync ergaenzt werden darf. "
fi
fi
}
}
stop_tomcat_if_requested( ) {
stop_tomcat_if_requested( ) { is_true " $STOP_TOMCAT " && run " systemctl stop ' $TOMCAT_SERVICE ' " ; }
if is_true " $STOP_TOMCAT " ; then
start_tomcat_if_requested( ) { is_true " $START_TOMCAT " && run " systemctl start ' $TOMCAT_SERVICE ' " ; }
command -v systemctl >/dev/null 2>& 1 || fail "systemctl nicht gefunden, kann Tomcat nicht stoppen."
run " systemctl stop ' $TOMCAT_SERVICE ' "
fi
}
start_tomcat_if_requested( ) {
if is_true " $START_TOMCAT " ; then
command -v systemctl >/dev/null 2>& 1 || fail "systemctl nicht gefunden, kann Tomcat nicht starten."
run " systemctl start ' $TOMCAT_SERVICE ' "
fi
}
copy_webapp_if_requested( ) {
copy_webapp_if_requested( ) {
if [ " $MIGRATION_MODE " != "full" ] ; then
[ " $MIGRATION_MODE " != "full" ] && { log "MIGRATION_MODE=db_only: Webapp wird nicht kopiert." ; return 0; }
log "MIGRATION_MODE=db_only: Webapp wird nicht kopiert."
return 0
fi
command -v rsync >/dev/null 2>& 1 || fail "rsync ist nicht installiert oder nicht im PATH."
command -v rsync >/dev/null 2>& 1 || fail "rsync ist nicht installiert oder nicht im PATH."
run " mkdir -p ' $TARGET_WEBAPP ' "
run " mkdir -p ' $TARGET_WEBAPP ' "
RSYNC_DELETE = "" ; is_true " $DELETE_TARGET " && RSYNC_DELETE = "--delete"
RSYNC_DELETE = ""
if is_true " $DELETE_TARGET " ; then RSYNC_DELETE = "--delete" ; fi
log "Kopiere Webapp..."
log "Kopiere Webapp..."
run " rsync -a $RSYNC_DELETE ' $SOURCE_WEBAPP /' ' $TARGET_WEBAPP /' "
run " rsync -a $RSYNC_DELETE ' $SOURCE_WEBAPP /' ' $TARGET_WEBAPP /' "
}
}
transfer_db( ) {
transfer_db( ) {
run " mkdir -p ' $TARGET_SUPERX_DIR ' "
run " mkdir -p ' $TARGET_SUPERX_DIR ' "
if [ " $DB_TRANSFER_MODE " = "copy" ] ; then
if [ " $DB_TRANSFER_MODE " = "copy" ] ; then
command -v rsync >/dev/null 2>& 1 || fail "rsync ist nicht installiert oder nicht im PATH."
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"
RSYNC_DELETE = ""
if is_true " $DELETE_TARGET " ; then RSYNC_DELETE = "--delete" ; fi
log "Kopiere DB-Verzeichnis nach WEB-INF/conf/edustore/db..."
log "Kopiere DB-Verzeichnis nach WEB-INF/conf/edustore/db..."
run " mkdir -p ' $TARGET_DB ' "
run " mkdir -p ' $TARGET_DB ' "
run " rsync -a $RSYNC_DELETE ' $SOURCE_DB /' ' $TARGET_DB /' "
run " rsync -a $RSYNC_DELETE ' $SOURCE_DB /' ' $TARGET_DB /' "
return 0
else
fi
if [ " $DB_TRANSFER_MODE " = "move" ] ; then
log "Verschiebe DB-Verzeichnis nach WEB-INF/conf/edustore/db..."
log "Verschiebe DB-Verzeichnis nach WEB-INF/conf/edustore/db..."
run " mkdir -p ' $( dirname " $TARGET_DB " ) ' "
run " mkdir -p ' $( dirname " $TARGET_DB " ) ' "
run " mv ' $SOURCE_DB ' ' $TARGET_DB ' "
run " mv ' $SOURCE_DB ' ' $TARGET_DB ' "
return 0
fi
fi
fail " Unbekannter DB_TRANSFER_MODE: $DB_TRANSFER_MODE "
}
}
backup_target_sql_env( ) {
backup_target_sql_env( ) {
@ -466,158 +321,78 @@ backup_target_sql_env() {
}
}
update_target_sql_env( ) {
update_target_sql_env( ) {
if ! is_true " $UPDATE_SQL_ENV " ; then return 0; fi
is_true " $UPDATE_SQL_ENV " || return 0
[ -f " $TARGET_SQL_ENV " ] || fail " Ziel-SQL_ENV nicht gefunden: $TARGET_SQL_ENV "
[ -f " $TARGET_SQL_ENV " ] || fail " Ziel-SQL_ENV nicht gefunden: $TARGET_SQL_ENV "
backup_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
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'
python3 - " $TARGET_SQL_ENV " " $TARGET_SUPERX_DIR " " $TARGET_WEBAPP " <<'PY'
from pathlib import Path
from pathlib import Path
import re
import re, sys
import 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( )
path = Path( sys.argv[ 1] )
out = [ ] ; seen_umask = seen_superx = seen_webapp = seen_export_superx = seen_export_webapp = False
new_superx_dir = sys.argv[ 2]
for line in lines:
new_webapp = sys.argv[ 3]
s = line.strip( )
if re.match( r'^umask\s+' , s) :
text = path.read_text( encoding = "utf-8" , errors = "surrogateescape" ) .splitlines( )
if not seen_umask: out.append( 'umask 002' ) ; seen_umask = True
else : out.append( '# ' +line)
out = [ ]
elif re.match( r'^SUPERX_DIR\s*=' , s) :
seen_umask = False
if not seen_superx: out.append( f'SUPERX_DIR="{new_superx_dir}"' ) ; seen_superx = True
seen_superx = False
else : out.append( '# ' +line)
seen_webapp = False
elif re.match( r'^WEBAPP\s*=' , s) :
seen_export_superx = False
if not seen_webapp: out.append( f'WEBAPP="{new_webapp}"' ) ; seen_webapp = True
seen_export_webapp = False
else : out.append( '# ' +line)
elif re.match( r'^export\s+SUPERX_DIR\b' , s) :
for line in text:
seen_export_superx = True; out.append( line)
stripped = line.strip( )
elif re.match( r'^export\s+WEBAPP\b' , s) :
seen_export_webapp = True; out.append( line)
if re.match( r"^umask\s+" , stripped) :
else : out.append( line)
if not seen_umask:
out.append( "umask 002" )
seen_umask = True
else :
out.append( "# " + line)
continue
if re.match( r"^SUPERX_DIR\s*=" , stripped) :
if not seen_superx:
out.append( f'SUPERX_DIR="{new_superx_dir}"' )
seen_superx = True
else :
out.append( "# " + line)
continue
if re.match( r"^WEBAPP\s*=" , stripped) :
if not seen_webapp:
out.append( f'WEBAPP="{new_webapp}"' )
seen_webapp = True
else :
out.append( "# " + line)
continue
if re.match( r"^export\s+SUPERX_DIR\b" , stripped) :
seen_export_superx = True
out.append( line)
continue
if re.match( r"^export\s+WEBAPP\b" , stripped) :
seen_export_webapp = True
out.append( line)
continue
out.append( line)
insert = [ ]
insert = [ ]
if not seen_umask:
if not seen_umask: insert.append( 'umask 002' )
insert.append( "umask 002" )
if not seen_superx: insert.append( f'SUPERX_DIR="{new_superx_dir}"' )
if not seen_superx:
if not seen_export_superx: insert.append( 'export SUPERX_DIR' )
insert.append( f'SUPERX_DIR="{new_superx_dir}"' )
if not seen_webapp: insert.append( f'WEBAPP="{new_webapp}"' )
if not seen_export_superx:
if not seen_export_webapp: insert.append( 'export WEBAPP' )
insert.append( "export SUPERX_DIR" )
if insert: out = insert + [ '' ] + out
if not seen_webapp:
path.write_text( '\n' .join( out) +'\n' , encoding = 'utf-8' , errors = 'surrogateescape' )
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
PY
}
}
set_rights( ) {
set_rights( ) {
if ! is_true " $SET_RIGHTS " ; then
is_true " $SET_RIGHTS " || { log "Rechte setzen ist deaktiviert." ; return 0; }
log "Rechte setzen ist deaktiviert."
return 0
fi
[ -d " $TARGET_WEBAPP " ] || fail " TARGET_WEBAPP fehlt: $TARGET_WEBAPP "
[ -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 " $EFFECTIVE_SET_OWNER " ; then
log "Setze Owner/Gruppe..."
run " chown -R ' $TOMCAT_USER : $SUPERX_GROUP ' ' $TARGET_WEBAPP ' "
else
log "Owner/Gruppe werden nicht gesetzt."
fi
if is_true " $SET_CHMOD " ; then
if is_true " $SET_CHMOD " ; then
log "Setze Verzeichnisrechte mit setgid-Bit..."
run " find ' $TARGET_WEBAPP ' -type d -exec chmod 2775 {} + "
run " find ' $TARGET_WEBAPP ' -type d -exec chmod 2775 {} + "
log "Setze Standard-Dateirechte..."
run " find ' $TARGET_WEBAPP ' -type f -exec chmod 664 {} + "
run " find ' $TARGET_WEBAPP ' -type f -exec chmod 664 {} + "
[ -d " $TARGET_DB /bin " ] && run " find ' $TARGET_DB /bin' -type f -exec chmod 775 {} + "
log "Setze ausfuehrbare Rechte fuer db/bin..."
if [ -d " $TARGET_DB /bin " ] ; then
run " find ' $TARGET_DB /bin' -type f -exec chmod 775 {} + "
else
warn " db/bin im Ziel nicht gefunden: $TARGET_DB /bin "
fi
log "Setze ausfuehrbare Rechte fuer *.x und *.sh..."
run " find ' $TARGET_WEBAPP ' -type f \\( -name '*.x' -o -name '*.sh' \\) -exec chmod 775 {} + "
run " find ' $TARGET_WEBAPP ' -type f \\( -name '*.x' -o -name '*.sh' \\) -exec chmod 775 {} + "
else
log "chmod ist deaktiviert."
fi
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( ) {
final_notes( ) {
cat <<EOFNOTE
cat <<EOF_NOTE
Migration abgeschlossen.
Migration abgeschlossen.
Naechste sinnvolle Pruefungen:
Pruefen:
ls -ld " $TARGET_WEBAPP "
ls -ld " $TARGET_WEBAPP "
ls -ld " $TARGET_DB "
ls -ld " $TARGET_DB "
ls -l " $TARGET_DB /bin/SQL_ENV "
ls -l " $TARGET_DB /bin/SQL_ENV "
Neue SQL_ENV laden:
. " $TARGET_SQL_ENV "
. " $TARGET_SQL_ENV "
Pruefen:
echo \$ SUPERX_DIR
echo \$ SUPERX_DIR
echo \$ WEBAPP
echo \$ WEBAPP
umask
EOF_NOTE
is_true " $CREATE_TOMCAT_SYMLINK " && echo " ls -l \" $TOMCAT_SYMLINK_PATH \" "
Hinweis:
[ " $DB_TRANSFER_MODE " = "move" ] && warn " DB_TRANSFER_MODE=move wurde verwendet. Alte DB-Quelle wurde verschoben: $SOURCE_DB "
Falls der Tomcat-User neu zur Gruppe '$SUPERX_GROUP' hinzugefuegt wurde,
muss Tomcat neu gestartet werden, damit die Gruppenrechte greifen.
EOFNOTE
if [ " $DB_TRANSFER_MODE " = "move" ] ; then
warn " DB_TRANSFER_MODE=move wurde verwendet. Das alte DB-Verzeichnis wurde verschoben und liegt nicht mehr unter: $SOURCE_DB "
fi
}
}
main( ) {
main( ) {
@ -633,8 +408,8 @@ main() {
transfer_db
transfer_db
update_target_sql_env
update_target_sql_env
set_rights
set_rights
create_tomcat_symlink_if_requested
start_tomcat_if_requested
start_tomcat_if_requested
final_notes
final_notes
}
}
main " $@ "
main " $@ "