3.2 Installation de poste

Le premier élément primordiale du guide du développeur est l’installation du poste de développement. Si, lors de son installation de poste, un développeur a un doute ou a besoin d’une information supplémentaire, il doit capitaliser et enrichir, à son tour, la présente page.

Cette procédure ne prend pas en compte le paramétrage d’éventuel repository personnel ou de proxy.

Cette procédure peut sembler fastidieuse. Une installation de poste via la virtualisation est en effet plus rapide à exécuter pour chaque développeur. Mais, toute mise à jour de l’environnement de développement nécessite de retravailler la VM puis de la redistribuer à chacun. De plus, la virtualisation est maintenant limitée chez certaines ESN (pour des raisons de sécurité). Enfin, l’installation manuelle a l’avantage de faire comprendre à chacun le fonctionnement de chaque outil. Cela fait donc grandir chacun.

3.2.1 - Clone du dépôt

Ce dépôt contient des sub-modules GIT pour le thème GoHugo utilisé dans la documentation. La commande (documentation) pour faire un clone du dépôt est donc

git clone --recurse-submodules https://xxxxxxxxxxx

Si le paramètre –recurse-submodules n’a pas été utilisé au moment du clone, il est toujours possible de récupérer les sub-modules avec les commandes :

git submodule init 
git submodule update

Un hook doit être installé pour mettre à jour la date des documents MD au moment de chaque commit. Pour cela, il faut copier le fichier aInstaller_pre-commit dans le répertoire .git/hooks en le renommant pre-commit. A chaque commit comprenant un fichier MD, un message apparaît :

Modification des dates dans les pages MD
  pour 1-conception/content/X.xxx/X.Xxxxxxx.md

Pour plus de détails, se référer au §3.31


3.2.2 - Java

Le projet utilise Java-23.0.2. Pour le télécharger, le binaire est sur le site java.net.

Une fois téléchargé, il suffit

  • d’extraire le contenu du ZIP dans un répertoire précis (comme D:\outils)
  • de définir la variable d’environnement JAVA_HOME (globalement sur la machine ou localement dans la console)
  • d’ajouter %JAVA_HOME%\bin dans la variable d’environnement PATH

3.2.3 - Maven

Le projet utilise Maven-3.9.9.

Pour installer Maven :

  • télécharger le binaire depuis le site officiel
  • d’extraire le contenu du ZIP dans un répertoire précis (comme D:\outils)
  • de définir la variable d’environnement MAVEN_HOME (globalement sur la machine ou localement dans la console)
  • de définir la variable d’environnement MAVEN_OPTS avec la valeur –add-opens java.base/java.lang=ALL-UNNAMED (demandé depuis la version maven-3.9.7)
  • d’ajouter %MAVEN_HOME%\bin dans la variable d’environnement PATH
  • paramétrer votre Maven :
    • créer le répertoire du repository local (comme D:\outils\repositoryLocal)
    • le renseigner dans le fichier %MAVEN_HOME%\conf\settings.xml
  • si des mots de passe sont à stocker dans la configuration Maven, suivre la procédure de chiffrement des mots de passe

Pour construire (builder) très rapidement les projets du socle sans déclencher les tests automatisés, il est possible d’utiliser la commande mvn clean install -DskipTests -T 1C. Ce paramètre déclenche la parallélisation en utilisant tous les coeurs du processeur.

Si le poste de développement dispose de plusieurs version de Java. Il peut être utile de créer des raccourcis d’appel à Maven pour chaque version depuis la commande Git4Windows. Pour cela :

  • éditer le fichier C:\Program Files\Git\etc\profile.d\aliases.sh
  • ajouter, autant que nécessaire, une ligne sur le modèle alias mvn19="JAVA_HOME=/d/xxxxxx/jdk-19/ && mvn" en remplaçant le chemin vers le JDK par le bon ainsi que la version dans l’alias
  • redémarrer votre (vos) ligne(s) de commande Git4Windows et/ou CMD et/ou PowerShell pour que la modification soit prise en compte.

3.2.4 - Node & co

Le projet utilise Node-23.10.0. La compilation de tout le projet peut se faire via Maven car ce dernier télécharge un Node et un NPM pour construire le livrable des projets FRONT.

Mais, pour développer, installer Node et NPM sur son poste est nécessaire.

3.2.4.1 - Installer Node

Pour installer Node et NPM, il suffit de :

  • télécharger le ZIP depuis le site officiel
  • d’extraire le contenu du ZIP dans un répertoire précis (comme D:\outils)
  • de définir la variable d’environnement NODE_HOME (globalement sur la machine ou localement dans la console)
  • d’ajouter %NODE_HOME% dans la variable d’environnement PATH

3.2.5 - Les IDE

L’idée n’est pas de multiplier les outils mais d’utiliser le bon outil pour le bon usage.

Les informations nécessaires à l’installation des IDEs sont regroupées ici mais ceci ne préjuge pas de l’ordre d’installation des outils (et tous ne sont pas forcément nécessaires).


3.2.5.1 - IDE - Notepad++

Notepad++ est utilisé pour l’édition de la documentation.

Pour l’installer :

  • Télécharger le binaire depuis le site officiel.
  • Installer le.

Pour installer le plugin DSpellCheck dans Notepad++ :

  • cliquer sur le menu Modules d’extension > Gestionnaire des modules d’extension
  • filter sur le nom DSpellCheck
  • installer le plugin
  • une fois le plugin installé, cliquer sur le menu Modules d’extension > DSpellCheck > Change current language > Download more language
  • installer le pack français

3.2.5.2 - IDE - Eclipse

La version Eclipse-2025-03 est utilisée pour la partie Java.

