aboutsummaryrefslogtreecommitdiffstats
path: root/mayor-orig/mayor-base/bin/update.sh
blob: 393381190b84c3245e0acbfaebada5dcf9656655 (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
#!/bin/bash

OPT_SPEC="hes:lb:r::"
LONG_OPT_SPEC="http-server:,skip-lock,basedir:,backup-dir:,from-revision:,exec-only,help:"
PARSED_OPTIONS=$(getopt -n "$0" -a -o $OPT_SPEC --long $LONG_OPT_SPEC -- "$@")
OPTIONS_RET=$?

eval set -- "$PARSED_OPTIONS"

help_usage() {
cat <<EOF

UPDATE használata: mayor update [opciók] [modulok]

A parancs segítségével frissíthetjük a MaYoR rendszert, a program forrását és 
az adatbázis-szerkezetet. A frissítések letöltése és kicsomagolása mellett
a szkript egyéb módosításokat is végrehajthat, ezért alapértelmezett működés
esetén a frissítés idejére letiltjuk a napló elérését. A zárolás a 
/var/run/mayor.lock állomány létrehozásával történik.

A HTTP szervert, a frissítendő modulokat, a szükséges jelszavak és egyéb beál-
lításokat a /etc/mayor/main.conf állományban kell megadni.

Opciók:
    -h, --help:           A parancs leírása (amit most olvasol...)
    -s, --http-server:    A szerver ahonnan a frissítéseket letöltjük
    -b, --basedir:        A telepítési könyvtár
    -l, --skip-lock:      A frissítés idejére se zároljuk a program működését
    -r, --from-revision:  A frissítés indítása a megadott revision számtól - függetlenül a 
                          jelenleg eltárolt aktuális számtól
    -e, --exec-only:      A frissítő szkriptek futtatása új állományok letöltése nélkül.
                          Csak a --from-revision opcióval együtt használható!

Modulok:
    A frissítendő modulok listája, pl: mayor-base mayor-naplo mayor-portal

EOF
}

if [ $OPTIONS_RET -ne 0 ]; then  help_usage; exit; fi

declare -i REV
while [ $# -ge 1 ]; do
    case $1 in
        --help | -h )           help_usage
                                exit
                                ;;

        --skip-lock | -l )	SKIPLOCK=1
				export SKIPLOCK
                                ;;

        --exec-only | -e )	EXECONLY=1
				export EXECONLY
                                ;;

        --http-server | -s )	shift
                                HTTP_SERVER="$1"
                                echo "HTTP szerver: $HTTP_SERVER"
                                ;;

        --basedir | -b )	shift
                                BASEDIR="$1"
                                echo "Alapkönyvtár: $BASEDIR"
                                ;;

        --from-revision | -r )  shift
                            	REV="$1"
                            	echo "Revision: $REV"
                            	;;

        -- )                    shift
                                break
                                ;;

        * )                     echo "HIBA: ismeretlen opció: $1" # ide elvileg sose jutunk, mert a getopts már kiszűrte a hibás paraméterek
                                exit
                                ;;
    esac
    shift
done

