Installation d'openjre 8 et de geonetwork 3.2.1

Prise de notre rapide pour debian jessie en mai 2017. Sur une machine toute neuve sans rien d'autre installé que les utilitaires de base.

toutes les commandes sont à passer sous le compte root. root est réputé avoir bash comme shell.

toutes les commandes montrées sont faites pour être copiées/collées d'un seul coup.

Installation openjdk-8-jre-headless

Geonetwork 3.2.1 nécessite java 8, mais à cette date, juin 2017, java 8 n'est disponible que dans les backports de la prochaine version vers la version stable (jessie 8.8). On a donc un petit peu de travail pour installer java8.

Installation préalable de openjdk-7. pour des histoires de dépendance de paquet. Puis il faut installer manuellement ca-certificates-java_20170531_all.deb, sinon, on ne pourra pas installer openjdk-8, à cause de conflits entre ca-certificates-java et openjdk-8. Solution : aller chercher manuellement le paquet sur packages.debian.org dans unstable puis installer le paquet manuellement. Le nom exact du paquet peut varier, par exemple en fonction des révisions du paquet, d'où les lignes barbares exactname=$(…) ci dessous.

apt install openjdk-7-jre-headless
exactname=$(
  wget -O - http://ftp.fr.debian.org/debian/pool/main/c/ca-certificates-java/ |
  sed -ne 's/.*href="\(ca-certificates-java_20170531[^"]*.deb\).*/\1/p'
)
wget http://ftp.fr.debian.org/debian/pool/main/c/ca-certificates-java/$exactname
dpkg -i $exactname

Installer openjdk-8-jre-headless. cf http://stackoverflow.com/questions/35130798/install-java-8-in-debian-jessie

echo deb http://http.debian.net/debian jessie-backports main >> /etc/apt/sources.list
apt update && apt install openjdk-8-jre-headless
apt purge openjdk-7-jre-headless # plus besoin maintenant.
update-alternatives --config java # normalement inutile, il ne reste que java 8

installation tomcat8

apt-get -y install \
    tomcat8 libpostgresql-jdbc-java \
    libpostgis-java postgresql-client

et puis donner de la mémoire à tomcat, plein de mémoire à la JVM pour geonetwork. Au strict minimum 2Go. ici, on donne 2048 de RAM, soit 2 Go à la JVM. Mais en prod, j'ai du mettre plus, sinon, boom la JVM manque de mémoire et s'arrête.

sleep 2
systemctl stop tomcat8
sed -i -e 's/^\(JAVA_OPTS=.*\)-Xmx[^ ]*\(.*\)/\1-Xms2048m -Xmx2048m -XX:+UseConcMarkSweepGC\2/' /etc/default/tomcat8
# Ne pas redémarrer tomcat8 maintenant.

installation de geonetwork 3.2.1

  1. tomcat8 est toujours arrêté
  2. donner le dossier /var/lib/tomcat8 à tomcat8 car geonetwork va tenter de créer une base de données H2 juste dans ce dossier. Par défaut ce dossier appartient à root et seuls certains sous dossiers appartiennent à tomcat8.
    find /var/lib/tomcat8 -ls >/var/lib/tomcat8/files-and-users
    chown -hR tomcat8: /var/lib/tomcat8
  3. Aller chercher le war chez geonetwork.le poser pour l'instant dans /var/lib/tomcat8/webapps/geonetwork.war . Il peut appartenir à root si on veut ça n'a pas d'importance.
    cp /tmp/geonetwork.war /var/lib/tomcat8/webapps/geonetwork.war
  4. démarrer tomcat8, patienter
    systemctl start tomcat8
  5. attendre longtemps avant de tenter de se connecter à cette nouvelle instance.
    lancer top et attendre que java passe de 100% de CPU à pas grand chose.
    top example
    top - 19:02:18 up 41 min,  2 users,  load average: 0.73, 0.67, 0.31
    Tasks:  77 total,   1 running,  76 sleeping,   0 stopped,   0 zombie
    %Cpu(s): 94.6 us,  5.4 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
    KiB Mem:   8195964 total,  1714800 used,  6481164 free,      992 buffers
    KiB Swap:   385020 total,        0 used,   385020 free.  1260812 cached Mem
     
      PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
    13782 tomcat8   20   0 5186796 312088  17312 S 99.9  3.8   0:13.92 java
        1 root      20   0   28696   4748   3072 S  0.0  0.1   0:01.12 systemd
        2 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kthreadd
        3 root      20   0       0      0      0 S  0.0  0.0   0:00.30 ksoftirqd/0
        5 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kworker/0:0H
        6 root      20   0       0      0      0 S  0.0  0.0   0:00.27 kworker/u2:0


    Ensuite, aller voir http://votreserveur.votre-univ.fr:8080/geonetwork/
    user admin, mot de passe admin
    image du résultat attendu