Pour l’installer :

  • télécharger la dernière version for Java Developpers depuis le site officiel.
  • extraire l’archive dans le répertoire de votre choix (comme D:\outils par exemple)
  • créer un répertoire workspacepsl dans le répertoire de votre choix (comme D:\workspaces par exemple)
  • télécharger l’archive disponible ici (prévue pour eclipse-java-XXXX-XX-R-win32-x86_64)
  • en extraire le contenu dans le répertoire workspacepsl précédemment créé (un répertoire .metadata doit donc être présent dans le répertoire workspacepsl)
    • Ce workspace prépackagé prévoit la désactivation des fonctionnalités GIT d’Eclipse (qui traite projet par projet et non globalement par dépôt).
    • Il référence un JDK installé dans le répertoire D:\outils\jdk-XXXX (à changer au besoin)
    • Il prévoit tout un ensemble d’actions automatiques à la sauvegarde d’une classe Java (alias Java save actions).
    • Il embarque un formattage du code Java (pour que tous les membres de l’équipe partage le même formattage).
  • créer un raccourci Windows pointant sur D:\outils\eclipse-java-XXXX-XX-R-win32-x86_64\eclipse.exe -showlocation -data D:\workspaces\workspacepsl -vm %JAVA_HOME%\bin
    • Ce raccourci pointe sur l’Eclipse installé.
    • Ce raccourci pointe sur le workspace créé (à changer sur vos postes).
    • Ce raccourci force l’utilisation du chemin du workspace dans le nom de la fenêtre (pratique quand plusieurs Eclipse sont démarrés en même temps)
    • Ce raccourci force l’usage d’un DJK précis (à changer sur vos postes).
  • au démarrage d’Eclipse, si la version de Java n’est pas supportée (Eclipse refuse de démarrer les tests automatisés et affiche sa version embarquée de JRE plutôt que la version de JDK paramétrée dans le workspace), il est possible de télécharger le plugin Java XX Support for Eclipse depuis le Marketplace
  • après le démarrage, il est nécessaire d’installer le plugin SonarLint (profile par défaut)

3.2.5.3 - IDE - VSCode

VScode est utilisé pour la partie Angular. Le projet utilise la dernière version disponible.

Pour l’installer VSCode :

  • télécharger la dernière version ZIP pour Windows de VSCode depuis le site officiel (car plus simple à mettre à jour).
  • extraire l’archive dans un répertoire contenant la version de VSCode (toujours pour simplifier la mise à jour)
  • créer un raccourci vers l’exécutable Code.exe et ajouter, à la fin du chemin, le chemin absolu vers le répertoire front (cela évite d’avoir à sélectionner le répertoire de travail)

_La couverture de code ne fonctionne plus depuis le passage en Angular-17 et le passage de webpack à ESbuild/Vite (cf. https://v17.angular.io/guide/esbuild) _

Pour consulter les classes TS présentes dans les dépendances, il faut ajouter l’extension ZipFS dans VSCode.

Pour manipuler le projet ias, il faut ajouter l’extension WSL (l’extension ansible nécessite l’exécutable installé sur Windows mais il ne fonctionne pas).


3.2.5.4 - IDE - Compass

Compass est un IDE permettant de se connecter à une base de donnée MongoDB. Le projet utilise la dernière version disponible.

Pour l’installer :

  • télécharger la dernière version disponible depuis le site officiel) (pour Windows et au format ZIP).
  • extraire l’archive téléchargée dans un répertoire (comme D:\outils)
  • démarrer le programme
  • saisir la chaine de connexion mongodb://localhost:27017/?readPreference=primary&appname=MongoDB%20Compass&directConnection=true&ssl=false et se connecter

3.2.5.5 - IDE - UseBruno

Historiquement (avant 2024), Postman était l’IDE de prédilection pour les requêtes HTTP. Mais, en 2023, la modification de leur modèle économique et le stockage du travail de chacun sur Internet (et non sur le poste local), a poussé ses utilisateurs vers d’autres solutions. Pour rappel, d’un point de vue SECURITE, il n’est pas envisageable de stocker des requêtes, des identifiants ou des certificats sur Internet.

L’IDE à utiliser sur le projet est donc, maintenant, UseBruno.

Le projet utilise la dernière version disponible sur la page de téléchargement.

Une fois téléchargé et installé, il est nécessaire

  • d’ouvrir la collection présente dans le répertoire 1-conception/static/installationdeposte/bruno/NewPSL
  • de paramétrer l’IDE via le menu Collection > Préférences
    • de paramétrer le proxy en fonction des besoins
    • dans le cas d’une mise à jour ou d’une réinstallation, il faut déclarer le certificat racine. Pour cela, se référer à l’étape ajouter le certificat racine dans UseBruno du chapitre Créer le certificat signé localement

L’usage de la collecion est décrit dans le chapitre 3.24.3. La création des certificats et clefs est décrites au chapitre $3.2.8 (plus loin dans cette page).


3.2.5.6 - IDE - Règle sur l’utilisation des IDEs

La configuration des IDE doit être commune à tous les développeurs de l’équipe pour permettre de maintenir une homogénéité du code et donc une bonne traçabilité des modifications.

Il est tout à fait autorisé de modifier l’apparence de son IDE (skin, thème, raccourcis, …) mais le paramétrage influant sur le code (formatage, import, …) ne doit pas être modifié.


3.2.5.7 - OUTILS - SMTP4DEV (pas nécessaire dans un premier temps)

Pour recevoir les emails envoyés par le système, il suffit d’installer smtp4dev en laissant le paramétrage par défaut et en le démarrant avec le programme Rnwood.Smtp4dev.exe.

