diff options
Diffstat (limited to 'mayor/bin/restore.sh')
-rw-r--r-- | mayor/bin/restore.sh | 257 |
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 + |