|  | Construction et installation
 | 
  
    |  | ============================
 | 
  
    |  | 
 | 
  
    |  | Construction
 | 
  
    |  | ------------
 | 
  
    |  | 
 | 
  
    |  | IoTa utilise Apache Maven pour l’automatisation de la production
 | 
  
    |  | (http://maven.apache.org).
 | 
  
    |  | 
 | 
  
    |  | Un scrit utilitaire pour la construction est fourni : make-all.sh.
 | 
  
    |  | 
 | 
  
    |  | La compilation de chaque module est réalisé à l’aide de cette commande :
 | 
  
    |  | 
 | 
  
    |  |   mvn compile
 | 
  
    |  | 
 | 
  
    |  | Maven téléchargera tous les fichiers jar nécessaires et les installera dans un
 | 
  
    |  | dépôt local (habituellement ~/.m2/repository).
 | 
  
    |  | 
 | 
  
    |  | L’installation des bibliothèques IoTa dans le dépôt local pour une utilisation
 | 
  
    |  | future (comme cela est nécessaire pour plusieurs modules IoTa) est réalisée
 | 
  
    |  | par la commande suivante :
 | 
  
    |  | 
 | 
  
    |  |   mvn install
 | 
  
    |  | 
 | 
  
    |  | Notez que cette commande compile aussi le module si nécessaire.
 | 
  
    |  | 
 | 
  
    |  | Certains modules sont fournis avec des tests unitaires et certains de ces
 | 
  
    |  | tests nécessitent que des applications soient fonctionnelles (p.ex. les tests
 | 
  
    |  | de la bibliothèque IoTa-DiscoveryWS-Client veulent accéder à un serveur
 | 
  
    |  | IoTa-DiscoveryWS). Pour sauter ces tests, utilisez cette commande pour la
 | 
  
    |  | compilation ou l’installation :
 | 
  
    |  | 
 | 
  
    |  |   mvn -DskipTests install
 | 
  
    |  | 
 | 
  
    |  | 
 | 
  
    |  | Vous pouvez installer manuellement des fichiers jar préalablement téléchargés
 | 
  
    |  | avec une commande de ce type :
 | 
  
    |  | 
 | 
  
    |  |   mvn install:install-file                 \
 | 
  
    |  |       -Dfile=sunxacml-2.0-SNAPSHOT.jar     \
 | 
  
    |  |       -DgroupId=net.sf.sunxacml            \
 | 
  
    |  |       -DartifactId=sunxacml                \
 | 
  
    |  |       -Dversion=2.0-SNAPSHOT               \
 | 
  
    |  |       -Dpackaging=jar
 | 
  
    |  | 
 | 
  
    |  | Notez que cela sera nécessaire pour la bibliothèque sunxacml puisque celle-ci
 | 
  
    |  | ne se trouve sur aucun dépôt Maven connu. Le fichier jar peut être téléchargé
 | 
  
    |  | depuis la page SourceForge du projet : http://sunxacml.sf.net.
 | 
  
    |  | 
 | 
  
    |  | Voici un lien direct : http://sourceforge.net/projects/sunxacml/files/maven/snapshots/net/sf/sunxacml/sunxacml/2.0-SNAPSHOT/sunxacml-2.0-SNAPSHOT.jar/download
 | 
  
    |  | 
 | 
  
    |  | 
 | 
  
    |  | Installation
 | 
  
    |  | ------------
 | 
  
    |  | 
 | 
  
    |  | (Toutes les valeurs entre chevrons `<nom>` sont à substituer.)
 | 
  
    |  | 
 | 
  
    |  | **Le programme IoTa-Installer peut vous aider à installer et configurer tous
 | 
  
    |  | les serveurs et bases de données.**
 | 
  
    |  | 
 | 
  
    |  | Toutes les applications et applications webs ont un fichier `log4j.properties`
 | 
  
    |  | pour configurer les journaux (fichier, format, niveau de log, etc.).
 | 
  
    |  | 
 | 
  
    |  | 
 | 
  
    |  | ### Applications
 | 
  
    |  | 
 | 
  
    |  | Récupérez et extrayez le tarball de l’application
 | 
  
    |  | `<application>-<version>-bin-with-dependency.tar.gz`.
 | 
  
    |  | 
 | 
  
    |  | Modifiez ou créez les fichiers de configuration (voir le fichier `LISEZMOI` de
 | 
  
    |  | l’application pour une liste de ces fichiers et chaque fichier pour des
 | 
  
    |  | commentaires).
 | 
  
    |  | Un fichier dans le répertoire courant remplace la version par défaut qui est
 | 
  
    |  | intégrée au fichier jar.
 | 
  
    |  | Vous pouvez extraire la version par défaut commentée de ces fichiers depuis le
 | 
  
    |  | fichier jar :
 | 
  
    |  | 
 | 
  
    |  |     jar xf <application>-<version>.jar application.properties
 | 
  
    |  | 
 | 
  
    |  | ou
 | 
  
    |  | 
 | 
  
    |  |     unzip <application>-<version>.jar application.properties
 | 
  
    |  | 
 | 
  
    |  | Utilisez le script fourni pour lancer l’application.
 | 
  
    |  | 
 | 
  
    |  | 
 | 
  
    |  | ### Conteneur de servlets et SSL/TLS
 | 
  
    |  | 
 | 
  
    |  | Un conteneur de servlets doit être installé.
 | 
  
    |  | 
 | 
  
    |  | Pour le moment, le IoTa-Installer ne sait gérer qu’Apache Tomcat (versions 6
 | 
  
    |  | ou 7). Le IoTa-Installer peut vous aider à en installer un et à le configurer.
 | 
  
    |  | 
 | 
  
    |  | Pour utiliser SSL/TLS comme moyen d’authentification mutuelle entre les
 | 
  
    |  | applications web de IoTa et leurs clients, un `connector` SSL/TLS doit être
 | 
  
    |  | configuré.
 | 
  
    |  | 
 | 
  
    |  | Pour Apache Tomcat 7, si vous n’utilisez pas le IoTa-Installer, vous devez
 | 
  
    |  | ajouter un élément `connector` similaire à l’exemple suivant dans le fichier
 | 
  
    |  | `${CATALINA_HOME}/conf/server.xml` :
 | 
  
    |  | 
 | 
  
    |  |     <Connector protocol="HTTP/1.1"
 | 
  
    |  |                port="8443"
 | 
  
    |  |                maxThreads="200"
 | 
  
    |  |                scheme="https"
 | 
  
    |  |                secure="true"
 | 
  
    |  |                SSLEnabled="true"
 | 
  
    |  |                keystoreFile="${catalina.home}/conf/ssl/keystore.jks"
 | 
  
    |  |                keystorePass="changeit"
 | 
  
    |  |                keyAlias="si_plus_d’une_clef_dans_le_keystore"
 | 
  
    |  |                keyPass="changeit"
 | 
  
    |  |                truststoreFile="${catalina.home}/conf/ssl/truststore.jks"
 | 
  
    |  |                truststorePass="changeit"
 | 
  
    |  |                crlFile="${catalina.home}/conf/ssl/revocations_list.pem"
 | 
  
    |  |                clientAuth="true"
 | 
  
    |  |                sslProtocol="TLS"/>
 | 
  
    |  | 
 | 
  
    |  | Ou, si la bibliothèque Apache Portable Runtime (APR) est installée sur et
 | 
  
    |  | utilisée par le système cible :
 | 
  
    |  | 
 | 
  
    |  |     <Connector protocol="HTTP/1.1"
 | 
  
    |  |                port="8443"
 | 
  
    |  |                maxThreads="200"
 | 
  
    |  |                scheme="https"
 | 
  
    |  |                secure="true"
 | 
  
    |  |                SSLEnabled="true"
 | 
  
    |  |                SSLCertificateFile="${catalina.home}/conf/ssl/server.crt"
 | 
  
    |  |                SSLCertificateKeyFile="${catalina.home}/conf/ssl/server.pem"
 | 
  
    |  |                SSLCACertificatePath="${catalina.home}/conf/ssl/clients/"
 | 
  
    |  |                SSLCARevocationPath="${catalina.home}/conf/ssl/revocations/"
 | 
  
    |  |                SSLVerifyClient="require"
 | 
  
    |  |                SSLProtocol="TLSv1"/>
 | 
  
    |  | 
 | 
  
    |  | Ajouter les certificats des clients à la liste des certificats de confiance
 | 
  
    |  | (truststore) de Tomcat, avec une commande du type:
 | 
  
    |  | 
 | 
  
    |  |     keytool -importcert -storetype "jks" -keystore "truststore.jks" -alias "key"  -file "client.cert"
 | 
  
    |  | 
 | 
  
    |  | Les applications OMeGa, ETa et EpcisPHi, pour gérer les identités en TLS, requièrent d'ajouter
 | 
  
    |  | au fichier `$CATALINA_HOME/conf/tomcat-users.xml` des rôles:
 | 
  
    |  | 
 | 
  
    |  |   * pour ETa: <role rolename="eta_user"/>
 | 
  
    |  |   * pour OMeGa: <role rolename="omega_user"/>
 | 
  
    |  |   * pour EpcisPHi: <role rolename="ephi_user"/>
 | 
  
    |  | 
 | 
  
    |  | Les noms peuvent être différents selon la configuration des applications dans
 | 
  
    |  | `<webapp-dir>/WEB-INF/web.xml`.
 | 
  
    |  | 
 | 
  
    |  | Chaque utilisateur souhaitant interroger les services d'ETa, d'OMeGa ou
 | 
  
    |  | l'interface web d'EpcisPHi doit être identifié dans
 | 
  
    |  | `$CATALINA_HOME/conf/tomcat-users.xml` et un ou plusieurs rôles doivent
 | 
  
    |  | lui être attribués.
 | 
  
    |  | De même, chaque application utilisant ces services doit être connue.
 | 
  
    |  | L'utilisateur (ou application) est reconnu par le Distinguished Name (DN)
 | 
  
    |  | du certificat utilisé pour se connecter au service. Les rôles de l'utilisateur
 | 
  
    |  | (ETa et/ou OMeGa et/ou EpcisPHi) sont déterminés par l'attribut "roles" et
 | 
  
    |  | correspondent aux "rolename" ci-dessus.
 | 
  
    |  | 
 | 
  
    |  | Pour que l'utilisateur dont le DN du certificat est "CN=toto" puissent
 | 
  
    |  | utiliser les services d'ETA, d'OMeGa et d'EpcisPHi ajoutez au fichier
 | 
  
    |  | `$CATALINA_HOME/conf/tomcat-users.xml`:
 | 
  
    |  | <user username="CN=toto" password="" roles="eta_user,omega_user,ephi_user"/>
 | 
  
    |  | 
 | 
  
    |  | Pour se connecter à l'interface web d'Epcis-PHi en tant que "superadmin",
 | 
  
    |  | qui gère les comptes utilisateurs, il est nécessaire d'utiliser un certificat
 | 
  
    |  | (généré via IoTa-Installer ou keytool) dont le DN (par défaut "UID=superadmin")
 | 
  
    |  | correspond à celui qui identifie "superadmin" dans l'annuaire LDAP.
 | 
  
    |  | Cet utilisateur doit être ajouté au fichier précédent:
 | 
  
    |  | <user username="UID=superadmin" password="" roles="ephi_user"/>
 | 
  
    |  | 
 | 
  
    |  | 
 | 
  
    |  | ### Applications webs
 | 
  
    |  | 
 | 
  
    |  | Récupérez le fichier war de l’application web `<application>-<version>.war`.
 | 
  
    |  | 
 | 
  
    |  | Déployez-le dans votre conteneur de servlets (voir la documentation du
 | 
  
    |  | conteneur pour plus d’information). Pour Apache Tomcat, cela peut être fait de
 | 
  
    |  | plusieurs manières :
 | 
  
    |  | 
 | 
  
    |  |   1. déjarez manuellement le fichier war dans  `$CATALINA_HOME/webapps`
 | 
  
    |  |   2. copiez le fichier war dans `$CATALINA_HOME/webapps` et laissez Tomcat le
 | 
  
    |  |       déployer (soit à son propchain redémarrage, soit à chaud si son option
 | 
  
    |  |       autodeploy est active)
 | 
  
    |  |   3. utilisez l’application web de gestion (http://localhost:8080/manager)
 | 
  
    |  |   4. utilisez les outils de déploiement deploy-tools
 | 
  
    |  |   5. utilisez le greffon Tomcat de Maven
 | 
  
    |  | 
 | 
  
    |  | Éditez les fichiers de configuration dans `<webapp-dir>/WEB-INF/classes/`
 | 
  
    |  | (voir le `LISEZMOI` de l’application web pour une liste de ces fichiers et
 | 
  
    |  | chaque fichier pour les commentaires).
 | 
  
    |  | 
 | 
  
    |  | Rechargez l’application web ou relancez le conteneur de servlet.
 | 
  
    |  | 
 | 
  
    |  | 
 | 
  
    |  | ### Applications Web avec bases de données
 | 
  
    |  | 
 | 
  
    |  | 1. La base de données
 | 
  
    |  | 
 | 
  
    |  |     Créez la base de données pour l’application :
 | 
  
    |  | 
 | 
  
    |  |         CREATE DATABASE <app_db>;
 | 
  
    |  | 
 | 
  
    |  |     Créez un utilisateur spécifique et accordez-lui les droits d’accès à la
 | 
  
    |  |     base :
 | 
  
    |  | 
 | 
  
    |  |         GRANT SELECT, INSERT, UPDATE, DELETE ON <app_db>.*
 | 
  
    |  |         TO <app_db_user>@localhost IDENTIFIED BY <app_db_password>;
 | 
  
    |  | 
 | 
  
    |  |     Créez les tables :
 | 
  
    |  | 
 | 
  
    |  |         use <app_db>;
 | 
  
    |  |         source <app>_schema.sql;
 | 
  
    |  | 
 | 
  
    |  |     Le fichier `<app>_schema.sql` de chaque application se trouve dans
 | 
  
    |  |     `IoTa-Installer/resources` et dans `<app>/src/main/resources/sql`.
 | 
  
    |  | 
 | 
  
    |  | 2. Installez l’application web comme expliqué plus haut.
 | 
  
    |  |     À ce point, l’application web n’arrivera probablement pas à démarrer
 | 
  
    |  |     correctement.
 | 
  
    |  | 
 | 
  
    |  | 3. Le fichier context
 | 
  
    |  | 
 | 
  
    |  |     Modifiez le fichier `$CATALINA_HOME/webapps/<webapp>/META-INF/context.xml`
 | 
  
    |  |     pour qu’il corresponde aux valeurs pour votre base de données (nom, login
 | 
  
    |  |     et mot de passe).
 | 
  
    |  | 
 | 
  
    |  |     Parfois, il est nécessaire d’avoir une copie de ce fichier en
 | 
  
    |  |     `$CATALINA_HOME/conf/localhost/<webapp>.xml`.
 | 
  
    |  | 
 | 
  
    |  |     Rechargez l’application web ou relancez le conteneur de servlet.
 | 
  
    |  | 
 | 
  
    |  | N’oubliez pas d’installer le fichier jar du connecteur JDBC. (Pour Apache
 | 
  
    |  | Tomcat et MySQL, copiez `mysql-connector-java.jar` dans `$CATALINA_HOME/lib`.)
 | 
  
    |  | 
 | 
  
    |  | 
 | 
  
    |  | ### ONS
 | 
  
    |  | 
 | 
  
    |  | Certaines applications on besoin d’un service de nommage d’objet (ONS, Object
 | 
  
    |  | Naming Service). Des enregistrements NAPTR sont utilisés pour trouver l’URL du
 | 
  
    |  | service de découverte (Discovery Service) pour un code EPC donnée.
 | 
  
    |  | 
 | 
  
    |  | Voici un fichier de zone typique pour le produit
 | 
  
    |  | `urn:epc:id:sgtin:1234567.89012` :
 | 
  
    |  | 
 | 
  
    |  |     ;;
 | 
  
    |  |     $TTL 1d
 | 
  
    |  |     
 | 
  
    |  |     ;; la zone, l’Id du fabricant
 | 
  
    |  |     $ORIGIN 7.6.5.4.3.2.1.sgtin.id.ons-peer.com.
 | 
  
    |  |     
 | 
  
    |  |     @ IN SOA localhost info.example.com ( ; info@example.com
 | 
  
    |  |                             2012010101 ; numéro de version du fichier
 | 
  
    |  |                             3h         ; rafraîchissement
 | 
  
    |  |                             1h         ; réessai
 | 
  
    |  |                             1d         ; expiration
 | 
  
    |  |                             1          ; TTL cache négatif
 | 
  
    |  |                             )
 | 
  
    |  |     
 | 
  
    |  |     ;; le nom de ce serveur
 | 
  
    |  |       IN NS ons.example.com.
 | 
  
    |  |     
 | 
  
    |  |     ; NAPTR pour les produits
 | 
  
    |  |     ; produit exemple
 | 
  
    |  |     ;                 order pref flags service    regex
 | 
  
    |  |     2.1.0.9.8  IN NAPTR 0     0    "u"   "epc+html" "!^.*$!http://www.example.com/!" .
 | 
  
    |  |                IN NAPTR 1     0    "u"   "epc+epcis"   "!^.*$!http://epcis.example.com/epcis/!" .
 | 
  
    |  |                IN NAPTR 2     0    "u"   "epc+ided_epcis"   "!^.*$!http://epcis.example.com/eta/!" .
 | 
  
    |  |                IN NAPTR 3     0    "u"   "epc+ds"   "!^.*$!http://ds.example.com/ds/services/ESDS_Service!" .
 | 
  
    |  |                IN NAPTR 4     0    "u"   "epc+ds"   "!^.*$!http://ds.example.com/dseta/ds/!" .
 | 
  
    |  |                IN NAPTR 5     0    "u"   "epc+ided_ds"   "!^.*$!http://ds.example.com/dseta/ided_ds/!" .
 | 
  
    |  |     ; en premier, la page web HTML pour des informations sur le produit
 | 
  
    |  |     ; ensuite, le web service EPCIS-repository associé à cet EPC
 | 
  
    |  |     ; ensuite, le web service EPCIS-repository identifié (ETa) associé à cet EPC
 | 
  
    |  |     ; ensuite, le web service Discovery (Wings) associé à cet EPC
 | 
  
    |  |     ; ensuite, le web service Discovery associé à cet EPC
 | 
  
    |  |     ; finallement, le web service Discovery identifié associé à cet EPC
 | 
  
    |  |     ; l’ordre est libre
 | 
  
    |  | 
 | 
  
    |  | 
 | 
  
    |  | Sur les systèmes utilisant une distribution Debian ou dérivée, il suffit
 | 
  
    |  | d’installer le paquet `bind9`, de créer un ou plusieurs fichiers de zone sur
 | 
  
    |  | le modèle précédent et d’activer ces zones, c’est-à-dire d’ajouter ce genre de
 | 
  
    |  | clause dans `named.conf.local` :
 | 
  
    |  | 
 | 
  
    |  |     zone "7.6.5.4.3.2.1.sgtin.id.ons-peer.com" {
 | 
  
    |  |          type master;
 | 
  
    |  |          file "/etc/bind/db.ons.peer.com";
 | 
  
    |  |     };
 | 
  
    |  | 
 | 
  
    |  | 
 | 
  
    |  | Rappelons que pour éviter d’avoir un serveur relais récursif, il faut ajouter
 | 
  
    |  | ces options (dans la clause `options` de `named.conf.options`) :
 | 
  
    |  | 
 | 
  
    |  |     allow-transfer { none; };
 | 
  
    |  |     allow-recursion { none; };
 | 
  
    |  |     recursion no;
 | 
  
    |  | 
 | 
  
    |  | 
 | 
  
    |  | ### LDAP
 | 
  
    |  | 
 | 
  
    |  | Certaines applications (YPSilon) ont besoin d’un serveur LDAP.
 | 
  
    |  | 
 | 
  
    |  | À partir d’un serveur LDAP fonctionnel, le script `YPSilon/ldap.sh` ou le module
 | 
  
    |  | LDAP de l’installateur permet d’ajouter un schéma, un groupe et les deux
 | 
  
    |  | utilisateurs superadmin et anonymous.
 | 
  
    |  | 
 | 
  
    |  | Sur les distributions Debian et dérivées, il suffit d’installer les paquets
 | 
  
    |  | `slapd` et `ldap-utils`. Il est nécessaire de lancer `dpkg-reconfigure slapd`
 | 
  
    |  | pour compléter la configuration.
 | 
  
    |  | 
 | 
  
    |  | Pour un ajouter un index sur des attributs (comme le DN du certificat
 | 
  
    |  | utilisateur utilisé quand ce DN n'est pas compatible avec l'arbre LDAP,
 | 
  
    |  | "aliasdn" par défaut), vous pouvez utiliser la commande ldapmodify avec les
 | 
  
    |  | propriétés suivantes:
 | 
  
    |  | 
 | 
  
    |  |     dn: olcDatabase={1}hdb,cn=config
 | 
  
    |  |     changetype: modify
 | 
  
    |  |     add: olcDbIndex
 | 
  
    |  |     olcDbIndex: aliasdn eq
 | 
  
    |  | 
 | 
  
    |  | où olcDatabase={1}hdb correspond à la base utilisée.
 | 
  
    |  | 
 | 
  
    |  | 
 | 
  
    |  | ### ActiveMQ
 | 
  
    |  | 
 | 
  
    |  | Certaines applications (ETa-Callback*) ont besoin d’un courtir JMS ActiveMQ.
 | 
  
    |  | 
 | 
  
    |  | Sur les distributions Debian et dérivées, il suffit d’installer le paquet
 | 
  
    |  | `activemq`.
 | 
  
    |  | 
 | 
  
    |  | 
 | 
  
    |  | ### Problèmes de mémoire
 | 
  
    |  | 
 | 
  
    |  | Du fait d’un usage intensif de l’introspection (p.ex. par Hibernate et CXF),
 | 
  
    |  | et si vous voulez installer toutes les applications web sur le même serveur,
 | 
  
    |  | la mémoire « PermGen » de la JVM doit être augmentée. Pour Apache Tomcat, cela
 | 
  
    |  | peut être fait via la variable d’environnement JAVA_OPTS. Dans les shells
 | 
  
    |  | POSIX, il suffit d’une ligne de commande similaire à celle-ci:
 | 
  
    |  | 
 | 
  
    |  |     export JAVA_OPTS='-Xms2048m -Xmx4096m -XX:MaxPermSize=512m'
 | 
  
    |  | 
 | 
  
    |  | Cette variable d’environnement doit être positionnée avant le lancement de
 | 
  
    |  | Apache Tomcat, donc avant le lancement de l’installateur IoTa (celui-ci
 | 
  
    |  | lançant Apache Tomcat)
 | 
  
    |  | 
 | 
  
    |  | Ceci n’est nécessaire que si vous installez toutes (ou presque toutes) les
 | 
  
    |  | applications web dans un même conteneur de servlet.
 |