Une fois démarré, l’interface graphique du serveur SMTP est disponible ici.

La documentation de l’outil est ici.


3.2.5.8 - OUTILS - SpringBootCli (pas nécessaire dans un premier temps)

SpringBootCli est un outil en ligne de commande lié à SpringBoot. Il est principalement utilisé pour chiffrer/déchiffrer des clefs de configuration.

Pour l’installer, il faut (inspiré de la documentation officielle) :

  • télécharger la dernière version de spring-boot-cli-*-bin.zip depuis le repository officiel
  • extraire l’archive dans le répertoire des outils
  • créer une variable d’environnement Windows nommée SPRING_HOME contenant le chemin vers le répertoire créé
  • ajouter SPRING_HOME/bin dans la variable d’environnement PATH

3.2.6 - Compiler les sources

Pour builder le projet une première fois, il suffit de lancer la commande mvn clean install depuis une ligne de commande ouverte à la racine du dépôt (puis de patienter).

Pour compiler les sources individuellement :

  • documentation : depuis le répertoire 1-conception, exécuter le raccourci startServer.cmd (ou startServer.sh)
  • front, depuis le répertoire _D:\xxx\2-code\front_, exécuter la commande npm ci

Quand on installe son poste, il ne faut jamais utiliser la commande npm install ou yarn install. npm ci ou yarn install --frozen-lockfile installe les dépendances exactes du package-lock.json ou du yarn.lock quand install recherche des dépendances compatibles.


3.2.7 - Ré-activer la vérification SSL

Il se peut que, sur certains postes de développement professionnels, un certificat racine propre à la société soit paramétré. Ceci se vérifie dans Chrome :

  • ouvrir Chrome en étant connecté au réseau de l’entreprise
  • afficher un site HTTPs dans un onglet
  • cliquer sur le cadenas dans la barre d’adresse
  • afficher le certificat en cliquant sur les messages la connexion est sécurisée puis certificat valide
  • dans la fenêtre qui s’ouvre, vérifier la donnée intitulée Délivré par

Si le certificat Racine du service HTTPs appelé n’est pas délivré/vérifié par une autorité de certification standard, alors le certificat racine n’est pas présent dans le CACERT du JDK (qui contient déjà les principaux certificats racines du monde).

Deux solutions sont possibles :

  • désactiver les vérifications SSL (cf. clients.desactiverSSL dans les fichiers de configuration)
  • ajouter, dans le CACERT du JDK, le certificat racine de l’employeur (cf. ci-dessous)

Pour ajouter le certificat de votre entreprise, dans le trustore de Java (pour les tests automatisés) et dans le trustore utilisé par les micro-service, il faut :

  • réafficher la fenêtre comme décrit précédemment
  • dans la fenêtre ouverte, afficher l’onglet Détails
  • sélectionner le certificat racine et cliquer sur le bouton exporter pour extraire le certificat dans un fichier
  • ouvrir une ligne de commande dans le répertoire $JAVA_HOME/lib/security/
  • exécuter les commandes (avec XXXXX le libellé de votre choix)
cp "$JAVA_HOME/lib/security/cacerts" "$JAVA_HOME/lib/security/cacerts-saveXXXXX"
keytool -import -trustcacerts -file "/chemin/vers/le/certificat.cer" -alias certificatEntreprise -keystore "$JAVA_HOME/lib/security/cacerts" -storepass changeit

Pour vérifier que cette modification fonctionne (ou ne sert à rien), exécuter les tests du projet socle-commun et vérifier la bonne exécution des tests de la classe AbstractClientHttpTest.


3.2.8 - Certificats

3.2.8.1 - Créer le certificat racine et le faire accepter par Windows et Java

Pour créer un certificat signé localement (source), il faut, en premier lieu, disposer d’une autorité de certification enregistrée dans Windows et dans Java. Pour cela, il faut :

  • 0/ !! En cas de besoin seulement !! Voici comment détruire toute la partie certificats potentiellement déjà créée dans une installation précédente :
    • Fichiers :
      • Supprimer le répertoire 2-code/.certificatsLocaux
    • Certificat racine dans Windows :
      • Ouvrir Microsoft Management Console en utilisant la combinaison Windows + R et tapant mmc avant de valider
      • Cliquer sur Fichier > Ajouter/Supprimer un composant logiciel enfichable
      • Cliquer sur Certificats and Ajouter
      • Sélectionner Un compte d’ordinateur et cliquer sur Suivant
      • Sélectionner Ordinateur local et cliquer sur Terminer
      • Cliquer sur OK
      • Double-cliquer sur Certificats (ordinateur local)
      • Sélectionner Autorités de certification racines de confiance
      • Cliquer droit sur Autorités de certification racines de confiance
      • Cliquer sur Rechercher des certificats
      • Sélectionner la valeur Autorités de certification racines de confiance dans le champs Rechercher dans
      • Taper le mot Amiens dans le champ Contenu
      • Cliquer sur Rechercher maintenant
      • Cliquer droit sur l’entrée disponible
      • Cliquer sur Supprimer puis confirmer
      • Fermer la fenêtre sans enregistrer
    • Certificat racine dans Java :
      • Exécuter la commande
keytool -delete -alias caRacineDevLocal -keystore "$JAVA_HOME/lib/security/cacerts" -storepass changeit
	Warning: use -cacerts option to access cacerts keystore
  • 1/ Créer une clef et un certificat d’autorité
    • ouvrir une ligne de commande dans le répertoire racine du dépôt
