#!/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 https://svn.mayor.hu/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 https://svn.mayor.hu/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