remplacer la BDD H2 par une bdd postgres ou postgis

Quoi qu'on fasse geonetwork crée initialement une base de données h2. Comme l'environnement est encore vide, on va la remplacer par une base de données postgis ou postgres. Il me semble que selon une doc de geonetwork, ça n'est intéressant que si on a plusieurs dizaine de milliers de fiches. C'est pas notre cas (enfin à moi, hein), mais tout mettre dans une base de stype SQL, ça me rassure, car je sais les cloner, sauvegarder, restaurer, dupliquer, et éventuellement modifier en ligne de commande, alors que je suis moins à l'aise avec une base h2. Lorsqu'on utilise une base postgres simple, geonetwork utilise toujours un fichier pour son index spatial, avec une base postgres munie de l'extension postgis et une configuration adéquate de geonetwork, l'index spatial est également géré par le moteur de base de données.

Si vous n'avez pas de serveur postgres sous la main, vous pouvez en installer un très rapidement, en suivant les instructions à la fin de cette page.

Les fichiers mentionnés ici sont relatifs à la base du déploiement de geonetwork. Ainsi quand on parle de WEB-INF/config-node/srv.xml, si vous avez déposé le war de geonetwork dans /var/lib/tomcat8/webapps/geonetwork.war il s'agit de /var/lib/tomcat8/webapps/geonetwork/WEB-INF/config-node/srv.xml

  1. Rassembler les informations de connexion :
    • nom du serveur de base de données : monserveur.mon-univ.fr, localhost,…
    • port de connexion : 5432 dans 99,99% des cas
    • nom de la base de données
    • utilisateur de connexion à la base
    • mot de passe de connexion
  2. Arrêter tomcat8
    systemctl stop tomcat8
  3. Utiliser au choix, postgres seul ou postgres + postgis. Il faut commenter/décommenter quelques lignes dans le fichier WEB-INF/config-node/srv.xml.
    • Pour le pilote postgres seul, décommentez la ligne <import resource=“../config-db/postgres.xml”/> et commentez les autres. Le résultat est à peu près ça
      WEB-INF/config-node/srv.xml
      <?xml version="1.0" encoding="UTF-8"?>
      <beans default-lazy-init="true"
          xmlns="http://www.springframework.org/schema/beans"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd" >
       
          <import resource="classpath*:/config-spring-geonetwork.xml"/>
          <import resource="../config-db/database_migration.xml"/>
       
          <bean id="nodeInfo" class="org.fao.geonet.NodeInfo">
              <property name="id" value="srv" />
              <property name="defaultNode" value="true" />
          </bean>
       
          <!-- Uncomment the database configuration you need to use -->
          <!--<import resource="../config-db/h2.xml"/>-->
          <!--<import resource="../config-db/jndi-postgres-postgis.xml"/> -->
          <!--<import resource="../config-db/oracle.xml"/>-->
          <!--<import resource="../config-db/mysql.xml"/> -->
          <!--<import resource="../config-db/db2.xml"/> -->
          <import resource="../config-db/postgres.xml"/>
          <!--<import resource="../config-db/sqlserver.xml"/> -->
          <!--<import resource="../config-db/postgres-postgis.xml"/> -->
      </beans>
    • ou, pour l'utilisation du couple postgre-postgis, la seule ligne non commentée est <import resource=“../config-db/postgres-postgis.xml”/> et le résultat sera
      WEB-INF/config-node/srv.xml
      <?xml version="1.0" encoding="UTF-8"?>
      <beans default-lazy-init="true"
          xmlns="http://www.springframework.org/schema/beans"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd" >
       
          <import resource="classpath*:/config-spring-geonetwork.xml"/>
          <import resource="../config-db/database_migration.xml"/>
       
          <bean id="nodeInfo" class="org.fao.geonet.NodeInfo">
              <property name="id" value="srv" />
              <property name="defaultNode" value="true" />
          </bean>
       
          <!-- Uncomment the database configuration you need to use -->
          <!--<import resource="../config-db/h2.xml"/>-->
          <!--<import resource="../config-db/jndi-postgres-postgis.xml"/> -->
          <!--<import resource="../config-db/oracle.xml"/>-->
          <!--<import resource="../config-db/mysql.xml"/> -->
          <!--<import resource="../config-db/db2.xml"/> -->
          <!--<import resource="../config-db/postgres.xml"/>-->
          <!--<import resource="../config-db/sqlserver.xml"/> -->
          <import resource="../config-db/postgres-postgis.xml"/>
      </beans>
  4. Configuration de l'accès à la base, postgres ou postgis. Même configuration. Il faut juste changer et ajuster les valeurs des propriétés relatives à la connexion à la base de données. Ce sont les 5 premières. Voilà à quoi pourrait ressembler ce fichier
    WEB-INF/config-db/jdbc.properties
    jdbc.username=ugeonet
    jdbc.password=jaikee9Tejopoo
    jdbc.database=geonetdb
    jdbc.host=bdds.mon-univ.fr
    jdbc.port=5432
    jdbc.basic.removeAbandoned=true
    jdbc.basic.removeAbandonedTimeout=120
    jdbc.basic.logAbandoned=true
    jdbc.basic.maxActive=33
    jdbc.basic.maxIdle=\${jdbc.basic.maxActive}
    jdbc.basic.initialSize=\${jdbc.basic.maxActive}
    jdbc.basic.maxWait=200
    jdbc.basic.testOnBorrow=true
    jdbc.basic.timeBetweenEvictionRunsMillis=10000
    jdbc.basic.minEvictableIdleTimeMillis=1800000
    jdbc.basic.testWhileIdle=true
    jdbc.basic.numTestsPerEvictionRun=3
    jdbc.basic.poolPreparedStatements=true
    jdbc.basic.maxOpenPreparedStatements=1200
    jdbc.basic.validationQuery=SELECT 1
    jdbc.basic.defaultReadOnly=false
    jdbc.basic.defaultAutoCommit=false
    EOH
  5. redémarrage du serveur tomcat8
    systemctl start tomcat8