mkdir -p 2-code/.certificatsLocaux/caRacine
cd 2-code/.certificatsLocaux/caRacine
openssl genrsa -des3 -out ca-clefAutoriteCertification.key -passout pass:mdpAutoriteCertification 2048
	Generating RSA private key, 2048 bit long modulus (2 primes)
	.......................+++++
	....+++++
	e is 65537 (0x010001)
openssl req -x509 -new -nodes -key ca-clefAutoriteCertification.key -sha256 -days 1825 -out ca-certificatRacine.pem -passout pass:mdpAutoriteCertification -passin pass:mdpAutoriteCertification -subj "//C=FR/ST=Amiens/L=Amiens/O=Security/OU=general/CN=guillaumetalbot.com"
	req: Skipping unknown attribute "/C"
  • 2/ Ajouter ce certificat racine dans Windows :
    • Ouvrir Microsoft Management Console en utilisant la combinaison Windows + R et tapant mmc avant de valider
    • Cliquer sur Fichier > Ajouter/Supprimer un composant logiciel enfichable
    • Cliquer sur Certificats and Ajouter
    • Sélectionner Un compte d’ordinateur et cliquer sur Suivant
    • Sélectionner Ordinateur local et cliquer sur Terminer
    • Cliquer sur OK
    • Double-cliquer sur Certificats (ordinateur local)
    • Cliquer droit sur Autorités de certification racines de confiance
    • Sélectionner Toutes les tâches > Import
    • Cliquer sur Suivant et Parcourir
    • Sélectionner le fichier ca-certificatRacine.pem
    • Cliquer sur Suivant
    • Choisir de placer les certificats dans Autorités de certification racines de confiance (valeur par défaut normalement)
    • Cliquer sur Suivant et Terminer
  • 3/ Pour vérifier le bon ajout du certificat racine
    • Retourner (ou rester) dans la partie Autorités de certification racines de confiance de Microsoft Management Console
    • Cliquer droit sur Autorités de certification racines de confiance
    • Cliquer sur Rechercher des certificats
    • Sélectionner la valeur Autorités de certification racines de confiance dans le champs Rechercher dans
    • Taper le mot Amiens dans le champ Contenu
    • Cliquer sur Rechercher maintenant
    • Vérifier qu’une entrée apparaît avec une date d’expiration à +5 ans -1 jour
    • Fermer la fenêtre Microsoft Management Console sans enregistrer
  • 3/ Déclarer cette autorité dans Java :
    • Se replacer (si besoin) dans le répertoire 2-code/.certificatsLocaux/caRacine
    • Vérifier que la variable JAVA_HOME pointe bien sur la version de Java utilisée pour le projet : echo $JAVA_HOME
    • Dupliquer le cacert par défaut de Java (pour en faire une sauvegarde)
rm -f "$JAVA_HOME/lib/security/cacerts-save"
cp "$JAVA_HOME/lib/security/cacerts" "$JAVA_HOME/lib/security/cacerts-save"
  • Importer le certificat racine en exécutant la commande suivante, depuis le répertoire 2-code.certificatsLocaux\caRacine (répondre yes à la confirmation)
keytool -import -trustcacerts -file "ca-certificatRacine.pem" -alias caRacineDevLocal -keystore "$JAVA_HOME/lib/security/cacerts" -storepass changeit
  • Vérifier la présence du certificat racine
keytool -v -list -keystore "$JAVA_HOME/lib/security/cacerts" -storepass changeit | grep "Alias name" | grep caracinedevlocal
	Warning: use -cacerts option to access cacerts keystore
	Alias name: caracinedevlocal
  • Sont donc présents, dans le répertoire 2-code/.certificatsLocaux/caRacine,
    • le certificat racine (extension PEM)
    • la clef permettant de signer un certificat (extension KEY)

3.2.8.2 - Créer le certificat signé localement (TLS/HTTPs)

Tous les micro-services du socle ne s’exposent exclusivement que sur une interface https. Le certificat TLS doit être signé avec l’autorité de certification créée précédemment. Pour cela, il faut :

  • 0/ Pour recréer les éléments de ce chapitre, rien n’est réutilisable (car le CSR n’est pas conservé). Donc il faut supprimer tous les fichiers du répertoire 2-code/.certificatsLocaux/tls s’il existe.

  • 1/ Créer un certificat propre à l’environnement de développement

mkdir -p 2-code/.certificatsLocaux/tls
cd 2-code/.certificatsLocaux/tls
openssl req -new -sha256 -nodes -out dev-certificatDeDeveloppementNonSigne.csr -newkey rsa:2048 -keyout dev-clefDeDeveloppement.key -passout pass:mdpCertificatDeDeveloppement -subj "//C=FR/ST=Amiens/L=Amiens/O=Security/OU=newPSL/CN=dev-psl.guillaumetalbot.com"
	Generating a RSA private key
	.............................................+++++
	.....................+++++
	writing new private key to 'dev-clefDeDeveloppement.key'
	-----
	req: Skipping unknown attribute "/C"
  • 2/ Signer ce certificat de développement avec l’autorité de certification
echo "authorityKeyIdentifier=keyid,issuer" >dev-confSignature.cnf
echo "basicConstraints=CA:FALSE" >>dev-confSignature.cnf
echo "keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment" >>dev-confSignature.cnf
echo "subjectAltName=DNS:machineUbuntuTest,DNS:dev-psl.guillaumetalbot.com,DNS:*.dev-psl.guillaumetalbot.com,DNS:localhost,IP:127.0.0.1" >>dev-confSignature.cnf
openssl x509 -req -in dev-certificatDeDeveloppementNonSigne.csr -passin pass:mdpAutoriteCertification -CA ../caRacine/ca-certificatRacine.pem -CAkey ../caRacine/ca-clefAutoriteCertification.key -CAcreateserial -out dev-certificatDeDeveloppementSigne.crt -days 3650 -sha256 -extfile dev-confSignature.cnf
	Signature ok
	subject=ST = Amiens, L = Amiens, O = Security, OU = newPSL, CN = dev-psl.guillaumetalbot.com
	Getting CA Private Key