TMPMODS=""
while [ $# -ge 1 ]; do
    if [[ ! "${MODS[*]}" =~ .*$1.* ]]; then
        echo -e "Ismeretlen modul: $1"
    else
	TMPMODS="$1 $TMPMODS"
    fi
    shift
done
if [ "$TMPMODS" != '' ]; then
    MODULES=$TMPMODS
fi

###########################


if [ -z $UPDATEDIR ]; then
    if [ -f ../config/update.conf ]; then
        echo -e "\n\nWARNING: elavult konfigurációs állomány! (update.conf)"
        echo "    A frissítési rendszer a korábbi backup.conf és update.conf állományok helyett"
        echo "    egy új, rögzített helyen lévő állományt használ: /etc/mayor/main.conf"
        echo "    Most - ennek hiányában - a régebbi állományt használjuk"
        . ../config/update.conf
    else
        echo -e "\n\nERROR: Hiányzó konfigurációs file: ../config/update.conf"
        pwd
        exit 10
    fi
fi

# Ha paraméterknént nem volt megadva revision
if [ -z "${REV:-}" ]; then
    if [ "$EXECONLY" == "1" ]; then
	echo "Hiba: Az --exec-only kapcsoló csak a --from-revision paraméterrel együtt használható!"
	exit 9
    fi
    if [ -f $REVISION_FILE ]; then
	REV=`cat $REVISION_FILE`
    else
	REV=0
    fi
fi

echo -e "\n%%%%%%%%%%%%%%%%% $DATETIME %%%%%%%%%%%%%%%%%"
echo -e "\nFrissítés $REV számú változatról."

if [ "$EXECONLY" != "1" ]; then
    echo -e "\n * Az frissítéshez szükséges állományok letöltése (eltarthat pár percig)... "

    if [ "$MODULES" == '' ]; then
	echo -e "\n\nERROR: Nincs megadva a frissítendő modulok listája (/etc/mayor/main.conf)!\n"
	exit 1
    else
	declare -i UJ_REV
	if [ "$HTTP_SERVER" == '' ]; then
	    if [ -f $SVN ]; then
		# frissítés SVN-ből
		$SVN --force export svn+ssh://svn.mayor.hu/var/svn/trunk/mayor-base/bin "$BASEDIR/bin" > /dev/null
		for MODULE in $MODULES; do
		    echo -n "     $MODULE... "
		    chmod +x $BASEDIR/bin/mayor
		    if [ $? != 0 ]; then exit 2; fi
		    UJ_REV=`$SVN --force export svn+ssh://svn.mayor.hu/var/svn/trunk/$MODULE/update "$BASEDIR/update" | grep revision | cut -d ' ' -f 3 | uniq | sed -e 's/\.//g'`
		    if [ $? != 0 ]; then exit 3; fi
		    echo "kész."
		done
	    else
	        echo -e "\n\nERROR: A subversion kliens nem található: $SVN"
	        exit 4
	    fi
	else
	    # Munkakönyvtár létrehozása
	    if [ ! -d $TMPDIR ]; then
		mkdir $TMPDIR
		chown -R 0:0 $TMPDIR
		chmod -R 700 $TMPDIR
	    else
		rm -rf $TMPDIR/*
	    fi
	    cd $TMPDIR
	    # Az md5sum állomány leszedáse
	    if [ -z $VERSION ]; then
		wget "http://www.mayor.hu/download/md5sum"
	    else
		wget "http://www.mayor.hu/download/$VERSION/md5sum"
		if [[ ! $HTTP_SERVER =~ .*$VERSION.* ]]; then HTTP_SERVER="$HTTP_SERVER/$VERSION"; fi
	    fi
	    if [ $? != 0 ]; then exit 5; fi
	    UJ_REV=`grep Revision md5sum | cut -d ' ' -f 2`
	    if [ "$REV" -lt "$UJ_REV" ]; then
		# csomagok leszedése
		for MODULE in $MODULES; do
		    echo -n "     $MODULE... "
		    MOD=`echo $MODULE | sed "s#/#-#"`
		    FILE=`grep "$MOD-rev" md5sum | cut -d ' ' -f 3`
		    if [ "$FILE" != '' ]; then
			wget "$HTTP_SERVER/$FILE"
			if [ $? != 0 ]; then
			    echo -e "\n\n      ERROR: Az frissítés nem tölthető le: $FILE!\n"
			    exit 6 
			fi
			grep $FILE md5sum | md5sum -c --status
			if [ $? == 0 ]; then
			    tar xfz $FILE -C $BASEDIR ./update 
			else
			    echo -e "\n\n      ERROR: Az ellenörző összeg nem egyezik!\n"
			    exit 7
			fi
		    else
			echo 'Nincs ilyen modul!'
			exit 8 # nem szabad hiányzó csomagok mellett frissíteni!!
		    fi
		done
	    fi
	    cd $BASEDIR/bin
	fi
    fi
else # exec-only
    if [ -f $REVISION_FILE ]; then
	UJ_REV=`cat $REVISION_FILE`
    else
	UJ_REV=0 # nem frissítünk semmit
    fi
fi

if [ "$REV" -ge "$UJ_REV" ]; then
    echo -e "\nNincs újabb változat.\n"
    echo -e "\n * A szükséges jogosultságok beállítása:"
    chmod +x $BASEDIR/bin/mayor
    echo 'kész.'
else
    echo 'kész.'
    . $BASEDIR/update/processUpdateScripts.sh
fi

PWDTEX=`pwd`
echo -e "\nMaYoR TeX formátum állomány újragenerálása... "
cd $BASEDIR/print/module-naplo/tex/ && fmtutil-sys --cnffile $BASEDIR/print/module-naplo/tex/mayor.cnf --fmtdir $BASEDIR/print/module-naplo/ --byfmt mayor > /dev/null 2>&1
echo -e "\nMaYoR XeTeX formátum állomány újragenerálása... "
cd $BASEDIR/print/module-naplo/xetex/ && fmtutil-sys --cnffile $BASEDIR/print/module-naplo/xetex/mayor-xetex.cnf --fmtdir $BASEDIR/print/module-naplo/ --byfmt mayor-xetex > /dev/null 2>&1
cd $PWDTEX
echo 'kész.'

echo -e "\nFrissítés vége.\n"
exit 0