Installer un serveur postgres si besoin

Vous n'avez pas de serveur postgres ? pas grave. Installez en un sur votre serveur super rapidement :

  1. Installation du serveur
    apt install postgresql
    apt-get -o apt::install-recommends=true install postgis
  2. devenir postgres pour les deux opérations suivantes :
    su - postgres
  3. Créer un utilisateur ugeonetdb pour postgres
    createuser --no-createdb --encrypted --login --pwprompt --no-createrole --no-superuser ugeonetdb
  4. Créer une base de données pour cet utilisateur
    createdb --owner=ugeonetdb --encoding=UTF-8 dbgeonetwork
  5. Si vous voulez installer postgis dans cette base pour que geonetwork utilise cette base de données pour son index spatial, alors
    psql dbgeonetwork <<<'CREATE EXTENSION postgis;'
    psql dbgeonetwork <<<'CREATE EXTENSION postgis_topology;'
  6. abandonner le compte postgres, retour en root
    exit
  7. Les paramètres de connexion à renseigner dans le fichier WEB-INF/config-db/jdbc.properties seront alors
    :!: insérer le mot de passe que vous venez de définir:
    jdbc.username=ugeonetdb
    jdbc.password=Mettez ici le mot de passe de la BBD que vous venez de définir.
    jdbc.database=dbgeonetwork
    jdbc.host=localhost
    jdbc.port=5432
  8. Vous pouvez alors retourner à remplacer la BDD H2 par une bdd postgres ou postgis et poursuivre.

Auteur

Christophe Martin 2017/05/18 17:04:29