rm dev-confSignature.cnf
rm dev-certificatDeDeveloppementNonSigne.csr
  • 3/ Créer un PKCS12 (format standard remplaçant JKS) à partir du certificat signé (pour être utilisé dans Java)
openssl pkcs12 -export -out keystore.p12 -inkey dev-clefDeDeveloppement.key -in dev-certificatDeDeveloppementSigne.crt -certfile ../caRacine/ca-certificatRacine.pem -password pass:changeit
  • 4/ Paramétrer le keystore dans les micro-services
    • 4.1/ modifier/vérifier le contenu du fichier /socle/variablesPourScripts.properties.gpg (cf. §3.37.6)
cheminRelatifKeystore="../.certificatsLocaux/tls/keystore.p12"
motdepasseKeystore="changeit"
  • 4.2/ modifier/vérifier le contenu des configurations d’exécution Eclipse (fichier .launch)
<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-DcheminKeystore=../../.certificatsLocaux/tls/keystore.p12 -DmdpKeystore=changeit"/>
  • 4.3/ ajouter le certificat racine dans UseBruno
    • ouvrir UseBruno
    • dans le menu Collection > Preferences, cocher la case Use custom CA Certificate et de sélectionner le fichier 2-code/.certificatsLocaux/caRacine/ca-certificatRacine.pem

3.2.8.3 - Créer un certificat client d’appel aux APIs d’administration

Certains micro-services du socle exposent des APIs d’administration exclusivement accessibles si la requête contient un certificat autorisé. Pour cela, il faut :

  • 1/ Créer un certificat client propre à l’environnement de développement
    • Exécuter les commandes suivantes
mkdir -p 2-code/.certificatsLocaux/authAdmin
cd 2-code/.certificatsLocaux/authAdmin
openssl genrsa -out certificatClientAppelApiAdmin-clefPrivee.key 4096
MSYS_NO_PATHCONV=1 openssl req -new -key certificatClientAppelApiAdmin-clefPrivee.key -out certificatClientAppelApiAdmin-certifNonSigne.csr -nodes -subj "/CN=developeurLocal1/OU=talbotgui/O=github/C=com"
echo "[SAN]" >opensslConf.txt
echo "subjectAltName=DNS:dev-psl.guillaumetalbot.com,DNS:localhost" >>opensslConf.txt
openssl x509 -req -days 360 -in certificatClientAppelApiAdmin-certifNonSigne.csr -passin pass:mdpAutoriteCertification -CA ../caRacine/ca-certificatRacine.pem -CAkey ../caRacine/ca-clefAutoriteCertification.key -CAcreateserial -out certificatClientAppelApiAdmin-certifSigne.crt -sha256 -extensions SAN -extfile opensslConf.txt
rm opensslConf.txt
openssl pkcs12 -export -out certificatClientAppelApiAdmin.p12 -inkey certificatClientAppelApiAdmin-clefPrivee.key -in certificatClientAppelApiAdmin-certifSigne.crt -password pass:changeit
* _L'astuce du MSYS_NO_PATHCONV est décrite [ici](https://github.com/git-for-windows/git/issues/577#issuecomment-166118846)._
  • Supprimer le fichier certificatClientAppelApiAdmin-certifNonSigne.csr

  • Sont dont présents les fichiers

    • certificatClientAppelApiAdmin.jks utilisé dans les applicatifs Java
    • certificatClientAppelApiAdmin.p12 utilisé dans les commandes CURL
    • certificatClientAppelApiAdmin-certifSigne.crt et certificatClientAppelApiAdmin-clefPrivee.key utilisés dans Postman
  • Ajouter dev-psl.guillaumetalbot.com dans les sites de confiances

    • démarrer Internet Explorer
    • ouvrir les propriétés > sécurité > site de confiances
    • ajouter dev-psl.guillaumetalbot.com
  • 2/ Créer un truststore pour contenir les certificats “client” autorisés

keytool -import -trustcacerts -noprompt -alias certificatClientAppelApiAdmin1 -ext san=dns:dev-psl.guillaumetalbot.com,localhost,ip:127.0.0.1 -file certificatClientAppelApiAdmin-certifSigne.crt -keystore certificatClientAppelApiAdmin.jks -storepass changeit -keypass changeit
  • 3/ Paramétrer le truststore dans les micro-services
    • 3.1/ modifier/vérifier le contenu du fichier /socle/variablesPourScripts.properties.gpg (cf. §3.37.6)
cheminRelatifTruststore="../.certificatsLocaux/authAdmin/certificatClientAppelApiAdmin.jks"
motdepasseTruststore="changeit"
  • 3.2/ modifier/vérifier le contenu des configurations d’exécution Eclipse (fichier .launch)
<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="xxxxx -DcheminTruststore=../../.certificatsLocaux/authAdmin/certificatClientAppelApiAdmin.jks -DmdpTruststore=changeit"/>

Pour tester le certificat et le trustStore, après avoir démarré l’ensemble du socle, il est possible d’exécuter les commandes suivantes (en remplaçant le port par celui du micro-service)

curl -vk --cert certificatClientAppelApiAdmin-certifSigne.crt --key certificatClientAppelApiAdmin-clefPrivee.key https://dev-psl.guillaumetalbot.com:65129/socle/notification/admin/statistiques

curl -vk --cert-type P12 --cert certificatClientAppelApiAdmin.p12:changeit https://dev-psl.guillaumetalbot.com:65129/socle/notification/admin/statistiques

