aboutsummaryrefslogtreecommitdiffstats
path: root/mayor-orig/mayor-base/bin/restore.sh
blob: 8283effa31f8644e6b80fbbb8187e100c02e099a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
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