meta données pour cette page
Ceci est une ancienne révision du document !
Update de geonetwork
2017/05/18 17:45:03. cmartin
Contient un script à lancer pour faire les mises à jour de geonetwork. Tout ce qu'il faut c'est connaitre le dossier qui contient le WAR de geonetwork et un nouveau WAR.
<note importante> valable pour les installations de geonetwork faites en déployant un WAR, pas en utilisant le JAR d'installation.
Testé pour passage de geonetwork 3.0.4 à 3.2.1
SANS GARANTIE </note>
Précautions
AVANT de lancer le script :
- avoir unecopie de la base de données
- avoir une copie du dossier de geonetwork (tar ou autre)
En cas d'échec ça permettra de remettre les choses comme il faut.
Avant de lancer le script
- Arreter tomcat avant de lancer le script !!
- Disposer du fichier war de la nouvelle version sur la machine ou geonetwork sera mise à jour.
fonctionnement du script
DOIT ÊTRE LANCÉ SOUS LE COMPTE ROOT
- inspection du war actuel
- détection des fichiers ajoutés
- détection des fichiers modifiés (comme connexion à une BDD)
- inspection du nouveau WAR
- mise en place du nouveau WAR dans le dossier
- déploiement du nouveau WAR
- suppression des fichiers obsoletes
- propose de remettre les fichiers modifiés (mais il faut vérifier manuellement que les modifs sont toujours valables, sinon, patatra)
- suppression du cache
Après utilisation du script
Redémarrage de tomcat à votre charge.
Le script
note perso:
Ce script est dans le git IUEM des sysadmins.
Cliquer sur le titre pour télécharger.
- update-geonetwork
#! /bin/bash # encoding: utf-8 <<'42' Author : Christophe Martin, Christophe•Martin@univ-brest•fr Copyright (C) UMR6538, 2015 FRENCH | ENGLISH -------------------------------------+-------------------------------------- Ce logiciel est un programme | This software is a computer program informatique servant à mettre à | whose purpose is to update jour geonetwork. | geonetwork. | Ce logiciel est régi par la licence | This software is governed by the CeCILL soumise au droit français et | CeCILL license under French law and respectant les principes de | abiding by the rules of diffusion des logiciels libres. | distribution of free software. You Vous pouvez utiliser, modifier | can use, modify and/ or et/ou redistribuer ce programme | redistribute the software under the sous les conditions de la licence | terms of the CeCILL license as CeCILL telle que diffusée par le | circulated by CEA, CNRS and INRIA CEA, le CNRS et l'INRIA sur le site | at the following URL "http://www.cecill.info/". | "http://www.cecill.info/". | En contrepartie de l'accessibilité | As a counterpart to the access to au code source et des droits de | the source code and rights to copie, de modification et de | copy, modify and redistribute redistribution accordés par cette | granted by the license, users are licence, il n'est offert aux | provided only with a limited utilisateurs qu'une garantie | warranty and the software's limitée. Pour les mêmes raisons, | author, the holder of the economic seule une responsabilité restreinte | rights, and the successive pèse sur l'auteur du programme, le | licensors have only limited titulaire des droits patrimoniaux | liability. et les concédants successifs. | | A cet égard l'attention de | In this respect, the user's l'utilisateur est attirée sur les | attention is drawn to the risks risques associés au chargement, à | associated with loading, using, l'utilisation, à la modification | modifying and/or developing or et/ou au développement et à la | reproducing the software by the reproduction du logiciel par | user in light of its specific l'utilisateur étant donné sa | status of free software, that may spécificité de logiciel libre, qui | mean that it is complicated to peut le rendre complexe à manipuler | manipulate, and that also et qui le réserve donc à des | therefore means that it is développeurs et des professionnels | reserved for developers and avertis possédant des | experienced professionals having connaissances informatiques | in-depth computer knowledge. Users approfondies. Les utilisateurs | are therefore encouraged to load sont donc invités à charger et | and test the software's suitability tester l'adéquation du logiciel à | as regards their requirements in leurs besoins dans des conditions | conditions enabling the security of permettant d'assurer la sécurité de | their systems and/or data to be leurs systèmes et ou de leurs | ensured and, more generally, to données et, plus généralement, à | use and operate it in the same l'utiliser et l'exploiter dans les | conditions as regards security. mêmes conditions de sécurité. | | Le fait que vous puissiez accéder à | The fact that you are presently cet en-tête signifie que vous avez | reading this means that you have pris connaissance de la licence | had knowledge of the CeCILL license CeCILL, et que vous en avez accepté | and that you accept its terms. les termes. | 42 set -e # stop on error # setp variable-name1 variable-name2 setp() { eval "$1=\${$2}" } # setv var-name value setv() { eval "$1=\$2" } warn() { echo "$@" >&2 } fatal() { warn "$@" exit kill $$ } # ouinon [-default oui|non] question # return code : # 0 oui # 1 non #exemple # ouinon -default non 'aimez vous le saucisson ?' && 'echo vous êtes gourmand' ouinon() { local def= local rep if test '-default' = "$1"; then case "$2" in ([yYoO]|oui|Oui|oUi|ouI|OUi|OuI|oUI|OUI|yes|YES|Yes|YEs|YeS|yES|yEs|yeS) def=0 ;; ([nN]|non|Non|nOn|noN|NOn|NoN|nON|NON|no|No|nO|NO) def=1 ;; esac shift shift 2>/dev/null || : fi while : ; do read -p "$1 (o/n) : " rep case "$rep" in ([yYoO]|oui|Oui|oUi|ouI|OUi|OuI|oUI|OUI|yes|YES|Yes|YEs|YeS|yES|yEs|yeS) return 0 ;; ([nN]|non|Non|nOn|noN|NOn|NoN|nON|NON|no|No|nO|NO) return 1 ;; esac done } # question varname "question text" question() { local __vname=$1 __rep __value setp __value "$__vname" shift printf '%s ' "$@" printf "(%s) " "$__value" read __rep test "$__rep" || __rep=$__value setv "$__vname" "$__rep" } # # MAIN Main main # missing= for cmd in diff tar sed unzip less tee find split xargs sed awk; do test "$(type -p $cmd)" || missing="$missing${missing+ }$cmd" done test "$missing" && fatal "Les commandes suivantes manquent : $missing" # approuver la licence { echo echo echo " +-----------------------------------------------------------+" echo " | |" echo " | Attention, ce logiciel est potentiellement dangereux |" echo " | |" echo " | Veuillez prendre connaissance de la licence d'utilisation |" echo " | |" echo " +-----------------------------------------------------------+" echo echo sed -ne '/^Autho/,/^42/p' "$0" | sed -e '/^42$/d' } | less if ! ouinon -default non "Accepetez vous les risques et la licence ?" then fatal "Ok, fin du programme" fi # geodir=/var/lib/tomcat8/webapps/geonetwork while : ; do question geodir "Quel est le dossier de geonetwork ? " case "$geodir" in (/*) geodir=${geodir%/} test "$geodir" -a -r "$geodir.war" && { test -d "$geodir" || { warn "Hum \"$geodir\" n'est pas un dossier..." continue } break } warn "Impossible de lire \"$geodir.war\" le dossier est-il vraiment le bon ?" continue ;; (exit) exit 0 ;; (*) warn "Pas un dossier absolu" ;; esac done newwar= while : ; do question newwar Ou se trouve votre nouveau war '?' case "$geodir" in (exit) exit 0 ;; (*) test exit = "$newwar" && { echo "bye bye" exit } test -r "$newwar" || { warn "Fichier illisible ou inexistant" continue } test "$geodir.war" = "$newwar" && { warn "Pas bon. $newwar devrait être le war actuel, pas le nouveau." continue } case "$newwar" in (/*) : ;; (*) newwar=$PWD/$newwar ;; esac cmp "$geodir.war" "$newwar" && { warn "$newwar et $geodir.war sont les mêmes. Mise à jour impossible." continue } break ;; esac done echo "geodir : $geodir" echo "oldwar : $geodir.war" echo "newwar : $newwar" if ouinon -default oui "On va maintenant tout modifier. Continuer ?" then : else echo "Bye bye" exit fi cd /tmp export LANG=C LANGUAGE=C LC_ALL=C # Arreter tomcat warn Arret de tomcat8 systemctl stop tomcat8 warn "inspection du war actuel" rm -rf geonetwork-old ; mkdir geonetwork-old ; cd geonetwork-old unzip -q "$geodir.war" warn recherche des fichiers modifies et des fichiers ajoutes. # faire et conserver un diff diff -Bbwur . "$geodir" | tee /tmp/diff-geonetwork >/dev/null # Conserver les fichiers avec différence tar cCf "$geodir" /tmp/fichiers_diff.tar $( awk '/^diff/ { print $3 }' /tmp/diff-geonetwork ) # extraire liste des fichiers présents dans le dossier, non présents dans le WAR et les conserver tar cCf "$geodir" /tmp/fichiers_en_plus.tar $( sed -ne '/^Only in /{s///;s,: ,/,;p}' /tmp/diff-geonetwork | sed -e "s^$geodir/" ) # Lister ces fichiers en plus (on liste le tar, il pourrait y avoir des dossiers...) tar tf /tmp/fichiers_en_plus.tar | grep -v '/$' | sort -o /tmp/liste.enplus-old warn installation du nouveau war dans "$geodir.war" # installer le nouveau war rm "$geodir.war" cp "$newwar" "$geodir.war" # dézipper le nouveau war warn deploiement du nouveau war cd "$geodir" unzip -q -o "$geodir.war" # ecrabouiller tous les fichiers. répondre "all" # lister la totalité des fichiers et dossiers présents find . -type f | sed -e 's,^\./,,' | sort -o /tmp/liste.total warn inspection du nouveau war # lister le contenu du nouveau war unzip -qql "$newwar" | awk 'ok && ! /\/ *$/ { print $NF } /META-INF/ { ok=1 }' | sed -e 's,^\./,,' | sort -o /tmp/liste.nouveau warn determination des fichiers obsoletes # Les fichiers à enlever sont donc : # total - nouveau - enplus # Prepare pour soustraction sed -e 's/^/^/' -e 's/$/$/' -e 's/\./\\./g' /tmp/liste.enplus-old >/tmp/liste.enplus.regexp sed -e 's/^/^/' -e 's/$/$/' -e 's/\./\\./g' /tmp/liste.nouveau >/tmp/liste.nouveau.regexp # La liste des trucs qu'il faut enlever est donc : #grep -v -f /tmp/liste.enplus.regexp /tmp/liste.total | # grep -v -f /tmp/liste.nouveau.regexp | # tee /tmp/liste.a-detruire >/dev/null # # Mais on risque de faire peter la mémoire car il y a trop de regexp dans les # fichiers. On va les splitter et progresser par étapes. On peut pas non plus # fabriquer un pipe immense, pour la même raison, donc, fichiers intermédiaires... # Naz... split -l 100 -a 4 /tmp/liste.enplus.regexp /tmp/liste.enplus.regexp.partial. split -l 100 -a 4 /tmp/liste.nouveau.regexp /tmp/liste.nouveau.regexp.partial. cp /tmp/liste.total /tmp/liste.total.000 set -- /tmp/liste.total.000 /tmp/liste.total.001 for i in /tmp/liste.enplus.regexp.partial.* /tmp/liste.nouveau.regexp.partial.* do echo "$2" >/tmp/liste.a.supprimer # se souvenir du fichier resultat grep -v -f "$i" "$1" >"$2" set -- $2 $1 done : echo fichier reduit est $(</tmp/liste.a.supprimer) cd "$geodir" warn suppression des fichiers obsoletes xargs -d \\n rm <$(</tmp/liste.a.supprimer) # Remettre les fichiers modifiés if ouinon -default oui "Remettre les fichiers modifiés $( tar tf /tmp/fichiers_diff.tar | head -12 | sed -e 's/^/ /' ) Et peut-etre d'autres. ils sont dans /tmp/fichiers_diff.tar " then tar xf /tmp/fichiers_diff.tar fi warn suppression du cache # Supprimer le cache rm -rf \ WEB-INF/data/data/resources/htmlcache/formatter-cache/public/* \ WEB-INF/data/data/resources/htmlcache/formatter-cache/private/* \ WEB-INF/data/data/resources/htmlcache/formatter-cache/info-store.*.db \ WEB-INF/data/wro4j-cache.trace.db WEB-INF/data/wro4j-cache.h2.db warn don des fichiers a tomcat8: chown -hR tomcat8: /var/lib/tomcat8/. echo "Fini. a vous de redemarrer le serveur tomcat8"
Résultat
Auteur
— Christophe Martin 2017/05/18 17:45:44