PKCS12 est le format standard des keystores (à opposer à JKS qui est propre à Java). Depuis la version 8 de Java, ce dernier gère les PKCS12. (source baeldung).


3.2.9 - Installer les outils nécessaires au projet IAS (Infrastructure As Code) (pas nécessaire dans un premier temps)

Installer les machines WSL :

  • Pour (re)installer WSL,
    • si c’est la première installation de WSL, depuis une ligne de commande DOS, exécuter :
echo "activer WSL"
wsl --install
  • si WSL est déjà installé, depuis une ligne de commande DOS, exécuter :
echo "lister les machines"
wsl --list
echo "pour chaque machine, exécuter"
wsl --unregister XXX
  • Pour installer WSL et des machines récentes, exécuter, depuis une ligne de commande DOS, les commandes suivantes :
echo "créer une clef SSH pour permettre à Ansible de se connecter à la machine"
del %USERPROFILE%\.ssh\wsl.key
del %USERPROFILE%\.ssh\wsl.key.pub
ssh-keygen -t rsa -b 2048 -f %USERPROFILE%/.ssh/wsl.key -N ""
echo "mettre à jour WSL"
wsl --update
echo "installer la version d'Ubuntu par défaut"
wsl --install -d Ubuntu
  • Dans la fenêtre WSL, du fait du premier démarrage, il est nécessaire de saisir un compte et un mot de passe. Saisir ubuntu pour toutes les questions.
  • Si besoin (l’installation démarre habituellement l’instance), démarrer l’instance
echo "démarer l'instance"
wsl -d Ubuntu
  • Pour initialiser la machine Ubuntu de base du projet,
    • exécuter une première fois la commande sudo ls /etc pour que les prochaines commandes sudo ne réclame pas de mot de passe (pour tout copier/coller)
    • exécuter les commandes suivantes, dans WSL,
echo "suppression des fichiers (pas dans le même bloc que leur création)"
sudo rm -f /etc/wsl.conf
sudo rm -f /etc/resolv.conf
rm -rf ~/.ssh

echo "activation de systemd sur la machine (et création du fichier)"
echo '[boot]' | sudo tee /etc/wsl.conf
echo 'systemd=true' | sudo tee -a /etc/wsl.conf

echo '[network]' | sudo tee -a /etc/wsl.conf
echo "déclarer un DNS pour accéder à Internet (sans support du proxy Windows)"
echo 'generateResolvConf=false' | sudo tee -a /etc/wsl.conf
echo "pour pouvoir manipuler le nom de la machine"
echo 'hostname = machineUbuntuTest' | sudo tee -a /etc/wsl.conf
echo 'nameserver 8.8.8.8' | sudo tee -a /etc/resolv.conf
sudo chattr +i /etc/resolv.conf

echo "pour forcer la connexion avec le compte ubuntu"
echo '[user]' | sudo tee -a /etc/wsl.conf
echo 'default=ubuntu' | sudo tee -a /etc/wsl.conf

echo "pour pouvoir manipuler les autorisations (chmod) depuis WSL sur des répertoires Windows"
echo '[automount]' | sudo tee -a /etc/wsl.conf
echo 'options = "metadata"' | sudo tee -a /etc/wsl.conf

echo "initialiser le fichier des clefs RSA autorisées (en remplaçant par le bon login)"
mkdir ~/.ssh
touch ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
cat /mnt/c/Users/$USERNAME/.ssh/wsl.key.pub >~/.ssh/authorized_keys
sed -i 's/@.*/@localhost/g' ~/.ssh/authorized_keys
  • exécuter les commandes suivantes, une à une, dans WSL,
echo "vérifier que tout est fait (9, 1, 1)"
wc -l /etc/wsl.conf
cat /etc/resolv.conf | grep 8.8.8.8 | wc -l
cat ~/.ssh/authorized_keys | grep localhost | wc -l

echo "Activation des releases non LTS"
sudo sed -i 's/=lts/=normal/g' /etc/update-manager/release-upgrades

echo "Mise à jour du système (répondre yes et attendre)"
sudo do-release-upgrade

echo "mettre à jour la machine"
sudo apt-get update
sudo apt-get upgrade -y
sudo apt-get dist-upgrade -y

echo "Afficher la version installée"
lsb_release -a

echo "personnalisation du répertoire par défaut de la machine (à customiser)"
echo "" >> ~/.bashrc
echo "#répertoire par défaut à la connexion" >> ~/.bashrc
echo "cd /mnt/d/xxx/2-code/ias" >> ~/.bashrc

echo "sortir de la machine"
exit
  • Pour créer deux machines basées sur cette version d’Ubuntu, depuis une ligne de commande DOS, exécuter les commandes :
echo "complètement arrêter WSL pour prendre en compte le paramétrage"
wsl --shutdown

echo "se placer dans le répertoire 2-code/ias/machinesWsl"
cd xxxxxxxxxxxxxxxxxxxxx

echo "supprimer les machines existantes (si présentes)"
del ubuntu_nue.tar
rmdir UbuntuAnsible
rmdir UbuntuTest

echo "création d'une photo de la machine"
wsl --export Ubuntu ubuntu_nue.tar

echo "création des nouvelles instances basées sur l'image"
wsl --import UbuntuAnsible .\UbuntuAnsible ubuntu_nue.tar
wsl --import UbuntuTest .\UbuntuTest ubuntu_nue.tar
  • Pour démarrer les machines, depuis deux lignes de commande DOS différentes, exécuter

    • wsl -d UbuntuAnsible
    • wsl -d UbuntuTest
  • Dans la machine UbuntuTest, exécuter les commandes :

