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
258
|
#!/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 '... '
# echo 'SET FOREIGN_KEY_CHECKS=0' &&
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
|