aboutsummaryrefslogtreecommitdiffstats
path: root/mayor/bin/restore.sh
diff options
context:
space:
mode:
Diffstat (limited to 'mayor/bin/restore.sh')
-rw-r--r--mayor/bin/restore.sh257
1 files changed, 257 insertions, 0 deletions
diff --git a/mayor/bin/restore.sh b/mayor/bin/restore.sh
new file mode 100644
index 00000000..8283effa
--- /dev/null
+++ b/mayor/bin/restore.sh
@@ -0,0 +1,257 @@
+#!/bin/bash
+
+OPT_SPEC="hkprf:d:t::"
+LONG_OPT_SPEC="help,keep-old-passwords,restore-parent,restore-private,tmp-dir:,file:,backup-file:,dir:,base-dir::"
+PARSED_OPTIONS=$(getopt -n "$0" -a -o $OPT_SPEC --long $LONG_OPT_SPEC -- "$@")
+OPTIONS_RET=$?
+eval set -- "$PARSED_OPTIONS"
+
+help_usage() {
+cat <<EOF
+
+Restore használata: mayor restore [opciók]
+
+A parancs segítségével korábbi mentésből állíthatjuk helyre a napló adaokat. A helyreállítás előtt
+telepíteni kell egy új, lehetőleg a mentettel megegyező, vagy újabb verziójú rendszert, amibe a régi
+adatokat betöltjük.
+A mentést alapértelmezetten az aktuális dátum alapján keresi, "YYYYmmdd.tgz" alakban (pl. $DATE.tgz).
+
+Amennyiben a paraméterként megadott alapkönyvtárban léteznek a configurációs állományok, úgy a program
+ezeket használja, különben a mentésből állítja őket helyre. A jelszavak alapértelmezetten mindig az
+új telepítés szerintiek maradnak.
+
+Opciók:
+ -h, --help: A parancs leírása (amit most olvasol...)
+ -f, --file, --backup-file: A visszatöltendő mentési állomány neve
+ -d, --dir, --base-dir: Az alapkönyvtár elérési útja
+ -t, --tmp-dir: Az ideiglenes könyvtár
+ -k, --keep-old-passwords: A mentett adatbázis-jelszavak megtartása akkor is, ha léteznek újak
+ -p, --restore-parent: A szülők felhasználói azonosítóinak helyreállítása
+ -r, --restore-private: A tanár/diák felhasználói azonosítóinak helyreállítása (csak MySQL-ből!)
+
+EOF
+}
+
+cleartmp() {
+ echo -e -n "\n\nAz ideiglenes könyvátrat töröljük: ${RTMPDIR}/restore/${DT}..."
+ rm -rf ${RTMPDIR}/restore/${DT}
+ echo "ok"
+}
+
+#if [ $OPTIONS_RET -ne 0 ] || [ $# -le 1 ]; then help_usage; exit; fi
+if [ $OPTIONS_RET -ne 0 ]; then help_usage; exit; fi
+
+# Alapéretelmezett értékek:
+RBACKUPFILE="${DATE}.tgz"
+RBASEDIR="/var/mayor"
+KEEP_OLD_PASSWORDS=0
+
+while [ $# -ge 1 ]; do
+ case $1 in
+ --help | -h ) help_usage
+ exit
+ ;;
+
+ --keep-old-passwords | -k ) KEEP_OLD_PASSWORDS=1
+ echo "A mentett adatbázis-jelszavak használata..."
+ ;;
+
+ --restore-parent | -p ) RESTORE_PARENT=1
+ echo "Szülői azonosítók betöltése..."
+ ;;
+
+ --restore-private | -r ) RESTORE_PRIVATE=1
+ echo "Tanár/diák azonosítók betöltése..."
+ ;;
+
+ --backup-file | --file | -f ) shift
+ RBACKUPFILE="$1"
+ echo "Backup fájl: $RBACKUPFILE"
+ ;;
+
+ --base-dir | --dir | -d ) shift
+ RBASEDIR="$1"
+ echo "Alapkönyvtár: $RBASEDIR"
+ ;;
+
+ --tmp-dir | -t ) shift
+ RTMPDIR="$1"
+ echo "Ideiglenes könyvtár: $RTMPDIR"
+ ;;
+
+ -- ) shift
+ break
+ ;;
+
+ * ) echo "HIBA: ismeretlen opció: $1" # ide elvileg sose jutunk, mert a getopts már kiszűrte a hibás paramétereket...
+ exit
+ ;;
+ esac
+ shift
+done
+
+##
+# A könyvtárak létrehozása
+##
+
+RREVISIONFILE="${RBASEDIR}/log/revision"
+declare -i INST_REV
+if [ ! -e "${RREVISIONFILE}" ]; then
+ echo "Hiba: A megadott alapkönyvtárban (${RBASEDIR}) nem található telepített MaYoR rendszer!"
+ echo -e " A helyreállításhoz először telepíteni kell egy azonos, vagy újabb verziójú rendszert.\n"
+ exit 1
+fi
+INST_REV=`cat $RREVISIONFILE`
+echo "A telepített rendszer revision száma: ${INST_REV}"
+
+if [ ! -e "${RBACKUPFILE}" ]; then
+ echo "Hiba: A backup állomány nem található (${RBACKUPFILE})"
+ echo -e " A backup állományt teljes elérési úttal kell megadni!\n"
+ exit 2
+fi
+
+[ -z "${RTMPDIR:-}" ] && RTMPDIR="/tmp"
+if [ ! -e "${RTMPDIR}" ]; then
+ echo "Az ideiglenes könyvtár (${RTMPDIR}) nem létezik."
+ echo -n "Létrehozás ... "
+ if mkdir -p "${RTMPDIR}" 2>/dev/null; then
+ echo "ok."
+ else
+ echo "hiba."
+ exit 3
+ fi
+fi
+
+if [ ! -d "${RTMPDIR}/restore" ]; then
+ if ! mkdir "${RTMPDIR}/restore" 2>/dev/null; then
+ echo "Hiba: Az ideiglenes könyvtár nem írható (${RTMPDIR})!"
+ exit 4
+ fi
+fi
+chmod 700 "${RTMPDIR}/restore"
+cd "${RTMPDIR}/restore"
+tar xvfz $RBACKUPFILE
+DT=$(ls)
+echo "A mentés dátuma: ${DT}"
+cd ${DT}
+
+RREVISIONFILE="${RTMPDIR}/restore/${DT}/log/revision"
+declare -i BAK_REV
+if [ ! -e "${RREVISIONFILE}" ]; then
+ echo "Hiba: A mentési állomány nem tartalmaz verzió információt!"
+ echo -e " A mentési állományon belül, a ${DT}/log/revision állományba írja be a revision számot (pl: 2512)!\n"
+ cleartmp
+ exit 5
+fi
+BAK_REV=`cat $RREVISIONFILE`
+echo "A mentett rendszer revision száma: ${BAK_REV}"
+
+if [ ${BAK_REV} -gt ${INST_REV} ]; then
+ echo "Hiba: A mentett rendszer újabb, mint a telepített!"
+ echo -e " A telepített rendszer revision száma nagyobb vagy egyenlő kell legyen a mentett rendszer revision számánál!\n Telepítsen frissíebb rendszert!\n"
+ cleartmp
+ exit 6
+fi
+
+# A telepített rendszer beállításainsak betöltése
+if [ -f "${RBASEDIR}/config/main.conf" ]; then
+ . "${RBASEDIR}/config/main.conf"
+else
+ echo "Hiba: A telepített rendszer nincs beállítva!"
+ echo -e " Hiányzik a konfigurációs állomány: ${RBASEDIR}/config/main.conf\n"
+ cleartmp
+ exit 7
+fi
+
+# Az adatbázisok betöltése
+NAPLOUSER=`egrep 'userWrite.*=' $BASEDIR/config/module-naplo/config.php | sed -e "s/^.*=\ *['|\"]//g" -e "s/['|\"];//g"`
+NAPLOUSERREAD=`egrep 'userRead.*=' $BASEDIR/config/module-naplo/config.php | sed -e "s/^.*=\ *['|\"]//g" -e "s/['|\"];//g"`
+DBS=`$MYSQL -h$MYSQL_HOST -u $MYSQL_USER -p$MYSQL_PW -e"SHOW DATABASES"`
+if [ "$RESTORE_PARENT" == "1" ]; then
+ FILES="mayor_naplo.sql mayor_parent.sql intezmeny_*.sql naplo_*.sql"
+else
+ FILES="mayor_naplo.sql intezmeny_*.sql naplo_*.sql"
+fi
+if [ "$RESTORE_PRIVATE" == "1" ]; then
+ FILES="$FILES mayor_private.sql"
+fi
+for SQLFILE in $FILES; do
+ if [ -e "${SQLFILE}" ]; then
+ DB=${SQLFILE%.sql}
+ echo -n "${DB} ... "
+ if [[ ! ${DBS} =~ .*$DB.* ]]; then
+ echo -n "... "
+ (cat <<EOF
+ create database ${DB} character set utf8 collate utf8_hungarian_ci;
+ grant select,execute on ${DB}.* to '$NAPLOUSERREAD'@'localhost';
+ grant all on ${DB}.* to '$NAPLOUSER'@'localhost';
+EOF
+) | $MYSQL -h$MYSQL_HOST -u $MYSQL_USER -p$MYSQL_PW
+ fi
+ echo -n '... '
+ cat ${SQLFILE} | mysql -p${MYSQL_PW} --user=${MYSQL_USER} --default-character-set=utf8 ${DB}
+ echo ok
+ fi
+done
+
+# A mentésben szereplő user és jelszó adatok
+bNCDIR="${RTMPDIR}/restore/${DT}/config/module-naplo"
+iNCDIR="${BASEDIR}/config/module-naplo"
+cd ${bNCDIR}
+bDB=`grep db ${bNCDIR}/config.php | egrep -v '^[[:space:]]*(//|/\*.*\*/$)' | grep naplo_base | sed -e "s/^.*=\ *['|\"]//g" -e "s/['|\"];//g"`
+bUSER=`egrep 'userWrite.*=' ${bNCDIR}/config.php | egrep -v '^[[:space:]]*(//|/\*.*\*/$)' | sed -e "s/^.*=\ *['|\"]//g" -e "s/['|\"];//g"`
+bUSERREAD=`egrep 'userRead.*=' ${bNCDIR}/config.php | egrep -v '^[[:space:]]*(//|/\*.*\*/$)' | sed -e "s/^.*=\ *['|\"]//g" -e "s/['|\"];//g"`
+bPW=`egrep 'pwWrite.*=' ${bNCDIR}/config.php | egrep -v '^[[:space:]]*(//|/\*.*\*/$)' | sed -e "s/^.*=\ *['|\"]//g" -e "s/['|\"];//g"`
+bPWREAD=`egrep 'pwRead.*=' ${bNCDIR}/config.php | egrep -v '^[[:space:]]*(//|/\*.*\*/$)' | sed -e "s/^.*=\ *['|\"]//g" -e "s/['|\"];//g"`
+#echo "mentett: $bDB : $bUSER : $bUSERREAD : $bPW : $bPWREAD"
+# Az új telepítés user és jelszó adatai
+if [ -e "${iNCDIR}/config.php" ] && [ "${KEEP_OLD_PASSWORDS}" != "1" ]; then
+ iDB=`grep db ${iNCDIR}/config.php | egrep -v '^[[:space:]]*(//|/\*.*\*/$)' | grep naplo_base | sed -e "s/^.*=\ *['|\"]//g" -e "s/['|\"];//g"`
+ iUSER=`egrep 'userWrite.*=' ${iNCDIR}/config.php | egrep -v '^[[:space:]]*(//|/\*.*\*/$)' | sed -e "s/^.*=\ *['|\"]//g" -e "s/['|\"];//g"`
+ iUSERREAD=`egrep 'userRead.*=' ${iNCDIR}/config.php | egrep -v '^[[:space:]]*(//|/\*.*\*/$)' | sed -e "s/^.*=\ *['|\"]//g" -e "s/['|\"];//g"`
+ iPW=`egrep 'pwWrite.*=' ${iNCDIR}/config.php | egrep -v '^[[:space:]]*(//|/\*.*\*/$)' | sed -e "s/^.*=\ *['|\"]//g" -e "s/['|\"];//g"`
+ iPWREAD=`egrep 'pwRead.*=' ${iNCDIR}/config.php | egrep -v '^[[:space:]]*(//|/\*.*\*/$)' | sed -e "s/^.*=\ *['|\"]//g" -e "s/['|\"];//g"`
+else
+ iDB=$bDB
+ iUSER=$bUSER
+ iUSERREAD=$bUSERREAD
+ iPW=$bPW
+ iPWREAD=$bPWREAD
+fi
+#echo "installált: $iDB : $iUSER : $iUSERREAD : $iPW : $iPWREAD"
+if [ -e "${iNCDIR}/config.php" ]; then
+ if [ ! -e "${iNCDIR}/config.php.backup" ]; then
+ echo "${iNCDIR}/config.php --> ${iNCDIR}/config.php.backup"
+ mv "${iNCDIR}/config.php" "${iNCDIR}/config.php.backup"
+ fi
+fi
+
+cat "${bNCDIR}/config.php" | sed \
+ -e "s/db\(.*\)$bDB\(.*\)/db\1$iDB\2/g" \
+ -e "s/userWrite\(.*\)$bUSER\(.*\)/userWrite\1$iUSER\2/g" \
+ -e "s/userRead\(.*\)$bUSERREAD\(.*\)/userRead\1$iUSERREAD\2/g" \
+ -e "s/$bPW/$iPW/g" -e "s/$bPWREAD/$iPWREAD/g" > "${iNCDIR}/config.php"
+
+for FILE in config-*.php; do
+ echo -n "$FILE ... "
+ # mentés
+ if [ -e "${iNCDIR}/$FILE" ]; then
+ if [ ! -e "${iNCDIR}/$FILE.backup" ]; then
+ echo -n "... "
+ mv "${iNCDIR}/$FILE" "${iNCDIR}/$FILE.backup"
+ fi
+ fi
+ cp $FILE "${iNCDIR}/$FILE"
+ echo ok
+done
+
+cd ${BASEDIR}/bin
+if [ -z $UPDATELOG ]; then
+ . update.sh -e -r$BAK_REV -b${BASEDIR}
+else
+ . update.sh -e -r$BAK_REV -b${BASEDIR} 2>&1 | tee -a $UPDATELOG
+fi
+
+# Az ideiglenes könyvtár törlése
+cleartmp
+