echo "personnalisation du prompt"
echo "" >> ~/.bashrc
echo "# personnalisation du prompt" >> ~/.bashrc
echo "PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@test\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '" >> ~/.bashrc
. ~/.bashrc

echo "installer openssh-server"
sudo apt-get install openssh-server -y
sudo systemctl enable ssh

echo "installer ACL pour permettre le démarrage des applicatifs avec le compte www"
sudo apt-get install acl

echo "vérifier que openssh est démarré (doit s'afficher en vert 'active (running)')"
sudo service ssh status

echo "installer une librairie nécessaire à MongoDB (pour le message : libcrypto.so.1.1: cannot open shared object file: No such file or directory)"
wget http://archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.0g-2ubuntu4_amd64.deb
sudo dpkg -i libssl1.1_1.1.0g-2ubuntu4_amd64.deb
rm libssl1.1_1.1.0g-2ubuntu4_amd64.deb

echo "paramétrer le hostname (le fichier /etc/hosts est une copie du fichier C:\Windows\System32\drivers\etc\hosts de Windows)"
echo 'machineUbuntuTest' | sudo tee /etc/hostname
  • Pour tester la bonne connexion à la machine UbuntuTest,

    • ouvrir une nouvelle ligne de commande DOS
    • exécuter ssh -i C:/Users/%username%/.ssh/wsl.key ubuntu@localhost
      • en cas d’erreur impliquant remote host identification, supprimer la ligne commençant par localhost dans le fichier C:\Users%username%.ssh\known_hosts
      • en cas d’erreur, vérifier le contenu du fichier ~/.ssh/authorized_keys dans WSL (erreur récurente)
    • fermer la nouvelle ligne de commande DOS
  • Dans la machine UbuntuAnsible, exécuter les commandes :

echo "personnalisation du prompt et ajout d'un chemin dans le path"
echo "" >> ~/.bashrc
echo "# personnalisation du prompt" >> ~/.bashrc
echo "PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@ansible\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '" >> ~/.bashrc
. ~/.bashrc

echo "installation d'Ansible (pipx est long à s'exécuter - cf. https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html)"
sudo apt install pipx -y
pipx install --include-deps ansible
echo 'export PATH="/home/ubuntu/.local/bin:$PATH"' >> ~/.bashrc
. ~/.bashrc

echo "vérifier la bonne installation"
ansible --version

echo "correction des droits sur la clef SSH (chemin à adapter avec la variable saisie dans les scripts Ansible)"
sudo chmod 600 /mnt/c/Users/%username%/.ssh/wsl.key

echo "Installer les logiciels nécessaires à la documentation d'Ansible (pipx peut être long à s'exécuter)"
sudo apt-get update
sudo apt-get install graphviz -y
pipx install ansible-playbook-grapher
  • Pour réaliser une installation complète, depuis UbuntuAnsible, exécuter les commandes
echo "première installation - commandes de préparation (avec droits SUDO)"
ansible-playbook ansible/01_preparer.yml -i ansible/inventory/local -K --extra-vars "ansible_user=ubuntu"
ansible-playbook ansible/02_installer.yml -i ansible/inventory/local
ansible-playbook ansible/03_deployer.yml -i ansible/inventory/local
ansible-playbook ansible/04_demarrer.yml -i ansible/inventory/local
ansible-playbook ansible/05_statuer.yml -i ansible/inventory/local
ansible-playbook ansible/06_arreter.yml -i ansible/inventory/local
  • Pour valider le bon fonctionnement complet (cas uniquement d’une mise à jour de l’environnement), se référer aux étapes 4 et suppérieures du chapitre 3.36.4

3.2.10 - Modifier le fichier host de Windows

Tous les applicatifs répondent sur le DNS dev-psl.guillaumetalbot.com. Mais ce DNS n’existe pas. Il faut donc le déclarer à Windows. Pour ce faire :

  • ouvrir le menu Démarrer de Windows
  • recherche bloc note
  • faire un clic droit et sélectionner Executer en tant qu’administrateur
  • cliquer sur le menu Fichier > Ouvrir
  • sélectionner le répertoire C:\Windows\System32\drivers\etc
  • taper * dans le champs de saisie de fichier pour faire apparaître tous les fichiers
  • sélectionner le fichier hosts
  • ajouter les lignes suivantes (si elles n’y sont pas déjà) :
# dev local
::1             dev-psl.guillaumetalbot.com admin.dev-psl.guillaumetalbot.com
# Nécessaire pour que les applicatifs s'enregistrent auprès du service-admin quand ils sont démarrés depuis Git4Windows avec le script demarrerTout.sh
127.0.0.1       dev-psl.guillaumetalbot.com admin.dev-psl.guillaumetalbot.com
# mais les appels interne à Ubuntu sont aussi résolus simplements (rappel : le hosts de Windows est copié dans WSL)
127.0.0.1       machineUbuntuTest

3.2.11 - Initialiser un fichier de cache

L’applicatif socle-referentiel télécharge un fichier de plus de 1Go et le conserve, sur disque, en guise de cache. Or seule une toute petite portion du fichier est nécessaire. Pour limiter l’espace pris par ce cache, il faut :

  • télécharger le fichier de référentiel des SIRET
  • placer ce fichier dans le répertoire 2-code/socle/.cache avec le nom referentiel-dataGouv-siret (supprimer le fichier s’il existe)
  • exécuter la commande
