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 </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 !!
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; 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 # 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"
Auteur
— Christophe Martin 2017/05/18 17:45:44