[ Index ] |
PHP Cross Reference of Unnamed Project |
[Summary view] [Print] [Text view]
1 #!/bin/bash 2 # Auteur : Olivier Lacroix 3 # Script permettant de tester les xml du svn du crdp.ac-caen.fr afin de surveiller les sommes md5 des xml officiels. 4 5 # ATTENTION : ce script ne doit pas tre excut sur un serveur en production. Il doit tre excut uniquement sur un serveur de tests car il modifie la base des xml wpkg automatiquement ! 6 7 ######## Utilisation : ########## 8 9 # 1. copier wpkg-md5verif.sh sur le serveur se3 de test. 10 # 2. renseigner toutes les variables en debut de script : nom netbios du se3, IP du client windows de test, etc... 11 # 3. excuter une fois wpkg-md5verif.sh afin de generer les scripts utiles et la conf : installation en crontab de l'excution de wpkg-md5verif.sh 12 # 4. sur le client windows, sous le compte admin executer une fois Y:\unattended\install\wpkg-md5verif\client\install.bat : renseigner le mot de passe d'admin lors de la creation de la tache planifiee. 13 # 5. redemarrer le client windows pour activer automatiquement la tache planifiee. 14 15 # PS : verifier au prealable que le serveur SE3 peut envoyer des mails. 16 17 ####### Fin de la documentation sur l'utilisation ######## 18 19 # Chemin UNC vers partages du se3 20 SE3="\\\\se3" 21 22 # Dossier contenant tous les fichiers generes par ce script. 23 REP=/var/se3/unattended/install/wpkg-md5verif 24 REPSOUSWIN="$SE3\install\wpkg-md5verif" 25 mkdir -p $REP 26 27 # dossier contenant les fichiers temoins pour les pauses. 28 mkdir -p $REP/pause 29 30 # MODE DEBUG 31 DEBUG=1 32 33 # quantite max a telecharger en une execution de ce script (en Ko) 34 # le script prend en compte cette limite avant le debut du telechargement suivant : 35 # exemple : si la limite est 1 000 000Ko et que le script a telecharge 999 999Ko, il va telecharger le fichier suivant 36 # meme si celui-ci pese lourd et s'interrompra apres... 37 # par defaut 6Go (en Ko) 38 MAXDOWNLOAD=6000000 39 40 # Heure du matin a partir de laquelle le script s'interrompt 41 HOURMAX=8 42 43 # Emplacement du fichier downloade... Ecrase-efface a chaque fois pour ne pas remplir le disque. 44 # 1Go doit etre dispo sur la partition du serveur pour certains download qui pesent un peu (orcad, ...). 45 DESTFILE=$REP/wpkg-md5-verif-file.tmp 46 47 # mail d'envoi 48 DESTMAIL=wpkg-se3@listes.tice.ac-caen.fr 49 50 # IP du SE3 51 IPSE3="10.211.55.200" 52 53 # IP du client windows (qui doit repondre aux pings) 54 IPWIN="10.211.55.150" 55 56 # Acces au script wpkg-se3.js 57 WPKGJS="$SE3\install\wpkg\wpkg-se3.js" 58 59 # PARAMETRES wpkg-se3.js obligatoires 60 PARAM="/noDownload:True" 61 62 ####### CONF : ne pas modifier la suite ########### 63 64 wpkgroot=/var/se3/unattended/install/wpkg 65 66 LISTEDESXML=$REP/wpkg-LISTEDESXML 67 68 # emplacement local du fichier repertoriant les applications installees 69 WPKGXML="%systemroot%\system32\wpkg.xml" 70 71 # url de telechargement des xml (doit contenir trois sous-dossiers stable, testing (avec les xml) et logs (avec les fichiers journaux)) 72 export url=http://svn.tice.ac-caen.fr/svn/SambaEdu3/wpkg-packages 73 74 # variable globales utiles 75 export RetourTelechargeUrls=0 76 export TOUTESTCORRIGE=1 77 78 # creation si besoin du dossier pour DESTFILE 79 DESTFILEDOSSIER="$(dirname "$DESTFILE")" 80 mkdir -p $DESTFILEDOSSIER 81 82 # Dossier de dialogue avec le client 83 REPBAT=$REP/client 84 mkdir -p $REPBAT 85 REPBATWIN=$REPSOUSWIN\\client 86 87 # Fichier de dialogue avec le client windows : contient la liste des instructions qu'il devra excuter pour tester les xml modifis. 88 TESTFILE=$REPBAT/TesteXml.bat 89 TESTFILEWIN=$REPBATWIN\\TesteXml.bat 90 [ -e $TESTFILE ] && rm -f $TESTFILE 91 92 # Fichier provoquant une pause 93 PAUSEFILE=$REPBAT/pause.vbs 94 PAUSEFILEWIN=$REPBATWIN\\pause.vbs 95 96 # Fichier execute en tache panifiee au demarrage du pc client, qui ne s'arrete jamais et teste toutes les 10 secondes s'il y a quelquechose a faire (presence de $TESTFILE) 97 TACHEFILE=$REPBAT/bootscript.bat 98 TACHEFILEWIN=$REPBATWIN\\bootscript.bat 99 100 # Fichier provoquant une pause 101 INSTALLSCRIPTCLIENT=$REPBAT/install.bat 102 103 # Fichier de retour du client windows : contient les informations utiles pour savoir si l'install, l'upgrade, le remove ont fonctionn. 104 RETOURFILE=$REPBAT/TesteXml.log 105 RETOURFILEWIN=$REPBATWIN\\TesteXml.log 106 107 # Dossier contenant toutes les commandes passes par le poste windows au serveur SE3. 108 REPCMDCRON=$REP/cron 109 110 # Dossier contenant tous les xml modifis tester par le poste windows. 111 REPXML=$REP/xml 112 113 # Fichier qui reste apres le lancement du script afin de ne pas reprendre tous les download depuis le debut. 114 # Fichier listant dans l'ordre les verifications a faire. Permet de ne pas recommencer au debut a chaque lancement du script 115 # Le script reprend a la premiere ligne de ce fichier les verifications 116 LISTEAEXECUTER=$REP/wpkg-md5-verif-liste 117 118 # on concatene les xml les plus recents dans un wpkg-md5-verif-packages.xml 119 export PACKAGESFILE=$REP/wpkg-md5-verif-packages.xml 120 121 #### Fichiers temporaires a supprimer en fin de script. 122 # Fichier contenant le mail a envoyer 123 MAILFILETMP=$REP/wpkg-md5-verif-mail 124 125 # Fichier genere depuis $PACKAGEARCH avec toutes les url a verifier sous la forme : 126 # file.xml#url#md5sum 127 LISTEURLMD5=$REP/wpkg-url-md5-new 128 129 # fichier temporaire pour updater les sommes md5 des xml 130 export FILETMP=$REP/wpkg-md5verif-temp.xml 131 132 ######################## FIN CONF ####################### 133 134 ############### DEBUT DES VERIFICATIONS DES DEPENDANCES ET TEST DE NON DOUBLE EXECUTION ############ 135 # dependance subversion... 136 TEST=$(dpkg -l | grep subversion) 137 if [ "$TEST" == "" ] ; then 138 echo "Le package subversion n'est pas installe. Ce script necessite xmlstarlet pour parser les xml..." 139 echo "apt-get install subversion" 140 exit 1 141 fi 142 143 # dependance xmlstarlet... 144 TEST=$(dpkg -l | grep xmlstarlet) 145 if [ "$TEST" == "" ] ; then 146 echo "Le package xmlstarlet n'est pas installe. Ce script necessite xmlstarlet pour parser les xml..." 147 echo "apt-get install xmlstarlet" 148 exit 1 149 fi 150 151 VERROU=/var/lock/wpkg-md5verif 152 153 if [ -e $VERROU ]; then 154 echo "wpkg-md5verif.sh est deja en cours d'execution sur ce serveur" 155 exit 0 156 fi 157 158 ####################### FIN DES VERIFICATIONS DES DEPENDANCES ET DU TEST ############ 159 160 161 ####################### DEBUT DES FONCTIONS ############ 162 163 function CmdToWin { 164 echo $1 >> $TESTFILE 165 } 166 167 function SupprimeScriptClient { 168 rm -f $TESTFILE 169 } 170 171 function WpkgInstall { 172 idpackage=$1 173 CmdToWin "cscript $WPKGJS $PARAM /install:$idpackage" 174 #RecupereWpkgXml 175 WpkgStatus $idpackage 176 } 177 178 function WpkgUpgrade { 179 idpackage=$1 180 CmdToWin "cscript $WPKGJS $PARAM /upgrade:$idpackage" 181 #RecupereWpkgXml 182 WpkgStatus $idpackage 183 } 184 185 function WpkgRemove { 186 idpackage=$1 187 CmdToWin "cscript $WPKGJS $PARAM /remove:$idpackage" 188 #RecupereWpkgXml 189 WpkgStatus $idpackage 190 } 191 192 function WpkgStatus { 193 idpackage=$1 194 CmdToWin "cscript $WPKGJS /show:$idpackage > $RETOURFILEWIN" 195 } 196 197 function CreeTemoin { 198 FICHIERTEMOIN=$1 199 mkdir -p $REP/pause 200 touch $REP/pause/$FICHIERTEMOIN 201 } 202 203 function SupprimeTemoin { 204 FICHIERTEMOIN=$1 205 [ -e $REP/pause/$FICHIERTEMOIN ] && rm -f $REP/pause/$FICHIERTEMOIN 206 } 207 208 function CreeScriptClient { 209 echo "WScript.Sleep 10000" > $PAUSEFILE 210 echo "set Z=$SE3\\install" > $TACHEFILE 211 echo "set SOFTWARE=$SE3\\install\\packages" >> $TACHEFILE 212 echo ":debut" >> $TACHEFILE 213 echo "if exist $TESTFILEWIN (" >> $TACHEFILE 214 echo " call $TESTFILEWIN" >> $TACHEFILE 215 #echo " del /F /Q /S $TESTFILEWIN" >> $TACHEFILE 216 echo ")" >> $TACHEFILE 217 echo "cscript $REPBATWIN\pause.vbs > NUL" >> $TACHEFILE 218 echo "goto debut" >> $TACHEFILE 219 echo "copy /Y $TACHEFILEWIN %Systemdrive%" > $INSTALLSCRIPTCLIENT 220 echo "if exist %systemroot%\\tasks\\WpkgMd5Verif.job del /F /Q /S %systemroot%\\tasks\\WpkgMd5Verif.job" >> $INSTALLSCRIPTCLIENT 221 echo "schtasks /create /tn WpkgMd5Verif /sc ONSTART /tr \"%Comspec% /C start %Systemdrive%\\bootscript.bat\" " >> $INSTALLSCRIPTCLIENT 222 } 223 224 function PauseWinTantQue { 225 FICHIERTEMOIN=$1 226 CmdToWin ":debut$FICHIERTEMOIN" 227 CmdToWin "if not exist $REPSOUSWIN\pause\\$FICHIERTEMOIN goto suite$FICHIERTEMOIN" 228 CmdToWin "ping -n 10 $IPSE3 1&2> NUL" 229 CmdToWin "goto debut$FICHIERTEMOIN" 230 CmdToWin ":suite$FICHIERTEMOIN" 231 } 232 233 function PauseSE3TantQue { 234 # met le script en pause tant que $RETOURFILE n'a pas change de date : passe la main au bout d'une heure en envoyant un mail 235 APPLI=$1 236 [ "$DEBUG" = "1" ] && echo "Pause sur le SE3 en attendant le test de $APPLI sur le client windows." 237 FICHIER=$RETOURFILE 238 [ ! -e $FICHIER ] && touch $FICHIER 239 modifinit=$(stat -c '%y' $FICHIER) 240 dateinit=$(date +"%s") 241 while true 242 do 243 modif=$(stat -c '%y' $FICHIER) 244 [ "$modif" != "$modifinit" ] && echo "Le fichier $RETOURFILE a change, on poursuit." && break # teste si le ficheir wpkg.xml a change depuis le debut de l'execution 245 #echo "date actu : $(date +\"%s\") - date init : $dateinit" 246 #echo "diff : $(($(date +"%s") - $dateinit))" 247 [ $(($(date +"%s") - $dateinit)) -gt 3600 ] && echo "Le fichier $RETOURFILE n'a pas change depuis 1H, on poursuit." && break # teste si une heure s'est ecoule depuis le debut de la pause 248 sleep 5 249 done 250 echo "Fin de la pause. $RETOURFILE a ete modifie." 251 } 252 253 function InstallXmlSE3 { 254 XML=$1 255 NOMDUXML="`basename \"$XML\"`" 256 [ "$DEBUG" = "1" ] && echo "Installation de $XML dans la base packages.xml du SE3, telechargement des fichiers necessaires. En cours." 257 cp -f $XML $wpkgroot/tmp 258 retourinstallPackage=$(/var/www/se3/wpkg/bin/installPackage.sh $wpkgroot/tmp/$NOMDUXML 0 admin urlmd5 1) 259 # reste : recuperer l'erreur en cas de probleme md5 (si besoin: pas forcement besoin car on a corrige la somme md5 au prealable sur les xml testes et les anciens liens, si non valides ne peuvent plus etre telechargees...) 260 } 261 262 function RecupereWpkgXml { 263 CmdToWin "copy /Y $WPKGXML $REPSOUSWIN" 264 } 265 266 function svnUpdate { 267 echo "Recuperation de $1 depuis le svn..." 268 if [ ! -e $REP/$1 ] ; then 269 svn checkout $url/$1 $REP/$1 270 else 271 svn update $REP/$1 272 fi 273 } 274 275 function regroupeXml { 276 # on filtre les xml obsolete en les classant par date : les plus recents en premier 277 echo "Examen de tous les attributs download de tous les xml du svn, branche $1" 278 ls -t $REP/$1 | while read FILE; do 279 [ "$DEBUG" = "1" ] && echo "Examen de $FILE" 280 cat $REP/$1/$FILE | xmlstarlet sel -t -m "/packages/package/download" -o "$REP/$1/$FILE#" -v "@url" -o "#" -v "@md5sum" -n >> $LISTEURLMD5 281 done 282 } 283 284 285 function ExtraireDownloadDuXml { 286 #[ -e $LISTEURLMD5 ] && rm -f $LISTEURLMD5 287 FICHIER=$1 288 echo "Examen de tous les attributs download de $FICHIER" 289 cat $FICHIER | xmlstarlet sel -t -m "/packages/package/download" -v "@url" -o "#" -v "@md5sum" -o "#" -v "@saveto" -n > $LISTEURLMD5 290 } 291 292 293 ######## Fonctions de lecture de wpkg.xml ############### 294 295 # lit le fichier $RETOURFILE 296 function AppliInstalled { 297 TEST=$(cat $RETOURFILE | grep "Status" | grep "Not Installed") 298 if [ "$TEST" == "" ]; then 299 RETOURAppliInstalled="True" 300 else 301 RETOURAppliInstalled="False" 302 fi 303 #echo $RETOUR 304 #xmlstarlet sel -t -m "/wpkg:wpkg/checkResults/" -v "@result" $WpkgXml 305 #xmlstarlet ed -i "/packages/package/download[@url='$URL']" -t attr -n "md5sum" -v "$MD5" $FILE 306 } 307 308 309 310 ######## Fonctions de modification des xml du svn ######### 311 312 function Lireid { 313 FILE=$1 314 RETOUR=$(cat $FILE | xmlstarlet sel -t -m "/packages/package" -v "@id" -n) 315 echo "$RETOUR" 316 } 317 318 function InsertMd5Sum { 319 FILE=$1 320 URL=$2 321 MD5=$3 322 xmlstarlet ed -i "/packages/package/download[@url='$URL']" -t attr -n "md5sum" -v "$MD5" $FILE 323 } 324 325 function UpdateMd5Sum { 326 FILE=$1 327 URL=$2 328 MD5=$3 329 xmlstarlet ed -u "/packages/package/download[@url='$URL']/@md5sum" -v "$MD5" $FILE 330 } 331 332 function MiseAJourDuLog { 333 LOG=$1 334 MOTIF=$2 335 echo "" >> $LOG 336 echo "$(date) : $2" >> $LOG 337 echo "" >> $LOG 338 [ "$DEBUG" = "1" ] && echo "Mise a jour du fichier journal $LOG." 339 } 340 341 function AjoutCrontabCommandeClientWindows { 342 CRONFILE=/etc/cron.d/se3-wpkg-md5verif 343 SCRIPT=$0 344 echo "# Execution de $SCRIPT tous les soirs a 2H du matin" > $CRONFILE 345 echo "0 2 * * * root $SCRIPT > /dev/null 2>&1" >> $CRONFILE 346 [ "$DEBUG" = "1" ] && echo "Mise a jour de la commande crontab : execution de $SCRIPT a 2H tous les jours." 347 /etc/init.d/cron restart > /dev/null 348 } 349 350 function AppliATester { 351 XML=$1 352 MOTIF=$2 353 echo "" >> $LOG 354 echo "$(date) : $2" >> $LOG 355 echo "" >> $LOG 356 [ "$DEBUG" = "1" ] && echo "Mise a jour du fichier journal $LOG." 357 } 358 359 function GenereListeDesXml { 360 # compte le nombre de xml a tester dans $LISTEDESXML 361 if [ -e $LISTEDESXML ] ; then 362 NBRELINES=$(wc -l $LISTEDESXML | cut -d" " -f1) 363 else 364 NBRELINES=0 365 fi 366 367 NBREDEXMLSTABLE=$(ls $REP/stable | wc -l) 368 NBREDEXMLTESTING=$(ls $REP/testing | wc -l) 369 NBRETOTALDEXML=$(($NBREDEXMLSTABLE+$NBREDEXMLTESTING)) 370 371 if [ $NBRELINES -ge $NBRETOTALDEXML ] ; then 372 [ "$DEBUG" = "1" ] && echo "Le fichier $LISTEDESXML contient deja toutes les applications." 373 else 374 [ "$DEBUG" = "1" ] && echo "Le fichier $LISTEDEXML ne contient pas tous les packages, on les ajoute." 375 ls -t $REP/stable | while read FILE; do 376 [ "$DEBUG" = "1" ] && echo "Examen programme de $REP/$FILE" 377 echo stable/$FILE >> $LISTEDESXML 378 done 379 ls -t $REP/testing | while read FILE; do 380 [ "$DEBUG" = "1" ] && echo "Examen programme de $REP/$FILE" 381 echo testing/$FILE >> $LISTEDESXML 382 done 383 [ "$DEBUG" = "1" ] && echo "Mise a jour du fichier $LISTEDESXML effectuee." 384 fi 385 } 386 387 function MiseAJourDuXml { 388 FILE=$1 389 URL=$2 390 MD5=$3 391 if [ "$MD5" = "" ]; then 392 InsertMd5Sum "$FILE" "$URL" "$MD5" > $FILETMP 393 [ "$DEBUG" = "1" ] && echo "Ajout de la somme md5 $MD5 dans le fichier $FILE." 394 MiseAJourDuLog $JOURNAL "Ajout de la somme md5 $MD5 dans le fichier $FILE." 395 else 396 UpdateMd5Sum "$FILE" "$URL" "$MD5" > $FILETMP 397 [ "$DEBUG" = "1" ] && echo "Mise a jour de la somme md5 $MD5 dans le fichier $FILE." 398 MiseAJourDuLog $JOURNAL "Mise a jour de la somme md5 $MD5 dans le fichier $FILE." 399 fi 400 401 # si le xml est en testing et que les tests sont concluants, on le passe en stable. 402 mv -f $FILETMP $FILE 403 # reste a commiter le fichier 404 } 405 406 function TelechargeUrls { 407 if [ -e $LISTEURLMD5 ]; then 408 TOUTESTCORRIGE=1 409 RETOUR=0 410 cat $LISTEURLMD5 | while read LINE; do 411 # echo "$LINE" 412 # nouvelle extraction des url et md5sum 413 url=$(echo "$LINE" | cut -d"#" -f1) 414 md5sum=$(echo "$LINE" | cut -d"#" -f2) 415 DESTFILE=$(echo "$LINE" | cut -d"#" -f3) 416 DESTFILE=/var/se3/unattended/install/$DESTFILE 417 [ "$url" == "" ]&& exit 0 418 echo "Telechargement de $url. MD5 attendue : $md5sum sauve vers $DESTFILE" 419 /usr/bin/wget -O "$DESTFILE" "$url" 1>/dev/null 2>/dev/null 420 # 2>>$MAILFILETMP 421 # recuperation taille du download 422 REALSIZE=$(stat -c %s $DESTFILE) 423 #SIZEMO=$[ $(stat -c %s $DESTFILE) / 1000 ] 424 # calcul de la somme md5, envoi du mail si mauvaise 425 if [ -e $DESTFILE ] ; then 426 # en cas d'erreur 404, le fichier est vide. 427 if [ $REALSIZE -eq 0 ] ; then 428 echo "Le fichier telecharge depuis $url est vide. Une erreur 404 surement..." >> $MAILFILETMP 429 echo "Le fichier telecharge depuis $url est vide. Une erreur 404 surement... Envoi d'un email d'avertissement." 430 RETOUR=1 431 TOUTESTCORRIGE=0 432 echo "RETOUR=$RETOUR et $TOUTESTCORRIGE=TOUTESTCORRIGE" 433 else 434 [ "$DEBUG" = "1" ] && echo "Fichier bien telecharge : $DESTFILE" 435 MD5REAL="$(/usr/bin/md5sum $DESTFILE | cut -d" " -f1)" 436 if [ "$md5sum" = "" ] ; then 437 echo "Somme md5 absente du fichier xml pour $url. On l'ajoute." >> $MAILFILETMP 438 echo "Somme md5 absente du fichier xml pour $url. On l'ajoute." 439 # on le fait par ailleurs : sed -e "s/$url#$md5sum#$DESTFILE/$url#$MD5REAL#$DESTFILE/g" $LISTEURLMD5 440 InsertMd5Sum $XMLCORRIGE $url $MD5REAL 441 ERREUR=1 442 elif [ "$MD5REAL" = "$md5sum" ]; then 443 echo "Tout va bien : somme md5 reelle $MD5REAL = somme md5 du xml $md5sum." 444 else 445 echo "Somme md5 incorrecte. Le telechargement depuis $url a la somme md5 $MD5REAL et non celle attendue $md5sum." >> $MAILFILETMP 446 echo "Somme md5 incorrecte. Le telechargement depuis $url a la somme md5 $MD5REAL et non celle attendue $md5sum. Envoi d'un mail d'avertissement" 447 UpdateMd5Sum $XMLCORRIGE $url $MD5REAL 448 RETOUR=1 449 fi 450 fi 451 else 452 echo "Fichier non telecharge : l'url $url du fichier xml est invalide." >> $MAILFILETMP 453 echo "Fichier non telecharge : l'url $url du fichier xml est invalide. Envoi d'un mail d'avertissement." 454 RETOUR=1 455 TOUTESTCORRIGE=0 456 fi 457 done 458 RetourTelechargeUrls=$RETOUR 459 echo "RETOUR=$RETOUR et $TOUTESTCORRIGE=TOUTESTCORRIGE" 460 else 461 echo "$LISTEURLMD5 est vide pour $XMLATESTER. Peut-etre normal s'il ne comporte aucun lien download." 462 RetourTelechargeUrls=0 463 fi 464 echo $RetourTelechargeUrls > $ERREURFILE 465 echo $TOUTESTCORRIGE > $TOUTESTCORRIGEFILE 466 } 467 468 ################## FIN DES FONCTIONS ################## 469 470 ####################### NOUVEAU SCRIPT EXECUTE UNIQUEMENT AVEC CLIENT WINDOWS ####################### 471 # Permet la modification autoamtique des xml incorrects via un test de validation (upgrade-remove-install) sur le client windows 472 473 function TesterXml { 474 BRANCHE=$1 475 Xml=$2 476 Correctif=$3 477 APPLI=$REP/$BRANCHE/$Xml 478 ID=$(Lireid $APPLI) 479 NOMAPPLI=$(echo "$APPLI" | sed -e "s+$(dirname $APPLI)/++g" | cut -d"." -f1) 480 echo "On teste : $APPLI de $BRANCHE avec l'id $ID" 481 # Si tout est corrige : 482 if [ "$Correctif" == 1 ]; then 483 # on teste $REP/xml/$APPLI sur le client windows 484 echo "On provoque l'install de l'ancien xml sur le client windows." 485 # si celle-ci provoque une erreur : download impossible ou install invalide, on ignore" 486 InstallXmlSE3 $APPLI # telecharge les fichiers du xml old version sur le SE3 487 WpkgInstall $ID # commande d'install de l'ancienne version du xml 488 PauseSE3TantQue $NOMAPPLI # teste la date de $WPKGXML et poursuit quand elle a change ou apres une heure 489 SupprimeScriptClient # supprime le script car deja execute par le client windows. 490 491 echo "On lance un upgrade depuis l'ancienne version vers la version corrigee." 492 InstallXmlSE3 $XMLCORRIGE # telecharge les fichiers du xml corrige sur le SE3 493 WpkgInstall $ID # commande d'install de l'ancienne version du xml pour le client windows 494 PauseSE3TantQue $NOMAPPLI # teste la date de $WPKGXML et poursuit quand elle a change ou apres une heure 495 SupprimeScriptClient # supprime le script car deja execute par le client windows. 496 else 497 echo "Xml jamais teste avec ce script sur ce serveur. On lance une installation de la version du svn." 498 InstallXmlSE3 $APPLI # telecharge les fichiers du xml du svn sur le SE3 499 WpkgInstall $ID # commande d'install de l'ancienne version du xml pour le client windows 500 PauseSE3TantQue $NOMAPPLI # teste la date de $WPKGXML et poursuit quand elle a change ou apres une heure 501 SupprimeScriptClient # supprime le script car deja execute par le client windows. 502 fi 503 504 # recupere le succes de l'installation-upgrade 505 AppliInstalled 506 INSTALLED=$RETOURAppliInstalled 507 # si succes 508 if [ "$INSTALLED" == "True" ]; then 509 echo "Installation-Upgrade realise avec succes." 510 # on teste le remove 511 echo "On lance un remove." 512 WpkgRemove $ID # commande d'install de l'ancienne version du xml pour le client windows 513 PauseSE3TantQue $NOMAPPLI # teste la date de $WPKGXML et poursuit quand elle a change ou apres une heure 514 SupprimeScriptClient # supprime le script car deja execute par le client windows. 515 # recupere le succes du remove 516 AppliInstalled 517 INSTALLED=$RETOURAppliInstalled 518 if [ "$INSTALLED" == "True" ]; then 519 echo "Le remove de $APPLI d'id $ID s'est mal deroule." >> $MAILFILETMP 520 echo "Le remove de $APPLI d'id $ID s'est mal deroule. Envoi d'un mail" 521 else 522 echo "L'install-upgrade $APPLI d'id $ID depuis le xml actuel et le remove semblent corrects. On valide ce xml corrige:" >> $MAILFILETMP 523 echo "L'install-upgrade $APPLI d'id $ID depuis le xml actuel et le remove semblent corrects. On valide ce xml corrige:" 524 cat $XMLCORRIGE 525 cat $XMLCORRIGE >> $MAILFILETMP 526 echo "" >> $MAILFILETMP 527 stat -c '%y' $XMLCORRIGE > $REP/xml/$NOMAPPLI.$BRANCHE.teste # garde en memoire la date du xml valide pour ne pas le tester indefiniment. 528 # reste : le corriger automatiquement sur le svn. 529 # A FAIRE. 530 fi 531 else 532 echo "L'upgrade de $APPLI d'id $ID s'est mal deroule" >> $MAILFILETMP 533 echo "L'upgrade de $APPLI d'id $ID s'est mal deroule" 534 # reste : effectuer une correction du check s'il s'agit d'un type de check uninstall 535 # si check nouveau non valide 536 # envoi d'un mail. 537 538 # effectuer le remove dans tous les cas pour nettoyer le client. On ne regarde pas si le remove a reussi ou pas. 539 echo "On lance un remove pour vider le DD de la VM." 540 WpkgRemove $ID # commande d'install de l'ancienne version du xml pour le client windows 541 PauseSE3TantQue $NOMAPPLI # teste la date de $WPKGXML et poursuit quand elle a change ou apres une heure 542 SupprimeScriptClient # supprime le script car deja execute par le client windows. 543 fi 544 # Sinon 545 # on envoie un mail car un lien est invalide. 546 } 547 548 # fichier rajoute a cause d'un probleme de portee de variable. 549 ERREURFILE=/tmp/wpkg-md5verifERREURFILE 550 TOUTESTCORRIGEFILE=/tmp/wpkg-md5verifTOUTESTCORRIGEFILE 551 552 function TestAndModify { 553 # programme principal du script nouvelle version 554 555 AjoutCrontabCommandeClientWindows # ajout crontab pour dialogue avec le client windows 556 CreeScriptClient # creation des scripts a executer cote client au boot , en tache planifiee 557 558 GenereListeDesXml # Genere la liste des xml examiner. Permet de reprendre les tests la ou le script s'est interrompu 559 560 # Pour chaque fichier de stable puis de testing faire 561 cat $LISTEDESXML | while read XMLATESTER ; do 562 NOMAPPLI=$(echo "$REP/$XMLATESTER" | sed -e "s+$(dirname $REP/$XMLATESTER)/++g" | cut -d"." -f1) 563 BRANCHE=$(echo "$XMLATESTER" | cut -d"/" -f1) 564 FILE=$(echo "$XMLATESTER" | cut -d"/" -f2) 565 ERREUR=0 566 echo "On examine $NOMAPPLI de la branche $BRANCHE dans le fichier $FILE" 567 568 # Tester tous les download url de $REP/$XMLATESTER 569 ExtraireDownloadDuXml $REP/$XMLATESTER 570 # Ce dernier script genere un fichier $LISTEURLMD5 qui contient url#md5#saveto 571 # on modifie le xml ailleurs et on ne repercute sur le depot svn qu'en cas de succes. 572 mkdir -p $REP/xml 573 cp -f $REP/$XMLATESTER $REP/xml/ 574 # On corrige le xml dans 575 XMLCORRIGE=$REP/xml/$NOMAPPLI.xml 576 TelechargeUrls # telecharge toutes les urls du $XMLATESTER et corrige les sommes md5 si besoin dans $XMLCORRIGE 577 # si l'une d'elle est erronee alors ERREUR=1 578 ERREUR=$(cat $ERREURFILE) 579 TOUTESTCORRIGE=$(cat $TOUTESTCORRIGEFILE) 580 echo "ERREUR=$ERREUR et TOUTESTCORRIGE=$TOUTESTCORRIGE" 581 582 # si le fichier xml a change depuis la derniere execution que le client windows, il faut le retester. 583 # tester la date contenue dans $REP/xml/$NOMAPPLI.$BRANCHE.teste la comparer a la variable $actu ci-apres 584 if [ -e $REP/xml/$NOMAPPLI.$BRANCHE.teste ]; then 585 old=$(cat $REP/xml/$NOMAPPLI.$BRANCHE.teste) 586 else 587 old="ToutSaufUneDateValide" 588 fi 589 actu=$(stat -c '%y' $REP/$BRANCHE/$FILE) 590 # si le xml a change depuis le dernier test sur le client windows, on le teste de nouveau. Suppression du fichier temoin. 591 echo "old=$old actu=$actu" 592 [ ! "$old" == "$actu" ] && [ -e $REP/xml/$NOMAPPLI.$BRANCHE.teste ] && rm -f $REP/xml/$NOMAPPLI.$BRANCHE.teste 593 594 # teste si le xml a ete corrige entirement : 595 [ "$ERREUR" == "1" -a "$TOUTESTCORRIGE" == "1" ] && CORRIGEENTIEREMENT=1 596 if [ ! -e $REP/xml/$NOMAPPLI.$BRANCHE.teste -o "$CORRIGEENTIEREMENT"="1" ]; then 597 # Si le client windows repond au ping, on l'utilise, sinon, on ne fait que tester. 598 WINDOWSPRESENT=0 599 ping -c 4 $IPWIN > /dev/null && WINDOWSPRESENT=1 600 if [ $WINDOWSPRESENT == 1 ]; then 601 echo "Le client windows $IPWIN est present, on l'utilise pour les validations des corrections de $BRANCHE/$FILE." 602 # si jamais teste, on teste le xml corrige dessus. 603 # si le xml a pu etre completement corrige, on le teste, sinon on envoie un mail : erreur 404 probable. 604 if [ "$TOUTESTCORRIGE" == "1" ]; then 605 TesterXml $BRANCHE $FILE $ERREUR 606 #[ ! -e $REP/xml/$NOMAPPLI.$BRANCHE.teste ] && stat -c '%y' $XMLCORRIGE > $REP/xml/$NOMAPPLI.$BRANCHE.teste 607 else 608 echo "Le xml $XMLATESTER n'a ete que partiellement corrige (erreur 404 probable)" 609 cat $XMLCORRIGE 610 echo "Le xml $XMLATESTER n'a ete que partiellement corrige (erreur 404 probable)" >> $MAILFILETMP 611 echo "" >> $MAILFILETMP 612 cat $XMLCORRIGE >> $MAILFILETMP 613 echo "" >> $MAILFILETMP 614 fi 615 else 616 echo "On envoie $XMLATESTER corrige par mail au destinataire sans garantie." 617 echo "Voici $XMLATESTER corrige avec les nouvelles sommes md5. Malheureusement, en l'absence de client windows, impossible de tester son bon fonctionnement." 618 echo "" 619 cat $XMLCORRIGE 620 echo "" 621 echo "Voici $XMLATESTER corrige avec les nouvelles sommes md5. Malheureusement, en l'absence de client windows, impossible de tester son bon fonctionnement." >> $MAILFILETMP 622 echo "" >> $MAILFILETMP 623 cat $XMLCORRIGE >> $MAILFILETMP 624 echo "" >> $MAILFILETMP 625 fi 626 else 627 echo "$BRANCHE/$FILE a deja ete teste et il n'y a pas d'erreur md5, on passe au xml suivant" 628 fi 629 [ -e $XMLCORRIGE ] && rm -f $XMLCORRIGE 630 done 631 632 # envoi de mail puis menage 633 [ -e $MAILFILETMP ] && mail $DESTMAIL -s"Controle des sommes md5 WPKG" < $MAILFILETMP 634 635 rm -f $MAILFILETMP 636 rm -f $DESTFILE 637 rm -f $LISTEURLMD5 638 } 639 640 641 ####################### FIN DU NOUVEAU SCRIPT EXECUTE UNIQUEMENT AVEC CLIENT WINDOWS ####################### 642 643 ####################### VIEUX SCRIPT EXECUTE UNIQUEMENT SANS CLIENT WINDOWS ####################### 644 function TestOnly { 645 [ -e $PACKAGESFILE ] && rm -f $PACKAGESFILES 646 [ -e $LISTEURLMD5 ] && rm -f $LISTEURLMD5 647 648 regroupeXml "testing" 649 regroupeXml "stable" 650 651 [ ! -e $LISTEURLMD5 ] && echo "Fichier $LISTEURLMD5 absent." && exit 652 echo "Fichier $LISTEURLMD5 genere." 653 654 # initialisation liste download. On rajoute au bout de la liste a traiter le debut du packages.xml 655 # si le fichier $LISTEAEXECUTER contient 2 fois plus de lignes que $LISTEURLMD5, c'est qu'il contient deja toutes les applis 656 # celles eventuellement en double seront virees par le sed -i ... -e "/$url/d" qui suit. 657 if [ -e $LISTEAEXECUTER ] ; then 658 NBRELINES=$(wc -l $LISTEAEXECUTER | cut -d" " -f1) 659 else 660 NBRELINES=0 661 fi 662 663 NBRELINESPACKAGE=$(wc -l $LISTEURLMD5 | cut -d" " -f1) 664 665 if [ $NBRELINES -ge $NBRELINESPACKAGE ] ; then 666 [ "$DEBUG" = "1" ] && echo "Le fichier $LISTEAEXECUTER contient deja toutes les applications." 667 else 668 [ "$DEBUG" = "1" ] && echo "Le fichier $LISTEAEXECUTER ne contient pas tous les packages, on les ajoute." 669 cat $LISTEURLMD5 >> $LISTEAEXECUTER 670 fi 671 672 echo "" 673 674 675 #### telechargement effectif (les download effectues sont retires de $LISTEAEXECUTER au fur et a mesure) 676 677 # on nettoie les lignes vides du fichier $LISTEAEXECUTER 678 sed -i $LISTEAEXECUTER -e '/^$/d' 679 680 # on nettoie les cas ou l'url n'existe pas dans le noeud download du fichier $LISTEAEXECUTER 681 sed -i $LISTEAEXECUTER -e '/##/d' 682 683 export SIZETOT=0 684 685 cat $LISTEAEXECUTER | while read LINE; do 686 [ -e $DESTFILE ] && rm -f $DESTFILE 687 688 # nouvelle extraction des url et md5sum 689 xmlfile=$(echo "$LINE" | cut -d"#" -f1) 690 url=$(echo "$LINE" | cut -d"#" -f2) 691 md5sum=$(echo "$LINE" | cut -d"#" -f3) 692 693 echo "Fichier $xmlfile : telechargement de $url. MD5 attendue : $md5sum" 694 695 /usr/bin/wget -O "$DESTFILE" "$url" 1>/dev/null 2>/dev/null 696 # 2>>$MAILFILETMP 697 # recuperation taille du download 698 REALSIZE=$(stat -c %s $DESTFILE) 699 SIZEMO=$[ $(stat -c %s $DESTFILE) / 1000 ] 700 SIZETOT=$[$SIZEMO + $SIZETOT ] 701 702 # calcul de la somme md5, envoi du mail si mauvaise 703 if [ -e $DESTFILE ] ; then 704 # en cas d'erreur 404, le fichier est vide. 705 if [ $REALSIZE -eq 0 ] ; then 706 echo "Le fichier telecharge depuis $xmlfile correspondant a $url est vide. Une erreur 404 surement..." >> $MAILFILETMP 707 echo "Le fichier telecharge depuis $xmlfile correspondant a $url est vide. Une erreur 404 surement... Envoi d'un email d'avertissement." 708 else 709 710 [ "$DEBUG" = "1" ] && echo "Fichier bien telecharge : $DESTFILE" 711 MD5REAL="$(/usr/bin/md5sum $DESTFILE | cut -d" " -f1)" 712 if [ "$md5sum" = "" ] ; then 713 echo "Somme md5 absente du fichier $xmlfile pour $url." >> $MAILFILETMP 714 echo "Somme md5 absente du fichier $xmlfile pour $url." 715 716 # nettoyage liste download avec sed -i 717 FILENAME=$(echo "$url" | sed -e "s+$(dirname $url)/++g") 718 [ "$DEBUG" = "1" ] && echo "On supprime le fichier $FILENAME de la liste a verifier." 719 sed -i $LISTEAEXECUTER -e "/$FILENAME/d" 720 elif [ "$MD5REAL" = "$md5sum" ]; then 721 echo "Tout va bien : somme md5 reelle $MD5REAL = somme md5 du xml $md5sum." 722 else 723 echo "Somme md5 incorrecte. Le telechargement depuis $xmlfile de $url a la somme md5 $MD5REAL et non celle attendue $md5sum." >> $MAILFILETMP 724 echo "Somme md5 incorrecte. Le telechargement depuis $xmlfile de $url a la somme md5 $MD5REAL et non celle attendue $md5sum. Envoi d'un mail d'avertissement" 725 fi 726 fi 727 else 728 echo "Fichier non telecharge : l'url $url du fichier $xmlfile est invalide." >> $MAILFILETMP 729 echo "Fichier non telecharge : l'url $url du fichier $xmlfile est invalide. Envoi d'un mail d'avertissement." 730 fi 731 732 # nettoyage liste download avec sed -i 733 FILENAME=$(echo "$url" | sed -e "s+$(dirname $url)/++g" | sed -e "s+/++g") 734 # FILENAME=$(echo $url | sed -e "s#/#\\\\/#g") 735 [ "$DEBUG" = "1" ] && echo "On supprime le telechargement $FILENAME de la liste a verifier." 736 #echo $FILENAME 737 sed -i $LISTEAEXECUTER -e "/$FILENAME/d" 738 739 # on quitte si HEURE>6H 740 HOUR=$(date '+%H') 741 if [ $HOUR -ge $HOURMAX ] ; then 742 echo "Il est $HOURMAX H. On continuera demain, tot le matin, lors du prochain lancement de ce script." 743 exit 744 fi 745 746 747 # on quitte si $SIZETOT > $MAXDOWNLOAD 748 [ "$DEBUG" = "1" ] && echo "Taille du telechargement : $SIZEMO Ko. Taille totale depuis le debut : $SIZETOT Ko." 749 if [ $SIZETOT -ge $MAXDOWNLOAD ] ; then 750 echo "Quantite maximale ($MAXDOWNLOAD Mo) atteinte. On continuera le controle des sommes md5 lors du prochain lancement de ce script." 751 exit 752 fi 753 echo "" 754 done 755 756 [ -e $MAILFILETMP ] && mail $DESTMAIL -s"Controle des sommes md5 WPKG" < $MAILFILETMP 757 758 rm -f $MAILFILETMP 759 rm -f $DESTFILE 760 rm -f $LISTEURLMD5 761 } 762 763 ####################### FIN VIEUX SCRIPT EXECUTE UNIQUEMENT SANS CLIENT WINDOWS ####################### 764 765 ### MAIN () 766 767 # reste : decommenter la ligne qui suit 768 #touch $VERROU 769 770 [ "$DEBUG" = "1" ] && echo "Le dossier de destination des telechargements est $DESTFILEDOSSIER." 771 772 # mise a jour par rapport au svn 773 # reste : decommenter les trois lignes suivantes 774 #svnUpdate "stable" 775 #svnUpdate "testing" 776 #svnUpdate "logs" 777 778 # Si le client windows repond au ping, on l'utilise, sinon, on ne fait que tester. 779 #WINDOWSPRESENT=0 780 #ping -c 4 $IPWIN > /dev/null && WINDOWSPRESENT=1 781 #if [ $WINDOWSPRESENT == 1 ]; then 782 # echo "Le client windows $IPWIN est present, on l'utilise pour les validations des corrections md5" 783 TestAndModify ##### Nouvelle version du script qui gere tous les cas : client present ou pas... Le script TestOnly est obsolete. 784 #else 785 # echo "Le client windows $IPWIN n'est pas present, on teste juste les sommes md5" 786 # TestOnly 787 #fi 788 789 [ -e $VERROU ] && rm -f $VERROU
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Tue Mar 17 22:47:18 2015 | Cross-referenced by PHPXref 0.7.1 |