cd 2-code/socle/.cache
unzip referentiel-dataGouv-siret
rm referentiel-dataGouv-siret
mv StockEtablissement_utf8.csv StockEtablissement_utf8_original.csv
cat StockEtablissement_utf8_original.csv | grep A,MAIRIE >StockEtablissement_utf8.csv
rm StockEtablissement_utf8_original.csv
  • créer un ZIP nommé referentiel-dataGouv-siret contenant le fichier StockEtablissement_utf8.csv

Si l’applicatif socle-referentiel, s’exécutant sur la machine WSL est long à démarrer, copier le fichier de cache dans le bon répertoire en exécutant les commandes :

sudo su - www
mkdir /psl/applicatifs/socle-referentiel/.cache
cp /mnt/d/xxx/2-code/socle/.cache/referentiel-dataGouv-siret /psl/applicatifs/socle-referentiel/.cache/

3.2.12 - FAQ

  • Si Node ne veut pas fonctionner durant le npm ci, tenter la commande suivante :
npm cache clean -f
  • En cas d’erreur, dans les tests automatisés, du type Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target : ajouter -Djavax.net.debug=all dans la configuration du test et relancer le test.

  • Pour se simplifier la vie, une fois le compte www créé sur la machine UbuntuTest, il est utile de créer ces alias :

echo "ajouter un alias pour tout demarrer/arrêter dans le compte www"
sudo su - www
echo "alias demarrerTout='/psl/applicatifs/service-gateway/service-gateway.sh startAndWait ; /psl/applicatifs/service-registry/service-registry.sh startAndWait ; /psl/applicatifs/service-nosql/service-nosql.sh startAndWait ; /psl/applicatifs/service-config/service-config.sh startAndWait ; /psl/applicatifs/service-admin/service-admin.sh startAndWait ; /psl/applicatifs/service-ldap/service-ldap.sh startAndWait ; /psl/applicatifs/socle-dbbrouillon/socle-dbbrouillon.sh startAndWait ; /psl/applicatifs/socle-dbconfiguration/socle-dbconfiguration.sh startAndWait ; /psl/applicatifs/socle-dbdocument/socle-dbdocument.sh startAndWait ; /psl/applicatifs/socle-dbnotification/socle-dbnotification.sh startAndWait ; /psl/applicatifs/socle-referentiel/socle-referentiel.sh startAndWait ; /psl/applicatifs/socle-referentielexterne/socle-referentielexterne.sh startAndWait ; /psl/applicatifs/socle-securite/socle-securite.sh startAndWait ; /psl/applicatifs/socle-soumission/socle-soumission.sh startAndWait ; /psl/applicatifs/socle-transfert/socle-transfert.sh startAndWait ; /psl/applicatifs/socle-admin/socle-admin.sh startAndWait'" >> .bashrc
echo "alias arreterTout='/psl/applicatifs/service-nosql/service-nosql.sh stop && /psl/applicatifs/service-config/service-config.sh stop && /psl/applicatifs/service-admin/service-admin.sh stop && /psl/applicatifs/service-ldap/service-ldap.sh stop && /psl/applicatifs/socle-dbbrouillon/socle-dbbrouillon.sh stop && /psl/applicatifs/socle-dbconfiguration/socle-dbconfiguration.sh stop && /psl/applicatifs/socle-dbdocument/socle-dbdocument.sh stop && /psl/applicatifs/socle-dbnotification/socle-dbnotification.sh stop && /psl/applicatifs/socle-referentiel/socle-referentiel.sh stop && /psl/applicatifs/socle-referentielexterne/socle-referentielexterne.sh stop && /psl/applicatifs/socle-securite/socle-securite.sh stop && /psl/applicatifs/socle-soumission/socle-soumission.sh stop && /psl/applicatifs/socle-transfert/socle-transfert.sh stop && /psl/applicatifs/service-gateway/service-gateway.sh stop && /psl/applicatifs/socle-admin/socle-admin.sh stop && /psl/applicatifs/service-registry/service-registry.sh stop'" >> .bashrc
echo "alias statutTout='/psl/applicatifs/service-gateway/service-gateway.sh status && /psl/applicatifs/service-registry/service-registry.sh status && /psl/applicatifs/service-nosql/service-nosql.sh status && /psl/applicatifs/service-config/service-config.sh status && /psl/applicatifs/service-admin/service-admin.sh status && /psl/applicatifs/service-ldap/service-ldap.sh stop && /psl/applicatifs/socle-dbbrouillon/socle-dbbrouillon.sh status && /psl/applicatifs/socle-dbconfiguration/socle-dbconfiguration.sh status && /psl/applicatifs/socle-dbdocument/socle-dbdocument.sh status && /psl/applicatifs/socle-dbnotification/socle-dbnotification.sh status && /psl/applicatifs/socle-referentiel/socle-referentiel.sh status && /psl/applicatifs/socle-referentielexterne/socle-referentielexterne.sh status && /psl/applicatifs/socle-securite/socle-securite.sh status && /psl/applicatifs/socle-soumission/socle-soumission.sh status && /psl/applicatifs/socle-transfert/socle-transfert.sh status && /psl/applicatifs/socle-admin/socle-admin.sh status'" >> .bashrc
. ~/.bashrc
  • Si plusieurs versions de Java sont présentes sur le poste de développement, il est possible de créer plusieurs aliases dans la ligne de commande GIT pour exécuter Maven avec une version de Java spécifique. Pour cela, il faut éditer le fichier C:\Program Files\Git\etc\profile.d\aliases.sh pour y ajouter les lignes suivantes :
alias mvn8="JAVA_HOME=/d/xxxxxx/jdk-1.8.0.212 && mvn"
alias mvn11="JAVA_HOME=/d/xxxxxx/jdk-11.0.20.1+1 && mvn"
alias mvn17="JAVA_HOME=/d/xxxxxx/jdk-17.0.2 && mvn"