<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>erwan.guillemard</title>
	<atom:link href="https://erwanguillemard.com/feed/" rel="self" type="application/rss+xml" />
	<link>https://erwanguillemard.com</link>
	<description>Blog personnel</description>
	<lastBuildDate>Sun, 31 May 2026 08:06:53 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://erwanguillemard.com/wp-content/uploads/2024/02/cropped-Logo-sans-baseline-32x32.png</url>
	<title>erwan.guillemard</title>
	<link>https://erwanguillemard.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Cahier 4 : Charly &#038; GMI, Mémoire d&#8217;un BTS Industriel</title>
		<link>https://erwanguillemard.com/cahier-4-charly-gmi-memoire-dun-bts-industriel/</link>
		
		<dc:creator><![CDATA[Erwan Guillemard]]></dc:creator>
		<pubDate>Sun, 31 May 2026 08:06:53 +0000</pubDate>
				<category><![CDATA[Chronique d'un Sys Admin]]></category>
		<category><![CDATA[Chronique]]></category>
		<guid isPermaLink="false">https://erwanguillemard.com/?p=4072</guid>

					<description><![CDATA[Après une période de réflexion au sens de la vie (elle va souvent devant nous il parait, même si j&#8217;ai trouvé que le sens peut varier de 2°), je me suis dit pourquoi ne pas publier mes mémoires de fin de cycle ? Encore mieux pourquoi ne pas publier mes mémoires de fin d&#8217;étude en...]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Après une période de réflexion au sens de la vie (elle va souvent devant nous il parait, même si j&rsquo;ai trouvé que le sens peut varier de 2°), je me suis dit pourquoi ne pas publier mes mémoires de fin de cycle ? Encore mieux pourquoi ne pas publier mes mémoires de fin d&rsquo;étude en l&rsquo;état ? </p>



<p class="wp-block-paragraph">J&rsquo;ai trouvé l&rsquo;idée excellente et c&rsquo;est par nostalgie et regard critique que je me lance à l&rsquo;aventure pour vous faire découvrir comment je suis arrivé là où j&rsquo;en suis aujourd&rsquo;hui. Je pense alors que vous comprendrez mon évolution à travers le temps 🙂</p>





<h2 class="wp-block-heading">Avant-Propos</h2>



<p class="wp-block-paragraph">Naturellement, le mémoire est repris en tant que tel. Je ne touche pas à son contenu. Les syntaxes et autres fautes d&rsquo;orthographes resteront à la postérité. 🙂</p>



<p class="wp-block-paragraph">Ce projet de fin de cycle est particulier car il a été réalisé à quatre main. Les deux mains de l&rsquo;auteur ainsi que les deux mains de Robin GRIVET, camarade avec qui le projet a été un pur plaisir de collaboration si ce n&rsquo;est plus. Cela sonne comme un petit air de remember 🙂</p>



<p class="wp-block-paragraph">La thématique du projet était de développer un banc de test pour réaliser des contrôles non destructifs par Magnéto Impédance Géante (GMI<sup data-fn="23e6b230-133b-46f6-b58e-13e66931512e" class="fn"><a href="#23e6b230-133b-46f6-b58e-13e66931512e" id="23e6b230-133b-46f6-b58e-13e66931512e-link">1</a></sup>). En partenariat avec le LPP<sup data-fn="68c9a134-b5e2-44e9-b091-1d64a3e522fd" class="fn"><a href="#68c9a134-b5e2-44e9-b091-1d64a3e522fd" id="68c9a134-b5e2-44e9-b091-1d64a3e522fd-link">2</a></sup> et le Lycée Eiffel de Dijon, (promotion 2012) et ARDPI<sup data-fn="02b9f9be-6755-4271-9095-7023ac70c205" class="fn"><a href="#02b9f9be-6755-4271-9095-7023ac70c205" id="02b9f9be-6755-4271-9095-7023ac70c205-link">3</a></sup>.</p>



<p class="wp-block-paragraph">Le document ci-dessous se déroule en 3 parties. Une partie commune, une partie propre à chacun de nous sur des tâches bien précises. Afin de ne pas tronquer le document la partie de mon binôme sera également présenté. Son droit d&rsquo;auteur lui appartenant et je me réserve sous son avis de retirer ce dernier.</p>



<p class="wp-block-paragraph">Attention, vous voilà parti pour un voyage de 67 pages 🙂</p>



<h2 class="wp-block-heading">Partie Commune</h2>



<h3 class="wp-block-heading">Analyse du cahier des charges</h3>



<h4 class="wp-block-heading">Présentation du projet</h4>



<p class="wp-block-paragraph">L’objectif de notre projet est de développer un système de contrôle non destructif (CND<sup data-fn="9430d9f2-26f9-4453-ad8a-4263150f00ec" class="fn"><a href="#9430d9f2-26f9-4453-ad8a-4263150f00ec" id="9430d9f2-26f9-4453-ad8a-4263150f00ec-link">4</a></sup>) par magnétoscopie avec un capteur à effet de magnéto impédance géante (MIG ou GMI en anglais) afin de réaliser un scan de la cible ferromagnétique pour contrôler la qualité de cette dernière.</p>



<p class="wp-block-paragraph">Le projet consiste à analyser par balayage les imperfections présentent dans les matériaux dans le domaine de l’industrie ou de localiser des tumeurs cancéreuses dans le domaine médical.</p>



<p class="wp-block-paragraph">Nous réaliserons le banc de test de ce capteur. Le capteur quand a lui est conçu par 2 partenaires. L’un de nos partenariats est établit avec le Laboratoire de Physique de Plasma situé à PALAISEAU (F-91128) pour qui nous allons développer le banc de test pour qu’ils puissent tester leurs capteurs GMI. Le second partenaire est l’entreprise ARDPI situé à SELONGEY&nbsp; (21260) qui commence à s’intéresser au développement de banc de test pour les capteurs de types CND et qui développe en même temps que nous un banc de test similaire. Seul le Laboratoire de Physique des Plasmas a pu nous fournir un capteur GMI. L’entreprise ARDPI, elle n’a pas encore eu le temps de développer son propre capteur. Nous nous baserons donc sur le capteur fourni par le LPP.</p>



<h4 class="wp-block-heading">Partenaire</h4>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td class="has-text-align-center" data-align="center"><img fetchpriority="high" decoding="async" width="550" height="252" class="wp-image-4078" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_001_Partenaires_0.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_001_Partenaires_0.jpg 314w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_001_Partenaires_0-300x138.jpg 300w" sizes="(max-width: 550px) 100vw, 550px" /></td><td class="has-text-align-center" data-align="center"><img decoding="async" width="550" height="230" class="wp-image-4079" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_001_Partenaires_1.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_001_Partenaires_1.jpg 321w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_001_Partenaires_1-300x125.jpg 300w" sizes="(max-width: 550px) 100vw, 550px" /></td><td class="has-text-align-center" data-align="center"><img decoding="async" width="550" height="280" class="wp-image-4080" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_001_Partenaires_2.jpg" alt=""></td></tr><tr><td class="has-text-align-center" data-align="center">Laboratoire de Physique des Plasmas<br>Ecole Polytechnique<br>Route de Saclay<br>F-91128 PALAISEAU Cedex</td><td class="has-text-align-center" data-align="center">Lycée Gustave Eiffel DIJON<br>15 Avenue Champollion 21000 DIJON</td><td class="has-text-align-center" data-align="center">Agence pour la Recherche et le<br>Développement de Produits Industriels<br>39 Bis Rue de la Roche 21260 SELONGEY</td></tr></tbody></table></figure>



<p class="wp-block-paragraph"></p>



<h4 class="wp-block-heading">Cahier des charges</h4>



<p class="wp-block-paragraph">Nous sommes contraints d’après un cahier des charges bien définies de traiter un certain nombre de spécification.</p>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="773" class="wp-image-4081" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_002_CDC.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_002_CDC.jpg 574w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_002_CDC-213x300.jpg 213w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td><td><strong><u>Objectif:</u></strong><br><strong>&nbsp;</strong><br>Faire une analyse de la pièce sans contact.<br>&nbsp;<br><strong><u>Fonctionnalités:</u></strong><br><strong>&nbsp;</strong><br><strong><u>Paramétrage personnalisable :</u></strong>&nbsp;<br>&nbsp;<br>Cette fonctionnalité permet de pouvoir définir des paramètres comme les paramètres d’alimentation du capteur GMI, d’acquisition, de l’alimentation de l’émetteur de champ et des paramètres du Robot 3 axes&nbsp; souhaitées. Ces données seront stockées dans un fichier au format XML.<br>&nbsp;<br><strong><u>Mode Manuel :</u></strong><br><strong>&nbsp;</strong><br>Ce mode doit permettre à l’utilisateur de pouvoir réaliser le paramétrage du capteur GMI par déplacement manuel (Joystick)<strong> </strong>&nbsp;de façon précise en concordance avec le capteur Z. Dans le cas de capteur de type CND au parle de contrôle du lift-off.<br>&nbsp;<br><strong><u>Mode Automatique :</u></strong><br><strong>&nbsp;</strong><br>Une fois avoir définie les paramètres souhaitées, l’on peut démarrer la séquence de balayage de la pièce en ayant positionné le capteur sur le début de la cible ferromagnétique. Une fois la séquence terminée, les données seront enregistrées.<br>&nbsp;<br><strong><u>Surveillance Vidéo :</u></strong><br><strong>&nbsp;</strong><br>Permet de vérifier qu’il n’y est pas de contact entre<br>le capteur CND et la cible afin d’éviter toute détérioration des deux instruments.<br>&nbsp;<br><strong><u>Sauvegarde &amp; Consultation des données :</u></strong><br><strong>&nbsp;</strong><br>Sauvegarde les données de l’acquisition ainsi qu’une copie de paramètres souhaités dans un fichier de type TXT. Le contenu de ce fichier doit être exploitable.<br>Lors d’une consultation de donnée, l’on doit pouvoir retranscrire dans un plot 3D les données et nous devons afficher les valeurs dans un tableau.<br>&nbsp;<br><strong><u>Affichage plot 3D :</u></strong><br><strong>&nbsp;</strong><br>Le plot 3D doit présenter une représentation du contenu de la pièce en affichant une image de la cible en fonction des données d’acquisition. De plus, les paramètres du Plot 3D doivent être modifiables par l’utilisateur.</td></tr></tbody></table></figure>



<h5 class="wp-block-heading">Contraintes</h5>



<p class="wp-block-paragraph">Ce projet est définis selon un certain nombre de contraintes, que ce soit des contraintes dû au développement du programme (contraintes logicielles) ainsi que du matériel imposé ou spécifier par le client (contraintes matérielles). Mais le plus important reste la contrainte budgétaire imposé par le client ainsi que le temps impartie pour élaborer le développement du système.</p>



<ul class="wp-block-list">
<li>Contrainte budgétaire :&nbsp; 2 500€.</li>



<li>Contrainte temporelle :&nbsp; 220 heures</li>
</ul>



<h6 class="wp-block-heading">Spécifications Logicielles</h6>



<ul class="wp-block-list">
<li>Le fichier de configuration système doit être au format de fichier XML.</li>



<li>L’enregistrement des données doit être au format TXT.</li>



<li>Doit comporter 2 modes de pilotage : Automatique et manuel. &#8211; Le pilotage doit être synchronisé avec l’acquisition.</li>
</ul>



<h6 class="wp-block-heading">Spécifications Matérielles</h6>


<div class="kb-table-container kb-table-container4072_344794-fc wp-block-kadence-table"><table class="kb-table kb-table4072_344794-fc">
<tr class="kb-table-row kb-table-row4072_53dbfd-65">
<th  scope="col" class="kb-table-data kb-table-data4072_ffc1a0-68">

<p class="has-text-align-center wp-block-paragraph"><strong>Matériels</strong></p>

</th>

<th  scope="col" class="kb-table-data kb-table-data4072_6b168d-a1">

<p class="has-text-align-center wp-block-paragraph"><strong>Etat</strong></p>

</th>

<th  scope="col" class="kb-table-data kb-table-data4072_b8b0a2-7a">

<p class="has-text-align-center wp-block-paragraph"><strong>Coûts</strong></p>

</th>
</tr>

<tr class="kb-table-row kb-table-row4072_97994f-96">
<td  class="kb-table-data kb-table-data4072_d0faae-50">

<p class="has-text-align-center wp-block-paragraph">Capteur CND</p>



<p class="has-text-align-center wp-block-paragraph">(AMR-GMI)</p>

</td>

<td  class="kb-table-data kb-table-data4072_9401a5-cf">

<p class="has-text-align-center wp-block-paragraph"><strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-2-color">POSSEDE</mark></strong></p>

</td>

<td  class="kb-table-data kb-table-data4072_ccc1d2-6e">

<p class="has-text-align-center wp-block-paragraph">&#8212;&#8211;</p>

</td>
</tr>

<tr class="kb-table-row kb-table-row4072_f4c48e-3a">
<td  class="kb-table-data kb-table-data4072_fb495f-b5">

<p class="has-text-align-center wp-block-paragraph">Capteurs fin de course</p>



<p class="has-text-align-center wp-block-paragraph">(Axe X, Y)</p>

</td>

<td  class="kb-table-data kb-table-data4072_3f6e9a-4b">

<p class="has-text-align-center wp-block-paragraph"><strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-13-color">NON POSSEDE</mark></strong></p>

</td>

<td  class="kb-table-data kb-table-data4072_4bd97c-88">

<p class="has-text-align-center wp-block-paragraph">8,35 €</p>

</td>
</tr>

<tr class="kb-table-row kb-table-row4072_d1cd17-42">
<td  class="kb-table-data kb-table-data4072_42f7a3-ad">

<p class="has-text-align-center wp-block-paragraph">Capteur Analogique</p>



<p class="has-text-align-center wp-block-paragraph">(Axe Z)</p>

</td>

<td  class="kb-table-data kb-table-data4072_6be74b-06">

<p class="has-text-align-center wp-block-paragraph"><strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-13-color">NON POSSEDE</mark></strong></p>

</td>

<td  class="kb-table-data kb-table-data4072_057656-ca">

<p class="has-text-align-center wp-block-paragraph">31 €</p>

</td>
</tr>

<tr class="kb-table-row kb-table-row4072_b1450e-85">
<td  class="kb-table-data kb-table-data4072_2b9be1-0e">

<p class="has-text-align-center wp-block-paragraph">PC embarqué, contrôleur PXI</p>



<p class="has-text-align-center wp-block-paragraph">(NI PXI-1042)</p>

</td>

<td  class="kb-table-data kb-table-data4072_532f53-87">

<p class="has-text-align-center wp-block-paragraph"><strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-2-color">POSSEDE</mark></strong></p>

</td>

<td  class="kb-table-data kb-table-data4072_087614-63">

<p class="has-text-align-center wp-block-paragraph">&#8212;&#8211;</p>

</td>
</tr>

<tr class="kb-table-row kb-table-row4072_21103e-21">
<td  class="kb-table-data kb-table-data4072_50e019-19">

<p class="has-text-align-center wp-block-paragraph">Contrôleur embarqué<br>(NI PXI-8187)</p>

</td>

<td  class="kb-table-data kb-table-data4072_6bf04c-78">

<p class="has-text-align-center wp-block-paragraph"><strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-2-color">POSSEDE</mark></strong></p>

</td>

<td  class="kb-table-data kb-table-data4072_026321-f8">

<p class="has-text-align-center wp-block-paragraph">&#8212;&#8211;</p>

</td>
</tr>

<tr class="kb-table-row kb-table-row4072_4f98b0-41">
<td  class="kb-table-data kb-table-data4072_6f59c0-0c">

<p class="has-text-align-center wp-block-paragraph">Interface de connexion</p>



<p class="has-text-align-center wp-block-paragraph">(NI SCB-68)</p>

</td>

<td  class="kb-table-data kb-table-data4072_aafafb-b6">

<p class="has-text-align-center wp-block-paragraph"><strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-2-color">POSSEDE</mark></strong></p>

</td>

<td  class="kb-table-data kb-table-data4072_71bb77-1a">

<p class="has-text-align-center wp-block-paragraph">&#8212;&#8211;</p>

</td>
</tr>

<tr class="kb-table-row kb-table-row4072_4b655f-db">
<td  class="kb-table-data kb-table-data4072_2d3702-77">

<p class="has-text-align-center wp-block-paragraph">GBF Agilent</p>



<p class="has-text-align-center wp-block-paragraph">(33220A)</p>

</td>

<td  class="kb-table-data kb-table-data4072_2ceedf-fd">

<p class="has-text-align-center wp-block-paragraph"><strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-2-color">POSSEDE</mark></strong></p>

</td>

<td  class="kb-table-data kb-table-data4072_7c8d3f-2d">

<p class="has-text-align-center wp-block-paragraph">&#8212;&#8211;</p>

</td>
</tr>

<tr class="kb-table-row kb-table-row4072_bff1f0-96">
<td  class="kb-table-data kb-table-data4072_715d16-c4">

<p class="has-text-align-center wp-block-paragraph">Carte générateur de signaux arbitraires<br>(NI PXI-5412 avec câble SMB)</p>

</td>

<td  class="kb-table-data kb-table-data4072_c0e91d-1d">

<p class="has-text-align-center wp-block-paragraph"><strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-2-color">POSSEDE</mark></strong></p>

</td>

<td  class="kb-table-data kb-table-data4072_2e9ae6-c1">

<p class="has-text-align-center wp-block-paragraph">&#8212;&#8211;</p>

</td>
</tr>

<tr class="kb-table-row kb-table-row4072_c47b64-2d">
<td  class="kb-table-data kb-table-data4072_236c14-59">

<p class="has-text-align-center wp-block-paragraph">Carte numériseur haute fréquence d’échantillonnage<br>(NI PXI-5112 avec câble SMB)</p>

</td>

<td  class="kb-table-data kb-table-data4072_5fa451-dd">

<p class="has-text-align-center wp-block-paragraph"><strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-2-color">POSSEDE</mark></strong></p>

</td>

<td  class="kb-table-data kb-table-data4072_362372-6c">

<p class="has-text-align-center wp-block-paragraph">&#8212;&#8211;</p>

</td>
</tr>

<tr class="kb-table-row kb-table-row4072_6b3541-1c">
<td  class="kb-table-data kb-table-data4072_cc2c4b-9a">

<p class="has-text-align-center wp-block-paragraph">Carte d’acquisition multifonctions</p>



<p class="has-text-align-center wp-block-paragraph">(NI PXI-6251)</p>

</td>

<td  class="kb-table-data kb-table-data4072_424dbc-e2">

<p class="has-text-align-center wp-block-paragraph"><strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-2-color">POSSEDE</mark></strong></p>

</td>

<td  class="kb-table-data kb-table-data4072_e1a8a2-94">

<p class="has-text-align-center wp-block-paragraph">&#8212;&#8211;</p>

</td>
</tr>

<tr class="kb-table-row kb-table-row4072_60cee6-cf">
<td  class="kb-table-data kb-table-data4072_9c8e01-55">

<p class="has-text-align-center wp-block-paragraph">Robot 3 axes</p>



<p class="has-text-align-center wp-block-paragraph">(Charlie Robot)</p>

</td>

<td  class="kb-table-data kb-table-data4072_b5963d-bc">

<p class="has-text-align-center wp-block-paragraph"><strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-2-color">POSSEDE</mark></strong></p>

</td>

<td  class="kb-table-data kb-table-data4072_b8015b-4d">

<p class="has-text-align-center wp-block-paragraph">&#8212;&#8211;</p>

</td>
</tr>

<tr class="kb-table-row kb-table-row4072_c23f55-0b">
<td  class="kb-table-data kb-table-data4072_15fa87-d4">

<p class="has-text-align-center wp-block-paragraph">WebCam</p>

</td>

<td  class="kb-table-data kb-table-data4072_e1e171-fd">

<p class="has-text-align-center wp-block-paragraph"><strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-13-color">NON POSSEDE</mark></strong></p>

</td>

<td  class="kb-table-data kb-table-data4072_d964e6-9b">

<p class="has-text-align-center wp-block-paragraph">19,95 €</p>

</td>
</tr>

<tr class="kb-table-row kb-table-row4072_c6b7ee-9f">
<td  class="kb-table-data kb-table-data4072_9ff0ed-88">

<p class="has-text-align-center wp-block-paragraph">Joystick</p>

</td>

<td  class="kb-table-data kb-table-data4072_6607f2-8e">

<p class="has-text-align-center wp-block-paragraph"><strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-13-color">NON POSSEDE</mark></strong></p>

</td>

<td  class="kb-table-data kb-table-data4072_8706b1-37">

<p class="has-text-align-center wp-block-paragraph">29,95 €</p>

</td>
</tr>

<tr class="kb-table-row kb-table-row4072_cab990-a9">
<td  class="kb-table-data kb-table-data4072_144e1e-89">

<p class="has-text-align-center wp-block-paragraph">Convertisseur 24 V / 5V</p>

</td>

<td  class="kb-table-data kb-table-data4072_75b470-ec">

<p class="has-text-align-center wp-block-paragraph"><strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-13-color">NON POSSEDE</mark></strong></p>

</td>

<td  class="kb-table-data kb-table-data4072_4bb0c8-fb">

<p class="has-text-align-center wp-block-paragraph">10,50 €</p>

</td>
</tr>
</table></div>


<h5 class="wp-block-heading">Besoins et fonctionnalités</h5>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="978" height="621" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_003_BF.jpg" alt="" class="wp-image-4087" style="aspect-ratio:1.574889674723091;width:565px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_003_BF.jpg 978w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_003_BF-300x190.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_003_BF-768x488.jpg 768w" sizes="auto, (max-width: 978px) 100vw, 978px" /></figure>
</div>


<h3 class="wp-block-heading">Présentation Matérielle</h3>



<p class="wp-block-paragraph">Nous allons présenter dans cette partie, le matérielle ainsi que les logiciels et autres softwares dont nous avons besoin de manière générale. Une présentation plus poussée du matérielle sera faite dans chacune des partie individuelles.</p>



<h4 class="wp-block-heading">Ressource Matérielle</h4>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="408" class="wp-image-4089" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_004_RM_0.jpg" alt=""></td><td>PXI<sup data-fn="1161913b-51d6-4fd3-a90f-02d813e591f7" class="fn"><a href="#1161913b-51d6-4fd3-a90f-02d813e591f7" id="1161913b-51d6-4fd3-a90f-02d813e591f7-link">5</a></sup> NI-1042Q qui est notre PC<sup data-fn="f5d4db3d-979e-42bd-81bf-d529db7f7001" class="fn"><a href="#f5d4db3d-979e-42bd-81bf-d529db7f7001" id="f5d4db3d-979e-42bd-81bf-d529db7f7001-link">6</a></sup> embarqué.<br>Ainsi que les que celui-ci comporte.<br> <br><em>(cf Partie Individuelle)</em></td></tr><tr><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="412" class="wp-image-4090" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_004_RM_1.jpg" alt=""></td><td>Générateur Base Fréquence de nom Agilent 33220A. Pouvant être commandé à distance via le protocole GPIB<sup data-fn="3621b715-2cd5-4d26-bdee-23a57479cb46" class="fn"><a href="#3621b715-2cd5-4d26-bdee-23a57479cb46" id="3621b715-2cd5-4d26-bdee-23a57479cb46-link">7</a></sup>.</td></tr><tr><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="318" class="wp-image-4091" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_004_RM_2.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_004_RM_2.jpg 547w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_004_RM_2-300x173.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td><td>Le Charly Robot 3 axes et son contrôleur de puissance communicant via la liaison RS232<sup data-fn="bcebd0e3-fc42-426b-8ac7-c85bb81ff7b6" class="fn"><a href="#bcebd0e3-fc42-426b-8ac7-c85bb81ff7b6" id="bcebd0e3-fc42-426b-8ac7-c85bb81ff7b6-link">8</a></sup>.</td></tr><tr><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="303" class="wp-image-4092" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_004_RM_3.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_004_RM_3.jpg 361w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_004_RM_3-300x165.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td><td>Webcan de marque Hercule et un Joystick de chez Logitech en interface de connexion USB.<br><br><em>(cf Partie Individuelle)</em></td></tr><tr><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="249" class="wp-image-4093" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_004_RM_4.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_004_RM_4.jpg 504w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_004_RM_4-300x136.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td><td>Capteurs fin de course pour le Charly Robot 3 axes. Capteur Analogique pour l&rsquo;axe Z du Charly Robot 3 axes.<br>Différents capteurs CND de type GMI.<br><br>(Nous renvoyons pour plus d&rsquo;information vers les parties individuelles)</td></tr></tbody></table></figure>



<h4 class="wp-block-heading">Ressource Logicielle</h4>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="75" height="80" class="wp-image-4094" style="width: 75px;" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_005_RL_0.jpg" alt=""></td><td>Lecteur Média player sous licence GPL<sup data-fn="8151d058-68e5-4eaf-be3c-b666d86357a0" class="fn"><a href="#8151d058-68e5-4eaf-be3c-b666d86357a0" id="8151d058-68e5-4eaf-be3c-b666d86357a0-link">9</a></sup> (gratuit). Permet d&rsquo;afficher la WebCam dans l&rsquo;application.</td></tr><tr><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="250" height="97" class="wp-image-4095" style="width: 250px;" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_005_RL_1.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_005_RL_1.jpg 315w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_005_RL_1-300x116.jpg 300w" sizes="auto, (max-width: 250px) 100vw, 250px" /></td><td>Logiciel de réalisation des diagrammes de type UML<sup data-fn="9e8b0f8a-9353-4d04-a963-b33a1834c3fa" class="fn"><a href="#9e8b0f8a-9353-4d04-a963-b33a1834c3fa" id="9e8b0f8a-9353-4d04-a963-b33a1834c3fa-link">10</a></sup>.</td></tr><tr><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="118" height="116" class="wp-image-4097" style="width: 118px;" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_005_RL_3.jpg" alt=""></td><td>Logiciel de réalisation des diagrammes de type UML et de dessin pour schéma électrique.</td></tr><tr><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="250" height="73" class="wp-image-4096" style="width: 250px;" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_005_RL_2.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_005_RL_2.jpg 423w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_005_RL_2-300x88.jpg 300w" sizes="auto, (max-width: 250px) 100vw, 250px" /></td><td>IDE<sup data-fn="4723fc88-2060-448a-9c0b-dcc1b4a759ad" class="fn"><a href="#4723fc88-2060-448a-9c0b-dcc1b4a759ad" id="4723fc88-2060-448a-9c0b-dcc1b4a759ad-link">11</a></sup> Labview Version 8.0, nécessaire pour exécuter l&rsquo;application.</td></tr><tr><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="150" height="97" class="wp-image-4098" style="width: 150px;" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_005_RL_4.jpg" alt=""></td><td>OS<sup data-fn="156b4ddd-20c8-4f17-84ef-68525b27e3c1" class="fn"><a href="#156b4ddd-20c8-4f17-84ef-68525b27e3c1" id="156b4ddd-20c8-4f17-84ef-68525b27e3c1-link">12</a></sup> Windows XP Pack SP2<sup data-fn="1909fcc8-38a4-4549-acfe-16de9b8b75af" class="fn"><a href="#1909fcc8-38a4-4549-acfe-16de9b8b75af" id="1909fcc8-38a4-4549-acfe-16de9b8b75af-link">13</a></sup> présent sur le PC embarqué.</td></tr></tbody></table></figure>



<h3 class="wp-block-heading">Analyse et distribution des taches</h3>



<h4 class="wp-block-heading">Répartition des taches</h4>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="978" height="621" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_003_BF.jpg" alt="" class="wp-image-4087" style="aspect-ratio:1.574889674723091;width:424px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_003_BF.jpg 978w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_003_BF-300x190.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_003_BF-768x488.jpg 768w" sizes="auto, (max-width: 978px) 100vw, 978px" /></figure>
</div>


<h4 class="wp-block-heading">Analyse</h4>



<p class="wp-block-paragraph">Nous allons utiliser un boîtier de connexion National Instrument <em><u>Scb-68</u></em> pour connecter les différents capteurs présent sur le robot.</p>



<p class="wp-block-paragraph">Le déplacement de la colonne du robot se déroule sur 3 axes : X, Y, Z. Donc il est nécessaire d’ajouter des capteurs fin de course pour éviter de forcer le robot quand celui-ci arrive au maximum de sa position. Il nous faut donc :</p>



<ul class="wp-block-list">
<li>2 capteurs de positions de type TOR pour les axes X et Y.</li>



<li>1 capteur de position de type ANALOGIQUE pour l’axe Z afin de pouvoir gérer le lift-off du capteur GMI.</li>
</ul>



<p class="wp-block-paragraph">Dans un premier temps, nous utiliserons un PC pour les phases de prototypages. Puis nous travaillerons avec un <em><u>PXI 1042Q</u></em> contenant un système embarqué (dont LabView  comme plateforme de développement (IDE)), un oscilloscope, un GBF<sup data-fn="7cfd2634-e03b-4ff2-9eaa-36bd95f1c986" class="fn"><a href="#7cfd2634-e03b-4ff2-9eaa-36bd95f1c986" id="7cfd2634-e03b-4ff2-9eaa-36bd95f1c986-link">14</a></sup>, 2 ports USB, un port RJ45, comportant 8 slots possible pour pouvoir rajouter des cartes d’acquisitions. La possibilité de pouvoir rajouter plusieurs cartes d’acquisitions et un choix déterminant qui explique pourquoi nous utilisons pour le projet un PXI avec PC embarqué, et non un PC.</p>



<p class="wp-block-paragraph">Pour commander le robot, nous devons avoir un contrôleur de puissance pour faire l’intermédiaire entre le robot et le PXI, afin de pouvoir traduire les trames envoyées au Charlie Robot.</p>



<h4 class="wp-block-heading">Conception Générale</h4>



<h5 class="wp-block-heading">Configuration</h5>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td>Ce diagramme de flots de données représente le fonctionnement de la fonctionnalité « <strong>Configuration </strong>» en expliquant de manière générale le fonctionnement de réglage et de commande des instruments.</td><td><img loading="lazy" decoding="async" width="450" height="313" class="wp-image-4100" style="width: 450px;" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_006_Configuration.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_006_Configuration.jpg 822w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_006_Configuration-300x209.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_006_Configuration-768x534.jpg 768w" sizes="auto, (max-width: 450px) 100vw, 450px" /></td></tr><tr><td><img loading="lazy" decoding="async" width="550" height="191" class="wp-image-4101" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_007_Configuration.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_007_Configuration.jpg 822w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_007_Configuration-300x104.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_007_Configuration-768x266.jpg 768w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td><td>De façon plus détailler, l’on voit le fonctionnement plus détaillé de la « <strong>Configuration Emetteur</strong> ».</td></tr></tbody></table></figure>



<h5 class="wp-block-heading">Sauvegarde</h5>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td class="has-text-align-left" data-align="left">Ce diagramme de flots de données représente le fonctionnement de la fonctionnalité « <strong>Sauvegarde</strong>» en expliquant de manière générale le fonctionnement d’enregistrement des données.</td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="382" class="wp-image-4102" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_008_Configuration.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_008_Configuration.jpg 713w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_008_Configuration-300x208.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>



<h5 class="wp-block-heading">Mode Manuel</h5>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="384" class="wp-image-4103" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_009_Configuration.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_009_Configuration.jpg 709w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_009_Configuration-300x209.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td><td>Ce diagramme de flots de données représente le fonctionnement de la fonctionnalité «<strong>Mode Manuel</strong>» en expliquant de manière générale le fonctionnement du contrôle du robot 3 axes (via un Joystick) ainsi que de l’affichage des données.</td></tr></tbody></table></figure>



<h5 class="wp-block-heading">Mode Automatique</h5>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td>Ce diagramme de flots de données représente le fonctionnement de la fonctionnalité «<strong>Mode Automatique</strong>» en expliquant de manière générale le fonctionnement du contrôle du robot 3 axes ainsi que de l’affichage des données.</td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="382" class="wp-image-4104" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_010_Configuration.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_010_Configuration.jpg 830w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_010_Configuration-300x209.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_010_Configuration-768x534.jpg 768w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>



<h6 class="wp-block-heading">Synchronisation</h6>



<p class="wp-block-paragraph">Pour pouvoir réaliser l’acquisition suivant le mode de balayage automatique, nous devons réaliser une synchronisation entre ces deux fonctionnalités. Nous avons donc choisie de faire une synchronisation de type logicielle. C’est-à-dire que nous allons laisser le programme faire des acquisitions en continue. Mais si la position retournée par le Charly Robot est différente de la position actuelle, alors nous enregistrons la valeur acquise.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="984" height="616" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_011_Synchronisation.jpg" alt="" class="wp-image-4105" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_011_Synchronisation.jpg 984w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_011_Synchronisation-300x188.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_011_Synchronisation-768x481.jpg 768w" sizes="auto, (max-width: 984px) 100vw, 984px" /></figure>
</div>


<p class="wp-block-paragraph">Nous avons représenté à travers ce diagramme d’activité le fonctionnement général de notre application logicielle.&nbsp; Nous avons trois activités distinctes, qui sont les activités du Charly Robot 3 axes, les activités de l’application commandant le Charly Robot 3 axes et l’application qui commande l’acquisition.</p>



<p class="wp-block-paragraph">Nous démarrons les 3 activités en même temps.&nbsp;</p>



<p class="wp-block-paragraph">Dans un premier temps, nous allons initialiser le Charly Robot en générant une trame que nous allons envoyés. Le Charly Robot dés que celui-ci à été mis sous tension attend de recevoir une trame. Une fois cette trame reçue, il va exécuter la trame reçue. Si l’opération a échouée, le Charly Robot retourne un acknowledge d’erreur, à l’application commandant le Charly Robot. Celui ne peut continuer sans la réception de l’acquittement. Sinon, dans le cas où l’opération à réussi, le Charly Robot retournera un acknowledge valide.&nbsp;&nbsp;</p>



<p class="wp-block-paragraph">Auparavant, nous avons initialisé les paramètres d’acquisition. Puis l’on lance l’acquisition. Nous attentons l’acknowledge valide du Charly Robot pour valider l’acquisition des données. Puis, l’on enregistrera ces valeurs avant de recommencer l’opération c’est-àdire la réception d’un acquittement valide renvoyé par le Charly Robot.</p>



<h5 class="wp-block-heading">Consultation</h5>



<p class="wp-block-paragraph">Ce diagramme de flots de données représente le fonctionnement de la fonctionnalité «<strong>Consultation</strong>» en expliquant de manière générale le fonctionnement de la lecture et l’affichage du contenue des données sauvegardées.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="682" height="473" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_012_Consultation.jpg" alt="" class="wp-image-4106" style="width:420px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_012_Consultation.jpg 682w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_012_Consultation-300x208.jpg 300w" sizes="auto, (max-width: 682px) 100vw, 682px" /></figure>
</div>


<h3 class="wp-block-heading">Intégration Commune</h3>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="396" class="wp-image-4107" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_013_IC.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_013_IC.jpg 852w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_013_IC-300x216.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_013_IC-768x553.jpg 768w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td><td><strong><u>Légende :</u></strong><br><strong>&nbsp;</strong><br>&nbsp;<br>En <strong><mark style="background-color:rgba(0, 0, 0, 0);color:#2f9c30" class="has-inline-color">vert</mark></strong> les fonctionnalités développées par l’étudiant 1 : Robin GRIVET<br>&nbsp;<br>En <strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-12-color">bleu</mark></strong> les fonctionnalités développées par l’étudiant 2 : Erwan GUILLEMARD<br>&nbsp;<br>En<mark style="background-color:rgba(0, 0, 0, 0);color:#f3f70c" class="has-inline-color"> <strong>jaune</strong></mark> les fonctionnalités principales de l’application<br>&nbsp;<br>En <mark style="background-color:rgba(0, 0, 0, 0);color:#f7a1a1" class="has-inline-color"><strong>rose</strong> </mark>: L’Application Générale<br>&nbsp;<br>En <strong><mark style="background-color:rgba(0, 0, 0, 0);color:#ecd2b7" class="has-inline-color">saumon</mark></strong> la fonctionnalité de navigation de l’application générale.</td></tr></tbody></table></figure>



<h4 class="wp-block-heading">Développement</h4>



<h5 class="wp-block-heading">Interface</h5>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="845" height="564" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_014_Interface_0.jpg" alt="" class="wp-image-4110" style="aspect-ratio:1.4982622959935497;width:596px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_014_Interface_0.jpg 845w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_014_Interface_0-300x200.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_014_Interface_0-768x513.jpg 768w" sizes="auto, (max-width: 845px) 100vw, 845px" /></figure>
</div>


<p class="wp-block-paragraph">Voici le prototype de l’interface de notre application. La navigation dans cette application se passe sur une seule fenêtre. Nous avons caché les onglets de navigation, et choisie de naviguer dans l’interface à partir des boutons en haut de la fenêtre.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="842" height="52" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_014_Interface_1.jpg" alt="" class="wp-image-4111" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_014_Interface_1.jpg 842w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_014_Interface_1-300x19.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_014_Interface_1-768x47.jpg 768w" sizes="auto, (max-width: 842px) 100vw, 842px" /></figure>
</div>


<p class="wp-block-paragraph">En sélectionnant l’un des boutons, nous allons changer d’onglet. Il en est de même pour les sous onglets de navigation, mais nous ne jugeons pas nécessaire de s’étendre sur ce point car la méthode de navigation est la même.</p>



<h5 class="wp-block-heading">Mode User/Admin : Navigation</h5>



<p class="wp-block-paragraph">Comme dis plus haut, nous proposons un mode supplémentaire au cahier des charges. Nous voulons créer un mode utilisateur qui aurait accès a toutes les fonctionnalités décrites dans le cahier des charges, et créer un mode administrateur qui lui aurait accès à un onglet en plus, l’onglet OPTIONS <strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-13-color">il faut donc l’appeler autrement (voir commentaire plus haut)</mark></strong>.</p>



<p class="wp-block-paragraph">Le contenu de cet onglet permet d’avoir accès à un affichage plus poussé et qui n’est pas nécessaire pour l’utilisateur. De plus, l’administrateur à la possibilité de configurer des paramètres de base de l’application auxquels l’utilisateur n’a pas l’utilité d’y avoir accès.&nbsp;</p>



<p class="wp-block-paragraph">C’est sur l’onglet ACCEUIL de notre application que nous sélectionnons le mode d’utilisation. Par défaut, le mode de connexion est paramétré pour se lancer en mode&nbsp; « <strong>USER</strong> ». Pour changer de mode d’utilisation, il suffit de sélectionner le mode « <strong>Administrateur</strong> ». Un mot de passe est alors demandé. Si l’identification de marche pas, « <strong>l’Accès est refusé </strong>». Si l’identification est valide, « <strong>l’Accès est autorisé </strong>». Le mot de passe est <strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-13-color">password</mark></strong>.</p>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="237" class="wp-image-4113" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_015_Navigatyion_0.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_015_Navigatyion_0.jpg 444w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_015_Navigatyion_0-300x129.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="248" class="wp-image-4114" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_015_Navigatyion_1.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_015_Navigatyion_1.jpg 420w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_015_Navigatyion_1-300x135.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>



<p class="wp-block-paragraph">Au début, nous effectuons une identification avec une structure conditionnelle. Se qui se traduirait en langage C par un Switch case. Nous avons attribué la valeur de <strong>0</strong> pour l’identifiant <strong>Utilisateur</strong>, et <strong>1</strong> pour l’identifiant <strong>Administrateur</strong>.</p>



<p class="wp-block-paragraph">L’on récupère l’état des boutons pour pouvoir savoir qu’elle onglet faire apparaitre. Nous utilisons ensuite un nœud de méthode du conteneur&nbsp; <strong>MenuPrincipal </strong>qui va par la suite nous permettre dans le cas d’un accès autorisé de faire apparaitre le sixième onglet du conteneur MenuPrincipal par l’utilisation d’un nœud de propriété en rendant le bouton visible et en autorisant l’accès à cette onglet&nbsp; « <strong>OPTIONS</strong> ».</p>



<p class="wp-block-paragraph">Le code dans le cas ou l’identifiant choisie est Utilisateur, nous masquons avec les nœuds de méthodes et de propriété l’onglet « <strong>OPTIONS</strong> » ainsi que le champ demandant le mot de passe et le bouton pour soumettre l’accès. Cependant, la navigation des onglets ne change pas.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="1002" height="704" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_015_Navigatyion_3.jpg" alt="" class="wp-image-4115" style="aspect-ratio:1.4233115871213122;width:561px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_015_Navigatyion_3.jpg 1002w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_015_Navigatyion_3-300x211.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_015_Navigatyion_3-768x540.jpg 768w" sizes="auto, (max-width: 1002px) 100vw, 1002px" /></figure>
</div>


<h3 class="wp-block-heading">Conclusion</h3>



<p class="wp-block-paragraph">Pour parfaire cette partie commune, nous pouvons donc dire que la quasi-totalité du projet qui nous à été donné à été réalisé. Nous avons seulement quelques fonctionnalités qui ne sont pas complètes.&nbsp;</p>



<p class="wp-block-paragraph">La partie <strong>Synchronisation</strong> est en cours de recherche et nous à posé et nous pose encore des problèmes.</p>



<p class="wp-block-paragraph">Pour ce qui est du <strong>Mode Automatique</strong>, il reste seulement à intégrer le code des capteurs fin de course du Charly Robot 3 axes.&nbsp;</p>



<p class="wp-block-paragraph">Le <strong>Mode Manuel</strong> est incomplet car nous ne traitons pas le positionnement du capteur Z pour contrôler le lift-off du capteur GMI. La fonction d’<strong>Acquisition</strong> est elle non complète du fait du problème d’interface de connexion entre la carte d’acquisition 6251 et l’oscilloscope 5112.</p>



<p class="wp-block-paragraph">Et la fonctionnalité du <strong>Capteur Z</strong> n’est pas complète, car l’on ne contrôle pas le positionnement de l’axe Z en fonction du lift-off souhaité pour le capteur GMI.</p>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="497" class="wp-image-4116" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_016_Conclusion_0.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_016_Conclusion_0.jpg 742w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_016_Conclusion_0-300x271.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td><td><img loading="lazy" decoding="async" width="550" height="236" class="wp-image-4117" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_016_Conclusion_1.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_016_Conclusion_1.jpg 829w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_016_Conclusion_1-300x129.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_016_Conclusion_1-768x330.jpg 768w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>



<h2 class="wp-block-heading">Partie Individuelle : Travail Réalisé par GRIVET Robin</h2>



<h3 class="wp-block-heading">Analyse des Fonctionnalités</h3>



<p class="wp-block-paragraph">Pour pouvoir réaliser le déplacement du capteur magnétique<strong> </strong>(GMI : Giant Magneto Impédance), nous devons détacher les différentes fonctionnalités composant le système.</p>


<div class="kb-table-container kb-table-container4072_abe10c-2c wp-block-kadence-table"><table class="kb-table kb-table4072_abe10c-2c">
<tr class="kb-table-row kb-table-row4072_7845ec-13">
<td  class="kb-table-data kb-table-data4072_520498-63">

<p class="wp-block-paragraph">Je devrais réaliser les fonctions permettant le pilotage du robot, ainsi que son contrôle visuel :</p>



<ul class="wp-block-list">
<li><strong>Pilotage manuel du robot</strong>
<ul class="wp-block-list">
<li>Ce mode permet le déplacement du robot à partir d’un joystick</li>



<li>Il permet d’optimiser les paramètres du robot et a terme d’améliorer les acquisitions automatique</li>
</ul>
</li>



<li><strong>Scan magnétique automatique</strong>
<ul class="wp-block-list">
<li>Le scan sera effectué de façon automatique à partir des paramètres du mode manuel.</li>



<li>Les paramètres d’acquisition seront enregistrés dans un fichier XML (Etudiant 2) afin de garder une trace des paramètres de chaque acquisition.</li>
</ul>
</li>



<li><strong>Contrôle visuel caméra</strong>
<ul class="wp-block-list">
<li>Le contrôle visuel permettra de contrôler les déplacements du robot depuis le poste utilisateur.</li>



<li>Il sera possible de mettre en pause l’acquisition d’image.</li>
</ul>
</li>



<li><strong>Acquisition Distance Z et fin de course</strong>
<ul class="wp-block-list">
<li>Distance Z : L’acquisition du lift-off (distance entre le capteur et la pièce à scanner) sera nécessaire pour éviter la collision entre le capteur et la cible, ainsi que pour modifier la précision des acquisitions du capteur GMI.</li>



<li>Les capteurs fins de course seront utilisés pour protéger le robot : ils permettront d’avoir un contrôle logiciel des dépassements de la zone de déplacement du robot.</li>
</ul>
</li>
</ul>

</td>

<td  class="kb-table-data kb-table-data4072_a72561-f6">

<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="978" height="621" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_003_BF.jpg" alt="" class="wp-image-4087" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_003_BF.jpg 978w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_003_BF-300x190.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_003_BF-768x488.jpg 768w" sizes="auto, (max-width: 978px) 100vw, 978px" /></figure>

</td>
</tr>
</table></div>


<p class="wp-block-paragraph">Les capteurs fins de course seront utilisés pour protéger le robot : ils permettront d’avoir un contrôle logiciel des dépassements de la zone de déplacement du robot.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="776" height="149" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_000.jpg" alt="" class="wp-image-4121" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_000.jpg 776w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_000-300x58.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_000-768x147.jpg 768w" sizes="auto, (max-width: 776px) 100vw, 776px" /></figure>
</div>


<ul class="wp-block-list">
<li><strong><span style="text-decoration: underline;">Convertisseur 24V to 5V :</span></strong>&nbsp;Permet de réaliser l’alimentation de la carte interface des capteurs (Z et fin de course) en 5V depuis une alimentation 24V afin de réaliser l’acquisition des tensions des capteurs.</li>



<li><span style="text-decoration: underline;"><strong>Webcam :</strong></span> Permet l’acquisition d’images pour le contrôle visuel</li>



<li><span style="text-decoration: underline;"><strong>Joystick :</strong></span> Permet de faire l’acquisition des mouvements de l’utilisateur pour ensuite piloter le robot manuellement.</li>



<li><span style="text-decoration: underline;"><strong>Capteur de position optique :</strong></span> Permet de mesurer la distance entre le capteur GMI et la cible à analyser. Il sera utilisé pour la sécurité du robot et pour paramétrer les acquisitions.</li>



<li><span style="text-decoration: underline;"><strong>Interrupteur fin de course :</strong></span> Permet d’acquérir des signaux correspondant à un dépassement de la table du robot et à termes permettront de mettre hors tension le nouveau contrôleur du robot.</li>
</ul>



<h4 class="wp-block-heading">Pilotage manuel du Robot</h4>


<div class="kb-table-container kb-table-container4072_34b9ed-14 wp-block-kadence-table"><table class="kb-table kb-table4072_34b9ed-14">
<tr class="kb-table-row kb-table-row4072_8b35f5-13">
<td  class="kb-table-data kb-table-data4072_e1608b-b2">

<p class="wp-block-paragraph">Nous disposons d’un robot Charly pilotable sur 3axes. Il est alimenté par un module de puissance qui traduira les<br>commandes de l’utilisateur pour les&nbsp; moteurs pas à pas du robot. Le module est piloté par des trames de chaines de caractères via RS232.<br>&nbsp;<br>&nbsp;<br>&nbsp;&nbsp; Pour acquérir les déplacements que l’utilisateur désire réaliser, Nous devrons acquérir les données d’un joystick, pour ensuite traduire celles-ci en commande pour le robot.<br>&nbsp;</p>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="145" height="184" class="wp-image-4123" style="width: 145px;" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_002.jpg" alt=""></td><td><span style="text-decoration: underline;">Logitech Attack 3</span><br>&nbsp;<br>11 Boutons programmables<br>USB<br>Faible coût (30€)</td></tr></tbody></table></figure>

</td>

<td  class="kb-table-data kb-table-data4072_41694a-42">

<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="403" height="478" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_001.jpg" alt="" class="wp-image-4122" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_001.jpg 403w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_001-253x300.jpg 253w" sizes="auto, (max-width: 403px) 100vw, 403px" /></figure>

</td>
</tr>
</table></div>


<h4 class="wp-block-heading">Scan magnétique automatique</h4>



<p class="wp-block-paragraph">Ce scan devra permettre l’acquisition d’une cible de façon totalement autonome. L’utilisateur devra auparavant utiliser le mode manuel afin de paramétrer l’acquisition automatique.&nbsp; Pour cela, il faudra choisir plusieurs paramètres :</p>



<ul class="wp-block-list">
<li>La distance Z entre le capteur et la cible</li>



<li>Le pas de déplacement du robot (résolution)</li>



<li>Un point de référence</li>



<li>La surface de la zone à scanner</li>
</ul>



<p class="wp-block-paragraph">Le mode manuel permettra à l’utilisateur de définir et d’optimiser ses paramètres. Plusieurs mesures pourront être effectuées pour être ensuite comparer. On déduira ainsi les meilleurs paramètres de l’acquisition pour la cible en question, dans le but d’améliorer la rapidité entre chaque acquisition.</p>



<p class="wp-block-paragraph">Le scan va suivre une séquence de déplacement de type balayage :</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="755" height="308" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_003.jpg" alt="" class="wp-image-4125" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_003.jpg 755w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_003-300x122.jpg 300w" sizes="auto, (max-width: 755px) 100vw, 755px" /></figure>
</div>


<h4 class="wp-block-heading">Contrôle visuel caméra</h4>



<p class="wp-block-paragraph">L’utilisateur disposera d’un contrôle visuel en temps réel sur le robot grâce à une caméra. Celle-ci permettra de contrôler les déplacements depuis le poste de commande des l’utilisateur en mode manuel. Ce contrôle permet également de surveiller le bon déroulement des acquisitions avec une certaine distance de sécurité entre le poste de contrôle le banc d’acquisition (Dans le&nbsp; cas de matériaux dangereux par exemple).</p>



<p class="wp-block-paragraph">Ce contrôle sera effectué avec les fonctions activeX ainsi qu’avec un programme de traitement vidéo compatible avec activeX. Nous avons donc choisi VLC 1.0.1 car la dernière version de ce logiciel pose des problèmes de compatibilité avec le plugin activeX. L’acquisition des images ce fera de façon permanente et ce dès le lancement du programme. Il sera possible de mettre en pause l’acquisition, et également de la relancer.</p>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="132" height="191" class="wp-image-4126" style="width: 132px;" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_004.jpg" alt=""></td><td>Hercules Classic Silver<br>&nbsp;<br>30 Images par seconde<br>Résolution vidéo 800&#215;600<br>Pince de fixation<br>Faible coût (20€)<br>&nbsp;<br>La qualité de l’image n’étant pas la priorité de notre contrôle, nous avons donc choisi une webcam bon marché.</td></tr></tbody></table></figure>



<h4 class="wp-block-heading">Acquisition distance Z et fin de course</h4>



<p class="wp-block-paragraph">Nous disposons d’un capteur de type analogique sur l’axe Z, afin d’éviter que le capteur GMI entre en collision avec la cible à analyser ce capteur permettra de contrôler le lift-off. Pour faire l’acquisition de ce capteur, je devrai réaliser une carte d’interface. </p>



<p class="wp-block-paragraph">Elle permet l’acquisition :</p>



<ul class="wp-block-list">
<li>D’une tension analogique 0-3V du capteur Z</li>



<li>De 4 tensions logiques 0-5V des capteurs de fin de course</li>
</ul>



<p class="wp-block-paragraph">Les capteurs de fin de course tout-ou-rien (TOR<sup data-fn="9a936232-8b62-4dfb-a756-2a5bd30b3b7a" class="fn"><a href="#9a936232-8b62-4dfb-a756-2a5bd30b3b7a" id="9a936232-8b62-4dfb-a756-2a5bd30b3b7a-link">15</a></sup>) sont disposé sur le robot de façon à traduire un dépassement sur les axes X et Y (min et max). Nous ferons ensuite l’acquisition de ses tensions avec la carte SCB68 afin de les faire intervenir dans le programme.</p>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="150" height="116" class="wp-image-4128" style="width: 150px;" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_005.jpg" alt=""><br>Interrupteur fin de course</td><td><strong><span style="text-decoration: underline;">Panasonic AZ7100</span></strong><br>&nbsp;<br>Grande résistance aux chocs<br>Faible coût (8€)<br>&nbsp;<br>Les capteurs de fin de course on été choisie selon un critère de solidité afin que les déplacements du robot n’endommage pas les capteurs.</td></tr><tr><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="150" height="129" class="wp-image-4129" style="width: 150px;" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_006.jpg" alt=""><br>Capteur distance Z</td><td><strong><span style="text-decoration: underline;">Capteur optique Sharp</span></strong><br>&nbsp;<br>Plage de mesure ( 20 à 150cm )<br>Sortie analogique<br>Résolution : ± 1mm<br>Tension d’alimentation : 5V<br>&nbsp;<br>Nous avons choisi ce capteur car utilise une technologie compatible avec nôtre projet (Optique).<br>Il dispose d’une plage de mesure assez courte, qui correspond a notre besoin, ainsi qu’une bonne résolution.&nbsp;</td></tr><tr><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="150" height="137" class="wp-image-4130" style="width: 150px;" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_007.jpg" alt=""></td><td><strong><span style="text-decoration: underline;">Caractéristique de la carte :</span></strong><br>&nbsp;<br>Résolution 16 bits<br>16 voix analogiques/8 voix différentielles<br>Echantillonnage 1,25 M/s<br>&nbsp;<br>Cette carte sera intégrée dans le PXI afin de faire l’acquisition de la carte scb-68.</td></tr><tr><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="150" height="154" class="wp-image-4131" style="width: 150px;" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_008.jpg" alt=""><br>SCB-68</td><td><strong><span style="text-decoration: underline;">Caractéristique de l’interface de connexion :</span></strong><br> <br>Communication I/O<sup data-fn="c92959a2-77ba-4fa0-a36b-1846ebd9ae60" class="fn"><a href="#c92959a2-77ba-4fa0-a36b-1846ebd9ae60" id="c92959a2-77ba-4fa0-a36b-1846ebd9ae60-link">16</a></sup> 68 broches<br>Un capteur de température<br>5 Switches<br>Compatible RSE<sup data-fn="be02cf0a-23da-4ccf-a4d8-f32ab5582dfc" class="fn"><a href="#be02cf0a-23da-4ccf-a4d8-f32ab5582dfc" id="be02cf0a-23da-4ccf-a4d8-f32ab5582dfc-link">17</a></sup> / Différentiel<br> <br>L’acquisition des tensions des capteurs (Z et fin de course) sera réalisée grâce à la carte d’acquisition scb-68.</td></tr></tbody></table></figure>



<h3 class="wp-block-heading">Codage des différentes fonctionnalités : Sous VI</h3>



<p class="wp-block-paragraph">Pour réaliser les différentes fonctions, nous devrons coder un programme Labview.</p>



<p class="wp-block-paragraph">J’utiliserai dans un premier temps une version antérieure (7.2, faute de licence 8.0 sur les postes de développement) pour développer mes prototypes.</p>



<p class="wp-block-paragraph">Ces prototypes ont pour but de prendre en main le logiciel de codage ainsi que ses nombreuses fonctions, mais également de mieux ce représenter comment réaliser les différentes fonctions pour optimiser chaque partie de code.</p>



<h4 class="wp-block-heading">Mode Manuel</h4>



<h5 class="wp-block-heading">Acquisition joystick</h5>



<p class="wp-block-paragraph">Dans cette partie, nous devrons réaliser l’acquisition des données du joystick afin de retranscrire son mouvement pour le robot. Nous ferons l’acquisition des boutons du joystick ainsi que ses 3 axes :</p>



<ul class="wp-block-list">
<li>Les 2 axes du manche représenteront les déplacements du robot sur les deux mêmes axes (XY).</li>



<li>De l’axes Z (roulette), Qui sera utiliser pour modifier la temporisation d’envoie de trame.</li>



<li>Les boutons, auxquelles nous attribuons des fonctions utiles tel que :
<ul class="wp-block-list">
<li>L’initialisation des axes du robot</li>



<li>Le marquage d’un point de référence</li>



<li>Un retour à l’origine</li>



<li>Fonction&nbsp; d’envoie de trame manuelle.</li>
</ul>
</li>
</ul>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td><span style="text-decoration: underline;">Pour les axes :</span><br><strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-12-color">Integer</mark> </strong>: [-32768 | 32768]<br><br><span style="text-decoration: underline;">Pour les boutons :</span><br><strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-11-color">Bouléen</mark> </strong>: [0 | 1]</td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="413" class="wp-image-4132" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_009.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_009.jpg 883w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_009-300x225.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_009-768x577.jpg 768w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>



<h5 class="wp-block-heading">Communication RS232</h5>



<p class="wp-block-paragraph">Nous devrons réaliser un code permettant la communication entre le module de puissance (robot) et le pc de développement.</p>



<p class="wp-block-paragraph">Pour cela, Je suis parti d’un exemple donné dans labview, pour l’adapter à nos besoins. J’ai commencé par étudier le .vi exemple fournit avec labview, afin de comprendre son fonctionnement, et ainsi de récupérer les blocs fonctionnel dont nous avons besoin.</p>



<p class="wp-block-paragraph">Blocs utilisés :</p>


<div class="kb-table-container kb-table-container4072_e0db37-12 wp-block-kadence-table"><table class="kb-table kb-table4072_e0db37-12">
<tr class="kb-table-row kb-table-row4072_4be162-08">
<td  class="kb-table-data kb-table-data4072_07deb5-6f">

<p class="has-text-align-center wp-block-paragraph"><span style="text-decoration: underline;">Création Communication Série</span></p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="74" height="75" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_010.jpg" alt="" class="wp-image-4134"/></figure>
</div>
</td>

<td  class="kb-table-data kb-table-data4072_66f711-14">

<p class="wp-block-paragraph">Ce bloc correspond à la fonction qui va ouvrir la ligne série. On lui envoie les paramètres de communication :</p>



<p class="wp-block-paragraph"></p>



<ul class="wp-block-list">
<li>Parité &#8211; taille buffer &#8211; Bit de stop &#8211; bit de donnée &#8211; débit en baud</li>
</ul>



<p class="wp-block-paragraph">On peut désormais utiliser les fonctions série – Sortie d’erreur</p>

</td>
</tr>

<tr class="kb-table-row kb-table-row4072_c2bf68-b7">
<td  class="kb-table-data kb-table-data4072_0c47ec-33">

<p class="has-text-align-center wp-block-paragraph"><span style="text-decoration: underline;">Envoie Série</span></p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="77" height="71" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_011.jpg" alt="" class="wp-image-4135"/></figure>
</div>
</td>

<td  class="kb-table-data kb-table-data4072_dc39d0-94">

<p class="wp-block-paragraph">Ce bloc permet l’envoie de caractères sur la ligne série. (Write)<br>On spécifie la ligne série utilisée et la chaîne à envoyer.<br>Sortie d’erreur</p>

</td>
</tr>

<tr class="kb-table-row kb-table-row4072_9a8c1e-15">
<td  class="kb-table-data kb-table-data4072_5a2903-4d">

<p class="has-text-align-center wp-block-paragraph"><span style="text-decoration: underline;">Réception Série</span></p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="50" height="55" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_012.jpg" alt="" class="wp-image-4136"/></figure>
</div>
</td>

<td  class="kb-table-data kb-table-data4072_1e5be0-bd">

<p class="wp-block-paragraph">Ce bloc réceptionne les caractères de la ligne série. (Read)<br>On lui indique la ligne série a lire et le nombre de caractère à récupérer.<br>On obtient le(s) caractère(s) en sortie, ainsi que la sortie d’erreur.</p>

</td>
</tr>
</table></div>


<p class="wp-block-paragraph">Une fois les blocs repérés, on crée un code simplifié avec les fonctions importantes afin d’alléger le code et de faciliter l’intégration avec les autres fonctions.</p>


<div class="kb-table-container kb-table-container4072_7d0388-24 wp-block-kadence-table"><table class="kb-table kb-table4072_7d0388-24">
<tr class="kb-table-row kb-table-row4072_d67ca7-08">
<td  class="kb-table-data kb-table-data4072_51e10e-24">

<p class="has-text-align-center wp-block-paragraph"><img loading="lazy" decoding="async" width="550" height="373" class="wp-image-4138" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_013.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_013.jpg 578w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_013-300x203.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></p>

</td>

<td  class="kb-table-data kb-table-data4072_ca3323-f9">

<p class="has-text-align-center wp-block-paragraph"><span style="text-decoration: underline;">Test unitaire :</span></p>



<p class="has-text-align-center wp-block-paragraph"><img loading="lazy" decoding="async" width="250" height="332" class="wp-image-4139" style="width: 250px;" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_014.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_014.jpg 285w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_014-226x300.jpg 226w" sizes="auto, (max-width: 250px) 100vw, 250px" /></p>

</td>
</tr>

<tr class="kb-table-row kb-table-row4072_3d32f8-56">
<td  class="kb-table-data kb-table-data4072_53aacc-5c">

<p class="wp-block-paragraph"><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-13-color"><strong><span style="text-decoration: underline;">En Rouge :</span></strong></mark> Les paramètres de la communication<br><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-11-color"><strong><span style="text-decoration: underline;">En Vert :</span></strong></mark> Spécifie un nom de ressource qui sera utilisé par les différentes fonctions de la ligne série<br><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-12-color"><strong><span style="text-decoration: underline;">En Bleu :</span></strong></mark> Affiche les informations circulant sur la ligne série</p>

</td>

<td  class="kb-table-data kb-table-data4072_482a79-b5">

<p class="wp-block-paragraph">On test la communication en envoyant une commande au robot, et on attend qu’il envoie une réponse<br>On constate qu’il nous répond « 0 » qui correspond à l’exécution avec succès de la commande.</p>

</td>
</tr>
</table></div>


<h5 class="wp-block-heading">Générateur de trame</h5>



<p class="wp-block-paragraph">Ce générateur de trame aura pour but de crée une trame de chaîne de caractère constituant une commande pour le robot. Nous réaliserons un générateur de trame suivant le modèle de la commande suivante :</p>



<p class="has-text-align-center has-small-font-size wp-block-paragraph"><strong><em>DistanceX | VitesseX | DistanceY | VitesseY | DistanceZ | VitesseZ | DistanceZ2 | VitesseZ2 | Fin trame</em></strong></p>



<p class="wp-block-paragraph">Cette commande (@0A) correspond a un déplacement relatif du robot, c’est-à-dire qu’il ce déplace suivant les mesures souhaitées à partir du point auquel il ce trouve. Le paramètre Z2 correspond au déplacement négatif en Z, c&rsquo;est-à-dire quand la tête dur robot remonte.<br>Ce paramètre peu être utile lorsque le robot est utilisée pour percer, ainsi on peut spécifier une vitesse de perçage différente de la vitesse de remonter de la perceuse. Cette option permet de gagner du temps lors de l’usinage. Nous n’aurons pas besoin d’exploiter cette fonction.</p>



<ul class="wp-block-list">
<li>Les variables DistanceX et DistanceY sont récupérées à partir de la position du manche du joystick. (On multipliera les valeurs acquises par un coefficient modifiable depuis l’interface).</li>



<li>La Distance Z sera définit manuellement dans l’interface, ou sera géré en fonction de la valeur du Capteur de distance optique sur l’axe Z.</li>



<li>La vitesse des axes est définit dans l’interface par l’utilisateur, elle sera la même pour tout les axes.
<ul class="wp-block-list">
<li><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-13-color">La vitesse de tous les axes (même Z2) doit être supérieure à 0, sinon la commande n’est pas validée.</mark></li>
</ul>
</li>
</ul>



<p class="wp-block-paragraph">On part d’une trame de base contenant la commande du robot en dur <mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-13-color">[1]</mark> pour ensuite concaténer les informations nécessaires.<br>Chaque séquence <mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-13-color">[2]</mark> correspond à une valeur (distance ou vitesse) convertie en chaîne de caractère puis concaténée avec la virgule qui sépare les différents champs.<br>On concatène ensuite les caractères CR<sup data-fn="28883047-f158-4409-ba73-e5098a14062a" class="fn"><a href="#28883047-f158-4409-ba73-e5098a14062a" id="28883047-f158-4409-ba73-e5098a14062a-link">18</a></sup> (Carriage Return) et LF<sup data-fn="cfac67e8-0f30-415b-911c-c0bed686d2ae" class="fn"><a href="#cfac67e8-0f30-415b-911c-c0bed686d2ae" id="cfac67e8-0f30-415b-911c-c0bed686d2ae-link">19</a></sup> (Line Feed) pour achever la trame <mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-13-color">[3]</mark>.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="903" height="335" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_015.jpg" alt="" class="wp-image-4141" style="aspect-ratio:2.6956130258616375;width:647px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_015.jpg 903w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_015-300x111.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_015-768x285.jpg 768w" sizes="auto, (max-width: 903px) 100vw, 903px" /></figure>
</div>


<p class="wp-block-paragraph">On obtient une chaîne de caractère correspondant à un déplacement relatif du robot qui prête à lui être envoyé.</p>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td><img loading="lazy" decoding="async" width="550" height="215" class="wp-image-4143" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_016.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_016.jpg 442w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_016-300x117.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td><td>On réalise ensuite un test.<br>&nbsp;<br>On entre les paramètres, et on essaye de créer la trame.&nbsp;<br>On constate que la trame correspond aux paramètres choisi, la fonction est donc réalisée avec succès.</td></tr></tbody></table></figure>



<h5 class="wp-block-heading">Intégration des prototypes</h5>



<p class="wp-block-paragraph">Une fois les 3 fonctions de base réalisée, on va fusionner les codes afin d’obtenir un programme permettant le déplacement du robot par le joystick.</p>



<p class="wp-block-paragraph">On commence par faire l’acquisition du joystick, et on convertie la valeur des axes X et Y pour créer les trames. Les valeurs sont ensuite récupérer pour créer les trames avec le générateur.</p>



<p class="wp-block-paragraph">On crée ensuite une condition, si on appuie sur la gâchette du joystick, on rentre dans la boucle de condition qui contient la fonction d’envoie et de réception série. Ainsi, à chaque appuie de gâchette, on envoie une trame de déplacement correspondant à la position du joystick au moment de l’appuie et on récupère ensuite la réponse du robot.</p>


<div class="kb-table-container kb-table-container4072_e90598-b5 wp-block-kadence-table"><table class="kb-table kb-table4072_e90598-b5">
<tr class="kb-table-row kb-table-row4072_330827-ff">
<td  class="kb-table-data kb-table-data4072_547b0f-86">

<p class="wp-block-paragraph">En <mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-13-color">Rouge</mark> : Les paramètres de la communication série</p>



<p class="wp-block-paragraph">En <mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-1-color">Jaune</mark> : Les données circulant sur la ligne</p>



<p class="wp-block-paragraph">En <mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-11-color">Vert</mark> : Les données du joystick</p>



<p class="wp-block-paragraph">En <mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-12-color">Bleu</mark> : Paramètres déplacement et info programme :</p>



<ul class="wp-block-list">
<li><strong><span style="text-decoration: underline;">PasZ :</span></strong> On définit la distance minimum parcourue en Z</li>



<li><strong><span style="text-decoration: underline;">Coefficient :</span></strong> Modifie la distance à parcourir par rapport a la position du joystick</li>



<li><strong><span style="text-decoration: underline;">VitesseCharly :</span></strong> Modifie la vitesse de déplacement du robot sur les 3 axes.</li>



<li><strong><span style="text-decoration: underline;">Y Axis et X Axis :</span></strong> Position actuel du joystick (Int) • Tempo mS : Temps minimum entre chaque envoie de trame.</li>
</ul>

</td>

<td  class="kb-table-data kb-table-data4072_957398-12">

<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="956" height="575" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_017.jpg" alt="" class="wp-image-4144" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_017.jpg 956w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_017-300x180.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_017-768x462.jpg 768w" sizes="auto, (max-width: 956px) 100vw, 956px" /></figure>

</td>
</tr>
</table></div>


<p class="wp-block-paragraph">On test ensuite l’intégration des partie, on branche le joystick, et on essaye de déplacer le robot. Le test est un succès, le robot ce déplace suivant les instructions de l’utilisateur via le joystick.</p>



<h4 class="wp-block-heading">Mode automatique</h4>



<p class="wp-block-paragraph">Pour réaliser la séquence d’acquisition, il faut :</p>



<ul class="wp-block-list">
<li>La communication avec le robot</li>



<li>La séquence de déplacement</li>
</ul>



<p class="wp-block-paragraph">Le programme est composé en deux grandes parties exécutées successivement :</p>



<ul class="wp-block-list">
<li>La première partie qui consiste à initialiser la communication RS232 entre le PC et le robot et à réinitialiser les variables du programme pour recommencer un balayage.</li>



<li>Dans la seconde partie, On génère les trames nécessaires pour le balayage, puis ses trames seront envoyées de façon à décrire le plan de déplacement.</li>
</ul>



<p class="wp-block-paragraph"><span style="text-decoration: underline;">Boucle séquentielle principale :</span></p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="822" height="165" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_018.jpg" alt="" class="wp-image-4146" style="aspect-ratio:4.982035928143713;width:563px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_018.jpg 822w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_018-300x60.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_018-768x154.jpg 768w" sizes="auto, (max-width: 822px) 100vw, 822px" /></figure>
</div>


<h5 class="wp-block-heading">Initialisation communication série</h5>



<p class="wp-block-paragraph">Pour réaliser la communication, on commence par initialiser la liaison série :</p>



<ul class="wp-block-list">
<li><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-13-color">En rouge :</mark> On crée la liaison série avec le numéro de port.</li>



<li><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-11-color">En vert :</mark> Paramètres pour la configuration de la liaison.</li>



<li><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-12-color">En bleu :</mark> Initialisation des variables local pour la suite de la séquence.</li>
</ul>



<ol class="wp-block-list">
<li>On récupère les paramètres de l’utilisateur pour paramétrer la communication
<ul class="wp-block-list">
<li>Numéro de port – Vitesse de transmissions &#8211; Bits de données – Parité – Bits de stop – taille du buffer</li>
</ul>
</li>



<li>On utilise un nœud de propriété pour modifier les paramètres (le contrôle de flot de donnée)</li>



<li>On indique la taille du buffer pour la réception.</li>
</ol>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="781" height="480" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_019.jpg" alt="" class="wp-image-4147" style="width:670px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_019.jpg 781w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_019-300x184.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_019-768x472.jpg 768w" sizes="auto, (max-width: 781px) 100vw, 781px" /></figure>
</div>


<h5 class="wp-block-heading">Envoie des trames &#8211; Réalisation du balayage</h5>



<p class="wp-block-paragraph">Une fois la liaison établie, on peut envoyer les commandes au robot. Pour envoyer les trames, on utilisera toujours la même structure :</p>



<ul class="wp-block-list">
<li>Boucle séquentielle : Envoie de la trame, puis réception de la réponse du robot.</li>
</ul>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td>Pour communiquer sur la liaison série, on utilise les fonctions VISA :<br><br>Ces blocs fonctionnels sont comparables à des drivers et permettent de réaliser des fonctions de base sur un même matériel. On commence par ouvrir une session sur le périphérique spécifié par Nom de ressource VISA (input refnum) et la fonction renvoie un identificateur de session qui sera récupérer par les différentes fonctions afin d’agir sur le même périphérique.</td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="350" height="354" class="wp-image-4150" style="width: 350px;" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_020.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_020.jpg 695w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_020-297x300.jpg 297w" sizes="auto, (max-width: 350px) 100vw, 350px" /></td></tr></tbody></table></figure>



<p class="wp-block-paragraph">Le programme de déplacement est composé de 2 parties :</p>



<ul class="wp-block-list">
<li>Balayage de la zone (1 à 4)</li>



<li>Fin de balayage et retour a l’origine (5 et 6)</li>
</ul>


<div class="kb-table-container kb-table-container4072_bc3637-7c wp-block-kadence-table"><table class="kb-table kb-table4072_bc3637-7c">
<tr class="kb-table-row kb-table-row4072_6b185c-68">
<td  class="kb-table-data kb-table-data4072_dfdb38-32">

<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="297" height="268" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_021.jpg" alt="" class="wp-image-4151"/></figure>

</td>

<td  class="kb-table-data kb-table-data4072_9baf5a-2e">

<p class="has-text-align-center wp-block-paragraph">L’envoie des trames réalise le déplacement ci-contre. Le<br>principe est de répéter cette séquence jusqu’à atteindre la</p>



<p class="has-text-align-center wp-block-paragraph">valeur maximal sur l’axe Y.</p>



<p class="has-text-align-center wp-block-paragraph">On ajoute donc une condition à la suite de ses 4 trames :</p>



<p class="wp-block-paragraph"><br>Si « DistanceActuelY = DistanceY »<br>    Faire « Envoie trame fin de séquence »<br>    Faire « Envoie trame retour origine »<br>Sinon<br>    Recommencer la séquence</p>

</td>
</tr>

<tr class="kb-table-row kb-table-row4072_83890a-a1">
<td  class="kb-table-data kb-table-data4072_274eff-81">
<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="143" height="227" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_022.jpg" alt="" class="wp-image-4152" style="width:179px;height:auto"/></figure>
</div>
</td>

<td  class="kb-table-data kb-table-data4072_cdd081-f2">

<p class="has-text-align-center wp-block-paragraph">Une fois la distance maximal en Y atteinte,<br>on considère que la séquence est terminée, il ne reste plus<br>qu’a envoyer la dernière trame (Flèche bleu) qui finira le</p>



<p class="has-text-align-center wp-block-paragraph">balayage.</p>



<p class="has-text-align-center wp-block-paragraph">Cette dernière trame est la même que celle utilisé<br>précédemment pour l’incrémentation X (Flèche noir), On<br>reprend donc la même trame, que nous devrons envoyé le<br>même nombre de fois, afin de décrire le même déplacement.<br>Puis la trame de retour a l’origine du balayage, afin de</p>



<p class="has-text-align-center wp-block-paragraph">recommencer l’opération.</p>

</td>
</tr>
</table></div>

<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="767" height="205" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_023.jpg" alt="" class="wp-image-4153" style="width:700px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_023.jpg 767w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_023-300x80.jpg 300w" sizes="auto, (max-width: 767px) 100vw, 767px" /></figure>
</div>

<div class="kb-table-container kb-table-container4072_07bc9e-26 wp-block-kadence-table"><table class="kb-table kb-table4072_07bc9e-26">
<tr class="kb-table-row kb-table-row4072_158230-26">
<td  class="kb-table-data kb-table-data4072_80faf9-98">

<p class="has-text-align-center wp-block-paragraph"><strong>1 &#8211; Incrémentation X</strong></p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="340" height="291" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_024.jpg" alt="" class="wp-image-4156" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_024.jpg 340w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_024-300x257.jpg 300w" sizes="auto, (max-width: 340px) 100vw, 340px" /></figure>
</div>


<p class="wp-block-paragraph">1 : C’est le nombre de fois que la trame sera envoyée :<br>    On calcul cette valeur : </p>



<p class="has-text-align-center wp-block-paragraph">    NbrBoucleX = DistanceX / PasX</p>



<p class="has-text-align-left wp-block-paragraph"><br>2 : C’est le PasX définit par l’utilisateur. Il est utilisé ici pour créer la trame de déplacement. Une fois la boucle de répétition terminée, on peut en déduire qu’on a atteint la distance X maximum du balayage, on peut donc incrémenter Y.</p>

</td>

<td  class="kb-table-data kb-table-data4072_5c8410-a5">

<p class="has-text-align-center wp-block-paragraph"><strong>2 &#8211;</strong> <strong>Incrémentation Y</strong></p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="330" height="304" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_025.jpg" alt="" class="wp-image-4157" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_025.jpg 330w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_025-300x276.jpg 300w" sizes="auto, (max-width: 330px) 100vw, 330px" /></figure>
</div>


<p class="wp-block-paragraph">1 : C’est le PasY définit par l’utilisateur. Il est utilisé ici pour créer<br>la trame de déplacement.</p>



<p class="wp-block-paragraph"><br>Une fois l’incrémentation Y faite, on peut recommencer le  déplacement sur l’axe X mais il sera négatif afin de revenir à la<br>position initiale (sur l’axe X).</p>

</td>
</tr>

<tr class="kb-table-row kb-table-row4072_b55e57-39">
<td  class="kb-table-data kb-table-data4072_a4c2b1-2f">

<p class="has-text-align-center wp-block-paragraph"><strong>3 &#8211; Incrémentation -X</strong></p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="357" height="323" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_026.jpg" alt="" class="wp-image-4158" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_026.jpg 357w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_026-300x271.jpg 300w" sizes="auto, (max-width: 357px) 100vw, 357px" /></figure>
</div>


<p class="wp-block-paragraph">1 : C’est le nombre de fois que la trame sera envoyée :<br>On calcul cette valeur :</p>



<p class="has-text-align-center wp-block-paragraph">NbrBoucleX = DistanceX / PasX</p>



<p class="has-text-align-left wp-block-paragraph"><br>2 : C’est le PasX définit par l’utilisateur. Il est utilisé ici pour créer la trame de déplacement mais celle-ci doit être négative. On utilisera donc l’opposé de PasX pour créer la trame. Une fois la boucle de répétition terminée, on peut en déduire qu’on est revenu à la position X=0, on peut donc incrémenter Y.</p>

</td>

<td  class="kb-table-data kb-table-data4072_b4d071-8e">

<p class="has-text-align-center wp-block-paragraph"> <strong>4 &#8211;</strong> <strong>Incrémentation Y</strong></p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="352" height="193" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_027.jpg" alt="" class="wp-image-4159" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_027.jpg 352w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_027-300x164.jpg 300w" sizes="auto, (max-width: 352px) 100vw, 352px" /></figure>



<p class="wp-block-paragraph">On envoie a nouveau la trame d’incrémentation de l’axeY crée<br>précedement.</p>

</td>
</tr>
</table></div>

<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="492" height="296" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_028.jpg" alt="" class="wp-image-4161" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_028.jpg 492w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_028-300x180.jpg 300w" sizes="auto, (max-width: 492px) 100vw, 492px" /></figure>
</div>

<div class="kb-table-container kb-table-container4072_4c8150-6b wp-block-kadence-table"><table class="kb-table kb-table4072_4c8150-6b">
<tr class="kb-table-row kb-table-row4072_607d1c-53">
<td  class="kb-table-data kb-table-data4072_c6cd43-86">

<p class="has-text-align-center wp-block-paragraph"><strong>Test de fin de balayage</strong></p>



<p class="has-text-align-left wp-block-paragraph"><br>On ajoute donc le test après la séquence, qui permettra de valider<br>l’envoie de la dernière trame. Pour cela, à chaque déplacement Y, on<br>incrémente une variable ValeurBoucleY. On compare ensuite le<br>nombre de trames envoyées avec le nombre de trame à envoyer.</p>



<p class="has-text-align-center wp-block-paragraph"><br>(NbrBoucleY = DistanceY / PasY)</p>

</td>

<td  class="kb-table-data kb-table-data4072_beec2b-72">

<p class="has-text-align-center wp-block-paragraph"><strong>5 &#8211; Déplacement final</strong></p>



<p class="has-text-align-left wp-block-paragraph"><br>Lorsque cette condition est vraie, on sait qu’on a atteint le<br>Ymax et que la séquence est terminée.<br>La boucle de condition validée et la dernière trame envoyée.</p>

</td>
</tr>
</table></div>

<div class="kb-table-container kb-table-container4072_ae09bc-47 wp-block-kadence-table"><table class="kb-table kb-table4072_ae09bc-47">
<tr class="kb-table-row kb-table-row4072_0356ac-88">
<td  class="kb-table-data kb-table-data4072_063167-38">

<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="487" height="472" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_029.jpg" alt="" class="wp-image-4162" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_029.jpg 487w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_029-300x291.jpg 300w" sizes="auto, (max-width: 487px) 100vw, 487px" /></figure>

</td>

<td  class="kb-table-data kb-table-data4072_f2ea5c-2d">

<p class="wp-block-paragraph">Le balayage est réalisé, il ne reste plus qu’a revenir au point d’origine de<br>l’acquisition.<br>On sort de la boucle de balayage et on<br>réalise un dernier test pour envoyé la<br>commande de retour :</p>



<ul class="wp-block-list">
<li>Le balayage est terminé (PositionY&gt;distanceY ? = Fin)</li>



<li>Le programme n’est pas terminé<br>(BouclePrincipal)</li>
</ul>



<p class="wp-block-paragraph">La flèche correspond à un test :</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="218" height="196" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_030.jpg" alt="" class="wp-image-4163"/></figure>
</div>


<p class="wp-block-paragraph">L’envoie de la trame de retour est validé<br>lorsque le balayage est terminer, mais<br>pas la boucle principal.<br>On envoie la trame de retour, et on<br>modifie les variables afin que le<br>programme ce termine.</p>

</td>
</tr>

<tr class="kb-table-row kb-table-row4072_e06ad6-4c">
<td  class="kb-table-data kb-table-data4072_5f6178-89">

<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="480" height="422" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_031.jpg" alt="" class="wp-image-4164" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_031.jpg 480w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_031-300x264.jpg 300w" sizes="auto, (max-width: 480px) 100vw, 480px" /></figure>

</td>

<td  class="kb-table-data kb-table-data4072_cf8a29-9c">

<p class="wp-block-paragraph">L’interface du prototype :<br>Dans un premier temps on définit<br>les paramètres du balayage :</p>



<ul class="wp-block-list">
<li>La surface
<ul class="wp-block-list">
<li>DistanceX</li>



<li>DistanceY</li>
</ul>
</li>



<li>La résolution
<ul class="wp-block-list">
<li>PasX</li>



<li>PasY</li>
</ul>
</li>



<li>La vitesse de déplacement<br>du robot</li>



<li>La tempo
<ul class="wp-block-list">
<li>Temps entre chaque<br>envoie de trame</li>
</ul>
</li>
</ul>



<p class="wp-block-paragraph">Les paramètres Z ne sont pas<br>utilisés dans ce prototype.<br>Dans un second temps on affiche<br>des informations utiles au<br>déroulement du programme tel que<br>les trames qui vont être envoyées,<br>ou le nombre de boucle à effectuer.</p>

</td>
</tr>
</table></div>


<p class="wp-block-paragraph">Le programme est fait de telle façon que, lorsqu’on l’exécute, il réalise une séquence de déplacement avec retour à l’origine et prend fin (afin de faciliter l’intégration).</p>



<p class="wp-block-paragraph"><br>On fait ensuite un test unitaire pour de valider le déplacement du robot :<br>Pour ce faire, on fixe un marqueur à la place du capteur GMI, et on maintient une feuille de papier avec du scotch sur le plateau du robot. On démarre ensuite le balayage, et on vérifie si le chemin parcouru correspond à celui désiré.</p>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="406" class="wp-image-4165" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_032.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_032.jpg 367w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_032-300x222.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td><td class="has-text-align-center" data-align="center">On crée un graphe XY représentant le déplacement du robot<br><img loading="lazy" decoding="async" width="550" height="330" class="wp-image-4166" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_033.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_033.jpg 323w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_033-300x180.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /><br>On voit que les déplacements sont similaires.</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">Le 3eme essaie correspond bien au balayage demandé, le code est donc opérationnel, la fonction est validée.</p>



<h4 class="wp-block-heading">Contrôle visuel par webcam</h4>



<p class="wp-block-paragraph">Pour faire l’acquisition des images de la webcam, nous avons besoins d’un logiciel de traitement vidéo.<br>Pour ça, on utilise le logiciel VLC media player (Gratuit). Nous utilisons la version 1.0.1 car la dernière version (1.2) est incompatible avec le contrôle activeX. L’installation de ce logicielle est précisé dans la notice d’utilisation.<br>La webcam est disposée sur le robot afin d’avoir un contrôle visuel sur ses déplacements.<br>Le flux vidéo est acquis et affiché dans l’interface utilisateur. Ce contrôle permettra de garder un œil sur les déplacements du robot pendant un balayage afin de prévenir tout<br>incident.<br>Nous aurons donc besoin d’une webcam afin de faire l’acquisition des images. Le programme d’acquisition de la webcam ce compose en 2 parties exécutées successivement :</p>



<ul class="wp-block-list">
<li>Initialisation du contrôle ActiveX avec VLC et lancement acquisition</li>



<li>Arrêt acquisition</li>
</ul>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td>A l’origine, on crée un contrôle ActiveX vide.<br>On appel ensuite le programme d’acquisition vidéo souhaité.<br>Pour réaliser des modifications sur le contrôle ActiveX, on utilise des nœuds de propriétés permettant d’avoir accès aux propriétés et méthodes d’une application.<br>On indique au contrôle que nous allons utiliser le module VLC, avec le chemin local de la webcam.<br>On lance ensuite le mode « play », et on reste dans cette état jusqu&rsquo;à ce que l’utilisateur appuis sur le bouton.<br>Ce mode va faire l’acquisition des images et afficher celle-ci dans le contrôle ActiveX de<br>l’interface.</td><td>Si le bouton est enfoncé, on démarre la<br>deuxième partie de la séquence, et on<br>demande le mode « stop ».<br>L’acquisition de la webcam est alors<br>suspendue, et on reste dans cette état jusqu’au prochaine appuie sur le bouton Play/Pause.<br>Si on appuie à nouveau, on sort de la boucle et on ferme le contrôle ActiveX.</td></tr></tbody></table></figure>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="604" height="556" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_034.jpg" alt="" class="wp-image-4167" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_034.jpg 604w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_034-300x276.jpg 300w" sizes="auto, (max-width: 604px) 100vw, 604px" /></figure>
</div>


<h4 class="wp-block-heading">Acquisition du capteur Z et des capteurs fin de course</h4>



<p class="wp-block-paragraph">Nous avons fixé les capteurs de fin de course aux extrémités du robot ainsi que des butées réglables. Le capteur Z est amarré à la tête du robot, et pointe en direction du plateau.</p>


<div class="kb-table-container kb-table-container4072_d9f25e-25 wp-block-kadence-table"><table class="kb-table kb-table4072_d9f25e-25">
<tr class="kb-table-row kb-table-row4072_1fcf15-4d">
<td  class="kb-table-data kb-table-data4072_30dfa0-b1">

<p class="wp-block-paragraph">Nous disposons d’une alimentation 24V continu pour alimenter les capteurs.<br>Les fin de courses sont des interrupteurs, il n’y a donc pas de tension d’alimentation max.<br>Le capteur Z doit être alimenté en 5V pour fonctionner.<br><br>En <mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-11-color">Vert</mark> : Les capteurs fin de course<br>En <mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-13-color">Rouge</mark> : Le capteur Z<br>En <mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-12-color">Bleu</mark> : Les butées<br><br>La carte d’interface devra donc :</p>



<ul class="wp-block-list">
<li>Transformer le 24V en 5V</li>



<li>Faire l’acquisition de 4 tensions logique 0 ou 5V des fins de courses</li>



<li>Faire l’acquisition d’une tension analogique variant entre 0 et 3V correspondant à la distance Z</li>



<li>Avoir un minimum de sécurité (ajout d’un fusible)</li>
</ul>

</td>

<td  class="kb-table-data kb-table-data4072_fdfd3a-01">

<p class="wp-block-paragraph"><img loading="lazy" decoding="async" width="550" height="654" class="wp-image-4168" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_035.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_035.jpg 503w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_035-252x300.jpg 252w" sizes="auto, (max-width: 550px) 100vw, 550px" /></p>

</td>
</tr>
</table></div>


<p class="wp-block-paragraph"><span style="text-decoration: underline;">Choix des composants :</span></p>



<p class="wp-block-paragraph">On utilise des résistances (1.5Kohms) afin de fixé un faible courant :</p>



<figure class="wp-block-table has-small-font-size"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td class="has-text-align-center" data-align="center">U=RxI</td><td class="has-text-align-center" data-align="center">U=5V</td><td class="has-text-align-center" data-align="center">On prend des résistances 1.5Kohms.</td></tr><tr><td class="has-text-align-center" data-align="center">I=U/R</td><td class="has-text-align-center" data-align="center">I=5/1500</td><td class="has-text-align-center" data-align="center">I=33mA</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">  <br>On a donc un courant d’environ 33mA, ce qui est suffisant au fonctionnement, sans trop consommer d’énergie.<br>On dessine un schéma de la carte à réaliser (Le fusible n’apparaît pas, il sera a la sortie du convertisseur de tension)</p>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="316" class="wp-image-4169" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_036.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_036.jpg 598w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_036-300x173.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td><td class="has-text-align-center" data-align="center">On utilise un bornier faisant office d’entrée et sorties.<br>Câblage du bornier :<br><img loading="lazy" decoding="async" width="250" height="201" class="wp-image-4175" style="width: 250px;" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_039.jpg" alt=""></td></tr></tbody></table></figure>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="740" height="166" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_040.jpg" alt="" class="wp-image-4176" style="width:740px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_040.jpg 740w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_040-300x67.jpg 300w" sizes="auto, (max-width: 740px) 100vw, 740px" /></figure>
</div>


<p class="wp-block-paragraph">On réalise ensuite la carte, et on branche les capteurs afin d’effectuer des tests unitaires.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="594" height="361" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_037.jpg" alt="" class="wp-image-4170" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_037.jpg 594w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_037-300x182.jpg 300w" sizes="auto, (max-width: 594px) 100vw, 594px" /></figure>
</div>


<p class="wp-block-paragraph">Le test de la carte a été réalisé avec un voltmètre, Chaque tension à été testées avec succès.<br>Nous ferons ensuite l’acquisition de ces tensions avec la carte SCB68 pour intégrer ces informations dans le programme. Cette partie est traitée par mon binôme.</p>



<p class="wp-block-paragraph"><br>Après intégration, on réalise un test depuis labview afin de valider l’acquisition des données.</p>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td>Sur le graphe de gauche :<br>La tension du capteur Z, correspondant au lift-off.<br>Entre 0 et 3V.<br><br>Sur le graphe de droite :<br>On a les 4 tensions des capteurs fins de courses.<br>Ici, on appuie sur l’un des capteurs, et on peut voir que la tension bleu correspondante est à 5V.</td><td><img loading="lazy" decoding="async" width="550" height="240" class="wp-image-4171" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_038.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_038.jpg 656w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_038-300x131.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>



<h2 class="wp-block-heading">Partie Individuelle : Travail Réalisé par GUILLEMARD Erwan</h2>



<h3 class="wp-block-heading">Présentation des fonctionnalités à Réaliser</h3>



<p class="wp-block-paragraph">Pour pouvoir réaliser le banc de test du capteur GMI (Giant Magneto Impédance), nous devons détacher les différentes fonctionnalités composant le système.<br>Pour ma part, je devrais développer et réaliser les fonctionnalités suivantes du banc de test :</p>



<ul class="wp-block-list">
<li>Acquisition du signal</li>



<li>Visualisation du signal</li>



<li>Configuration des paramètres</li>



<li>Capteurs de position Axe Z</li>



<li>Accessibilité aux données enregistrées</li>
</ul>



<h4 class="wp-block-heading">Acquisition du signal</h4>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td>Nous recherchons à déduire<br>l’impédance dégager par le capteur<br>CND. Pour cela, nous allons effectuer<br>plusieurs opérations sur les deux<br>tensions acquises.<br>Pour cela, nous allons déduire l’image<br>du courant à partir de la tension aux<br>bornes de la résistance. Puis avec la<br>tension aux bornes de la bobine, nous<br>pourrons l’impédance du capteur GMI.<br>Ensuite selon la fréquence<br>d’acquisition, l’on choisira d’orienté le<br>signal vers la carte d’acquisition 6251<br>(dans le cas de fréquence inférieur à<br>20MHz ou la carte d’acquisition 5112<br>(dans le cas de fréquence supérieur à<br>20MHz).</td><td><img loading="lazy" decoding="async" width="550" height="217" class="wp-image-4178" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_EG_000.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_EG_000.jpg 382w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_EG_000-300x119.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>



<h4 class="wp-block-heading">Visualisation du signal</h4>



<p class="wp-block-paragraph">Le signal une fois traité (de manière physique) doit être affiché dans un historique en fonction de ces coordonnées spatiales puis les valeurs seront affichées dans un graphique tridimensionnel.</p>



<h4 class="wp-block-heading">Configuration des paramètres</h4>



<p class="wp-block-paragraph">L’utilisateur doit pouvoir configurer divers paramètres selon le type de pièce que le banc de test doit analyser.<br>Pour cela l’utilisateur doit pouvoir sélectionner le type de signal pour alimenter le capteur GMI (émetteur et récepteur) ainsi que la fréquence et la tension. L’utilisateur peut configurer les paramètres d’acquisitions de la carte d’acquisition 6251 et 5112 (Tension Max-Min, Fréquence, échantillonnage, noms voie physique d’acquisition). Il doit aussi pouvoir configurer l’emplacement de l’enregistrement des fichiers de données.<br>Le fichier de configuration doit être en format XML<sup data-fn="f815d721-051e-4f6e-bbfb-267b39409ffb" class="fn"><a href="#f815d721-051e-4f6e-bbfb-267b39409ffb" id="f815d721-051e-4f6e-bbfb-267b39409ffb-link">20</a></sup> et une copie de ce fichier doit être présente en en-tête de chaque fichier de sauvegarde au format TXT<sup data-fn="a496ae13-be34-499b-b6e2-7e392c4173ef" class="fn"><a href="#a496ae13-be34-499b-b6e2-7e392c4173ef" id="a496ae13-be34-499b-b6e2-7e392c4173ef-link">21</a></sup>.</p>



<h4 class="wp-block-heading">Capteurs de position Axe Z</h4>



<p class="wp-block-paragraph">Pour le lift-off, il est nécessaire d’installer un capteur de type analogique sur l’axe Z du Robot 3 axes à proximité du capteur GMI.<br>Cependant, la première fonction de ce capteur est de permettre d’obtenir une meilleure précision pour l’acquisition du capteur GMI en contrôlant la position verticale de ce dernier par rapport à la pièce à tester.</p>



<h4 class="wp-block-heading">Accessibilité aux données enregistrées</h4>



<p class="wp-block-paragraph">L’utilisateur doit pouvoir charger et exploiter un fichier sauvegardé antérieurement. Restituant les données t’elle que les valeurs de l’acquisition ainsi que les paramètres de configurations propre à cette acquisition.</p>



<h3 class="wp-block-heading">Présentation des périphériques et instruments utilisés</h3>



<h4 class="wp-block-heading">PC Embarqué : NI-PXI 1042Q</h4>



<p class="wp-block-paragraph">Pour notre projet de développement d’un banc de test par contrôle non destructif par magnétoscopie, il est imposé par le cahier des charges que nous devons utiliser un pc embarqué de chez National Instrument « NI-PXI 1042Q ».<br>Pour commencer le PC embarqué est imposé par le cahier des charges. Cependant, l’on aurait pu réaliser le banc de test à partir d’un simple PC. Mais l’avantage qu’offre le PC embarqué de chez National Instrument se situe au niveau du nombre de port PXI ainsi que son port GPIB et de la liaison série (RS232) directement intégré à l’appareil. Les cartes peuvent quant à elles communiquer par le bus PXI (routage de signaux en fond de panier).</p>



<h5 class="wp-block-heading">PC Embarqué</h5>


<div class="kb-table-container kb-table-container4072_b9cc35-ef wp-block-kadence-table"><table class="kb-table kb-table4072_b9cc35-ef">
<tr class="kb-table-row kb-table-row4072_771aa3-be">
<td  class="kb-table-data kb-table-data4072_bfe998-18">

<p class="wp-block-paragraph">Le PC embarqué contient le système<br>d’exploitation Windows XP SP2 et nous utilises<br>la version de développement 8.0 de LabView.<br>Il comporte :</p>



<ul class="wp-block-list">
<li>2 Ports RS 232 (1 entrée / 1 sortie)</li>



<li>2 Ports USB</li>



<li>1 Port GPIB</li>



<li>1 Port PS2</li>



<li>1Port VGA</li>



<li>1 Port Eternet</li>



<li>8 Slots Disponibles dont 7 Slots PXI</li>
</ul>

</td>

<td  class="kb-table-data kb-table-data4072_0bd751-d0">

<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="516" height="308" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_001.jpg" alt="" class="wp-image-4179" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_001.jpg 516w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_001-300x179.jpg 300w" sizes="auto, (max-width: 516px) 100vw, 516px" /></figure>

</td>
</tr>
</table></div>


<h6 class="wp-block-heading">Carte d&rsquo;Acquisition NI-PXI 6251</h6>


<div class="kb-table-container kb-table-container4072_ea2bb2-21 wp-block-kadence-table"><table class="kb-table kb-table4072_ea2bb2-21">
<tr class="kb-table-row kb-table-row4072_a7f2ac-c5">
<td  class="kb-table-data kb-table-data4072_1772c0-fb">

<p class="wp-block-paragraph"><span style="text-decoration: underline;">Caractéristique de la carte :</span></p>



<ul class="wp-block-list">
<li>Résolution 16 bits</li>



<li>16 voix analogiques/8 voix différentielles</li>



<li>Echantillonnage 1,25 M/s</li>
</ul>

</td>

<td  class="kb-table-data kb-table-data4072_e91520-1b">
<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="333" height="270" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_002.jpg" alt="" class="wp-image-4181" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_002.jpg 333w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_002-300x243.jpg 300w" sizes="auto, (max-width: 333px) 100vw, 333px" /></figure>
</div>
</td>
</tr>
</table></div>


<h6 class="wp-block-heading">Carte d&rsquo;Acquisition NI-PXI 5412</h6>


<div class="kb-table-container kb-table-container4072_fe48a0-82 wp-block-kadence-table"><table class="kb-table kb-table4072_fe48a0-82">
<tr class="kb-table-row kb-table-row4072_af28e2-1e">
<td  class="kb-table-data kb-table-data4072_a7dd43-47">

<p class="wp-block-paragraph"><span style="text-decoration: underline;">Caractéristique de la carte :</span></p>



<ul class="wp-block-list">
<li>Résolution 14 bits</li>



<li>Tension Max -6V à 6V</li>



<li>Plage de Fréquence 0 à 20 MHz</li>



<li>Signaux: Carre, Sinus, Triangle, Aléatoire, DC</li>
</ul>

</td>

<td  class="kb-table-data kb-table-data4072_54d1a9-7b">
<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="240" height="300" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_003.jpg" alt="" class="wp-image-4182"/></figure>
</div>
</td>
</tr>
</table></div>


<h6 class="wp-block-heading">Carte d&rsquo;Acquisition NI-PXI 5112</h6>


<div class="kb-table-container kb-table-container4072_2a71b1-14 wp-block-kadence-table"><table class="kb-table kb-table4072_2a71b1-14">
<tr class="kb-table-row kb-table-row4072_6ebc19-2e">
<td  class="kb-table-data kb-table-data4072_4fa675-dd">

<p class="wp-block-paragraph"><span style="text-decoration: underline;">Caractéristique de la carte :</span></p>



<ul class="wp-block-list">
<li>Résolution 8 bits</li>



<li>2 voix</li>



<li>Bande Passante Max 100Mhz</li>



<li>Echantillonnage 1M/s</li>
</ul>

</td>

<td  class="kb-table-data kb-table-data4072_443b14-b2">
<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="227" height="286" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_004.jpg" alt="" class="wp-image-4183"/></figure>
</div>
</td>
</tr>
</table></div>


<h4 class="wp-block-heading">GBF Agilent 33220A</h4>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td class="has-text-align-center" data-align="center"><strong>APPLY: &lt;fonction&gt; [&lt;fréquence&gt;[,&lt;amplitude&gt;[,&lt;décalage&gt;] ]]</strong><br><br>Par exemple, l&rsquo;instruction suivante émise depuis l&rsquo;ordinateur commande au générateur de fournir en sortie un signal sinusoïdal de 3 Vpp avec une fréquence de 5 kHz et une tension de décalage de -2.5V.<br><br><strong>APPL:SIN 5 KHZ, 3.0 VPP, -2.5 V</strong></td><td><img loading="lazy" decoding="async" width="550" height="412" class="wp-image-4090" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_004_RM_1.jpg" alt=""></td></tr></tbody></table></figure>



<h4 class="wp-block-heading">Interface de Connexion : SCB-68</h4>


<div class="kb-table-container kb-table-container4072_986962-40 wp-block-kadence-table"><table class="kb-table kb-table4072_986962-40">
<tr class="kb-table-row kb-table-row4072_e0d57f-93">
<td  class="kb-table-data kb-table-data4072_3b85c1-73">

<p class="wp-block-paragraph"><span style="text-decoration: underline;">Caractéristique de l&rsquo;interface de connexion :</span></p>



<ul class="wp-block-list">
<li>Interface I/O 68 broches</li>



<li>Un capteur de température</li>



<li>5 Switches</li>



<li>Compatible RSE (mode commun)/ Différentiel</li>
</ul>

</td>

<td  class="kb-table-data kb-table-data4072_e3a245-5a">

<p class="wp-block-paragraph"><img loading="lazy" decoding="async" width="350" height="358" class="wp-image-4131" style="width: 350px;" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_008.jpg" alt=""></p>

</td>
</tr>
</table></div>


<h4 class="wp-block-heading">Capteurs</h4>



<h5 class="wp-block-heading">Capteur CND</h5>



<h6 class="wp-block-heading">Définition</h6>



<p class="wp-block-paragraph">Les capteurs par contrôle non destructifs (CND) sont composés de deux parties.&nbsp;</p>



<p class="wp-block-paragraph">Une partie émettrice qui va générer un signale qui aura pour conséquence de créer une perturbation sur la cible, la pièce que l’on souhaite contrôler.</p>



<p class="wp-block-paragraph">Et une partie réceptrice qui est chargé de récupérer les perturbations émis par la cible que l’on a excitée.&nbsp; C’est le signal récupéré par la partie réceptrice du capteur qui nous intéresse.&nbsp;</p>



<p class="wp-block-paragraph">Dans l’industrie, il existe une multitude de capteur par contrôle non destructif. Ces capteurs ce départage en plusieurs familles chacun ayant ces avantages et inconvénients et des propriétés propres.</p>



<p class="wp-block-paragraph">Il y a les capteurs par ultrasons, les capteurs par micro-ondes, les capteurs par thermographies, les capteurs par radiographies, les capteurs par courants de Foucault ou capteurs par magnétoscopies que nous utilisons comme capteur de notre banc de test.&nbsp;</p>



<p class="wp-block-paragraph">L’avantage qu’offrent les capteurs par contrôle non destructifs est assez intéressant d’un point de vue économique et technologique.</p>



<p class="wp-block-paragraph">Ces capteurs permettent la caractérisation de l’état d’une pièce, d’un matériau sans l’endommager et permet la détection de défaut comme des microfissures, imperfections etc. Ils permettent aussi de mesurer des paramètres dimensionnels et ou constitutifs comme par exemple l’épaisseur, la longueur, la largueur d’une pièce ou d’un matériau. Ou encore de pouvoir définir ces états de contraintes. De plus ces capteurs, répondent à des enjeux de sécurité, de coûts, de précision sur les mesures etc. Ce qui justifie leurs applications et leurs utilisations dans des domaines varier comme les Transports, l’Industrie, l’Energétique, le Médical, etc</p>



<h6 class="wp-block-heading">Capteur GMI (Giant Magneto Impedance)</h6>


<div class="kb-table-container kb-table-container4072_a150b5-2d wp-block-kadence-table"><table class="kb-table kb-table4072_a150b5-2d">
<tr class="kb-table-row kb-table-row4072_997d73-28">
<td  class="kb-table-data kb-table-data4072_a574fd-d2">

<p class="wp-block-paragraph">Les capteurs par contrôle non destructifs (CND) sont composés de deux parties.&nbsp;<br>Une partie émettrice qui va générer un signale qui aura pour conséquence de créer une perturbation sur la cible, la pièce que l’on souhaite contrôler.<br>Et une partie réceptrice qui est chargé de récupérer les perturbations émis par la cible que l’on a excitée.&nbsp; C’est le signal récupéré par la partie réceptrice du capteur qui nous intéresse.&nbsp;<br>&nbsp;<br>Dans l’industrie, il existe une multitude de capteur par contrôle non destructif. Ces capteurs ce départage en plusieurs familles chacun ayant ces avantages et inconvénients et des propriétés propres.<br>Il y a les capteurs par ultrasons, les capteurs par micro-ondes, les capteurs par thermographies, les capteurs par radiographies, les capteurs par courants de Foucault ou capteurs par magnétoscopies que nous utilisons comme capteur de notre banc de test.&nbsp;<br>&nbsp;<br>L’avantage qu’offrent les capteurs par contrôle non destructifs est assez intéressant d’un point de vue économique et technologique.<br>Ces capteurs permettent la caractérisation de l’état d’une pièce, d’un matériau sans l’endommager et permet la détection de défaut comme des microfissures, imperfections etc. Ils permettent aussi de mesurer des paramètres dimensionnels et ou constitutifs comme par exemple l’épaisseur, la longueur, la largueur d’une pièce ou d’un matériau. Ou encore de pouvoir définir ces états de contraintes.<br>De plus ces capteurs, répondent à des enjeux de sécurité, de coûts, de précision sur les mesures etc. Ce qui justifie leurs applications et leurs utilisations dans des domaines varier comme les Transports, l’Industrie, l’Energétique, le Médical, etc<br><br><em>Il est important de savoir que même en l’absence d’une cible ferromagnétique, l’on peut avoir des variations dans les valeurs de notre Impédance. Cela est dû à la réception par le capteur GMI du champ magnétique terrestre</em>.</p>

</td>

<td  class="kb-table-data kb-table-data4072_8a7501-ac">

<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="578" height="671" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_005.jpg" alt="" class="wp-image-4185" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_005.jpg 578w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_005-258x300.jpg 258w" sizes="auto, (max-width: 578px) 100vw, 578px" /></figure>

</td>
</tr>
</table></div>


<h5 class="wp-block-heading">Capteur Axe Z</h5>



<p class="wp-block-paragraph">Nous devons alors choisir un capteur selon plusieurs caractéristiques :</p>



<ul class="wp-block-list">
<li>La plage de précision</li>



<li>Le coût</li>



<li>Le type de capteur</li>



<li>L’interface de communication</li>
</ul>



<p class="wp-block-paragraph">Pour la famille de capteur, nous avons après réflexion choisit de prendre un capteur de type « optique ». La raison de se choix se fait selon la logique suivante. Nous ne pouvons pas prendre un capteur de type magnétique, car cela pourrait créer des interférences magnétiques avec notre capteur.</p>



<p class="wp-block-paragraph">Nous aurions pu choisir d’utiliser un capteur de type « sonore » basé sur le principe d’écho, mais cela nous paraissait moins précis que le capteur de type optique (infrarouge).</p>



<p class="wp-block-paragraph">Nous avons donc cherché un capteur correspondant au critère demandé puis avons demandé un devis auprès du constructeur.</p>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td>Nous avons donc trouvé un capteur optique d’une grande précision (20 mm) sur une plage de mesure convenant à notre système. De plus l’interface de communication est en liaison série ce qui ne pose aucun problème car le PXI possède de port RS 232.<br>Cependant, ce capteur étant très performant, son prix ne nous permet pas de le choisir du fait de la contrainte budgétaire.</td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="208" class="wp-image-4188" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_006.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_006.jpg 484w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_006-300x113.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr><tr><td>Finalement, nous garderons dans notre choix le capteur fourni par la plateforme de distribution Conrad.<br>&nbsp;<br>Bien que ce capteur soit moins performant que le capteur précédent, celui-ci reste abordable au niveau du prix. Il a une sorti de type analogique, et son interface de connexion peut être directement connecté à un PC, il ne nécessite pas d’interface de connexion pour fonctionner. Nous le connecterons par la suite à l’interface de connexion SCB-68</td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="405" class="wp-image-4189" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_007.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_007.jpg 392w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_007-300x221.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>



<h3 class="wp-block-heading">Codage des différentes fonctionnalités : Sous VI</h3>



<p class="wp-block-paragraph">Avant de commencer à coder directement l’application du banc de test du capteur, il est nécessaire développer chacune des fonctionnalités dont nous aurons besoin pour le fonctionnement de l’application. Pour cela, nous allons créer plusieurs dossiers dans notre dossier projet. Chaque dossier comportant exclusivement les codes nécessaires pour chaque fonction qui composera le logiciel notre banc de test.</p>



<h4 class="wp-block-heading">Acquisition</h4>



<h5 class="wp-block-heading">Carte d&rsquo;acquisition 6251</h5>



<p class="wp-block-paragraph">Cette carte de chez National Instrument va nous permettre d’acquérir directement le signal depuis l’interface de connexion SCB-68 de chez National Instrument. Nous utiliserons cette carte dans le cas où la fréquence d’acquisition est inférieure ou égale à 20 MHz.</p>



<p class="wp-block-paragraph">Nous l’utiliserons aussi pour contrôler l’état des capteurs fin de course et le capteur de l’axe Z présent sur le Charly Robot 3 axes. Pour cela nous devons définir en fonction des différents capteurs les voies d’acquisition sur l’interface de connexion SCB-68 suivant le mode d’acquisition, c’est-à-dire Différentiel ou Commun (RSE) d’après les caractéristiques des capteurs.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="740" height="166" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_040.jpg" alt="" class="wp-image-4176" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_040.jpg 740w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_017_RG_040-300x67.jpg 300w" sizes="auto, (max-width: 740px) 100vw, 740px" /></figure>
</div>


<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td>Cette partie de code se déroule sur deux niveaux. Nous utilisons un assistant DaQmx en paramétrant les paramètres des voies d’acquisitions suivants les caractéristiques du tableau ci-dessus. Cependant nous devons laisser le choix à l’utilisateur de pouvoir modifier les paramètres d’acquisition pour le capteur GMI.<br>Pour cela, nous allons récupérer les valeurs entrées par l’utilisateur. Ces valeurs, vont être transmises grâce à des variables partagés, à l’assistant DaqMx que nous avons modifié, donc à notre sous-VI « Carte_6251 » qui est un VI-Standard (couleur Jaune).<br> <br>La différence entre un VI-Express (couleur Bleu) et un VIStandard est que l’on peut modifier les paramètres de la fonction standard, se qui n’est pas possible lors de l’utilisation de la fonction express. <em>(Identique à la surcharge de fonction).</em></td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="306" class="wp-image-4190" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_008.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_008.jpg 379w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_008-300x167.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="595" height="394" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_009.jpg" alt="" class="wp-image-4191" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_009.jpg 595w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_009-300x199.jpg 300w" sizes="auto, (max-width: 595px) 100vw, 595px" /></figure>
</div>


<p class="wp-block-paragraph">Donc l’acquisition se fait en fonction des paramètres contenue dans les variables partagées que nous avons définis dans le fichier projet de notre code. De cette façon, l’on peut voir les variables partagées comme un espace mémoire partagé gérer par une machine virtuelle</p>



<p class="wp-block-paragraph">(service sous LabView utilisant la MVP<sup data-fn="f08e8fb5-6c89-4aa9-9661-bdf963a231c4" class="fn"><a href="#f08e8fb5-6c89-4aa9-9661-bdf963a231c4" id="f08e8fb5-6c89-4aa9-9661-bdf963a231c4-link">22</a></sup> : Machine à variable partagé). Lors de la communication et du passage de variable entre les VI, l’on va charger dans la variable partagé nos valeurs, puis lors de la lecture de ces valeurs, le MVP va mettre à jour la variable partagée appelée et va fournir le contenu chargé précédemment.</p>



<p class="wp-block-paragraph">L’avantage de l’utilisation des variables partagées est dans la transmission de valeur entre les VI.</p>



<p class="wp-block-paragraph">Dans le corps du notre VI « Carte_6251 », nous définissons le nombre de voie, ainsi que la tension d’acquisition, le mode, le nom des voies etc. Puis l’on définit la fréquence d’acquisition ainsi que le taux d’échantillonnage.&nbsp; Ensuite, nous appelons diverses fonctions afin de finaliser les paramètres de l’acquisition que nous allons faire.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="715" height="287" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_010.jpg" alt="" class="wp-image-4192" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_010.jpg 715w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_010-300x120.jpg 300w" sizes="auto, (max-width: 715px) 100vw, 715px" /></figure>
</div>

<div class="kb-table-container kb-table-container4072_798536-59 wp-block-kadence-table"><table class="kb-table kb-table4072_798536-59">
<tr class="kb-table-row kb-table-row4072_749cd9-7e">
<td  class="kb-table-data kb-table-data4072_c6dd38-ce">

<p class="wp-block-paragraph">Plusieurs capteurs sont acquis par la carte d’acquisition NI-PXI 6251. Nous nous intéressons seulement ici au capteur GMI.&nbsp;</p>



<p class="wp-block-paragraph">Donc une fois avoir acquis nos deux tensions, nous allons traiter les 2 signaux afin de pouvoir calculer l’Impédance.</p>



<p class="wp-block-paragraph">Pour cela, nous allons dans un premier temps désassembler les signaux. Le premier signal qui est désassemblé correspond à <strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-11-color">Ugmi</mark></strong>. Le second signal correspond lui à la tension <strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-14-color">Vr(t) = R*i(t)</mark></strong>.</p>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Nous allons calculer la tension efficace du signal <strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-11-color">Ugmi</mark></strong> grâce à la fonction « <strong>Mesures d’amplitudes et de niveau</strong> » que l’on configure pour que celui-ci applique le calcule de la moyenne Quadratique (RMS<sup data-fn="ff7066cf-1f92-43c3-a461-5135573e5166" class="fn"><a href="#ff7066cf-1f92-43c3-a461-5135573e5166" id="ff7066cf-1f92-43c3-a461-5135573e5166-link">23</a></sup>).</p>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Ensuite, nous allons traiter la seconde voie désassemblée afin de transformer le signal <strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-14-color">Vr(t)</mark></strong> en <strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-14-color">i(t)</mark></strong>.</p>



<p class="wp-block-paragraph">L’on sait que :</p>



<p class="wp-block-paragraph"></p>



<p class="has-text-align-center wp-block-paragraph"><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-14-color"><strong>Vr(t)=Ri(t)</strong>          <strong>i(t)=Vr(t)/R</strong>        <strong>i(t)=Vr(t)/50</strong></mark></p>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Une fois avoir calculé l’intensité, nous allons calculer le courant efficace grâce à la même fonction utilisé précédemment « <strong>Mesures d’amplitudes et de niveau</strong> » pour laquelle nous choisissons la fonctionnalité calcule de moyenne Quadratique (RMS).</p>



<p class="wp-block-paragraph">Afin de pouvoir déterminer l’impédance, il suffit de fait le quotient de la tension efficace sur le courant efficace soit :</p>



<p class="wp-block-paragraph"></p>



<p class="has-text-align-center wp-block-paragraph">|<strong>Zgmi|  =  <mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-11-color">Ugmieff</mark>   /   <mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-14-color">Igmieff</mark></strong></p>

</td>

<td  class="kb-table-data kb-table-data4072_875b3a-91">
<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="293" height="447" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_011.jpg" alt="" class="wp-image-4193" style="width:346px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_011.jpg 293w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_011-197x300.jpg 197w" sizes="auto, (max-width: 293px) 100vw, 293px" /></figure>
</div>
</td>
</tr>
</table></div>

<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="732" height="289" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_012.jpg" alt="" class="wp-image-4194" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_012.jpg 732w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_012-300x118.jpg 300w" sizes="auto, (max-width: 732px) 100vw, 732px" /></figure>
</div>


<h5 class="wp-block-heading">Carte d&rsquo;acquisition 5112</h5>



<p class="wp-block-paragraph">Cette carte de chez National Instrument va nous permettre comme précédemment d’acquérir le signal dans le cas où la fréquence d’acquisition est quant à elle supérieur à 20MHz afin d’obtenir une meilleur précision au niveau de l’acquisition.</p>



<p class="wp-block-paragraph">Cependant, il était nécessaire d’après le cahier des charges de passée avant par la carte multiplexeur 2503. Cette carte de multiplexage ayant pour but d’orienter selon la fréquence d’acquisition voulue de basculer les 2 signaux du capteur GMI vers la carte d’acquisition 6251 ou la carte d’acquisition (oscilloscope) 5112.</p>



<p class="wp-block-paragraph">Malheureusement, nous ne pouvons pas utiliser ce module multiplexeur du fait qu’il n’y a qu’un seul relai que l’on puisse commander.</p>



<p class="wp-block-paragraph">Donc nous ne pouvons pas sélectionner le type de carte d’acquisition. La solution que nous avons retenue est de laisser à l’utilisateur de choisir lui-même la carte qu’il souhaite utiliser pour l’acquisition.</p>



<p class="wp-block-paragraph">Il reste à revoir le schéma de connexion entre le capteur et la carte oscilloscope 5112. Et là se trouve un autre problème. Car l’acquisition des signaux fournit par le capteur GMI vers la carte d’acquisition 6251 se fait en mode Différentiel. Or comme nous souhaitons faire l’acquisition sur la carte 5112 qui n’est autre qu’un oscilloscope, les masses sont reliées (entrées en mode commun ou RSE).&nbsp;</p>



<p class="wp-block-paragraph">Pour le moment, nous ne somme pas en possession d’une solution qui nous permet de réaliser le schéma de câblage pour effectuer cette acquisition.  Cependant, comme précédemment, nous utiliserons une fonction express de LabView <strong>« NiScope – Express</strong> » que nous allons transformer en Fonction Standard pour que l’on puisse modifier les paramètres d’acquisitions de la carte.</p>



<h4 class="wp-block-heading">Alimentation du Capteur GMI</h4>



<h5 class="wp-block-heading">Alimentation Emetteur</h5>



<h6 class="wp-block-heading">GBF Agilent 33220A</h6>



<p class="wp-block-paragraph">Le Générateur Base Fréquence (GBF) Agilent 33220A est un Générateur qui peut être utilisé directement par un technicien de manière direct ou qui peut être commandé à distance depuis un poste fixe. La communication du générateur est basé sur le protocole GPIB dans les commandes de contrôle sont spécifié dans la documentation fournit avec l’appareil.</p>


<div class="kb-table-container kb-table-container4072_bece3d-e8 wp-block-kadence-table"><table class="kb-table kb-table4072_bece3d-e8">
<tr class="kb-table-row kb-table-row4072_caf064-21">
<td  class="kb-table-data kb-table-data4072_07cca2-09">

<p class="wp-block-paragraph">Donc pour commander le GBF à via la liaison GPIB, il suffira de saisir la commande suivante :<br>APPL : Signal Frequence Tension<br>Comme type de signal nous pouvons choisir entre :</p>



<figure class="wp-block-table has-small-font-size"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td class="has-text-align-center" data-align="center">SINUS</td><td class="has-text-align-center" data-align="center">SIN</td></tr><tr><td class="has-text-align-center" data-align="center">CARRE</td><td class="has-text-align-center" data-align="center">SQR</td></tr><tr><td class="has-text-align-center" data-align="center">TRIANGLE</td><td class="has-text-align-center" data-align="center">RAMP</td></tr><tr><td class="has-text-align-center" data-align="center">BRUIT</td><td class="has-text-align-center" data-align="center">NOIS</td></tr><tr><td class="has-text-align-center" data-align="center">CONTINUE</td><td class="has-text-align-center" data-align="center">DC</td></tr></tbody></table></figure>



<p class="wp-block-paragraph"><br>Pour la fréquence, il suffit d’envoyer la valeur. Par défaut, l’unité est en Hertz.<br>Pour la tension, comme pour la fréquence, il suffit d’entrer une valeur. L’unité par défaut est VPP<sup data-fn="36c99bde-9e72-47cd-bfcb-74364650a28d" class="fn"><a href="#36c99bde-9e72-47cd-bfcb-74364650a28d" id="36c99bde-9e72-47cd-bfcb-74364650a28d-link">24</a></sup>.</p>

</td>

<td  class="kb-table-data kb-table-data4072_bbe0a1-d7">
<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="414" height="105" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_013.jpg" alt="" class="wp-image-4195" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_013.jpg 414w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_013-300x76.jpg 300w" sizes="auto, (max-width: 414px) 100vw, 414px" /></figure>
</div>
</td>
</tr>
</table></div>


<h6 class="wp-block-heading">Contrôle Port GPIB</h6>



<p class="wp-block-paragraph">Sous LabView, nous réalisons le code qui permet de créer la séquence qui va permettre de contrôler le type de signal, la tension et la fréquence que nous voulons obtenir en sorti du GBF.</p>



<p class="wp-block-paragraph">Cependant, il faudra pour la communication spécifier l’adresse de l’appareil. A la mise sous tension de celui-ci, l’adresse de connexion est indiquée sur l’interface du GBF (Si celui-ci est connecté à un PC).</p>


<div class="kb-table-container kb-table-container4072_935185-32 wp-block-kadence-table"><table class="kb-table kb-table4072_935185-32">
<tr class="kb-table-row kb-table-row4072_cc0cac-82">
<td  class="kb-table-data kb-table-data4072_42862f-ef">

<p class="wp-block-paragraph">Dans un premier temps nous allons construire la séquence qui va nous permettre de prendre le contrôle du GBF. En suivant  la syntaxe fournit par la documentation technique de l’appareil (voir parti ci-dessus).<br>Donc nous laissons  l’utilisateur  renseigner les paramètres de tension, fréquence et le type de signaux voulue.<br>Donc nous construisons la chaine de caractère suivante en concaténant les paramètres :<br> <br>APPL : « TypeSignaux »_«Fréquence »,_«Tension »<br> <br>Les valeurs de Fréquence et de Tension étant de type Double, il est nécessaire de les convertir en chaine de caractère. <br> <br><em><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-13-color">Attention : ‘_’ dans la syntaxe de la séquence que nous construisons est considérer comme le caractère espace.</mark></em></p>

</td>

<td  class="kb-table-data kb-table-data4072_d76f61-19">
<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="267" height="200" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_004_RM_1.jpg" alt="" class="wp-image-4090"/></figure>
</div>
</td>
</tr>

<tr class="kb-table-row kb-table-row4072_581e73-aa">
<td  class="kb-table-data kb-table-data4072_f55ef7-79">

<p class="wp-block-paragraph">Ensuite, nous rentrons dans une structure de type séquence.</p>



<p class="wp-block-paragraph">Premièrement, nous utilisons une fonction GPIB de communication propre à LabView pour se connecter au GBF Agilent. Nous définissons l’adresse de l’appareil, et nous transmettons la syntaxe que nous avons crée auparavant. Nous ajoutons un « time out » de 5 secondes dans le cas d’une incapacité au PXI de se connecter au GBF.</p>



<p class="wp-block-paragraph">Puis l’on récupère en sortie de cette fonction un booléen qui certifie le bonne envoie de la syntaxe à l’appareil ainsi que le bonne état de connexion.</p>



<p class="wp-block-paragraph">Ensuite dans la seconde partie de notre structure séquentielle, nous ajoutons une temporisation d’une seconde.</p>



<p class="wp-block-paragraph">Puis dans la dernière partie de notre séquentielle, nous récupérons l’acquittement en vérifiant si la syntaxe envoyé à bien été lu et interprété par le GPIB. Nous devons récupérer en cas de succès le message suivant :</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="235" height="70" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_015.jpg" alt="" class="wp-image-4197"/></figure>
</div>


<p class="wp-block-paragraph">Et en cas d&rsquo;échec, ce type de message :</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="236" height="60" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_016.jpg" alt="" class="wp-image-4198"/></figure>
</div>
</td>

<td  class="kb-table-data kb-table-data4072_9c41fe-54">

<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="377" height="521" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_014.jpg" alt="" class="wp-image-4196" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_014.jpg 377w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_014-217x300.jpg 217w" sizes="auto, (max-width: 377px) 100vw, 377px" /></figure>

</td>
</tr>
</table></div>

<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="682" height="307" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_017.jpg" alt="" class="wp-image-4199" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_017.jpg 682w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_017-300x135.jpg 300w" sizes="auto, (max-width: 682px) 100vw, 682px" /></figure>
</div>


<h5 class="wp-block-heading">Alimentation du récepteur</h5>



<h6 class="wp-block-heading">Carte alimentation 5412</h6>



<p class="wp-block-paragraph">Pour alimenter le capteur GMI, nous utilisons la carte NI-PXI 5412 qui est un Générateur Base Fréquence (GBF). Pour cela, nous avons été confrontés à un problème assez important du fait que nous ne pouvons configurer le GBF de façon continue dû a des commutations intempestifs générer par la fonction d’initialisation de la carte. Les conséquences de vouloir configurer le GBF en continue, sont que sur le long terme nous risquons d’endommager la carte d’alimentation et deuxièmement, la carte ne délivre pas de courant car elle est s’initialise en boucle.</p>



<p class="wp-block-paragraph">Pour parer ce problème et permettre à l’utilisateur de pouvoir gérer l’alimentation de la carte en tant réel, nous avons ajouté un bouton qui une fois activée transmet les paramètres au Sous VI « Carte_5412 ». Nous avons essayé de faire notre propre alimentation, mais cela n’a jamais été concluant. Alors nous avons utilisé une fonction LabView NI_FGEN EXPRESS que nous avons modifié.&nbsp;</p>



<p class="wp-block-paragraph">L’avantage de modifier un module EXPRESS de LabView nous permet de pouvoir passer des arguments en paramètre, et donc de changer les paramètres d’alimentation. Car un VI-Expresse ne contient que des paramètres prédéfinis par l’utilisateur et ne peux être changé via la face avant de notre programme.</p>



<p class="wp-block-paragraph">Un VI-EXPRESS d’origine est de facilement reconnaissable par ça couleur bleue. Une fois modifier, celui-ci peut-être renommé et doit être enregistrer comme sous-vi indépendant. Sa couleur est jaune pastel.</p>


<div class="kb-table-container kb-table-container4072_70ed00-43 wp-block-kadence-table"><table class="kb-table kb-table4072_70ed00-43">
<tr class="kb-table-row kb-table-row4072_2e11b4-4e">
<td  class="kb-table-data kb-table-data4072_f9bd4d-d0">

<p class="wp-block-paragraph">Le code comporte deux niveaux :<br> <br>Le premier niveau permet de recueillir les données saisies par l’utilisateur depuis l’interface de la face avant. Si l’utilisateur appuie sur le bouton d’alimentation,  les paramètres sont envoyés au second niveau du programme.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="356" height="245" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_018.jpg" alt="" class="wp-image-4200" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_018.jpg 356w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_018-300x206.jpg 300w" sizes="auto, (max-width: 356px) 100vw, 356px" /></figure>
</div>


<p class="wp-block-paragraph">Le second niveau représente les fonctions de bas niveau de LabView permettant d’alimenter la carte d’alimentation NI-PXI 5412. Dans un premier temps, nous allons contrôler s’il existe des erreurs avant d’initialiser la carte. S’il existe des erreurs, un message s’affichera. Dans un second temps, nous récupérons les paramètres que nous avons transmis.&nbsp;</p>



<p class="wp-block-paragraph">Seulement à partir de maintenant, nous allons interagir avec la carte d’alimentation. Nous allons l’initialiser, puis la mettre en état d’arrêt. Cela est nécessaire du fait que l’étape qui suit définie la fonction standard de la carte ainsi que la définition d’une impédance interne (50 ohms par défaut).</p>



<p class="wp-block-paragraph">Puis l’on va transmettre nos paramètres d’amplitude, fréquence et le type de signal que nous voulons avoir en sortie de notre carte.&nbsp;</p>



<p class="wp-block-paragraph">Avant de remettre la carte sous tension, l’on va configurer les propriétés niFgen du rapport cyclique de la carte d’alimentation NI-PXI – 5412.</p>

</td>

<td  class="kb-table-data kb-table-data4072_708b6e-f4">
<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="236" height="427" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_019.jpg" alt="" class="wp-image-4201" style="width:320px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_019.jpg 236w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_019-166x300.jpg 166w" sizes="auto, (max-width: 236px) 100vw, 236px" /></figure>
</div>
</td>
</tr>
</table></div>

<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="705" height="265" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_020.jpg" alt="" class="wp-image-4202" style="width:764px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_020.jpg 705w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_020-300x113.jpg 300w" sizes="auto, (max-width: 705px) 100vw, 705px" /></figure>
</div>


<h4 class="wp-block-heading">Capteur Optique Axe Z</h4>



<p class="wp-block-paragraph">Les problèmes que nous avons rencontrés sur cette fonctionnalité se trouve au niveau de la traduction de la tension que nous fourni le capteur en distance. La documentation fournit par le fournisseur ne nous donne pas d’expression mathématique pour nous permettre de faire le lien entre la tension fournie et la distance entre le capteur et la cible.</p>



<p class="wp-block-paragraph">Après avoir longtemps médité sur le meilleur moyens de déterminer cette valeur, nous avons décidé de crée un tableau de valeur afin de pouvoir vérifier l’allure de la courbe fournie par le constructeur et surtout pour avoir un tableau de référence de la tension fournie par le capteur en fonction de la distance.</p>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td><img loading="lazy" decoding="async" width="550" height="389" class="wp-image-4204" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_022.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_022.jpg 310w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_022-300x212.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td><td>Nous avons donc réalisé notre table en faisant varier un carton devant le capteur avec un pas de 1cm sur une plage de 0 à 60 cm.<br>L’acquisition des données nous a permis de confirmer la courbe<br>fournit par le fournisseur. <br><img loading="lazy" decoding="async" width="550" height="278" class="wp-image-4203" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_021.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_021.jpg 399w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_021-300x152.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>


<div class="kb-table-container kb-table-container4072_ebd4f8-91 wp-block-kadence-table"><table class="kb-table kb-table4072_ebd4f8-91">
<tr class="kb-table-row kb-table-row4072_fe45fb-70">
<td  class="kb-table-data kb-table-data4072_dcc9bc-07">

<p class="wp-block-paragraph">Pour déterminer la position entre le capteur optique et la cible, nous avons utilisé le tableau de valeur déterminé précédemment comme valeur de référence.<br>Ayant un tableau bidimensionnel, nous allons désassembler ce tableau 2D en deux tableaux 1D. Le premier tableau contenant les distances, le second contenant les tensions. Ainsi, nous sommes sures que l’indexation des 2 tableaux est la même.<br>De cette façon, il suffit de comparer la valeur de la tension acquise avec les tensions contenues dans le tableau. De façon générale l’on recherche l’indexation de notre tableau via la condition :<br> <br><strong>(U Max > U Acqui) ET (U Acqui > U Min)</strong><br> <br>Soit de façon pratique :<br> <br><strong>(U(ref)[i] >U Acqui) &amp;&amp; ((U Acqui >U (ref)[i+1] )</strong><br> <br>Si la condition n’est pas réalisée, nous continuons notre séquence qui va se répéter tant que la condition n’est pas réalisée (soit l’indice de notre tableau).<br>Une fois la condition réalisée, l’on va extraire la plage de distance grâce à notre tableau de référence. Il suffit pour cela d’utiliser les mêmes indices qui ont validés la condition. Ensuite, nous faisons la valeur moyenne des distances maximale et minimale. Nous venons donc de déterminer la distance entre la cible et le capteur Z.</p>

</td>

<td  class="kb-table-data kb-table-data4072_7b563c-0c">

<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="400" height="445" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_023.jpg" alt="" class="wp-image-4205" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_023.jpg 400w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_023-270x300.jpg 270w" sizes="auto, (max-width: 400px) 100vw, 400px" /></figure>

</td>
</tr>
</table></div>

<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="728" height="442" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_024.jpg" alt="" class="wp-image-4206" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_024.jpg 728w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_024-300x182.jpg 300w" sizes="auto, (max-width: 728px) 100vw, 728px" /></figure>
</div>


<p class="wp-block-paragraph">Cependant, cette manière de déterminer la distance en fonction de la tension renvoyée n’est pas aussi précise qu’elle ne pourrait l’être. Notre capteur pouvant donner une précision de l’ordre du millimètre, nous ne donnons avec cette méthode qu’une précision de l’ordre du centimètre. Pour obtenir cette précision, il aurait été nécessaire d’établir un tableau de référence avec un pas de 1mm. Chose plutôt ardu et longue.</p>



<p class="wp-block-paragraph">Il nous reste maintenant à gérer l’axe Z du Charly Robot 3 axes avec la position du Capteur Optique sur ce même axe pour le mode Manuel. Pour cela, nous allons laisser à l’utilisateur de choisir de gérer l’axe via le contrôle de l’axe Z par le joystick ou par un champ de commande. Dans le cas du contrôle de l’axe Z par un champ de commande, l’utilisateur devra saisir une distance comprise entre 33cm&nbsp; et 38,5cm. Il nous suffira de comparer la distance souhaitée avec la distance lue.</p>


<div class="kb-table-container kb-table-container4072_699418-d3 wp-block-kadence-table"><table class="kb-table kb-table4072_699418-d3">
<tr class="kb-table-row kb-table-row4072_75a8b6-fb">
<td  class="kb-table-data kb-table-data4072_10e42c-4d">

<p class="has-text-align-center wp-block-paragraph"><strong><span style="text-decoration: underline;">Algorithme</span></strong></p>



<p class="has-small-font-size wp-block-paragraph">DEBUT<br>        …<br>        LIRE « Distance Souhaitée par l’utilisateur »<br>        FAIRE TANT QUE « Distance souhaitée = ! Distance Calculée »</p>



<p class="has-small-font-size wp-block-paragraph">        REPETER        <br>                   FAIRE « Calcule de la distance »<br>                   SI « Distance souhaitée > Distance Calculée »<br>                             FAIRE « Descendre l’Axe Z »<br>                   FIN SI<br>                   SI « Distance souhaitée &lt; Distance Calculée »<br>                             FAIRE « Monter l’Axe Z »</p>



<p class="has-small-font-size wp-block-paragraph">                   FIN SI<br>                   SI « Distance souhaitée = Distance Calculée »<br>                             FAIRE « Ne pas bouger l’Axe Z »<br>                   FIN SI<br>           FIN TANT QUE<br>          …<br>FIN   </p>

</td>

<td  class="kb-table-data kb-table-data4072_5431a9-63">

<p class="wp-block-paragraph">Malheureusement, nous ne sommes pas encore en état de pouvoir fournir une solution de codage pour gérer le lift-off du capteur GMI en fonction du déplacement de l’axe Z du Charly robot 3 axes.</p>

</td>
</tr>
</table></div>


<h3 class="wp-block-heading">Plot 3D</h3>



<p class="wp-block-paragraph">Les résultats doivent être affichés dans un graphique tridimensionnel afin de représenter la pièce scannée. Pour cela, nous devons tracer les points de coordonnée X ; Y ; Z. Les coordonnées de l’axe X et l’axe Y correspondent au positionnement du Charly Robot 3 axes. Les coordonnées de l’axe Z correspondent aux variations du capteur GMI.</p>


<div class="kb-table-container kb-table-container4072_f0509c-71 wp-block-kadence-table"><table class="kb-table kb-table4072_f0509c-71">
<tr class="kb-table-row kb-table-row4072_97bd9f-0d">
<td  class="kb-table-data kb-table-data4072_b422ce-b9">

<p class="wp-block-paragraph">Dans ce prototypage, nous simulons les variations des valeurs en X, Y  via deux potentiomètres. Les variations de l’axe Z sont obtenus en créant un tableau 2 dimensions des variations des variables X et Y.<br>Les valeurs simulées sont affichées dans un historique afin de pouvoir connaître les valeurs composant la surface représenté.<br>La représentation graphique des données comporte plusieurs choix d’ergonomie. L’utilisateur peut donc modifier la mise à l’échelle automatique, l’affichage des axes ainsi qu’une mise à l’échelle manuelle.<br>Il est aussi possible de choisir le style de courbe voulue (nuage de point,  surface pleine avec trait, etc) ainsi que le système de coordonnée souhaitée (Cartésienne, Cylindrique, Sphérique).</p>

</td>

<td  class="kb-table-data kb-table-data4072_e34aee-29">
<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="365" height="313" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_025.jpg" alt="" class="wp-image-4207" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_025.jpg 365w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_025-300x257.jpg 300w" sizes="auto, (max-width: 365px) 100vw, 365px" /></figure>
</div>
</td>
</tr>
</table></div>

<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="740" height="469" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_026.jpg" alt="" class="wp-image-4208" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_026.jpg 740w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_026-300x190.jpg 300w" sizes="auto, (max-width: 740px) 100vw, 740px" /></figure>
</div>


<h4 class="wp-block-heading">Fichier de Configuration XML</h4>



<p class="wp-block-paragraph">Les paramètres saisis par l’utilisateur doivent être sauvegardés dans un fichier portant l’extension .xml (Extensible Markup Language). La caractéristique de ce langage est basée sur l’arborescence et l’organisation des données dans le fichier. Ainsi, nous pouvons donc créer des balises personnalisées ayant pour contenu ce que nous souhaitons lui donner en guise de valeur.</p>



<h5 class="wp-block-heading">Ecriture dans un fichier XML</h5>



<p class="wp-block-paragraph">Le problème rencontré dans cette partie, ce situe dans l’écriture des données à l’intérieur du fichier.</p>



<p class="wp-block-paragraph">Car il existe plusieurs méthodes possibles pour écrire dans un fichier au format XML.&nbsp;</p>



<p class="wp-block-paragraph">La première méthode qui a été utilisé, était réalisable sous la version 8.0 de LabView alors que l’exemple était extrait d’une version supérieur.</p>



<p class="wp-block-paragraph">Cependant, bien que la méthode soit bonne, elle ne permet pas d’exploiter le contenu du fichier. Car la méthode de lecture associée à cette écriture ne peut-être réalisée sous la version 8.0 de LabView. En conclusion la méthode d’écriture est basé sur l’exemple fournit par LabView version 8.0.</p>


<div class="kb-table-container kb-table-container4072_e4f363-3b wp-block-kadence-table"><table class="kb-table kb-table4072_e4f363-3b">
<tr class="kb-table-row kb-table-row4072_072b49-00">
<td  class="kb-table-data kb-table-data4072_564b0c-55">

<p class="wp-block-paragraph">Il suffit d’aplanir les donnés d’un type en format XML. Dans notre cas, nous allons donc aplanir 18 fois des données puis  l’on va concaténer ces valeurs  et écrire ces dernières dans un fichier XML.</p>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="948" class="wp-image-4210" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_028.jpg" alt=""></td><td>L’on peut voir ici le résultat de l’écriture des données dans le un éditeur de texte.<br>L’arborescence du fichier est faite de façon automatique. L’on voit que nous avons pour chaque valeur :<br> <br>-Le type de donnée entre balise<br> <br>-Le nom du champ<br> <br>-La valeur que contient ce champ.</td></tr></tbody></table></figure>

</td>

<td  class="kb-table-data kb-table-data4072_61ecb1-20">

<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="302" height="285" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_027.jpg" alt="" class="wp-image-4209" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_027.jpg 302w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_027-300x283.jpg 300w" sizes="auto, (max-width: 302px) 100vw, 302px" /></figure>

</td>
</tr>
</table></div>

<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="468" height="284" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_029.jpg" alt="" class="wp-image-4211" style="width:554px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_029.jpg 468w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_029-300x182.jpg 300w" sizes="auto, (max-width: 468px) 100vw, 468px" /></figure>
</div>


<h5 class="wp-block-heading">Lecture d&rsquo;un fichier XML</h5>


<div class="kb-table-container kb-table-container4072_4d531e-d0 wp-block-kadence-table"><table class="kb-table kb-table4072_4d531e-d0">
<tr class="kb-table-row kb-table-row4072_e2736c-6e">
<td  class="kb-table-data kb-table-data4072_7d61aa-10">

<p class="wp-block-paragraph">Pour la lecture du fichier XML, nous devons dans la première phase renseigner le chemin où se trouve le fichier XML. Puis pour lancer la lecture, il suffit de cliquer sur le bouton « Ouvrir ».</p>



<p class="wp-block-paragraph">L’on utilise la fonction lire dans un fichier XML. Puis dans une boucle conditionnel, si la lecture du fichier c’est passé sans erreur nous allons extraire les valeurs correspondants aux paramètres que nous souhaitons. Sinon, dans le cas d’une erreur dans la lecture du fichier, l’on affiche qu’une erreur est survenue lors de cette action. Dans le cas d’aucune erreur, nous allons afficher le contenu du fichier dans un indicateur de façon à pouvoir vérifier la présence de tous les champs. Les données fournies par le fichier XML vont être traités ensuite dans une structure séquentielle. Au totale, la structure séquentielle comporte autant d’étape qu’il y a de valeur à extraire. La méthode que nous utilisons pour extraire ces données consiste à rechercher les valeurs contenues entre les balises en utilisant l’indexation du fichier XML.</p>



<p class="wp-block-paragraph">Donc dans un premier temps, nous recherchons dans les données extraites qu’elle information nous voulons en précisant son indexation. Puis l’on utilise la fonction « <strong>Redresser à partir d’un fichier XML </strong>» en indiquant le type de donnée que l’on souhaite redresser :</p>



<ul class="wp-block-list">
<li>0 de couleur Orange pour un DOUBLE</li>



<li>champ  vide de couleur Violet pour un string</li>
</ul>



<p class="wp-block-paragraph">Ensuite pour facilité la transmission des données entre les Sous VI, nous assemblons ces valeurs dans un cluster indicateur. Cependant, si lors du redressement une erreur subvient, l’on affiche un message d’erreur à l’utilisateur en lui spécifiant l’origine de l’erreur.&nbsp;</p>

</td>

<td  class="kb-table-data kb-table-data4072_18f43b-37">
<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="354" height="390" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_030.jpg" alt="" class="wp-image-4212" style="width:388px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_030.jpg 354w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_030-272x300.jpg 272w" sizes="auto, (max-width: 354px) 100vw, 354px" /></figure>
</div>
</td>
</tr>
</table></div>

<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="723" height="404" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_031.jpg" alt="" class="wp-image-4213" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_031.jpg 723w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_031-300x168.jpg 300w" sizes="auto, (max-width: 723px) 100vw, 723px" /></figure>
</div>


<h4 class="wp-block-heading">Fichier de Sauvegarde TXT</h4>



<p class="wp-block-paragraph">Pour le fichier de sauvegarde. L’on va définir une structure pour le contenu de données composants le fichier. De plus, nous proposons une modification du cahier des charges en incluant dans le fichier de sauvegarde une copie de données composants le fichier XML afin que l’utilisateur puisse retrouver les paramètres choisies lors de l’acquisition effectuée par le passé.  Ainsi, nous proposons la structure suivante :</p>


<div class="kb-table-container kb-table-container4072_73b73a-45 wp-block-kadence-table"><table class="kb-table kb-table4072_73b73a-45">
<tr class="kb-table-row kb-table-row4072_cd4a59-c2">
<td  class="kb-table-data kb-table-data4072_bc67fc-09">

<p class="wp-block-paragraph"><strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-2-color">&lt;Nombre d’Acquisition></mark></strong><br><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-14-color"><strong>&lt;TensionEmetteur></strong><br><strong>&lt;FrequenceEmetteur></strong><br><strong>&lt;TypeSignalEmetteur></strong><br><strong>&lt; TensionCapteur></strong><br><strong>&lt;FrequenceCapteur></strong><br><strong>&lt;TypeSignalCapteur></strong><br><strong>&lt;TensionMaxVoie1></strong><br><strong>&lt;TensionMinVoie1></strong><br><strong>&lt;NomVoie1></strong><br><strong>&lt;TensionMaxVoie2></strong><br><strong>&lt;TensionMinVoie2></strong><br><strong>&lt;NomVoie2></strong><br><strong>&lt;SeuilJoystick></strong><br><strong>&lt;PasZ></strong><br><strong>&lt;%ValeurAxe></strong><br><strong>&lt;VitesseRobot></strong><br><strong>&lt;TempoMs></strong></mark><br><strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-12-color">&lt;HH:MM:SS___X___Y___Val></mark></strong></p>

</td>

<td  class="kb-table-data kb-table-data4072_574979-94">

<p class="wp-block-paragraph">L’on sait donc que notre fichier comporte en première ligne le nombre de point d’acquisition.<br>Puis nous avons les paramètres définis par l’utilisateur sur 18 lignes.<br>C’est seulement à partir de la 19 lignes que nous avons accès à nos données sous la forme :</p>



<p class="wp-block-paragraph"></p>



<figure class="wp-block-table has-small-font-size"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td class="has-text-align-center" data-align="center"><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-12-color">HH:MM:SS___X___Y___Val</mark></td><td>HH    : correspond aux heures<br>MM  : correspond aux minutes<br>SS     : correspond aux secondes<br>___   : représente une tabulation<br>X : correspond à la position de l’axe X<br>Y : correspond à la position de l’axe Y<br>Val   : correspond à l’impédance du capteur<br>GMI</td></tr></tbody></table></figure>



<p class="wp-block-paragraph"><em><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-13-color">Attention, à la fin de chaque ligne, nous avons les caractères « Fin de ligne et Retour à la ligne ».</mark></em></p>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Cependant, nous ne connaissons pas le nombre de ligne car le nombre de ligne de data dépend du nombre d’acquisition.</p>

</td>
</tr>
</table></div>


<p class="wp-block-paragraph">Nous proposons comme nom de fichier par défaut le modèle suivant :</p>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td class="has-text-align-center" data-align="center">Acqui_JJ_MM_AAAA.txt</td><td class="has-text-align-center" data-align="center">JJ : correspond au jour de l’acquisition<br>MM : correspond au mois de l’acquisition<br>AAAA : correspond à l’année de l’acquisition<br>_ : représente un underscore</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">Après avoir définie la structure de notre fichier TXT ainsi que son nom, nous pouvons maintenant écrire dans ce fichier et lire ce fichier.</p>



<h5 class="wp-block-heading">Ecriture dans un fichier TXT</h5>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td>Dans un premier temps, l’on récupère la date de la machine. Puis l’on crée la chaine de caractère correspondant à notre nom du fichier sous le format « Acqui_JJ_MM_AAAA ».<br> <br><em><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-13-color">Attention, à la fin de chaque ligne, nous avons les caractères « Fin de ligne et Retour à la ligne ».</mark></em><br> <br>Puis nous utilisons une fonction « <strong>Boite de Dialogue Fichier</strong> » pour laisser le choix à l’utilisateur de modifier l’emplacement ou va être enregistré le fichier ainsi que de modifier le nom du fichier. Puis nous utilisons une fonction « <strong>Ouvrir/créer/remplacer un fichier</strong> » dans lequel nous spécifions que nous voulons Ouvrir ou créer un nouveau fichier avec seulement les droits d’écritures.<br>L’on rentre ensuite les paramètres de la pièce qui va définir le nombre de point d’acquisition qui va définir le nombre de ligne d’expression régulière. Nous convertissons ensuite la valeur de nombre d’acquisition en un type chaine de caractère que nous allons concaténer avec le caractère fin de ligne et retour charriot. Puis l’on utilise la fonction « <strong>Ecrire dans un fichier TXT</strong> » pour écrire la valeur du nombre d’acquisition en guise de première valeur de notre fichier.<br> <br>Dans la seconde section de notre structure séquentielle, nous allons récupérer les valeurs de configurations souhaitées par l’utilisateur et convertir les valeurs de type entier ou double en type string. Puis nous allons concaténer ces valeurs en intercalant entre chaque valeur le caractère fin de ligne et retour chariot. Ce qui nous fait au total 18 valeurs donc ce qui va prendre 18 lignes au total dans notre fichier de la ligne 2 à la ligne 19. Il nous reste plus qu’à relier le contenu de la chaine créer vers une nouvelle fonction « <strong>Ecrire dans un fichier TXT</strong> » relié au même fichier.<br> <br>Dans la dernière partie de notre boucle séquentielle, nous traitons et simulons l’enregistrement des valeurs acquissent d’une pièce ferromagnétique selon le modèle énoncé plus haut :<br> <br>HH:MM:SS___X___Y___Val<br> <br>Dans cette structure séquentielle, nous récupérons le nombre d’acquisition que nous allons réaliser et nous allons décrémenter cette valeur avant de faire entrer cette valeur dans une boucle DoWhile. La condition de fin de cette boucle est établie tant que la valeur d’itération de la boucle est supérieur ou égale au nombre d’acquisition que l’on décrémente.<br>Dans cette boucle DoWhile, nous avons mis une temporisation de 100 ms pour avoir des valeurs différentes et pour simuler une synchronisation. L’on réalise des traitements sur l’affichage de l’horodatage de façon à formaliser l’heure est la date sur le format que nous souhaitons.<br>Puis l’on va concaténer les valeurs HH:MM:SS avec les valeurs simulées en ajoutant entre les valeurs un caractère de tabulation et de finir la chaine avec les caractères de fin de ligne et de retour chariot. L’opération sera réalisée tant que nous n’avons pas atteint la condition de fin de boucle.<br>Une fois être sortie de la boucle DoWhile nous mettons fin à la structure séquentielle. Nous appelons la fonction « <strong>Fermer un fichier</strong> ».<br>Nous venons ainsi de générer notre fichier de sauvegarde d’on un exemple de contenu est visible ci-contre.</td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="495" class="wp-image-4214" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_032.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_032.jpg 332w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_032-300x270.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /><br><img loading="lazy" decoding="async" width="550" height="402" class="wp-image-4215" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_033.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_033.jpg 302w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_033-300x220.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="736" height="676" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_034.jpg" alt="" class="wp-image-4216" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_034.jpg 736w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_034-300x276.jpg 300w" sizes="auto, (max-width: 736px) 100vw, 736px" /></figure>
</div>


<h5 class="wp-block-heading">Lecture dans un fichier TXT</h5>


<div class="kb-table-container kb-table-container4072_76956d-38 wp-block-kadence-table"><table class="kb-table kb-table4072_76956d-38">
<tr class="kb-table-row kb-table-row4072_298766-8c">
<td  class="kb-table-data kb-table-data4072_45ff47-9a">

<p class="wp-block-paragraph">Pour la lecture d’un fichier d’acquisition, nous allons dans un premier temps ouvrir une boite de dialogue permettant à l’utilisateur de sélectionner le fichier qu’il souhaite consulter.<br>Pour cela avant de rentrer dans la structure séquentielle, nous utilisons une fonction « <strong>Boite de Dialogue Fichier</strong> » pour laisser le choix à l’utilisateur de choisir quel fichier consulter. Puis nous utilisons une fonction « <strong>Ouvrir/créer/remplacer un fichier</strong> » dans lequel nous spécifions que nous voulons seulement ouvrir un fichier seulement la lecture de disponible. Ensuite nous relions cette fonction à une fonction qui va nous fournir la taille du fichier texte que l’on souhaite ouvrir. Cette fonction est indispensable pour lire un fichier. Puis l’on va utiliser la fonction « <strong>Lire dans un fichier texte</strong> » en précisant la taille du fichier. Nous récupérons en sorti de cette fonction une chaine de caractère qui contient toutes les données contenu dans notre fichier texte. Ayant accès au contenu du fichier, nous pouvons maintenant refermer le fichier texte grâce à la fonction « <strong>Fermer un fichier</strong> ».<br> <br>A partir de maintenant, nous allons traiter le contenu du fichier que nous venons de lire.<br>Dans un premier temps, nous allons lire les expressions qui ne sont de forme régulière. C’est-à-dire les 19 premières lignes qui contiennent le nombre d’acquisition ainsi que les configurations souhaitées lors de l’acquisition.<br>Pour cela nous allons utiliser la fonction « <strong>Balayer un fichier</strong> » en indiquant le chemin du fichier et en précisant le type des données que l’on veut extraire. Dans notre cas, nous recherchons des données de type chaine de caractère. Une fois ces données extraient, nous les affichons. Seule la donnée correspondante au nombre d’acquisition est converti en entier 32 bit.<br> <br>Dans la seconde partie de notre structure séquentielle, nous allons traiter les expressions régulières, soit dans notre cas les données d’acquisition. Nous allons utiliser la fonction « <strong>Chaîne au format tableur en tableau</strong> » en indiquant que nous souhaitons avoir en sorti un tableau 2 Dimensions et que notre séparateur tableur est le caractère tabulation.<br>Ensuite, nous allons faire plusieurs opérations pour supprimer les expressions irrégulières. Pour cela nous allons supprimer les 19 premières lignes de notre tableau 2 dimensions. Ainsi, nous récupérons un tableau 2D contenant exclusivement des données :</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="369" height="90" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_036.jpg" alt="" class="wp-image-4218" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_036.jpg 369w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_036-300x73.jpg 300w" sizes="auto, (max-width: 369px) 100vw, 369px" /></figure>
</div>


<p class="wp-block-paragraph">Après avoir obtenue ce tableau, nous allons décimer celui-ci de</p>



<p class="wp-block-paragraph">façon à obtenir 3 tableaux 1D contenant les valeurs de X, les valeurs de Y, les valeurs Val. Pour cela, nous utilisons la fonction « <strong>Sous ensemble d’un tableau</strong> » pour isoler les colonnes que l’on souhaite avoir, puis l’on va utiliser la fonction « <strong>Redimensionner un tableau</strong> » pour obtenir un tableau 1 dimension de nos valeurs. Une fois les tableaux 1D obtenue,&nbsp; l’on convertie les tableaux de type string en tableau de type entier 32 bit, puis en type double.&nbsp; Dans la dernière partie de notre séquence il ne reste plus alors à afficher le résultat du fichier dans un plot 3D à partir des tableaux. Seul les données de l’axe Z doivent être sous la forme d’une matrice, ou les données de l’axe Z sont exprimées en fonction des données de l’axe Y.</p>

</td>

<td  class="kb-table-data kb-table-data4072_18f760-e7">
<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="318" height="838" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_035.jpg" alt="" class="wp-image-4217" style="width:354px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_035.jpg 318w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_035-114x300.jpg 114w" sizes="auto, (max-width: 318px) 100vw, 318px" /></figure>
</div>
</td>
</tr>
</table></div>

<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="738" height="311" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_037.jpg" alt="" class="wp-image-4219" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_037.jpg 738w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_037-300x126.jpg 300w" sizes="auto, (max-width: 738px) 100vw, 738px" /></figure>
</div>


<h3 class="wp-block-heading">Intégration Individuelle</h3>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="716" height="268" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_038.jpg" alt="" class="wp-image-4220" style="width:842px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_038.jpg 716w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_038-300x112.jpg 300w" sizes="auto, (max-width: 716px) 100vw, 716px" /></figure>
</div>


<h3 class="wp-block-heading">Conclusion</h3>



<p class="wp-block-paragraph">Pour faire un point sur cette partie individuelle, nous pouvons dire que cette dernière à été menée à environ 92% de l’objectif finale. Les phases qui ne sont pas réalisées se situent au niveau de l’intégration finale avec la partie individuelle de l’Etudiant 1 (Robin GRIVET).</p>



<p class="wp-block-paragraph">Pour la fonctionnalité du <strong>Capteur Z</strong> tous a été réalisé au niveau du prototypage. Cette fonctionnalité est donc opérationnelle. Cependant, nous avons rencontré de nombreux dilemme dans la phase d’intégration intermédiaire avec la fonctionnalité Mode Manuel. Donc l’intégration à échouer, et nous ne sommes pas en mesure de réaliser le contrôle de l’axe Z du Charly robot en fonction du lift-off du capteur GMI.</p>



<p class="wp-block-paragraph">L’intégration de la fonctionnalité de Sauvegarde n’est pas complète du fait que pour générer un fichier TXT, nous devons réaliser une <strong>Acquisition</strong> du capteur GMI en <strong>Mode Automatique</strong>. Or nous sommes en cours de recherche de solution pour créer la synchronisation entre ces deux fonctionnalités. Une fois la synchronisation réalisée, nous pourrons écrire le fichier de sauvegarde.</p>



<p class="wp-block-paragraph">Cependant, la fonction d’écriture dans un fichier texte est bien opérationnel mais ne fonctionne quand simulant des valeurs.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="743" height="309" src="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_039.jpg" alt="" class="wp-image-4221" srcset="https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_039.jpg 743w, https://erwanguillemard.com/wp-content/uploads/2026/05/MM_004_018_EG_039-300x125.jpg 300w" sizes="auto, (max-width: 743px) 100vw, 743px" /></figure>
</div>


<h2 class="wp-block-heading">Conclusion</h2>



<p class="wp-block-paragraph">C&rsquo;est marrant de retomber sur ce projet de fin de cycle par hasard 14 ans plus tard. Avec le recul j&rsquo;aurais choisi d&rsquo;autres technologies 🙂 Les fautes d&rsquo;orthographes sont légion et le style, parlons du style. C&rsquo;est lourdingue à souhait. Mais ne faut il pas commencer quelque part ? 🙂 J&rsquo;ai volontairement fait sauter les plannings car comme tout le monde le sait, les plannings sont bidons car saisie aux derniers moments et n&rsquo;apporte aucune plus valu. </p>



<p class="wp-block-paragraph">La nostalgie me reprend. Je revois le travail effectué avec mon binôme Robin, le temps passé chez lui et au labo. De notre machine à café qui finira par partir avec el grande Zini, café qui lorsqu&rsquo;il était préparé par mes soins était tout simplement imbuvable. De l&rsquo;engueulade qui nous avions pris lors de la présentation de notre projet à mi-parcours par Joël MOUTOUSSAMY, alors que pour nous notre rendu était correct. Le souvenir lors de notre soutenance du reboot le PC qui avait planté après le passage de Robin.</p>



<p class="wp-block-paragraph">Ce projet m&rsquo;aura rapporté la note de 14/20.</p>



<p class="wp-block-paragraph">Au-delà de la note c&rsquo;est à ce moment précis que j&rsquo;ai compris mon projet professionnel. Je voulais m&rsquo;orienter dans la R&amp;D, rester dans le milieu industriel et devenir enseignant. Chose qui par la suite changera quelque peu 🙂</p>



<p class="wp-block-paragraph">Le mot de la fin :</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><em>Vous convoitez ma banane Monsieur GRIVET ?</em></p>
<cite>Un professeur à R. GRIVET durant un contrôle sur table</cite></blockquote>



<p class="wp-block-paragraph">  </p>


<ol class="wp-block-footnotes"><li id="23e6b230-133b-46f6-b58e-13e66931512e"><strong>GMI :</strong> Geant Magneto-Impedant <a href="#23e6b230-133b-46f6-b58e-13e66931512e-link" aria-label="Aller à la note de bas de page 1">↩︎</a></li><li id="68c9a134-b5e2-44e9-b091-1d64a3e522fd"><strong>LPP :</strong> Laboratoire de Physique et Plasma <a href="#68c9a134-b5e2-44e9-b091-1d64a3e522fd-link" aria-label="Aller à la note de bas de page 2">↩︎</a></li><li id="02b9f9be-6755-4271-9095-7023ac70c205"><strong>ARDPI :</strong> Agence pour la Recherche et le Développement de Produits Industriels <a href="#02b9f9be-6755-4271-9095-7023ac70c205-link" aria-label="Aller à la note de bas de page 3">↩︎</a></li><li id="9430d9f2-26f9-4453-ad8a-4263150f00ec"><strong>CND :</strong> Contrôle Non Destructif <a href="#9430d9f2-26f9-4453-ad8a-4263150f00ec-link" aria-label="Aller à la note de bas de page 4">↩︎</a></li><li id="1161913b-51d6-4fd3-a90f-02d813e591f7"><strong>PXI :</strong> Extension for Instrumentation <a href="#1161913b-51d6-4fd3-a90f-02d813e591f7-link" aria-label="Aller à la note de bas de page 5">↩︎</a></li><li id="f5d4db3d-979e-42bd-81bf-d529db7f7001"><strong>PC :</strong> Personal Computer <a href="#f5d4db3d-979e-42bd-81bf-d529db7f7001-link" aria-label="Aller à la note de bas de page 6">↩︎</a></li><li id="3621b715-2cd5-4d26-bdee-23a57479cb46"><strong>GPIB :</strong> General Purpose Interface Bus <a href="#3621b715-2cd5-4d26-bdee-23a57479cb46-link" aria-label="Aller à la note de bas de page 7">↩︎</a></li><li id="bcebd0e3-fc42-426b-8ac7-c85bb81ff7b6"><strong>RS232 :</strong> Recommended Standard 232 <a href="#bcebd0e3-fc42-426b-8ac7-c85bb81ff7b6-link" aria-label="Aller à la note de bas de page 8">↩︎</a></li><li id="8151d058-68e5-4eaf-be3c-b666d86357a0"><strong>GPL : </strong>General Public License <a href="#8151d058-68e5-4eaf-be3c-b666d86357a0-link" aria-label="Aller à la note de bas de page 9">↩︎</a></li><li id="9e8b0f8a-9353-4d04-a963-b33a1834c3fa"><strong>UML :</strong> Unified Modeling Language <a href="#9e8b0f8a-9353-4d04-a963-b33a1834c3fa-link" aria-label="Aller à la note de bas de page 10">↩︎</a></li><li id="4723fc88-2060-448a-9c0b-dcc1b4a759ad"><strong>IDE :</strong> Interface de DEveloppement <a href="#4723fc88-2060-448a-9c0b-dcc1b4a759ad-link" aria-label="Aller à la note de bas de page 11">↩︎</a></li><li id="156b4ddd-20c8-4f17-84ef-68525b27e3c1"><strong>OS :</strong> Operating System <a href="#156b4ddd-20c8-4f17-84ef-68525b27e3c1-link" aria-label="Aller à la note de bas de page 12">↩︎</a></li><li id="1909fcc8-38a4-4549-acfe-16de9b8b75af"><strong>SP2 :</strong> Service Pack 2 <a href="#1909fcc8-38a4-4549-acfe-16de9b8b75af-link" aria-label="Aller à la note de bas de page 13">↩︎</a></li><li id="7cfd2634-e03b-4ff2-9eaa-36bd95f1c986"><strong>GBF :</strong> Générateur Base Fréquence <a href="#7cfd2634-e03b-4ff2-9eaa-36bd95f1c986-link" aria-label="Aller à la note de bas de page 14">↩︎</a></li><li id="9a936232-8b62-4dfb-a756-2a5bd30b3b7a"><strong>TOR :</strong> Tout Ou Rien <a href="#9a936232-8b62-4dfb-a756-2a5bd30b3b7a-link" aria-label="Aller à la note de bas de page 15">↩︎</a></li><li id="c92959a2-77ba-4fa0-a36b-1846ebd9ae60"><strong>I/O :</strong> Input / Output <a href="#c92959a2-77ba-4fa0-a36b-1846ebd9ae60-link" aria-label="Aller à la note de bas de page 16">↩︎</a></li><li id="be02cf0a-23da-4ccf-a4d8-f32ab5582dfc"><strong>RSE :</strong> Referenced Single-Ended <a href="#be02cf0a-23da-4ccf-a4d8-f32ab5582dfc-link" aria-label="Aller à la note de bas de page 17">↩︎</a></li><li id="28883047-f158-4409-ba73-e5098a14062a"><strong>CR :</strong> Cariage Return <a href="#28883047-f158-4409-ba73-e5098a14062a-link" aria-label="Aller à la note de bas de page 18">↩︎</a></li><li id="cfac67e8-0f30-415b-911c-c0bed686d2ae"><strong>LF :</strong> Line Feed <a href="#cfac67e8-0f30-415b-911c-c0bed686d2ae-link" aria-label="Aller à la note de bas de page 19">↩︎</a></li><li id="f815d721-051e-4f6e-bbfb-267b39409ffb"><strong>XML :</strong> eXtensible Markup Language <a href="#f815d721-051e-4f6e-bbfb-267b39409ffb-link" aria-label="Aller à la note de bas de page 20">↩︎</a></li><li id="a496ae13-be34-499b-b6e2-7e392c4173ef"><strong>TXT :</strong> Texte <a href="#a496ae13-be34-499b-b6e2-7e392c4173ef-link" aria-label="Aller à la note de bas de page 21">↩︎</a></li><li id="f08e8fb5-6c89-4aa9-9661-bdf963a231c4"><strong>MVP :</strong> Machine à Variable Partagé <a href="#f08e8fb5-6c89-4aa9-9661-bdf963a231c4-link" aria-label="Aller à la note de bas de page 22">↩︎</a></li><li id="ff7066cf-1f92-43c3-a461-5135573e5166"><strong>RMS :</strong> Root Main Square <a href="#ff7066cf-1f92-43c3-a461-5135573e5166-link" aria-label="Aller à la note de bas de page 23">↩︎</a></li><li id="36c99bde-9e72-47cd-bfcb-74364650a28d"><strong>VPP :</strong> Valeur Pic à Pic  <a href="#36c99bde-9e72-47cd-bfcb-74364650a28d-link" aria-label="Aller à la note de bas de page 24">↩︎</a></li></ol>


<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Apps &#8211; OpenWebUI</title>
		<link>https://erwanguillemard.com/apps-openwebui/</link>
		
		<dc:creator><![CDATA[Erwan Guillemard]]></dc:creator>
		<pubDate>Sat, 25 Apr 2026 09:19:00 +0000</pubDate>
				<category><![CDATA[Applications]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Application]]></category>
		<category><![CDATA[IA]]></category>
		<category><![CDATA[OLLAMA]]></category>
		<category><![CDATA[OPENWEBUI]]></category>
		<guid isPermaLink="false">https://erwanguillemard.com/?p=3520</guid>

					<description><![CDATA[Ce billet vient en complément et suite de l&#8217;article Apps &#8211; Ollama. Ce dernier (promis juré, craché sera assez rapide) sera un billet court. Pourquoi ? Parce que tout ou une grande partie à déjà été dit dans l&#8217;article traitant d&#8217;Ollama. J&#8217;avais jugé trop indigeste de fondre les deux sujets. Donc ici, la partie théorie...]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Ce billet vient en complément et suite de l&rsquo;article Apps &#8211; Ollama. Ce dernier (promis juré, craché sera assez rapide) sera un billet court.</p>



<p class="has-text-align-center wp-block-paragraph"><strong>Pourquoi ?</strong></p>



<p class="wp-block-paragraph">Parce que tout ou une grande partie à déjà été dit dans l&rsquo;article traitant d&rsquo;Ollama. J&rsquo;avais jugé trop indigeste de fondre les deux sujets. Donc ici, la partie théorie sera plutôt courte et en conséquence la partie Pratique un peu plus étoffée concernant l&rsquo;implémentation et la configuration de l&rsquo;application.</p>



<p class="wp-block-paragraph">Bref, l&rsquo;objectif de cet article sera d&rsquo;implémenter une interface graphique publiée pour faciliter l&rsquo;usage de notre solution Ollama plurimodales (LLM<sup data-fn="9b4b7116-7da7-4c05-943e-ac072573b13f" class="fn"><a href="#9b4b7116-7da7-4c05-943e-ac072573b13f" id="9b4b7116-7da7-4c05-943e-ac072573b13f-link">1</a></sup>) aux utilisateurs. J&rsquo;ai pris le parti d&rsquo;utiliser la solution OpenWebUI.</p>





<h2 class="wp-block-heading">Avant-Propos</h2>



<p class="wp-block-paragraph">Vous l&rsquo;avez bien compris, dans l&rsquo;introduction, je n&rsquo;ai pas l&rsquo;attention de m&rsquo;éterniser 10 000 ans sur le sujet.</p>



<p class="wp-block-paragraph">Je pars du principe que nous avons déjà déployé et configuré la solution Ollama et quelques modèles de traitement IA<sup data-fn="f36cb89d-8ac6-4ed0-8df5-7d578d4680c4" class="fn"><a href="#f36cb89d-8ac6-4ed0-8df5-7d578d4680c4" id="f36cb89d-8ac6-4ed0-8df5-7d578d4680c4-link">2</a></sup> sur un serveur.</p>



<p class="wp-block-paragraph">J&rsquo;ai une nouvelle fois pris le parti de déployer l&rsquo;application sous une distribution RHEL<sup data-fn="9e902093-392b-4860-a9f8-d2c28cf28686" class="fn"><a href="#9e902093-392b-4860-a9f8-d2c28cf28686" id="9e902093-392b-4860-a9f8-d2c28cf28686-link">3</a></sup> afin d&rsquo;avoir un niveau de sécurité optimale. Toutefois et vous pourrez le constatez par la suite dans la partie théorie, je ne respecterai pas l&rsquo;architecture par faute de ressource disponible néanmoins, je recommande de suivre l&rsquo;architecture qui sera à venir.</p>



<p class="wp-block-paragraph">Dans le cadre d&rsquo;une solution d&rsquo;IA hébergée localement se pose la question de mettre en place un tel portail dans une organisation. A cela je répondrai que cela permettra de garder un certain contrôle des requêtes, prompts, effectués par l&rsquo;ensemble des utilisateurs de l&rsquo;organisation et d&rsquo;en faciliter les usages. Dans des domaines sensibles tels que l&rsquo;industrie et production cela peut aux yeux de la direction et de la DSI<sup data-fn="4a15f514-bc25-45dc-8c12-3f5fd10c286d" class="fn"><a href="#4a15f514-bc25-45dc-8c12-3f5fd10c286d" id="4a15f514-bc25-45dc-8c12-3f5fd10c286d-link">4</a></sup> se révéler rassurant.</p>



<h2 class="wp-block-heading">Prérequis</h2>



<ul class="wp-block-list">
<li><strong>SE :</strong>
<ul class="wp-block-list">
<li>Rocky Linux 9.x et version ultérieures (pour ma part ça sera du 10.x)</li>



<li>macOS</li>



<li>Windows</li>
</ul>
</li>



<li><strong>Apps :&nbsp;</strong>
<ul class="wp-block-list">
<li>Ollama</li>
</ul>
</li>



<li><strong>Autres :</strong>
<ul class="wp-block-list">
<li>Minimum 4 CPU<sup data-fn="63b8e4f1-84bc-47ad-8afa-7dae59217921" class="fn"><a href="#63b8e4f1-84bc-47ad-8afa-7dae59217921" id="63b8e4f1-84bc-47ad-8afa-7dae59217921-link">5</a></sup></li>



<li>Minimum 4 Gio de RAM<sup data-fn="f958a01e-8b83-4fc9-a592-006e9651956c" class="fn"><a href="#f958a01e-8b83-4fc9-a592-006e9651956c" id="f958a01e-8b83-4fc9-a592-006e9651956c-link">6</a></sup></li>



<li>Stockage rapide (SSD<sup data-fn="8f6e0338-719e-4456-808e-82e0a17b70ea" class="fn"><a href="#8f6e0338-719e-4456-808e-82e0a17b70ea" id="8f6e0338-719e-4456-808e-82e0a17b70ea-link">7</a></sup>&nbsp;ou Nvme)</li>
</ul>
</li>
</ul>



<h2 class="wp-block-heading">Théorie</h2>



<h3 class="wp-block-heading">KesaKo OpenWebUI</h3>



<p class="wp-block-paragraph">Je pense comme toujours qu&rsquo;il est important de se poser la traditionnelle question. Que fait l&rsquo;application que nous allons utiliser, comment elle fonctionne et qui est derrière.</p>



<h4 class="wp-block-heading">Qu&rsquo;est-ce que c&rsquo;est ?</h4>



<p class="wp-block-paragraph">OpenWebUI, c&rsquo;est une interface web issue d&rsquo;une projet open-source (<strong>#biscotto</strong>) qui permet d&rsquo;utiliser des modèles d&rsquo;IA depuis un navigateur WEB hébergé localement. </p>



<p class="wp-block-paragraph">Le projet est né du sud-coréen Tim Jaeryang BAEK qui prône l&rsquo;autonomie numérique face aux grands du monde de la tech. Le projet est développé en Python (version supérieur ou égale à 3.11) pour la partie BackEnd et HTML/CSS, Svelte, JS et TS pour la partie FrontEnd.</p>



<p class="wp-block-paragraph">Personnellement, je trouve que l&rsquo;interface ressemble fortement à celle de ChatGPT. Mais son mon avis personnel hein 🙂</p>



<h4 class="wp-block-heading">A quoi ça sert ?</h4>



<p class="wp-block-paragraph">La solution va permettre comme les outils classiques en ligne (pour ne pas dire les géants du Cloud) d&rsquo;effectuer des opérations (énumération en approche) :</p>



<ul class="wp-block-list">
<li><strong>Discuter</strong> avec des modèles d&rsquo;IA (LLM)</li>



<li><strong>Exploiter</strong> des modèles localement (LLM)</li>



<li><strong>S&rsquo;Interfacer</strong> avec des sources locales et clouds (et oui nous pouvons faire de l&rsquo;hybridation).</li>



<li><strong>Téléverser </strong>(waouh, tu n&rsquo;as pas écrit uploader !) des fichiers pour les analyser par l&rsquo;IA</li>
</ul>



<p class="wp-block-paragraph">Nous retrouvons donc dans l&rsquo;ensemble les mêmes fonctionnalités que les outils en ligne quant à l&rsquo;usage de l&rsquo;IA 🙂 C&rsquo;est cool non ? &lt;3</p>



<h3 class="wp-block-heading">Avantages / Inconvénients</h3>



<p class="wp-block-paragraph">L&rsquo;utilisation d&rsquo;OpenWebUI n&rsquo;est pas sans conséquences vis à vis des services qu&rsquo;il peut apporter.</p>



<p class="wp-block-paragraph">Il suffit de regarder le constat déjà porté sur l&rsquo;utilisation d&rsquo;Ollama.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td class="has-text-align-center" data-align="center"><mark style="background-color:rgba(0, 0, 0, 0);color:#3ec632" class="has-inline-color"><strong>Avantages</strong></mark></td><td class="has-text-align-center" data-align="center"><mark style="background-color:rgba(0, 0, 0, 0);color:#ff0000" class="has-inline-color">Inconvénients</mark></td></tr><tr><td class="has-text-align-center" data-align="center">Open Source<br>Respect de la vie privée<br>Cross Compatibilité des modèles<br>Simplicité de l&rsquo;interface</td><td class="has-text-align-center" data-align="center">Installation technique<br>Modèles locaux couteux en ressources (RAM, CPU, GPU<sup data-fn="57be53ba-9128-49e7-ae7a-c337f01cf69e" class="fn"><a href="#57be53ba-9128-49e7-ae7a-c337f01cf69e" id="57be53ba-9128-49e7-ae7a-c337f01cf69e-link">8</a></sup>, Stockage)</td></tr></tbody></table></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Bon, cela je vous dirai l&rsquo;utilisateur il s&rsquo;en tamponne le coquillard. Lui que ce soit technique à mettre en place, il s&rsquo;en lustre l&rsquo;asperge. Par contre, si la réponse est lente, c&rsquo;est le <mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-13-color"><strong><em><span style="text-decoration: underline;">Game Over</span></em></strong></mark>.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="575" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_003_ER_Died-1024x575.jpg" alt="" class="wp-image-3528" style="aspect-ratio:1.7809626179386122;width:616px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_003_ER_Died-1024x575.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_003_ER_Died-300x169.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_003_ER_Died-768x431.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_003_ER_Died-1536x863.jpg 1536w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_003_ER_Died.jpg 1561w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="wp-block-paragraph">Logique, pourquoi utiliser la solution locale qui met une plombe à répondre alors qu&rsquo;un bon vieux Gémini, Copilot, ChatGPT te donne la réponse en 1/4 de seconde après une petite pression sur la touche Enter du clavier ?</p>



<p class="wp-block-paragraph">Ce qui nous ramène selon moi à l&rsquo;un des plus grands maux de la société actuelle. Nous ne savons ce que signifie attendre et être patient. Si dans les années 60 la compilation d&rsquo;un programme pouvait prendre la nuit, aujourd&rsquo;hui cela prendra quelques minutes. L&rsquo;essor des nouvelles technologies, nous apportent de par les performances et leurs mobilités l&rsquo;informations et l&rsquo;assurance de pouvoir joindre un individu ou une ressource si quand bien même nous avons du réseau. Toutefois, force est de constaté que si comme cela s&rsquo;est passé plusieurs fois au cours de l&rsquo;année 2025 et 2026 l&rsquo;un des maillons qui assure le fonctionnement tombe et nous coupe de nos ressources, nous nous retrouvons comme une poule qui a trouvé un couteau. Je pense et cela n&rsquo;est qu&rsquo;un point de vue personnel que nous devrions nous remettre en question face à cette forme de dépendance et servitude, <a href="https://www.youtube.com/watch?v=IsvfofcIE1Q&amp;list=RDIsvfofcIE1Q&amp;start_radio=1">Master &amp; Servant</a>, je dis STOP ! <strong><em>#sendkissesagain</em></strong></p>



<h3 class="wp-block-heading">Architecture &amp; Best Pratices</h3>



<p class="wp-block-paragraph">Lors de la présentation de la solution, j&rsquo;ai introduit la possibilité d&rsquo;utiliser OpenWebUI en mode hybride. Ce qui implique donc une communication des flux sortants via les protocoles HTTP<sup data-fn="f4993b7e-0f63-4b56-886c-b4e26648314b" class="fn"><a href="#f4993b7e-0f63-4b56-886c-b4e26648314b" id="f4993b7e-0f63-4b56-886c-b4e26648314b-link">9</a></sup> et HTTPS<sup data-fn="1d2044d0-2a6b-4f6c-9865-c8cded2e72e1" class="fn"><a href="#1d2044d0-2a6b-4f6c-9865-c8cded2e72e1" id="1d2044d0-2a6b-4f6c-9865-c8cded2e72e1-link">10</a></sup> vers les IAs compatibles dans le cloud et autres repos propres au SE<sup data-fn="688876c0-5948-48bf-baaf-3d493e2e5c01" class="fn"><a href="#688876c0-5948-48bf-baaf-3d493e2e5c01" id="688876c0-5948-48bf-baaf-3d493e2e5c01-link">11</a></sup> et maintien de l&rsquo;application. Afin de ne pas surcharger inutilement le schéma, j&rsquo;ai totalement exclu cette partie. Néanmoins il conviendra de réaliser un filtrage strict en sortie des flux pour des raisons de sécurité. Donc de jouer avec les politiques de votre UTMs<sup data-fn="13f6c481-ca7e-4e73-875d-cf307bad64ec" class="fn"><a href="#13f6c481-ca7e-4e73-875d-cf307bad64ec" id="13f6c481-ca7e-4e73-875d-cf307bad64ec-link">12</a></sup>.</p>



<p class="wp-block-paragraph">Bien, rentrons concrètement dans l&rsquo;architecture. La solution applicative OpenWebUI vient se placer entre le poste client et l&rsquo;application Ollama.</p>



<p class="wp-block-paragraph">Il convient dans le respect des bonnes pratiques de dissocier OpenWebUI de Ollama puisque nous allons publier, ouvrir l&rsquo;application en interne et pourquoi pas depuis nos WANs<sup data-fn="ac43ad3e-9b07-4981-8114-d187d3cf6dbf" class="fn"><a href="#ac43ad3e-9b07-4981-8114-d187d3cf6dbf" id="ac43ad3e-9b07-4981-8114-d187d3cf6dbf-link">13</a></sup>. Cela implique de mettre OpenWebUI dans un réseau isolé (DMZ<sup data-fn="103fd0e8-cd60-41ff-b80a-9c51d9c20b76" class="fn"><a href="#103fd0e8-cd60-41ff-b80a-9c51d9c20b76" id="103fd0e8-cd60-41ff-b80a-9c51d9c20b76-link">14</a></sup>) et Ollama dans le réseau <mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-10-color">T1</mark>, <mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-10-color">T1&prime;</mark> par exemple.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="861" height="620" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_001_arch.jpg" alt="" class="wp-image-3526" style="aspect-ratio:1.3887129819333208;width:600px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_001_arch.jpg 861w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_001_arch-300x216.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_001_arch-768x553.jpg 768w" sizes="auto, (max-width: 861px) 100vw, 861px" /></figure>
</div>


<p class="wp-block-paragraph">Par défaut, dans un fonctionnement UNIX dans un déploiement hors Docker, le port de communication de l&rsquo;interface Web se fait via le protocole <strong>http </strong>sur le port <strong>8080</strong>. Il est néanmoins possible de forcer les connexions en <strong>https </strong>sur le port <strong>443 </strong>via <strong>nginx</strong> (je reviendrai plus en détail sur ce point).</p>



<p class="wp-block-paragraph">Si nous regardons d&rsquo;un peu plus près l&rsquo;architecture de la VM<sup data-fn="2f21ddb8-be62-4029-92fc-283d894d896c" class="fn"><a href="#2f21ddb8-be62-4029-92fc-283d894d896c" id="2f21ddb8-be62-4029-92fc-283d894d896c-link">15</a></sup>, nous pouvons constater que j&rsquo;ai dédié un disque. Mais pourquoi ?</p>



<p class="wp-block-paragraph">OpenWebUI est très très lourd. Son déploiement peut se révéler un poil pénible pour ne pas dire chiant à mourir (je reviendrai là-dessus dans la partie pratique).</p>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="576" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_002_migraine-1024x576.jpg" alt="" class="wp-image-3527" style="width:612px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_002_migraine-1024x576.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_002_migraine-300x169.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_002_migraine-768x432.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_002_migraine-1536x864.jpg 1536w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_002_migraine-2048x1152.jpg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">https://unsplash.com/fr/photos/un-homme-portant-ses-mains-a-ses-oreilles-gK_ifZrZ0oc</figcaption></figure>
</div>


<p class="wp-block-paragraph">Bref, pour pallier à ce problème, j&rsquo;ai dédié un disque d&rsquo;une capacité de 100 Gio.</p>



<p class="wp-block-paragraph">Bien, on se lance dans la pratique ? Après on est bien aussi ici 🙂</p>



<h2 class="wp-block-heading">Pratique</h2>



<p class="wp-block-paragraph">Oui j&rsquo;ai dit plus haut que je ne respecterai pas cette topologie. Par manque de ressource, je vais tailler à la hussarde et tout mutualiser sur une seule machine. Il faut bien faire avec les moyens que l&rsquo;on a, c&rsquo;est comme ça.</p>



<h3 class="wp-block-heading">Installation</h3>



<p class="wp-block-paragraph">OpenWebUI propose plusieurs modes de déploiement :</p>



<ul class="wp-block-list">
<li><strong>Docker</strong> : <em>Officiellement supporté et recommandé pour la plupart des utilisateurs </em>(avec plusieurs sous-catégorie alternatives de déploiement)</li>



<li><strong>Python</strong> : <em>Orienté pour les environnements faibles en ressources et pour une installation manuelle</em>
<ul class="wp-block-list">
<li>uv</li>



<li>conda</li>



<li>venv</li>
</ul>
</li>



<li><strong>Kubernetes</strong> : <em>Idéal pour les déploiements en entreprise qui nécessite une adaptabilité et ordonnancement</em>
<ul class="wp-block-list">
<li>Helm</li>
</ul>
</li>



<li><strong>Third Party</strong></li>
</ul>



<p class="wp-block-paragraph">Pour ma part, la seule chose qui m&rsquo;intéresse et pour laquelle je suis à peu près à l&rsquo;aise c&rsquo;est Python. Je vois déjà les puristes de la containerisation me rétorquer sauvagement « <strong>Pourquoi pas Docker ?</strong>« . Encore une fois et je suis désolé, je ne comprends pas l&rsquo;intérêt de Docker dans mon métier. Tant que je n&rsquo;aurai pas pleinement assimilé ou eu le besoin de l&rsquo;utilisé, je bloque. Attention, je ne dis pas que c&rsquo;est de la me*de hein ? Loin de moi l&rsquo;idée.</p>



<p class="wp-block-paragraph">Donc je partirai sur Python en environnement virtuel (venv).</p>



<p class="wp-block-paragraph">Pourquoi ce choix ? Simplement parce que RHEL utilise également Python dans une version différente et qu&rsquo;à ce jour la version 3.12 n&rsquo;est pas encore officiellement supporté par OpenWebUI&#8230; Rien que pour ça je déteste Python autant que Java. Pourquoi faire simple&#8230;</p>



<div class="wp-block-kadence-accordion alignnone"><div class="kt-accordion-wrap kt-accordion-id3520_9a0c37-e4 kt-accordion-has-4-panes kt-active-pane-0 kt-accordion-block kt-pane-header-alignment-left kt-accodion-icon-style-basic kt-accodion-icon-side-right" style="max-width:none"><div class="kt-accordion-inner-wrap" data-allow-multiple-open="false" data-start-open="none">
<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-1 kt-pane3520_ff088c-ef"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Création de l&rsquo;environnement virtuel</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">Dans mon répertoire ollama, j&rsquo;ai créé un second répertoire openwebui.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-820304956fcaf1b3dcda79afd65d1736"><code><strong>$ sudo mkdir -p /mnt/ollama/openwebui
$ sudo cd /mnt/ollama/openwebui/</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="620" height="66" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_005_install_0.jpg" alt="" class="wp-image-3542" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_005_install_0.jpg 620w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_005_install_0-300x32.jpg 300w" sizes="auto, (max-width: 620px) 100vw, 620px" /></figure>
</div>


<p class="wp-block-paragraph">Une fois déplacé dans le répertoire, nous créons l&rsquo;environnement virtuel <strong>venv</strong>. Original comme nom n&rsquo;est il pas ?</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-4105a54d743af1aa7d3a48ac73c39678"><code><strong>$ sudo python3 -m venv venv</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="598" height="43" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_005_install_1.jpg" alt="" class="wp-image-3543" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_005_install_1.jpg 598w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_005_install_1-300x22.jpg 300w" sizes="auto, (max-width: 598px) 100vw, 598px" /></figure>
</div></div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-2 kt-pane3520_720aaa-b2"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Activation de l&rsquo;environnement virtuel</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">Etant toujours dans le même répertoire créé précédemment, nous allons activer notre environnement virtuel.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-acd4be5844f2b2742c95fd277e79b798"><code><strong>$ sudo source venv/bin/activate</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="640" height="43" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_005_install_2.jpg" alt="" class="wp-image-3544" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_005_install_2.jpg 640w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_005_install_2-300x20.jpg 300w" sizes="auto, (max-width: 640px) 100vw, 640px" /></figure>
</div></div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-3 kt-pane3520_0e4588-37"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Installation</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">Maintenant que tout est bon, il est toujours dans notre environnement virtuel de démarrer l&rsquo;installation. Cette dernière se déroulera en 3 temps.</p>



<ul class="wp-block-list">
<li>La mise à jour de pip</li>



<li>La création d&rsquo;un répertoire temporaire pour stocker les sources de l&rsquo;installation qui sont plutôt volumineuse</li>



<li>L&rsquo;installation en faisant référence à notre répertoire temporaire</li>
</ul>



<p class="wp-block-paragraph">Simple comme bonjour, et pourtant sachez que je me suis bien cassé la tête pour trouver l&rsquo;astuce du répertoire temporaire&#8230;</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-7b583b0aba8d3f3d221aa045c930b786"><code><strong>$ sudo pip install --upgrade pip 
$ sudo mkdir /mnt/ollama/tmp
$ sudo TMPDIR=/mnt/ollama/tmp pip install open-webui</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="928" height="274" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_005_install_3.jpg" alt="" class="wp-image-3545" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_005_install_3.jpg 928w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_005_install_3-300x89.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_005_install_3-768x227.jpg 768w" sizes="auto, (max-width: 928px) 100vw, 928px" /></figure>
</div>

<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="941" height="492" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_005_install_4.jpg" alt="" class="wp-image-3546" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_005_install_4.jpg 941w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_005_install_4-300x157.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_005_install_4-768x402.jpg 768w" sizes="auto, (max-width: 941px) 100vw, 941px" /></figure>
</div>


<p class="wp-block-paragraph">Lors de l&rsquo;installation si comme moi vous avez des ressources limitées, aucun respect des préconisations matériels. Je vous recommande de tuer le temps pendant facile une heure et de laisser tranquille votre bécanne. Tiens, je reparle de patience, comme de par hasard 🙂</p>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="556" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_004_jjf-1024x556.jpg" alt="" class="wp-image-3539" style="aspect-ratio:1.8417715344844405;width:497px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_004_jjf-1024x556.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_004_jjf-300x163.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_004_jjf-768x417.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_004_jjf.jpg 1200w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="wp-block-paragraph"><strong><em>Sans hésitez, la réponse D Jean-Pierre, ça <strong><em>sera mon dernier goulot.</em></strong> </em></strong></p>



<p class="wp-block-paragraph">Blague mise à part, 291 packages à installer avec des grosses dépendances pour certains d&rsquo;entre eux (Nvidia par exemple&#8230;). Reprenez un peu de la réponse D en attendant.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="939" height="992" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_005_install_5.jpg" alt="" class="wp-image-3548" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_005_install_5.jpg 939w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_005_install_5-284x300.jpg 284w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_005_install_5-768x811.jpg 768w" sizes="auto, (max-width: 939px) 100vw, 939px" /></figure>
</div>


<p class="wp-block-paragraph">Toujours pas terminé ? Bon ba comme on dit j&rsquo;ai nous <strong><em>« On va pas la mécher [la bouteille naturellement] »</em></strong>, terminez là et allez en chercher une nouvelle pour poursuivre la connaissance de la réponse D.</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-4 kt-pane3520_08c8ee-de"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Démarrage</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">Si vous n&rsquo;êtes pas tombé et que vous n&rsquo;êtes plus très sobre, c&rsquo;est bon signe. 🙂 Normalement, l&rsquo;installation est terminée.</p>



<p class="has-text-align-center has-theme-palette-5-background-color has-background wp-block-paragraph"><strong><mark style="background-color:rgba(0, 0, 0, 0);color:#ff0000" class="has-inline-color"><span style="text-decoration: underline;">/!\</span></mark></strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-9-color"></mark><strong><mark style="background-color:rgba(0, 0, 0, 0);color:#000000" class="has-inline-color"><span style="text-decoration: underline;">Attention :</span></mark></strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-9-color"><strong>L&rsquo;abus des bons produits et notamment d&rsquo;alcool est dangereux pour la santé.</strong> (Que l&rsquo;on n&rsquo;aille pas dire que je fasse de la publicité ou l&rsquo;apologie de l&rsquo;alcool </mark><strong><mark style="background-color:rgba(0, 0, 0, 0);color:#000000" class="has-inline-color">#loievin</mark></strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-9-color">)</mark></p>



<p class="wp-block-paragraph">Vérifions que cela fonctionne avec la première commande.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-2e3528595d69e530cdac0d9a86abca3a"><code><strong>$ sudo open-webui --help</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="940" height="362" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_006_run_1.jpg" alt="" class="wp-image-3554" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_006_run_1.jpg 940w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_006_run_1-300x116.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_006_run_1-768x296.jpg 768w" sizes="auto, (max-width: 940px) 100vw, 940px" /></figure>
</div>


<p class="wp-block-paragraph">C&rsquo;est rassurant de se dire que cela fonctionne. Pas de message d&rsquo;erreur. Il ne nous reste maintenant plus qu&rsquo;à démarrer notre service sur son interface et son port avec la commande ci-dessous.</p>



<p class="wp-block-paragraph"></p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-8c3c7fab3e36412e32dd5c4d31345adf"><code><strong>$ sudo open-webui serve --host 10.227.250.11 --port 8080</strong></code></pre>



<p class="wp-block-paragraph">Toutefois, il conviendra d&rsquo;autoriser les flux au niveau de l&rsquo;UTM local à notre serveur en amont. Pour cela, j&rsquo;explique dans la partie suivante Configuration comment ouvrir les flux http sur le port 8080/tcp.</p>



<p class="wp-block-paragraph">Normalement, l&rsquo;ensemble des composants sont en cours de chargement et une fois l&rsquo;ensemble chargé, vous devriez avoir dans votre CLI<sup data-fn="96e1bb31-3abc-4f7d-9141-265b48fe943e" class="fn"><a href="#96e1bb31-3abc-4f7d-9141-265b48fe943e" id="96e1bb31-3abc-4f7d-9141-265b48fe943e-link">16</a></sup> la chose suivante.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="941" height="977" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_006_run_2.jpg" alt="" class="wp-image-3555" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_006_run_2.jpg 941w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_006_run_2-289x300.jpg 289w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_006_run_2-768x797.jpg 768w" sizes="auto, (max-width: 941px) 100vw, 941px" /></figure>
</div>


<p class="wp-block-paragraph">Il est à noter que des notes d&rsquo;informations vont vite prendre le relai, ces derniers affichant l&rsquo;ensemble des requêtes HTTP.</p>
</div></div></div>
</div></div></div>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Si nous sommes à ce stade c&rsquo;est que tout est bon 🙂 Avant de rentrer plus en détail de l&rsquo;outil, il est nécessaire de regarder la partie Configuration. </p>



<h3 class="wp-block-heading">Configuration</h3>



<p class="wp-block-paragraph">Cette partie pourrait je pense être amélioré. L&rsquo;un des points les plus complexes et de mettre en place le mode service (j&rsquo;y ai passé un temps certain&#8230;). </p>



<div class="wp-block-kadence-accordion alignnone"><div class="kt-accordion-wrap kt-accordion-id3520_d18aa8-fa kt-accordion-has-4-panes kt-active-pane-0 kt-accordion-block kt-pane-header-alignment-left kt-accodion-icon-style-basic kt-accodion-icon-side-right" style="max-width:none"><div class="kt-accordion-inner-wrap" data-allow-multiple-open="false" data-start-open="none">
<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-4 kt-pane3520_2d9a52-19"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Utilisateur dédié</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">Pour des raisons de sécurité, il convient de créer un utilisateur dédié pour notre application. Nous partons sur un compte de service et non un compte utilisateur.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-bf4decc473bfbe2d3dea8e1f34b337e0"><code><strong>$ sudo useradd -r -s /bin/false openwebui
$ sudo chown -R openwebui:openwebui /mnt/ollama/openwebui</strong></code></pre>



<p class="wp-block-paragraph">Un petit changement de propriétaire et le tour est joué.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="842" height="43" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_010_dedied.jpg" alt="" class="wp-image-3565" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_010_dedied.jpg 842w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_010_dedied-300x15.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_010_dedied-768x39.jpg 768w" sizes="auto, (max-width: 842px) 100vw, 842px" /></figure>
</div></div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-1 kt-pane3520_82136e-4c"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>ParFeu</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">Par défaut, le port qui sera utilisé pour accéder à l&rsquo;interface web d&rsquo;OpenWebUI est 8080/tcp en http.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-421e427ebffce88e0b68e3d9942078e1"><code><strong>$ sudo firewall-cmd --permanent --add-port=8080/tcp
$ sudo firewall-cmd --reload</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="779" height="111" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_007_fwl.jpg" alt="" class="wp-image-3551" style="aspect-ratio:7.018908698001081;width:512px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_007_fwl.jpg 779w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_007_fwl-300x43.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_007_fwl-768x109.jpg 768w" sizes="auto, (max-width: 779px) 100vw, 779px" /></figure>
</div>


<p class="wp-block-paragraph">On est d’accord que si nous souhaiterions mieux faire en termes de sécurité, il serait plus intelligent de créer la policy suivante :</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-ac1dfb4f1ceaaff4aa75839b00dd9c53"><code><strong>$ sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.127.50.0/24" port port="8080" protocol="tcp" accept'
$ sudo firewall-cmd --reload</strong></code></pre>



<p class="wp-block-paragraph">Ayant un UTM&nbsp;en amont, je me permets donc de me contenter de la première solution.</p>



<p class="wp-block-paragraph">Un petit test de vérification depuis le poste source :</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="607" height="155" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_008_fwl.jpg" alt="" class="wp-image-3552" style="width:497px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_008_fwl.jpg 607w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_008_fwl-300x77.jpg 300w" sizes="auto, (max-width: 607px) 100vw, 607px" /></figure>
</div></div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-2 kt-pane3520_4ca822-16"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Mode Service</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">Commençons par créer notre fichier de service. La difficulté que j&rsquo;ai rencontrée ici est de jouer avec l&rsquo;environnement virtuel et le service OpenWebUI à démarrer. J&rsquo;ai bien trouvé une solution de contournement à mon problème toutefois cela me laisse un gout amer car la solution ne me semble pas propre du tout.</p>



<p class="wp-block-paragraph">C&rsquo;est je pense l&rsquo;un des points qui me frustre le plus dans le monde du libre, l&rsquo;imbrication de solution tierce et dans un sens une non-standardisation des méthodes d&rsquo;implémentations. Bien que je doive le reconnaitre c&rsquo;est ce qui fait tout son charme. Je t&rsquo;aime moi non plus. On se croirait dans Andromaque&#8230;</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-edb7a7f82c718c64f223a23096d9ca45"><code><strong>$ sudo vim /etc/systemd/system/openwebui.service</strong></code></pre>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td>Regardons d&rsquo;un peu plus près le contenu de ce fichier.<br><br>Nous retrouvons la description de notre service ainsi que son ordre de démarrage. OpenWebUI étant intimement lié à Ollama, il convient donc de définir ce dernier comme service requis.<br><br>Au niveau du service, nous sommes sur un type <strong>simple</strong>, le service étant exécuter par l&rsquo;utilisateur dédié <strong>openwebui</strong>. Il peut être acceptable bien que s&rsquo;est sacrément cochon d&rsquo;utiliser le compte root. Mais bon nous voulons éviter de faire étalage de notre amateurisme.<br><br><strong>WorkingDirectory</strong> représente le répertoire de travail dans lequel le programme sera exécuté.<br><strong>Environment</strong> permet de définir les variables d&rsquo;environnement.<br><br><strong>ExecStart</strong> permet d&rsquo;exécuter la commande. Dans mon cas, j&rsquo;en ai deux dont une qui est commentée (et qui ne fonctionne pas). <br><br><strong>Restart</strong> permet de définir le rédémarrage automatique dans le cas où le service viendrait à crash par exemple.<br><strong>RestartSec</strong> défini le délai de redémarrage en seconde.<br><br>Et pour finir, <strong>WantedBy</strong> pour spécifier le mode de service. Ici cela équivaut au mode normal.<br><br></td><td><strong><code>[Unit] </code><br><code>Description=Open WebUI Service</code><br><code>After=network.target ollama.service Requires=ollama.service </code><br><br><code>[Service] </code><br><code>Type=simple </code><br><code>User=openwebui</code><br><br><code>WorkingDirectory=/mnt/ollama/openwebui Environment="TMPDIR=/mnt/ollama/tmp" Environment="PATH=/mnt/ollama/openwebui/venv/bin:/usr/bin:/usr/sbin"</code><br><br><code>#ExecStart=/mnt/ollama/openwebui/venv/bin/open-webui serve --host 10.227.250.11 --port 8080 ExecStart=/bin/bash -c 'source /mnt/ollama/openwebui/venv/bin/activate &amp;&amp; open-webui serve --host 10.227.250.11 --port 8080'</code><br><br><code>Restart=always</code><br><code>RestartSec=5</code><br><br><code>[Install]</code><br><code>WantedBy=multi-user.target</code></strong></td></tr></tbody></table></figure>



<p class="wp-block-paragraph">Comme nous venons de créer un nouveau service, il sera nécessaire de recharger l&rsquo;ensemble du systemctl pour intégrer le nouveau service à la liste des services disponible. Après, j&rsquo;ai envie de dire c&rsquo;est le schéma classique d&rsquo;activation, démarrage et vérification.</p>



<p class="wp-block-paragraph"></p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-1de451f486c9405510986bb5d6a71df8"><code><strong>$ sudo systemctl daemon-reload
$ sudo systemctl enable openwebui
$ sudo systemctl start openwebui
$ sudo systemctl status openwebui</strong></code></pre>



<figure class="wp-block-table aligncenter"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td><img loading="lazy" decoding="async" width="550" height="272" class="wp-image-3561" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_009_status.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_009_status.jpg 939w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_009_status-300x149.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_009_status-768x380.jpg 768w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td><td><img loading="lazy" decoding="async" width="550" height="122" class="wp-image-3566" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_010_dedied_1.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_010_dedied_1.jpg 1896w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_010_dedied_1-300x67.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_010_dedied_1-1024x227.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_010_dedied_1-768x171.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_010_dedied_1-1536x341.jpg 1536w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>
</div></div></div>
</div></div></div>



<h4 class="wp-block-heading">Nginx, HTTPS</h4>



<p class="wp-block-paragraph">Je suis partagé quant à la rédaction de cette sous partie. Oui il est important de sécuriser l&rsquo;accès à l&rsquo;interface Web, mais j&rsquo;ai peur d&rsquo;être hors sujet et d&rsquo;alourdir l&rsquo;article. Mais d&rsquo;un autre côté, je ne veux pas non plus bâcler la chose&#8230; Encore un pu**n de choix cornélien&#8230;</p>



<p class="wp-block-paragraph">Bref, je vais faire au plus simple et si besoin écrirai un billet sur Nginx.</p>



<div class="wp-block-kadence-accordion alignnone"><div class="kt-accordion-wrap kt-accordion-id3520_66384a-95 kt-accordion-has-4-panes kt-active-pane-0 kt-accordion-block kt-pane-header-alignment-left kt-accodion-icon-style-basic kt-accodion-icon-side-right" style="max-width:none"><div class="kt-accordion-inner-wrap" data-allow-multiple-open="false" data-start-open="none">
<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-1 kt-pane3520_8bd374-fd"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Installation</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">L&rsquo;installation et activation du service, je passe mon tour. </p>



<p class="wp-block-paragraph"></p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-0543457c0fe9e0729374dcee107be068"><code><strong>$ sudo dnf install nginx
$ sudo systemctl enable nginx
$ sudo systemctl start nginx</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="939" height="450" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_020_nginx_0.jpg" alt="" class="wp-image-3573" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_020_nginx_0.jpg 939w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_020_nginx_0-300x144.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_020_nginx_0-768x368.jpg 768w" sizes="auto, (max-width: 939px) 100vw, 939px" /></figure>
</div>


<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="938" height="83" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_020_nginx_1.jpg" alt="" class="wp-image-3572" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_020_nginx_1.jpg 938w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_020_nginx_1-300x27.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_020_nginx_1-768x68.jpg 768w" sizes="auto, (max-width: 938px) 100vw, 938px" /></figure>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-2 kt-pane3520_228265-dc"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Certificats</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">Là encore une fois je rencontre un petit problème. Je n&rsquo;ai pas de certificat public que je pourrais utiliser, ma topologie réseau ne me permet pas d&rsquo;utiliser un certificat Let&rsquo;s Encrypt et sans vouloir spoiler je n&rsquo;ai pas envie de me prendre la tête. Donc ça va finir avec un bon vieux certificat autosigné 🙂</p>



<p class="wp-block-paragraph">La génération n&rsquo;est pas bien compliquée et si besoin, j&rsquo;ai déjà rédigé <a href="https://erwanguillemard.com/linux-certificats/">un article</a> sur le sujet.</p>



<p class="wp-block-paragraph">Créons le répertoire qui va contenir nos éléments de sécurité :</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-f4e5d319873f5128a8b950fc29a910ff"><code><strong>$ sudo mkdir -p /etc/nginx/ssl</strong></code></pre>



<p class="wp-block-paragraph">Générons notre certificat :</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-138cd2c03fe6716ce56321d41789b458"><code><strong>$ sudo openssl req req -x509 -nodes -days 365 \
-newkey rsa:2048 \
-keyout /etc/nginx/ssl/openwebui.key \
-out /etc/nginx/ssl/openwebui.crt</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="940" height="89" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_020_nginx_2.jpg" alt="" class="wp-image-3574" style="aspect-ratio:10.562461026813553;width:771px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_020_nginx_2.jpg 940w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_020_nginx_2-300x28.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_020_nginx_2-768x73.jpg 768w" sizes="auto, (max-width: 940px) 100vw, 940px" /></figure>
</div>

<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="778" height="147" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_020_nginx_3.jpg" alt="" class="wp-image-3575" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_020_nginx_3.jpg 778w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_020_nginx_3-300x57.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_020_nginx_3-768x145.jpg 768w" sizes="auto, (max-width: 778px) 100vw, 778px" /></figure>
</div>


<p class="wp-block-paragraph"></p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-3 kt-pane3520_a1b4ed-16"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Configuration</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">Créons et éditons notre fichier de configuration. Je prendrai le temps d&rsquo;expliquer l&rsquo;intégralité du fichier de configuration.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-8bf2e2ac7a6fa0624b3de515312c5c6b"><code><strong>$ sudo vim /etc/nginx/conf.d/openwebui.conf</strong></code></pre>



<pre class="wp-block-code"><code>server {
    listen 80;
    server_name 10.227.250.11;

    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    server_name 10.227.250.11;

    ssl_certificate /etc/nginx/ssl/openwebui.crt;
    ssl_certificate_key /etc/nginx/ssl/openwebui.key;

    # TLS sécurisé
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;

    ssl_session_timeout 1d;
    ssl_session_cache shared:SSL:10m;

    # sécurité headers
    add_header X-Frame-Options SAMEORIGIN;
    add_header X-Content-Type-Options nosniff;
    add_header X-XSS-Protection "1; mode=block";

    # taille upload
    client_max_body_size 100M;

    # compression
    gzip on;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml;

    location / {

        proxy_pass http://10.227.250.11:8080;

        proxy_http_version 1.1;

        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        # WebSocket support (important OpenWebUI)
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

        proxy_read_timeout 3600;
        proxy_send_timeout 3600;
    }
}</code></pre>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td>La première section permet de réaliser la redirection du protocole HTTP vers HTTPS de manière permanente. Ainsi si je contacte l&rsquo;url http://10.227.250.11, je serais automatiquement redirigé vers https://10.227.254.11.</td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="211" class="wp-image-3580" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_021_nginx.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_021_nginx.jpg 344w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_021_nginx-300x115.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr><tr><td>Le second bloc indique que nous écoutons sur le port 443 sur l&rsquo;interface 10.227.250.11. L&#8217;emplacement des fichiers contenant la clé privée ainsi que le certificat sont spécifiés pour activer la couche de sécurité (j&rsquo;ai l&rsquo;impression d&rsquo;enfoncer des portes ouvertes&#8230;). J&rsquo;indique qu&rsquo;elles sont les versions des protocoles TLS<sup data-fn="1a3ccfdd-7fad-428c-9f9a-15401188579d" class="fn"><a href="#1a3ccfdd-7fad-428c-9f9a-15401188579d" id="1a3ccfdd-7fad-428c-9f9a-15401188579d-link">17</a></sup> autorisées et laisse le serveur choisir le chiffrement le plus sûr.<br>Côté en-tête, j&rsquo;ai repris les suggestions de sécurité implémentée pour ITOP. Soit la restriction de mettre le site en iframe externe, de restreindre le navigateur à deviner le tye MIME qui est utilisé et surtout d&rsquo;activer la protection anti-cross-site scripting. Niveau upload, j&rsquo;ai vu large et j&rsquo;ai autorisé le téléversement de fichier de 100 Mio.<br>Côté performance, j&rsquo;ai activé la compression des flux pour optimiser un peu les performances réseaux.</td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="446" class="wp-image-3581" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_022_nginx.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_022_nginx.jpg 651w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_022_nginx-300x243.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr><tr><td>Le troisième bloc concerne la partie Reverse Proxy.<br>Toutes les requêtes qui sont envoyées sur https://10.227.250.11 sont redirigées vers le port 8080.<br>Concernant les en-têtes il est nécessaire d&rsquo;utiliser les websockets car seront transmis l&rsquo;ip du client, le protocole utilisé et le NDD<sup data-fn="6f19f21f-54c7-433f-8a76-3c3d830f4eda" class="fn"><a href="#6f19f21f-54c7-433f-8a76-3c3d830f4eda" id="6f19f21f-54c7-433f-8a76-3c3d830f4eda-link">18</a></sup> ou l&rsquo;IP demandé.<br>Les deux lignes suivantes permettent de réaliser la jonction entre nginx et les websockets.</td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="381" class="wp-image-3582" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_023_nginx.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_023_nginx.jpg 530w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_023_nginx-300x208.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Une fois la configuration faite, il est important de réaliser un petit contrôle de notre petit fichier afin de s&rsquo;assurer que ce dernier ne comporte pas d&rsquo;erreur. </p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-431bd28015d2c71adaab9e3913939a85"><code><strong>$ sudo nginx -t </strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="940" height="106" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_020_nginx_4.jpg" alt="" class="wp-image-3578" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_020_nginx_4.jpg 940w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_020_nginx_4-300x34.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_020_nginx_4-768x87.jpg 768w" sizes="auto, (max-width: 940px) 100vw, 940px" /></figure>
</div>


<p class="wp-block-paragraph">Il faudra penser à recharger la configuration et hop le tour est joué.</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-4 kt-pane3520_738fe8-6a"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Sécurité</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">Nous souhaitons toujours publier notre interface web en HTTPS. Donc il va falloir jouer avec nos UTMs !</p>



<p class="wp-block-paragraph">Sur le plan interne, autorisons nos flux https :</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-71931f831671ed470001cbac0f47f7bc"><code><strong>$ sudo firewall-cmd --permanent --add-port=443/tcp
$ sudo firewall-cmd --reload</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="768" height="84" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_020_nginx_5.jpg" alt="" class="wp-image-3576" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_020_nginx_5.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_020_nginx_5-300x33.jpg 300w" sizes="auto, (max-width: 768px) 100vw, 768px" /></figure>
</div>


<p class="wp-block-paragraph">Nous pourrions comme énoncé plus haut pour le protocole HTTP être bien plus rigoureux dans notre règle de sécurité. Mais encore une fois ayant un UTM en amont, j&rsquo;accepte le risque. Juste ne pas oublier de créer la règle sinon vous passez pour un c*n.</p>



<p class="wp-block-paragraph">Si nous sommes joueurs, nous pouvons essayer de joindre directement notre interface web depuis notre navigateur. Normalement vous devez vous prendre dans les dents</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="606" height="230" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_020_nginx_7.jpg" alt="" class="wp-image-3569" style="aspect-ratio:2.634850493445279;width:490px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_020_nginx_7.jpg 606w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_020_nginx_7-300x114.jpg 300w" sizes="auto, (max-width: 606px) 100vw, 606px" /></figure>
</div>


<p class="wp-block-paragraph">Ca vous fait la b**e hein ? Je vous rassure je me suis pris la même rouste. J&rsquo;ai oublié d&rsquo;autoriser le contexte de mon SELinux pour autoriser les services http à accéder aux réseaux 😀</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-292226daa4277153a0a72abd06865dd7"><code><strong>$ sudo setsebool -P httpd_can_network_connect 1</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="731" height="23" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_020_nginx_6.jpg" alt="" class="wp-image-3577" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_020_nginx_6.jpg 731w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_020_nginx_6-300x9.jpg 300w" sizes="auto, (max-width: 731px) 100vw, 731px" /></figure>
</div>


<p class="wp-block-paragraph">Un petit F5 et hop c&rsquo;est tout bon &lt;3</p>
</div></div></div>
</div></div></div>



<p class="wp-block-paragraph"></p>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td>Normalement avec toutes nos actions, nous devons joindre notre interface web depuis un navigateur de manière sécurisée (hormis l&rsquo;erreur liée à notre certificat autosigné).<br><br>Allez, on passe à la partie démonstration ?</td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="355" class="wp-image-3571" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_020_nginx_8.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_020_nginx_8.jpg 958w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_020_nginx_8-300x194.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_020_nginx_8-768x496.jpg 768w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>



<h2 class="wp-block-heading">Démonstration</h2>



<p class="wp-block-paragraph">Pour le test, j&rsquo;ai décidé de changer un peu de format et de passer par des formats vidéo. Surtout que dans ce cas précis, cela évitera de mon côté de blablater. Cependant, ce n&rsquo;est pas pour autant que le travail est plus simple ou plus rapide.</p>



<p class="wp-block-paragraph">J&rsquo;ai également pris le parti de commenter mes enregistrements et vidéos en anglais (oui même avec mon anglais aussi rouillé qu&rsquo;une vieille cantine de bidasse, si vous voulez <a href="https://www.youtube.com/watch?v=sufXl_PpKAk">trikitez mes vidéos</a> je vous laisse ce plaisir 🙂 ).</p>



<figure class="wp-block-embed aligncenter is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="APPS   OpenWebUI" width="720" height="405" src="https://www.youtube.com/embed/UQW_L6yub3g?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<h2 class="wp-block-heading">Conclusion</h2>



<p class="wp-block-paragraph">La combinaison des solutions OpenWebUI et Ollama fonctionne à la perfection. Si nous associons le côté multimodèle d&rsquo;Ollama et son fonctionnement hybride avec la puissance de l&rsquo;interface OpenWebUI il est alors possible de fournir une solution complète à destination des utilisateurs.</p>



<p class="wp-block-paragraph">Toutefois, je reste profondément frustré pour l&rsquo;instant. L&rsquo;ajout de la couche OpenWebUI vient rallentir et allourdir l&rsquo;usage d&rsquo;Ollama. D&rsquo;un autre côté, est ce vraiment pertinent comme remarque à savoir que je ne réponds à aucun prérequis matériel ? C&rsquo;est là où le bât blesse encore une fois. Cela fonctionne mais à quel prix ?</p>



<p class="wp-block-paragraph">Il est également important de prendre en compte les couts annexes et variables (comme au hasard, la consommation électrique, refroidissement&#8230;) périphériques à l&rsquo;usage de l&rsquo;IA. Nous parlons du réchauffement climatique, de limiter nos émissions de carbone et j&rsquo;en passe pour d&rsquo;un autre côté user de l&rsquo;IA à tort ou à raison. Je ne tiens pas à lancer un débat climatosceptique ou sur est-ce bien ou non d&rsquo;utiliser l&rsquo;IA.</p>



<p class="wp-block-paragraph">Je pense simplement qu&rsquo;il y a encore beaucoup à faire pour accorder en synergie la puissance et l&rsquo;usage de l&rsquo;IA avec les convictions écologiques et environnementales. Si nous être vivant allons avoir chaud, que dire des CPUs/GPUs ? <strong><em>#tousdanslemêmebateau</em></strong> Bref, un moratoire serait nécessaire en somme. Mais je laisse ça au pisse violon que je suis.</p>



<p class="wp-block-paragraph">Je reste convaincu de la fiabilité et viabilité de la solution dans un milieu professionnel, malheureusement, pour moi je préfère me passer de l&rsquo;interface Web. Donc en d&rsquo;autres termes, je vais rollback mon snapshot (ou restaurer mon backup au choix). Après tout, je peux toujours utiliser l&rsquo;interface CLI directement depuis une session SSH<sup data-fn="a61fa4e1-f1b4-4118-a125-8ff2b30744bb" class="fn"><a href="#a61fa4e1-f1b4-4118-a125-8ff2b30744bb" id="a61fa4e1-f1b4-4118-a125-8ff2b30744bb-link">19</a></sup> ? Oui mais pas que.</p>



<p class="has-text-align-center wp-block-paragraph"><strong>Pourquoi ne pas faire une petite interface qui exploite l&rsquo;API Ollama ?</strong></p>



<p class="wp-block-paragraph">Ah nous y voila ! Ca sent le projet long comme un jour sans pain encore en approche. Blague mis à part, peut être que cela n&rsquo;aboutira pas. Mais j&rsquo;ai envie de pousser relativement loin la solution Ollama.</p>



<p class="wp-block-paragraph">Pour faire vraiment simple. OpenWebUI c&rsquo;est supercool mais il faut les ressources pour pouvoir l&rsquo;utiliser pleinement pour ne pas souffrir d&rsquo;une grande frustration. 🙂</p>



<p class="wp-block-paragraph">Le mot de la fin :</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><em>Je branche OpenWebUI sur une prise RJ45 en camembert ! Je contre avec un lama qui compile une girafe. Vous ne pouvez pas, il y a Sandrine ROUSSEAU au festival de la tête de veau.</em></p>
<cite>Erwan GUILLEMARD</cite></blockquote>



<h2 class="wp-block-heading">Sources</h2>



<ul class="wp-block-list">
<li><a href="https://docs.openwebui.com/getting-started/">OpenWebUI : Quick Started</a></li>
</ul>


<ol class="wp-block-footnotes"><li id="9b4b7116-7da7-4c05-943e-ac072573b13f"><strong>LLM : </strong>Large Language Models <a href="#9b4b7116-7da7-4c05-943e-ac072573b13f-link" aria-label="Aller à la note de bas de page 1">↩︎</a></li><li id="f36cb89d-8ac6-4ed0-8df5-7d578d4680c4"><strong>IA :</strong> Intelligence Artificielle <a href="#f36cb89d-8ac6-4ed0-8df5-7d578d4680c4-link" aria-label="Aller à la note de bas de page 2">↩︎</a></li><li id="9e902093-392b-4860-a9f8-d2c28cf28686"><strong>RHEL :</strong> RedHat Entreprise Linux <a href="#9e902093-392b-4860-a9f8-d2c28cf28686-link" aria-label="Aller à la note de bas de page 3">↩︎</a></li><li id="4a15f514-bc25-45dc-8c12-3f5fd10c286d"><strong>DSI :</strong> Direction des Services Informatiques <a href="#4a15f514-bc25-45dc-8c12-3f5fd10c286d-link" aria-label="Aller à la note de bas de page 4">↩︎</a></li><li id="63b8e4f1-84bc-47ad-8afa-7dae59217921"><strong>CPU :</strong> Central Processing Unit <a href="#63b8e4f1-84bc-47ad-8afa-7dae59217921-link" aria-label="Aller à la note de bas de page 5">↩︎</a></li><li id="f958a01e-8b83-4fc9-a592-006e9651956c"><strong>RAM :</strong> Random Access Memory <a href="#f958a01e-8b83-4fc9-a592-006e9651956c-link" aria-label="Aller à la note de bas de page 6">↩︎</a></li><li id="8f6e0338-719e-4456-808e-82e0a17b70ea"><strong>SSD :</strong> Solid State Drive <a href="#8f6e0338-719e-4456-808e-82e0a17b70ea-link" aria-label="Aller à la note de bas de page 7">↩︎</a></li><li id="57be53ba-9128-49e7-ae7a-c337f01cf69e"><strong>GPU :</strong> Graphics Processing Unit <a href="#57be53ba-9128-49e7-ae7a-c337f01cf69e-link" aria-label="Aller à la note de bas de page 8">↩︎</a></li><li id="f4993b7e-0f63-4b56-886c-b4e26648314b"><strong>HTTP :</strong> Hypertext Transfer Protocol <a href="#f4993b7e-0f63-4b56-886c-b4e26648314b-link" aria-label="Aller à la note de bas de page 9">↩︎</a></li><li id="1d2044d0-2a6b-4f6c-9865-c8cded2e72e1"><strong>HTTPS :</strong> Hypertext Transfer Protocol Secure <a href="#1d2044d0-2a6b-4f6c-9865-c8cded2e72e1-link" aria-label="Aller à la note de bas de page 10">↩︎</a></li><li id="688876c0-5948-48bf-baaf-3d493e2e5c01"><strong>SE :</strong> Système d&rsquo;Exploitation <a href="#688876c0-5948-48bf-baaf-3d493e2e5c01-link" aria-label="Aller à la note de bas de page 11">↩︎</a></li><li id="13f6c481-ca7e-4e73-875d-cf307bad64ec"><strong>UTM :</strong> Unified Threat Management <a href="#13f6c481-ca7e-4e73-875d-cf307bad64ec-link" aria-label="Aller à la note de bas de page 12">↩︎</a></li><li id="ac43ad3e-9b07-4981-8114-d187d3cf6dbf"><strong>WAN :</strong> Wide Area Network <a href="#ac43ad3e-9b07-4981-8114-d187d3cf6dbf-link" aria-label="Aller à la note de bas de page 13">↩︎</a></li><li id="103fd0e8-cd60-41ff-b80a-9c51d9c20b76"><strong>DMZ : </strong>DeMilitarized Zone <a href="#103fd0e8-cd60-41ff-b80a-9c51d9c20b76-link" aria-label="Aller à la note de bas de page 14">↩︎</a></li><li id="2f21ddb8-be62-4029-92fc-283d894d896c"><strong>VM :</strong> Virtual Machine <a href="#2f21ddb8-be62-4029-92fc-283d894d896c-link" aria-label="Aller à la note de bas de page 15">↩︎</a></li><li id="96e1bb31-3abc-4f7d-9141-265b48fe943e"><strong>CLI : </strong>Command Line Interface <a href="#96e1bb31-3abc-4f7d-9141-265b48fe943e-link" aria-label="Aller à la note de bas de page 16">↩︎</a></li><li id="1a3ccfdd-7fad-428c-9f9a-15401188579d"><strong>TLS :</strong> Transport Layer Security <a href="#1a3ccfdd-7fad-428c-9f9a-15401188579d-link" aria-label="Aller à la note de bas de page 17">↩︎</a></li><li id="6f19f21f-54c7-433f-8a76-3c3d830f4eda"><strong>NDD :</strong> Nom De Domaine <a href="#6f19f21f-54c7-433f-8a76-3c3d830f4eda-link" aria-label="Aller à la note de bas de page 18">↩︎</a></li><li id="a61fa4e1-f1b4-4118-a125-8ff2b30744bb"><strong>SSH :</strong> Secure SHell <a href="#a61fa4e1-f1b4-4118-a125-8ff2b30744bb-link" aria-label="Aller à la note de bas de page 19">↩︎</a></li></ol>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Apps &#8211; OLLAMA</title>
		<link>https://erwanguillemard.com/apps-ollama/</link>
		
		<dc:creator><![CDATA[Erwan Guillemard]]></dc:creator>
		<pubDate>Sat, 18 Apr 2026 11:32:22 +0000</pubDate>
				<category><![CDATA[Applications]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Application]]></category>
		<category><![CDATA[IA]]></category>
		<category><![CDATA[OLLAMA]]></category>
		<guid isPermaLink="false">https://erwanguillemard.com/?p=3440</guid>

					<description><![CDATA[Pour ce nouveau billet, je pense que commencer par une définition est une bonne chose. Robot : nom masculin, du tchèque robota, travail forcé, mot créé en 1920 par K. Capek. Dans les œuvres de science-fiction, machine à l&#8217;aspect humain, capable de se mouvoir, d&#8217;exécuter des opérations, de parler. Appareil automatique capable de manipuler des...]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Pour ce nouveau billet, je pense que commencer par une définition est une bonne chose.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="has-small-font-size wp-block-paragraph"><strong>Robot :</strong> nom masculin, du tchèque <strong>robota</strong>, travail forcé, mot créé en 1920 par K. Capek.</p>



<p class="has-small-font-size wp-block-paragraph"><em>Dans les œuvres de science-fiction, machine à l&rsquo;aspect humain, capable de se mouvoir, d&rsquo;exécuter des opérations, de parler.</em></p>



<p class="has-small-font-size wp-block-paragraph"><em>Appareil automatique capable de manipuler des objets ou d&rsquo;exécuter des opérations selon un programme fixe, modifiable ou adaptable.</em></p>
<cite><a href="https://www.larousse.fr/dictionnaires/francais/robot/69647">Définition Larousse</a></cite></blockquote>



<p class="wp-block-paragraph">Au vu du titre de cet article et de la définition posée précédemment, difficile de ne pas deviner le sujet qui va être abordé.</p>



<p class="wp-block-paragraph">Hé oui, moi le puriste, je vais parler d&rsquo;IA<sup data-fn="cfefe833-a7a4-4019-87c1-c684487526cf" class="fn"><a href="#cfefe833-a7a4-4019-87c1-c684487526cf" id="cfefe833-a7a4-4019-87c1-c684487526cf-link">1</a></sup> et pire que cela l&rsquo;utiliser de manière récurrente. Je me sens en ce moment comme le capitaine Haddock face au lama dans l&rsquo;œuvre d&rsquo;Hergé, Tintin et le temple du soleil.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="504" height="267" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_001_Tintin.jpg" alt="" class="wp-image-3444" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_001_Tintin.jpg 504w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_001_Tintin-300x159.jpg 300w" sizes="auto, (max-width: 504px) 100vw, 504px" /></figure>
</div>


<p class="wp-block-paragraph">Naturellement, au vu de mes précédents écrits, c&rsquo;est vous lecteurs et l&rsquo;ensemble des solutions IA qui me crachent dessus. C&rsquo;est l&rsquo;arroseur arrosé en somme, moi qui ne voulais pas entendre parler de ça&#8230;</p>



<p class="has-text-align-center wp-block-paragraph"><strong>Mais alors pourquoi un tel revirement de situation M&rsquo;sieur GUILLEMARD ?</strong></p>



<p class="wp-block-paragraph">Je pense qu&rsquo;il faut vivre avec son temps et ignorer cet outil technologique serait signer mon arrêt de mon mort d&rsquo;ici quelques années et devenir un être <strong><em>never been</em></strong> à défaut d&rsquo;<strong><em>has been</em></strong>&#8230;</p>



<p class="has-text-align-center wp-block-paragraph"><strong>Après tout <em><mark style="background-color:rgba(0, 0, 0, 0);color:#fe0404" class="has-inline-color">Errare humanum est, perseverare diabolicum</mark></em></strong><sup data-fn="aadcbef0-7f66-4bcf-bdef-699e3c85609a" class="fn"><a href="#aadcbef0-7f66-4bcf-bdef-699e3c85609a" id="aadcbef0-7f66-4bcf-bdef-699e3c85609a-link">2</a></sup><strong> non ?</strong></p>





<h2 class="wp-block-heading">Avant-Propos</h2>



<p class="wp-block-paragraph">J&rsquo;ai pris le parti d&rsquo;être méfiant vis à vis des outils d&rsquo;IA en ligne gratuit ou du moins libre d&rsquo;utilisation.</p>



<ul class="wp-block-list">
<li>ChatGPT</li>



<li>Gemini</li>



<li>Copilot</li>



<li>Claude</li>



<li>&#8230;</li>
</ul>



<p class="wp-block-paragraph">Je ne me mouille pas trop dans les moteurs d&rsquo;IA&#8230;</p>



<p class="wp-block-paragraph">Dire que je n&rsquo;ai jamais utilisé l&rsquo;un de ces moteurs serait me parjurer et il faut reconnaitre qu&rsquo;il y a un côté pratique. Difficile une fois avoir gouter à la simplicité pour ne pas l&rsquo;utiliser à tout va pour tout et rien. C&rsquo;est là pour moi le piège de la pauvreté intellectuelle. Comme toutes les bonnes choses il faut savoir ne pas en abuser.</p>



<p class="wp-block-paragraph">En dehors de l&rsquo;aspect social et sociétal qui me préoccupe tant, se pose la question des données saisies dans le moteur de recherche ou plutôt de prompt.</p>



<ul class="wp-block-list">
<li>Que deviennent les données saisies ?</li>



<li>Que deviennent les données retournées ?</li>



<li>Combien de temps sont conservés ces données ?</li>



<li>A qui profitent ces données ?</li>



<li>Qui sur surveillent les données ?</li>
</ul>



<p class="wp-block-paragraph">Cela fait un bon nombre de question non ? Surtout qu&rsquo;un grand nombre des acteurs de l&rsquo;IA sont aux US, Chine etc avec une législation bien singulière. Qui de nos jours lis encore les CGUs<sup data-fn="b41451ff-b3b4-4f38-bb68-9645125a745a" class="fn"><a href="#b41451ff-b3b4-4f38-bb68-9645125a745a" id="b41451ff-b3b4-4f38-bb68-9645125a745a-link">3</a></sup> (et qui les a déjà lus) ?</p>



<p class="wp-block-paragraph">C&rsquo;est ainsi que grâce à mon directeur j&rsquo;ai découvert la solution OLLAMA. Solution open-source qui exécute des modèles d&rsquo;intelligence artificielle (aussi appelé LLM<sup data-fn="1aad26f0-eec5-4a0f-8e20-fdd248a35c69" class="fn"><a href="#1aad26f0-eec5-4a0f-8e20-fdd248a35c69" id="1aad26f0-eec5-4a0f-8e20-fdd248a35c69-link">4</a></sup>) localement. Tout de suite, le projet m&rsquo;a séduit et je me suis demandé</p>



<p class="has-text-align-center wp-block-paragraph"><strong>Et pourquoi pas ? </strong></p>



<p class="wp-block-paragraph">Dans le pire des cas, je mourrai moins c*n ce soir comme dirait un philosophe du cercle familial.</p>



<p class="wp-block-paragraph">Naturellement, j&rsquo;ai choisi d&rsquo;user de OLLAMA sur ma distribution favorite RockyLinux. L&rsquo;environnement a été préalablement durci.</p>



<p class="wp-block-paragraph">On se lance dans la théorie puis dans la pratique mes petits Lamas ?</p>



<h2 class="wp-block-heading">Prérequis</h2>



<ul class="wp-block-list">
<li><strong>SE :</strong>
<ul class="wp-block-list">
<li>Rocky Linux 9.x et version ultérieures (pour ma part ça sera du 10.x)</li>



<li>macOS</li>



<li>Windows</li>
</ul>
</li>



<li><strong>Apps :&nbsp;</strong>
<ul class="wp-block-list">
<li>Ollama</li>
</ul>
</li>



<li><strong>Autres :</strong>
<ul class="wp-block-list">
<li>GPU<sup data-fn="fdf3a5b9-4253-464d-a09e-8fb86b58314e" class="fn"><a href="#fdf3a5b9-4253-464d-a09e-8fb86b58314e" id="fdf3a5b9-4253-464d-a09e-8fb86b58314e-link">5</a></sup></li>



<li>Minimum 4 CPU<sup data-fn="73029218-b1cc-46cd-b970-647ebf9d8979" class="fn"><a href="#73029218-b1cc-46cd-b970-647ebf9d8979" id="73029218-b1cc-46cd-b970-647ebf9d8979-link">6</a></sup></li>



<li>Stockage rapide (SSD<sup data-fn="a37422d2-85b9-4b20-aaed-ed832709d897" class="fn"><a href="#a37422d2-85b9-4b20-aaed-ed832709d897" id="a37422d2-85b9-4b20-aaed-ed832709d897-link">7</a></sup> ou Nvme)</li>
</ul>
</li>
</ul>



<h2 class="wp-block-heading">Théorie</h2>



<p class="wp-block-paragraph">Je vais essayer d&rsquo;être le moins rassoir possible. Toutefois et encore il est nécessaire d&rsquo;où nous partons pour en être là maintenant avec l&rsquo;IA.</p>



<h3 class="wp-block-heading">Un peu d&rsquo;histoire</h3>



<p class="wp-block-paragraph">La notion d&rsquo;intelligence artificielle vient de loin dans notre histoire, puisque l&rsquo;homme depuis l&rsquo;antiquité rêve d&rsquo;objets animés intelligents qui pourraient répondre à ces besoins.</p>



<p class="wp-block-paragraph">Ce qui est fascinant ce trouve dans les différentes cultures à travers les âges. Que ce soit :</p>



<ul class="wp-block-list">
<li>Les <a href="https://fr.wikipedia.org/wiki/H%C3%A9pha%C3%AFstos">automates d&rsquo;Héphaïstos</a> dans la mythologie grecque</li>



<li>La tentation de créé l&rsquo;Homme servi par l&rsquo;alchimie aux moyen âge comme la science Talkim du grand savant islamique <a href="https://fr.wikipedia.org/wiki/Jabir_ibn_Hayyan">Jabir ibn Hayyan</a> (Geber en latin), des <a href="https://fr.wikipedia.org/wiki/Homoncule_(alchimie)">homoculus</a> par le médecin suisse de conviction chrétienne <a href="https://fr.wikipedia.org/wiki/Paracelse">Paracelse</a> qui s&rsquo;inspirera des travaux de <a href="https://fr.wikipedia.org/wiki/Zosime_de_Panopolis">Zosime de Panopolis</a> sans oublier l&rsquo;un des plus connue de tous ces automates, le Golem d&rsquo;argile présent dans le Talmud du judaïsme, créé par le rabbin Maharal pour protéger la communauté juive de Prague face aux multiples pogroms (j&rsquo;ai d&rsquo;ailleurs eu la possibilité de visiter le cimetière juif de Prague et de comprendre tout cela).</li>



<li>Plus tard, nous retrouverons des œuvres telles que
<ul class="wp-block-list">
<li><a href="https://fr.wikipedia.org/wiki/Les_Aventures_de_Pinocchio">Les Aventures de Pinocchio</a> de <a href="https://fr.wikipedia.org/wiki/Carlo_Collodi">Carlo Collodi</a> avant d&rsquo;être adapté en dessin animé par Disney</li>



<li><a href="https://fr.wikipedia.org/wiki/Frankenstein_ou_le_Prom%C3%A9th%C3%A9e_moderne">Frankenstein</a> de <a href="https://fr.wikipedia.org/wiki/Mary_Shelley">Mary Shelley</a></li>



<li>Ou encore <a href="https://fr.wikipedia.org/wiki/Deep_Blue">Deep Blue</a> qui viendra à bout de <a href="https://fr.wikipedia.org/wiki/Garry_Kasparov">Garry Kasparov</a> aux échecs.</li>
</ul>
</li>
</ul>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td>Bref, tout cela pour dire que depuis l&rsquo;origine de l&rsquo;humanité, nous Homme recherchons à créer des objets autonomes et intelligents à notre services. Pour de multiples raisons, défensives, assistanat etc. Le plus troublant, cette pensée de création pourtant contre religieuse et présente dans toutes les cultures et religions portées par ces savants et lettrés (et ça, voyez-vous je trouve ça beau, très beau).</td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="650" height="867" class="wp-image-3481" style="width: 650px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_002_GolemPrague_EGU-scaled.jpg" alt="Kafka &amp; Prague Golem" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_002_GolemPrague_EGU-scaled.jpg 1920w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_002_GolemPrague_EGU-225x300.jpg 225w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_002_GolemPrague_EGU-768x1024.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_002_GolemPrague_EGU-1152x1536.jpg 1152w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_002_GolemPrague_EGU-1536x2048.jpg 1536w" sizes="auto, (max-width: 650px) 100vw, 650px" /></td></tr></tbody></table></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Enfin, il faudra attendre le XXème siècle et l&rsquo;arrivée des premiers ordinateur programmable pour que l&rsquo;IA se développe pleinement.</p>



<p class="wp-block-paragraph">C&rsquo;est le pionnier et j&rsquo;oserai dire le père de l&rsquo;IA John McCarthy qui ouvre la voie, notamment par cette citation :</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><em>C&rsquo;est la science et l&rsquo;ingénierie de la fabrication de machines intelligentes, en particulier de programmes informatiques intelligents. Elle est liée à la tâche similaire qui consiste à utiliser des ordinateurs pour comprendre l&rsquo;intelligence humaine, mais l&rsquo;IA ne doit pas se limiter aux méthodes qui sont biologiquement observables.</em></p>
<cite>John McCarthy &#8211; <a href="https://fr.wikipedia.org/wiki/Intelligence_artificielle">Wikipédia</a></cite></blockquote>



<p class="wp-block-paragraph">Le sujet étant réellement complexe, il est difficile de concrétiser et de répondre aux attentes des investissements privés et étatiques durant la période 70 à 80. Ce qui vaudra un ralentissement dans la rechercher et la montée en puissance de l&rsquo;IA que nous connaissons ce jour en 2026. Et pourtant les théories et grands principes mathématiques et logiques sont établis et adopté par la DARPA<sup data-fn="551f4327-d659-4f5e-aa79-e901800f9a6f" class="fn"><a href="#551f4327-d659-4f5e-aa79-e901800f9a6f" id="551f4327-d659-4f5e-aa79-e901800f9a6f-link">8</a></sup>. C&rsquo;est ainsi que s&rsquo;affronte deux grands systèmes :</p>



<p class="has-text-align-center wp-block-paragraph"><strong>Le système logiciste <em>VS</em> Le système neuronale</strong></p>



<p class="wp-block-paragraph">C&rsquo;est en 2010, que l&rsquo;IA fait réellement son entrée dans nos vies du quotidien et dans les différents secteurs d&rsquo;activités.</p>



<p class="wp-block-paragraph">Pour entrer davantage dans le détail je vous invite à lire la page wikipédia (cf les sources). J&rsquo;ai promis de faire court. 🙂</p>



<h3 class="wp-block-heading">Les modèles d&rsquo;IA</h3>



<p class="wp-block-paragraph">Les modèles d&rsquo;IA, c&rsquo;est un peu comme un oignon, il y plusieurs couches.</p>



<p class="wp-block-paragraph">Déjà il est important de dissocier le Machine Learning du Deep Learning.</p>



<div class="wp-block-kadence-accordion alignnone"><div class="kt-accordion-wrap kt-accordion-id3440_904b9a-45 kt-accordion-has-2-panes kt-active-pane-0 kt-accordion-block kt-pane-header-alignment-left kt-accodion-icon-style-basic kt-accodion-icon-side-right" style="max-width:none"><div class="kt-accordion-inner-wrap" data-allow-multiple-open="false" data-start-open="none">
<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-1 kt-pane3440_b2140d-05"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Machine Learning</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner"><div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="954" height="252" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_002_MLearning.jpg" alt="" class="wp-image-3494" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_002_MLearning.jpg 954w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_002_MLearning-300x79.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_002_MLearning-768x203.jpg 768w" sizes="auto, (max-width: 954px) 100vw, 954px" /></figure>
</div>


<p class="wp-block-paragraph">Le process pourrait se décrire de la manière suivante :</p>



<ul class="wp-block-list">
<li><strong><span style="text-decoration: underline;">Phase 1 :</span></strong> Identifier les mots clés fournit en entrée les plus pertinents afin de préparer ces derniers à être analysé. Nous parlons généralement de datasets.</li>



<li><strong><span style="text-decoration: underline;">Phase 2 :</span></strong> Choisir le bon modèle ou algorithme qui sera le plus pertinent à être utilisé selon l&rsquo;identification des datasets identifiés et analysés.</li>



<li><strong><span style="text-decoration: underline;">Phase 3 :</span></strong> Construire le modèle d&rsquo;analyse basé sur l&rsquo;algorithme choisie lors de l&rsquo;étape précédente.</li>



<li><strong><span style="text-decoration: underline;">Phase 4 :</span></strong> Jouer le modèle sur un ensemble de jeux de données afin d&rsquo;obtenir plusieurs jeux de données.</li>



<li><strong><span style="text-decoration: underline;">Phase 5 :</span></strong> Utiliser le modèle pour attribuer une note à l&rsquo;ensemble des jeux de données retournés et fournier des patterns pertinents adaptés aux datasets initiaux.</li>
</ul>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-2 kt-pane3440_61862a-a3"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Deep Learning</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner"><div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="944" height="230" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_002_DLearning.jpg" alt="" class="wp-image-3495" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_002_DLearning.jpg 944w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_002_DLearning-300x73.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_002_DLearning-768x187.jpg 768w" sizes="auto, (max-width: 944px) 100vw, 944px" /></figure>
</div>


<p class="wp-block-paragraph">Le process pourrait se décrire de la manière suivante :</p>



<ul class="wp-block-list">
<li><strong><span style="text-decoration: underline;">Phase 1 :</span></strong> Comprendre le contexte présenté par l&rsquo;utilisateur et décider ou non si le Deep Learning est nécessaire ou non.</li>



<li><strong><span style="text-decoration: underline;">Phase 2 :</span></strong> Identifier les mots clés fournit en entrée les plus pertinents afin de préparer ces derniers à être analysé. Nous parlons généralement de datasets.</li>



<li><span style="text-decoration: underline;"><strong>Phase 3 :</strong></span> Choisir le bon modèle ou algorithme qui sera le plus pertinent à être utilisé selon l&rsquo;identification des datasets identifiés et analysés.</li>



<li><strong><span style="text-decoration: underline;">Phase 4 :</span></strong> Jouer le modèle sur un ensemble de jeux de données afin d&rsquo;obtenir plusieurs jeux de données.</li>



<li><strong><span style="text-decoration: underline;">Phase 5 :</span></strong> Compare le modèle ainsi que ces performances face aux données existantes identifiés ou non identifiées avec notre contexte initial.</li>
</ul>
</div></div></div>
</div></div></div>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Pour le comprendre au mieux, il convient de reprendre le <strong><em>Diagramm de Venn</em></strong> pour comprendre comment s&rsquo;imbriquent ces différentes notions d&rsquo;apprentissage.</p>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td><strong>IA :</strong> a pour objectif de comprendre le langage humain, de réaliser les analyses prédictives offrir une IHM<sup data-fn="7ddca2cc-8395-4bb3-9a48-65ef2cbdd525" class="fn"><a href="#7ddca2cc-8395-4bb3-9a48-65ef2cbdd525" id="7ddca2cc-8395-4bb3-9a48-65ef2cbdd525-link">9</a></sup> et AGI<sup data-fn="3da01144-9884-4e50-80b3-cb720fe5d120" class="fn"><a href="#3da01144-9884-4e50-80b3-cb720fe5d120" id="3da01144-9884-4e50-80b3-cb720fe5d120-link">10</a></sup>.<br><br><strong>Machine Learning :</strong> se compose de l&rsquo;apprentissage automatique, la clustérisassions, les arbres décisionnels, le SVM<sup data-fn="6b6187e7-bf8d-4671-888c-ddabe2812f2a" class="fn"><a href="#6b6187e7-bf8d-4671-888c-ddabe2812f2a" id="6b6187e7-bf8d-4671-888c-ddabe2812f2a-link">11</a></sup>, LLM et NLP<sup data-fn="2ccacfdc-8014-4064-9420-0e51ef9e2778" class="fn"><a href="#2ccacfdc-8014-4064-9420-0e51ef9e2778" id="2ccacfdc-8014-4064-9420-0e51ef9e2778-link">12</a></sup>.<br><br><strong>Réseaux Neuronales :</strong> comprend les RAG<sup data-fn="4e84b708-3cbf-4c9d-af94-e19d2cd9d82e" class="fn"><a href="#4e84b708-3cbf-4c9d-af94-e19d2cd9d82e" id="4e84b708-3cbf-4c9d-af94-e19d2cd9d82e-link">13</a></sup> / Finetuning ainsi que les Feed Forward.<br><br><strong>Deep Learning</strong></td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="494" class="wp-image-3496" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_002_DiagrammVenn.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_002_DiagrammVenn.jpg 598w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_002_DiagrammVenn-300x269.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Bien que rapide dans la présentation, de ce qu&rsquo;est l&rsquo;IA, je pense que nous avons suffisamment d&rsquo;éléments pour aborder les différents types d&rsquo;IA. </p>



<p class="wp-block-paragraph"><em>Toutefois, je suis loin d&rsquo;être spécialiste de l&rsquo;IA et mes connaissances théoriques remontent de mes cours de 2014 et de ce que j&rsquo;ai pu lire et apprendre depuis ces dernières semaines. Je vous invite donc à lire plus en détails son fonctionnement en profondeur.</em></p>



<div class="wp-block-kadence-accordion alignnone"><div class="kt-accordion-wrap kt-accordion-id3440_aa8e5f-c2 kt-accordion-has-4-panes kt-active-pane-0 kt-accordion-block kt-pane-header-alignment-left kt-accodion-icon-style-basic kt-accodion-icon-side-right" style="max-width:none"><div class="kt-accordion-inner-wrap" data-allow-multiple-open="false" data-start-open="none">
<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-1 kt-pane3440_c6b1c8-9f"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Intelligence Artificielle Réactive</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">C&rsquo;est la forme la plus élémentaire d&rsquo;IA qui se base sur des situations spécifiques limitées par des règles prédéfinies. Le traitement des entrées sont réalisées en temps réel sans prendre en compte les retours précédents afin de ne pas influer sur la décision qui va être retournée.</p>



<p class="wp-block-paragraph">De par sa simplicité, ce type d&rsquo;IA est efficace dans certains contextes ou rapidité et spontanéité sont nécessaires dans un traitement en temps réel. Et c&rsquo;est ainsi que l&rsquo;on retrouve ce type d&rsquo;IA dans les chatbots.</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-2 kt-pane3440_67b18a-3d"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Intelligence Artificielle Limitée à la Mémoire</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">Dans un sens le grand frère de l&rsquo;IA Réactive, la présence de mémoire permet à l&rsquo;IA d&rsquo;apprendre et d&rsquo;évoluer en prenant compte les retours des entrées précédentes. Pour chaque recherche, le système d&rsquo;IA va consulter sa base de connaissance afin de fournir une réponse la plus fiable possible.</p>



<p class="wp-block-paragraph">Automatiquement, la qualité de la réponse ainsi que sa fiabilité dépendront du nombre d&rsquo;entrée que cette dernière aura en mémoire et va avoir un certain mal à répondre en temps réel. Nous retrouvons principalement son usage sur les sites e-commerces pour proposer des produits similaires à ceux consultés ou consommés par l&rsquo;utilisateur.</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-3 kt-pane3440_037cc9-55"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Intelligence Artificielle Auto Consciente</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">Ce type d&rsquo;IA consiste en théorie à insuffler un état de conscience à la machine afin que cette dernière soit une entité à part entière capable de comprendre son propre état.</p>



<p class="wp-block-paragraph">Naturellement, aujourd&rsquo;hui toujours en recherche, ce type d&rsquo;IA permettrait une autonomie totale de l&rsquo;IA car cela permettrait des facultés d&rsquo;apprentissages, d&rsquo;adaptations et de réflexions incroyable dans les choix décisionnels.</p>



<p class="wp-block-paragraph">Se pose alors dans les recherches un questionnement éthique et nécessite encore de percer sur le plan humain le fonctionnement de la conscience qui nous habite. </p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-4 kt-pane3440_690749-ce"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Intelligence Artificielle La théorie de l&rsquo;esprit</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">Le dernier type, c&rsquo;est vivre dans le turfu. Cela serait d&rsquo;avoir une IA dotée d&rsquo;un esprit. Soit d&rsquo;avoir une IA capable de comprendre et d&rsquo;adapter les émotions, intentions et croyances d&rsquo;autres IA comme de notre environnement. Pour faire simple, une machine qui serait un humain ++.</p>



<p class="wp-block-paragraph">Le questionnement sur l&rsquo;éthique devient plus important au vu des implications vie privée, consentement etc. Manquerait plus que de finir comme <a href="https://www.youtube.com/watch?v=I8oRqko7OG4">Sarah Connor</a>&#8230; </p>
</div></div></div>
</div></div></div>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Bon allez ça sera tout pour l&rsquo;instant. Regardons de plus prêt Ollama. 🙂</p>



<h3 class="wp-block-heading">Architecture et Best-Pratices</h3>



<p class="wp-block-paragraph">Ollama étant cross plateform, j&rsquo;ai pris le parti de déployer ce dernier sous RHEL. Donc le guide va suivre dans ce sens. Ce choix est motivé par mes soins pour garder une meilleure maitrise des ressources qui vont être consommées par le système. Pour MacOS, je ne me prononce pas car je n&rsquo;utilise pas ce dernier. Sous Windows, je voyais déjà mon petite dernier faire du rodéo sur l&rsquo;hyperviseur qui gambade dans le couloir au premier prompt soumis&#8230; 🙂</p>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td>Comme énoncé ci-haut, il faut au minimum en ressource :<br>* 4 vCPUs<br>* 16 Gio de RAM<br>* 2 Gio de GPU<br>* Stockage Rapide<br><br>Malheureusement pour moi, je n&rsquo;ai pas les ressources nécessaires, mais cela ne m&#8217;empêchera pas d&rsquo;aller au bout des choses.<br><br>Je propose toutefois de dissocier les modèles et une partie de l&rsquo;architecture OLLAMA sur un disque dédié pour des raisons de performances lors de la soumissions des prompts et ne pas saturer le disque système.<br><br>L&rsquo;accès à l&rsquo;application se fera par des call API<sup data-fn="75955ef0-37da-444b-ba62-3eced558a61a" class="fn"><a href="#75955ef0-37da-444b-ba62-3eced558a61a" id="75955ef0-37da-444b-ba62-3eced558a61a-link">14</a></sup> sur le port <strong>11434/tcp</strong>.</td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="245" class="wp-image-3503" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_003_arch_bp.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_003_arch_bp.jpg 646w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_003_arch_bp-300x134.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Si nous voulions aller plus loin il serait bien de dédié un disque pour les logs et ainsi améliorer les performances.</p>



<p class="wp-block-paragraph">Niveau sécurité, je suis resté sur mon durcissement classique et divulgâchage alerte ça fonctionne (Jacques TOUBON, le retour aurait été fier de moi pour ce coup-là !).</p>



<p class="wp-block-paragraph">Je ne vois plus qu&rsquo;un dernier point à aborder et nous pouvons passer à la pratique. Oui comme toute bonne chose, il faut faire durer le plaisir. <strong><em>#sendkisses</em></strong></p>



<h3 class="wp-block-heading">Conséquences de l&rsquo;IA</h3>



<p class="wp-block-paragraph">L&rsquo;IA est à ce jour (2025) adopté par environ 2/3 de la population mondiale que ce soit à des fins professionnels ou personnels dont environ 73% dans le contexte pro. Ainsi, difficile de nier que l&rsquo;usage particulier et bien au-dessus des institutions organisationnelles.</p>



<p class="wp-block-paragraph">Comme énoncé bien plus tôt dans cette partie, l&rsquo;usage est principalement à destination des centres de services et à destination des utilisateurs (chatbots, service clients) 60%, l&rsquo;automatisation des ventes et marketings 13%, l&rsquo;optimisation des systèmes IT 9%, l&rsquo;aide à la décision entre 5 et 10% et la production de contenu entre 5 et 10% également. Bien que mes chiffres date de 2023-2024.</p>



<p class="wp-block-paragraph">Dans son usage concrets, l&rsquo;IA est utilisée à 46% pour la recherche d&rsquo;informations, 43% pour la rédaction de textes et 33% pour de l&rsquo;analyse ou traduction.</p>



<p class="wp-block-paragraph">Les estimations à venir d&rsquo;ici 2030 seraient un usage de l&rsquo;IA par 80 à 85% de la population mondiale. Cette escalade et course n&rsquo;est pas sans conséquence sur le plan économique et disponibilité des ressources en termes de composants électroniques.</p>



<p class="wp-block-paragraph">Qui dit plus d&rsquo;usage, dit plus de ressource de calcul et donc plus de composants et plus d&rsquo;énergie. Le système peine à suivre. C&rsquo;est ainsi qu&rsquo;en moyenne, l&rsquo;évolution des couts entre 2024 et 2026 (estimé sur le plan mondial) et de :</p>



<ul class="wp-block-list">
<li>RAM (DDR5) : +170 à +250 %</li>



<li>SSD : +60 à +100 %</li>



<li>GPU : +10 à 25 %</li>



<li>CPU : +0% à +10%</li>
</ul>



<p class="wp-block-paragraph">Cela entraine donc une hausse des offres Cloud et service SaaS/IaaS/PaaS/BaaS et j&rsquo;en passe ainsi que des couts équipements embarquant ce type de composants. Difficile de faire sans IA de nos jours.</p>



<p class="wp-block-paragraph">Bon c&rsquo;est promis, passe à la pratique, je ferme la parenthèse que je n&rsquo;ai jamais ouverte.</p>



<h2 class="wp-block-heading">Pratique</h2>



<p class="wp-block-paragraph">Avant de se lancer dans l&rsquo;installation, si je reprends les prérequis énoncés ci-haut, sachez que :</p>



<ul class="wp-block-list">
<li>Je n&rsquo;ai pas de GPU</li>



<li>Je n&rsquo;ai pas de stockage rapide</li>



<li>Mon hypervisieur est monoprocesseur</li>
</ul>



<p class="wp-block-paragraph">Tout pour bien fonctionner en somme 🙂</p>



<h3 class="wp-block-heading">Installation</h3>



<p class="wp-block-paragraph">L&rsquo;installation va se dérouler en 2 parties. Une partie pour installer Ollama, une partie pour l&rsquo;installation des modèles d&rsquo;intelligence artificielle.</p>



<h4 class="wp-block-heading">Ollama</h4>



<h5 class="wp-block-heading">Installation</h5>



<p class="wp-block-paragraph">La documentation fournit sur le site est simple et claire. Il suffit alors de télécharger et d&rsquo;exécuter le contenu du script install.sh.</p>



<p class="wp-block-paragraph">Vérifier en amont que le paquet <strong>zstd</strong> est installé sur notre environnement.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-78e91345c70998de458fa9707149535d"><code><strong>$ sudo dnf install zstd</strong></code></pre>



<p class="wp-block-paragraph">Si nous rentrons plus en détail, les arguments :<br></p>



<ul class="wp-block-list">
<li><strong>-f</strong> : ignore les redirections en cas de retour autre que le code 200 du protocole HTTP<sup data-fn="6ad53fdd-7b83-46bd-8608-5b89bf94b781" class="fn"><a href="#6ad53fdd-7b83-46bd-8608-5b89bf94b781" id="6ad53fdd-7b83-46bd-8608-5b89bf94b781-link">15</a></sup></li>



<li><strong>-s</strong> : supprime la barre de suppression et rend l&rsquo;exécution de la commande silencieuse</li>



<li><strong>-S</strong> : indique les erreurs</li>



<li><strong>-L</strong> : permet de suivre les redirections HTTP</li>
</ul>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-fdc9c501862a41c5e35dd5d3ba3d3a99"><code><strong>$ sudo curl -fsSL https://ollama.com/install.sh | sh</strong></code></pre>



<figure class="wp-block-table is-style-stripes"><table class="has-fixed-layout"><tbody><tr><td class="has-text-align-center" data-align="center"><strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-13-color">/!\</mark> Attention : </strong>Il est vivement recommandé en amont avant d&rsquo;exécuter un script téléchargé depuis le net de vérifier son contenu et de lire ce dernier. Question de sécurité. Sinon cela revient encore une fois à s&rsquo;étonner d&rsquo;avoir attrapé <em>une gonorrhée après être allé aux p*tes sans capotes</em>&#8230;<br><br><strong>$ sudo curl -fsSL https://ollama.com/install.sh | cat</strong><br></td></tr></tbody></table></figure>



<p class="wp-block-paragraph"></p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="262" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_010_Install_1-1024x262.jpg" alt="" class="wp-image-3453" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_010_Install_1-1024x262.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_010_Install_1-300x77.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_010_Install_1-768x197.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_010_Install_1.jpg 1246w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="wp-block-paragraph">L&rsquo;installation c&rsquo;est bien passée. Toutefois, le script nous informe qu&rsquo;aucun équipement GPU n&rsquo;a été détecter et donc que les calculs seront effectués par notre CPU. Ce qui va donc être plutôt lent dans mon cas personnel.</p>



<h5 class="wp-block-heading">Service au démarrage</h5>



<p class="wp-block-paragraph">Nous retrouvons une commande maintenant bien connue dans les environnements RHEL. Ainsi à chaque démarrage de notre système notre daemon ollama va être démarré.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-60892f41106e2af5ff1e267db4089e0f"><code><strong>$ sudo systemctl enable ollama</strong></code></pre>



<h5 class="wp-block-heading">Firewalling</h5>



<p class="wp-block-paragraph">Encore une fois et comme toujours, il est nécessaire d&rsquo;ouvrir le port <strong>11434/tcp</strong> si nous souhaitons joindre l&rsquo;API depuis l&rsquo;extérieur (comprendre hors localhost).</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-87b1a8a000363e2b11cfacb574e43b19"><code><strong>$ sudo firewall-cmd --permanent --add-port=11434/tcp</strong><strong>
$ sudo firewall-cmd --reload</strong></code></pre>



<p class="wp-block-paragraph">On est d&rsquo;accord que si nous souhaiterions mieux faire en termes de sécurité, il serait plus intelligent de créer la policy suivante :</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-7cd1a4145b8e795efe3d5c6a206c573b"><code><strong>$ sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.127.50.0/24" port port="11434" protocol="tcp" accept'
$ sudo firewall-cmd --reload</strong></code></pre>



<p class="wp-block-paragraph">Ayant un UTM<sup data-fn="ff1afc50-05de-4bce-91e3-563ae4b9fe9f" class="fn"><a href="#ff1afc50-05de-4bce-91e3-563ae4b9fe9f" id="ff1afc50-05de-4bce-91e3-563ae4b9fe9f-link">16</a></sup> en amont, je me permets donc de me contenter de la première solution.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="908" height="399" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_010_FirewallAPI_2.jpg" alt="" class="wp-image-3455" style="aspect-ratio:2.275705027150114;width:587px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_010_FirewallAPI_2.jpg 908w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_010_FirewallAPI_2-300x132.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_010_FirewallAPI_2-768x337.jpg 768w" sizes="auto, (max-width: 908px) 100vw, 908px" /></figure>
</div>


<h5 class="wp-block-heading">HTTP ou HTTPS ?</h5>



<p class="has-text-align-center wp-block-paragraph"><strong>Un doute m&rsquo;habite&#8230; Le port 11434/tcp, ça ne serait pas du http ?</strong></p>



<p class="wp-block-paragraph">Bien vu l&rsquo;aveugle ! Effectivement et niveau sécurité c&rsquo;est pas super, il faudrait mieux user du protocole https. Pour ça, j&rsquo;ai une solution passons par un reverse proxy 🙂</p>



<p class="wp-block-paragraph">Je suis partagé quant à la rédaction de cette sous partie. Oui il est important de sécuriser l’accès à l’interface Web, mais j’ai peur d’être hors sujet et d’alourdir l’article. Mais d’un autre côté, je ne veux pas non plus bâcler la chose… Encore un pu**n de choix cornélien…</p>



<p class="wp-block-paragraph">Bref, je vais faire au plus simple et si besoin écrirai un billet sur Nginx.</p>



<div class="wp-block-kadence-accordion alignnone"><div class="kt-accordion-wrap kt-accordion-id3440_5739eb-e1 kt-accordion-has-4-panes kt-active-pane-0 kt-accordion-block kt-pane-header-alignment-left kt-accodion-icon-style-basic kt-accodion-icon-side-right" style="max-width:none"><div class="kt-accordion-inner-wrap" data-allow-multiple-open="false" data-start-open="none">
<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-1 kt-pane3440_2c1931-a6"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Installation</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">L’installation et activation du service, je passe mon tour.</p>



<p class="wp-block-paragraph"></p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-2d96c8f801e10588d862a20dfe6ac0cb"><code><strong>$ sudo dnf install nginx
$ sudo systemctl enable nginx
$ sudo systemctl start nginx</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="939" height="450" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_020_nginx_0.jpg" alt="" class="wp-image-3573" style="aspect-ratio:2.086739469578783;width:317px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_020_nginx_0.jpg 939w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_020_nginx_0-300x144.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_020_nginx_0-768x368.jpg 768w" sizes="auto, (max-width: 939px) 100vw, 939px" /></figure>
</div>

<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="938" height="83" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_020_nginx_1.jpg" alt="" class="wp-image-3572" style="aspect-ratio:11.302070130967468;width:339px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_020_nginx_1.jpg 938w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_020_nginx_1-300x27.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_015_020_nginx_1-768x68.jpg 768w" sizes="auto, (max-width: 938px) 100vw, 938px" /></figure>
</div></div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-2 kt-pane3440_a9caf1-43"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Certificats</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">Là encore une fois je rencontre un petit problème. Je n’ai pas de certificat public que je pourrais utiliser, ma topologie réseau ne me permet pas d’utiliser un certificat Let’s Encrypt et sans vouloir spoiler je n’ai pas envie de me prendre la tête. Donc ça va finir avec un bon vieux certificat autosigné 🙂</p>



<p class="wp-block-paragraph">La génération n’est pas bien compliquée et si besoin, j’ai déjà rédigé&nbsp;<a href="https://erwanguillemard.com/linux-certificats/">un article</a>&nbsp;sur le sujet.</p>



<p class="wp-block-paragraph">Créons le répertoire qui va contenir nos éléments de sécurité :</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-16d3dda1539c5bf2a831ca2965909c37"><code><strong>$ sudo mkdir -p /etc/nginx/ssl</strong></code></pre>



<p class="wp-block-paragraph">Générons notre certificat :</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-d734dc3e16717cda0e24e481dbf0df76"><code><strong>$ sudo openssl req req -x509 -nodes -days 365 \
-newkey rsa:2048 \
-keyout /etc/nginx/ssl/ollama.key \
-out /etc/nginx/ssl/ollama.crt</strong></code></pre>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-3 kt-pane3440_01a91a-c2"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Configuration</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">Créons et éditons notre fichier de configuration. Je prendrai le temps d’expliquer l’intégralité du fichier de configuration.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-9bc0a5fa80b33bf1ad1ef6a3d6a46601"><code><strong>$ sudo vim /etc/nginx/conf.d/ollama.conf</strong></code></pre>



<pre class="wp-block-code"><code>#server {
#    listen 80;
#    server_name 10.227.250.11;
#
#    return 301 https://$host$request_uri;
#}

server {
    listen 11444 ssl;
    http2 on;
    server_name 10.227.250.11;

    ssl_certificate /etc/nginx/ssl/ollama.crt;
    ssl_certificate_key /etc/nginx/ssl/ollama.key;

    # TLS sécurisé
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;

    ssl_session_timeout 1d;
    ssl_session_cache shared:SSL:10m;

    # sécurité headers
    add_header X-Frame-Options SAMEORIGIN;
    add_header X-Content-Type-Options nosniff;
    add_header X-XSS-Protection "1; mode=block";

    # taille upload
    client_max_body_size 100M;

    # compression
    gzip on;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml;

    location / {

        proxy_pass http://10.227.250.11:11434;

        proxy_http_version 1.1;

        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        proxy_buffering off;

        proxy_read_timeout 3600;
        proxy_send_timeout 3600;
    }
}</code></pre>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td>La première section permet de réaliser la redirection du protocole HTTP vers HTTPS de manière permanente. Ainsi si je contacte l’url http://10.227.250.11, je serais automatiquement redirigé vers https://10.227.254.11.<br>Toutefois, la section est commentée car elle entre en conflit avec une autre configuration d&rsquo;un billet à venir 😉</td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="324" height="148" class="wp-image-3737" style="width: 324px;" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_014_035_nginx_0.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_014_035_nginx_0.jpg 349w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_014_035_nginx_0-300x137.jpg 300w" sizes="auto, (max-width: 324px) 100vw, 324px" /></td></tr><tr><td>Le second bloc indique que nous écoutons sur le port 11444 sur l’interface 10.227.250.11. L’emplacement des fichiers contenant la clé privée ainsi que le certificat sont spécifiés pour activer la couche de sécurité (j’ai l’impression d’enfoncer des portes ouvertes…). J’indique qu’elles sont les versions des protocoles TLS<sup><a href="https://erwanguillemard.com/?p=3520&amp;preview=true#1a3ccfdd-7fad-428c-9f9a-15401188579d">17</a></sup>&nbsp;autorisées et laisse le serveur choisir le chiffrement le plus sûr.<br>Côté en-tête, j’ai repris les suggestions de sécurité implémentée pour ITOP. Soit la restriction de mettre le site en iframe externe, de restreindre le navigateur à deviner le tye MIME qui est utilisé et surtout d’activer la protection anti-cross-site scripting. Niveau upload, j’ai vu large et j’ai autorisé le téléversement de fichier de 100 Mio.<br>Côté performance, j’ai activé la compression des flux pour optimiser un peu les performances réseaux.</td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="457" class="wp-image-3738" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_014_035_nginx_1.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_014_035_nginx_1.jpg 663w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_014_035_nginx_1-300x249.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr><tr><td>Le troisième bloc concerne la partie Reverse Proxy.<br>Toutes les requêtes qui sont envoyées sur https://10.227.250.11 sont redirigées vers le port 11434.<br>Concernant les en-têtes il est nécessaire d’utiliser les websockets car seront transmis l’ip du client, le protocole utilisé et le NDD<sup><a href="https://erwanguillemard.com/?p=3520&amp;preview=true#6f19f21f-54c7-433f-8a76-3c3d830f4eda">18</a></sup>&nbsp;ou l’IP demandé.</td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="368" class="wp-image-3739" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_014_035_nginx_2.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_014_035_nginx_2.jpg 533w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_014_035_nginx_2-300x201.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Une fois la configuration faite, il est important de réaliser un petit contrôle de notre petit fichier afin de s’assurer que ce dernier ne comporte pas d’erreur.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-c0a5cd62be5632132cc71ae703da0130"><code><strong>$ sudo nginx -t 
$ sudo systemctl restart nginx</strong></code></pre>



<p class="wp-block-paragraph">Tiens une erreur 🙂 Regardons ça dans la partie suivante&#8230;</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-4 kt-pane3440_aa7045-77"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Sécurité</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">Nous souhaitons toujours publier notre interface web en HTTPS. Donc il va falloir jouer avec nos UTMs !</p>



<p class="wp-block-paragraph">Sur le plan interne, autorisons nos flux https :</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-82f39b4be835c163c84ee4674bd33142"><code><strong>$ sudo firewall-cmd --permanent --add-port=11444/tcp
$ sudo firewall-cmd --reload</strong></code></pre>



<p class="wp-block-paragraph">Toutefois lors de la relance du service on se tape une bonne grosse erreur. C&rsquo;est lié au SELinux. Nginx n&rsquo;est pas autorisé par le SELinux a écouter sur le port 11444. Donc il faut l&rsquo;autoriser.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-7d61726b3583615abe3b3620597d056f"><code><strong>#Install semanage
$ sudo dnf install policycoreutils-python-utils

#Ajout du port comme autorisé à l'écoute
$ sudo semanage port -a -t http_port_t -p tcp 11444</strong>

<strong>#Relance du service nginx</strong>
<strong>$ sudo systemctl restart nginx</strong></code></pre>



<p class="wp-block-paragraph">Normalement nous ne devons plus avoir d&rsquo;erreur. Toutefois si nous essayons de joindre l&rsquo;url <strong>https://egapl-ollama-01:11444</strong> nous devons avoir un jolie 502 Bad Gateway dans notre navigateur 😀</p>



<p class="wp-block-paragraph">Ca vous fait la b**e hein ? Je vous rassure je me suis pris la même rouste. J’ai oublié d’autoriser le contexte de mon SELinux pour autoriser les services http à accéder aux réseaux 😀</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-a7c965cb0ad20254d3dd67e1b9cd6ce2"><code><strong>$ sudo setsebool -P httpd_can_network_connect 1</strong></code></pre>



<p class="wp-block-paragraph">Un petit F5 et hop c’est tout bon &lt;3</p>



<p class="wp-block-paragraph"></p>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td>Normalement avec toutes nos actions, nous devons joindre notre interface web depuis un navigateur de manière sécurisée (hormis l’erreur liée à notre certificat autosigné).</td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="257" class="wp-image-3740" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_014_035_nginx_3.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_014_035_nginx_3.jpg 1098w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_014_035_nginx_3-300x140.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_014_035_nginx_3-1024x478.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_014_035_nginx_3-768x359.jpg 768w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>
</div></div></div>
</div></div></div>



<h5 class="wp-block-heading">Emplacement des modèles</h5>



<p class="wp-block-paragraph">Lors de ce benchmark, j&rsquo;ai été confronté à un problème d&rsquo;espace disque lié aux modèles. Effectivement, les modèles sont au minimum supérieur à 3 Gio. Et c&rsquo;est là que c&rsquo;est le drame car « pouf » je me tape un message d&rsquo;erreur&#8230;</p>



<p class="wp-block-paragraph">La solution est donc de déplacer le répertoire de modèle vers un autre disque. J&rsquo;ai vu large, j&rsquo;ai provisionné 100 Gio. Je pars du principe que le disque est monté et formaté.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-36428a3107c846deceb061ab8803f4e9"><code><strong>$ sudo chown -R ollama:ollama /mnt/ollama</strong></code></pre>



<p class="wp-block-paragraph">Le changement de l&#8217;emplacement du répertoire du modèle va se faire par surcharge du service qui démarre Ollama. Naturellement, on ne modifie pas le service de base car les changements ne seront pas persistants. D&rsquo;où la surcharge&#8230;</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-7441047b0f606bc5e946cd75efce1071"><code><strong>$ sudo mkdir /etc/systemd/system/ollama.service.d
$ sudo vim /etc/systemd/system/ollama.service.d/override.conf</strong></code></pre>



<pre class="wp-block-code"><code><strong>&#91;Service]
Environment="OLLAMA_DEBUG=1"
Environment="OLLAMA_MODELS=/mnt/ollama/ollama-models"
Environment="OLLAMA_HOST=0.0.0.0"</strong>
</code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="590" height="102" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_012_changeModelLocation_2.jpg" alt="" class="wp-image-3456" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_012_changeModelLocation_2.jpg 590w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_012_changeModelLocation_2-300x52.jpg 300w" sizes="auto, (max-width: 590px) 100vw, 590px" /></figure>
</div>


<p class="wp-block-paragraph">Notons que le mode <strong>Debug</strong> est actif et que le chemin de nos modèles est défini. J&rsquo;ai également défini la variable <strong>OLLAMA_HOST</strong> qui va nous permettre de joindre notre application depuis une source externe à notre machine.</p>



<p class="wp-block-paragraph">Il convient alors de recharger, forcer le gestionnaire de services à recharger l&rsquo;ensemble de ses configurations. Dans un second temps nous redémarrerons le daemon ollama afin de prendre en considération les changements présents dans notre fichier de surcharge. Par mesure de sécurité (car la confiance n&rsquo;exclut pas le contrôle) j&rsquo;aime à vérifier que le service est bien actif.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-e4dd388e47a00051adc0be7943572985"><code><strong>$ sudo systemctl daemon-reload
$ sudo systemctl restart ollama
$ sudo systemctl status ollama
$ sudo ls -al /mnt/ollama/ollama-models/</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="438" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_012_changeModelLocation_4-1024x438.jpg" alt="" class="wp-image-3457" style="aspect-ratio:2.3379521324455643;width:566px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_012_changeModelLocation_4-1024x438.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_012_changeModelLocation_4-300x128.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_012_changeModelLocation_4-768x328.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_012_changeModelLocation_4.jpg 1128w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="wp-block-paragraph">Dans les sources, nous pouvons constater la présence de nos variables surcharger. Néanmoins nous pouvons afficher le contenu de notre répertoire cible pour les modèles afin de vérifier que l&rsquo;arborescence est bien présente.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="654" height="130" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_012_changeModelLocation_3.jpg" alt="" class="wp-image-3458" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_012_changeModelLocation_3.jpg 654w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_012_changeModelLocation_3-300x60.jpg 300w" sizes="auto, (max-width: 654px) 100vw, 654px" /></figure>
</div>


<h4 class="wp-block-heading">Installer des modèles</h4>



<p class="wp-block-paragraph">J&rsquo;ai fait le parti car c&rsquo;est « un peu » l&rsquo;objectif de base de ce billet d&rsquo;avoir des modèles locaux qui vont être utilisés. Je ne souhaite pas utiliser des connexions avec des sources externes afin de garder un contrôle sur mes recherches et usage.</p>



<p class="wp-block-paragraph">J&rsquo;ai fait le choix d&rsquo;étudier 4 modèles LLM :</p>



<ul class="wp-block-list">
<li>Llama3</li>



<li>Qwen</li>



<li>Mistral</li>



<li>DeepSeek-Coder</li>
</ul>



<p class="wp-block-paragraph">Je propose dans un premier temps de faire un comparatif de ces modèles.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td class="has-text-align-center" data-align="center"><strong>Critères</strong></td><td class="has-text-align-center" data-align="center"><strong>Llama 3</strong></td><td class="has-text-align-center" data-align="center"><strong>Qwen</strong></td><td class="has-text-align-center" data-align="center"><strong>Mistral</strong></td><td class="has-text-align-center" data-align="center"><strong>DeepSeek-Coder</strong></td></tr><tr><td class="has-text-align-center" data-align="center"><strong>Editeur</strong></td><td class="has-text-align-center" data-align="center">Meta</td><td class="has-text-align-center" data-align="center">Alibaba</td><td class="has-text-align-center" data-align="center">Mistral AI</td><td class="has-text-align-center" data-align="center">DeepSeek</td></tr><tr><td class="has-text-align-center" data-align="center"><strong>Type</strong></td><td class="has-text-align-center" data-align="center">Généraliste</td><td class="has-text-align-center" data-align="center">Généraliste</td><td class="has-text-align-center" data-align="center">Généraliste</td><td class="has-text-align-center" data-align="center">Spé code</td></tr><tr><td class="has-text-align-center" data-align="center"><strong>Usage</strong></td><td class="has-text-align-center" data-align="center">Populaire</td><td class="has-text-align-center" data-align="center">Bon</td><td class="has-text-align-center" data-align="center">Rapide</td><td class="has-text-align-center" data-align="center">IDE / Dev</td></tr><tr><td class="has-text-align-center" data-align="center"><strong>Licence</strong></td><td class="has-text-align-center" data-align="center">Llama Community Licence</td><td class="has-text-align-center" data-align="center">Apache 2.0</td><td class="has-text-align-center" data-align="center">Apache 2.0</td><td class="has-text-align-center" data-align="center">Licence DeepSeek</td></tr><tr><td class="has-text-align-center" data-align="center"><strong>Dataset</strong></td><td class="has-text-align-center" data-align="center">Texte/Code/Web</td><td class="has-text-align-center" data-align="center">Multilingue web</td><td class="has-text-align-center" data-align="center">Web + Données filtrées</td><td class="has-text-align-center" data-align="center">~ 90% de code</td></tr><tr><td class="has-text-align-center" data-align="center"><strong>Avantages</strong></td><td class="has-text-align-center" data-align="center">Raisonnement et coding</td><td class="has-text-align-center" data-align="center">Multilingue et contextuel</td><td class="has-text-align-center" data-align="center">Rapide et faible consommateur de ressources</td><td class="has-text-align-center" data-align="center">Bon pour du code</td></tr></tbody></table></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Avec ce tableau, je pense que nous avons un bon récapitulatif. Toutefois et pour les curieux il existe une centaine de modèles compatible avec Ollama (<a href="https://ollama.com/library">Lien</a>). J&rsquo;ai fait mon choix, à vous de faire le vôtre. Vous êtes des grands garçons et des grandes filles hein ? <strong>#bisous</strong></p>



<p class="wp-block-paragraph">L&rsquo;installation pour les modèles choisies, suivent tous la même logique. Pas de quoi épiloguer pendant 107 ans&#8230;.</p>



<div class="wp-block-kadence-accordion alignnone"><div class="kt-accordion-wrap kt-accordion-id3440_be8f6d-58 kt-accordion-has-4-panes kt-active-pane-0 kt-accordion-block kt-pane-header-alignment-left kt-accodion-icon-style-basic kt-accodion-icon-side-right" style="max-width:none"><div class="kt-accordion-inner-wrap" data-allow-multiple-open="false" data-start-open="none">
<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-1 kt-pane3440_b83fad-d4"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Llama3</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-aedd1dbc85193c1613782e53b2c9aa59"><code><strong>$ sudo ollama pull llama3</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="131" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_022_llama3_2-1024x131.jpg" alt="" class="wp-image-3463" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_022_llama3_2-1024x131.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_022_llama3_2-300x38.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_022_llama3_2-768x98.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_022_llama3_2-1536x196.jpg 1536w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_022_llama3_2.jpg 1628w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div></div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-2 kt-pane3440_6c3ae4-79"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Qwen</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-7168c5d58178d30c4ae7c3365a17f021"><code><strong>$ sudo ollama pull qwen</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="682" height="1024" src="https://erwanguillemard.com/wp-content/uploads/2024/01/IL01_000_resultjoker-682x1024.jpg" alt="" class="wp-image-1498" style="aspect-ratio:0.666023595755732;width:189px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2024/01/IL01_000_resultjoker-682x1024.jpg 682w, https://erwanguillemard.com/wp-content/uploads/2024/01/IL01_000_resultjoker-200x300.jpg 200w, https://erwanguillemard.com/wp-content/uploads/2024/01/IL01_000_resultjoker-768x1152.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2024/01/IL01_000_resultjoker-1024x1536.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2024/01/IL01_000_resultjoker-1365x2048.jpg 1365w, https://erwanguillemard.com/wp-content/uploads/2024/01/IL01_000_resultjoker-scaled.jpg 1706w" sizes="auto, (max-width: 682px) 100vw, 682px" /></figure>
</div></div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-3 kt-pane3440_a52c29-5b"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Mistral</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-0616d88d832c9cd4c70a69e1b69bb399"><code><strong>$ sudo ollama pull mistral</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="134" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_023_mistral_0-1024x134.jpg" alt="" class="wp-image-3464" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_023_mistral_0-1024x134.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_023_mistral_0-300x39.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_023_mistral_0-768x100.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_023_mistral_0-1536x200.jpg 1536w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_023_mistral_0.jpg 1626w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div></div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-4 kt-pane3440_b7432f-bf"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>DeepSeek-Coder</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-8e5f43649767beaca209d6420f5b9c1d"><code><strong>$ sudo ollama pull deepseek-coder:6.7b</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="662" height="208" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_024_deepseeker-67b_0.jpg" alt="" class="wp-image-3465" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_024_deepseeker-67b_0.jpg 662w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_024_deepseeker-67b_0-300x94.jpg 300w" sizes="auto, (max-width: 662px) 100vw, 662px" /></figure>
</div></div></div></div>
</div></div></div>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Pour voir l&rsquo;ensemble des modèles il est possible de lister ces derniers grâce à la commande suivante :</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-a54c69346022b88f8f0ca96534eb976b"><code><strong>$ sudo ollama list</strong></code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="701" height="107" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_012_ListModel_4.jpg" alt="" class="wp-image-3466" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_012_ListModel_4.jpg 701w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_012_ListModel_4-300x46.jpg 300w" sizes="auto, (max-width: 701px) 100vw, 701px" /></figure>
</div>


<h3 class="wp-block-heading">Démarrage de Ollama</h3>



<p class="wp-block-paragraph">Maintenant que tout est fonctionnel, démarrons Ollama et c&rsquo;est parti pour un périple des possibles comme <a href="https://fr.wikipedia.org/wiki/Sept_Ans_d%27aventures_au_Tibet#:~:text=L'alpiniste%2C%20explorateur%20et%20%C3%A9crivain,la%20souverainet%C3%A9%20de%20la%20Chine.">Heinrich Harrer à l&rsquo;assaut du Nanga Parbat</a> (l&rsquo;élévation n&rsquo;étant pas celle que l&rsquo;on croit 🙂 ).</p>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="768" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_001_7years-1024x768.jpg" alt="" class="wp-image-3468" style="width:411px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_001_7years-1024x768.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_001_7years-300x225.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_001_7years-768x576.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_001_7years.jpg 1200w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-fecbb2e3da5b233b288694433aba6622"><code><strong>$ ollama</strong></code></pre>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td>Dans le menu qui s&rsquo;offre à nous, la première option permet de démarrer, lancer un de nos modèles localement.<br><br>Toutefois, en dessous de cette première option de navigation, nous retrouvons la possibilité d&rsquo;établir des connexions externes vers des moteurs en ligne tel que :<br><br>* Claude Code<br>* Codex<br>* OpenClaw<br>* Droid<br>* Pi<br>* Cline<br><br>Si vous possédez un compte, vous pouvez réaliser la jonction, mais alors à quoi bon avoir un moteur d&rsquo;IA interne ?</td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="650" height="649" class="wp-image-3467" style="width: 650px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_011_Run_2.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_011_Run_2.jpg 612w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_011_Run_2-300x300.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_011_Run_2-150x150.jpg 150w" sizes="auto, (max-width: 650px) 100vw, 650px" /></td></tr></tbody></table></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Si nous cliquons sur le premier choix, il nous est alors demandé de choisir un modèle. Il est possible de télécharger un modèle directement depuis ce menu ou de choisir un modèle précédemment installé tout en bas de cette interface.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="821" height="279" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_021_model_0.jpg" alt="" class="wp-image-3469" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_021_model_0.jpg 821w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_021_model_0-300x102.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_021_model_0-768x261.jpg 768w" sizes="auto, (max-width: 821px) 100vw, 821px" /></figure>
</div>


<h2 class="wp-block-heading">Tests</h2>



<p class="wp-block-paragraph">Et si on se lançais un petit benchmark de nos 4 modèles pour voir le fonctionnement ? 🙂</p>



<p class="wp-block-paragraph">Amusons-nous tel un <a href="https://www.youtube.com/watch?v=vxx-ZQBHXIA">lamastico</a> &lt;3</p>



<p class="wp-block-paragraph">Pour le test, j&rsquo;ai décidé de partir sur quelque chose de simple et ISO sinon cela ne sert strictement à rien.</p>



<p class="wp-block-paragraph">La question sera : </p>



<p class="has-text-align-center wp-block-paragraph"><strong>Peux-tu évaluer et me proposer une version plus robuste de cette fonction powershell s&rsquo;il te plait ? [Suivie d&rsquo;une petite fonction maison qui peut être amélioré]</strong></p>



<div class="wp-block-kadence-accordion alignnone"><div class="kt-accordion-wrap kt-accordion-id3440_c4efb1-bc kt-accordion-has-4-panes kt-active-pane-0 kt-accordion-block kt-pane-header-alignment-left kt-accodion-icon-style-basic kt-accodion-icon-side-right" style="max-width:none"><div class="kt-accordion-inner-wrap" data-allow-multiple-open="false" data-start-open="none">
<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-1 kt-pane3440_c9a31d-08"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Llama</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<figure class="wp-block-table aligncenter"><table class="has-fixed-layout"><tbody><tr><td><img loading="lazy" decoding="async" width="550" height="930" class="wp-image-3479" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_030_test-llama3_prompt_1.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_030_test-llama3_prompt_1.jpg 639w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_030_test-llama3_prompt_1-178x300.jpg 178w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_030_test-llama3_prompt_1-606x1024.jpg 606w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td><td><img loading="lazy" decoding="async" width="550" height="93" class="wp-image-3478" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_030_test-llama3_performance_0.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_030_test-llama3_performance_0.jpg 895w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_030_test-llama3_performance_0-300x51.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_030_test-llama3_performance_0-768x130.jpg 768w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-2 kt-pane3440_e891f6-13"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Qwen</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<figure class="wp-block-table aligncenter"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td><img loading="lazy" decoding="async" width="550" height="1314" class="wp-image-3477" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_033_test-qwen_performance_1.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_033_test-qwen_performance_1.jpg 636w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_033_test-qwen_performance_1-126x300.jpg 126w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_033_test-qwen_performance_1-428x1024.jpg 428w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td><td><img loading="lazy" decoding="async" width="550" height="92" class="wp-image-3476" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_033_test-qwen_performance_0.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_033_test-qwen_performance_0.jpg 894w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_033_test-qwen_performance_0-300x50.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_033_test-qwen_performance_0-768x128.jpg 768w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>



<p class="wp-block-paragraph">J&rsquo;ai du tronquer la partie de la réponse en anglais car cela aurait pris énormément d&rsquo;espace. Toutefois la réponse retournée est plus que satisfaisante pour celui qui sait parler la langue de Shakespeare</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-3 kt-pane3440_3d6aef-62"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Mistral</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<figure class="wp-block-table aligncenter"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td><img loading="lazy" decoding="async" width="550" height="643" class="wp-image-3473" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_031_test-mistral_performance_1.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_031_test-mistral_performance_1.jpg 973w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_031_test-mistral_performance_1-257x300.jpg 257w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_031_test-mistral_performance_1-876x1024.jpg 876w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_031_test-mistral_performance_1-768x898.jpg 768w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td><td><img loading="lazy" decoding="async" width="550" height="94" class="wp-image-3474" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_031_test-mistral_performance_0.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_031_test-mistral_performance_0.jpg 905w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_031_test-mistral_performance_0-300x51.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_031_test-mistral_performance_0-768x132.jpg 768w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-4 kt-pane3440_8f5a74-34"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>DeepSeek-Coder</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<figure class="wp-block-table aligncenter"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td><img loading="lazy" decoding="async" width="550" height="969" class="wp-image-3471" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_032_test-deepseeker_performance_1.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_032_test-deepseeker_performance_1.jpg 752w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_032_test-deepseeker_performance_1-170x300.jpg 170w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_032_test-deepseeker_performance_1-581x1024.jpg 581w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td><td><img loading="lazy" decoding="async" width="550" height="96" class="wp-image-3472" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_032_test-deepseeker_performance_0.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_032_test-deepseeker_performance_0.jpg 901w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_032_test-deepseeker_performance_0-300x53.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_032_test-deepseeker_performance_0-768x135.jpg 768w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>
</div></div></div>
</div></div></div>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Je pense que cela est évident en termes de conclusions. Pour 1 prompt identique, nous avons quartes réponses différentes et un point commun. Si certains modèles mettent plus de temps de réponse il est indéniablement contestable que ça chauffe niveau calcul. Dans certains cas, j&rsquo;aime même du SWAP ! Bref, côté consommation électrique, ça consomme&#8230; Mais bon je m&rsquo;y attendais ce n&rsquo;est pas <a href="https://www.youtube.com/watch?v=oY_paPRS3p8">la première fois que je fais des étincelles avec ma b*te</a>&#8230;</p>



<p class="wp-block-paragraph">Plus sérieusement, je sais quitte à me répéter ou pas ce que je dois faire pour améliorer ma fonction. Et je suis un peu déçu du résultat. Néanmoins en modifiant légèrement le prompt, en précisant :</p>



<p class="has-text-align-center wp-block-paragraph"><strong>Peux-tu évaluer et me proposer une version plus robuste, sécurisé de cette fonction powershell s&rsquo;il te plait comme si tu étais un développeur sénior avec un regard plus critique et sévère ? [Suivie d&rsquo;une petite fonction maison qui peut être amélioré]</strong></p>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td class="has-text-align-center" data-align="center"><strong>Résultat Prompt initial</strong><br>(qwen)</td><td class="has-text-align-center" data-align="center"><strong>Résultat Prompt plus précis</strong><br>(qwen)</td></tr><tr><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="519" class="wp-image-3511" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_033_test-qwen_codeonly_2.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_033_test-qwen_codeonly_2.jpg 935w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_033_test-qwen_codeonly_2-300x283.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_033_test-qwen_codeonly_2-768x724.jpg 768w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="579" class="wp-image-3512" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_033_test-qwen_codeonly_3.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_033_test-qwen_codeonly_3.jpg 839w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_033_test-qwen_codeonly_3-285x300.jpg 285w, https://erwanguillemard.com/wp-content/uploads/2026/03/AP_014_033_test-qwen_codeonly_3-768x808.jpg 768w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>



<p class="wp-block-paragraph"></p>



<p class="has-text-align-center has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-ff0d0b786a66ea48aaeb04a91218bde4 wp-block-paragraph"><mark style="background-color:rgba(0, 0, 0, 0);color:#fd0000" class="has-inline-color"><strong>/!\</strong></mark> <strong>Attention :</strong> J&rsquo;ai volontairement gardé que la suggestion de la fonction et non le blabla d&rsquo;en-tête qui explique tout ce qui va être appliqué.</p>



<p class="wp-block-paragraph">Encore une fois pas de magie, il suffit de bien rédiger son prompt et là j&rsquo;obtiens un retour plus précis à mes attentes.</p>



<p class="wp-block-paragraph">Si je résume la situation sur le test à iso périmètre selon le contexte :</p>



<ul class="wp-block-list">
<li>RAM : 8 Go</li>



<li>vCPU : 4</li>



<li>Processeur Physique : Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz (Mono)</li>



<li>Contexte : Coding</li>
</ul>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td class="has-text-align-center" data-align="center"><strong>Durée des réponses</strong></td><td class="has-text-align-center" data-align="center"><strong>Qualité des réponses</strong></td></tr><tr><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="365" class="wp-image-3696" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_014_034_performance_0.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_014_034_performance_0.jpg 482w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_014_034_performance_0-300x199.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="374" class="wp-image-3695" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_014_034_performance_1.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/04/AP_014_034_performance_1.jpg 481w, https://erwanguillemard.com/wp-content/uploads/2026/04/AP_014_034_performance_1-300x204.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>



<p class="wp-block-paragraph">En conclusion Qwen est de loin celui qui met le plus de temps à délivrer la réponse. Cela s&rsquo;explique par une explication plus poussée ce qui prends un certain temps à l&rsquo;affichage. Cependant la qualité de la réponse retournée est de loin supérieur aux trois autres LLMs.</p>



<p class="wp-block-paragraph">Il serait intéressant de pousser la comparaison sur un prompt de réflexion pur.</p>



<p class="wp-block-paragraph">De tous les tests de modèles (du moins sur les quatre déployés) c&rsquo;est qwen qui me convient le mieux. Néanmoins tout dépendra encore une fois du contexte et de ce que je souhaite réaliser avec l&rsquo;IA.</p>



<h2 class="wp-block-heading">Conclusion</h2>



<p class="wp-block-paragraph">Je suis plutôt satisfait bien que sans répondre aux prérequis il faut savoir s&rsquo;armer de patiente. Dans l&rsquo;ensemble Ollama est une bonne solution mais cette dernière doit être utilisé avec un certain contrôle selon les LLMs que l&rsquo;on pourrait être amené à utiliser. Naturellement le retour de prompt vient de la qualité de celui que l&rsquo;utilisateur aura exprimé.</p>



<p class="wp-block-paragraph">De ce fait, Ollama ne garantit pas une fiabilité aussi conséquente que les géants du Cloud. Toutefois il permet d&rsquo;assurer la confidentialité, sécurité des données localement et de nos recherches contrairement aux outils en ligne.</p>



<p class="wp-block-paragraph">Ce qui pourrait toutefois rebuter son usage serait de passer par l&rsquo;interface CLI dans le terminal. Effectivement c&rsquo;est loin d&rsquo;être ergonomique pour un usage quotidien d&rsquo;un utilisateur n&rsquo;ayant pas d&rsquo;expérience dans ce domaine. Mais il existe toutefois des alternatives à cette problématique par des outils intermédiaires qui viennent se placer entre l&rsquo;utilisateur et Ollama. Ce sujet sera abordé dans un prochain billet.</p>



<p class="has-text-align-center wp-block-paragraph"><strong><em>Initialement, je souhaitais aborder le sujet dans ce billet mais cela aurait été trop indigeste. Donc j&rsquo;ai CUT comme on dit dans notre milieu 🙂</em></strong></p>



<p class="wp-block-paragraph">Ollama fournissant une documentation riche et simple il sera alors possible de jouer avec son API. Vous me connaissez avec le temps, s&rsquo;il y a une documentation, une API&#8230; Que vais-je bien pouvoir faire avec le framework .NET et Powershell ? 🙂 L&rsquo;objectif serait de proposer par exemple un petit client de bureau Windows pour les utilisateurs. Il serait également possible de mettre en place des passerelles d&rsquo;automatisation inter applicatives intelligente comme <strong>L&rsquo;ouverture d&rsquo;un incident sur un event VEEAMOne dans ITOP</strong> ou <strong>une fonction de contrôle de code depuis PowerShell ISE</strong> par exemple.</p>



<p class="wp-block-paragraph">Cette étude m&rsquo;ouvre un nombre de porte considérable en guise de projet et de sujet d&rsquo;étude et ce malgré les contraintes matérielles. Est-ce que je vais utiliser longtemps la solution, je ne pense honnêtement pas car cette dernière est assez énergivore pour mon petit lab et je ne travaille pas chez EDF ni n&rsquo;habite Versailles. Mais cela peut (pour ne pas dire m&rsquo;a) réconcilié avec l&rsquo;utilisation de l&rsquo;IA. <em>Comme quoi il n&rsquo;y a que les cons qui ne changent pas d&rsquo;avis et nous sommes tous le con d&rsquo;un autre</em>.</p>



<p class="wp-block-paragraph"> Le mot de la fin :</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><em>J&rsquo;ai cherché votre nom sur Ollama ? Comme ça vous êtes triple champion du monde de descente de Guiness catégorie galopin ? </em></p>



<p class="wp-block-paragraph"><em>Vous devez faire erreur avec une autre personne, je suis un DC10 fantôme sortant d&rsquo;une tempête codéinée. </em></p>



<p class="wp-block-paragraph"><em>Milles excuses M&rsquo;sieur Ollama.</em></p>
<cite>Erwan GUILLEMARD</cite></blockquote>



<h2 class="wp-block-heading">Sources</h2>



<ul class="wp-block-list">
<li><a href="https://www.larousse.fr/dictionnaires/francais/robot/69647">Définition Larousse</a></li>



<li><a href="https://fr.wikipedia.org/wiki/Intelligence_artificielle">Wikipédia : IA</a></li>



<li><a href="https://www.data-bird.co/blog/types-ia">DataBird : Type d&rsquo;IA</a></li>



<li><a href="https://docs.ollama.com/">Ollama : Documentation</a></li>



<li><a href="https://ollama.com/download">Ollama : Téléchargement</a></li>



<li><a href="https://ollama.com/library">Ollama : Bibliothèque de modèle</a></li>



<li><a href="https://docs.openwebui.com/getting-started/quick-start">OpenWebUI : Documentation</a></li>



<li><a href="https://docs.openwebui.com/getting-started/quick-start/connect-a-provider/starting-with-ollama/">OpenWebUI : Intégration Ollama</a></li>



<li><a href="https://telnyx.com/llm-library/deepseek-coder-6-7b-instruct">Comparatif : Modèles performances</a></li>



<li><a href="https://localaimaster.com/blog/best-local-ai-models-2025-complete-guide">Comparatif : Modèles usages</a></li>



<li><a href="https://www.daf-mag.fr/Thematique/gestion-risque-1241/cyber-climat-2123/Breves/ia-usages-confiance-pierre-angulaire-adoption-durable-480929.htm">Usage de l&rsquo;IA : DAFMag</a></li>



<li><a href="https://lehub.bpifrance.fr/les-chiffres-2023-2024-du-marche-de-lia-dans-le-monde/">Répartition de l&rsquo;usage : BPIFrance</a></li>



<li><a href="https://www.lemonde.fr/emploi/article/2025/04/11/53-des-actifs-utilisent-l-ia-dans-leur-vie-professionnelle_6594046_1698637.html">Usage de l&rsquo;IA : LeMonde</a></li>
</ul>


<ol class="wp-block-footnotes"><li id="cfefe833-a7a4-4019-87c1-c684487526cf"><strong>IA :</strong> Intelligence Artificielle <a href="#cfefe833-a7a4-4019-87c1-c684487526cf-link" aria-label="Aller à la note de bas de page 1">↩︎</a></li><li id="aadcbef0-7f66-4bcf-bdef-699e3c85609a">L&rsquo;erreur est humaine, persévérer diabolique <a href="#aadcbef0-7f66-4bcf-bdef-699e3c85609a-link" aria-label="Aller à la note de bas de page 2">↩︎</a></li><li id="b41451ff-b3b4-4f38-bb68-9645125a745a"><strong>CGU :</strong> Conditions Générales d&rsquo;Utilisations <a href="#b41451ff-b3b4-4f38-bb68-9645125a745a-link" aria-label="Aller à la note de bas de page 3">↩︎</a></li><li id="1aad26f0-eec5-4a0f-8e20-fdd248a35c69"><strong>LLM :</strong> Large Language Models  <a href="#1aad26f0-eec5-4a0f-8e20-fdd248a35c69-link" aria-label="Aller à la note de bas de page 4">↩︎</a></li><li id="fdf3a5b9-4253-464d-a09e-8fb86b58314e"><strong>GPU :</strong> Graphics Processing Unit  <a href="#fdf3a5b9-4253-464d-a09e-8fb86b58314e-link" aria-label="Aller à la note de bas de page 5">↩︎</a></li><li id="73029218-b1cc-46cd-b970-647ebf9d8979"><strong>CPU :</strong> Central Processing Unit <a href="#73029218-b1cc-46cd-b970-647ebf9d8979-link" aria-label="Aller à la note de bas de page 6">↩︎</a></li><li id="a37422d2-85b9-4b20-aaed-ed832709d897"><strong>SSD :</strong> Solid State Drive <a href="#a37422d2-85b9-4b20-aaed-ed832709d897-link" aria-label="Aller à la note de bas de page 7">↩︎</a></li><li id="551f4327-d659-4f5e-aa79-e901800f9a6f"><strong>DARPA :</strong> Defense Advanced Research Projects Agency <a href="#551f4327-d659-4f5e-aa79-e901800f9a6f-link" aria-label="Aller à la note de bas de page 8">↩︎</a></li><li id="7ddca2cc-8395-4bb3-9a48-65ef2cbdd525"><strong>IHM :</strong> Interface Homme Machine <a href="#7ddca2cc-8395-4bb3-9a48-65ef2cbdd525-link" aria-label="Aller à la note de bas de page 9">↩︎</a></li><li id="3da01144-9884-4e50-80b3-cb720fe5d120"><strong>AGI :</strong> Artificial General Intelligence <a href="#3da01144-9884-4e50-80b3-cb720fe5d120-link" aria-label="Aller à la note de bas de page 10">↩︎</a></li><li id="6b6187e7-bf8d-4671-888c-ddabe2812f2a"><strong>SVM :</strong> Support Vector Machine <a href="#6b6187e7-bf8d-4671-888c-ddabe2812f2a-link" aria-label="Aller à la note de bas de page 11">↩︎</a></li><li id="2ccacfdc-8014-4064-9420-0e51ef9e2778"><strong>NLP :</strong> Natural Language Processing <a href="#2ccacfdc-8014-4064-9420-0e51ef9e2778-link" aria-label="Aller à la note de bas de page 12">↩︎</a></li><li id="4e84b708-3cbf-4c9d-af94-e19d2cd9d82e"><strong>RAG :</strong> Retrieval Augmented Generation <a href="#4e84b708-3cbf-4c9d-af94-e19d2cd9d82e-link" aria-label="Aller à la note de bas de page 13">↩︎</a></li><li id="75955ef0-37da-444b-ba62-3eced558a61a"><strong>API :</strong> Application Programming Interface <a href="#75955ef0-37da-444b-ba62-3eced558a61a-link" aria-label="Aller à la note de bas de page 14">↩︎</a></li><li id="6ad53fdd-7b83-46bd-8608-5b89bf94b781"><strong>HTTP :</strong> Hypertext Transfer Protocol <a href="#6ad53fdd-7b83-46bd-8608-5b89bf94b781-link" aria-label="Aller à la note de bas de page 15">↩︎</a></li><li id="ff1afc50-05de-4bce-91e3-563ae4b9fe9f"><strong>UTM :</strong> Unified Threat Management <a href="#ff1afc50-05de-4bce-91e3-563ae4b9fe9f-link" aria-label="Aller à la note de bas de page 16">↩︎</a></li></ol>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>PROJET &#8211; Linux Partitions Calculator</title>
		<link>https://erwanguillemard.com/projet-linux-partitions-calculator/</link>
		
		<dc:creator><![CDATA[Erwan Guillemard]]></dc:creator>
		<pubDate>Sat, 11 Apr 2026 13:55:29 +0000</pubDate>
				<category><![CDATA[Applications]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Projets]]></category>
		<category><![CDATA[Application]]></category>
		<category><![CDATA[Projet]]></category>
		<guid isPermaLink="false">https://erwanguillemard.com/?p=3409</guid>

					<description><![CDATA[Je ne pensais pas en venir un jour à rédiger un article sur cette thématique. Pourtant force est de constater que je me suis fait encore une fois ch*er la bi*e (passez-moi l&#8217;expression) à déployer une machine linux. Je rassure le lecteur qui s&#8217;est égaré ici, ce billet va être simple. Bref, j&#8217;ai la problématique...]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Je ne pensais pas en venir un jour à rédiger un article sur cette thématique. Pourtant force est de constater que je me suis fait encore une fois ch*er la bi*e (passez-moi l&rsquo;expression) à déployer une machine linux.</p>



<p class="wp-block-paragraph">Je rassure le lecteur qui s&rsquo;est égaré ici, ce billet va être simple.</p>



<p class="wp-block-paragraph">Bref, j&rsquo;ai la problématique suivante, lorsque je déploie une nouvelle machine Linux (RHEL<sup data-fn="d0cf7aef-1d32-469c-80aa-165e012513eb" class="fn"><a href="#d0cf7aef-1d32-469c-80aa-165e012513eb" id="d0cf7aef-1d32-469c-80aa-165e012513eb-link">1</a></sup> ou Debian) je suis le guide d&rsquo;hygiène et sécurité de l&rsquo;ANSSI<sup data-fn="0a4dc23e-e493-4f49-8cdf-9a361464e536" class="fn"><a href="#0a4dc23e-e493-4f49-8cdf-9a361464e536" id="0a4dc23e-e493-4f49-8cdf-9a361464e536-link">2</a></sup>. Ce qui se traduit par le partitionnement strict des points de montage système et de données. Sauf que lorsque la taille de notre disque varie, difficile de définir de tête quelle volumétrie doit être provisionnée pour chaque partition&#8230;</p>



<p class="wp-block-paragraph">C&rsquo;est donc là que j&rsquo;ai pris un coup de sang.</p>



<p class="has-text-align-center wp-block-paragraph">En voiture Simone, c&rsquo;est parti !</p>





<h2 class="wp-block-heading">Avant-Propos</h2>



<p class="wp-block-paragraph">Je ne vais pas rentrer dans le détail du code qui compose mon application, ce n&rsquo;est pas l&rsquo;objectif. Si l&rsquo;on souhaite comprendre ce dernier, un peu de réverse engineering et le tour est joué (surtout que j&rsquo;ai commenté le code).</p>



<p class="wp-block-paragraph">Je n&rsquo;aborderai pas non plus la partie de durcissement des systèmes GNU Linux. Pourquoi ?</p>



<ol class="wp-block-list">
<li>Ce n&rsquo;est pas le sujet de ce billet</li>



<li>Je traite le sujet dans un de mes premiers articles que je ne partage que sur contact et échange</li>



<li>Je pars du principe que cela sera fait après déploiement du SE<sup data-fn="7c312e03-317c-474a-ab3e-448ddb4d3df3" class="fn"><a href="#7c312e03-317c-474a-ab3e-448ddb4d3df3" id="7c312e03-317c-474a-ab3e-448ddb4d3df3-link">3</a></sup>.</li>
</ol>



<p class="wp-block-paragraph">L&rsquo;objectif est vraiment de comprendre ou du moins rappeler la structure d&rsquo;un système GNU quant à son arborescence d&rsquo;organisation de fichier. Et donc outre à mesure à comprendre pourquoi nous devons allouer plus ou moins d&rsquo;espace de stockage.</p>



<p class="wp-block-paragraph">Concernant l&rsquo;application que j&rsquo;ai développé, bien que je revienne sur ce point plus bas dans ce billet, cette dernière n&rsquo;est pas fonctionnelle sur les environnements GNU Linux du fait de la GUI<sup data-fn="957eb17c-7564-49a4-beda-d11cd897f8a8" class="fn"><a href="#957eb17c-7564-49a4-beda-d11cd897f8a8" id="957eb17c-7564-49a4-beda-d11cd897f8a8-link">4</a></sup>.</p>



<p class="wp-block-paragraph">Il est également important de souligné que cette application n&rsquo;est compatible qu&rsquo;avec la version 5.X de powershell. </p>



<h2 class="wp-block-heading">Prérequis</h2>



<ul class="wp-block-list">
<li><strong>SE :</strong>&nbsp;Environnement Windows non obsolète</li>



<li><strong>Apps :&nbsp;</strong>Non Applicable</li>



<li><strong>Autres :</strong>
<ul class="wp-block-list">
<li>PowerShell version 5.X</li>
</ul>
</li>
</ul>



<h2 class="wp-block-heading">Théorie</h2>



<p class="wp-block-paragraph">Si nous devons commencer par la base, il serait bon de se poser la question </p>



<p class="has-text-align-center wp-block-paragraph"><strong>« Comment est structurer un environnement GNU Linux ? »</strong></p>



<p class="has-text-align-left wp-block-paragraph">Contrairement à certaines connaissances que j&rsquo;ai pu fréquenter, oui c&rsquo;est un point important. Cela évite de faire n&rsquo;importe quoi et dans une outre mesure d&rsquo;apprendre quelques choses. (Toutes ressemblances avec des personnes existantes et purement fortuite).</p>



<p class="has-text-align-center wp-block-paragraph"><strong>T&rsquo;es un peu chafouin en ce moment non ? Tu ne voudrais pas ton petit suppositoire à la verveine ?</strong></p>



<p class="has-text-align-left wp-block-paragraph">Légèrement agacé avec une pointe de colère et donc de sarcasme il est vrai. L&rsquo;hypocrisie des uns fait le désespoir des autres. Mais OKLM comme disent les d&rsquo;jeuns je prends un sacré recul. Cependant, je suis partant pour la verveine mais pas en suppositoire, plus en pousse café 🙂 <a href="https://www.youtube.com/watch?v=s_aka1i0RD0&amp;list=RDs_aka1i0RD0&amp;start_radio=1">Et puis Monsieur, Madame, Mademoiselle, je suis bien fatigué&#8230; J&rsquo;en ai marre&#8230;</a></p>



<p class="wp-block-paragraph">Regardons alors de plus près l&rsquo;architecture n à n-1.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="546" height="570" src="https://erwanguillemard.com/wp-content/uploads/2026/02/PP_005_001_arch.jpg" alt="" class="wp-image-3416" style="width:307px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2026/02/PP_005_001_arch.jpg 546w, https://erwanguillemard.com/wp-content/uploads/2026/02/PP_005_001_arch-287x300.jpg 287w" sizes="auto, (max-width: 546px) 100vw, 546px" /></figure>
</div>


<p class="wp-block-paragraph">(Pas de panique je vais prendre le temps de décrire chaque répertoire).</p>



<p class="wp-block-paragraph">Nous avons le répertoire parent de notre arborescence, communément appelé « la Racine » (et non rien à voir avec l&rsquo;organisation de l&rsquo;ombre de Konoha dans Naruto [super référence&#8230;]) ou <strong>root</strong>. C&rsquo;est sous ce répertoire <strong>/</strong> que nous allons retrouver les répertoires qui organise notre SE.</p>



<div class="wp-block-kadence-accordion alignnone"><div class="kt-accordion-wrap kt-accordion-id3409_97e24c-b7 kt-accordion-has-14-panes kt-active-pane-0 kt-accordion-block kt-pane-header-alignment-left kt-accodion-icon-style-basic kt-accodion-icon-side-right" style="max-width:none"><div class="kt-accordion-inner-wrap" data-allow-multiple-open="false" data-start-open="none">
<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-1 kt-pane3409_1e6061-7a"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>/bin</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">Ce répertoire est l&rsquo;abréviation de <strong>binaries</strong>. Il est essentiel au bon fonctionnement du système puisque ce dernier va contenir l&rsquo;ensemble des commandes exécutables de bases.</p>



<p class="wp-block-paragraph">C&rsquo;est ici que nous retrouvons les programmes nécessaires au mode de restauration ainsi qu&rsquo;au démarrage du système. C&rsquo;est je pense l&rsquo;un des répertoire les plus important du système.</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-2 kt-pane3409_4a9c15-d7"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>/boot</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">Ce répertoire est réservé au rangement des chaussures afin d&rsquo;utiliser nos sockets&#8230; Ok je sors.</p>



<p class="wp-block-paragraph">Plus sérieusement, ce répertoire contient tout ce qui est nécessaire au démarrage du système. </p>



<p class="has-text-align-center wp-block-paragraph"><strong>Pas de /boot ? Pas de démarrage&#8230;</strong></p>



<p class="has-text-align-left wp-block-paragraph">Ce dernier contient le kernel (noyau Linux), les fichiers d&rsquo;amorçage (bootloader pour ne pas dire GRUB<sup data-fn="6b4eeabd-5566-437e-ab1d-1980ef7ba3d1" class="fn"><a href="#6b4eeabd-5566-437e-ab1d-1980ef7ba3d1" id="6b4eeabd-5566-437e-ab1d-1980ef7ba3d1-link">5</a></sup> dans la majorité des cas) ainsi que l&rsquo;initramfs ou initrd (cela dépend) qui est notre « petit » système d&rsquo;exploitation temporaire. Il va sans dire que ce dernier est critique&#8230;</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-3 kt-pane3409_cb4761-85"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>/dev</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">Ce répertoire est l&rsquo;abréviation de <strong>devices</strong>. C&rsquo;est dans ce répertoire que nous allons retrouver l&rsquo;ensemble des fichiers spéciaux représentant les périphériques systèmes. </p>



<p class="has-text-align-center wp-block-paragraph">Si nous avions des doutes, sous Linux, <strong><em>Tout est fichiers</em></strong>.</p>



<p class="has-text-align-left wp-block-paragraph">Bref, c&rsquo;est ici que nous allons interagir avec nos médias de stockage, les périphériques tels que caméra, micro, audio etc&#8230; C&rsquo;est notre noyau qui gère son contenu.</p>



<p class="wp-block-paragraph">Ce n&rsquo;est ni plus ni moins que l&rsquo;interface entre notre système logique et notre système physique pour ne pas dire matériel.</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-4 kt-pane3409_def777-a5"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>/etc</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">/etc, l&rsquo;un des dossiers les plus importants&#8230; C&rsquo;est dans ce dernier que nous allons retrouver l&rsquo;ensemble des fichiers de configuration du système. Il me semble de jadis ce que j&rsquo;ai écrit dans mes cours de licence (merci M. HSU) que c&rsquo;est l&rsquo;abréviation de <strong>et cetera</strong> (c&rsquo;était pour la minute <a href="https://www.youtube.com/watch?v=nWdUojwhJVo">Père castor</a>)</p>



<ul class="wp-block-list">
<li>Configurations globales du système</li>



<li>Paramètres de sécurité</li>



<li>Informations sur les utilisateurs</li>



<li>Configuration réseau</li>



<li>Configuration des services</li>
</ul>



<p class="wp-block-paragraph">Généralement, la modification des fichiers nécessite les droits d&rsquo;administrations. Il est généralement conseillé avant toutes altérations de faire une copie du fichier d&rsquo;origine 🙂</p>



<p class="has-text-align-center wp-block-paragraph">Généralement on se fait avoir une fois pas deux <strong>#bisous</strong></p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-5 kt-pane3409_11bf63-4a"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>/home</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="has-text-align-center wp-block-paragraph"><a href="https://www.youtube.com/watch?v=6FLXqkL9MPM">E.T phone&#8230; HHHHH-OOOOOOOMMMMM-EEE&#8230;</a></p>



<p class="wp-block-paragraph">C&rsquo;est le répertoire utilisateur. C&rsquo;est dans ce dernier que les utilisateurs vont stocker leurs items, et c&rsquo;est également dans ce dernier que la configuration propre au profil de l&rsquo;utilisateur est stockée.</p>



<p class="wp-block-paragraph">Pour faire simple, c&rsquo;est un espace personnel limité par des permissions strictes pour chaque utilisateur.</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-6 kt-pane3409_ae88eb-cd"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>/lib</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">Abréviation de <strong>librairie</strong>, ce répertoire va contenir l&rsquo;ensemble des bibliothèques partagées essentielles et nécessaires au fonctionnement de notre système et des exécutables stockés dans les répertoires <strong>/bin</strong> et <strong>/sbin</strong>.</p>



<p class="wp-block-paragraph">Si nous faisions la comparaison avec Windows, les fichiers .dll s&rsquo;appellent .so.</p>



<p class="wp-block-paragraph">Dans ce répertoire nous retrouvons également les modules du kernel. Ce répertoire est critique pour le système car lié au /bin.</p>



<p class="has-text-align-center wp-block-paragraph">Merci Capt&rsquo;ain Obvious !</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-7 kt-pane3409_83b8b1-28"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>/media</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">L&rsquo;un des amalgames que nous pouvons souvent faire avec ce répertoire se fait avec le répertoire <strong>/dev</strong> et <strong>/mnt</strong>.</p>



<p class="wp-block-paragraph">Effectivement, le répertoire <strong>/media</strong> sert de point de montage automatique pour les périphériques amovibles. Si vous voyez genre les Usb-Key, CD/DVD, DD externe, Disquette, Carte SD etc&#8230; C&rsquo;est pourquoi nous ne retrouvons pas ces périphériques dans <strong>/dev</strong>.</p>



<p class="wp-block-paragraph">Le fait que le point de montage se fait automatiquement il n&rsquo;y a pas besoin de chercher du côté du répertoire <strong>/mnt</strong>.</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-8 kt-pane3409_b55779-e4"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>/mnt</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">L&rsquo;abréviation de <strong>mount</strong>. Ce répertoire est un point de montage temporaire pour monter manuellement des systèmes de fichiers.</p>



<p class="wp-block-paragraph">Il sert à monter un disque manuellement, monter un ISO, accéder à une partition de réparation.</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-9 kt-pane3409_9ec501-3a"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>/proc</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">C&rsquo;est un répertoire un peu particulier d&rsquo;abréviation <strong>processus</strong>. C&rsquo;est un système de fichiers virtuel qui est généré dynamiquement par le kernel.</p>



<p class="wp-block-paragraph">Ainsi, nous retrouvons :</p>



<ul class="wp-block-list">
<li>Les processus actifs</li>



<li>Les informations des ressources (CPU et RAM)</li>



<li>La configuration du kernel</li>
</ul>



<p class="wp-block-paragraph">Il est possible de modifier certains paramètres systèmes à chaud comme le réseau par exemple.</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-10 kt-pane3409_1d05bd-93"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>/sbin</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">De son abréviation <strong>system binaries</strong>, nous retrouvons les mêmes caractéristiques que le répertoire /bin à l&rsquo;exception que les commandes des exécutables présents dans le répertoire sont destinées principalement à l&rsquo;administration (utilisateur root).</p>



<p class="wp-block-paragraph">Ainsi les ressources présentes dans le répertoire <strong>/sbin</strong> :</p>



<ul class="wp-block-list">
<li>Permettre le démarrage du système</li>



<li>Gérer l&rsquo;administration des partitions et des disques</li>



<li>Administrer le réseau</li>



<li>Réaliser la maintenance et récupération</li>
</ul>



<p class="wp-block-paragraph">Les commandes étant sensibles, ces dernières ne doivent pas être accessible des utilisateurs. Uniquement des utilisateurs privilégiés.</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-11 kt-pane3409_c96322-21"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>/srv</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">De son petit nom <strong>service</strong>, ce répertoire va contenir les données des services fournis par le système.</p>



<p class="wp-block-paragraph">Il sert à stocker les fichiers spécifiques aux services réseau ou applications serveurs. Généralement chaque service à son propre sous-dossier.</p>



<p class="wp-block-paragraph">Les données présentes dans <strong>/srv</strong> sont considérées comme fixes. Dans le cas contraire il faudra se tourner vers le <strong>/var</strong>.</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-12 kt-pane3409_b447db-5d"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>/tmp</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">Le répertoire <strong>temporaire</strong> enfin. Comme son nom l&rsquo;indique il va contenir des ressources temporaires durant l&rsquo;exécution d&rsquo;un programme, d&rsquo;échange de données inter processus, voire de zone tampon durant l&rsquo;installation ou compilation d&rsquo;un programme.</p>



<p class="wp-block-paragraph">C&rsquo;est un répertoire magique, une zone grise. L&rsquo;avantage de ce répertoire se trouve dans la suppression des données à chaque redémarrage du système.</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-14 kt-pane3409_f75fa3-11"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>/var</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">Le dossier <strong>variable</strong>&#8230; Ce répertoire va contenir les données qui vont changer dans le temps contrairement aux fichiers statiques comme /usr, /bin, /srv.</p>



<p class="wp-block-paragraph">Ce répertoire est généralement utilisé pour stocker des fichiers générés par le système ou par les applications (site web par exemple). Toutefois, nous retrouvons également :</p>



<ul class="wp-block-list">
<li>Les journaux systèmes et services (logs)</li>



<li>Les files d&rsquo;impressions ou mails (spools)</li>



<li>Les BDDs<sup data-fn="2d347e21-a763-4bc2-ab40-e0ef607de630" class="fn"><a href="#2d347e21-a763-4bc2-ab40-e0ef607de630" id="2d347e21-a763-4bc2-ab40-e0ef607de630-link">6</a></sup></li>



<li>Les fichiers temporaires persistants</li>
</ul>



<p class="wp-block-paragraph">Attention car ce répertoire peut très vite grossir 🙂</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-13 kt-pane3409_955780-1c"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>/usr</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">L&rsquo;un des répertoires importants du système mais pas non critique. Ce dernier est l&rsquo;abréviation de <strong>user</strong> et va contenir les logiciels installés par le système ou l&rsquo;administrateur.</p>



<p class="wp-block-paragraph">Une sous arborescence bien organisée est présente afin de garantir l&rsquo;accès aux programmes, bibliothèques et fichiers partagés pour l&rsquo;ensemble des utilisateurs :</p>



<ul class="wp-block-list">
<li><strong>/usr/bin :</strong> Programme accessible à tous les utilisateurs</li>



<li><strong>/usr/sbin :</strong> Programmes d&rsquo;administration</li>



<li><strong>/usr/lib :</strong> Bibliothèques partagées</li>



<li><strong>/usr/share :</strong> Fichiers partagés</li>



<li><strong>/usr/include :</strong> Fichiers header pour la compilation de logiciels</li>



<li><strong>/usr/local :</strong> Programmes installés manuellement</li>
</ul>



<p class="wp-block-paragraph">Je peux vous dire que plus d&rsquo;une fois je me suis mordu les doigts pour ne pas avoir bien provisionné ma partition et je me retrouve bloqué en plein update ou durant une installation&#8230;</p>
</div></div></div>
</div></div></div>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">J&rsquo;en peux plus. C&rsquo;est que c&rsquo;est long comme retour aux bases&#8230; J&rsquo;espère ne pas avoir oublié de répertoire.</p>



<p class="wp-block-paragraph">L&rsquo;une des mauvaises pratiques lors du déploiement d&rsquo;un SE Linux est d&rsquo;allouer l&rsquo;ensemble de l&rsquo;espace disponible à <strong>/</strong>, de ce fait si par exemple je viens à blinder le <strong>/var/tmp</strong> ou <strong>/var/log</strong> mon système est à genoux. Donc sur un disque il convient de partitionner les répertoires.</p>



<p class="has-text-align-center wp-block-paragraph"><strong>Oui mais quels répertoires ?</strong></p>



<p class="wp-block-paragraph">En réponse à cette question, <a href="https://www.youtube.com/watch?v=EvoL-FvSPDg">je mets en 3/4 face et je réponds par un Uraken</a> des familles en sortant le guide de l&rsquo;ANSSI.</p>



<figure class="wp-block-table aligncenter"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td><img loading="lazy" decoding="async" width="600" height="632" class="wp-image-1459" style="width: 600px;" src="https://erwanguillemard.com/wp-content/uploads/2024/01/IL01_012_R12_part.png" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2024/01/IL01_012_R12_part.png 338w, https://erwanguillemard.com/wp-content/uploads/2024/01/IL01_012_R12_part-285x300.png 285w" sizes="auto, (max-width: 600px) 100vw, 600px" /></td><td>Cela offre également une autre possibilité concernant la sécurité.<br><br>Au-delà d&rsquo;assurer le fonctionnement du système quant au potentiel risque de saturation de stockage, il est possible de définir des options sur les points de montage de nos répertoires.<br><br>Ainsi il est possible de limiter l&rsquo;accès au device ou l&rsquo;exécution de programme.<br><br>Je préconise également d&rsquo;ajouter le répertoire <strong>/var/log/audit</strong>. <br><br>Je ne rentre volontairement pas dans le détail car j&rsquo;explique ce point de recommandation (R12) dans mon billet concernant le durcissement d&rsquo;un système GNU Linux.</td></tr></tbody></table></figure>



<p class="has-text-align-center wp-block-paragraph"><strong>Ok pour ce qui est de la segmentation, mais du coup, quel doit être la répartition niveau stockage ?</strong></p>



<p class="wp-block-paragraph">C&rsquo;est plutôt simple. Encore une fois, il suffit de chercher un peu. Malheureusement il n&rsquo;y a pas de recommandation empirique. C&rsquo;est donc à nous de définir les seuils par répertoire en tenant compte des critères énoncés précédemment.</p>



<p class="wp-block-paragraph">Pour ma part cela donne :</p>



<figure class="wp-block-table has-small-font-size"><table class="has-fixed-layout"><tbody><tr><td class="has-text-align-center" data-align="center"><strong>Répertoires</strong></td><td class="has-text-align-center" data-align="center"><strong>% Minimum</strong></td><td class="has-text-align-center" data-align="center"><strong>% Maximum</strong></td></tr><tr><td class="has-text-align-center" data-align="center">/</td><td class="has-text-align-center" data-align="center">10%</td><td class="has-text-align-center" data-align="center">15%</td></tr><tr><td class="has-text-align-center" data-align="center">/boot</td><td class="has-text-align-center" data-align="center"><strong><mark style="background-color:rgba(0, 0, 0, 0);color:#fe0000" class="has-inline-color">*</mark> 1024 Mio</strong></td><td class="has-text-align-center" data-align="center"><strong><mark style="background-color:rgba(0, 0, 0, 0);color:#fe0000" class="has-inline-color">*</mark> 1024 Mio</strong></td></tr><tr><td class="has-text-align-center" data-align="center">/usr</td><td class="has-text-align-center" data-align="center">10%</td><td class="has-text-align-center" data-align="center">15%</td></tr><tr><td class="has-text-align-center" data-align="center">/var</td><td class="has-text-align-center" data-align="center">10%</td><td class="has-text-align-center" data-align="center">15%</td></tr><tr><td class="has-text-align-center" data-align="center">swap</td><td class="has-text-align-center" data-align="center"><strong>1:1 de la RAM si =&lt; 8 Gio<br>1:0.5 de la RAM si &gt; 8 Gio</strong></td><td class="has-text-align-center" data-align="center"><strong>1:1 de la RAM si =&lt; 8 Gio<br>1:0.5 de la RAM si &gt; 8 Gio</strong></td></tr><tr><td class="has-text-align-center" data-align="center">/var/log</td><td class="has-text-align-center" data-align="center">5%</td><td class="has-text-align-center" data-align="center">10%</td></tr><tr><td class="has-text-align-center" data-align="center">/var/log/audit</td><td class="has-text-align-center" data-align="center">2%</td><td class="has-text-align-center" data-align="center">5%</td></tr><tr><td class="has-text-align-center" data-align="center">/var/tmp</td><td class="has-text-align-center" data-align="center">5%</td><td class="has-text-align-center" data-align="center">5%</td></tr><tr><td class="has-text-align-center" data-align="center">/tmp</td><td class="has-text-align-center" data-align="center">5%</td><td class="has-text-align-center" data-align="center">5%</td></tr><tr><td class="has-text-align-center" data-align="center">/opt</td><td class="has-text-align-center" data-align="center">5%</td><td class="has-text-align-center" data-align="center">10%</td></tr><tr><td class="has-text-align-center" data-align="center">/home</td><td class="has-text-align-center" data-align="center">10%</td><td class="has-text-align-center" data-align="center">10%</td></tr><tr><td class="has-text-align-center" data-align="center">/srv</td><td class="has-text-align-center" data-align="center">2%</td><td class="has-text-align-center" data-align="center">5%</td></tr></tbody></table></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Voilà ce qui est pour la théorie. Comme ça me soule de ne pas savoir quel espace allouer pour 30 Gio, 40 Gio, 50 Gio de disque, j&rsquo;ai été contraint de faire une petite application en Powershell&#8230; Pourquoi changer une équipe qui gagne ?</p>



<h2 class="wp-block-heading">Application</h2>



<p class="wp-block-paragraph">Je reste un puriste en termes de développement et je ne peux me passer de Windows Powershell ISE<sup data-fn="29a21fb4-e351-4d35-8f8b-3970b17ecbef" class="fn"><a href="#29a21fb4-e351-4d35-8f8b-3970b17ecbef" id="29a21fb4-e351-4d35-8f8b-3970b17ecbef-link">7</a></sup>. Je sais qu&rsquo;il existe mieux comme IDE<sup data-fn="2a0ff43d-b86a-4ec2-affb-823bcb64afdc" class="fn"><a href="#2a0ff43d-b86a-4ec2-affb-823bcb64afdc" id="2a0ff43d-b86a-4ec2-affb-823bcb64afdc-link">8</a></sup> (Visual Studio Code par exemple) mais je n&rsquo;arrive pas à me faire à l&rsquo;idée de quitter ISE&#8230;</p>



<p class="has-text-align-center wp-block-paragraph"><strong>Cela fait-il de moi un vieux réactionnaire ? Un dev de l&rsquo;ancien temps ?</strong></p>



<p class="wp-block-paragraph">Bref, je laisse cette question existentielle en suspens.</p>



<p class="wp-block-paragraph">Je me suis amusé pour une fois à réaliser une interface GUI<sup data-fn="f0557ebb-6968-4aca-a988-4463d1adb9db" class="fn"><a href="#f0557ebb-6968-4aca-a988-4463d1adb9db" id="f0557ebb-6968-4aca-a988-4463d1adb9db-link">9</a></sup> via WindowsForm. Moi l&rsquo;amoureux du CLI<sup data-fn="3e18b1eb-c04c-4c76-bba6-28e2298ac5a5" class="fn"><a href="#3e18b1eb-c04c-4c76-bba6-28e2298ac5a5" id="3e18b1eb-c04c-4c76-bba6-28e2298ac5a5-link">10</a></sup> je reconnais mettre amusé. Encore une fois <a href="https://www.youtube.com/watch?v=1SERx1KyECU&amp;list=RD1SERx1KyECU&amp;start_radio=1">je sais que je ne savais rien</a> et j&rsquo;ai donc encore appris.</p>



<p class="wp-block-paragraph">Réaliser une application GUI en plaçant les items au pixel c&rsquo;est marrant mais vite casse gueule. Cela demande une gymnastique d&rsquo;esprit qui ne me rebute pas.</p>



<p class="wp-block-paragraph">Il y a toutefois un bémol non négligeable à l&rsquo;utilisation de WindowsForm, cela ne permet pas l&rsquo;opérabilité multiplateforme. Logique puisque WindowsForm fait partie intégrante de Windows, donc pas possible de faire fonctionner ce dernier sous Linux.</p>



<p class="wp-block-paragraph">Il faudrait donc que je compose un mode de fonctionnement CLI pour assurer l&rsquo;opérabilité. Cela n&rsquo;est qu&rsquo;au final que le développement d&rsquo;une fonction d&rsquo;affichage.</p>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td>La première version de mon application ne se base pas pour l&rsquo;instant sur un fichier de configuration ce qui implique que les seuils minimums et maximums sont défini en dur dans le code (en tant que constante global tout de même je ne suis pas un sauvage !).</td><td><img loading="lazy" decoding="async" width="550" height="388" class="wp-image-3431" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_005_002_app.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/03/PP_005_002_app.jpg 932w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_005_002_app-300x211.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/03/PP_005_002_app-768x541.jpg 768w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>



<p class="wp-block-paragraph">J&rsquo;offre également la possibilité de définir la taille minimum ou maximum à provisionner.</p>



<p class="wp-block-paragraph">Pour bien comprendre (c&rsquo;est un grand mot) je propose la courte vidéo de présentation de la version béta de mon app.</p>



<h3 class="wp-block-heading">Démonstration</h3>



<figure class="wp-block-embed aligncenter is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="PROJET   Linux Partitions Calculator" width="720" height="405" src="https://www.youtube.com/embed/-pFmGdQvl3E?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<h3 class="wp-block-heading">GitHub</h3>



<p class="has-text-align-center wp-block-paragraph"><a href="https://github.com/EGuillemard/GS_002_UNI_SYS_Storage">Miaou</a></p>



<h2 class="wp-block-heading">Conclusion</h2>



<p class="wp-block-paragraph">Qu&rsquo;il est bon de revenir aux bases. Sans cela, je pense que je n&rsquo;aurai pas eu l&rsquo;idée de faire du GUI en powershell depuis mon ISE. Il est vrai que cela permet également de revenir peut-être aux prémices de ce blog qui étaient :</p>



<ul class="wp-block-list">
<li>L&rsquo;aspect pédagogique</li>



<li>Aborder les bases</li>



<li>Réaliser des petits projets</li>



<li>Sortir des sentiers battus</li>
</ul>



<p class="wp-block-paragraph">Ainsi, je renoue avec certaines valeurs laissées de côté dans le cadre des derniers gros projets que j&rsquo;ai pu mener. Toutefois, je reste une tête de c*n à laisser transparaitre ma désinvolture, sarcasmes et autres tournures de phrases et expressions vitriolés 🙂 (Ce blog et mes articles restent un loisir personnel et cela m&rsquo;amuse d&rsquo;user de ma liberté d&rsquo;expression tout en tachant de rester respectueux).</p>



<p class="wp-block-paragraph">Bref, il est temps de clôturer ce billet et d&rsquo;attaquer d&rsquo;autres thématiques 🙂 </p>



<p class="wp-block-paragraph">Le mot de la fin :</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><em>J&rsquo;ai évalué et calculé mon incompétence, elle est à la hauteur de vos mensonges et de votre lâcheté. Un petit partitionnement de prime et de service ? Vous méritez bien convenablement un pâté lorrain en cadeau ?</em></p>
<cite>Erwan GUILLEMARD</cite></blockquote>



<h2 class="wp-block-heading">Sources</h2>



<ul class="wp-block-list">
<li><a href="https://www.debian.org/releases/stable/arm64/apcs03.en.html">Debian : Recommanded Partitioning</a></li>



<li><a href="https://help.ubuntu.com/community/DiskSpace">Ubuntu : DiskSpace</a></li>
</ul>


<ol class="wp-block-footnotes"><li id="d0cf7aef-1d32-469c-80aa-165e012513eb"><strong>RHEL :</strong> RedHat Entreprise Linux <a href="#d0cf7aef-1d32-469c-80aa-165e012513eb-link" aria-label="Aller à la note de bas de page 1">↩︎</a></li><li id="0a4dc23e-e493-4f49-8cdf-9a361464e536"><strong>ANSSI :</strong> Agence Nationale de Sécurité des Systèmes d&rsquo;Informations <a href="#0a4dc23e-e493-4f49-8cdf-9a361464e536-link" aria-label="Aller à la note de bas de page 2">↩︎</a></li><li id="7c312e03-317c-474a-ab3e-448ddb4d3df3"><strong>SE :</strong> Système d&rsquo;Exploitation <a href="#7c312e03-317c-474a-ab3e-448ddb4d3df3-link" aria-label="Aller à la note de bas de page 3">↩︎</a></li><li id="957eb17c-7564-49a4-beda-d11cd897f8a8"><strong>GUI :</strong> Graphical User Interface <a href="#957eb17c-7564-49a4-beda-d11cd897f8a8-link" aria-label="Aller à la note de bas de page 4">↩︎</a></li><li id="6b4eeabd-5566-437e-ab1d-1980ef7ba3d1"><strong>GRUB :</strong> GRand Unifier Bootloader <a href="#6b4eeabd-5566-437e-ab1d-1980ef7ba3d1-link" aria-label="Aller à la note de bas de page 5">↩︎</a></li><li id="2d347e21-a763-4bc2-ab40-e0ef607de630"><strong>BDD :</strong> Base De Données <a href="#2d347e21-a763-4bc2-ab40-e0ef607de630-link" aria-label="Aller à la note de bas de page 6">↩︎</a></li><li id="29a21fb4-e351-4d35-8f8b-3970b17ecbef"><strong>ISE :</strong> Integrated Scripting Environment <a href="#29a21fb4-e351-4d35-8f8b-3970b17ecbef-link" aria-label="Aller à la note de bas de page 7">↩︎</a></li><li id="2a0ff43d-b86a-4ec2-affb-823bcb64afdc"><strong>IDE :</strong> Integraded Development Environment <a href="#2a0ff43d-b86a-4ec2-affb-823bcb64afdc-link" aria-label="Aller à la note de bas de page 8">↩︎</a></li><li id="f0557ebb-6968-4aca-a988-4463d1adb9db"><strong>GUI :</strong> Graphical User Interface <a href="#f0557ebb-6968-4aca-a988-4463d1adb9db-link" aria-label="Aller à la note de bas de page 9">↩︎</a></li><li id="3e18b1eb-c04c-4c76-bba6-28e2298ac5a5"><strong>CLI :</strong> Command Line Interface  <a href="#3e18b1eb-c04c-4c76-bba6-28e2298ac5a5-link" aria-label="Aller à la note de bas de page 10">↩︎</a></li></ol>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>WIN &#8211; ADDS &#038; Temporary Group Membership</title>
		<link>https://erwanguillemard.com/win-adds-temporary-group-membership/</link>
		
		<dc:creator><![CDATA[Erwan Guillemard]]></dc:creator>
		<pubDate>Sat, 04 Apr 2026 14:50:00 +0000</pubDate>
				<category><![CDATA[Sécurité]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[ADDS]]></category>
		<category><![CDATA[Securité]]></category>
		<guid isPermaLink="false">https://erwanguillemard.com/?p=3327</guid>

					<description><![CDATA[Il n&#8217;est jamais trop tard pour parler de sécurité et de découvrir des fonctionnalités existantes sur lesquelles je suis passé allégrement à côté et ce depuis 2016&#8230; Comme quoi, il n&#8217;est jamais trop tard. Alors de quel mécanisme de sécurité vais-je aborder ? Dans l&#8217;ère du temps, nous parlons sans cesse de PAM, PIM, ZTNA,...]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Il n&rsquo;est jamais trop tard pour parler de sécurité et de découvrir des fonctionnalités existantes sur lesquelles je suis passé allégrement à côté et ce depuis 2016&#8230; Comme quoi, il n&rsquo;est jamais trop tard.</p>



<p class="has-text-align-center wp-block-paragraph"><strong>Alors de quel mécanisme de sécurité vais-je aborder ? </strong></p>



<p class="wp-block-paragraph">Dans l&rsquo;ère du temps, nous parlons sans cesse de PAM<sup data-fn="ec10b2ae-5ea1-491a-a70e-30a705e606ba" class="fn"><a href="#ec10b2ae-5ea1-491a-a70e-30a705e606ba" id="ec10b2ae-5ea1-491a-a70e-30a705e606ba-link">1</a></sup>, PIM<sup data-fn="44bed6e4-dd83-4e4d-a36d-3d5b0d5e1df7" class="fn"><a href="#44bed6e4-dd83-4e4d-a36d-3d5b0d5e1df7" id="44bed6e4-dd83-4e4d-a36d-3d5b0d5e1df7-link">2</a></sup>, ZTNA<sup data-fn="a7f26285-202f-4abc-8fbe-495c821aa98b" class="fn"><a href="#a7f26285-202f-4abc-8fbe-495c821aa98b" id="a7f26285-202f-4abc-8fbe-495c821aa98b-link">3</a></sup>, termes qui jusqu&rsquo;il y a quelques années étaient obscurs et commençaient tous justes à émerger. Si aujourd&rsquo;hui ces termes sont incontournables, je m&rsquo;interroge à implémenter ces derniers dans un environnement OnPremise (pour ne pas dire mon environnement) en tenant compte :</p>



<ul class="wp-block-list">
<li>Du modèle de tiering de l&rsquo;infrastructure</li>



<li>De la segmentation en place des rôles et permissions</li>



<li>Du durcissement de sécurité</li>
</ul>



<p class="wp-block-paragraph">Toutefois et encore une fois, comme le disait un ancien collègue la sécurité ce n&rsquo;est pas pratique et je souhaite mettre en place une certaine souplesse à certains comptes utilisateurs bien identifiés.</p>



<p class="has-text-align-center wp-block-paragraph"><a href="https://www.youtube.com/watch?v=IOtfbXAGKG4&amp;list=RDIOtfbXAGKG4&amp;start_radio=1">Pif, PAM, Pouf, Je suis informaticien ; Pif, PAM, Pouf ça c&rsquo;est vraiment trop bien !</a></p>



<p class="wp-block-paragraph">Donc me voilà parti pour l&rsquo;étude et l&rsquo;implémentation d&rsquo;une des fonctionnalités PAM fournit par Windows, l&rsquo;appartenance temporaire à un groupe ou Temporary Group Membership (TGM<sup data-fn="8172a65b-8801-4743-896d-7be205dc4dea" class="fn"><a href="#8172a65b-8801-4743-896d-7be205dc4dea" id="8172a65b-8801-4743-896d-7be205dc4dea-link">4</a></sup>).</p>





<h2 class="wp-block-heading">Avant-Propos</h2>



<p class="wp-block-paragraph">Je pars du principe que nous avons un environnement Windows avec un contrôleur ADDS<sup data-fn="329a3ad9-bad6-4ee9-8018-4f04b6a0ce09" class="fn"><a href="#329a3ad9-bad6-4ee9-8018-4f04b6a0ce09" id="329a3ad9-bad6-4ee9-8018-4f04b6a0ce09-link">5</a></sup>. Ce dernier est OnPremise est non hybride (pas de jonction avec AAD<sup data-fn="66200fbf-59c4-4470-8c5f-4a5d63bd91a8" class="fn"><a href="#66200fbf-59c4-4470-8c5f-4a5d63bd91a8" id="66200fbf-59c4-4470-8c5f-4a5d63bd91a8-link">6</a></sup>).</p>



<p class="wp-block-paragraph">Notre architecture se base sur la segmentation en tiering de notre SI<sup data-fn="b2c40b43-9f6f-4d0d-9f38-135df62b4c9b" class="fn"><a href="#b2c40b43-9f6f-4d0d-9f38-135df62b4c9b" id="b2c40b43-9f6f-4d0d-9f38-135df62b4c9b-link">7</a></sup> et notre ADDS est durci selon les préconisations de l&rsquo;ANSSI<sup data-fn="1b7dbd0d-2d64-4802-83f8-a9c929f472c5" class="fn"><a href="#1b7dbd0d-2d64-4802-83f8-a9c929f472c5" id="1b7dbd0d-2d64-4802-83f8-a9c929f472c5-link">8</a></sup>.</p>



<p class="wp-block-paragraph">L&rsquo;objectif que je me fixe est donc de mettre en place la fonctionnalité d&rsquo;attribution de droit d&rsquo;administration temporairement à un utilisateur sans à avoir de :</p>



<ul class="wp-block-list">
<li>Créer un compte d&rsquo;administration dédié à un usage ponctuel</li>



<li>D&rsquo;attribuer les droits d&rsquo;administration (domaine ou local) permanent</li>
</ul>



<p class="wp-block-paragraph">Comme d&rsquo;accoutumé (car nous ne changeons pas les bonnes vieilles habitudes) l&rsquo;environnement Windows sera durci selon les bonnes pratiques et j&rsquo;utiliserai mes deux contrôleurs de domaine 2025 en CORE.</p>



<h2 class="wp-block-heading">Prérequis</h2>



<ul class="wp-block-list">
<li><strong>SE :</strong>
<ul class="wp-block-list">
<li>Windows Server : 2k16 et version ultérieures</li>
</ul>
</li>



<li><strong>Apps :</strong>
<ul class="wp-block-list">
<li>ADDS</li>
</ul>
</li>



<li><strong>Autres :</strong>
<ul class="wp-block-list">
<li>Non applicable</li>
</ul>
</li>
</ul>



<h2 class="wp-block-heading">Théorie</h2>



<p class="wp-block-paragraph">Il est important de comprendre comment fonctionne et ce qu&rsquo;apporte l&rsquo;ajout de la fonctionnalité « Privileged Access Management Feature ».</p>



<p class="wp-block-paragraph">Il est impératif et primordial que l&rsquo;ensemble des serveurs AD soit <mark style="background-color:rgba(0, 0, 0, 0);color:#ff0000" class="has-inline-color"><span style="text-decoration: underline;">au minima en version WS 2k16</span></mark> et donc que le schéma de la forêt soit en version 2016.</p>



<p class="wp-block-paragraph">Au vu des derniers propos énoncés, nous pouvons nous douter que nous allons altérer le schéma de notre AD. Ce qui est implicite (mais enfonçons une porte ouverte), l&rsquo;installation de cette fonctionnalité sera irréversible (oui c&rsquo;est une extension du schéma&#8230; La base j&rsquo;en encore envie d&rsquo;écrire. Oups c&rsquo;est fait).</p>



<h3 class="wp-block-heading">Extension du schéma Active Directory</h3>



<p class="wp-block-paragraph">Je juge important de savoir ce qui va être ajouté. C&rsquo;est pourquoi une sous partie va être nécessaire pour regarder plus en détail la liste des nouveaux objets et attributs.</p>



<p class="wp-block-paragraph">La liste n&rsquo;est pas longue. Toutefois il convient de rappeler que « ce n&rsquo;est pas le nombre d&rsquo;objet qui fait la force » mais leur usage.</p>



<div class="wp-block-kadence-accordion alignnone"><div class="kt-accordion-wrap kt-accordion-id3327_85f65d-fd kt-accordion-has-4-panes kt-active-pane-0 kt-accordion-block kt-pane-header-alignment-left kt-accodion-icon-style-basic kt-accodion-icon-side-right" style="max-width:none"><div class="kt-accordion-inner-wrap" data-allow-multiple-open="false" data-start-open="none">
<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-1 kt-pane3327_72b917-7f"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Objets</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">L&rsquo;un des objets centraux de PAM est l&rsquo;object <strong>msDS-ShadowPrincipal</strong>. Son rôle représente un principal de sécurité fantôme qui sert notamment de jonction temporaire entre un utilisateur ou groupe à un groupe privilégié.</p>



<p class="wp-block-paragraph">Le second objet est un container <strong>msDS-ShadowPrincipalContainer</strong>. Ce dernier va contenir les objets de type msDS-ShadowPrincipal et garantir une organisation de la configuration PAM.</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-2 kt-pane3327_bbbea9-ea"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Attributs</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">Nous distinguons deux types d&rsquo;attributs. Les attributs spécifiques propres à PAM et les attributs étendus.</p>



<ul class="wp-block-list">
<li><strong><span style="text-decoration: underline;">msDS-ShadowPrincipalSid :</span></strong> De type SID, ce dernier permet de prendre le SID<sup data-fn="4efd3a4f-04e4-49de-8f24-1f8166178ee7" class="fn"><a href="#4efd3a4f-04e4-49de-8f24-1f8166178ee7" id="4efd3a4f-04e4-49de-8f24-1f8166178ee7-link">9</a></sup> du compte utilisateur ou du groupe (externe ou interne) et de créer la jonction d&rsquo;appartenance temporaire. En plus simple, c&rsquo;est ce qui va permettre à notre AD<sup data-fn="190798aa-1ac2-44b6-be35-e16ee5e894f0" class="fn"><a href="#190798aa-1ac2-44b6-be35-e16ee5e894f0" id="190798aa-1ac2-44b6-be35-e16ee5e894f0-link">10</a></sup> de traiter l&rsquo;appartenance temporaire (fantôme) comme un groupe de sécurité à part entière.</li>



<li><strong><span style="text-decoration: underline;">memberTimeToLive : </span></strong>De type integer, ce dernier va prendre en compte la durée du TTL<sup data-fn="e6bbd41f-636e-49b9-ac13-b18007210b46" class="fn"><a href="#e6bbd41f-636e-49b9-ac13-b18007210b46" id="e6bbd41f-636e-49b9-ac13-b18007210b46-link">11</a></sup> en secondes de l&rsquo;appartenance de notre compte utilisateur ou groupe à un autre groupe. Cet attribut fonctionne avec les groupes member et memberOf. Une fois la durée expiré, la suppression est automatique.</li>
</ul>



<p class="wp-block-paragraph">Dans le cas des attributs étendus ces derniers sont déjà présents dans le schéma initial. Néanmoins, ces derniers deviennent d&rsquo;une haute criticité avec l&rsquo;ajout de la fonctionnalité PAM. Pourquoi ? Simplement parce qu&rsquo;il va avoir la capacité de prendre en comptes des valeurs avec TTL.</p>



<p class="wp-block-paragraph">Ceci est vrai pour l&rsquo;attribut member.</p>



<p class="has-text-align-center wp-block-paragraph">member;TTL=3600</p>



<p class="wp-block-paragraph">L&rsquo;attribut memberOf quant à lui va gérer les appartenances temp</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-3 kt-pane3327_89f519-6c"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Droits étendus</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">Du côté des droits étendus (où <em>Extended Rights</em> pour nos amis anglophones) liés au Shadow Principal sont à noter les droits suivants :</p>



<ul class="wp-block-list">
<li><strong>Create msDS-ShadowPrincipal objects</strong></li>



<li><strong>Manage Shadow Principal Membership</strong></li>
</ul>



<p class="wp-block-paragraph">Ces deux extensions sont relativement importantes puisqu&rsquo;elles permettent de générer des flux d&rsquo;approbation (Approbation Workflows), les scripts d&rsquo;automatisations et le MIM<sup data-fn="e9681cdd-0dac-4c25-a6dd-b2b28e9fe052" class="fn"><a href="#e9681cdd-0dac-4c25-a6dd-b2b28e9fe052" id="e9681cdd-0dac-4c25-a6dd-b2b28e9fe052-link">12</a></sup> PAM.</p>



<p class="has-text-align-center wp-block-paragraph"><a href="https://www.youtube.com/watch?v=arXrc2UqHFM">Barrez vous ! Cons de mimes !</a></p>



<p class="wp-block-paragraph">Attention, il est important de dissocier deux points bien précis concernant MIM et PIM<sup data-fn="504a3fd7-1971-42ff-a3b1-99c39c72cfbc" class="fn"><a href="#504a3fd7-1971-42ff-a3b1-99c39c72cfbc" id="504a3fd7-1971-42ff-a3b1-99c39c72cfbc-link">13</a></sup>. MIM pour Microsoft Identity Manager et un composant OnPremise qui n&rsquo;a absolument rien à voir avec PIM du cloud Azure.</p>



<p class="wp-block-paragraph"></p>
</div></div></div>
</div></div></div>



<p class="wp-block-paragraph"></p>



<p class="has-text-align-center wp-block-paragraph">Et avec tous les points, quand est-il des risques ? Oh quasi rien (#MDR)</p>



<h3 class="wp-block-heading">Risques</h3>



<div class="wp-block-kadence-accordion alignnone"><div class="kt-accordion-wrap kt-accordion-id3327_47471e-43 kt-accordion-has-6-panes kt-active-pane-0 kt-accordion-block kt-pane-header-alignment-left kt-accodion-icon-style-basic kt-accodion-icon-side-right" style="max-width:none"><div class="kt-accordion-inner-wrap" data-allow-multiple-open="false" data-start-open="none">
<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-1 kt-pane3327_88f8c1-db"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Structurels</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">L&rsquo;un des premiers risques seraient lors du déploiement de la fonctionnalité. Il est important de bien prendre en compte le côté irréversible de l&rsquo;opération. Je recommanderai de vérifier en amont l&rsquo;état de santé des DCs et de la topologie souhaitée. L&rsquo;objectif étant de ne pas se coltiner une dette technique des familles à la suite d&rsquo;une mauvaise conception.</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-2 kt-pane3327_20140b-43"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Délégations</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<figure class="wp-block-table aligncenter"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td>Attention à la délégation sur notre container (CN=Shadow Principal Configuration). Si ces derniers sont trop larges un type comme Waldo peut se définir Admin du Domain en créant un ShadowPrincipal. Et hop ! Une escalade invisible&#8230;</td><td><img loading="lazy" decoding="async" width="850" height="1801" class="wp-image-3380" style="width: 850px;" src="https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_000_Odlaw.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_000_Odlaw.jpg 253w, https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_000_Odlaw-142x300.jpg 142w" sizes="auto, (max-width: 850px) 100vw, 850px" /></td></tr></tbody></table></figure>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-3 kt-pane3327_39200c-8b"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Sécurités</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">Continuons de parler d&rsquo;escalade (<a href="https://youtube.com/shorts/wSKFuIuek_o?feature=share">perso, moi c&rsquo;est le bloc jusqu&rsquo;à ce que je ni**e deux ménisques</a>), le risque d&rsquo;une escalade furtive et temporaire&#8230; </p>



<p class="wp-block-paragraph">Les mécanismes PAM octroyant des droits temporaires, l&rsquo;usage d&rsquo;un compte admin temporaire serait peu visibles dans les journaux d&rsquo;audit et sont souvent peu, voire mal surveillés. Ainsi, un attaquant peut devenir Admin du Domain pour 1 heure réaliser une opération de type DCsync plus la création d&rsquo;une backdoor et ce je la jouer à la <a href="https://www.youtube.com/watch?v=DGpYL-0hyic">David Copperfield</a>&#8230;</p>



<p class="wp-block-paragraph">Une attaque directe par ShadowPrincipals à travers un compte compromis ayant les droits PAM. De cette manière, notre Charlie ou Waldo peut créer un ShadowPrincipal ajoutant un TTL à un groupe d&rsquo;administration (Tiers 0) sans à avoir besoin de modifier directement le groupe. Cette méthode permettrait de contourner un grand nombre de mécanisme de sécurité en place.</p>



<p class="wp-block-paragraph">L&rsquo;attaque par SID, le classique des classiques. Comme vu précédemment, l&rsquo;attribut msDS-ShadowPrincipalSid accepte des SID internes et externes (dans le cas de forêt approuvé). Ainsi, une mauvaise gestion des relations d&rsquo;approbations ou la compromission d&rsquo;une forêt externe donnerait automatiquement un accès privilégié au SI local.</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-4 kt-pane3327_a9f58a-e2"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Opérationnels</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">La perte d&rsquo;un accès administrateur qui aurait été délégué sur une mauvaise évaluation de la durée du TTL pourrait être lourd de conséquence. Risque de ne plus être administrateur durant une opération critique nécessitant les droits d&rsquo;administrations par exemple et donc de se retrouver totalement bloqué.</p>



<p class="wp-block-paragraph">Une complexité trop élevée peut également relever d&rsquo;un frein. Cela peut rendre les débogages longs et fastidieux (un peu comme ma b**e&#8230; Très très drôle M&rsquo;sieur&#8230;) ainsi que des comportements inattendus. La pire chose possible reste la mauvaise formation des équipes et le risque d&rsquo;erreurs fréquentes par les équipes de Niveau 0 ou 1.</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-5 kt-pane3327_52f57d-da"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Gouvernances et Humains</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">De la mauvaise formation des équipes relèvent souvent de processus non définis ou totalement ignoré. Ainsi il ne serait pas rare d&rsquo;assigner des TTLs trop longs dans le temps pour avoir la paix (qu&rsquo;est-ce que la sécurité peut être pénible) ou de définir des TTLs trop courts et d&rsquo;enchainer les élévations temporaires.</p>



<p class="has-text-align-center wp-block-paragraph"><strong>Se pose alors la question de « Mais à quoi sert le PAM finalement ? »</strong></p>



<p class="wp-block-paragraph">L&rsquo;excès de confiance et son mauvais usage peut entrainer un faux sentiment de sécurité. Le PAM a été implémenté, nous ne risquons rien. Sauf que les comptes d&rsquo;administrations ne sont pas protégés correctement et dans le cas de compromission d&rsquo;un poste admin&#8230; Je ne fais pas de dessin hein ?</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-6 kt-pane3327_3ee10b-e2"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Audits et Conformités</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">Comme inscrit précédemment, les journaux d&rsquo;évènements sont assez difficiles à identifier et à corréler dans le cadre d&rsquo;attribution temporaire des droits. Ainsi, l&rsquo;expiration d&rsquo;un TTL n&rsquo;est pas un évènement clair pour l&rsquo;audit. Ce qui peut facilement limiter l&rsquo;analyse et le diagnostic de la part des équipes.</p>



<p class="wp-block-paragraph">C&rsquo;est pourquoi il va être nécessaire de porter une vigilance particulière sur les événements suivants :</p>



<figure class="wp-block-table aligncenter"><table class="has-fixed-layout"><tbody><tr><td class="has-text-align-center" data-align="center"><strong>Event ID</strong></td><td><strong>Description / Rôles / Types</strong></td></tr><tr><td class="has-text-align-center" data-align="center">4728</td><td>Ajout à un groupe global</td></tr><tr><td class="has-text-align-center" data-align="center">4732</td><td>Ajout à un groupe local</td></tr><tr><td class="has-text-align-center" data-align="center">4756</td><td>Ajout à un groupe universel</td></tr><tr><td class="has-text-align-center" data-align="center">4729</td><td>Expiration ou Suppression à un groupe global</td></tr><tr><td class="has-text-align-center" data-align="center">4733</td><td>Expiration ou Suppression à un groupe local</td></tr><tr><td class="has-text-align-center" data-align="center">4757</td><td>Expiration ou Suppression à un groupe universel</td></tr><tr><td class="has-text-align-center" data-align="center">5137</td><td>Création d&rsquo;un objet</td></tr><tr><td class="has-text-align-center" data-align="center">5136</td><td>Modification d&rsquo;un objet</td></tr><tr><td class="has-text-align-center" data-align="center">5141</td><td>Suppression d&rsquo;un objet</td></tr><tr><td class="has-text-align-center" data-align="center">4672</td><td>Attribution de privilège élevés</td></tr><tr><td class="has-text-align-center" data-align="center">4624</td><td>Logon d&rsquo;un compte ayant des droits d&rsquo;administration</td></tr><tr><td class="has-text-align-center" data-align="center">4634</td><td>Logoff d&rsquo;un compte ayant des droits d&rsquo;administration</td></tr><tr><td class="has-text-align-center" data-align="center">4648</td><td>Logon explicite d&rsquo;un compte ayant des droits d&rsquo;administration</td></tr><tr><td class="has-text-align-center" data-align="center">4662</td><td>Accès d&rsquo;objets AD sensibles</td></tr><tr><td class="has-text-align-center" data-align="center">4719</td><td>Modification audit policy</td></tr><tr><td class="has-text-align-center" data-align="center">1102</td><td>Effacement des journaux</td></tr><tr><td class="has-text-align-center" data-align="center">4768/4769</td><td>Kerberos (corrélation des TTLs)</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">A cela s&rsquo;ajoute les diverses solutions du marché qui viennent auditer la santé des SIs et notamment celui des AD. Ces derniers ne prennent pas en compte l&rsquo;attribut <strong>member;TTL</strong> et ShadowPrincipal. Les SIEMs<sup data-fn="a7416798-8244-4996-ba17-b6cb7ce255a7" class="fn"><a href="#a7416798-8244-4996-ba17-b6cb7ce255a7" id="a7416798-8244-4996-ba17-b6cb7ce255a7-link">14</a></sup> valant paroles d&rsquo;évangiles pour les SOCs<sup data-fn="8aee950a-5f95-41a2-9837-c95f7eddccdb" class="fn"><a href="#8aee950a-5f95-41a2-9837-c95f7eddccdb" id="8aee950a-5f95-41a2-9837-c95f7eddccdb-link">15</a></sup>, hop ni une ni deux l&rsquo;informations passent à la trappe.</p>
</div></div></div>
</div></div></div>



<h3 class="wp-block-heading">Recommandations</h3>



<p class="wp-block-paragraph">Les objectifs sont de pouvoir garantir <mark style="background-color:rgba(0, 0, 0, 0);color:#ff0000" class="has-inline-color">AUCUN</mark> accès administrateur permanent afin d&rsquo;obtenir une élévation <em><strong>temporaire</strong></em>, <strong><em>traçable</em></strong> et <strong><em>approuvé</em></strong><em><strong>e</strong></em> (je reviendrai sur ces points dans la partie pratique). Tout cela afin de contenir et maitrisé en cas de compromission l&rsquo;impact ainsi que la surface d&rsquo;exposition.</p>



<p class="wp-block-paragraph">Il est également primordial de comprendre que l&rsquo;usage du PAM au sens windows du terme ne doit servir que pour :</p>



<ul class="wp-block-list">
<li>Admin du Domaine</li>



<li>Administrateur de l&rsquo;entreprise</li>



<li>Administrateur du schéma</li>



<li>Administrateurs DC<sup data-fn="ddad7c45-1971-48e1-9703-8ed11530de1c" class="fn"><a href="#ddad7c45-1971-48e1-9703-8ed11530de1c" id="ddad7c45-1971-48e1-9703-8ed11530de1c-link">16</a></sup></li>



<li>Autres (Comptes ADCS<sup data-fn="fb1718ee-484f-4432-9238-67b667dc952c" class="fn"><a href="#fb1718ee-484f-4432-9238-67b667dc952c" id="fb1718ee-484f-4432-9238-67b667dc952c-link">17</a></sup>, ADFS<sup data-fn="0ec485fd-eeb7-4b54-9765-4384bec2f735" class="fn"><a href="#0ec485fd-eeb7-4b54-9765-4384bec2f735" id="0ec485fd-eeb7-4b54-9765-4384bec2f735-link">18</a></sup>, AAD Connect)</li>
</ul>



<p class="wp-block-paragraph">L&rsquo;usage pour du helpdesk ou pour des serveurs applicatifs doit être proscrit. Ce qui est logique car il revient à Services Informatiques d&rsquo;arbitrer sur les demandes utilisateurs. Néanmoins, pour octroyer des droits d&rsquo;administrateur à un stagiaire ou prestataire ça fonctionne très bien mais encore une fois sous réserve DE certains mécanismes.</p>



<p class="wp-block-paragraph">Cela passe donc par plusieurs axes.</p>



<div class="wp-block-kadence-accordion alignnone"><div class="kt-accordion-wrap kt-accordion-id3327_db657d-6d kt-accordion-has-4-panes kt-active-pane-0 kt-accordion-block kt-pane-header-alignment-left kt-accodion-icon-style-basic kt-accodion-icon-side-right" style="max-width:none"><div class="kt-accordion-inner-wrap" data-allow-multiple-open="false" data-start-open="none">
<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-1 kt-pane3327_d6db93-58"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Architecture</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">Il est important de noter qu&rsquo;avant toutes choses, les serveurs en Tiers 0 ne doivent pas avoir accès à internet en dehors des URLs approuvés (et c&rsquo;est non négociable) et ne doivent contenir QUE les logicielles d&rsquo;architecture et de sécurité (donc vous me virez vos salop***ies de NinjaRMM, LogMeIn, TeamViewer et compagnie).</p>



<ul class="wp-block-list">
<li><strong>URLs des serveurs antivirus (genre TrendMicro etc)</strong></li>



<li><strong>URLs des serveurs de mises à jour Microsoft</strong></li>
</ul>



<p class="wp-block-paragraph">Il va de soi qu&rsquo;étant en Tiers 0, le réseau est isolé et filtré en entrée et sortie. Il n&rsquo;y a pas d&rsquo;administration direct depuis une ressources de Tiers 1 ou 2.</p>



<figure class="wp-block-table aligncenter"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td>Ci-contre, la topologie comme cette dernière devrait l&rsquo;être avec MIM et PAM.<br><br>Le fait d&rsquo;intercaler un server MIM-PAM entre notre ADDS et nos postes clients permettent d&rsquo;user comme dit précédemment des mécanismes d&rsquo;approbations de workflow et d&rsquo;automatisation.<br><br>Le serveur PAM doit être vu comme un bastion dans un réseau isolé de niveau T0.<br></td><td><img decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_005_001_Topologie_MIM.jpg" alt="https://learn.microsoft.com/fr-fr/microsoft-identity-manager/media/mim-topo-multitier.png"></td></tr></tbody></table></figure>



<p class="wp-block-paragraph">La mise place d&rsquo;une telle architecture va être relativement complexe pour moi au vu des ressources disponibles niveau homelab. Je vais donc me passer du serveur intermédiaire MIM PAM.</p>



<p class="wp-block-paragraph">Cette topologie est compatible et valide bien qui moins recommandée quant aux risques accrus relatif à l&rsquo;audit et d&rsquo;un contrôle moins efficace. Cela nous demandera donc en contrepartie d&rsquo;être irréprochable sur les groupes, droits et permissions lié à la délégation. Il sera nécessaire d&rsquo;avoir un regard et contrôle réguliers des scripts Powershell.</p>



<p class="wp-block-paragraph">Donc me concernant je resterai sur mon modèle en place de tiering T0-T1-T2 avec segmentation et contrôle des flux.</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-2 kt-pane3327_d09745-38"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Comptes &amp; IDs</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">Cela me semble logique, mais important de le répéter il ne faut en aucun cas user d&rsquo;authentification interactif et de ne pas utiliser de compte administrateur. Et cherry on the cake, les comptes sont <strong><span style="text-decoration: underline;">TOUJOURS nominatifs</span></strong> (oui même pour vous les éditeurs).</p>



<p class="has-text-align-center wp-block-paragraph">Ainsi, pas de compte admin permanent. 🙂</p>



<p class="wp-block-paragraph">Néanmoins, il est important d&rsquo;avoir des comptes <strong><em>brises-glaces</em></strong> afin de ne pas se couper l&rsquo;herbe sous le pied. Dans la logique il en faudrait minimum deux et selon l&rsquo;ANSSI maximum deux (Décidemment la sécurité c&rsquo;est borderline). Naturellement ces comptes doivent être utilisés en cas d&rsquo;extrême urgence et lors de leurs usages une alerte doit être notifiée.</p>



<p class="wp-block-paragraph">Ce qu&rsquo;il faut comprendre avec PAM, nous ne mettons pas tous nos œufs dans le même panier.</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-3 kt-pane3327_88c420-62"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Nomenclatures des groupes</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">Après ce qui a été dit dans le volet ci-haut, il est nécessaire de définir des GGS<sup data-fn="cd2a7bfd-1365-4cfa-876f-ba0c2c749e01" class="fn"><a href="#cd2a7bfd-1365-4cfa-876f-ba0c2c749e01" id="cd2a7bfd-1365-4cfa-876f-ba0c2c749e01-link">19</a></sup> propres au PAM et d&rsquo;ajouter ces derniers en tant que membre des groupes adéquates.</p>



<p class="wp-block-paragraph">Ainsi pour ma part j&rsquo;userai de la nomenclature suivante :</p>



<p class="has-text-align-center wp-block-paragraph"><strong><em>GGS_PAM_NOM_Elevation</em></strong></p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="883" height="58" src="https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_005_002_GGS-1.jpg" alt="" class="wp-image-3383" srcset="https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_005_002_GGS-1.jpg 883w, https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_005_002_GGS-1-300x20.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_005_002_GGS-1-768x50.jpg 768w" sizes="auto, (max-width: 883px) 100vw, 883px" /></figure>
</div>


<p class="wp-block-paragraph">Simple et efficace.</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-4 kt-pane3327_747b32-20"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Durée de vie</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">Crucial dilemme de la définition de la durée de l&rsquo;élévation de droit temporaire&#8230; Dans la logique une intervention standard est de 30 à 60 minutes en cas de crise nous pourrions définir 120 minutes maximum. Toute durée supérieure à 2 heures et donc interdit.</p>



<p class="has-text-align-center wp-block-paragraph"><strong>Oui mais voilà, je dois faire une opération sensible en tant que SysAdmin sur un SI sur la journée comment je fais ?</strong></p>



<p class="wp-block-paragraph">Excellente question à laquelle je répondrai, nous sommes SysAdmin et donc nous avons l&rsquo;accréditation pour intervenir sur notre SI. Donc je n&rsquo;utiliserai pas PAM mais le système classique de mon compte utilisateur avec élévation de droit avec mon compte administrateur délégué ou super administrateur.</p>



<p class="has-text-align-center wp-block-paragraph"><strong>Mon presta doit faire une montée de version de la solution applicative sur l&rsquo;un de nos serveurs pour la journée soit 7 heures de boulot. Comment tu réponds à ça Monsieur jesaistout ?</strong></p>



<p class="wp-block-paragraph">J&rsquo;ai pour habitude de ne jamais laissé un prestataire intervenir seul sur mon SI ou un SI sous ma responsabilité. Donc je passe ma journée à surveiller d&rsquo;un coin de l&rsquo;œil ces actions. Et dans son cas, je me note de renouveler personnellement toutes les deux heures ça durée de vie. Généralement il n&rsquo;y a pas trop besoin car le prestataire est administrateur local du serveur mais certaines fois il est nécessaire de lui octroyer les droits d&rsquo;administrations du domaine (et ça, ça fait froid dans le dos et en dit long sur la topologie de la solution applicative&#8230;).</p>



<p class="wp-block-paragraph">En complément, il en va de soi mais la tacite reconduction des renouvellements des TTLs et à bannir et encore une fois pas de TTL trop long par ne pas être emme**é toutes les deux minutes.</p>
</div></div></div>
</div></div></div>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Bien je pense qu&rsquo;avec tout ça nous en savons assez pour passer à la pratique non ?</p>



<h2 class="wp-block-heading">Pratique</h2>



<h3 class="wp-block-heading">Installation</h3>



<p class="wp-block-paragraph">Commençons par vérifier le niveau fonctionnel de notre forêt. Nous retrouvons la commande qui devient normalement un automatisme maintenant 🙂</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-9307cdc13f0dcaa88fb837c1ea2d0a1c"><code><strong>&gt; Get-ADForest</strong></code></pre>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td>La preuve à l&rsquo;appui, ci-contre la preuve que pour l&rsquo;attribut ForestMode la valeur Windows2016Forest est présente.<br><br>Donc les prérequis sont atteints.<br><br>Néanmoins, je recommande un petit contrôle de santé de l&rsquo;AD par précaution et actions avant de poursuivre.</td><td><img decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_001_ADForestCheck.jpg" alt=""></td></tr></tbody></table></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Vérifions maintenant si la fonctionnalité est déjà présente ou non sur notre SI.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-8778877ba943af528e8366a29ae16896"><code><strong>&gt; Get-ADOptionalFeature -Filter "name -eq 'Privileged Access Management Feature'"</strong></code></pre>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td>Si la valeur de l&rsquo;attribut EnabledScopes est vide, la fonctionnalité n&rsquo;est pas déployée sur le système. Sinon ba elle l&rsquo;est déjà.<br>Evident Cap&rsquo;taine Obvious !</td><td><img decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_002_CheckFonctionnality-1024x174.jpg" alt=""></td></tr></tbody></table></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Activons alors cette fonctionnalité.</p>



<p class="has-text-align-center wp-block-paragraph"><strong><span style="text-decoration: underline;"><mark style="background-color:rgba(0, 0, 0, 0);color:#fe0000" class="has-inline-color">/!\</mark></span>Attention :</strong> C&rsquo;est à ce moment que l&rsquo;opération devient irréversible. Et deuxième point de vigilance il faut que nous soyons administrateur du schéma temporairement</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color has-small-font-size wp-elements-78803b1ab0a9692af268118c413ff224"><code><strong>&gt; Enable-ADOptionalFeature 'Privileged Access Management Feature' -Scope ForestOrConfigurationSet -Target ronelab.lan</strong></code></pre>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td><img decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_003_AddFonctionnality-1024x89.jpg" alt=""></td><td>Il suffira de valider le déploiement en activant la touche <strong>T</strong> pour <strong>oui pour tout</strong>. Et quelques secondes plus tard, c&rsquo;est terminé.<br><br>Oui tous ces mots pour ça&#8230; Il faut bien faire durer le plaisir non ? &lt;3</td></tr></tbody></table></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Si nous voulons vraiment valider le bon déploiement de notre fonctionnalité, nous pouvons rappeler la seconde commande ci-haut pour vérifier les paramètres d&rsquo;activation de notre scope.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="160" src="https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_004_EnabledFonctionnality-1024x160.jpg" alt="" class="wp-image-3346" srcset="https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_004_EnabledFonctionnality-1024x160.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_004_EnabledFonctionnality-300x47.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_004_EnabledFonctionnality-768x120.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_004_EnabledFonctionnality.jpg 1252w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Nous constatons donc que cette dernière n&rsquo;est plus vide ou $null. Nous pourrions également aller nous balader dans la configuration de notre AD pour trouver notre container.</p>



<p class="wp-block-paragraph">Place à l&rsquo;assignation temporaire des droits 🙂</p>



<h3 class="wp-block-heading">Attribution temporaire</h3>



<p class="has-text-align-center wp-block-paragraph"><strong>Bhin alors comment qui font qu&rsquo;on fait pour assigner des droits temporaires ? </strong></p>



<p class="wp-block-paragraph">De la manière la plus simple du monde gazier, même si au passage il faudrait parler un langage au minima courant plutôt que familier.</p>



<p class="wp-block-paragraph">Pour se faire, un compte admin et un accès à l&rsquo;un de nos DCs en powershell (où au DC en lui même). Je proscris volontairement les RSATs. Pourquoi ? Parce qu&rsquo;un DC doit être le plus isolé possible.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-1c923a27fe61de6a2dc967008764a833"><code><strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-1-color"># Définir notre TTL en secondes en tant que variable de type Timespan</mark>
&gt; $ttl=New-TimeSpan -Hours 1 -Minutes 15
<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-1-color"># Ajouter notre utilisateur temporairement au groupe</mark>
&gt; Add-ADGroupMember -Identity "GGS_PAM_AdminDomain_Elevation" -Members "john.doe" -MemberTimeToLive $ttl</strong></code></pre>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td>Et c&rsquo;est tout. Je vous l&rsquo;avais dit, rien de bien difficile. Un peu de RTFM et de ligne de commande&#8230;<br><br>Ce qui est intéressant c&rsquo;est de s&rsquo;attarder sur les événements de sécurité. Nous retrouvons avec exactitude ce que nous avons énoncé dans la partie théorie concernant le périmètre d&rsquo;audit.</td><td><img loading="lazy" decoding="async" width="550" height="261" class="wp-image-3359" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_006_addMembers.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_006_addMembers.jpg 1882w, https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_006_addMembers-300x142.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_006_addMembers-1024x485.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_006_addMembers-768x364.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_006_addMembers-1536x728.jpg 1536w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Ouai mais alors comment vérifier que notre utilisateur à bien des droits qui court dans le temps ?</p>



<h3 class="wp-block-heading">Vérifications et Analyses</h3>



<p class="wp-block-paragraph">Soyons un peu curieux et penchons nous dans les attributs de notre objets utilisateurs, groupe d&rsquo;élévation (auquel appartient notre utilisateur) et notre groupe final.</p>



<p class="has-text-align-center wp-block-paragraph"><strong><a href="https://www.youtube.com/results?search_query=surprise">No Surprise ! Il n&rsquo;y a rien ! </a></strong></p>



<p class="wp-block-paragraph">Etonnant non ? 🙂 J&rsquo;ai été surpris et j&rsquo;ai donc reparcouru la documentation en long, large diagonale&#8230; Pourquoi pouvons nous obtenir l&rsquo;information en powershell (oups j&rsquo;ai divulgâché la suite) et pas en GUI ?</p>



<p class="wp-block-paragraph">C&rsquo;est là que c&rsquo;est malin. La durée de vie se trouve sur le lien entre l&rsquo;objet utilisateur et le groupe d&rsquo;appartenance (rien sur le groupe cible ce qui est logique). </p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-f4169ec1ae36bdfa3fe430d3a55bfd0a"><code><strong>&gt; Get-ADGroup -Filter * -Properties members -ShowMemberTimeToLive | Where-Object {$_.members -match "TTL*"}</strong></code></pre>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="873" height="198" src="https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_008_checkAdd.jpg" alt="" class="wp-image-3361" srcset="https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_008_checkAdd.jpg 873w, https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_008_checkAdd-300x68.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_008_checkAdd-768x174.jpg 768w" sizes="auto, (max-width: 873px) 100vw, 873px" /></figure>



<p class="wp-block-paragraph">Et donc côté Kerberos qu&rsquo;est ce qui se passe ? La documentation en parle et nous invite à être vigilant sur ces événements (4768 et 4769). Naturellement comme tout ajout à un groupe, il est nécessaire de fermer et d&rsquo;ouvrir de nouveau la session pour prendre en compte le changement.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-bf6cc03e4a8c61ccf265ca581bcd015c"><code><strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-1-color">#Dans le contexte de l'utilisateur</mark>
&gt; klist</strong></code></pre>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td>Nous pouvons donc constater (modulo mon temps d&rsquo;ouverture de session) que notre TGT<sup data-fn="4e769c23-6a40-4b39-bca0-bf97eef5f8f9" class="fn"><a href="#4e769c23-6a40-4b39-bca0-bf97eef5f8f9" id="4e769c23-6a40-4b39-bca0-bf97eef5f8f9-link">20</a></sup> à une durée de 1h11 / 1h15. Ce qui correspond à la durée définit dans notre délégation.<br>Une fois le temps imparti passé, le ticket sera renouvelé et donc les droits temporaires d&rsquo;administrations retirés.</td><td><img decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_009_klistTGT.jpg" alt="" style="width: 550px;"></td></tr></tbody></table></figure>



<p class="wp-block-paragraph"></p>



<p class="has-text-align-center wp-block-paragraph"><strong>Et alors côté journaux d&rsquo;événements qu&rsquo;elles sont les nouvelles ma sœur Anne (#BARBEBLEU) ?</strong></p>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img decoding="async" src="https://upload.wikimedia.org/wikipedia/commons/thumb/8/84/Barbebleue.jpg/500px-Barbebleue.jpg" alt="" style="width:252px;height:auto"/></figure>
</div>


<p class="wp-block-paragraph">J&rsquo;ai envie de dire il suffit de parcourir les journaux d&rsquo;évènement de sécurité.</p>


<div class="kb-gallery-wrap-id-3327_481d40-e1 alignnone wp-block-kadence-advancedgallery"><div class="kb-gallery-ul kb-gallery-non-static kb-gallery-type-slider kb-gallery-id-3327_481d40-e1 kb-gallery-caption-style-bottom-hover kb-gallery-filter-none" data-image-filter="none" data-lightbox-caption="true"><div class="kt-blocks-carousel splide kt-carousel-container-dotstyle-dark kt-carousel-arrowstyle-whiteondark kt-carousel-dotstyle-dark kb-slider-group-arrow kb-slider-arrow-position-center" data-slider-anim-speed="400" data-slider-scroll="1" data-slider-arrows="true" data-slider-fade="true" data-slider-dots="true" data-slider-type="slider" data-slider-hover-pause="false" data-slider-auto="" data-slider-speed="7000" data-show-pause-button="false"><div class="splide__track"><ul class="kt-blocks-carousel-init kb-blocks-slider splide__list"><li class="kb-slide-item kb-gallery-slide-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain kadence-blocks-gallery-intrinsic kb-gallery-image-ratio-inherit kb-has-image-ratio-inherit" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_010_1_AddGroupe.jpg" width="565" height="599" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_010_1_AddGroupe.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_010_1_AddGroupe.jpg" data-id="3367" class="wp-image-3367 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_010_1_AddGroupe.jpg 565w, https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_010_1_AddGroupe-283x300.jpg 283w" sizes="auto, (max-width: 565px) 100vw, 565px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-slide-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain kadence-blocks-gallery-intrinsic kb-gallery-image-ratio-inherit kb-has-image-ratio-inherit" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_010_2_PrivilegeSpeciaux.jpg" width="575" height="566" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_010_2_PrivilegeSpeciaux.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_010_2_PrivilegeSpeciaux.jpg" data-id="3368" class="wp-image-3368 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_010_2_PrivilegeSpeciaux.jpg 575w, https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_010_2_PrivilegeSpeciaux-300x295.jpg 300w" sizes="auto, (max-width: 575px) 100vw, 575px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-slide-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain kadence-blocks-gallery-intrinsic kb-gallery-image-ratio-inherit kb-has-image-ratio-inherit" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_010_3_TGT.jpg" width="566" height="653" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_010_3_TGT.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_010_3_TGT.jpg" data-id="3369" class="wp-image-3369 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_010_3_TGT.jpg 566w, https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_010_3_TGT-260x300.jpg 260w" sizes="auto, (max-width: 566px) 100vw, 566px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-slide-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain kadence-blocks-gallery-intrinsic kb-gallery-image-ratio-inherit kb-has-image-ratio-inherit" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_010_4_opensession.jpg" width="570" height="653" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_010_4_opensession.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_010_4_opensession.jpg" data-id="3370" class="wp-image-3370 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_010_4_opensession.jpg 570w, https://erwanguillemard.com/wp-content/uploads/2026/01/WIN_011_010_4_opensession-262x300.jpg 262w" sizes="auto, (max-width: 570px) 100vw, 570px" /></div></div></figure></div></div></li></ul></div></div></div></div>


<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Bon par contre ne nous cachons pas c&rsquo;est un peu pénible pour ne pas dire casse-cou***e de taper les requêtes powershell. Il faut définir le TTL, connaitre les SAMs des utilisateurs, connaitre les groupes. Bref, source d&rsquo;erreur à gogo. Alors à votre avis en tant que fainéant qu&rsquo;ais je bien pu faire ? 🙂</p>



<h2 class="wp-block-heading">Applications</h2>



<p class="wp-block-paragraph">Oui, cela peut paraitre étrange, mais j&rsquo;ai réalisé une application GRAPHIQUE. Un jour à marquer dans les calendriers <a href="https://www.youtube.com/shorts/VaZ8991q4kY">FOR SURE</a> d&rsquo;une bière blanche !</p>



<p class="wp-block-paragraph">J&rsquo;ai commencé à faire l&rsquo;outil en PS CLI, mais j&rsquo;ai vite trouvé que cela n&rsquo;était pas ergonomique. Alors je me suis demandé pourquoi ne pas réaliser une application en VB.NET ? Flemme monstrueuse. Puis pourquoi pas reprendre une frustration passé du GUI en powershell ?</p>



<p class="wp-block-paragraph">Hé bien voilà, que je réouvre une vieille blessure et alors quel pied put**n ! Je me suis éclaté.</p>



<p class="wp-block-paragraph">Bon il reste quelques points à améliorer :</p>



<ul class="wp-block-list">
<li>Multitâche pour retourner les valeurs de l&rsquo;AD</li>



<li>Ajouter des petites icones sympas</li>



<li>Ajouter un petit About (j&rsquo;ai droit à mes droits d&rsquo;auteur)</li>



<li>Publier l&rsquo;application en certifiant cette dernière</li>



<li>Quelques contrôles d&rsquo;erreurs ? :p</li>
</ul>



<p class="wp-block-paragraph">Bref pas mal de petite chose mais rien de bien méchant.</p>



<h3 class="wp-block-heading">Démonstration</h3>



<p class="has-text-align-center wp-block-paragraph">Rien de telle qu&rsquo;une petite démonstration en images successives pour comprendre, aussi appelé vidéo.</p>



<figure class="wp-block-embed aligncenter is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="WIN   ADDS &amp; Temporary Group Membership" width="720" height="405" src="https://www.youtube.com/embed/oaW9DOBak-w?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<h3 class="wp-block-heading">Github</h3>



<p class="has-text-align-center wp-block-paragraph"><a href="https://github.com/EGuillemard/GS_001-WIN_ADDS_TGM.git">Miaou</a></p>



<h2 class="wp-block-heading">Conclusion</h2>



<p class="wp-block-paragraph">Je mettais attaqué à ce morceau en ne pensant à la base ne pas y consacrer autant de temps. Je me suis rendu compte une nouvelle fois que ce sont les choses les plus simples qui requiert davantage de recul et de réflexion.</p>



<p class="wp-block-paragraph">Je lutte encore entre les bonnes pratiques et recommandations contre mon usage et le périmètre d&rsquo;applicabilité. Dans un certaine mesure <a href="https://www.youtube.com/watch?v=9K-T6h84F7k&amp;list=RD9K-T6h84F7k&amp;start_radio=1">PAM, PAM, PAM je me mettrai bien une cartouche</a> pour ne pas avoir connu plus tôt cette fonctionnalité. Bref, il est nécessaire d&rsquo;étudier avec sérieux son implémentation et son usage.</p>



<p class="wp-block-paragraph">Je n&rsquo;ai volontairement pas abordé le système de délégation des droits AD et sur les GPOs. Mais cela reste un impondérable car tout va reposer sur cette base. Ouvrir d&rsquo;un côté pour mieux fermer de l&rsquo;autre, dilemme cornélien que la sécurité. Et honnêtement si j&rsquo;avais traité ce point, l&rsquo;article serait insoutenable (comme la poitrine de <a href="https://www.youtube.com/watch?v=KjxVQZ-3upU&amp;list=RDKjxVQZ-3upU&amp;start_radio=1">PAMELA dans Alerte à Malibu</a> ; Franchement tu devais la faire celle-là espèce de 90tard, tu ne pouvais pas t&rsquo;en empêcher ?).</p>



<p class="wp-block-paragraph">Je suis conscient qu&rsquo;il reste des axes d&rsquo;améliorations (notamment sur le code). Toutefois, je pense que si suite il doit y avoir cela plus sur PIM ce qui ouvrira la voie vers l&rsquo;environnement Azure.</p>



<p class="wp-block-paragraph">Le mot de la fin :</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><em>Si je PAM sur PAMELLA ? J&rsquo;offre un CADEAU en infogérance ? Malheureusement vous ne pouvez pas Jean-Pat il y a une « couille dehors » en diagonale. Vous retournez en case magouille. Un partout PAM au centre&#8230;</em></p>
<cite>Erwan GUILLEMARD</cite></blockquote>



<h2 class="wp-block-heading">Sources</h2>



<ul class="wp-block-list">
<li><a href="https://learn.microsoft.com/fr-fr/windows-server/get-started/whats-new-in-windows-server-2016#security-and-assurance">Microsoft : Fonctionnalités WS 2k16</a></li>



<li><a href="https://learn.microsoft.com/fr-fr/microsoft-identity-manager/pam/privileged-identity-management-for-active-directory-domain-services">Microsoft : PAM</a></li>



<li><a href="https://learn.microsoft.com/fr-fr/openspecs/windows_protocols/ms-adsc/5e4a3007-10de-479e-b0a4-3a96271e2640">Microsoft : Class ShadowPrincipal</a></li>



<li><a href="https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-adsc/3ebfa3c1-ad62-4930-852d-2fdc26f72de2">Microsoft : Class Container ShadowPrincipal</a></li>
</ul>


<ol class="wp-block-footnotes"><li id="ec10b2ae-5ea1-491a-a70e-30a705e606ba"><strong>PAM :</strong> Privilege Access Manager <a href="#ec10b2ae-5ea1-491a-a70e-30a705e606ba-link" aria-label="Aller à la note de bas de page 1">↩︎</a></li><li id="44bed6e4-dd83-4e4d-a36d-3d5b0d5e1df7"><strong>PIM :</strong> Privilege Identity Manager <a href="#44bed6e4-dd83-4e4d-a36d-3d5b0d5e1df7-link" aria-label="Aller à la note de bas de page 2">↩︎</a></li><li id="a7f26285-202f-4abc-8fbe-495c821aa98b"><strong>ZTNA :</strong> Zero Trust Network Access <a href="#a7f26285-202f-4abc-8fbe-495c821aa98b-link" aria-label="Aller à la note de bas de page 3">↩︎</a></li><li id="8172a65b-8801-4743-896d-7be205dc4dea"><strong>TGM :</strong> Temporary Group Membership <a href="#8172a65b-8801-4743-896d-7be205dc4dea-link" aria-label="Aller à la note de bas de page 4">↩︎</a></li><li id="329a3ad9-bad6-4ee9-8018-4f04b6a0ce09"><strong>ADDS :</strong> Active Directory Domain Service <a href="#329a3ad9-bad6-4ee9-8018-4f04b6a0ce09-link" aria-label="Aller à la note de bas de page 5">↩︎</a></li><li id="66200fbf-59c4-4470-8c5f-4a5d63bd91a8"><strong>AAD :</strong> Azure Active Directory <a href="#66200fbf-59c4-4470-8c5f-4a5d63bd91a8-link" aria-label="Aller à la note de bas de page 6">↩︎</a></li><li id="b2c40b43-9f6f-4d0d-9f38-135df62b4c9b"><strong>SI :</strong> Système d&rsquo;Information <a href="#b2c40b43-9f6f-4d0d-9f38-135df62b4c9b-link" aria-label="Aller à la note de bas de page 7">↩︎</a></li><li id="1b7dbd0d-2d64-4802-83f8-a9c929f472c5"><strong>ANSSI :</strong> Agence Nationale de Sécurité des Systèmes d&rsquo;Informations <a href="#1b7dbd0d-2d64-4802-83f8-a9c929f472c5-link" aria-label="Aller à la note de bas de page 8">↩︎</a></li><li id="4efd3a4f-04e4-49de-8f24-1f8166178ee7"><strong>SID :</strong> Security IDentifier <a href="#4efd3a4f-04e4-49de-8f24-1f8166178ee7-link" aria-label="Aller à la note de bas de page 9">↩︎</a></li><li id="190798aa-1ac2-44b6-be35-e16ee5e894f0"><strong>AD :</strong> Active Directory <a href="#190798aa-1ac2-44b6-be35-e16ee5e894f0-link" aria-label="Aller à la note de bas de page 10">↩︎</a></li><li id="e6bbd41f-636e-49b9-ac13-b18007210b46"><strong>TTL :</strong> TimeToLive <a href="#e6bbd41f-636e-49b9-ac13-b18007210b46-link" aria-label="Aller à la note de bas de page 11">↩︎</a></li><li id="e9681cdd-0dac-4c25-a6dd-b2b28e9fe052"><strong>MIM :</strong> Microsoft Inditity Manager <a href="#e9681cdd-0dac-4c25-a6dd-b2b28e9fe052-link" aria-label="Aller à la note de bas de page 12">↩︎</a></li><li id="504a3fd7-1971-42ff-a3b1-99c39c72cfbc"><strong>PIM :</strong> Privileged Identity Manager <a href="#504a3fd7-1971-42ff-a3b1-99c39c72cfbc-link" aria-label="Aller à la note de bas de page 13">↩︎</a></li><li id="a7416798-8244-4996-ba17-b6cb7ce255a7"><strong>SIEM :</strong> Security Information Event Management <a href="#a7416798-8244-4996-ba17-b6cb7ce255a7-link" aria-label="Aller à la note de bas de page 14">↩︎</a></li><li id="8aee950a-5f95-41a2-9837-c95f7eddccdb"><strong>SOC :</strong> Security Operation Center  <a href="#8aee950a-5f95-41a2-9837-c95f7eddccdb-link" aria-label="Aller à la note de bas de page 15">↩︎</a></li><li id="ddad7c45-1971-48e1-9703-8ed11530de1c"><strong>DC :</strong> Domain Controler <a href="#ddad7c45-1971-48e1-9703-8ed11530de1c-link" aria-label="Aller à la note de bas de page 16">↩︎</a></li><li id="fb1718ee-484f-4432-9238-67b667dc952c"><strong>ADCS :</strong> Active Directory Certificates Services <a href="#fb1718ee-484f-4432-9238-67b667dc952c-link" aria-label="Aller à la note de bas de page 17">↩︎</a></li><li id="0ec485fd-eeb7-4b54-9765-4384bec2f735"><strong>ADFS :</strong> Active Directory Federation Services <a href="#0ec485fd-eeb7-4b54-9765-4384bec2f735-link" aria-label="Aller à la note de bas de page 18">↩︎</a></li><li id="cd2a7bfd-1365-4cfa-876f-ba0c2c749e01"><strong>GGS :</strong> Groupe Global de Sécurité <a href="#cd2a7bfd-1365-4cfa-876f-ba0c2c749e01-link" aria-label="Aller à la note de bas de page 19">↩︎</a></li><li id="4e769c23-6a40-4b39-bca0-bf97eef5f8f9"><strong>TGT :</strong> Ticket Granting Ticket <a href="#4e769c23-6a40-4b39-bca0-bf97eef5f8f9-link" aria-label="Aller à la note de bas de page 20">↩︎</a></li></ol>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>PROJET &#8211; Dream Nebula, VMWare KPI Partie 3 : Démonstration</title>
		<link>https://erwanguillemard.com/projet-dream-nebula-vmware-kpi-partie-3-demonstration/</link>
		
		<dc:creator><![CDATA[Erwan Guillemard]]></dc:creator>
		<pubDate>Fri, 06 Feb 2026 10:39:59 +0000</pubDate>
				<category><![CDATA[Applications]]></category>
		<category><![CDATA[Projets]]></category>
		<category><![CDATA[Application]]></category>
		<category><![CDATA[Projet]]></category>
		<category><![CDATA[VEEAMONE]]></category>
		<category><![CDATA[VMWare]]></category>
		<guid isPermaLink="false">https://erwanguillemard.com/?p=3389</guid>

					<description><![CDATA[Partie 2 : Pratique&#60;- PROJET &#8211; Dream Nebula]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="PROJET   Dream Nebula, VMWare KPI" width="720" height="405" src="https://www.youtube.com/embed/B7MJ5z-jees?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td class="has-text-align-center" data-align="center"><a href="https://erwanguillemard.com/projet-dream-nebula-vmware-kpi-partie-1-theorie/">Partie 2 : Pratique<br>&lt;-</a></td><td class="has-text-align-center" data-align="center"><a href="https://erwanguillemard.com/projet-dream-nebula-vmware-kpi/">PROJET &#8211; Dream Nebula</a></td><td class="has-text-align-center" data-align="center"></td></tr></tbody></table></figure>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Apps &#8211; PostgreSQL</title>
		<link>https://erwanguillemard.com/apps-postgresql/</link>
		
		<dc:creator><![CDATA[Erwan Guillemard]]></dc:creator>
		<pubDate>Wed, 05 Nov 2025 21:26:00 +0000</pubDate>
				<category><![CDATA[Applications]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Application]]></category>
		<category><![CDATA[BDD]]></category>
		<guid isPermaLink="false">https://erwanguillemard.com/?p=3247</guid>

					<description><![CDATA[Après les otaries, toujours dans le contexte des animaux je vais me déplacer latéralement vers l&#8217;enclos des éléphants. Alors non je ne vais pas abandonner MariaDB. Ce billet simple et efficace traitera de la SGBD PostgreSQL. Le pourquoi de cet intérêt soudain se justifie par la rupture technologique de nombreux éditeurs du marché vers ce...]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Après les otaries, toujours dans le contexte des animaux je vais me déplacer latéralement vers l&rsquo;enclos des éléphants.</p>



<p class="wp-block-paragraph">Alors non je ne vais pas abandonner MariaDB. Ce billet simple et efficace traitera de la SGBD<sup data-fn="b793e32b-66d6-49b2-ab53-f36b018298f1" class="fn"><a href="#b793e32b-66d6-49b2-ab53-f36b018298f1" id="b793e32b-66d6-49b2-ab53-f36b018298f1-link">1</a></sup> PostgreSQL. Le pourquoi de cet intérêt soudain se justifie par la rupture technologique de nombreux éditeurs du marché vers ce moteur puissant. Ne nous voilons pas la face, ce jour les grands acteurs de BDDs<sup data-fn="393e6df6-2f56-48e8-9d39-7a0fdfff1fe2" class="fn"><a href="#393e6df6-2f56-48e8-9d39-7a0fdfff1fe2" id="393e6df6-2f56-48e8-9d39-7a0fdfff1fe2-link">2</a></sup> proposent des versions communautaires qui sont limités en termes de volumétrie et de fonctionnalité. Pour jouir de l&rsquo;ensemble des fonctionnalités il faut passer à la caisse.</p>



<p class="has-text-align-center wp-block-paragraph"><strong>$$$ Bonjour le bandit manchot $$$</strong></p>



<p class="wp-block-paragraph">Les bases de données étant de plus en plus volumineuse et l&rsquo;évolution que nous utilisateurs nous en faisons facilite auprès de ces mêmes éditeurs la mise à jour de leurs tarifications. C&rsquo;est de bonne guerre (ou pas). Ce « <strong>ou pas</strong> » laisse donc la voie à d&rsquo;autres alternatives. Plus simple, moins complexes et parfois plus puissante en s&rsquo;alignant sur le principe de la philosophie OpenSource.</p>



<p class="has-text-align-center wp-block-paragraph"><strong>Je laisse une version communautaire, tu passes à la caisse si tu veux un service d&rsquo;assistance ou de maintenance. </strong></p>



<p class="has-text-align-left wp-block-paragraph">Il y aura toujours chez certains éditeurs quelques fonctionnalités en moins. Toutefois, je pense que c&rsquo;est dans cette approche et la bonne et je réfléchis à adopter le même principe dans un projet de vie d&rsquo;une plus grande dimension.</p>



<p class="wp-block-paragraph">Bref, après cette <a href="https://www.youtube.com/watch?v=k7U4EfFltX4&amp;list=RDk7U4EfFltX4&amp;start_radio=1">marche de l&rsquo;éléphant</a> (sans prendre de LSD<sup data-fn="400bfed0-8737-41bd-8083-b5ec5af14458" class="fn"><a href="#400bfed0-8737-41bd-8083-b5ec5af14458" id="400bfed0-8737-41bd-8083-b5ec5af14458-link">3</a></sup> ou autres acides). Je me fais un petit guide sur PostreSQL 🙂</p>





<h2 class="wp-block-heading">Avant-Propos</h2>



<p class="wp-block-paragraph">Il me semble important une nouvelle fois de préciser que ce billet portera sur le déploiement d&rsquo;un environnement PostgreSQL dans sa dernière version stable à ce jour (release 18 en ce mois de grace Octobre 2025). Sur Windows, le déploiement ne m&rsquo;intéresse pas des masses. Par contre sur un système GNU/LINUX, j&rsquo;écris un <mark style="background-color:rgba(0, 0, 0, 0);color:#ff0000" class="has-inline-color"><strong><em><span style="text-decoration: underline;">OUI</span></em></strong> </mark>majuscule (gras, italique, souligné rouge !).</p>



<p class="wp-block-paragraph">Bien que les chiffres ne soient pas réellement suivis, PostgreSQL estime la part d&rsquo;environnement de production d&rsquo;environ (<a href="https://www.postgresql.org/community/survey/50-what-operating-system-is-your-primarylargest-production-postgresql-database-running-on">lien</a>) :</p>



<ul class="wp-block-list">
<li>52 % l&rsquo;usage sur les systèmes GNU/LINUX</li>



<li>23% l&rsquo;usage sur les systèmes Windows</li>
</ul>



<p class="wp-block-paragraph">La raison de mon choix est que nous retrouvons un grand nombre d&rsquo;appliance qui utilise PostgreSQL dans des environnements GNU/UNIX. Donc en tant que SysAdmin il faut bien savoir se positionner 🙂 (franchement, quelle remarque de me*de&#8230;).</p>



<p class="wp-block-paragraph">Je considère que l&rsquo;environnement sera durci selon les recommandations de l&rsquo;ANSSI<sup data-fn="172c5b99-4041-4446-85b6-d02e927f1b6e" class="fn"><a href="#172c5b99-4041-4446-85b6-d02e927f1b6e" id="172c5b99-4041-4446-85b6-d02e927f1b6e-link">4</a></sup> concernant les systèmes GNU/LINUX et comme d&rsquo;accoutumé, je pars sur ma distribution RHEL favorite RockyLinux.</p>



<h2 class="wp-block-heading">Prérequis</h2>



<ul class="wp-block-list">
<li><strong>SE :</strong>
<ul class="wp-block-list">
<li>Rocky Linux 9.4 et version ultérieures</li>
</ul>
</li>



<li><strong>Apps :&nbsp;</strong>
<ul class="wp-block-list">
<li>PostgreSQL 18.4</li>
</ul>
</li>



<li><strong>Autres :</strong>
<ul class="wp-block-list">
<li>Non applicable</li>
</ul>
</li>
</ul>



<h2 class="wp-block-heading">Théorie</h2>



<p class="wp-block-paragraph">L&rsquo;implémentation d&rsquo;un SGBD passe forcément par une réflexion de sa topologie. Nous ne balançons pas une application 1-tiers, on essaie à minima d&rsquo;adopter une architecture 2-Tiers. Soit 1 serveur Frontend et 1 serveur Backend.</p>



<p class="wp-block-paragraph">Pour des raisons qui sont évidentes (enfonçage de porte ouverte) une application publiée ne doit pas héberger la BDD. L&rsquo;application doit être en DMZ<sup data-fn="146573c3-30d5-479a-b375-824245002261" class="fn"><a href="#146573c3-30d5-479a-b375-824245002261" id="146573c3-30d5-479a-b375-824245002261-link">5</a></sup> et la BDD dans une autres bulles avec un contrôle des flux entrants et sortants interlans.</p>



<p class="has-text-align-center wp-block-paragraph"><strong>M&rsquo;sieur? Et pour l&rsquo;identification des flux ? Pour l&rsquo;attribution des ressources ? Comment on fait ?</strong></p>



<p class="wp-block-paragraph">Donnez moi un <strong>R</strong>, un <strong>T</strong>, un <strong>F</strong> et un <strong>M</strong>&#8230; <strong>RTFM</strong><sup data-fn="8cf51c44-be31-4dbd-91c3-7dfca8006d40" class="fn"><a href="#8cf51c44-be31-4dbd-91c3-7dfca8006d40" id="8cf51c44-be31-4dbd-91c3-7dfca8006d40-link">6</a></sup> ! Il suffit encore une fois d&rsquo;avoir le courage de se palucher le wiki de l&rsquo;éditeur applicatif. Un peu d&rsquo;huile de coude n&rsquo;a jamais fait de mal.</p>



<p class="wp-block-paragraph">Une fois la topologie bien pensée, passons à l&rsquo;architecture de notre serveur BDD.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td>Comme tout SGBD déployé il convient au minima d&rsquo;implémenter la topologie ci-contre. Soit, un disque dédié au système UNIQUEMENT. Un disque dédié au stockage des données de notre SGBD et en dernier lieu un disque dédié au dump de nos BDDs avec une périodicité définie.<br><br>J&rsquo;ajouterai également un quatrième disque quant aux journaux de la BDDs et les journaux de transaction (les fameux transaction logs). Toutefois, ayant une petite infrastructure, je m&rsquo;octroie le luxe de laisser ces derniers dans le /var/log.</td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="408" class="wp-image-3251" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2025/10/APP_011_001_Macro.jpg" alt=""></td></tr></tbody></table></figure>



<p class="wp-block-paragraph"></p>



<h4 class="wp-block-heading">Hardware Requirements</h4>



<p class="wp-block-paragraph">Niveau des ressources là c&rsquo;est une autre histoire&#8230; Si la documentation officielle nous communique les ressources et interopérabilités avec les dépendances tierces, je n&rsquo;ai malheureusement pas trouvé d&rsquo;informations sur les ressources matérielles. Dans un sens logique car cela va dépendre de ce que nous souhaitons traiter comme données etc.</p>



<p class="wp-block-paragraph">J&rsquo;ai donc décidé d&rsquo;appliquer de mon plein gré et non sous la contrainte de calquer les recommandations MariaDB (<a href="https://mariadb.com/docs/analytics/mariadb-columnstore/management/deployment/columnstore-minimum-hardware-specification">lien</a>). Toutefois, cela fait un peu beaucoup pour moi&#8230;</p>



<p class="wp-block-paragraph">Je partirai donc pour un minimum <strong>2 vCPU</strong> et <strong>4 Gio</strong> de <strong>RAM</strong>. Dans l&rsquo;idéal, je serai je pense sur du <strong>4 vCPU</strong> et <strong>8 Gio</strong> de RAM. Comme écrit plus haut, tout dépendra de ce que notre application va consommer en termes de traitement. Il faudra alors <em>raisonner en bon père de famille</em> (spéciale dédicasse) et ajuster les ressources afin d&rsquo;éviter la sur ou sous allocation.</p>



<p class="wp-block-paragraph">Côté réseau, la documentation nous indique que le port <strong>5432/tcp</strong> est le port de communication par défaut. Surprise, nous pouvons changer le port dans le fichier de configuration&#8230;</p>



<p class="wp-block-paragraph">Je pense qu&rsquo;avec le peu de base énoncée, nous pouvons passer à la pratique.</p>



<h2 class="wp-block-heading">Pratique</h2>



<p class="wp-block-paragraph">Un dernier point pour faire une magnifique transition entre la théorie et cette partie. Il est à noter que les dépôts officiels des distributions contiennent une version de la solution PostgreSQL. Toutefois, il ne s&rsquo;agit généralement pas de la dernière version. Il est recommandé d&rsquo;ajouter le dépôt de l&rsquo;éditeur et de ne pas utiliser le dépôt système pour PostgreSQL.</p>



<h3 class="wp-block-heading">Installation</h3>



<p class="wp-block-paragraph">Franchement, je trouve là la démarche super-mega overcool de proposer un webwizard pour définir comment déployer PostgreSQL selon les différents OS<sup data-fn="93299765-13f1-4d26-b6e1-157c6dc967ca" class="fn"><a href="#93299765-13f1-4d26-b6e1-157c6dc967ca" id="93299765-13f1-4d26-b6e1-157c6dc967ca-link">7</a></sup> et distributions (nous noterons au passage un excellent usage de la figure de style hyperbolique) (<a href="https://www.postgresql.org/download/">lien</a>).</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="559" src="https://erwanguillemard.com/wp-content/uploads/2025/10/APP_011_002_Install_Wizard-1024x559.jpg" alt="" class="wp-image-3252" srcset="https://erwanguillemard.com/wp-content/uploads/2025/10/APP_011_002_Install_Wizard-1024x559.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2025/10/APP_011_002_Install_Wizard-300x164.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/10/APP_011_002_Install_Wizard-768x419.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2025/10/APP_011_002_Install_Wizard.jpg 1523w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Je ne vais pas copier bêtement le script proposé. Mais reprendre chacune des lignes. Ce que je trouve admirable, c&rsquo;est la simplicité du déploiement. Pas besoin d&rsquo;installer 10k de dépendance en amont et de configurer ces dernières. </p>



<div class="wp-block-kadence-accordion alignnone"><div class="kt-accordion-wrap kt-accordion-id3247_4a47c7-b1 kt-accordion-has-4-panes kt-active-pane-0 kt-accordion-block kt-pane-header-alignment-left kt-accodion-icon-style-basic kt-accodion-icon-side-right" style="max-width:none"><div class="kt-accordion-inner-wrap" data-allow-multiple-open="false" data-start-open="none">
<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-1 kt-pane3247_9174dd-7e"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>1 &#8211; Ajout du repo</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">A partir du lien fournit par le webwizard installer le nouveau repo :</p>



<p class="wp-block-paragraph"></p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-3e11edfbd187fc3db365a2de1d87c0a8"><code>$ sudo dnf install https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm</code></pre>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="374" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_003_001_Install_REPO-1024x374.jpg" alt="" class="wp-image-3256" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_003_001_Install_REPO-1024x374.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_003_001_Install_REPO-300x110.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_003_001_Install_REPO-768x281.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_003_001_Install_REPO-1536x562.jpg 1536w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_003_001_Install_REPO.jpg 1898w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-2 kt-pane3247_e9b6fd-28"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>2 &#8211; Désactivation du package de la source de distribution</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">Comme indiqué précédemment, il convient de désactiver la version de postgreSQL contenu dans le repo par défaut. Ainsi, nous aurons une plus grande flexibilité dans le choix de version de nos composants.</p>



<p class="wp-block-paragraph">A noter que mon système étant durci j&rsquo;ai été contrait de réaliser l&rsquo;opération en tant que root.</p>



<p class="wp-block-paragraph"></p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-70f2c5674e9fe72800367c1d4d6a77f2"><code># dnf -qy module disable postgresql</code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="867" height="611" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_003_002_Install_REPO.jpg" alt="" class="wp-image-3258" style="width:597px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_003_002_Install_REPO.jpg 867w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_003_002_Install_REPO-300x211.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_003_002_Install_REPO-768x541.jpg 768w" sizes="auto, (max-width: 867px) 100vw, 867px" /></figure>
</div></div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-3 kt-pane3247_ded978-9c"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>3 &#8211; Installation du Server PostgreSQL</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">Rien de plus simple, il suffit de faire une petite recherche par précaution puis une installation de notre package.</p>



<p class="wp-block-paragraph"></p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-2e80e318489950533c87033c0281a6a3"><code># dnf search postgresql18-server
# dnf install postgresql18-server</code></pre>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="224" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_003_003_Install_REPO-1024x224.jpg" alt="" class="wp-image-3259" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_003_003_Install_REPO-1024x224.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_003_003_Install_REPO-300x66.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_003_003_Install_REPO-768x168.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_003_003_Install_REPO-1536x336.jpg 1536w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_003_003_Install_REPO.jpg 1904w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-4 kt-pane3247_998fe7-16"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>4 &#8211; Initialisation et démarrage</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">Comme tous SGBDs, il convient d&rsquo;initier la première installation. Puis de s&rsquo;assurer que le service va être lancer automatiquement au démarrage du système en cas de reboot.</p>



<p class="wp-block-paragraph">Pour conclure, le traditionnel démarrage de notre daemon.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-4a134f820aa2ee375752bbdba91dcb4e"><code># /usr/pgsql-18/bin/postgresql-18-setup initdb
# systemctl enable postgresql-18
# systemctl start postgresql-18</code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="89" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_003_004_Install_REPO-1024x89.jpg" alt="" class="wp-image-3260" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_003_004_Install_REPO-1024x89.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_003_004_Install_REPO-300x26.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_003_004_Install_REPO-768x67.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_003_004_Install_REPO.jpg 1432w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="wp-block-paragraph">Pour le fun, une petite vérification 🙂</p>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="368" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_003_005_Install_REPO-1024x368.jpg" alt="" class="wp-image-3261" style="width:665px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_003_005_Install_REPO-1024x368.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_003_005_Install_REPO-300x108.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_003_005_Install_REPO-768x276.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_003_005_Install_REPO.jpg 1512w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div></div></div></div>
</div></div></div>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Notre daemon PostgreSQL étant déployé, j&rsquo;arrive toujours à ce point d&rsquo;application des bonnes pratiques systèmes. C&rsquo;est là que ça peut être délicat si on se plante dans la configuration car cela peut mener à repartir de zéro. D&rsquo;où l&rsquo;importance de lire la documentation encore une fois.</p>



<p class="has-text-align-center wp-block-paragraph"><a href="https://www.youtube.com/watch?v=B4WJk2G9g38">C&rsquo;est qu&rsquo;un éléphant ça trompe énormément !</a></p>



<p class="wp-block-paragraph">Et voilà comment on casse tout 😀</p>



<h3 class="wp-block-heading">Déplacement de la BDD Location</h3>



<p class="wp-block-paragraph">Si nous gardons la topologie mis en place ci-haut, il sera nécessaire de déplacer le répertoire data stocké sur <strong>/var/lib/pgsql/18/data</strong> vers notre répertoire <strong>/mnt/database/postgresql/data</strong> monté sur notre disque <strong>/dev/sdb</strong>.</p>



<p class="wp-block-paragraph">Je ne vais pas mentir, je me suis pris les pieds dans le tapis une fois et j&rsquo;ai dû restaurer ma VM. Toutefois, les étapes ci-dessous sont bien éprouvées et valide.</p>



<div class="wp-block-kadence-accordion alignnone"><div class="kt-accordion-wrap kt-accordion-id3247_981a8d-b1 kt-accordion-has-6-panes kt-active-pane-0 kt-accordion-block kt-pane-header-alignment-left kt-accodion-icon-style-basic kt-accodion-icon-side-right" style="max-width:none"><div class="kt-accordion-inner-wrap" data-allow-multiple-open="false" data-start-open="none">
<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-1 kt-pane3247_3b8c7b-15"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>1 &#8211; Arret du service</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">La base de la base est donc d&rsquo;arrêter le service postgresql :</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-1f8706e1f6978715559ed7a91ef7839e"><code>$ sudo systemctl stop postgresql-18.service
$ sudo systemctl status postgresql-18.service</code></pre>



<p class="wp-block-paragraph">Il est primordiale de s&rsquo;assurer que le service ne tourne plus.</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-2 kt-pane3247_bca34b-7a"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>2 &#8211; Création de l&rsquo;architecture cible</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">Sur notre partition <strong>/dev/sdb1</strong> préalablement configurée et montée sur <strong>/mnt/database</strong>, nous allons créer et définir les droits et permissions pour autoriser notre compte postgres à accéder à ce dernier.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-447885826fb32d8410dc80fb0c19add8"><code>$ sudo mkdir /mnt/database/postgresql
$ sudo mkdir /mnt/database/postgresql/pg_sock
$ sudo mkdir /mnt/database/postgresql/data
$ sudo chown postgres:postgres /mnt/database/postgresql
$ sudo chmod 755 /mnt/database
$ sudo chmod 700 -R /mnt/database/postgresql</code></pre>



<p class="wp-block-paragraph">Mais alors pourquoi 700 ? La base de donnée ainsi que l&rsquo;ensemble des fichiers de ressources doivent être accessible uniquement de l&rsquo;application par sécurité.</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-3 kt-pane3247_ecd500-37"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>3 &#8211; Déplacement des données</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">Comme j&rsquo;ai pris l&rsquo;habitude de faire comme pour MariaDB, je vais copier le contenu du répertoire data puis renommer la source afin d&rsquo;éviter tous dysfonctionnements.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-d167a86f4bff37aaedd56d0ad0b28f24"><code>$ sudo rsync -av /var/lib/pgsql/18/data/ /mnt/database/postgresql/data/
$sudo mv /var/lib/pgsql/18/data /var/lib/pgsql/18/data.ori</code></pre>



<p class="wp-block-paragraph">Une erreur classique lors de l&rsquo;usage de la commande rsync reste l&rsquo;oublie du <strong>/</strong>. Cela entrainera la copie du répertoire et non de son contenu uniquement. En gros, ça va bégayer dans les chemins (../postgresql/data/data/&#8230;).</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-4 kt-pane3247_9e61f4-e4"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>4 &#8211; Modification de la configuration du service</strong> </span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">Le service est configuré pour démarrer le daemon sous <strong>/var/lib/psql/18</strong>. Pour prendre en charge le nouveau chemin, il faut modifier ce dernier. La philosophie et de surcharger la configuration.</p>



<p class="wp-block-paragraph">Créer le répertoire qui va contenir la surcharge de notre daemon psql :</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-5799c527e76b3dd224841f47fcb9af5d"><code>$ sudo mkdir -p /etc/systemd/system/postgresql-18.service.d</code></pre>



<p class="wp-block-paragraph">Créer un fichier de surcharge qui va contenir le chemin du répertoire data :</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-c0124622492296520e59a54ef19baf65"><code>$ sudo tee /etc/systemd/system/postgresql-18.service.d/override.conf &gt; /dev/null &lt;&lt;'EOF'
<strong>&#91;Service]
Environment="PGDATA=/mnt/database/postgresql/data/"
EOF</strong></code></pre>



<p class="wp-block-paragraph">Par acquis de conscience, j&rsquo;aime vérifier que le fichier est bien présent ainsi que le contenu de ce dernier.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-eea78f3bea8eda733c5558b86588ba7e"><code>$ sudo cat /etc/systemd/system/postgresql-18.service.d/override.conf</code></pre>



<p class="wp-block-paragraph">Le daemon &lsquo;system&rsquo; a été altéré (puisque j&rsquo;ai ajouté une configuration) et donc ? Un petit reload des familles pour prendre en compte le changement et zou.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-647d939155d8cb9e3cad7b43f10ba049"><code>$ sudo systemctl daemon-reload</code></pre>



<p class="wp-block-paragraph"></p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-5 kt-pane3247_cfaebc-a8"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>5 &#8211; SELinux</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">Un étape un peu border avec la sécurité (comme un excès de Delirium un jeudi soir pour oublier une semaine compliqué).</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="600" height="600" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_006_000_MoveData.png" alt="" class="wp-image-3270" style="width:180px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_006_000_MoveData.png 600w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_006_000_MoveData-300x300.png 300w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_006_000_MoveData-150x150.png 150w" sizes="auto, (max-width: 600px) 100vw, 600px" /></figure>
</div>


<p class="wp-block-paragraph">Toutefois, il est important de noter un petit point et non des moindres sur notre fichier <strong>/etc/fstab.</strong> Il va être nécessaire d&rsquo;ajouter le contexte sur notre partition et de relabeliser notre point partition.</p>



<p class="wp-block-paragraph">Editons le fichier avec VIM, VI ou NANO puis modifier la ligne comme ci-dessous en ajoutant au niveau des droits <strong><em>defaults,context=system_u:object_r:postgresql_db_t:s0</em></strong></p>



<p class="wp-block-paragraph">Ce qui veut dire en SELinux :</p>



<ul class="wp-block-list">
<li><strong><em>Defaults :</em></strong> Activation des droits standards</li>



<li><strong><em>Context=</em></strong>
<ul class="wp-block-list">
<li><strong><em>system_u </em></strong>: Identité SELinux, sans impact concernant notre SGBD</li>



<li><strong><em>object_r </em></strong>: Rôle d&rsquo;objet de type fichier</li>



<li><strong><em>postgresql_db_t </em></strong>: Match avec le type de données PostgreSQL autorisé par SELinux. Ainsi, SELinux interdit à PostgreSQL d&rsquo;accéder à des fichiers qui ne sont pas dans le contexte.</li>



<li><strong><em>s0 </em></strong>: Le niveau de sécurité par défaut.</li>
</ul>
</li>
</ul>



<p class="wp-block-paragraph">Il sera nécessaire de définir le bon contexte sur notre nouveau répertoire.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-61e8cef06eef9a02ab603be7b4d7da6e"><code>$ sudo semanage fcontext -a -t postgresql_db_t "/mnt/database/postgresql(/.*)?"
$ sudo restorecon -Rv /mnt/database/postgresql/</code></pre>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-6 kt-pane3247_000ea0-1b"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>6 &#8211; Démarrage du service</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">Le moment de vérité.</p>



<p class="has-text-align-center wp-block-paragraph"><strong>Vais je vomir l&rsquo;ensemble de mes bières et commander une nouvelle tournée pour noyer mon échec ou commander une nouvelle tournée pour célébrer le succès de cette opération ? 🙂</strong></p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-d8b07f4b785f3f155bdcd6b81f7a6b46"><code>$ sudo systemctl start postgresql-18
$ sudo systemctl status postgresql-18</code></pre>



<p class="wp-block-paragraph"></p>
</div></div></div>
</div></div></div>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Il faut noter que le service fonctionne. Néanmoins, il convient de se demander si nous pouvons requêter notre BDD à la suite de ce changement.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-8ac2a6e23ab32c55e977a18495a997d8"><code>$ sudo -u postgres psql -c "SELECT version();"</code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="605" height="134" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_006_001_MoveData.jpg" alt="" class="wp-image-3271" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_006_001_MoveData.jpg 605w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_006_001_MoveData-300x66.jpg 300w" sizes="auto, (max-width: 605px) 100vw, 605px" /></figure>
</div>


<p class="wp-block-paragraph">Vérifions également que le chemin du PGDATA a bien été pris en compte.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-9b56dcd5448d18c407b282c364d85d41"><code>$ sudo -u postgres psql -c "SHOW data_directory;"</code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="605" height="94" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_006_002_MoveData.jpg" alt="" class="wp-image-3272" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_006_002_MoveData.jpg 605w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_006_002_MoveData-300x47.jpg 300w" sizes="auto, (max-width: 605px) 100vw, 605px" /></figure>
</div>


<p class="has-text-align-center wp-block-paragraph">Ouf ça fonctionne 🙂</p>



<p class="wp-block-paragraph">Place à l&rsquo;étape suivante ! <a href="https://www.youtube.com/watch?v=zRcRtpgox0U">BA-BA-BAR POM POM POM POM</a></p>



<h3 class="wp-block-heading">Sécurisation &amp; Configuration</h3>



<p class="wp-block-paragraph">Nous revenons encore et toujours au même point. Qui dit données implique la sensibilité de ces dernières. Aujourd&rsquo;hui braquer une banque ne rapporte pas grand-chose. Le rapport bénéfices/risques n&rsquo;est pas bon&#8230; Mais braqué des données, utiliser ces dernières et les revendre apporte un bien meilleur rapport en termes de bénéfices / risques.</p>



<p class="wp-block-paragraph">Donc, je me retrousse les manches car je ne suis pas un manche !</p>



<p class="wp-block-paragraph">Si du côté <strong>MariaDB</strong> il existe le fameux <mark style="background-color:rgba(0, 0, 0, 0);color:#ff0000" class="has-inline-color">mysql_secure_installation</mark>, ce n&rsquo;est malheureusement pas le cas chez <strong>PostgreSQL</strong>.</p>



<p class="wp-block-paragraph">Il se pose alors de dresser un inventaire rapide des points que nous souhaitons sécuriser :</p>



<ol class="wp-block-list">
<li>Mot de passe du compte postgres</li>



<li>Restreindre l&rsquo;accès réseaux</li>



<li>Mettre en place une stratégie d&rsquo;authentification</li>



<li>Utiliser des algorithmes de chiffrement fort</li>



<li>Supprimer les BDDs inutiles</li>



<li>Droits sur les fichiers</li>



<li>SELinux</li>



<li>Firewall embarqué (même si je préfère le terme embedded)</li>



<li>Audit et Journaux d&rsquo;événements</li>
</ol>



<p class="wp-block-paragraph">Ca fait une petite tripoté n&rsquo;est-il pas ? Naturellement, certains des points ci-haut ont déjà été traité lors du déploiement et du changement d&#8217;emplacement de la base de données.</p>



<div class="wp-block-kadence-accordion alignnone"><div class="kt-accordion-wrap kt-accordion-id3247_ac7a8e-1e kt-accordion-has-9-panes kt-active-pane-0 kt-accordion-block kt-pane-header-alignment-left kt-accodion-icon-style-basic kt-accodion-icon-side-right" style="max-width:none"><div class="kt-accordion-inner-wrap" data-allow-multiple-open="false" data-start-open="none">
<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-1 kt-pane3247_c547cc-2a"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>1 &#8211; Password Account DB </strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">Comme pour MariaDB (compte root), l&rsquo;utilisateur postgres ne possède pas de mot de passe. Il convient par sécurité de définir ce dernier afin qu&rsquo;il ne vienne une idée à un individu malveillant (comme un RSSI <sup data-fn="8ee11f8e-018a-4440-a1e7-f35e89fcaa7d" class="fn"><a href="#8ee11f8e-018a-4440-a1e7-f35e89fcaa7d" id="8ee11f8e-018a-4440-a1e7-f35e89fcaa7d-link">8</a></sup>lors d&rsquo;un audit ou pire un SysDBA<sup data-fn="d3ddcc3d-b108-4e68-9df7-2f478eb4d83d" class="fn"><a href="#d3ddcc3d-b108-4e68-9df7-2f478eb4d83d" id="d3ddcc3d-b108-4e68-9df7-2f478eb4d83d-link">9</a></sup>) de mettre sa truffe humide dans notre BDD.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-206bf12b018f671dfb5a3a5538e74534"><code>$ su - postgres
$ psql -c "alter user postgres with password '<strong><mark style="background-color:rgba(0, 0, 0, 0);color:#ff0000" class="has-inline-color">MyP@ssw0rd</mark></strong>'"</code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="181" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_005_001_SECU_postgres_user-1024x181.jpg" alt="" class="wp-image-3276" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_005_001_SECU_postgres_user-1024x181.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_005_001_SECU_postgres_user-300x53.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_005_001_SECU_postgres_user-768x135.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_005_001_SECU_postgres_user.jpg 1435w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="wp-block-paragraph">Il est important de faire un petit <strong><em>clear de l&rsquo;historique</em></strong> de frappe. Un mot de passe en clair c&rsquo;est pas cool. </p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-2 kt-pane3247_7f1d29-93"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>2 &#8211; Network Restrictions</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">Ouvrons le fichier de configuration <strong>/mnt/database/postgresql/data/postgresql.conf</strong>.</p>



<p class="wp-block-paragraph">Attention comme indiqué précédemment, il faudra être authentifié en tant qu&rsquo;utilisateur postgres ou root.</p>



<p class="has-text-align-center wp-block-paragraph">Recherchez la section CONNECTIONS AND AUTHENTIFICATION.</p>



<p class="wp-block-paragraph">Se pose alors la question, depuis où je peux consulter ma BDDs et sur quel port ? Personnellement, le port je le laisse par défaut soit 5432/tcp. Toutefois, la source, il est bien de spécifier le subnet ou les adresses IPs qui sont autorisé à se connecter à notre SGBD. Naturellement, la valeur &lsquo;*&rsquo; est proscrite.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="903" height="295" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_005_002_SecurNetRestriction.jpg" alt="" class="wp-image-3285" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_005_002_SecurNetRestriction.jpg 903w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_005_002_SecurNetRestriction-300x98.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_005_002_SecurNetRestriction-768x251.jpg 768w" sizes="auto, (max-width: 903px) 100vw, 903px" /></figure>
</div>


<p class="wp-block-paragraph">Ce paramétrage va de pair avec la configuration de notre UTM<sup data-fn="5b9359c6-adcf-4f72-9501-604602846dc7" class="fn"><a href="#5b9359c6-adcf-4f72-9501-604602846dc7" id="5b9359c6-adcf-4f72-9501-604602846dc7-link">10</a></sup> embedded (cf le point plus bas).</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-3 kt-pane3247_0e912b-42"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>3 &#8211; Authentification Policies</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">On va changer de fichier. L&rsquo;objectif est de définir <strong>qui</strong> va se connecter à <strong>quoi</strong>, <strong>comment</strong> et depuis<strong> où</strong>.</p>



<p class="wp-block-paragraph">Direction <strong>/mnt/database/postgresql/data/pg_hba.conf</strong></p>



<p class="wp-block-paragraph">La logique de lecture est la suivante TYPE correspond à la nature de l&rsquo;authentification (local? hôte ?) pour quelle DATABASE (all ? replication ? db_test ?) pour quel USER (all ? r-one ?) depuis quelle ADDRESS (127.0.0.1/32 ? 0.0.0.0/0 ? 10.36.16.0/24 ?) et par quel METHOD (peer ? scram-sha-256? MD5?).</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="865" height="465" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_005_002_SECU_postgres_authmethod.jpg" alt="" class="wp-image-3277" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_005_002_SECU_postgres_authmethod.jpg 865w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_005_002_SECU_postgres_authmethod-300x161.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_005_002_SECU_postgres_authmethod-768x413.jpg 768w" sizes="auto, (max-width: 865px) 100vw, 865px" /></figure>
</div>


<p class="wp-block-paragraph">Il est certain qu&rsquo;il faut limiter l&rsquo;usage au maximum du all comme du masque 0.0.0.0/0. Toutefois, il n&rsquo;y a pas de base les paramètres « implicites » de refus des connexions. C&rsquo;est donc à implémenter (dernières lignes de la capture d&rsquo;écran).</p>



<p class="wp-block-paragraph">On sauvegarde, puis on reload le service.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-04f92932758700a31ff7c7cf90098ec9"><code>$ sudo systemctl reload postgresql-18</code></pre>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-4 kt-pane3247_28b64d-f5"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>4 &#8211; Suite de chiffrement</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">Toujours dans le fichier de configuration <strong>/mnt/database/postgresql/data/postgresql.conf</strong>. Attention comme indiqué précédemment, il faudra être authentifié en tant qu&rsquo;utilisateur postgres ou root.</p>



<p class="wp-block-paragraph">Recherchez la section CONNECTIONS AND AUTHENTIFICATION et activez l&rsquo;algorithme de chiffrement <strong>scram-sha-256</strong>. Le <strong>MD5</strong>, nous passons notre tour hein ? Autant allez aux champignons sans capotes, c&rsquo;est du pareil au même.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="861" height="124" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_005_004_SecurAlgo.jpg" alt="" class="wp-image-3284" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_005_004_SecurAlgo.jpg 861w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_005_004_SecurAlgo-300x43.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_005_004_SecurAlgo-768x111.jpg 768w" sizes="auto, (max-width: 861px) 100vw, 861px" /></figure>
</div></div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-5 kt-pane3247_398349-d5"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>5 &#8211; Nettoyage des BDDs inutiles</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">Il est important de lister les bases présentes sur notre SGBD et de supprimer les bases qui ne servent à rien.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-d747d17bea2ce23c46de4de55c118af6"><code>$ su - postgres  -c "\l"
$ psql

postgres=#\l
postgres=# DROP DATABASE NAME_BDD;</code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="300" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_005_005_SecurBDD-1024x300.jpg" alt="" class="wp-image-3283" style="width:672px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_005_005_SecurBDD-1024x300.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_005_005_SecurBDD-300x88.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_005_005_SecurBDD-768x225.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_005_005_SecurBDD.jpg 1278w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="wp-block-paragraph">Attention : Il ne faut en aucun cas supprimer les bases template0 et template1. Ces dernières permettent (pour la 1) de générer les futurs BDDs) et (pour la 0) de regénérer la BDD de modèle.</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-6 kt-pane3247_3f7584-a2"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>6 &#8211; Permissions et ACLs</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">Comme expliqué ci haut et pour des raisons évidentes. L&rsquo;accès aux données doivent être accessible uniquement du compte utilisateur postgres et root. Pas de quoi foutez milles éléphants&#8230;</p>



<p class="wp-block-paragraph">Je glisse toutefois les commandes.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-ec0a5579650dc9a16dc8cbd6a240b2aa"><code>$ sudo chown -R postgres:postgres /mnt/database/postgresql/data
$ sudo chmod 700 /mnt/database/postgresql/data</code></pre>



<p class="wp-block-paragraph"></p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-7 kt-pane3247_596968-8b"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>7 &#8211; SELinux &lt;3</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">Nous retrouvons la commande saisie ci-haut si nous avons modifié le database location.</p>



<p class="wp-block-paragraph">Ainsi nous définissons le contexte de fichier de type <strong>postgresql_db_t </strong>à l&rsquo;ensemble des éléments qui sont situer sous <strong>/mnt/database/postgresql</strong>. Puis on restore le contexte.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-61e8cef06eef9a02ab603be7b4d7da6e"><code>$ sudo semanage fcontext -a -t postgresql_db_t "/mnt/database/postgresql(/.*)?"
$ sudo restorecon -Rv /mnt/database/postgresql/</code></pre>



<p class="wp-block-paragraph"></p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-8 kt-pane3247_481508-49"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>8 &#8211; Firewall</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">Avant c&rsquo;était iptables maintenant c&rsquo;est firewalld ou ufw. Personnellement je reste sur la configuration de firewalld.</p>



<p class="wp-block-paragraph">Il convient d&rsquo;autoriser les flux 5432/tcp dans notre firewall si des connexions se font depuis un autre réseau ou une autre machine.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-f3a79338853f5457c41683c309df7089"><code>$ sudo firewall-cmd --permanent --add-service=postgresql
$ sudo firewall-cmd --reload</code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="916" height="104" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_005_008_SecurFirewall.jpg" alt="" class="wp-image-3278" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_005_008_SecurFirewall.jpg 916w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_005_008_SecurFirewall-300x34.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_005_008_SecurFirewall-768x87.jpg 768w" sizes="auto, (max-width: 916px) 100vw, 916px" /></figure>
</div>


<p class="wp-block-paragraph">Cela étant, il serait également plus précis de filtrer les connexions entrantes sur un réseau ou une adresse ip uniquement sur le port 5432/tcp.</p>



<p class="wp-block-paragraph">J&rsquo;assume cette configuration du fait de mon UTM en amont qui filtre l&rsquo;ensemble des flux inter-lans.</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-9 kt-pane3247_2ab698-4d"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>9 &#8211; Logs &amp; Audits</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">Ouvrons le fichier de configuration <strong>/mnt/database/postgresql/data/postgresql.conf</strong>. Attention comme indiqué précédemment, il faudra être authentifié en tant qu&rsquo;utilisateur postgres ou root.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-363e1d6b3d3216113e190e6c29ea0d2b"><code># vim /mnt/database/postgresql/data/postgresql.conf</code></pre>



<p class="wp-block-paragraph">Se rendre ensuite dans la section REPORTING AND LOGGING. Puis vérifiez que la configuration suivante est active.</p>



<p class="wp-block-paragraph"></p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td>Activation de <strong>logging_collector</strong> sur <strong>on</strong> afin de récupérer les erreurs sous la forme json ou csv.<br><br>L&#8217;emplacement où va être stocké les journaux. Par défaut celui-ci se trouve dans le répertoire log. Il faudra renseigner si l&#8217;emplacement est différent le chemin absolu, le chemin relatif si c&rsquo;est un cluster.<br><strong>log_directory = &lsquo;log&rsquo;</strong><br><br>Le nom du fichier, par défaut ce dernier est sous le format <strong>postgresql-%Y-%m-%d_%H%M%S.log</strong>.<br><strong>log_filename = &lsquo;postgresql-%a.log&rsquo;</strong><br><br>Activer la journalisation pour l&rsquo;ensemble des événements de connexion et de déconnexion.<br><strong>log_connections = on<br>log_disconnections = on</strong><br><br>En guise de traitement des logs, nous choisirons ddl pour avoir les définitions des commandes utilisés. Attention, l&rsquo;usage de all peut être dangereux vis à vis des ressources.<br><strong>log_statement = &lsquo;ddl&rsquo;</strong></td><td><img loading="lazy" decoding="async" width="550" height="598" class="wp-image-3279" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_005_009_LogAudits.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_005_009_LogAudits.jpg 607w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_005_009_LogAudits-276x300.jpg 276w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>
</div></div></div>
</div></div></div>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Une fois les modifications apportées, n&rsquo;oubliez pas que notre serveur PostgreSQL à besoin d&rsquo;être redémarré :</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-98dfa67952528c695eccdaeed06c0a5c"><code>$ sudo systemctl restart postgresql-18</code></pre>



<p class="wp-block-paragraph">Pour une configuration spécifique comme la gestion de la mémoire allouée, les fonctionnalités et j&rsquo;en passe. Je pense qu&rsquo;il est inutile d&rsquo;aborder cela dans ce billet.</p>



<p class="wp-block-paragraph">Pourquoi ? Parce que cet aspect-là et intrinsèquement lié aux dépendances des applications qui nécessite le SGBD PostgreSQL.</p>



<h3 class="wp-block-heading">Premiers Pas</h3>



<p class="wp-block-paragraph">Cette sous partie vise plus à entrevoir les commandes de bases pour instancier une BDD dans le cadre de déploiement d&rsquo;une application (spoiler Odoo par exemple ?).</p>



<p class="wp-block-paragraph">Je n&rsquo;ai pas la prétention de réinventer la roue, il existe la documentation pour cela et je n&rsquo;ai pas non plus la prétention de devenir SysDBA. J&rsquo;ai juste envie de faire les choses bien et surtout en suivant la doctrine des 3S, Simple, Standard et Sécurisé (14 ans d&rsquo;ESN<sup data-fn="d2a363b8-1043-4f02-8054-3cb17bef0b81" class="fn"><a href="#d2a363b8-1043-4f02-8054-3cb17bef0b81" id="d2a363b8-1043-4f02-8054-3cb17bef0b81-link">11</a></sup> ça vous forge un homme !).</p>



<h4 class="wp-block-heading">Création d&rsquo;un user</h4>



<p class="wp-block-paragraph">La création d&rsquo;un utilisateur suit un paradigme différent de MariaDB. La finesse de l&rsquo;application du contexte d&rsquo;un utilisateur se fera dans le fichier <strong>pg_hba.conf</strong>.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-00badcfad096e143c66e3e97bb28621c"><code>$ psql -U postgres

postgres=# CREATE USER user_odoo WITH PASSWORD 'MyPassw0rd';</code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="789" height="74" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_008_001_pgsql_createuser.jpg" alt="" class="wp-image-3308" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_008_001_pgsql_createuser.jpg 789w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_008_001_pgsql_createuser-300x28.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_008_001_pgsql_createuser-768x72.jpg 768w" sizes="auto, (max-width: 789px) 100vw, 789px" /></figure>
</div>


<h4 class="wp-block-heading">Création d&rsquo;une BDD</h4>



<p class="wp-block-paragraph">La création d&rsquo;une BDD nécessite qu&rsquo;un utilisateur (de la SGBD naturellement) ait le privilège <strong>CREATEDB</strong> ou d&rsquo;utiliser un compte <strong>super utilisateur</strong>. Cela parait logique mais pas pour tout le monde. La documentation nous rappelle que la création d&rsquo;une nouvelle base de données sera effectué en réalisant un clone de la BDD template1 (si, le truc qui ne fallait pas supprimer).</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-db61721f40e581d497a6d2a796b33b2f"><code>postgres=# CREATE DATABASE bdd_odoo;</code></pre>



<p class="wp-block-paragraph">Toutefois, nous pouvons allez plus loin en définissant le propriétaire de la BDD, le jeu de caractère de la BDD ainsi que la collation locale afin de faciliter le tri des chaines. Par exemple :</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-d8ca2461b14d8ccc2be296cc60c4fc52"><code>postgres=# CREATE DATABASE bdd_odoo_18
			WITH OWNER user_odoo
			ENCODING 'UTF8'
			LC_COLLATE 'fr_FR.UTF-8'
			LC_CTYPE 'fr_FR.UTF-8'
			TEMPLATE template0;</code></pre>



<p class="has-text-align-center wp-block-paragraph"><strong><mark style="background-color:rgba(0, 0, 0, 0);color:#ff0000" class="has-inline-color">/!\</mark> ARTUNG <mark style="background-color:rgba(0, 0, 0, 0);color:#ff0000" class="has-inline-color">/!\</mark> Bicyclette et petit vélo !</strong></p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td>Il n&rsquo;est pas impossible que vous tombiez sur une erreur de ce type « <em>invalid LC_COLLATE locale name</em>« . Cela signifie que tu vivras ta vie sans aucun soucis. (Tes vraiment sûre ?)<br>En gros, il manque le fichier de mappage de caractère au niveau système. Soit il n&rsquo;est pas présent, soit il n&rsquo;est pas généré.</td><td><img loading="lazy" decoding="async" width="550" height="182" class="wp-image-3309" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_008_002_pgsql_errorencodage.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_008_002_pgsql_errorencodage.jpg 617w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_008_002_pgsql_errorencodage-300x99.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Afin de vérifier si ce dernier est présent :</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-2129546e20ca91bc0ad4b0849350e583"><code>$ sudo locale -a | grep fr</code></pre>



<p class="wp-block-paragraph">Si cela ne retourne rien c&rsquo;est que le packet ne doit pas être installé. Alors installons le vin diou !</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-3-background-color has-text-color has-background has-link-color wp-elements-0f16e386d4fd3cd8ec3758c328dc2098"><code>$ sudo dnf install glibc-langpack-fr
$ sudo locale -a | grep fr</code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="868" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_008_003_pgsql_installencodage-1024x868.jpg" alt="" class="wp-image-3310" style="width:722px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_008_003_pgsql_installencodage-1024x868.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_008_003_pgsql_installencodage-300x254.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_008_003_pgsql_installencodage-768x651.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_008_003_pgsql_installencodage.jpg 1033w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="wp-block-paragraph">Surprise le fichier de mappage est présent ! Si nous rejouons la requête, cela fonctionne.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="281" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_008_004_pgsql_bddcreate-1024x281.jpg" alt="" class="wp-image-3311" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_008_004_pgsql_bddcreate-1024x281.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_008_004_pgsql_bddcreate-300x82.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_008_004_pgsql_bddcreate-768x211.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_008_004_pgsql_bddcreate.jpg 1466w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<h4 class="wp-block-heading">Attribution des privilèges et rôles</h4>



<p class="wp-block-paragraph">Comme tous systèmes de base de données, un incontournable reste la notion de rôle et de privilège. </p>



<p class="wp-block-paragraph">Dans la pratique, il convient et je sais que j&rsquo;enfonce une porte ouverte d&rsquo;adopter la bonne pratique de créer des rôles et d&rsquo;affecter les rôles aux utilisateurs. Un rôle sur la BDD en modification, en lecture, superutilisateur ect. </p>



<p class="wp-block-paragraph">Ainsi et c&rsquo;est d&rsquo;une logique implacable, si modification il doit avoir, je ne modifierai <span style="text-decoration: underline;"><strong>QUE</strong></span> le rôle et non utilisateur par utilisateur. MALINX le LYNX&#8230;</p>



<h5 class="wp-block-heading">Rôles</h5>



<p class="wp-block-paragraph">Par défaut, nous retrouvons :</p>



<figure class="wp-block-table has-small-font-size"><table class="has-fixed-layout"><tbody><tr><td class="has-text-align-center" data-align="center">SUPERUSER</td><td>Accès total à tout le serveur</td></tr><tr><td class="has-text-align-center" data-align="center">CREATEDB</td><td>Peut créer des bases de données</td></tr><tr><td class="has-text-align-center" data-align="center">CREATEROLE</td><td>Peut créer, modifier ou supprimer d&rsquo;autres rôles</td></tr><tr><td class="has-text-align-center" data-align="center">INHERIT</td><td>Hérite des privilèges des rôles dont il est membre (activé par défaut)</td></tr><tr><td class="has-text-align-center" data-align="center">LOGIN</td><td>Peut se connecter à PostgreSQL</td></tr><tr><td class="has-text-align-center" data-align="center">REPLICATION</td><td>Peut initier des connexions de réplication</td></tr><tr><td class="has-text-align-center" data-align="center">BYPASSRLS</td><td>Ignore les politiques de sécurité par lignes</td></tr></tbody></table></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Toujours dans le spoil (parce que <a href="https://www.youtube.com/watch?v=Txz9toiMFnE">je suis un mec underground moi. MOUMOUNIGAN !</a>) je vais créer un rôle pour ODOO qui permettra uniquement de se connecter, de créer une bdd avec un mot de passe.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-d87a71f61879722c82d63d05166a54de"><code>postgres=# CREATE ROLE r_odoo LOGIN CREATEDB;</code></pre>



<p class="wp-block-paragraph">Pour attribuer le rôle à un utilisateur (en prenant toujours le cas ODOO avec notre role r_odoo et user_odoo) :</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-2b890c0dd8242c780f421a72dff43509"><code>postgres=# GRANT r_odoo TO user_odoo;</code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="835" height="246" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_008_005_pgsql_grant.jpg" alt="" class="wp-image-3312" style="width:652px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_008_005_pgsql_grant.jpg 835w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_008_005_pgsql_grant-300x88.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_008_005_pgsql_grant-768x226.jpg 768w" sizes="auto, (max-width: 835px) 100vw, 835px" /></figure>
</div>


<h5 class="wp-block-heading">Privilèges</h5>



<p class="wp-block-paragraph">La notion de privilèges que ce soit sur la BDD, les tables où les schémas suivent le principe de SQL. Ainsi il suffira d&rsquo;user des commandes GRANT accompagner de :</p>



<ul class="wp-block-list">
<li>CONNECT ON</li>



<li>USAGE</li>



<li>SELECT ON ALL</li>



<li>SELECT, INSERT, UPDATE, DELETE</li>



<li>ALTER</li>



<li>DROP</li>



<li>&#8230;</li>
</ul>



<p class="wp-block-paragraph">Il est important de prendre en compte que le propriétaire de la BDD <span style="text-decoration: underline;"><strong>a tous les droits</strong></span>.</p>



<p class="wp-block-paragraph">Toujours dans notre exemple ODOO, il n&rsquo;y aura donc pas de privilèges à appliquer.</p>



<h2 class="wp-block-heading">PostgreSQL Client</h2>



<p class="wp-block-paragraph">Il existe un outil que j&rsquo;ai découvert à travers un case chez VEEAM pour un problème de protection O365 du nom de pgAdmin. Cette solution officielle est l&rsquo;outil graphique pour administrer PostrgreSQL.</p>



<p class="wp-block-paragraph">Je pense important de présenter cette dernière car dans le cas où nous ne nous serions pas <strong><em>SQL native language</em></strong> ou <strong><em>seconde langue</em></strong>. Cela nous permettrait de bien comprendre certains dysfonctionnements ou structures.</p>



<p class="wp-block-paragraph">L&rsquo;installation n&rsquo;est pas en soi bien complexe&#8230; Ma grand-mère y arriverait sans difficulté. Toutefois, je glisse le tips&#8230;</p>


<div class="kb-gallery-wrap-id-3247_8318b5-7d alignnone wp-block-kadence-advancedgallery"><div class="kb-gallery-ul kb-gallery-non-static kb-gallery-type-fluidcarousel kb-gallery-id-3247_8318b5-7d kb-gallery-caption-style-bottom-hover kb-gallery-filter-none" data-image-filter="none" data-lightbox-caption="true"><div class="kt-blocks-carousel splide kt-carousel-container-dotstyle-dark kt-carousel-arrowstyle-whiteondark kt-carousel-dotstyle-dark kb-slider-group-arrow kb-slider-arrow-position-center" data-slider-anim-speed="400" data-slider-scroll="1" data-slider-arrows="true" data-slider-dots="true" data-slider-hover-pause="false" data-slider-auto="" data-slider-speed="7000" data-slider-type="fluidcarousel" data-slider-center-mode="true" data-slider-gap="10px" data-slider-gap-tablet="10px" data-slider-gap-mobile="10px" data-show-pause-button="false"><div class="splide__track"><ul class="kt-blocks-carousel-init kb-blocks-fluid-carousel splide__list"><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_001_pgadmin.jpg" width="526" height="415" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_001_pgadmin.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_001_pgadmin.jpg" data-id="3294" class="wp-image-3294 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_001_pgadmin.jpg 526w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_001_pgadmin-300x237.jpg 300w" sizes="auto, (max-width: 526px) 100vw, 526px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_002_pgadmin.jpg" width="520" height="412" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_002_pgadmin.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_002_pgadmin.jpg" data-id="3295" class="wp-image-3295 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_002_pgadmin.jpg 520w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_002_pgadmin-300x238.jpg 300w" sizes="auto, (max-width: 520px) 100vw, 520px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_003_pgadmin.jpg" width="523" height="412" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_003_pgadmin.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_003_pgadmin.jpg" data-id="3296" class="wp-image-3296 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_003_pgadmin.jpg 523w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_003_pgadmin-300x236.jpg 300w" sizes="auto, (max-width: 523px) 100vw, 523px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_004_pgadmin.jpg" width="522" height="413" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_004_pgadmin.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_004_pgadmin.jpg" data-id="3297" class="wp-image-3297 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_004_pgadmin.jpg 522w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_004_pgadmin-300x237.jpg 300w" sizes="auto, (max-width: 522px) 100vw, 522px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_005_pgadmin.jpg" width="524" height="413" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_005_pgadmin.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_005_pgadmin.jpg" data-id="3298" class="wp-image-3298 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_005_pgadmin.jpg 524w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_005_pgadmin-300x236.jpg 300w" sizes="auto, (max-width: 524px) 100vw, 524px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_006_pgadmin.jpg" width="522" height="410" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_006_pgadmin.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_006_pgadmin.jpg" data-id="3299" class="wp-image-3299 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_006_pgadmin.jpg 522w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_006_pgadmin-300x236.jpg 300w" sizes="auto, (max-width: 522px) 100vw, 522px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_007_pgadmin.jpg" width="520" height="411" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_007_pgadmin.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_007_pgadmin.jpg" data-id="3300" class="wp-image-3300 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_007_pgadmin.jpg 520w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_007_pgadmin-300x237.jpg 300w" sizes="auto, (max-width: 520px) 100vw, 520px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_008_pgadmin.jpg" width="783" height="626" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_008_pgadmin.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_008_pgadmin.jpg" data-id="3301" class="wp-image-3301 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_008_pgadmin.jpg 783w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_008_pgadmin-300x240.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_008_pgadmin-768x614.jpg 768w" sizes="auto, (max-width: 783px) 100vw, 783px" /></div></div></figure></div></div></li></ul></div></div></div></div>


<p class="wp-block-paragraph">Certains pourrait dire, oui c&rsquo;est un PHPMyAdmin. Oui c&rsquo;est un fait. C&rsquo;est une IHM<sup data-fn="67016ea4-128a-4e54-8e78-994f2692832d" class="fn"><a href="#67016ea4-128a-4e54-8e78-994f2692832d" id="67016ea4-128a-4e54-8e78-994f2692832d-link">12</a></sup> en GUI<sup data-fn="91045dd7-1d19-4afb-9e40-c5064450683b" class="fn"><a href="#91045dd7-1d19-4afb-9e40-c5064450683b" id="91045dd7-1d19-4afb-9e40-c5064450683b-link">13</a></sup> pour faciliter l&rsquo;expérience quotidienne.</p>



<p class="wp-block-paragraph">Pour se connecter, il suffira de renseigner les informations de connexion et de s&rsquo;assurer au préalable que la politique de communication est bien présente sur notre UTM concernant les flux interlans. Sans oublier de vérifier :</p>



<ul class="wp-block-list">
<li>La configuration du fichier pg_hba.conf est compliante</li>



<li>Les adresses d&rsquo;écoutes dans le fichier postgresql.conf ne sont pas restreinte cas localhost et que le bind d&rsquo;interface est bien configuré. (Le bind c&rsquo;est l&rsquo;ip de l&rsquo;interface du serveur, pas l&rsquo;adresse ip du client&#8230; Je dis ça parce que je vous vois venir hein !)</li>
</ul>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="434" class="wp-image-3303" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_009_pgadmin_connexion.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_009_pgadmin_connexion.jpg 727w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_009_pgadmin_connexion-300x237.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="252" class="wp-image-3313" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_011_pgadmin_connexion.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_011_pgadmin_connexion.jpg 1068w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_011_pgadmin_connexion-300x137.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_011_pgadmin_connexion-1024x469.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_011_pgadmin_connexion-768x352.jpg 768w" sizes="auto, (max-width: 550px) 100vw, 550px" /><br></td></tr></tbody></table></figure>



<p class="wp-block-paragraph">Et si nous jetions un coup d&rsquo;œil dans le viseur pour observer nos logs voir si on voit notre <a href="https://www.youtube.com/watch?v=6xb898sQtu8&amp;list=RD6xb898sQtu8&amp;start_radio=1">pachyderm</a> numérique ?</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-5de0cdf00246c3c34a09d22a2381ba79"><code>$ sudo tail -f /mnt/database/postgresql/data/log/postgresql-Wed.log</code></pre>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="161" src="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_010_pgadmin_connexion-1024x161.jpg" alt="" class="wp-image-3304" srcset="https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_010_pgadmin_connexion-1024x161.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_010_pgadmin_connexion-300x47.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_010_pgadmin_connexion-768x121.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_010_pgadmin_connexion-1536x242.jpg 1536w, https://erwanguillemard.com/wp-content/uploads/2025/11/APP_011_007_010_pgadmin_connexion.jpg 1693w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Impeccable. Tout fonctionne 🙂</p>



<h2 class="wp-block-heading">Conclusion</h2>



<p class="wp-block-paragraph">Ce billet revient aux prémices des premiers articles rédigés il y a maintenant quasiment deux ans. Quelques choses de simple qui vise à jouer les aides mémoires de ma cafetière qui commence à s&rsquo;effriter.</p>



<p class="wp-block-paragraph">Je ne tenais pas à me lancer dans un benchmark de « <em><strong>Est ce que l&rsquo;otarie et plus fort que l&rsquo;éléphant ?</strong></em> » cela ne m&rsquo;intéresse pas le moindre du monde. Toutefois et comme j&rsquo;ai pu l&rsquo;aborder en avant propos, le tournant des éditeurs vers la solution PostgreSQL mérite de s&rsquo;intéresser à cette dernière.</p>



<ul class="wp-block-list">
<li>VEEAM enchaine sa rupture technologique avec Windows (SE<sup data-fn="7604995b-87f0-4797-9ee8-4a7d54d21f02" class="fn"><a href="#7604995b-87f0-4797-9ee8-4a7d54d21f02" id="7604995b-87f0-4797-9ee8-4a7d54d21f02-link">14</a></sup> et/ou MSSQL) pour RHEL et PostgreSQL</li>



<li>ODOO qui reste dans la philosophie du libre</li>



<li>La Société Générale (faut bien renflouer les caisses après le passage de Jérôme KERVIEL&#8230; Ok, la blague est mauvaise, mais il fallait la faire. Trop tentante).</li>



<li>Patrick BALKANY pour gérer son patrimoine non déclaré. Ah non autant pour moi c&rsquo;est une fake news&#8230; Que je suis naïf 🙂</li>
</ul>



<p class="wp-block-paragraph">Au delà des deux derniers points douteux, il est bien je pense de se garder deux SGBDs relationnels sous le coude les solutions MariaDB et PostgreSQL. L&rsquo;implémentation de la couche de sécurité relève d&rsquo;un défi parfois mais reste nécessaire et plus qu&rsquo;indispensable de nos jours.</p>



<p class="wp-block-paragraph">Il manque toutefois un point que je n&rsquo;ai pas développé ici. La possibilité de sauvegarder une base de manière périodique. J&rsquo;avais traité le sujet pour MariaDB à la suite d&rsquo;une connerie de ma part un vendredi aprem sur l&rsquo;environnement de production. Je pense qu&rsquo;il serait bien de reprendre ce projet et de l&rsquo;adapter pour PostgreSQL 🙂</p>



<p class="wp-block-paragraph">Ca fait un sujet supplémentaire à traiter d&rsquo;ici la fin d&rsquo;année. Mais surtout, le levé de voile ayant été fait un poil plus tôt ce billet est le tremplin pour l&rsquo;implémentation d&rsquo;ODOO comme mon ERP à venir.</p>



<p class="wp-block-paragraph">Le mot de la fin :</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><em>Egaré dans la base de données infernale, le sysadmin se nomme R-ONE. A la recherche du datalocation, le problème s&rsquo;appelle la durcification. Avec la solution VEEAM, il a pu rollback super vite.</em> Dérivant à dos d&rsquo;éléphant<em>, R-ONE arrivera toujours dans l&rsquo;étang&#8230; (faut bien se mouiller un peu qu&rsquo;ils disaient les anciens)</em></p>
<cite>Erwan GUILLEMARD</cite></blockquote>



<h2 class="wp-block-heading">Sources</h2>



<ul class="wp-block-list">
<li><a href="https://www.postgresql.org/community/survey/50-what-operating-system-is-your-primarylargest-production-postgresql-database-running-on">PostgreSQL Secteur par OS</a></li>



<li><a href="https://www.postgresql.org/files/documentation/pdf/18/postgresql-18-A4.pdf">PostgreSQL &#8211; Main Apps Guide</a></li>



<li><a href="https://www.postgresql.org/download/">PostgreSQL &#8211; Download</a></li>



<li><a href="https://www.pgadmin.org/download/">PGAdmin &#8211; Download</a></li>



<li><a href="https://mariadb.com/docs/analytics/mariadb-columnstore/management/deployment/columnstore-minimum-hardware-specification">MariaDB &#8211; Hardware Requirements</a></li>
</ul>


<ol class="wp-block-footnotes"><li id="b793e32b-66d6-49b2-ab53-f36b018298f1"><strong>SGBD :</strong> Système de Gestion de Base de Données <a href="#b793e32b-66d6-49b2-ab53-f36b018298f1-link" aria-label="Aller à la note de bas de page 1">↩︎</a></li><li id="393e6df6-2f56-48e8-9d39-7a0fdfff1fe2"><strong>BDD : </strong>Base De Données <a href="#393e6df6-2f56-48e8-9d39-7a0fdfff1fe2-link" aria-label="Aller à la note de bas de page 2">↩︎</a></li><li id="400bfed0-8737-41bd-8083-b5ec5af14458"><strong>LSD :</strong> <strong> </strong>LySergique Diéthylamide <a href="#400bfed0-8737-41bd-8083-b5ec5af14458-link" aria-label="Aller à la note de bas de page 3">↩︎</a></li><li id="172c5b99-4041-4446-85b6-d02e927f1b6e"><strong>ANSSI</strong> <strong>:</strong> Agence Nationale de Sécurité des Systèmes d&rsquo;Informations <a href="#172c5b99-4041-4446-85b6-d02e927f1b6e-link" aria-label="Aller à la note de bas de page 4">↩︎</a></li><li id="146573c3-30d5-479a-b375-824245002261"><strong>DMZ :</strong> Demilitarized Zone <a href="#146573c3-30d5-479a-b375-824245002261-link" aria-label="Aller à la note de bas de page 5">↩︎</a></li><li id="8cf51c44-be31-4dbd-91c3-7dfca8006d40"><strong>RTFM :</strong> Read The Fuck*ng Manual <a href="#8cf51c44-be31-4dbd-91c3-7dfca8006d40-link" aria-label="Aller à la note de bas de page 6">↩︎</a></li><li id="93299765-13f1-4d26-b6e1-157c6dc967ca"><strong>OS :</strong> Operating System <a href="#93299765-13f1-4d26-b6e1-157c6dc967ca-link" aria-label="Aller à la note de bas de page 7">↩︎</a></li><li id="8ee11f8e-018a-4440-a1e7-f35e89fcaa7d"><strong>RSSI </strong>: Responsable Sécurité des Systèmes d&rsquo;Informations <a href="#8ee11f8e-018a-4440-a1e7-f35e89fcaa7d-link" aria-label="Aller à la note de bas de page 8">↩︎</a></li><li id="d3ddcc3d-b108-4e68-9df7-2f478eb4d83d"><strong>SysDBA :</strong> Administrateur des Systèmes de Bases de Données <a href="#d3ddcc3d-b108-4e68-9df7-2f478eb4d83d-link" aria-label="Aller à la note de bas de page 9">↩︎</a></li><li id="5b9359c6-adcf-4f72-9501-604602846dc7"><strong>UTM : </strong>Unified threat management <a href="#5b9359c6-adcf-4f72-9501-604602846dc7-link" aria-label="Aller à la note de bas de page 10">↩︎</a></li><li id="d2a363b8-1043-4f02-8054-3cb17bef0b81"><strong>ESN :</strong> Entreprise des Services Numériques <a href="#d2a363b8-1043-4f02-8054-3cb17bef0b81-link" aria-label="Aller à la note de bas de page 11">↩︎</a></li><li id="67016ea4-128a-4e54-8e78-994f2692832d"><strong>IHM :</strong> Interface Homme Machine <a href="#67016ea4-128a-4e54-8e78-994f2692832d-link" aria-label="Aller à la note de bas de page 12">↩︎</a></li><li id="91045dd7-1d19-4afb-9e40-c5064450683b"><strong>GUI :</strong> Graphical User Interface <a href="#91045dd7-1d19-4afb-9e40-c5064450683b-link" aria-label="Aller à la note de bas de page 13">↩︎</a></li><li id="7604995b-87f0-4797-9ee8-4a7d54d21f02"><strong>SE :</strong> Système d&rsquo;Exploitation <a href="#7604995b-87f0-4797-9ee8-4a7d54d21f02-link" aria-label="Aller à la note de bas de page 14">↩︎</a></li></ol>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>WIN – Password Policies &#038; Event 4740</title>
		<link>https://erwanguillemard.com/win-password-policies-monitoring/</link>
		
		<dc:creator><![CDATA[Erwan Guillemard]]></dc:creator>
		<pubDate>Sun, 05 Oct 2025 18:36:55 +0000</pubDate>
				<category><![CDATA[Sécurité]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Securité]]></category>
		<guid isPermaLink="false">https://erwanguillemard.com/?p=3190</guid>

					<description><![CDATA[Dans ce billet, j&#8217;avais envie d&#8217;enfoncer des portes ouvertes. Premièrement parce que je trouve facile de faire un billet sur quelque chose de « simple » et deuxièmement si je me dem***e bien je peux faire de l&#8217;audit avec un titre p*te-à-clic ! Plus sérieusement et sans détour, il se trouve que ce sont les choses les...]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Dans ce billet, j&rsquo;avais envie d&rsquo;enfoncer des portes ouvertes. Premièrement parce que je trouve facile de faire un billet sur quelque chose de « simple » et deuxièmement si je me dem***e bien je peux faire de l&rsquo;audit avec un titre p*te-à-clic !</p>



<p class="wp-block-paragraph">Plus sérieusement et sans détour, il se trouve que ce sont les choses les plus simples dans la vie qui sont le plus souvent bâclées ou négligées. C&rsquo;est pourquoi je me suis dit, et si je m&rsquo;attardais un peu plus sur les politiques de mots de passe dans un environnement WINDOWS ?</p>



<p class="wp-block-paragraph">Il relève de nombreux articles déjà sur le net qui traite ce sujet, mais voyez-vous encore une fois je pense aller un peu plus loin que les excellents articles déjà présents. Difficile de parler de ce que j&rsquo;ai fait sans toutefois présenter les bases 🙂</p>



<p class="has-text-align-center wp-block-paragraph"><strong>Mais alors jusqu&rsquo;où es-tu allé cette fois ci ?</strong></p>



<p class="wp-block-paragraph">Je suis parti de la politique classique de définition de la politique de mot de passe dans un domaine AD<sup data-fn="ee3df61f-a519-4425-8d3e-e24b9d4968ce" class="fn"><a href="#ee3df61f-a519-4425-8d3e-e24b9d4968ce" id="ee3df61f-a519-4425-8d3e-e24b9d4968ce-link">1</a></sup> et du traitement des événements de verrouillage de compte. Sujet traité par mon précédent mentor et qui m&rsquo;a demandé un peu de recherche pour arriver à mes fins (je voulais faire ma propre solution, comprendre et maitriser le sujet).</p>



<p class="wp-block-paragraph">Bref, cela sera je le pense un petit billet avec du script, des schémas et naturellement du powershell avec une pointe de désinvolture et assurément de sécurité. </p>





<h2 class="wp-block-heading">Avant-Propos</h2>



<p class="wp-block-paragraph">Comme rédigé légèrement plus tôt, je n&rsquo;ai pas la volonté de faire un article détaillé qui reprend la majorité des articles déjà présent sur le NET. Il me faut néanmoins une base de départ. </p>



<p class="wp-block-paragraph">Mon mentor, dans le cadre d&rsquo;une esquisse de PSSI<sup data-fn="8a83b3e9-a47a-428b-8eba-109292ff90d3" class="fn"><a href="#8a83b3e9-a47a-428b-8eba-109292ff90d3" id="8a83b3e9-a47a-428b-8eba-109292ff90d3-link">2</a></sup> il y a un certain nombre d&rsquo;année c&rsquo;est dit qu&rsquo;il serait bien d&rsquo;informer l&rsquo;équipe du SI interne (ou externalisé) d&rsquo;un potentiel blocage, verrouillage de compte sur un AD. La première question que nous pourrions nous poser serait d&rsquo;abord quel cas pourrait entrainer un verrouillage d&rsquo;un compte ?</p>



<ul class="wp-block-list">
<li>Un dysfonctionnement de la couche 8 du modèle OSI<sup data-fn="c83eaf51-a4dd-41a4-bd7a-588ddcc4945b" class="fn"><a href="#c83eaf51-a4dd-41a4-bd7a-588ddcc4945b" id="c83eaf51-a4dd-41a4-bd7a-588ddcc4945b-link">3</a></sup> :
<ul class="wp-block-list">
<li>Je suis méchant avec cette couche, je sais bien. Nous parlons ici (ou plutôt je parle car cela n&rsquo;engage que ma responsabilité ET ma personne) du dysfonctionnement entre le siège du bureau et le clavier. Soit en un mot et un seul ? <strong>L&rsquo;utilisateur</strong> bien sûr !! Mais qu&rsquo;est ce que ce mec est condescendant&#8230; C&rsquo;est affligeant. Généralement, le verrouillage de compte est généré par une erreur de frape lors de la saisie et dans certains cas (compte non nominatif utilisé par plusieurs collaborateurs) de la saisie d&rsquo;un mauvais mot de passe.</li>
</ul>
</li>



<li>Une tentative de Charlie qui veut « poutrer » le compte de Bob pour récupérer le cœur d&rsquo;Alice
<ul class="wp-block-list">
<li>On comprend assez aisément le brute force d&rsquo;un intru pour s&rsquo;infiltrer dans le SI<sup data-fn="b2669417-059d-4c69-984f-1d328949f770" class="fn"><a href="#b2669417-059d-4c69-984f-1d328949f770" id="b2669417-059d-4c69-984f-1d328949f770-link">4</a></sup> est tout casser&#8230;</li>
</ul>
</li>



<li>Un dysfonctionnement de la couche 7 du modèle OSI :
<ul class="wp-block-list">
<li>Oui celle-là existe officiellement et concerne la couche applicative :). Je ne peux pas non plus raconter <a href="https://www.youtube.com/watch?v=wPmn9_FQKXs">des conneries en permanence</a> tout de même. Pour faire simple une application a des informations qui ne sont pas à jour (un client de messagerie qui pete un plomb par exemple).</li>
</ul>
</li>
</ul>



<p class="wp-block-paragraph">Donc l&rsquo;intérêt de notifier l&rsquo;équipe interne ? S&rsquo;assurer que notre utilisateur ne veut pas s&rsquo;octroyer une pause-café supplémentaire ou que nous avons un petit malin dans la place qui veut nous faire passer nos prochains jours à la première place de l&rsquo;enfer dans le plus beau des <a href="https://fr.m.wikipedia.org/wiki/Fichier:John_Martin_Le_Pandemonium_Louvre.JPG">pandémoniums</a> &lt;3</p>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="676" src="https://erwanguillemard.com/wp-content/uploads/2025/09/WIN_010_001_pandemonium-1024x676.jpg" alt="" class="wp-image-3194" style="width:670px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2025/09/WIN_010_001_pandemonium-1024x676.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2025/09/WIN_010_001_pandemonium-300x198.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/09/WIN_010_001_pandemonium-768x507.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2025/09/WIN_010_001_pandemonium-1536x1013.jpg 1536w, https://erwanguillemard.com/wp-content/uploads/2025/09/WIN_010_001_pandemonium-2048x1351.jpg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="wp-block-paragraph">Mon côté brun ténébreux qui ressort avec les vilains corbeaux de Sir Alan Edgar Poe&#8230; Alors comment faire pour déceler un verrouillage de compte et comment notifier les équipes ? Spoiler ? La suite dans les parties ci-dessous.</p>



<h2 class="wp-block-heading">Prérequis</h2>



<ul class="wp-block-list">
<li><strong>SE :</strong>&nbsp;
<ul class="wp-block-list">
<li>Windows Server 2k16 et version ultérieures</li>
</ul>
</li>



<li><strong>Apps :&nbsp;</strong>
<ul class="wp-block-list">
<li>Rôle ADDS</li>
</ul>
</li>



<li><strong>Autres :</strong>
<ul class="wp-block-list">
<li>PowerShell version 5 et supérieure</li>



<li>SMTP</li>



<li>Domaine AD</li>
</ul>
</li>
</ul>



<h2 class="wp-block-heading">Théorie</h2>



<p class="wp-block-paragraph">Avant de commencer, posons nous la question de comment fonctionne l&rsquo;authentification dans poste dans une domaine (pour faire simple, nous restons dans une forêt avec un seul domaine).</p>



<h3 class="wp-block-heading">Authentification, comment ça marche ?</h3>



<p class="wp-block-paragraph">En tous lieux, je dirai avec des chaussures&#8230; Ok, je sors&#8230;</p>



<p class="wp-block-paragraph">Nous pourrions résumer le cycle de vie de l&rsquo;authentification en 7 étapes (encore la magie du nombre 7&#8230;) l&rsquo;authentification d&rsquo;un utilisateur.</p>



<ol class="wp-block-list">
<li><strong>Saisie des identifiants login et mot de passe</strong>
<ul class="wp-block-list">
<li>Rien de bien sorcier, CONTOSO\John.Doe et mon superpassword (si tenter que le mot de passe soit bien celui attendu dans l&rsquo;AD pour l&rsquo;utilisateur John DOE&#8230;</li>
</ul>
</li>



<li><strong>Localisation du DC via DNS</strong>
<ul class="wp-block-list">
<li>Notre poste va alors à travers l&rsquo;enregistrement DNS<sup data-fn="18e69ed2-abc8-46a5-a20d-72f7eb983f95" class="fn"><a href="#18e69ed2-abc8-46a5-a20d-72f7eb983f95" id="18e69ed2-abc8-46a5-a20d-72f7eb983f95-link">5</a></sup> <strong><em>_ldap._tcp.dc._msdcs.contoso.x</em></strong> pour trouver un DC<sup data-fn="0721b4af-c255-4f7e-809c-b8c9286fd00d" class="fn"><a href="#0721b4af-c255-4f7e-809c-b8c9286fd00d" id="0721b4af-c255-4f7e-809c-b8c9286fd00d-link">6</a></sup> disponible</li>
</ul>
</li>



<li><strong>Négociation, KERBEROS ou NTLM ?</strong>
<ul class="wp-block-list">
<li>Deux mots protocoles qui peuvent faire peur. Je ne rentre pas dans le détail des deux protocoles. Gardons à l&rsquo;esprit toutefois que KERBEROS est supérieur au protocole NTLM<sup data-fn="4fcc112f-3418-4247-99c0-2a394beaf5ae" class="fn"><a href="#4fcc112f-3418-4247-99c0-2a394beaf5ae" id="4fcc112f-3418-4247-99c0-2a394beaf5ae-link">7</a></sup> (d&rsquo;ailleurs KERBEROS est utilisé comme protocole par défaut).</li>



<li><mark style="background-color:rgba(0, 0, 0, 0);color:#0074ff" class="has-inline-color">Cas de KERBEROS</mark>, le poste demande un TGT<sup data-fn="3e2a8bc8-2b61-4fd4-b3b4-db26e8c201c2" class="fn"><a href="#3e2a8bc8-2b61-4fd4-b3b4-db26e8c201c2" id="3e2a8bc8-2b61-4fd4-b3b4-db26e8c201c2-link">8</a></sup> auprès du KDC<sup data-fn="3f2db1e6-f957-433a-a801-b23ae4ea333f" class="fn"><a href="#3f2db1e6-f957-433a-a801-b23ae4ea333f" id="3f2db1e6-f957-433a-a801-b23ae4ea333f-link">9</a></sup> du DC à travers une requête. Si le couple d&rsquo;authentification saisie est correct le KDC retournera en réponse le TGT chiffré ainsi qu&rsquo;une clé de session. Le poste à travers le TGT va demander un TGS<sup data-fn="b16e4796-0ae1-459e-91b3-49a78e1a49d6" class="fn"><a href="#b16e4796-0ae1-459e-91b3-49a78e1a49d6" id="b16e4796-0ae1-459e-91b3-49a78e1a49d6-link">10</a></sup> afin d&rsquo;accéder aux différentes ressources du SI (fichiers, imprimantes etc&#8230;).</li>



<li><mark style="background-color:rgba(0, 0, 0, 0);color:#0074ff" class="has-inline-color">Cas de NTLM</mark>, le poste va réaliser un challenge au DC en attendant une réponse.</li>
</ul>
</li>



<li><strong>Validation du compte</strong>
<ul class="wp-block-list">
<li>Une fois la négociation réussi (<a href="https://www.youtube.com/watch?v=jwIUJIfIEWo">Où est-ce qu&rsquo;il a appris à négocier ?</a>), le DC va vérifier le mot de passe haché, le compte doit être actif (soit pas verrouillé, expiré ou désactivé), récupérer les groupes de sécurité de l&rsquo;utilisateur ainsi que les stratégies de connexion et de mot de passe.</li>



<li>C&rsquo;est marrant, c&rsquo;est cette étape qui nous intéresse 🙂</li>
</ul>
</li>



<li><strong>Chargement du profil</strong>
<ul class="wp-block-list">
<li>Si la vérification du compte utilisateur est ok, alors c&rsquo;est réussi. <strong>HIGH FIVE !</strong> Le poste va alors charger le profil local ou selon la configuration un profil itinérant. Dans le pire des cas, un profil temporaire.</li>
</ul>
</li>



<li><strong>Application des GPO</strong>
<ul class="wp-block-list">
<li>Dans la logique, ensuite sont téléchargées et appliquées les GPO<sup data-fn="f45783de-eede-4502-9d26-843d9efb5a18" class="fn"><a href="#f45783de-eede-4502-9d26-843d9efb5a18" id="f45783de-eede-4502-9d26-843d9efb5a18-link">11</a></sup> utilisateurs, ordinateurs&#8230;</li>
</ul>
</li>



<li><strong>Ouverture de session</strong>
<ul class="wp-block-list">
<li>Hé nous voilà normalement sur notre bureau.</li>
</ul>
</li>
</ol>



<p class="wp-block-paragraph">Bon j&rsquo;avoue que la partie négociation, j&rsquo;avais dit que je ne rentrerai pas dans le détail. J&rsquo;effleure la technicité et croyez moi, nous pourrions aller beaucoup plus loin. Toutefois, demander à vos Admins Systèmes et Réseaux ou Techniciens Systèmes et Réseaux, je ne suis pas certains qu&rsquo;ils vous expliquent clairement le cycle de vie d&rsquo;authentification d&rsquo;un utilisateur&#8230;</p>



<h3 class="wp-block-heading">Stratégie de mot de passe</h3>



<p class="wp-block-paragraph">Avant de rentrer plus dans le détail de ce qui nous intéresse, il est important de parler de la stratégie de mot de passe. Cela s&rsquo;est plutôt bien démocratisé car nous retrouvons sur la grande majorité des sites web à ce jour le traditionnel message :</p>



<p class="wp-block-paragraph">Votre mot de passe doit répondre aux critères minimaux ci-dessous :</p>



<ul class="wp-block-list">
<li>16 caractères minimum</li>



<li>1 Majuscule</li>



<li>1 Minuscule</li>



<li>1 caractère numérique</li>



<li>1 caractère spécifique</li>
</ul>



<p class="wp-block-paragraph">Je vous vois déjà hurler, ou vos utilisateurs vous ont gueulé dessus&#8230; Quant à la politique mis en place. Mais alors que devons nous appliquer et à qui ? L&rsquo;objectif est de sécuriser les SIs sans pour autant être un vrai tyran avec ces utilisateurs. Gardons toujours à l&rsquo;esprit que « Trop de sécurité tue la sécurité ». A quoi bon exiger 26 caractères pour retrouver le mot de passe sur un post-it ou <strong>AZERTY123456AZERTY123456azerty123456azerty123456$</strong>&#8230;</p>



<p class="wp-block-paragraph">Pour cela, j&rsquo;aime me référer à l&rsquo;ANSSI<sup data-fn="bfa3d65a-4536-4421-a219-6600a3b2a55b" class="fn"><a href="#bfa3d65a-4536-4421-a219-6600a3b2a55b" id="bfa3d65a-4536-4421-a219-6600a3b2a55b-link">12</a></sup> comme ça je peux dire haut et fort, « C&rsquo;est pas moi, c&rsquo;est eux qui veulent. » 🙂 Je suis courageux n&rsquo;est ce pas ? 🙂</p>



<p class="wp-block-paragraph">Dans le guide de Recommandation relatives à l&rsquo;authentification multi-facteurs et aux mots de passe, il est recommandé d&rsquo;appliquer la politique de mot de passe suivante (R20):</p>



<ul class="wp-block-list">
<li>Catégorie des mots de passe</li>



<li><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-2-color">Longueur des mots de passe</mark> (<mark style="background-color:rgba(0, 0, 0, 0);color:#ff0000" class="has-inline-color">Entre 9 et 11, c&rsquo;est faible</mark>. <mark style="background-color:rgba(0, 0, 0, 0);color:#ff9c00" class="has-inline-color">Entre 12 et 14 c&rsquo;est moyen</mark>. <mark style="background-color:rgba(0, 0, 0, 0);color:#6dd826" class="has-inline-color">Au-delà de 15 c&rsquo;est fort</mark>)</li>



<li><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-2-color">Règles de complexité des mots de passe</mark> (le nombre de caractère utilisable)</li>



<li><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-2-color">Délais d&rsquo;expiration des mots de passe</mark> (la fréquence de renouvellement)</li>



<li><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-2-color">Mécanisme de limitation d&rsquo;essais d&rsquo;authentification</mark></li>



<li><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-2-color">Mécanisme de contrôle de la robustesse des mots de passe</mark></li>



<li><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-2-color">Méthode de conservation des mots de passe</mark></li>



<li>Méthode de recouvrement d&rsquo;accès en cas de perte ou de vol des mots de passe</li>



<li>Mise à disposition d&rsquo;un coffre-fort de mot de passe</li>
</ul>



<p class="wp-block-paragraph">Dans notre cas, seuls les points en vert nous intéressent. Pour définir techniquement notre GPO ou notre FGPP. </p>



<p class="has-text-align-center wp-block-paragraph"><strong><em>D&rsquo;où tu dis que je suis un FDP ?! Gros Tarba va ! Je vais&#8230;.</em></strong> </p>



<p class="has-text-align-left wp-block-paragraph">STOP ! En aucun cas je vous insulte ! FGPP<sup data-fn="e9521bc3-b710-4c91-bf97-8570fc3d067b" class="fn"><a href="#e9521bc3-b710-4c91-bf97-8570fc3d067b" id="e9521bc3-b710-4c91-bf97-8570fc3d067b-link">13</a></sup> ou Fine Grained Password Policy permettent de manière plus simple de définir plusieurs politiques de mots de passe dans une organisation selon les services et criticité de ces derniers. Croyez-moi, c&rsquo;est bien plus simple que la gestion par GPO. Ca nous le verrons rapidement dans la pratique quant au déploiement.</p>



<p class="has-text-align-left wp-block-paragraph">Dans tous les cas, j&rsquo;aime définir la stratégie de mot de passe « par défaut » dans la GPO (vous pouvez me jeter des petits cailloux au visage et du sable dans les yeux), Default Domain Policy : HERESIE ! BLASPHEME ! AU BUCHET ! (Oui ba c&rsquo;est bien la seule chose que je modifie dans la Default Domain Policy) :</p>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="273" src="https://erwanguillemard.com/wp-content/uploads/2025/09/WIN_010_002_DefaultDomainPolicy-1024x273.jpg" alt="" class="wp-image-3201" style="width:705px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2025/09/WIN_010_002_DefaultDomainPolicy-1024x273.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2025/09/WIN_010_002_DefaultDomainPolicy-300x80.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/09/WIN_010_002_DefaultDomainPolicy-768x205.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2025/09/WIN_010_002_DefaultDomainPolicy.jpg 1494w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="wp-block-paragraph">J&rsquo;ouvre un aparté, dans le cas d&rsquo;un poste hors domaine que nous souhaiterions durcir, il suffira de faire de même. Il faut que je pose la question de scripter cela. Aparté fermée.</p>



<p class="wp-block-paragraph">J&rsquo;ai donc une politique de mots de passe qui s&rsquo;appliquent (sans verrouillage de compte) par défaut pour l&rsquo;ensemble des utilisateurs de mon parc, de mon domaine. Néanmoins, je vais définir par FGPP une politique par groupe utilisateur.</p>



<p class="wp-block-paragraph">Dans ma logique, je choisie de faire trois politiques par défaut en respectant le tiering d&rsquo;administration des comptes utilisateurs. </p>



<p class="has-text-align-center wp-block-paragraph">Administrateur du domaine &gt; Utilisateurs avec pouvoir &gt; Utilisateur du domaine</p>



<p class="wp-block-paragraph">La puissance des FGPPs résident dans la possibilité de définir une pondération sur chaque politique. Ainsi, un utilisateur peut se retrouver avec une ou plusieurs politiques liées. Les politiques ne pouvant se cumuler, la politique avec la pondération la plus forte sera minoritaire par rapport à une politique avec une pondération plus faible.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="431" src="https://erwanguillemard.com/wp-content/uploads/2025/09/WIN_010_003_FGPP-1024x431.jpg" alt="" class="wp-image-3203" style="width:660px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2025/09/WIN_010_003_FGPP-1024x431.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2025/09/WIN_010_003_FGPP-300x126.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/09/WIN_010_003_FGPP-768x323.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2025/09/WIN_010_003_FGPP.jpg 1105w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="wp-block-paragraph">« Unbelievable » diraient nos voisins outre-manche ! Nous retrouvons les mêmes paramètres que dans notre GPO&#8230; A noter et point important, la FGPP vaut sur la GPO si cette dernière est lié à un utilisateur ou un groupe d&rsquo;utilisateur.</p>



<h3 class="wp-block-heading">Authentification &amp; events</h3>



<p class="wp-block-paragraph">Pour bien comprendre le fonctionnement de l&rsquo;authentification, nous avons vu ci-haut que tout se passe sur nos DCs. Comme le système n&rsquo;est pas trop mal foutu (et qu&rsquo;accessoirement l&rsquo;authentification à un système relève de la plus grande criticité) tout est consigné dans les journaux d&rsquo;événements de sécurité. </p>



<p class="has-text-align-center wp-block-paragraph"><strong>Elle est pas belle la vie ?</strong></p>



<p class="wp-block-paragraph">Alors la question est la suivante, qu&rsquo;elle est ou plutôt qu&rsquo;elles sont les événements qui nous sont important ? Microsoft est vraiment sympa car ils ont pour nous <a href="https://learn.microsoft.com/fr-fr/windows-server/identity/ad-ds/plan/appendix-l--events-to-monitor">référencier les événements</a> à surveiller&#8230;</p>



<p class="wp-block-paragraph"><a href="https://www.youtube.com/watch?v=D85laB6j85U&amp;list=RDD85laB6j85U&amp;start_radio=1">Mon cœur cogne un truc esthétique</a> ! Vous voyez tout ce qu&rsquo;il est possible de faire en termes de sécurité et de suivi, gestion du SI ? Limite ça me fait ba**er. Je vais soumettre l&rsquo;ID d&rsquo;un nouveau projet au comité qui vie dans ma cafetière.</p>



<p class="wp-block-paragraph">Dans notre cas, précis il y a deux événements qui nous intéressent :</p>



<ul class="wp-block-list">
<li><strong>4624 :</strong> Hérité des événements 528 et 540, je cite « L’ouverture de session d’un compte s’est correctement déroulée. »</li>



<li><strong>4740 :</strong> Hérité de l&rsquo;événements 644, je cite « Un compte d’utilisateur a été verrouillé. »</li>
</ul>



<p class="wp-block-paragraph">Il est important de comprendre dans l&rsquo;annexe que la notion de criticité est celle qui remonte dans les journaux d&rsquo;événements. Personnellement certains événements pourraient être revu à la hausse. Enfin, c&rsquo;est mon opinion personnelle qui n&rsquo;a de crédit que pour le type qui écrit ces mots&#8230;</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="787" height="410" src="https://erwanguillemard.com/wp-content/uploads/2025/09/WIN_010_004_LogEvent.jpg" alt="" class="wp-image-3208" style="width:514px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2025/09/WIN_010_004_LogEvent.jpg 787w, https://erwanguillemard.com/wp-content/uploads/2025/09/WIN_010_004_LogEvent-300x156.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/09/WIN_010_004_LogEvent-768x400.jpg 768w" sizes="auto, (max-width: 787px) 100vw, 787px" /></figure>
</div>


<p class="wp-block-paragraph">C&rsquo;est donc dans le déclenchement de l&rsquo;évent <strong>4740</strong> que nous trouverons notre bonheur.</p>



<h2 class="wp-block-heading">Approche</h2>



<p class="wp-block-paragraph">La question est comment récupérer l&rsquo;information que le compte d&rsquo;un utilisateur ou compte de service est verrouillé ? </p>



<h3 class="wp-block-heading">Consultation des objets</h3>



<p class="wp-block-paragraph">Dans un premier temps, j&rsquo;ai pensé à scruter l&rsquo;état de chaque objet utilisateur ou ordinateur de l&rsquo;AD sur un intervalle définis dans le temps. </p>



<p class="wp-block-paragraph">Le professeur rend les copies, et c&rsquo;est un 4/20 qui tombe&#8230; L&rsquo;idée peut paraitre bien, mais c&rsquo;est mauvais. Oui je vais avoir l&rsquo;information des comptes verrouillés, mais cela n&rsquo;est pas du tout optimisé, cela va charger pour rien le serveur et générer des lenteurs et niveau proactivité c&rsquo;est un zéro pointé. Imaginons si nous étions sur un SI avec genre 2k d&rsquo;objets dans l&rsquo;AD ? </p>



<h3 class="wp-block-heading">Consultation des évènements déclenchés</h3>



<p class="wp-block-paragraph">La seconde approche consiste à définir une tache planifiée qui se déclenche sur un événement déclenché. Je l&rsquo;ai fait il y a peu pour contourner un dysfonctionnement non patché de MS, donc c&rsquo;est faisable. Mais je n&rsquo;aime pas cette méthode car elle ouvre une vieille blessure intellectuelle&#8230; Ce traumatisme tout bête me dite vous ? Comment retourner et transmettre un paramètre de l&rsquo;événement déclenché dans un script powershell&#8230; </p>



<p class="has-text-align-center wp-block-paragraph"><em>Je peux vous dire qu&rsquo;en 2015 je me suis torturé l&rsquo;esprit à un point ou écouter du Evanescence en slip le soir de la Saint Valentin avec un kebab douteux et de l&rsquo;alcool frelaté relève du plaisir (passe encore pour le kebab et l&rsquo;alcool m&rsquo;enfin).</em></p>



<p class="wp-block-paragraph">Dix ans après, je rempile sur cette problématique et spoiler je trouve la solution. Comme quoi, un informaticien c&rsquo;est comme un bon vin. Plus on le garde plus c&rsquo;est bon. Enfin tout dépend de l&rsquo;organisation. Oups pardon, je voulais dire la cave 🙂</p>



<p class="wp-block-paragraph">Vous l&rsquo;aurez compris ça sera la seconde méthode qui sera utilisé. Nous retournerons alors les attributs suivants :</p>



<ul class="wp-block-list">
<li>Le nom du compte qui lock</li>



<li>Le nom de l&rsquo;ordinateur, équipement source qui a cherché à s&rsquo;authentifier</li>



<li>Le nom de domaine</li>
</ul>



<p class="wp-block-paragraph">Là où j&rsquo;ai merdé, ce que j&rsquo;ai choisi de prendre en temps le temps de déclenchement du script et non le temps de lock de l&rsquo;event. Ce qui du coup dans une configuration spécifique fausse complétement les informations. Donc il doit y avoir une adaptation de ma part sur la première version du code&#8230;</p>



<h3 class="wp-block-heading"> Sécurité</h3>



<p class="wp-block-paragraph">Nous sommes dans le domaine ? Nous allons réaliser une tâche planifiée ? <a href="https://www.youtube.com/watch?v=F6lVw9sNVic">Alors la réponse elle est vite répondu mon copaing</a> ! Nous passerons par un compte de service managé, oui un gMSA<sup data-fn="9df0753e-8417-42bd-973d-7f3768f6f682" class="fn"><a href="#9df0753e-8417-42bd-973d-7f3768f6f682" id="9df0753e-8417-42bd-973d-7f3768f6f682-link">14</a></sup> comme d&rsquo;habitude (et dire que je ne jugeais que par les comptes de services restreint avant&#8230;).</p>



<p class="wp-block-paragraph">Les droits seront mis sur le script ainsi que l&rsquo;ensemble des dépendances des utilisateurs externes. Sur le répertoire en somme ? Oui c&rsquo;est ça&#8230;</p>



<h2 class="wp-block-heading">Structure</h2>



<p class="wp-block-paragraph">S&rsquo;agissant d&rsquo;un petit projet, je me suis demandé si je devais ou non découper ce billet en différent sous article. Au final, je ne pense pas. Il y a eu plus indigeste que ça par le passé 🙂</p>



<h3 class="wp-block-heading">Topographie – Applicative</h3>



<p class="wp-block-paragraph">Nous retrouvons donc l&rsquo;architecture classique de mes projets précédents (<a href="https://www.youtube.com/watch?v=1vTYQlzp5Oo">Etonnant non ?</a>) 🙂</p>



<p class="wp-block-paragraph">A la racine du répertoire, nous retrouvons cette fois ci UN fichier exécutable (au lieu de DEUX) :</p>



<ul class="wp-block-list">
<li><strong><mark style="background-color:rgba(0, 0, 0, 0);color:#40d9de" class="has-inline-color">SS_044_WIN_AD_LOCKACCOUNT_1.0.0_Services.ps1</mark></strong>&nbsp;: Fichier pensé pour fonctionner uniquement en mode service. Il ne peut être exécuté si et seulement si un event 4740 est levé. A voir si je fais un mode debug ou pas.</li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="677" height="266" src="https://erwanguillemard.com/wp-content/uploads/2025/10/WIN_010_007_TopoApps.jpg" alt="" class="wp-image-3219" srcset="https://erwanguillemard.com/wp-content/uploads/2025/10/WIN_010_007_TopoApps.jpg 677w, https://erwanguillemard.com/wp-content/uploads/2025/10/WIN_010_007_TopoApps-300x118.jpg 300w" sizes="auto, (max-width: 677px) 100vw, 677px" /></figure>
</div>


<p class="wp-block-paragraph">La suite se déroule en 3 répertoires distincts.</p>



<ul class="wp-block-list">
<li><strong>Modules :</strong>&nbsp;Répertoire contenant les modules powershell développé pour l’application. Aujourd’hui au nombre de deux dissociant la partie Windows Système et HTML.</li>



<li><strong>Log :</strong>&nbsp;Répertoire qui va contenir la ou les traces d’exécution du code si l’option est activée. Cela à son importance car il permet au petit gars qui à dev l’application dans sa cave de corriger les bugs. Le fichier ne prend pas de place et est réinitialisé à chaque lancement.</li>



<li><strong>Config :</strong> Répertoire contenant le fichier de configuration powershell. Je reviendrai plus en détail sur le contenu de ce fichier dans la partie Pratique. Contrairement aux projets DreamNebula et GreenRay, je n&rsquo;ai pas développé la fonction de reconstruction, régénération du fichier de configuration. Inutile car il n&rsquo;y a pas de mode manuel et il n&rsquo;y a pas grand-chose dans le fichier de conf&#8230;</li>
</ul>



<h3 class="wp-block-heading">Topographie – Logiciel</h3>



<p class="wp-block-paragraph">Je me passe par fénéantise la topographie du logiciel. Il n&rsquo;est pas complexe du tout&#8230; Pour faire simple, cela se résume au cycle de vie suivant :</p>



<ul class="wp-block-list">
<li><strong>0</strong>&nbsp;: Entrez dans le journal d&rsquo;événement de sécurité d&rsquo;un événement 4740.</li>



<li><strong>1</strong>&nbsp;: Déclenchement de la tâche planifiée sur l&rsquo;événement. Récupération des informations liées au verrouillage du compte utilisateur, le poste source et le domaine d&rsquo;application. Ces valeurs de type strings sont passés en argument du script powershell qui est exécuté <strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-3-color">SS_044_WIN_AD_LOCKACCOUNT_1.0.0_Services.ps1</mark></strong>.</li>



<li><strong>2</strong> : Le script lit la configuration, puis charge les modules. Une fois les modules chargés, le corps du mail est construit et ce dernier est envoyé par mail. Naturellement et selon les options activées, le mode debug redirigeras l&rsquo;ensemble des transactions powershell dans le fichier de log dans le répertoire du même nom.</li>
</ul>



<p class="wp-block-paragraph">Et le code ? Il est sur GitHub. Je ne souhaite pas le présenter. Toutefois, je partagerai volontiers ces derniers avec celui qui viendra m&rsquo;en exprimer le souhait. Ca sera l&rsquo;occasion de papoter un peu 🙂</p>



<h2 class="wp-block-heading">Pratique</h2>



<h3 class="wp-block-heading"><strong>Configuration</strong></h3>



<p class="wp-block-paragraph">Avant de lancer le script, il est nécessaire de faire un tour vers le fichier de configuration contenu dans le répertoire config à la racine du projet. Je vais prendre le temps de décrire chacune des parties de ce fichier.</p>



<p class="wp-block-paragraph">Le fichier se découpe en 1 partie et 1 sous-partie.</p>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td>* Une sous-partie globale qui définit les paramètres du script et de son fonctionnement<br><br>* Une sous-partie concernant l’envoie de notification SMTP<sup data-fn="6abe1078-a9b2-473e-9eaf-22a911773d11" class="fn"><a href="#6abe1078-a9b2-473e-9eaf-22a911773d11" id="6abe1078-a9b2-473e-9eaf-22a911773d11-link">15</a></sup>, futur feature/bug (rayer la mention inutile) à venir<br></td><td><img loading="lazy" decoding="async" width="550" height="212" class="wp-image-3212" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2025/09/WIN_010_005_configFile.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2025/09/WIN_010_005_configFile.jpg 631w, https://erwanguillemard.com/wp-content/uploads/2025/09/WIN_010_005_configFile-300x116.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>



<p class="wp-block-paragraph"></p>



<div class="wp-block-kadence-accordion alignnone"><div class="kt-accordion-wrap kt-accordion-id3190_f61230-f2 kt-accordion-has-2-panes kt-active-pane-0 kt-accordion-block kt-pane-header-alignment-left kt-accodion-icon-style-basic kt-accodion-icon-side-right" style="max-width:none"><div class="kt-accordion-inner-wrap" data-allow-multiple-open="false" data-start-open="none">
<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-1 kt-pane3190_e5b7a3-f5"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>1 &#8211; Global</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph"><strong>DEBUG&nbsp;:</strong>&nbsp;Prend la valeur boolean $true ou $false. Ce paramètre permet d’activer dans la console le mode debug.</p>



<p class="wp-block-paragraph"><strong>TRANSACTION_SCRIPT&nbsp;:</strong>&nbsp;Prend la valeur boolean $true ou $false. Ce paramètre active ou non la redirection des flux de la console dans un fichier de log. Le fichier est écrasé à chaque exécution du code.</p>



<p class="wp-block-paragraph"><strong>TRANSACTION_SCRIPT_FILE&nbsp;:</strong>&nbsp;Prend la valeur une chaine de caractère de type String. Indique le nom du fichier dans lequel toutes les sorties vont être redirigées. Attention ce dernier n’est pris en compte que si et seulement si le paramètre TRANSACTION_SCRIPT est définie à $true.</p>



<p class="wp-block-paragraph"><strong>AUTHOR&nbsp;:</strong>&nbsp;Prend la valeur une chaine de caractère de type String. Prend la valeur une chaine de caractère de type String. Le nom du créateur des scripts afin d’afficher l’information dans les différents rendus.</p>



<p class="wp-block-paragraph"><strong>VERSION&nbsp;:</strong>&nbsp;Prend la valeur une chaine de caractère de type String. Suivre l’évolution de versionning de l’outil et des scripts.</p>



<p class="wp-block-paragraph"><strong>DATE&nbsp;:</strong>&nbsp;Prend la valeur une chaine de caractère de type String. La date de la dernière modification et version disponible.</p>



<p class="wp-block-paragraph"><strong>MODULES&nbsp;:</strong>&nbsp;Prend en paramètre un tableau de chaine de caractère de type String. L’ensemble des modules définit dans ce tableau seront chargés au démarrage de l’application. Les modules doivent être présent dans le répertoire module au format .psm1</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-2 kt-pane3190_cef629-59"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>2 &#8211; SMTP</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph"><strong>FROM :</strong>&nbsp;Prend la valeur une chaine de caractère de type String. Va contenir l’adresse de l’émetteur. Dans la logique, j’aime à utiliser le nom du serveur ou du rôle, par exemple srv-task01@contoso.com.</p>



<p class="wp-block-paragraph"><strong>TO :</strong>&nbsp;Prend la valeur une chaine de caractère de type String. Va contenir l’adresse du destinataire qui doit recevoir le mail. Dans la logique, préférer une LD<sup><a href="https://erwanguillemard.com/projet-dream-nebula-vmware-kpi-partie-2-pratique/#70c9a30b-c61d-4e80-9e38-3b36d25b68ed">7</a></sup>&nbsp;ou une BAL<sup><a href="https://erwanguillemard.com/projet-dream-nebula-vmware-kpi-partie-2-pratique/#d60f938e-acfd-4304-9be7-299a91ca7350">8</a></sup>&nbsp;partagée pour que l’information et la responsabilité ne soit pas porter que par un individu.</p>



<p class="wp-block-paragraph"><strong>SERVERNAME :</strong>&nbsp;Prend la valeur une chaine de caractère de type String. Le nom du serveur qui fait relai SMTP, pour plus de sécurité, renseigner le FQDN<sup><a href="https://erwanguillemard.com/projet-dream-nebula-vmware-kpi-partie-2-pratique/#fc9e2e62-2fcd-4894-9978-6dd24a213c6c">9</a></sup>&nbsp;en lieu et place d’une IP.</p>



<p class="wp-block-paragraph"><strong>PORT :&nbsp;</strong>Prend la valeur une chaine de caractère de type String. Préciser le port d’écoute du serveur SMTP. 25, 587, 465. Libre à chacun.</p>
</div></div></div>
</div></div></div>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Avec la compréhension du fichier de configuration, je pense que nous pouvons passer à la suite, soit déployer l’application sur le serveur.</p>



<h3 class="wp-block-heading">Installation</h3>



<p class="wp-block-paragraph">Je passe alégrement la partie gMSA il y a un certain nombre d&rsquo;article sur le net (comme déjà dit dans des billets précédents) qui traite déjà du sujet. Pour le reste, j&rsquo;ai comme d&rsquo;habitude renforcé la sécurité et implémenté mes propres mécanismes (la preuve en est, j&rsquo;ai passé deux put**n d&rsquo;heures à trouver pourquoi ma tâche ne se lançait pas&#8230;).</p>



<p class="wp-block-paragraph">Là où ça se corse, c&rsquo;est au niveau de la tache planifiée. Si vous êtes sur un environnement possédant l&rsquo;expérience utilisateur, vous êtes sauvés. En revanche, dans mon cas sur mes serveurs CORE, je l&rsquo;ai mais alors bien profond dans la cucurbitacée&#8230; Voyez vous comme quoi une chose tout insignifiante soit il peut devenir un vrai casse-tête.</p>



<p class="wp-block-paragraph">Mais alors qu&rsquo;elle est cette petite chose insignifiante ?</p>



<h4 class="wp-block-heading">The ScheduledTask</h4>



<p class="wp-block-paragraph">A première vue, vous vous demandez pourquoi je parle de la tache planifiée&#8230; Il s&rsquo;avère que dans la version WINDOWS Core, nous ne pouvons pas créer de tache planifiée sur un déclenchement d&rsquo;événement. </p>



<p class="wp-block-paragraph">En réalité, nous pouvons constater également le dysfonctionnement sur un environnement WINDOWS avec expérience utilisateur. Il suffit d&rsquo;utiliser la console powershell (il suffit de revenir aux bases du RTFM<sup data-fn="58e956e0-f13f-4d89-8d26-b740eaec0aff" class="fn"><a href="#58e956e0-f13f-4d89-8d26-b740eaec0aff" id="58e956e0-f13f-4d89-8d26-b740eaec0aff-link">16</a></sup>).</p>



<p class="wp-block-paragraph">Donc comment faire une tache planifiée, si :</p>



<ul class="wp-block-list">
<li>Nous n&rsquo;avons pas d&rsquo;interface graphique</li>



<li>Les commandes powershell ne fonctionne pas</li>



<li>Les moyens de contournement comme WAC<sup data-fn="57ebb545-b5d9-40ef-ba6b-5f6925982680" class="fn"><a href="#57ebb545-b5d9-40ef-ba6b-5f6925982680" id="57ebb545-b5d9-40ef-ba6b-5f6925982680-link">17</a></sup> ne fonctionne pas (normale co**ard c&rsquo;est du powershell derrière)</li>



<li>La console mmc.exe en remote pas plus de chance</li>
</ul>



<p class="wp-block-paragraph">J&rsquo;ai essayé l&rsquo;exécutable schtasks mais je ne suis pas arrivé à mes fins. Vous vous voulez la vérité ? J&rsquo;ai lu qu&rsquo;il fallait faire une fichier XML et ajouté les champs blablablabla&#8230; Je me suis dit « No Way » je vais encore me foirer dans une balise ou je vais avoir un problème d&rsquo;encodage sur des caractères à la mord moi le noeud&#8230;</p>



<p class="wp-block-paragraph">J&rsquo;ai donc pensé à un autre moyen (tu as surtout épluché le net et les divers forum technet oui&#8230;). Pourquoi ne pas créer la tache sur mon poste avec des paramètres que je modifierai une fois importé ? Et bien ça voyez vous, ça fonctionne.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td>La création de la tâche ne pose pas de problème. <br>Je joins toutefois la petite capture pour la configuration des critères de déclenchement de l&rsquo;évent.</td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="650" height="277" class="wp-image-3225" style="width: 650px;" src="https://erwanguillemard.com/wp-content/uploads/2025/10/WIN_010_008_scheduledtasks.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2025/10/WIN_010_008_scheduledtasks.jpg 1220w, https://erwanguillemard.com/wp-content/uploads/2025/10/WIN_010_008_scheduledtasks-300x128.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/10/WIN_010_008_scheduledtasks-1024x436.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2025/10/WIN_010_008_scheduledtasks-768x327.jpg 768w" sizes="auto, (max-width: 650px) 100vw, 650px" /></td></tr></tbody></table></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Une fois la tache créée, exportons là et ouvrons cette dernière dans un éditeur de texte.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td>Oh mais dit donc, ça ne serait pas ?<br>Hé si le voilà notre fichier XML que l&rsquo;on devait construire via la commande svctasks.<br><br>Et dire qu&rsquo;une tache planifiée ça ressemble à ça.<br><br>Vous noterez que j&rsquo;ai occulté deux parties.<br><br>La première partie permet de récupérer les valeurs de l&rsquo;événement. Il sera nécessaire de modifier manuellement le fichier XML. Mais je reviendrai plus en détails sur ce point dans la sous partie à venir (c&rsquo;est ça ma frustration décennale !).<br><br>La seconde partie permet de passer les variables que contiennent les valeurs récupérées ci haut en paramètre de notre script.</td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="750" height="740" class="wp-image-3226" style="width: 750px;" src="https://erwanguillemard.com/wp-content/uploads/2025/10/WIN_010_009_scheduledtasksXML.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2025/10/WIN_010_009_scheduledtasksXML.jpg 898w, https://erwanguillemard.com/wp-content/uploads/2025/10/WIN_010_009_scheduledtasksXML-300x296.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/10/WIN_010_009_scheduledtasksXML-768x758.jpg 768w" sizes="auto, (max-width: 750px) 100vw, 750px" /></td></tr></tbody></table></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Bien. Maintenant importons la tâche 🙂</p>



<pre class="wp-block-code has-theme-palette-4-background-color has-background has-small-font-size"><code><mark style="background-color:var(--global-palette4)" class="has-inline-color has-theme-palette-9-color">&gt; $myTask = Get-Content "PATH_WHERE_XML_FILE\myTask.xml" | Out-String
&gt; Register-ScheduledTask -XML $myTask -TaskName "PROD_EVENT_4740" -TaskPath "\_ronelab"</mark></code></pre>



<h4 class="wp-block-heading">Récupérer les valeurs</h4>



<p class="wp-block-paragraph">Comme écrit plus haut, ce point va mettre fin à une frustration longue de 10 ans. Comment retourner les valeurs levées dans un event depuis l&rsquo;exécution d&rsquo;une tâche planifiée&#8230;</p>



<p class="wp-block-paragraph">Là j&rsquo;ai lu un nombre important de documentation pour comprendre comment cela fonctionne et comment mettre en œuvre la chose surtout. Toujours dans la démarche des 3S<sup data-fn="7ce633ec-415b-40dd-8fe5-9a646966011c" class="fn"><a href="#7ce633ec-415b-40dd-8fe5-9a646966011c" id="7ce633ec-415b-40dd-8fe5-9a646966011c-link">18</a></sup>. </p>



<p class="wp-block-paragraph">Dans les approches :</p>



<ul class="wp-block-list">
<li>Quel est la structure, schéma du fichier XML d&rsquo;une tache planifié : <a href="https://learn.microsoft.com/en-us/windows/win32/taskschd/task-scheduler-schema">Lien</a></li>



<li>Quel est la structure la plus adapté pour un eventTrigger de type complexe : <a href="https://learn.microsoft.com/en-us/windows/win32/taskschd/taskschedulerschema-eventtriggertype-complextype">Lien</a></li>



<li>Un exemple d&rsquo;implémentation : <a href="https://learn.microsoft.com/en-us/previous-versions//aa446889(v=vs.85)">Lien</a></li>
</ul>



<p class="wp-block-paragraph">Avec la plus grande sincérité du monde, je n&rsquo;avais pas il y a 10 ans de cela la maturité intellectuelle pour assimiler cette notion. Aujourd&rsquo;hui je rougis de l&rsquo;imbécile que je suis et de la simplicité et évidence de son mécanisme.</p>



<p class="wp-block-paragraph">Maintenant que j&rsquo;ai compris (mais que je n&rsquo;ai pas expliqué 🙂 Il faut bien que vous vous investissiez aussi non ? Passons à la compréhension d&rsquo;un événement. Il faudra sélectionner un évent 4740 et se rendre dans la vue Detail en Friendly, mais nous pouvons aussi se la jouer XML.</p>



<p class="wp-block-paragraph">Nous notons deux catégories que nous pouvons déployer :</p>



<ul class="wp-block-list">
<li><strong>System :</strong> Va contenir l&rsquo;ensemble des balises et valeurs propres au déclenchement de la tâche avec les propriétés de l&rsquo;évent. Comme dit plus tôt, l&rsquo;un des attributs qui pourrait nous intéresser est le temps où l&rsquo;évent a été inscrit dans le journal. Je prenais le temps de lancement du script, mais ce dernier n&rsquo;est pas la bonne source de temps. Bref, il convient alors de noter le chemin de l&rsquo;attribut qui nous intéresse :
<ul class="wp-block-list">
<li><mark style="background-color:rgba(0, 0, 0, 0);color:#3fa34a" class="has-inline-color">Event</mark><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-1-color">/System/TimeCreated/</mark><mark style="background-color:rgba(0, 0, 0, 0);color:#ea1212" class="has-inline-color">@SystemTime</mark></li>
</ul>
</li>
</ul>



<p class="has-text-align-center wp-block-paragraph"><strong>Il est important de noter que tout part de notre événement d&rsquo;où le <mark style="background-color:rgba(0, 0, 0, 0);color:#3fa34a" class="has-inline-color">Event</mark> en début de path. Puis le chemin <mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-1-color">/System/TimeCreated/</mark> jusqu&rsquo;à la variable qui contient notre valeur spécifiée par le <mark style="background-color:rgba(0, 0, 0, 0);color:#ea1212" class="has-inline-color">@</mark> devant <mark style="background-color:rgba(0, 0, 0, 0);color:#ea1212" class="has-inline-color">SystemTime</mark></strong></p>



<ul class="wp-block-list">
<li><strong>EventData : </strong>Va contenir l&rsquo;ensemble des balises et valeurs propres à l&rsquo;évènement de sécurité déclenché. Ce qui nous intéresse ce sont les attributs TargetUserName qui contient le login utilisé et verrouillé, TargetDomainName qui contient le nom de poste cible où la connexion a tenté d&rsquo;être initier et le SubjectDomainName qui contient le nom de domaine cible du compte verrouillé. Soit alors les les chemins suivants :
<ul class="wp-block-list">
<li><mark style="background-color:rgba(0, 0, 0, 0);color:#3fa34a" class="has-inline-color">Event</mark><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-1-color">/EventData/Data/</mark><mark style="background-color:rgba(0, 0, 0, 0);color:#ea1212" class="has-inline-color">@[Name= »TargetDomainName »]</mark></li>



<li><mark style="background-color:rgba(0, 0, 0, 0);color:#3fa34a" class="has-inline-color">Event</mark><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-1-color">/EventData/Data/</mark><mark style="background-color:rgba(0, 0, 0, 0);color:#ea1212" class="has-inline-color">@[Name= »SubjectDomainName »]</mark></li>



<li><mark style="background-color:rgba(0, 0, 0, 0);color:#3fa34a" class="has-inline-color">Event</mark><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-theme-palette-1-color">/EventData/Data/</mark><mark style="background-color:rgba(0, 0, 0, 0);color:#ea1212" class="has-inline-color">@[Name= »TargetUserName »]</mark></li>
</ul>
</li>
</ul>



<p class="wp-block-paragraph">Alors comment intégrer proprement dans notre fichier XML correspondant à notre tache planifier nos 4 paths pour récupérer les valeurs ?</p>



<p class="wp-block-paragraph">Normalement, nous avons eu toutes les informations ci-haut pour réaliser l&rsquo;opération 🙂</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="627" height="87" src="https://erwanguillemard.com/wp-content/uploads/2025/10/WIN_010_010_valueQueries.jpg" alt="" class="wp-image-3232" srcset="https://erwanguillemard.com/wp-content/uploads/2025/10/WIN_010_010_valueQueries.jpg 627w, https://erwanguillemard.com/wp-content/uploads/2025/10/WIN_010_010_valueQueries-300x42.jpg 300w" sizes="auto, (max-width: 627px) 100vw, 627px" /></figure>
</div>


<p class="wp-block-paragraph">Nous avons défini nos variables qui contiennent nos données. Il suffit alors de passer nos variables en arguments de notre script. Je passe une nouvelle fois mon tour. Le passage de variable en arguments d&rsquo;un script powershell c&rsquo;est un basique. La modification peut être réalisé en graphique dans le TaskScheduler ou directement dans le fichier XML.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="787" height="44" src="https://erwanguillemard.com/wp-content/uploads/2025/10/WIN_010_011_actionArgs.jpg" alt="" class="wp-image-3233" srcset="https://erwanguillemard.com/wp-content/uploads/2025/10/WIN_010_011_actionArgs.jpg 787w, https://erwanguillemard.com/wp-content/uploads/2025/10/WIN_010_011_actionArgs-300x17.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/10/WIN_010_011_actionArgs-768x43.jpg 768w" sizes="auto, (max-width: 787px) 100vw, 787px" /></figure>
</div>


<p class="wp-block-paragraph">Maintenant, il ne reste plus qu&rsquo;à réimporter la tache de nouveau puis de réaliser un test.</p>



<h3 class="wp-block-heading">Reporting</h3>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td>Pour le test, rien de plus facile&#8230;<br>J&rsquo;ai choisie d&rsquo;initier une connexion à l&rsquo;une des ressources des domaines à partir d&rsquo;un compte pour lequel la FGPP est active :<br><br>* RONEALB\erwan.guillemard<br><br>Depuis une instance de bureau à distance, je décide de mettre en application ma plus belle couche 8 en saisissant 5 fois mon mot de passe de manière erroné.<br><br>Windows m&rsquo;informe que mon compte a été verrouillé à la suite de plusieurs tentatives d&rsquo;authentifications infructueuses.<br><br>Quelques minutes après, je reçois le mail ci-contre.</td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="650" height="575" class="wp-image-3215" style="width: 650px;" src="https://erwanguillemard.com/wp-content/uploads/2025/09/WIN_010_006_mail.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2025/09/WIN_010_006_mail.jpg 702w, https://erwanguillemard.com/wp-content/uploads/2025/09/WIN_010_006_mail-300x265.jpg 300w" sizes="auto, (max-width: 650px) 100vw, 650px" /></td></tr></tbody></table></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">En regardant en détail, j&rsquo;ai bien les informations qui m&rsquo;informe que le compte erwan.guillemard a été verrouillé à la suite d&rsquo;une plusieurs tentatives de connexions depuis la machine EGWKS-RDB01 le 26/09/2025 à 20:31:40 sur le domaine RONELAB.</p>



<p class="wp-block-paragraph">Toutefois et si je regarde avec précision le déclenchement de la tâche, j&rsquo;ai 7 minutes de retard dans le temps affiché dans mon mail et la date d&rsquo;entrée dans le journal de sécurité. Ce retard s&rsquo;explique par une mauvaise prise en compte de la valeur DateTime. Je pensais que la valeur Datetime du script serait définis lors du lancement du script à la détection de l&rsquo;événement. Cependant, mon SI étant très ancien, la tache met une bonne dizaine de minutes (en grossissant le trait) à se lancer. Ainsi je génère un delta ce qui n&rsquo;est pas super en termes de sécurité. Il faudrait donc que je récupère la valeur DateTime présente dans l&rsquo;événement.</p>



<h2 class="wp-block-heading">Conclusion</h2>



<p class="wp-block-paragraph">Je suis content d&rsquo;avoir réinventé mon propre système de notification sur le verrouillage d&rsquo;un compte utilisateur dans un domaine à partir de la problématique qu&rsquo;avait il y a maintenant plusieurs années un ancien collègue. Ainsi, j&rsquo;ai pu combler une problématique vieille de 10 ans en relation avec les événements et les taches planifiées (dans mon projet de mémoire sur la supervision Shinken).</p>



<p class="wp-block-paragraph">J&rsquo;ai également constaté que les modules développés dans les projets précédents m&rsquo;ont fait gagner un temps monstrueux. Cela me permet donc de me dire et de m&rsquo;auto-confirmer que premièrement je ne fais pas que de la merde, secondement qu&rsquo;à partir de maintenant je vais prendre un chemin différent quant à l&rsquo;ensemble des problématiques qui nécessite un dev en powershell.</p>



<p class="wp-block-paragraph">Le plus difficile restera je le pense de toujours garder une vision claire et qui réponde au 3S.</p>



<p class="wp-block-paragraph">Si je devais être efficient, je reprendrais mes bouts de code existant concernant la création de ticket dans la solution ITSM de COMBODO (ITOP) pour générer un ticket en criticité haute pour le verrouillage d&rsquo;un compte. De cette manière, le centre de service ou les équipes locales (internalisées ou externalisées) pourraient être proactives quant à tous comportements succès en relation avec l&rsquo;authentification et l&rsquo;accès à des ressources. Ce qui pourrait alors se résumer selon notre bon vieux William Shakespear par « Le plaisir d&rsquo;un travail en guérit la peine ».</p>



<p class="wp-block-paragraph">J&rsquo;ai encore une fois repris une idée. Je pense qu&rsquo;il serait temps que je reprenne un peu de temps pour innover. Certes, comprendre et mettre en pratique les idées de mes paires et une bonne chose mais je pense qu&rsquo;il est souhaitable de vivre pleinement une nouvelle fois cette satisfaction personnelle. Mon ultime rature se limitera à « <strong>Est ce que cela valait ce billet ?</strong>« .</p>



<p class="wp-block-paragraph">Je vous laisse jugez de tout ça et prendre contact si vous voulez le bout de code 🙂</p>



<p class="wp-block-paragraph">Le mot de la fin&nbsp;:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Vous êtes surqualifié pour le poste ? Que neni, j&rsquo;aime les salsifis et je sens vaguement le chou. Je vous embauche et Toper Harley reste dans la boucle. Merci, j&rsquo;ai les films de programmateurs.</p>
<cite>Erwan GUILLEMARD</cite></blockquote>



<h2 class="wp-block-heading">Sources</h2>



<ul class="wp-block-list">
<li><a href="https://cyber.gouv.fr/sites/default/files/2021/10/anssi-guide-authentification_multifacteur_et_mots_de_passe.pdf">ANSSI : Guide d&rsquo;authentification multi facteur et mots de passe</a></li>



<li><a href="https://learn.microsoft.com/fr-fr/windows-server/security/windows-authentication/credentials-processes-in-windows-authentication">WINDOWS : Authentification &amp; Identification</a></li>



<li><a href="https://learn.microsoft.com/fr-fr/windows-server/identity/ad-ds/plan/appendix-l--events-to-monitor">WINDOWS : Evénements à surveiller</a></li>



<li><a href="https://learn.microsoft.com/fr-fr/windows/win32/wes/eventschema-eventtype-complextype">WINDOWS : Type Complexe EventType</a></li>



<li><a href="https://learn.microsoft.com/fr-fr/windows-server/security/kerberos/kerberos-authentication-overview">WINDOWS : KERBEROS</a></li>



<li><a href="https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/schtasks-create">WINDOWS : Svctasks</a></li>



<li><a href="https://learn.microsoft.com/en-us/powershell/module/scheduledtasks/new-scheduledtask?view=windowsserver2025-ps">WINDOWS : New-ScheduledTask</a></li>



<li><a href="https://learn.microsoft.com/en-us/powershell/module/scheduledtasks/register-scheduledtask?view=windowsserver2025-ps">WINDOWS : Register-ScheduledTask</a></li>



<li><a href="https://learn.microsoft.com/en-us/windows/win32/taskschd/taskschedulerschema-eventtriggertype-complextype">WINDOWS : Event &amp; Queries</a></li>
</ul>


<ol class="wp-block-footnotes"><li id="ee3df61f-a519-4425-8d3e-e24b9d4968ce"><strong>AD :</strong> Active Directory <a href="#ee3df61f-a519-4425-8d3e-e24b9d4968ce-link" aria-label="Aller à la note de bas de page 1">↩︎</a></li><li id="8a83b3e9-a47a-428b-8eba-109292ff90d3"><strong>PSSI :</strong> Politique de Sécurité des Systèmes d&rsquo;Informations <a href="#8a83b3e9-a47a-428b-8eba-109292ff90d3-link" aria-label="Aller à la note de bas de page 2">↩︎</a></li><li id="c83eaf51-a4dd-41a4-bd7a-588ddcc4945b"><strong>OSI :</strong> Open Systems Interconnection <a href="#c83eaf51-a4dd-41a4-bd7a-588ddcc4945b-link" aria-label="Aller à la note de bas de page 3">↩︎</a></li><li id="b2669417-059d-4c69-984f-1d328949f770"><strong>SI</strong> : Système d&rsquo;Informations <a href="#b2669417-059d-4c69-984f-1d328949f770-link" aria-label="Aller à la note de bas de page 4">↩︎</a></li><li id="18e69ed2-abc8-46a5-a20d-72f7eb983f95"><strong>DNS :</strong> Domain Name Service <a href="#18e69ed2-abc8-46a5-a20d-72f7eb983f95-link" aria-label="Aller à la note de bas de page 5">↩︎</a></li><li id="0721b4af-c255-4f7e-809c-b8c9286fd00d"><strong>DC :</strong> Domain Controller <a href="#0721b4af-c255-4f7e-809c-b8c9286fd00d-link" aria-label="Aller à la note de bas de page 6">↩︎</a></li><li id="4fcc112f-3418-4247-99c0-2a394beaf5ae"><strong>NTLM :</strong> NT Lan Manager <a href="#4fcc112f-3418-4247-99c0-2a394beaf5ae-link" aria-label="Aller à la note de bas de page 7">↩︎</a></li><li id="3e2a8bc8-2b61-4fd4-b3b4-db26e8c201c2"><strong>TGT</strong> : Ticket Granting Ticket <a href="#3e2a8bc8-2b61-4fd4-b3b4-db26e8c201c2-link" aria-label="Aller à la note de bas de page 8">↩︎</a></li><li id="3f2db1e6-f957-433a-a801-b23ae4ea333f"><strong>KDC :</strong> Key Distribution Center <a href="#3f2db1e6-f957-433a-a801-b23ae4ea333f-link" aria-label="Aller à la note de bas de page 9">↩︎</a></li><li id="b16e4796-0ae1-459e-91b3-49a78e1a49d6"><strong>TGS :</strong> Ticket Granting Server <a href="#b16e4796-0ae1-459e-91b3-49a78e1a49d6-link" aria-label="Aller à la note de bas de page 10">↩︎</a></li><li id="f45783de-eede-4502-9d26-843d9efb5a18"><strong>GPO :</strong> Group Policy Object <a href="#f45783de-eede-4502-9d26-843d9efb5a18-link" aria-label="Aller à la note de bas de page 11">↩︎</a></li><li id="bfa3d65a-4536-4421-a219-6600a3b2a55b"><strong>ANSSI :</strong> Agence Nationale de Sécurité des Systèmes Informatiques <a href="#bfa3d65a-4536-4421-a219-6600a3b2a55b-link" aria-label="Aller à la note de bas de page 12">↩︎</a></li><li id="e9521bc3-b710-4c91-bf97-8570fc3d067b"><strong>FGPP :</strong> Fine Grained Password Policy <a href="#e9521bc3-b710-4c91-bf97-8570fc3d067b-link" aria-label="Aller à la note de bas de page 13">↩︎</a></li><li id="9df0753e-8417-42bd-973d-7f3768f6f682"><strong>gMSA :</strong> Group Managed Service Account <a href="#9df0753e-8417-42bd-973d-7f3768f6f682-link" aria-label="Aller à la note de bas de page 14">↩︎</a></li><li id="6abe1078-a9b2-473e-9eaf-22a911773d11"><strong>SMTP :</strong> Simple Mail Transfert Protocol <a href="#6abe1078-a9b2-473e-9eaf-22a911773d11-link" aria-label="Aller à la note de bas de page 15">↩︎</a></li><li id="58e956e0-f13f-4d89-8d26-b740eaec0aff"><strong>RTFM :</strong> Read The F*cking Manual <a href="#58e956e0-f13f-4d89-8d26-b740eaec0aff-link" aria-label="Aller à la note de bas de page 16">↩︎</a></li><li id="57ebb545-b5d9-40ef-ba6b-5f6925982680"><strong>WAC :</strong> Windows Admin Center <a href="#57ebb545-b5d9-40ef-ba6b-5f6925982680-link" aria-label="Aller à la note de bas de page 17">↩︎</a></li><li id="7ce633ec-415b-40dd-8fe5-9a646966011c"><strong>3S :</strong> Simple, Standard, Sécurisé <a href="#7ce633ec-415b-40dd-8fe5-9a646966011c-link" aria-label="Aller à la note de bas de page 18">↩︎</a></li></ol>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>PROJET &#8211; Dream Nebula, VMWare KPI Partie 2 : Pratique</title>
		<link>https://erwanguillemard.com/projet-dream-nebula-vmware-kpi-partie-2-pratique/</link>
		
		<dc:creator><![CDATA[Erwan Guillemard]]></dc:creator>
		<pubDate>Sun, 07 Sep 2025 18:52:20 +0000</pubDate>
				<category><![CDATA[Applications]]></category>
		<category><![CDATA[Projets]]></category>
		<category><![CDATA[Application]]></category>
		<category><![CDATA[Projet]]></category>
		<category><![CDATA[VEEAMONE]]></category>
		<category><![CDATA[VMWare]]></category>
		<guid isPermaLink="false">https://erwanguillemard.com/?p=3134</guid>

					<description><![CDATA[L&#8217;objectif de cette partie est d&#8217;expliquer comment déployer l&#8217;outil. Toutefois et sans les sources, ce dernier ne sert pas à grand chose. Cependant, si le projet devient communautaire, alors ce dernier prendra tout son sens 🙂 Comme dit précédemment pour GreenRay, il s&#8217;agit là d&#8217;un Readme dans un format différent du traditionnel fichier txt et...]]></description>
										<content:encoded><![CDATA[


<p class="wp-block-paragraph">L&rsquo;objectif de cette partie est d&rsquo;expliquer comment déployer l&rsquo;outil. Toutefois et sans les sources, ce dernier ne sert pas à grand chose. Cependant, si le projet devient communautaire, alors ce dernier prendra tout son sens 🙂</p>



<p class="wp-block-paragraph">Comme dit précédemment pour GreenRay, il s&rsquo;agit là d&rsquo;un Readme dans un format différent du traditionnel fichier txt et du wiki.</p>



<h3 class="wp-block-heading">Prérequis</h3>



<p class="wp-block-paragraph">Dernier point avant de taper dans le fond du sujet, le déploiement ne se fait que dans un environnement WINDOWS (Workstation ou Server) ayant au minimum la version Powershell 5 d’installer et qui prend en charge les communication TLS<sup data-fn="c2fa8834-05a4-4bc2-92dd-aa0fe3b68489" class="fn"><a href="#c2fa8834-05a4-4bc2-92dd-aa0fe3b68489" id="c2fa8834-05a4-4bc2-92dd-aa0fe3b68489-link">1</a></sup>&nbsp;en version 1.2 minimum.</p>



<p class="wp-block-paragraph">Bien que pas j’ai automatisé un bon nombre d’installation de dépendances certaines restent tout de même à déployer manuellement. Toutefois, les outils à déployer manuellement concernent la partie exploitation de la donnée qui peuvent et doivent être dissocier de la partie serveur.</p>



<p class="wp-block-paragraph">Naturellement et bien que cela coule de source, LES PRIVILEGES ADMINISTRATEURS sont nécessaire au premier usage pour l’installation des dépendances (logique non&nbsp;?).</p>



<h4 class="wp-block-heading">Back End</h4>



<p class="wp-block-paragraph">Les prérequis sont les suivants :</p>



<ul class="wp-block-list">
<li><strong>Module powershell PSSQLite :</strong> Ce dernier est déployé automatiquement par l’application. Toutefois, il est possible d’installer cette dernière manuellement.</li>



<li><strong>Module powershell PowerCLI VMWare :</strong> J&rsquo;ai à ce jour une version alpha du déploiement automatique du module. Toutefois ce dernier n&rsquo;est pas intégré dans le projet Dream Nebula, mais dans un projet à part SS_042_VMWareInstalled-PowerCLI. Il sera donc nécessaire de déployer ce dernier manuellement.</li>
</ul>



<div class="wp-block-kadence-accordion alignnone"><div class="kt-accordion-wrap kt-accordion-id3134_3bcabc-1c kt-accordion-has-2-panes kt-active-pane-0 kt-accordion-block kt-pane-header-alignment-left kt-accodion-icon-style-basic kt-accodion-icon-side-right" style="max-width:none"><div class="kt-accordion-inner-wrap" data-allow-multiple-open="false" data-start-open="none">
<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-1 kt-pane3134_447f52-26"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title">Vérifier la présence du module</span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">La commande des plus classique, Get-InstalledModule pour lister les modules présents sur le système.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-d570dd0ea3a6fc5e9d7b3303c6a05cbf"><code>&gt; Get-InstalledModule | Where-Object {$_.Name -eq "PSSQLite" -or $_.Name -like "VMWare.*"}</code></pre>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-2 kt-pane3134_385c3a-a8"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title">Installer le module</span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">Toujours vérifier en amont la disponibilité du module dans la liste des repos et lancer l’installation. Il est possible de filtrer et d’installer une version spécifique.</p>



<pre class="wp-block-code has-theme-palette-9-color has-theme-palette-4-background-color has-text-color has-background has-link-color wp-elements-f267b7bbbf2fc3781a8d389b42a1bef6"><code>&gt; Find-Module -Name "VMWare.PowerCLI"
&gt; Install-Module -Name "VMWare.PowerCLI"</code></pre>



<p class="wp-block-paragraph">L&rsquo;un des points intéressants, c&rsquo;est que je viens de découvrir que le module VMWare.PowerCLI est déprécié et remplacé par le module VCF.PowerCLI.</p>



<p class="wp-block-paragraph">Grand bien nous fasse, nous allons installer les deux versions (pour l&rsquo;exemple). Il conviendra de mon côté d&rsquo;adapter le module dédié à l&rsquo;extraction des données VMWare. Cela peut être une broutille comme cela peut être complexe. Les joies des devs 🙂</p>



<p class="wp-block-paragraph"></p>
</div></div></div>
</div></div></div>



<h4 class="wp-block-heading">Front End</h4>



<p class="wp-block-paragraph">Sur le serveur ou poste qui servira à exploiter les données il sera nécessaire d’installer les dépendances suivantes&nbsp;:</p>



<ul class="wp-block-list">
<li>Drivers ODBC<sup data-fn="4b387ac7-d458-4404-94be-041eac1df36a" class="fn"><a href="#4b387ac7-d458-4404-94be-041eac1df36a" id="4b387ac7-d458-4404-94be-041eac1df36a-link">2</a></sup>&nbsp;for SQLite3</li>



<li>Microsoft PowerBI (si powerBI utilisé)</li>



<li>DB<sup data-fn="fea49933-c957-436d-b291-535ce6c4e1e8" class="fn"><a href="#fea49933-c957-436d-b291-535ce6c4e1e8" id="fea49933-c957-436d-b291-535ce6c4e1e8-link">3</a></sup>&nbsp;Browser for SQLite (en option mais pratique pour débugger ou altérer des données dans les tables)</li>
</ul>



<p class="wp-block-paragraph">L’installation des divers composants ne représente aucun point bloquant. J’ajoute en fin de ce billet les sources pour télécharger les différents composants. Pour vraiment prendre la main de chacun le processus d’installation est disponible ci-dessous.</p>



<div class="wp-block-kadence-accordion alignnone"><div class="kt-accordion-wrap kt-accordion-id3134_f10c4a-a5 kt-accordion-has-3-panes kt-active-pane-0 kt-accordion-block kt-pane-header-alignment-left kt-accodion-icon-style-basic kt-accodion-icon-side-right" style="max-width:none"><div class="kt-accordion-inner-wrap" data-allow-multiple-open="false" data-start-open="none">
<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-1 kt-pane3134_deee4e-ce"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Driver ODBC</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">L’un des points problématiques à mon sens se porte sur l’origine du site qui n’est pas en HTTPS. Mon expérience de jadis sur la technologie SQLite fait que j’ai dû utiliser ce site. Je n’ai jamais eu de problème.</p>



<p class="wp-block-paragraph">Oui, j’ai dû chercher dans les mémoires que j’avais rédigé à l’époque…</p>



<p class="wp-block-paragraph"></p>


<div class="kb-gallery-wrap-id-3134_8d95b2-c0 alignnone wp-block-kadence-advancedgallery"><div class="kb-gallery-ul kb-gallery-non-static kb-gallery-type-fluidcarousel kb-gallery-id-3134_8d95b2-c0 kb-gallery-caption-style-bottom-hover kb-gallery-filter-none" data-image-filter="none" data-lightbox-caption="true"><div class="kt-blocks-carousel splide kt-carousel-container-dotstyle-dark kt-carousel-arrowstyle-whiteondark kt-carousel-dotstyle-dark kb-slider-group-arrow kb-slider-arrow-position-center" data-slider-anim-speed="400" data-slider-scroll="1" data-slider-arrows="true" data-slider-dots="true" data-slider-hover-pause="false" data-slider-auto="" data-slider-speed="7000" data-slider-type="fluidcarousel" data-slider-center-mode="true" data-slider-gap="10px" data-slider-gap-tablet="10px" data-slider-gap-mobile="10px" data-show-pause-button="false"><div class="splide__track"><ul class="kt-blocks-carousel-init kb-blocks-fluid-carousel splide__list"><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_003_5_odbc_install.jpg" width="501" height="390" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_003_5_odbc_install.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_003_5_odbc_install.jpg" data-id="3067" class="wp-image-3067 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_003_5_odbc_install.jpg 501w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_003_5_odbc_install-300x234.jpg 300w" sizes="auto, (max-width: 501px) 100vw, 501px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_003_2_odbc_install.jpg" width="504" height="392" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_003_2_odbc_install.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_003_2_odbc_install.jpg" data-id="3064" class="wp-image-3064 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_003_2_odbc_install.jpg 504w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_003_2_odbc_install-300x233.jpg 300w" sizes="auto, (max-width: 504px) 100vw, 504px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_003_3_odbc_install.jpg" width="500" height="391" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_003_3_odbc_install.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_003_3_odbc_install.jpg" data-id="3065" class="wp-image-3065 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_003_3_odbc_install.jpg 500w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_003_3_odbc_install-300x235.jpg 300w" sizes="auto, (max-width: 500px) 100vw, 500px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_003_4_odbc_install.jpg" width="502" height="392" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_003_4_odbc_install.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_003_4_odbc_install.jpg" data-id="3066" class="wp-image-3066 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_003_4_odbc_install.jpg 502w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_003_4_odbc_install-300x234.jpg 300w" sizes="auto, (max-width: 502px) 100vw, 502px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_003_1_odbc_install.jpg" width="500" height="390" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_003_1_odbc_install.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_003_1_odbc_install.jpg" data-id="3063" class="wp-image-3063 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_003_1_odbc_install.jpg 500w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_003_1_odbc_install-300x234.jpg 300w" sizes="auto, (max-width: 500px) 100vw, 500px" /></div></div></figure></div></div></li></ul></div></div></div></div></div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-2 kt-pane3134_1b8f3c-c4"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>PowerBI</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">Pas de difficulté en soi. Il est toutefois opportun de posséder un compte Microsoft…</p>



<p class="wp-block-paragraph"></p>


<div class="kb-gallery-wrap-id-3134_127a8f-4a alignnone wp-block-kadence-advancedgallery"><div class="kb-gallery-ul kb-gallery-non-static kb-gallery-type-fluidcarousel kb-gallery-id-3134_127a8f-4a kb-gallery-caption-style-bottom-hover kb-gallery-filter-none" data-image-filter="none" data-lightbox-caption="true"><div class="kt-blocks-carousel splide kt-carousel-container-dotstyle-dark kt-carousel-arrowstyle-whiteondark kt-carousel-dotstyle-dark kb-slider-group-arrow kb-slider-arrow-position-center" data-slider-anim-speed="400" data-slider-scroll="1" data-slider-arrows="true" data-slider-dots="true" data-slider-hover-pause="false" data-slider-auto="" data-slider-speed="7000" data-slider-type="fluidcarousel" data-slider-center-mode="true" data-slider-gap="10px" data-slider-gap-tablet="10px" data-slider-gap-mobile="10px" data-show-pause-button="false"><div class="splide__track"><ul class="kt-blocks-carousel-init kb-blocks-fluid-carousel splide__list"><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_004_2_pbi_install.jpg" width="495" height="395" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_004_2_pbi_install.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_004_2_pbi_install.jpg" data-id="3069" class="wp-image-3069 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_004_2_pbi_install.jpg 495w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_004_2_pbi_install-300x239.jpg 300w" sizes="auto, (max-width: 495px) 100vw, 495px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_004_1_pbi_install.jpg" width="496" height="394" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_004_1_pbi_install.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_004_1_pbi_install.jpg" data-id="3068" class="wp-image-3068 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_004_1_pbi_install.jpg 496w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_004_1_pbi_install-300x238.jpg 300w" sizes="auto, (max-width: 496px) 100vw, 496px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_004_3_pbi_install.jpg" width="496" height="394" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_004_3_pbi_install.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_004_3_pbi_install.jpg" data-id="3070" class="wp-image-3070 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_004_3_pbi_install.jpg 496w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_004_3_pbi_install-300x238.jpg 300w" sizes="auto, (max-width: 496px) 100vw, 496px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_004_4_pbi_install.jpg" width="496" height="394" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_004_4_pbi_install.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_004_4_pbi_install.jpg" data-id="3071" class="wp-image-3071 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_004_4_pbi_install.jpg 496w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_004_4_pbi_install-300x238.jpg 300w" sizes="auto, (max-width: 496px) 100vw, 496px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_004_6_pbi_install.jpg" width="497" height="396" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_004_6_pbi_install.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_004_6_pbi_install.jpg" data-id="3073" class="wp-image-3073 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_004_6_pbi_install.jpg 497w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_004_6_pbi_install-300x239.jpg 300w" sizes="auto, (max-width: 497px) 100vw, 497px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_004_7_pbi_install.jpg" width="497" height="395" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_004_7_pbi_install.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_004_7_pbi_install.jpg" data-id="3074" class="wp-image-3074 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_004_7_pbi_install.jpg 497w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_004_7_pbi_install-300x238.jpg 300w" sizes="auto, (max-width: 497px) 100vw, 497px" /></div></div></figure></div></div></li></ul></div></div></div></div></div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-3 kt-pane3134_3d7818-9d"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>DB Browser for SQLite</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">Toujours en mode enfonçage de porte… C&rsquo;est pas un copié/collé de l&rsquo;article précédent ? Chhhhhuuuuuuttttttt</p>


<div class="kb-gallery-wrap-id-3134_a281c1-12 alignnone wp-block-kadence-advancedgallery"><div class="kb-gallery-ul kb-gallery-non-static kb-gallery-type-fluidcarousel kb-gallery-id-3134_a281c1-12 kb-gallery-caption-style-bottom-hover kb-gallery-filter-none" data-image-filter="none" data-lightbox-caption="true"><div class="kt-blocks-carousel splide kt-carousel-container-dotstyle-dark kt-carousel-arrowstyle-whiteondark kt-carousel-dotstyle-dark kb-slider-group-arrow kb-slider-arrow-position-center" data-slider-anim-speed="400" data-slider-scroll="1" data-slider-arrows="true" data-slider-dots="true" data-slider-hover-pause="false" data-slider-auto="" data-slider-speed="7000" data-slider-type="fluidcarousel" data-slider-center-mode="true" data-slider-gap="10px" data-slider-gap-tablet="10px" data-slider-gap-mobile="10px" data-show-pause-button="false"><div class="splide__track"><ul class="kt-blocks-carousel-init kb-blocks-fluid-carousel splide__list"><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_005_1_dbw_install.jpg" width="493" height="388" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_005_1_dbw_install.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_005_1_dbw_install.jpg" data-id="3075" class="wp-image-3075 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_005_1_dbw_install.jpg 493w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_005_1_dbw_install-300x236.jpg 300w" sizes="auto, (max-width: 493px) 100vw, 493px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_005_2_dbw_install.jpg" width="494" height="389" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_005_2_dbw_install.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_005_2_dbw_install.jpg" data-id="3076" class="wp-image-3076 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_005_2_dbw_install.jpg 494w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_005_2_dbw_install-300x236.jpg 300w" sizes="auto, (max-width: 494px) 100vw, 494px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_005_3_dbw_install.jpg" width="499" height="391" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_005_3_dbw_install.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_005_3_dbw_install.jpg" data-id="3077" class="wp-image-3077 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_005_3_dbw_install.jpg 499w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_005_3_dbw_install-300x235.jpg 300w" sizes="auto, (max-width: 499px) 100vw, 499px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_005_4_dbw_install.jpg" width="498" height="392" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_005_4_dbw_install.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_005_4_dbw_install.jpg" data-id="3078" class="wp-image-3078 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_005_4_dbw_install.jpg 498w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_005_4_dbw_install-300x236.jpg 300w" sizes="auto, (max-width: 498px) 100vw, 498px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_005_6_dbw_install.jpg" width="497" height="388" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_005_6_dbw_install.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_005_6_dbw_install.jpg" data-id="3079" class="wp-image-3079 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_005_6_dbw_install.jpg 497w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_005_6_dbw_install-300x234.jpg 300w" sizes="auto, (max-width: 497px) 100vw, 497px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_005_7_dbw_install.jpg" width="502" height="391" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_005_7_dbw_install.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_005_7_dbw_install.jpg" data-id="3080" class="wp-image-3080 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_005_7_dbw_install.jpg 502w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_005_7_dbw_install-300x234.jpg 300w" sizes="auto, (max-width: 502px) 100vw, 502px" /></div></div></figure></div></div></li></ul></div></div></div></div></div></div></div>
</div></div></div>



<h3 class="wp-block-heading">Configuration</h3>



<p class="wp-block-paragraph">Avant de lancer le script, il est nécessaire de faire un tour vers le fichier de configuration contenu dans le répertoire config à la racine du projet. Je vais prendre le temps de décrire chacune des parties de ce fichier.</p>



<p class="wp-block-paragraph">Le fichier se découpe en 1 partie et 5 sous-parties.</p>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td>* Une sous-partie globale qui définit les paramètres du script et de son fonctionnement<br><br>* Une sous-partie dédiée à la VCSA<sup data-fn="0f1cb5c5-cbaa-458f-ba19-d4ce7153e316" class="fn"><a href="#0f1cb5c5-cbaa-458f-ba19-d4ce7153e316" id="0f1cb5c5-cbaa-458f-ba19-d4ce7153e316-link">4</a></sup>&nbsp;permettant d’établir la connexion à l’API<sup data-fn="84b0b406-fc6f-443c-a541-0ebf607c41f1" class="fn"><a href="#84b0b406-fc6f-443c-a541-0ebf607c41f1" id="84b0b406-fc6f-443c-a541-0ebf607c41f1-link">5</a></sup>.<br><br>* Une sous-partie dédiée à l’export des données au format CSV, reliquat de la version 1 LEGACY<br><br>* Une sous-partie concernant l’envoie de notification SMTP<sup data-fn="52980565-3e3c-49b0-b7af-7317334f7fb9" class="fn"><a href="#52980565-3e3c-49b0-b7af-7317334f7fb9" id="52980565-3e3c-49b0-b7af-7317334f7fb9-link">6</a></sup>, futur feature/bug (rayer la mention inutile) à venir<br><br>* Une sous-partie dédiée à la base de données SQLite. Faut bien stocker les données quelques parts<br><br>* Une sous-partie concernant le paramétrage du mode service en tant que tâche planifiée</td><td class="has-text-align-center" data-align="center"><img loading="lazy" decoding="async" width="550" height="356" class="wp-image-3139" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_006_pratique_config_psd.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_006_pratique_config_psd.jpg 1016w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_006_pratique_config_psd-300x194.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_006_pratique_config_psd-768x497.jpg 768w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Après cette longue énumération rébarbative, regardons en détail chacune des parties et sous-parties. Bandant n&rsquo;est il pas ? J&rsquo;avoue que je ne fais pas ch**r du tout car mes deux applications ont le même tronc, socle, base&#8230; Vous voyez quoi ? 🙂</p>



<div class="wp-block-kadence-accordion alignnone"><div class="kt-accordion-wrap kt-accordion-id3134_2e0ae9-43 kt-accordion-has-6-panes kt-active-pane-0 kt-accordion-block kt-pane-header-alignment-left kt-accodion-icon-style-basic kt-accodion-icon-side-right" style="max-width:none"><div class="kt-accordion-inner-wrap" data-allow-multiple-open="false" data-start-open="none">
<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-1 kt-pane3134_b5b324-73"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>1 &#8211; Global</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph"><strong>DEBUG&nbsp;:</strong>&nbsp;Prend la valeur boolean $true ou $false. Ce paramètre permet d’activer dans la console le mode debug.</p>



<p class="wp-block-paragraph"><strong>TRANSACTION_SCRIPT&nbsp;:</strong>&nbsp;Prend la valeur boolean $true ou $false. Ce paramètre active ou non la redirection des flux de la console dans un fichier de log. Le fichier est écrasé à chaque exécution du code.</p>



<p class="wp-block-paragraph"><strong>TRANSACTION_SCRIPT_FILE&nbsp;:</strong>&nbsp;Prend la valeur une chaine de caractère de type String. Indique le nom du fichier dans lequel toutes les sorties vont être redirigées. Attention ce dernier n’est pris en compte que si et seulement si le paramètre TRANSACTION_SCRIPT est définie à $true.</p>



<p class="wp-block-paragraph"><strong>AUTHOR&nbsp;:</strong>&nbsp;Prend la valeur une chaine de caractère de type String. Prend la valeur une chaine de caractère de type String. Le nom du créateur des scripts afin d’afficher l’information dans les différents rendus.</p>



<p class="wp-block-paragraph"><strong>VERSION&nbsp;:</strong>&nbsp;Prend la valeur une chaine de caractère de type String. Suivre l’évolution de versionning de l’outil et des scripts.</p>



<p class="wp-block-paragraph"><strong>DATE&nbsp;:</strong>&nbsp;Prend la valeur une chaine de caractère de type String. La date de la dernière modification et version disponible.</p>



<p class="wp-block-paragraph"><strong>MODULES&nbsp;:</strong>&nbsp;Prend en paramètre un tableau de chaine de caractère de type String. L’ensemble des modules définit dans ce tableau seront chargés au démarrage de l’application. Les modules doivent être présent dans le répertoire module au format .psm1</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-2 kt-pane3134_0bd97b-8a"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>2 &#8211; VCSA</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph"><strong>VCSA_NAME :</strong> Prend en paramètre une chaine de caractère de type String.&nbsp;Il correspond au nom fqdn de l&rsquo;appliance. C&rsquo;est à partir de cette valeur que la connexion cherchera a être établi.</p>



<p class="wp-block-paragraph"><strong>VCSA_PORT :</strong> Prend en paramètre en entier de type Integer. Il s’agit du port sur lequel l’API est publiée. Par défaut la valeur est 443.</p>



<p class="wp-block-paragraph"><strong>LOGIN_USER :</strong> Le nom du compte qui sera utilisé à s&rsquo;authentifier à l&rsquo;appliance. Attention, les droits, privilèges doivent être en adéquation.</p>



<p class="wp-block-paragraph"><strong>LOGIN_FILE_CLIXML :</strong> Prend en paramètre une chaine de caractère de type String.&nbsp;Il correspond au chemin du fichier qui contient le login et le mot de passe chiffré servant à son authentifier.</p>



<p class="wp-block-paragraph"><strong>VCSA_PATH_DIR_LESSPRIVILEGE :</strong> Prend en paramètre une chaine de caractère de type String. Doit pointer sur un fichier CSV avec les droits et permissions strictement nécessaire VMWare à l&rsquo;application. Oui, le rôle Administrator n&rsquo;est pas la solution à tous les maux !</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-3 kt-pane3134_c40465-b9"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>3 &#8211; VCSA Export </strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph"><strong>VCSA_PATH_DIR_HTML : </strong>Prend en paramètre une chaine de caractère de type String. Pointe sur le sous-répertoire Export. Ou un autre répertoire de votre guise. Va contenir le site web html de l&rsquo;ensemble des rapports.</p>



<p class="wp-block-paragraph"><strong>VCSA_PATH_DIR_HTML_CUSTOMER :</strong> Prend en paramètre une chaine de caractère de type String. Sous répertoire du répertoire Export, ce répertoire va contenir l&rsquo;ensemble des rapports par bulles ou client.</p>



<p class="wp-block-paragraph"><strong>VCSA_PATH_DIR_HTML_INFRASTRUCTURE :</strong> Prend en paramètre une chaine de caractère de type String. Sous répertoire du répertoire Export, ce répertoire va contenir l&rsquo;ensemble des rapports propre aux ressources d&rsquo;infrastructures.</p>



<p class="wp-block-paragraph"><strong>VCSA_THRESHOLD_WARNING : </strong>Prend en paramètre un entier de type Int32. Correspond à la valeur d&rsquo;avertissement défini par l&rsquo;administrateur. Dans mon cas, 70 pour 70%. Au delà de ce seuil, des modifications visuelles sont appliquées.</p>



<p class="wp-block-paragraph"><strong>VCSA_THRESHOLD_CRITICIAL :</strong> Prend en paramètre un entier de type Int32. Correspond à la valeur critique défini par l&rsquo;administrateur. Dans mon cas, 90 pour 90%. Au delà de ce seuil, des modifications visuelles sont appliquées.</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-4 kt-pane3134_b737f8-48"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>4 &#8211; SMTP</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph"><strong>FROM :</strong>&nbsp;Prend la valeur une chaine de caractère de type String. Va contenir l’adresse de l’émetteur. Dans la logique, j’aime à utiliser le nom du serveur ou du rôle, par exemple srv-task01@contoso.com.</p>



<p class="wp-block-paragraph"><strong>TO :</strong>&nbsp;Prend la valeur une chaine de caractère de type String. Va contenir l’adresse du destinataire qui doit recevoir le mail. Dans la logique, préférer une LD<sup data-fn="70c9a30b-c61d-4e80-9e38-3b36d25b68ed" class="fn"><a href="#70c9a30b-c61d-4e80-9e38-3b36d25b68ed" id="70c9a30b-c61d-4e80-9e38-3b36d25b68ed-link">7</a></sup>&nbsp;ou une BAL<sup data-fn="d60f938e-acfd-4304-9be7-299a91ca7350" class="fn"><a href="#d60f938e-acfd-4304-9be7-299a91ca7350" id="d60f938e-acfd-4304-9be7-299a91ca7350-link">8</a></sup>&nbsp;partagée pour que l’information et la responsabilité ne soit pas porter que par un individu.</p>



<p class="wp-block-paragraph"><strong>SERVERNAME :</strong>&nbsp;Prend la valeur une chaine de caractère de type String. Le nom du serveur qui fait relai SMTP, pour plus de sécurité, renseigner le FQDN<sup data-fn="fc9e2e62-2fcd-4894-9978-6dd24a213c6c" class="fn"><a href="#fc9e2e62-2fcd-4894-9978-6dd24a213c6c" id="fc9e2e62-2fcd-4894-9978-6dd24a213c6c-link">9</a></sup>&nbsp;en lieu et place d’une IP.</p>



<p class="wp-block-paragraph"><strong>PORT :&nbsp;</strong>Prend la valeur une chaine de caractère de type String. Préciser le port d’écoute du serveur SMTP. 25, 587, 465. Libre à chacun.</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-5 kt-pane3134_90bd2f-48"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>5 &#8211; SQLite</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph"><strong>DB_NAME :</strong>&nbsp;Prend la valeur une chaine de caractère de type String. Permet d’indiquer le nom du fichier de la base de données. Quoi qu’il arrive, l’extension doit être .sqlite ou .sqlite3. Personnellement, j’ai deux fichiers de configuration ou plutôt deux instances. L’une en SS043_EGU_test.sqlite et SS043_EGU.sqlite, comme ça facile de jouer et de debug sans impacter l’instance de production.</p>



<p class="wp-block-paragraph"><strong>DB_PATH :</strong>&nbsp;Prend la valeur une chaine de caractère de type String. L’emplacement de la BDD. Par défaut, l’emplacement se trouve dans le répertoire du répertoire parent sous /database.</p>
</div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-6 kt-pane3134_1a5060-63"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>6 &#8211; Scheduled Task</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">Cette sous partie est assez délicate à traiter car il dépend de deux cas de figure. Le poste est il joint au domaine ou non.</p>



<p class="wp-block-paragraph">Selon la réponse apporter, le cheminement n’est pas le même.</p>



<p class="wp-block-paragraph">Dans le cas d’un poste lié au domaine, je recommande maintenant d’user des comptes de services pour une sécurité renforcée (mais qu’est ce qu’il parle bien dit donc…). Il vous sera donc nécessaire de créer un gMSA<sup data-fn="a99b244f-7576-47ce-b0ca-b1376c0babb4" class="fn"><a href="#a99b244f-7576-47ce-b0ca-b1376c0babb4" id="a99b244f-7576-47ce-b0ca-b1376c0babb4-link">10</a></sup>&nbsp;et tout le toutim. Je pourrai faire un billet sur cette fonctionnalité, mais le web relève déjà de plusieurs articles de la sorte. Je passe mon tour cette fois ci.</p>



<p class="wp-block-paragraph">Dans le cas où la création de gMSA n’est pas possible (une histoire de niveau fonctionnel encore… Mais que font ces SysAdmins ! ) ou que le serveur est hors domaine, il sera nécessaire de créer un compte utilisateur restreints. Dans ce cas précis, il est préférable de définir le compte manuellement et de désactiver la création automatisée.</p>



<p class="wp-block-paragraph"><strong>TASK_ENABLE :&nbsp;</strong>Prend la valeur boolean $true ou $false. Ce paramètre permet d’activer la création automatisée ou non de la tâche planifiée.</p>



<p class="wp-block-paragraph"><strong>TASK_PATH_FOLDERNAME :&nbsp;</strong>Prend la valeur une chaine de caractère de type String. Ce paramètre permet de donner un peu plus de lisibilité dans l’arborescence du planificateur des tâches. Ainsi l’ensemble de mes tâches sont sous \_ronelab\. Ce qui rend bien plus facile la gestion et maintenance de ces dernières.</p>



<p class="wp-block-paragraph"><strong>TASK_NAME :</strong>&nbsp;Prend la valeur une chaine de caractère de type String. Va contenir le nom de la tâche. Rien de bien sorcier.</p>



<p class="wp-block-paragraph"><strong>TASK_TRIGGER_HOUR :</strong>&nbsp;Prend la valeur une chaine de caractère de type String. Définir l’heure d’exécution de la tâche. Pour ce qui est du jour, ici le paramétrage est en dur dans le code. Pourquoi ? Car je souhaite une exécution quotidienne.</p>



<p class="wp-block-paragraph"><strong>TASK_DOMAIN :&nbsp;</strong>Prend la valeur une chaine de caractère de type String. Indiquer le nom de domaine auquel le server est joint. Dans le cadre d’un compte hors domaine, le nom du serveur est nécessaire.</p>



<p class="wp-block-paragraph"><strong>TASK_USER :</strong>&nbsp;Prend la valeur une chaine de caractère de type String. Dans le cadre d’un serveur joint à un domaine il faudra préciser le nom du compte de service suivi du caractère&nbsp;<strong>$</strong>. Il est possible de communiquer un compte utilisateur. Attention toutefois dans le dernier cas à renseigner le mot de passe manuellement, ce dernier n’étant pas pris en compte pour l’instant.</p>
</div></div></div>
</div></div></div>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">J’ai ajouté dans la solution la possibilité d’éditer le fichier directement depuis l’interface console. Par sécurité, j’ai ajouté une fonctionnalité de régénération automatique du fichier en cas de suppression ou de corruption. Hé oui, j’en ai eu marre de me repalucher le fichier de configuration plusieurs fois à la mano…</p>



<p class="wp-block-paragraph">Avec la compréhension du fichier de configuration, je pense que nous pouvons passer à la suite, soit déployer l’application sur le serveur.</p>



<h3 class="wp-block-heading">Installation</h3>



<p class="wp-block-paragraph">Comme toujours, je dédie une disque et volume pour mon application, 5Go suffit amplement. </p>



<p class="wp-block-paragraph">Les raisons sont toujours les mêmes et cela reste un point immuable de mon caractère professionnel. Il est impératif de dissocier le système d&rsquo;exploitation des applications ou data pour se prémunir de toutes anomalies du système et d&rsquo;un dépassement d&rsquo;espace de stockage. Nous générons des logs et nous avons une base de données foutre bleu ! (Pourquoi bleu&#8230; Personne n&rsquo;a jamais su m&rsquo;expliquer&#8230;).</p>



<p class="wp-block-paragraph">l suffit de déposer le répertoire à la racine du lecteur D:\ ou d’ailleurs puis de définir les paramètres du fichier de configuration. Et puis c’est tout. 🙂</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="804" height="341" src="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_007_pratique_config_items.jpg" alt="" class="wp-image-3145" style="width:667px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_007_pratique_config_items.jpg 804w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_007_pratique_config_items-300x127.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_007_pratique_config_items-768x326.jpg 768w" sizes="auto, (max-width: 804px) 100vw, 804px" /></figure>
</div>


<p class="wp-block-paragraph">Lancer le script SS_43_1.0.0_VMWare-PowerCLI.ps1 pour réaliser les opérations d’initialisation et vérification des dépendances. On me chuchote dans l’oreillette qu’il faut faire un clic droit Exécuter avec Powershell (en tant Administrateur).</p>



<p class="has-text-align-center wp-block-paragraph"><strong><mark style="background-color:rgba(0, 0, 0, 0);color:#ff0000" class="has-inline-color">Attention</mark> : Seule la première initialisation nécessite les droits d&rsquo;administrations.</strong></p>



<p class="wp-block-paragraph">Lors de la première initialisation <strong>EN MODE MANUEL (MAIN)</strong>, les credentials de connexion vous seront demandés dans le contexte de votre machine et de <mark style="background-color:rgba(0, 0, 0, 0);color:#ff0000" class="has-inline-color"><em><strong>VOTRE</strong></em></mark> session pour générer le fichier CLIXML.</p>



<figure class="wp-block-table aligncenter"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td><img loading="lazy" decoding="async" width="550" height="125" class="wp-image-3148" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_1_pratique_cli_menu.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_1_pratique_cli_menu.jpg 463w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_1_pratique_cli_menu-300x68.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td><td><img loading="lazy" decoding="async" width="550" height="188" class="wp-image-3149" style="width: 550px;" src="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_2_pratique_cli_menu.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_2_pratique_cli_menu.jpg 462w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_2_pratique_cli_menu-300x103.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></td></tr></tbody></table></figure>



<p class="wp-block-paragraph">Dans la première image, nous constatons la présence de 4 menu.</p>



<ul class="wp-block-list">
<li><strong>[01] Edit Configuration</strong> : Permet d&rsquo;ouvrir le fichier de configuration et de modifier ce dernier.</li>



<li><strong>[02] Restore Default Settings :</strong> Permet de lancer un rappel max ou le sort de magie blanche Vie Max / Vie 2 sur le fichier de configuration pour ressusciter, régénérer celui-ci face au spell UTLIMA que vous avez lancé sur ce pauvre fichier ! </li>



<li><strong>[03] Reload Configuration</strong> : Permet de recharger le fichier de configuration et l&rsquo;ensemble des variables de l&rsquo;application.</li>



<li><strong>[04] VCSA Establish Session </strong>: Permet d&rsquo;ouvrir la connexion à l&rsquo;appliance VMWare à partir des éléments transmis plus tôt.</li>
</ul>



<p class="wp-block-paragraph">Si la connexion aboutie, vous devriez voir apparaitre ce même menu avec d&rsquo;autres options complémentaires.</p>



<ul class="wp-block-list">
<li><strong>[05] VCSA Close Session :</strong> Permet de terminer la session en cours.</li>



<li><strong>[06] Add VCSA Role (CSV File)</strong> : Permet de créer le rôle VMWAre avec les bonnes permissions pour l&rsquo;appliance. Entre nous, je l&rsquo;ai fait une fois et l&rsquo;automatiser et bien&#8230; c&rsquo;est chiant&#8230; C&rsquo;est pourquoi, je dois revoir le fonctionnement. Aujourd&rsquo;hui il est plus simple de le faire manuellement. M&rsquo;enfin c&rsquo;est comme ça.</li>



<li><strong>[07] Single Node Summary</strong> : Permet de faire l&rsquo;inventaire et l&rsquo;affichage des ressources d&rsquo;une single node VMWare dans la console. Je reviendrai sur ce point plus tard. 🙂 Un peu de suspense pardi.</li>



<li><strong>[08] Cluster Node Summary </strong>: La même chose que précédemment mais pour une cluster VMWare avec plusieurs nodes 🙂</li>



<li><strong>[09] VMWare Inventory</strong> : Génère les rapports au format HTML. Je présenterai rapidement la chose, mais de mon point de vue, remplacer par les rapports PowerBI.</li>



<li><strong>[10] Send Bill Report</strong> : Envoi les données par mail pour une potentielle refacturation. </li>
</ul>



<p class="wp-block-paragraph">Naturellement, si le mode DEBUG est activé et que la redirection des sorties dans un fichier de log également, nous devons avoir en amont les entrées ci-dessous.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="983" height="499" src="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_3_pratique_cli_menu.jpg" alt="" class="wp-image-3150" style="width:565px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_3_pratique_cli_menu.jpg 983w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_3_pratique_cli_menu-300x152.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_3_pratique_cli_menu-768x390.jpg 768w" sizes="auto, (max-width: 983px) 100vw, 983px" /></figure>
</div>


<p class="wp-block-paragraph">Concernant le mode Service, le fonctionnement et partiellement le même sans les fonctionnalités manuelles. En gros et pour faire simple, cela suit simplement le cycle de vie :</p>



<ul class="wp-block-list">
<li>Je vérifie les prérequis pour l&rsquo;application</li>



<li>Je m&rsquo;authentifie à l&rsquo;appliance</li>



<li>J&rsquo;exécute mes requetes</li>



<li>Je récupère les données et les stocks dans la BDD</li>



<li>Je me casse Whiskas</li>
</ul>



<p class="wp-block-paragraph">Donc normalement notre tache planifiée est là. Je passe encore une fois mon tour sur l&rsquo;usage et la création du compte gMSA.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="863" src="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_4_pratique_cli_menu-1024x863.jpg" alt="" class="wp-image-3153" style="width:427px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_4_pratique_cli_menu-1024x863.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_4_pratique_cli_menu-300x253.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_4_pratique_cli_menu-768x647.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_4_pratique_cli_menu.jpg 1107w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="wp-block-paragraph">A ce stade, nous avons donc installé l&rsquo;ensemble des modules (VMware et PSSQLite), déployé la tache planifiée avec le mode service, généré notre BDD et réalisé notre première extraction.</p>



<p class="wp-block-paragraph">Comme pour GreenRay dans le cas de possible erreur, je rédigerai une quatrième partie KB.</p>



<p class="wp-block-paragraph">Et maintenant si nous regardions le rendu ? </p>



<h3 class="wp-block-heading">Exploitation des données, Reporting</h3>



<p class="wp-block-paragraph">Je pense aborder cette partie en 3 axes. Une vue de la console CLI, la vue HTML bien que j&rsquo;hésite encore sur son sort (<a href="https://www.youtube.com/watch?v=6D9vAItORgE&amp;list=RD6D9vAItORgE&amp;start_radio=1&amp;ab_channel=GunsNRosesVEVO">Vivre ou laisser mourrir ?</a>) et pour terminer la partie Microsoft PowerBI.</p>



<p class="wp-block-paragraph">Mais avant toutes choses, ayant passé un peu moins de 300 heures sur le projet, je vous fournit le modèle de liaison de données (MLD) de ma BDD lié à PBI.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="526" src="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_5_pratique_cli_menu-1024x526.jpg" alt="" class="wp-image-3155" style="width:430px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_5_pratique_cli_menu-1024x526.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_5_pratique_cli_menu-300x154.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_5_pratique_cli_menu-768x394.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_5_pratique_cli_menu.jpg 1132w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="wp-block-paragraph">Je ne suis pas satisfait de ma BDD. Il manque un élément crucial. Bien qu&rsquo;implémenté dans le projet GreenRay, je ne l&rsquo;ai pas fait ici. Oui, il n&rsquo;y a pas de log. Ca, voyez vous c&rsquo;est moche&#8230; Aussi moche que Robert HUE au congrès du MEDEF&#8230; </p>



<p class="wp-block-paragraph">Après bien que ce soit SS_043, il est la première graine, la première application vis à vis de SS_034. D&rsquo;où je crois cet oubli, absence, négligence ou fénéantise de ma part sur la BDD. Pardon SS_043&#8230;</p>



<h4 class="wp-block-heading">CLI View</h4>



<p class="wp-block-paragraph">Comme vu ci-haut, j&rsquo;ai voulu permettre d&rsquo;un simple petit coup de powershell d&rsquo;afficher la synthèse VMware d&rsquo;un node. Sans pour avoir à jongler d&rsquo;un onglet à l&rsquo;autre dans l&rsquo;interface web ESXi ou VCSA.</p>



<p class="wp-block-paragraph">C&rsquo;est juste du one shot. Toutefois, je ne pourrais pas montrer de vu CLI d&rsquo;un cluster. Je vous garantit toutefois qu&rsquo;il est fonctionnel. Néanmoins, je ne peux partager les données.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td>Bref, si nous appuyons sur <strong>[07] Single Node Summary</strong> nous afficherions dans notre console une synthèse de notre hote, l&rsquo;usage CPU, RAM ainsi que l&rsquo;ensemble de la consommation du stockage de chaque datastore.<br><br>Par amusement, j&rsquo;ai même refait l&rsquo;association des VMNic avec les vSwitchs et les groupes de ports&#8230; (Drôle de loisir&#8230;).<br><br>A la base, je voulais savoir si lors d&rsquo;ajout de ressource je pouvais ou non ajouter une ressource virtuelle sans tomber dans le piège de surallocation.</td><td><img loading="lazy" decoding="async" width="650" height="1236" class="wp-image-3157" style="width: 650px;" src="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_6_pratique_cli_menu.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_6_pratique_cli_menu.jpg 859w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_6_pratique_cli_menu-158x300.jpg 158w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_6_pratique_cli_menu-539x1024.jpg 539w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_6_pratique_cli_menu-768x1460.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_6_pratique_cli_menu-808x1536.jpg 808w" sizes="auto, (max-width: 650px) 100vw, 650px" /></td></tr></tbody></table></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">La différence avec la vue cluster ? J&rsquo;affiche les informations et configurations de HA et DRS. Toutefois, je dois revoir la configuration réseau. L&rsquo;affichage ne prends pas en compte pour l&rsquo;instant les DVS<sup data-fn="bb2361e4-bb5b-48c7-a749-eaf96c3c490a" class="fn"><a href="#bb2361e4-bb5b-48c7-a749-eaf96c3c490a" id="bb2361e4-bb5b-48c7-a749-eaf96c3c490a-link">11</a></sup>. </p>



<h4 class="wp-block-heading">HTLM Report</h4>



<p class="wp-block-paragraph">Je partais dans l&rsquo;idée, dans une entreprise de faire dans un petit serveur web un push des données pour que toutes personnes puissent consulter les données. Voilà pourquoi j&rsquo;ai généré des fichiers HTML simple qui reprend les informations CLI vu plus haut en ajoutant une vue par bulle/client.</p>



<p class="wp-block-paragraph">Pour cela il faudra se rendre dans le sous répertorie export :</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="798" height="231" src="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_7_pratique_cli_menu.jpg" alt="" class="wp-image-3159" srcset="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_7_pratique_cli_menu.jpg 798w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_7_pratique_cli_menu-300x87.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_7_pratique_cli_menu-768x222.jpg 768w" sizes="auto, (max-width: 798px) 100vw, 798px" /></figure>
</div>


<p class="wp-block-paragraph">Cela ouvrira de facto lors de l&rsquo;ouverture du fichier main.html votre navigateur par défaut. L&rsquo;ensemble du site est navigable (oui je me suis fait iech avec les liens hypertextes. En plus ils sont dynamiques selon les données recueillis par l&rsquo;application. J&rsquo;ai fait un effort !).</p>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td>Nous retrouvons donc la partie infrastructure avec les informations d&rsquo;inventaire du système puis selon l&rsquo;infrastructure matérielle une synthèse d&rsquo;une infrastructure mononode ou en cluster.<br><br>Ensuite et par bulle, nous avons une synthèse dans l&rsquo;état actuel des ressources consommés.<br><br>Pour la suite, je serai malheureusement contraint d&rsquo;anonymiser certaines données. </td><td><img loading="lazy" decoding="async" width="650" height="800" class="wp-image-3160" style="width: 650px;" src="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_8_pratique_cli_html.jpg" alt="" srcset="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_8_pratique_cli_html.jpg 699w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_8_pratique_cli_html-244x300.jpg 244w" sizes="auto, (max-width: 650px) 100vw, 650px" /></td></tr></tbody></table></figure>



<p class="has-text-align-center wp-block-paragraph"><strong><mark style="background-color:rgba(0, 0, 0, 0);color:#ff0000" class="has-inline-color">Attention</mark> : J&rsquo;ai fait chacune des pages web à la main en mode Notepad++ et ISE. Alors s&rsquo;il vous plait soyez indulgent.</strong></p>


<div class="kb-gallery-wrap-id-3134_5d83af-11 alignnone wp-block-kadence-advancedgallery"><div class="kb-gallery-ul kb-gallery-non-static kb-gallery-type-fluidcarousel kb-gallery-id-3134_5d83af-11 kb-gallery-caption-style-bottom-hover kb-gallery-filter-none" data-image-filter="none" data-lightbox-caption="true"><div class="kt-blocks-carousel splide kt-carousel-container-dotstyle-dark kt-carousel-arrowstyle-whiteondark kt-carousel-dotstyle-dark kb-slider-group-arrow kb-slider-arrow-position-center" data-slider-anim-speed="400" data-slider-scroll="1" data-slider-arrows="true" data-slider-dots="true" data-slider-hover-pause="false" data-slider-auto="" data-slider-speed="7000" data-slider-type="fluidcarousel" data-slider-center-mode="true" data-slider-gap="10px" data-slider-gap-tablet="10px" data-slider-gap-mobile="10px" data-show-pause-button="false"><div class="splide__track"><ul class="kt-blocks-carousel-init kb-blocks-fluid-carousel splide__list"><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_9_pratique_cli_html.jpg" width="751" height="668" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_9_pratique_cli_html.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_9_pratique_cli_html.jpg" data-id="3161" class="wp-image-3161 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_9_pratique_cli_html.jpg 751w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_9_pratique_cli_html-300x267.jpg 300w" sizes="auto, (max-width: 751px) 100vw, 751px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_10_pratique_cli_html-1024x649.jpg" width="1024" height="649" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_10_pratique_cli_html.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_10_pratique_cli_html.jpg" data-id="3162" class="wp-image-3162 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_10_pratique_cli_html-1024x649.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_10_pratique_cli_html-300x190.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_10_pratique_cli_html-768x487.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_10_pratique_cli_html.jpg 1337w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_11_pratique_cli_html.jpg" width="802" height="592" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_11_pratique_cli_html.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_11_pratique_cli_html.jpg" data-id="3163" class="wp-image-3163 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_11_pratique_cli_html.jpg 802w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_11_pratique_cli_html-300x221.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_11_pratique_cli_html-768x567.jpg 768w" sizes="auto, (max-width: 802px) 100vw, 802px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-carousel-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_12_pratique_cli_html-634x1024.jpg" width="634" height="1024" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_12_pratique_cli_html.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_12_pratique_cli_html.jpg" data-id="3164" class="wp-image-3164 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_12_pratique_cli_html-634x1024.jpg 634w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_12_pratique_cli_html-186x300.jpg 186w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_12_pratique_cli_html-768x1241.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_12_pratique_cli_html-950x1536.jpg 950w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_12_pratique_cli_html.jpg 1071w" sizes="auto, (max-width: 634px) 100vw, 634px" /></div></div></figure></div></div></li></ul></div></div></div></div>


<p class="wp-block-paragraph">Il reste encore du boulot, j&rsquo;ai trouvé ça fun et rigolo à développer. M&rsquo;enfin c&rsquo;est juste ma spécialité (le gars modeste&#8230;). Ma spécialité c&rsquo;est de réinventer la roue 🙂</p>



<h4 class="wp-block-heading">PowerBI Report</h4>



<p class="wp-block-paragraph">Là, contrairement aux deux modèles de reporting ci-haut vise un tout autre dimension. Car là nous allons pouvoir élargir notre vision dans le temps en affichant et travaillant sur un historique des ressources.</p>



<p class="wp-block-paragraph">En des mots plus simple, l&rsquo;évolution sur 13 mois glissant des ressources. 🙂</p>



<p class="wp-block-paragraph">Ouvrer le fichier présent dans le répertoire Report.</p>



<p class="wp-block-paragraph">Une fois ouvert, changer la source de données. Sinon vous allez avoir une erreur ODBC. Naturellement les drivers ODBC pour SQLite ont été installé préalablement sinon c’est la mort assurée…</p>



<div class="wp-block-kadence-accordion alignnone"><div class="kt-accordion-wrap kt-accordion-id3134_76fcc7-47 kt-accordion-has-3-panes kt-active-pane-0 kt-accordion-block kt-pane-header-alignment-left kt-accodion-icon-style-basic kt-accodion-icon-side-right" style="max-width:none"><div class="kt-accordion-inner-wrap" data-allow-multiple-open="false" data-start-open="none">
<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-1 kt-pane3134_8107d8-ce"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Paramétrage de la source</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">Depuis l’application PowerBI,&nbsp;<em>Fichier &gt; Options et paramètres &gt; Paramètres de la source de données</em>.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="557" height="608" src="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_010_1_report.jpg" alt="" class="wp-image-3051" style="width:209px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_010_1_report.jpg 557w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_010_1_report-275x300.jpg 275w" sizes="auto, (max-width: 557px) 100vw, 557px" /></figure>
</div></div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-2 kt-pane3134_47ccc0-c7"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Changer la source existence</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">S’affiche à vous la configuration où charger les données. Il y a de forte chance que vous vous retrouviez avec l’un de mes Paths. Changer alors le chemin pour pointer vers votre BDD.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="795" height="622" src="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_010_2_report.jpg" alt="" class="wp-image-3054" style="width:408px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_010_2_report.jpg 795w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_010_2_report-300x235.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/04/PP_003_010_2_report-768x601.jpg 768w" sizes="auto, (max-width: 795px) 100vw, 795px" /></figure>
</div>


<p class="wp-block-paragraph">Dans la nouvelle fenêtre qui apparait, en premier lieu sélectionner en source de données&nbsp;<strong>SQLite3 Datasource</strong>. Modifier le chemin afin que celui soit de la forme&nbsp;<strong>database=&lt;path&gt;</strong>.</p>



<p class="wp-block-paragraph">En guise de clause de réduction de ligne, choisissez&nbsp;<strong>LIMIT</strong>, puis confirmer la modification.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="694" height="524" src="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_13_pratique_cli_html.jpg" alt="" class="wp-image-3167" style="width:487px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_13_pratique_cli_html.jpg 694w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_13_pratique_cli_html-300x227.jpg 300w" sizes="auto, (max-width: 694px) 100vw, 694px" /></figure>
</div></div></div></div>



<div class="wp-block-kadence-pane kt-accordion-pane kt-accordion-pane-3 kt-pane3134_03e169-92"><div class="kt-accordion-header-wrap"><button class="kt-blocks-accordion-header kt-acccordion-button-label-show" type="button"><span class="kt-blocks-accordion-title-wrap"><span class="kt-blocks-accordion-title"><strong>Chargement des données</strong></span></span><span class="kt-blocks-accordion-icon-trigger"></span></button></div><div class="kt-accordion-panel kt-accordion-panel-hidden"><div class="kt-accordion-panel-inner">
<p class="wp-block-paragraph">Il ne reste alors qu’à charger, actualiser les données dans le rapport existant.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="548" src="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_14_pratique_cli_html-1024x548.jpg" alt="" class="wp-image-3168" style="width:686px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_14_pratique_cli_html-1024x548.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_14_pratique_cli_html-300x160.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_14_pratique_cli_html-768x411.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_14_pratique_cli_html-1536x822.jpg 1536w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_008_14_pratique_cli_html.jpg 1916w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="wp-block-paragraph">Normalement et il y a peu de chance que ce ne soit pas le cas, vous devriez avoir une multitude de coche vert en face de chaque table vous annonçant que les données ont été chargé avec succès.</p>
</div></div></div>
</div></div></div>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Une fois les données actualisées, vous devriez avoir le rendu ci-dessous par défaut. Il vous faudra alors jouer avec les différents filtres et objets de contrôles sur les pages pour coller à vos données.</p>


<div class="kb-gallery-wrap-id-3134_d03683-5c alignnone wp-block-kadence-advancedgallery"><div class="kb-gallery-ul kb-gallery-non-static kb-gallery-type-slider kb-gallery-id-3134_d03683-5c kb-gallery-caption-style-bottom-hover kb-gallery-filter-none" data-image-filter="none" data-lightbox-caption="true"><div class="kt-blocks-carousel splide kt-carousel-container-dotstyle-dark kt-carousel-arrowstyle-whiteondark kt-carousel-dotstyle-dark kb-slider-group-arrow kb-slider-arrow-position-center" data-slider-anim-speed="400" data-slider-scroll="1" data-slider-arrows="true" data-slider-fade="true" data-slider-dots="true" data-slider-type="slider" data-slider-hover-pause="false" data-slider-auto="" data-slider-speed="7000" data-show-pause-button="false"><div class="splide__track"><ul class="kt-blocks-carousel-init kb-blocks-slider splide__list"><li class="kb-slide-item kb-gallery-slide-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain kadence-blocks-gallery-intrinsic kb-gallery-image-ratio-inherit kb-has-image-ratio-inherit" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_1_pratique_pbi-1024x575.jpg" width="1024" height="575" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_1_pratique_pbi.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_1_pratique_pbi.jpg" data-id="3169" class="wp-image-3169 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_1_pratique_pbi-1024x575.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_1_pratique_pbi-300x168.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_1_pratique_pbi-768x431.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_1_pratique_pbi.jpg 1313w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-slide-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain kadence-blocks-gallery-intrinsic kb-gallery-image-ratio-inherit kb-has-image-ratio-inherit" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_2_pratique_pbi-1024x577.jpg" width="1024" height="577" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_2_pratique_pbi.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_2_pratique_pbi.jpg" data-id="3170" class="wp-image-3170 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_2_pratique_pbi-1024x577.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_2_pratique_pbi-300x169.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_2_pratique_pbi-768x433.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_2_pratique_pbi.jpg 1311w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-slide-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain kadence-blocks-gallery-intrinsic kb-gallery-image-ratio-inherit kb-has-image-ratio-inherit" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_3_pratique_pbi-1024x577.jpg" width="1024" height="577" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_3_pratique_pbi.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_3_pratique_pbi.jpg" data-id="3171" class="wp-image-3171 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_3_pratique_pbi-1024x577.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_3_pratique_pbi-300x169.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_3_pratique_pbi-768x433.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_3_pratique_pbi.jpg 1312w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-slide-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain kadence-blocks-gallery-intrinsic kb-gallery-image-ratio-inherit kb-has-image-ratio-inherit" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_4_pratique_pbi-1024x574.jpg" width="1024" height="574" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_4_pratique_pbi.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_4_pratique_pbi.jpg" data-id="3172" class="wp-image-3172 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_4_pratique_pbi-1024x574.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_4_pratique_pbi-300x168.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_4_pratique_pbi-768x430.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_4_pratique_pbi.jpg 1314w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-slide-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain kadence-blocks-gallery-intrinsic kb-gallery-image-ratio-inherit kb-has-image-ratio-inherit" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_5_pratique_pbi-1024x575.jpg" width="1024" height="575" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_5_pratique_pbi.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_5_pratique_pbi.jpg" data-id="3173" class="wp-image-3173 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_5_pratique_pbi-1024x575.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_5_pratique_pbi-300x168.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_5_pratique_pbi-768x431.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_5_pratique_pbi.jpg 1316w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-slide-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain kadence-blocks-gallery-intrinsic kb-gallery-image-ratio-inherit kb-has-image-ratio-inherit" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_6_pratique_pbi-1024x577.jpg" width="1024" height="577" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_6_pratique_pbi.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_6_pratique_pbi.jpg" data-id="3174" class="wp-image-3174 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_6_pratique_pbi-1024x577.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_6_pratique_pbi-300x169.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_6_pratique_pbi-768x433.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_6_pratique_pbi.jpg 1312w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-slide-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain kadence-blocks-gallery-intrinsic kb-gallery-image-ratio-inherit kb-has-image-ratio-inherit" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_7_pratique_pbi-1024x576.jpg" width="1024" height="576" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_7_pratique_pbi.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_7_pratique_pbi.jpg" data-id="3175" class="wp-image-3175 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_7_pratique_pbi-1024x576.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_7_pratique_pbi-300x169.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_7_pratique_pbi-768x432.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_7_pratique_pbi.jpg 1311w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-slide-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain kadence-blocks-gallery-intrinsic kb-gallery-image-ratio-inherit kb-has-image-ratio-inherit" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_8_pratique_pbi-1024x576.jpg" width="1024" height="576" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_8_pratique_pbi.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_8_pratique_pbi.jpg" data-id="3176" class="wp-image-3176 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_8_pratique_pbi-1024x576.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_8_pratique_pbi-300x169.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_8_pratique_pbi-768x432.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_8_pratique_pbi.jpg 1312w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></div></div></figure></div></div></li><li class="kb-slide-item kb-gallery-slide-item splide__slide"><div class="kadence-blocks-gallery-item"><div class="kadence-blocks-gallery-item-inner"><figure class="kb-gallery-figure kadence-blocks-gallery-item-hide-caption"><div class="kb-gal-image-radius"><div class="kb-gallery-image-contain kadence-blocks-gallery-intrinsic kb-gallery-image-ratio-inherit kb-has-image-ratio-inherit" ><img loading="lazy" decoding="async" src="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_9_pratique_pbi-1024x577.jpg" width="1024" height="577" alt="" data-full-image="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_9_pratique_pbi.jpg" data-light-image="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_9_pratique_pbi.jpg" data-id="3177" class="wp-image-3177 skip-lazy" srcset="https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_9_pratique_pbi-1024x577.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_9_pratique_pbi-300x169.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_9_pratique_pbi-768x433.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2025/09/PP_004_009_9_pratique_pbi.jpg 1314w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></div></div></figure></div></div></li></ul></div></div></div></div>


<p class="wp-block-paragraph">Rappelons nous notre problématique initiale. Je dis nous, mais au final c&rsquo;est bien à moi de me rappeler ma problématique. Je pense que cette dernière est répondue avec un peu plus de fonctionnalité que prévu.</p>



<p class="wp-block-paragraph">Ainsi, nous avons une visibilité totale sur l&rsquo;ensemble du SI et des éléments virtuels qui le composent. Nous pouvons également donner la tendance et l&rsquo;évolution dans le temps justifiant à la demande interne ou externe d&rsquo;un potentiel sur ou sous facturation. Elle permet également dans l&rsquo;application de la bonne licence Microsoft O365 de publier le modèle et donc de partager l&rsquo;information à d&rsquo;autres collaborateurs en temps réel.</p>



<p class="wp-block-paragraph">Certains filtres restent toutefois à adapter selon ce que nous souhaitons afficher ou interpréter. Pour le reste, je vous laisse regarder les différents chevaux de mon carrousel ci-haut.</p>



<p class="wp-block-paragraph">Comme pour l&rsquo;article précédent, je pense faire une vidéo de démonstration (que je n&rsquo;ai pas fait pour l&rsquo;instant d&rsquo;ailleurs. Non pas par fénéantise. Mais par épuisement moral. Il faut que je pense <a href="https://www.youtube.com/watch?v=7bq8Yu_E9qw&amp;list=RD7bq8Yu_E9qw&amp;start_radio=1&amp;ab_channel=StupeflipOfficiel">à Rosetta, à ressources humaines</a>&#8230; Bref, je suis content de ce que j&rsquo;ai rendu et accouché. Toutefois, il reste encore un peu d&rsquo;ajustement. Dommage que cela ne puisse être utilisé au quotidien dans ma profession et ce pour des sujets de droit à la propriété intellectuelle. </p>



<p class="wp-block-paragraph">A ce moment précis de mon second break, il se passe huit mois entre le début des première ligne de code et la fin de rédaction de cet article. Il me fallait terminer ce projet qui je le pense ne doit pas finir aux oubliettes. J&rsquo;aimerai qu&rsquo;il puisse à terme rendre service à d&rsquo;autres SysAdmins et s&rsquo;adapter à d&rsquo;autres systèmes, socles de virtualisation.</p>



<h3 class="wp-block-heading">Sources</h3>



<ul class="wp-block-list">
<li><a href="https://www.microsoft.com/fr-fr/power-platform/products/power-bi/downloads">Microsoft PowerBI</a></li>



<li><a href="http://www.ch-werner.de/sqliteodbc/">SQLite ODBC Driver</a></li>



<li><a href="https://sqlitebrowser.org/dl/">DB Browser SQLite</a></li>



<li><a href="https://developer.broadcom.com/powercli/latest/products/vmwarevsphereandvsan/">VMWare PowerCLI</a></li>
</ul>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td class="has-text-align-center" data-align="center"><a href="https://erwanguillemard.com/projet-dream-nebula-vmware-kpi-partie-1-theorie/">Partie 1 : Théorie<br>&lt;-</a></td><td class="has-text-align-center" data-align="center"><a href="https://erwanguillemard.com/projet-dream-nebula-vmware-kpi/">PROJET &#8211; Dream Nebula</a></td><td class="has-text-align-center" data-align="center"><a href="https://erwanguillemard.com/projet-dream-nebula-vmware-kpi-partie-3-demonstration/">Partie 3 : Démonstration<br>—></a></td></tr></tbody></table></figure>



<p class="wp-block-paragraph"></p>


<ol class="wp-block-footnotes"><li id="c2fa8834-05a4-4bc2-92dd-aa0fe3b68489"><strong>TLS</strong> : Transport Layer Security  <a href="#c2fa8834-05a4-4bc2-92dd-aa0fe3b68489-link" aria-label="Aller à la note de bas de page 1">↩︎</a></li><li id="4b387ac7-d458-4404-94be-041eac1df36a"><strong>ODBC</strong> : Open Database Connectivity  <a href="#4b387ac7-d458-4404-94be-041eac1df36a-link" aria-label="Aller à la note de bas de page 2">↩︎</a></li><li id="fea49933-c957-436d-b291-535ce6c4e1e8"><strong>DB</strong> : Database <a href="#fea49933-c957-436d-b291-535ce6c4e1e8-link" aria-label="Aller à la note de bas de page 3">↩︎</a></li><li id="0f1cb5c5-cbaa-458f-ba19-d4ce7153e316"><strong>VCSA</strong> : VMware System Appliance <a href="#0f1cb5c5-cbaa-458f-ba19-d4ce7153e316-link" aria-label="Aller à la note de bas de page 4">↩︎</a></li><li id="84b0b406-fc6f-443c-a541-0ebf607c41f1"><strong>API</strong> : Application Programming Interface <a href="#84b0b406-fc6f-443c-a541-0ebf607c41f1-link" aria-label="Aller à la note de bas de page 5">↩︎</a></li><li id="52980565-3e3c-49b0-b7af-7317334f7fb9"><strong>SMTP</strong> : Simple Mail Transport Protocol <a href="#52980565-3e3c-49b0-b7af-7317334f7fb9-link" aria-label="Aller à la note de bas de page 6">↩︎</a></li><li id="70c9a30b-c61d-4e80-9e38-3b36d25b68ed"><strong>LD</strong> : Liste Distribuée  <a href="#70c9a30b-c61d-4e80-9e38-3b36d25b68ed-link" aria-label="Aller à la note de bas de page 7">↩︎</a></li><li id="d60f938e-acfd-4304-9be7-299a91ca7350"><strong>BAL</strong> : Boite aux lettres <a href="#d60f938e-acfd-4304-9be7-299a91ca7350-link" aria-label="Aller à la note de bas de page 8">↩︎</a></li><li id="fc9e2e62-2fcd-4894-9978-6dd24a213c6c"><strong>FQDN</strong> : Fully Qualified Domain Name <a href="#fc9e2e62-2fcd-4894-9978-6dd24a213c6c-link" aria-label="Aller à la note de bas de page 9">↩︎</a></li><li id="a99b244f-7576-47ce-b0ca-b1376c0babb4"><strong>gMSA</strong> : Group Managed Service Accounts <a href="#a99b244f-7576-47ce-b0ca-b1376c0babb4-link" aria-label="Aller à la note de bas de page 10">↩︎</a></li><li id="bb2361e4-bb5b-48c7-a749-eaf96c3c490a"><strong>DVS</strong> : Distributed Virtuals Switchs <a href="#bb2361e4-bb5b-48c7-a749-eaf96c3c490a-link" aria-label="Aller à la note de bas de page 11">↩︎</a></li></ol>


<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>PROJET &#8211; Dream Nebula, VMWare KPI Partie 1 : Théorie</title>
		<link>https://erwanguillemard.com/projet-dream-nebula-vmware-kpi-partie-1-theorie/</link>
		
		<dc:creator><![CDATA[Erwan Guillemard]]></dc:creator>
		<pubDate>Sun, 07 Sep 2025 18:52:12 +0000</pubDate>
				<category><![CDATA[Applications]]></category>
		<category><![CDATA[Projets]]></category>
		<category><![CDATA[Application]]></category>
		<category><![CDATA[Projet]]></category>
		<category><![CDATA[VEEAMONE]]></category>
		<category><![CDATA[VMWare]]></category>
		<guid isPermaLink="false">https://erwanguillemard.com/?p=3101</guid>

					<description><![CDATA[Expression du besoin Des outils qui permettent de réaliser un suivie de la charge d&#8217;une infrastructure il en existe un certain nombre. J&#8217;ai donc ce besoin de suivre mon SI et de définir de manière simple pour l&#8217;instant un planning de capacité de mon environnement VMWare qu&#8217;il soit basé sur une architecture standalone ou distribuée....]]></description>
										<content:encoded><![CDATA[


<h3 class="wp-block-heading">Expression du besoin</h3>



<p class="wp-block-paragraph">Des outils qui permettent de réaliser un suivie de la charge d&rsquo;une infrastructure il en existe un certain nombre. J&rsquo;ai donc ce besoin de suivre mon SI<sup data-fn="7caccef3-d6ea-44ac-bcee-b6eb363a4cd4" class="fn"><a href="#7caccef3-d6ea-44ac-bcee-b6eb363a4cd4" id="7caccef3-d6ea-44ac-bcee-b6eb363a4cd4-link">1</a></sup> et de définir de manière simple pour l&rsquo;instant un planning de capacité de mon environnement VMWare qu&rsquo;il soit basé sur une architecture standalone ou distribuée.</p>



<p class="wp-block-paragraph">Toutefois, ce qui est emmerdant encore et toujours c&rsquo;est le cout lié à ces solutions. Logique, car cela demande un certain recul et analyse et d&rsquo;être flexible aux diverses solutions des éditeurs de virtualisation. Coucou VEEAMOne 🙂 Il existe aussi des solutions gratuites mais cela nécessite de manipuler ensuite les données retournées. Oui je pense à toi mon bon vieux RVTools. </p>



<p class="wp-block-paragraph">De mon expérience d&rsquo;administrateur système et réseau, j&rsquo;ai constaté (comme je me suis fait avoir d&rsquo;ailleurs) un manque crucial des équipes à tenir comptes des ressources matériels de leurs infrastructures. Que ce soient des jeunes loups qui viennent d&rsquo;entrer sur le marché du travail ou de certains vieux loups charlot qui opère encore dans le milieu&#8230; C&rsquo;est ainsi que les problématiques de surallocation des ressources voient le jour :</p>



<ul class="wp-block-list">
<li>Memory Balloning</li>



<li>Storage Overprovisionned</li>



<li>Storage Latency</li>



<li>CPU Exhausted</li>



<li>etc</li>
</ul>



<p class="wp-block-paragraph">Dans la grande majorité des cas, un suivi fin de l&rsquo;exploitation permet d&rsquo;éviter ce genre de cas de figure et dans d&rsquo;autres cas de prévenir sa direction ou son client d&rsquo;une évolution d&rsquo;infrastructure à budgéter. L&rsquo;une de mes bonnes pratiques (surtout celle que mes mentors m&rsquo;ont transmises) et de prendre le SI de production et de prendre 20% de plus pour se prémunir des potentiels changements à venir et garder de l&rsquo;évolutivité.</p>



<p class="wp-block-paragraph">L&rsquo;extraction des indicateurs de performance du SI permettra ainsi sur le plan technique de s&rsquo;assurer de la charge et allocation de chacune des ressources matérielles et de définir l&rsquo;allocation des ressources par services au plus bas niveau. Sur le plan financier et administratif cela permet de prévoir les investissements du SI tout comme il permet de refacturer en interne différents services. Derniers points qui peut-être marque d&rsquo;espièglerie, la DSI<sup data-fn="f5f385b9-0521-48d0-90f7-47fa952abf1e" class="fn"><a href="#f5f385b9-0521-48d0-90f7-47fa952abf1e" id="f5f385b9-0521-48d0-90f7-47fa952abf1e-link">2</a></sup> ou Direction peut se rendre compte des conseils et des compétences du RSI<sup data-fn="4c979ee1-94ba-4da9-8f0b-eb8513606344" class="fn"><a href="#4c979ee1-94ba-4da9-8f0b-eb8513606344" id="4c979ee1-94ba-4da9-8f0b-eb8513606344-link">3</a></sup>.</p>



<p class="wp-block-paragraph">Dans le contexte d&rsquo;un petit fournisseur de service (je ne parle pas des OVH, AWS et autres mastodontes), il est difficile de facturer les ressources aux clients de la manière la plus juste possible sans tomber dans le cas de surfacturation ou sou facturation. Ces indicateurs permettent donc de justifier le cout et l&rsquo;évolution des ressources mis à leurs dispositions sur leurs demandes.</p>



<p class="wp-block-paragraph">Il est donc nécessaire de trouver une solution qui permet d&rsquo;assurer un suivie de l&rsquo;infrastructure sur une durée défini qui puisse être orienté MSP<sup data-fn="7033a964-de8a-427d-b0e4-5dbca04c3d71" class="fn"><a href="#7033a964-de8a-427d-b0e4-5dbca04c3d71" id="7033a964-de8a-427d-b0e4-5dbca04c3d71-link">4</a></sup> comme pour un client final. D&rsquo;assurer une visibilité macroscopique jusqu&rsquo;au plus bas niveau des ressources. Tout comme pour l&rsquo;article précédent GreenRay, il est important de décorréler la partie métrique et son rendu. Le service qualité doit pouvoir exploiter et présenter les métriques dans la plus grande transparence et honnêteté qu&rsquo;il soit. (Surtout c&rsquo;est le boulot de la qualité de rendre sexy un truc qui de base ne l&rsquo;est pas trop, sauf pour les AdminSys dans mon genre 🙂 ).</p>



<h3 class="wp-block-heading">Cahier des Charges</h3>



<p class="wp-block-paragraph">Ok, on voit où l&rsquo;on veut aller. Pensons maintenant à partir de ce qui est établi comment mettre en œuvre tout ça sans tomber dans l&rsquo;éternelle piège de la dispersion et donc de ne voir aboutir ce projet. Encore une fois, mon esprit aura fait des siennes et le projet au final va comporter des fonctionnalités encore en cours de développement&#8230; Oui je suis comme ça et je ne compte pas changer dans le cadre de mes loisirs.</p>



<p class="wp-block-paragraph">Nous resterons dans un premier temps sur le socle de virtualisation VMware (et ce même si BROADCOM est passé par là avec son chéquier) et les produits vSphere de base (comprendre VCSA et ESXi) et donc son API<sup data-fn="780843c6-2ef0-45df-8125-19503166d39c" class="fn"><a href="#780843c6-2ef0-45df-8125-19503166d39c" id="780843c6-2ef0-45df-8125-19503166d39c-link">5</a></sup>. (Donnez moi le moyen de faire cela pour les socles de virtualisation PROXMOX, AHV et HyperV, JE VOUS SUIS !).</p>



<p class="wp-block-paragraph">Je souhaite également utiliser la solution VEEAMOne pour bénéficier de la gestion des TAGS de manière automatique dans l&rsquo;environnement VMware. L&rsquo;aillant déjà déployé et configuré (cf le billet en question), autant en profité. Ce point est optionnel et nous pouvons nous passer de ce dernier. Il est tout à fait possible d&rsquo;administrer les TAGS directement dans l&rsquo;environnement vCenter.</p>



<p class="has-text-align-center wp-block-paragraph"><strong>Pourquoi tu parles de TAGS ?</strong></p>



<p class="wp-block-paragraph">Les TAGS ou marqueurs vont me permettre d&rsquo;identifier les ressources virtuelles. Par exemple d&rsquo;identifier les ressources virtuelles propres au bon fonctionnement de l&rsquo;infrastructure et les ressources virtuelles propres à la production et donc au bon fonctionnement de l&rsquo;organisation. Cela permet d&rsquo;avoir un ratio <strong>Production/Infrastructure</strong>.</p>



<p class="wp-block-paragraph">Il en va ainsi de même pour les services IaaS<sup data-fn="e7aae3df-f718-4618-83e3-9b14d433a6ee" class="fn"><a href="#e7aae3df-f718-4618-83e3-9b14d433a6ee" id="e7aae3df-f718-4618-83e3-9b14d433a6ee-link">6</a></sup>, SaaS<sup data-fn="8cdf59ce-9608-4bf6-a41e-a301fbdbfd8b" class="fn"><a href="#8cdf59ce-9608-4bf6-a41e-a301fbdbfd8b" id="8cdf59ce-9608-4bf6-a41e-a301fbdbfd8b-link">7</a></sup> et pourquoi pas par environnement de service, réseau ou clients (dans le cas d&rsquo;un MSP).</p>



<p class="wp-block-paragraph">Les TAGs permettront d&rsquo;apporter une finesse dans l&rsquo;analytique.</p>



<p class="wp-block-paragraph">Si nous faisons une petite synthèse, la solution doit pouvoir se connecter à l&rsquo;API VCSA<sup data-fn="d72df66d-e2e2-4a72-a31d-9c5af091a4cb" class="fn"><a href="#d72df66d-e2e2-4a72-a31d-9c5af091a4cb" id="d72df66d-e2e2-4a72-a31d-9c5af091a4cb-link">8</a></sup> by VMware. De nouveau la question, quel langage utilisé ? <a href="https://www.youtube.com/watch?v=fNq-qi4ld3Y&amp;ab_channel=Lacha%C3%AEneofficiellePok%C3%A9monenfran%C3%A7ais">JE TE CHOISIS</a> ! Framework .Net avec powershell afin d’établir un mode manuel et un mode service. Certes pas esthétique mais avons-nous réellement besoin d’une interface GUI<sup data-fn="9c2f2bb2-e9c7-46eb-9f91-0419e30a53b9" class="fn"><a href="#9c2f2bb2-e9c7-46eb-9f91-0419e30a53b9" id="9c2f2bb2-e9c7-46eb-9f91-0419e30a53b9-link">9</a></sup>&nbsp;pour l’instant&nbsp;? Naturellement, il est obligatoire que la solution laisse une trace de son exécution dans un fichier et ce à des fins de debug et de contrôle.</p>



<p class="wp-block-paragraph">L’outil comportant un mode service, ce dernier doit être planifié de manière journalière pour traiter le point de suivi des métriques sur une durée donnée.</p>



<p class="wp-block-paragraph">Les données seront stockées dans une base de données flexible et légère qui puisse être utilisé en dehors de la production et s’interfacer rapidement avec tous types de systèmes. Je propose d’utiliser SQLite3.</p>



<p class="wp-block-paragraph">Concernant la partie exploitation et génération des métriques, j’ai pris parti d’utiliser PowerPI pour des raisons de praticité et de gain de temps. J&rsquo;avais par le passé compiler les informations dans un fichier excel mais force est de constater que la solution n&rsquo;est pas viable dans le temps en termes de gestion. L&rsquo;avantage d&rsquo;une BDD<sup data-fn="43da8cff-22fe-4897-a22f-2f19b0daa69f" class="fn"><a href="#43da8cff-22fe-4897-a22f-2f19b0daa69f" id="43da8cff-22fe-4897-a22f-2f19b0daa69f-link">10</a></sup> comme source de données et qu&rsquo;elle reste interfaçable avec tous types de solutions (Web, Application lourde ou encore et toujours le terrible tableur Excel).</p>



<p class="wp-block-paragraph">Pour la partie sécurité, nous resterons concernant la consultation des données VMware sur un compte restreint en lecture seul (pas besoin de plus et encore on peut affiner les droits de manière drastique). Quant à l’exécution de la tâche planifiée dédiée au mode service un compte gMSA<sup data-fn="877a5f5e-81d0-40d2-b6c1-518e10f35b59" class="fn"><a href="#877a5f5e-81d0-40d2-b6c1-518e10f35b59" id="877a5f5e-81d0-40d2-b6c1-518e10f35b59-link">11</a></sup> répondra à toutes les problématiques (dans le cas d&rsquo;un poste joint à un domaine), sinon cela un compte local restreint. J&rsquo;oubliais également que les informations d&rsquo;identification seront chiffrées nativement par le SE<sup data-fn="47c14572-16cd-4a96-a53c-11d8d51d7015" class="fn"><a href="#47c14572-16cd-4a96-a53c-11d8d51d7015" id="47c14572-16cd-4a96-a53c-11d8d51d7015-link">12</a></sup> Windows dans le contexte d&rsquo;exécution du poste et de la session.</p>



<p class="wp-block-paragraph">En conclusion de notre liste de course, notre application utilisera&nbsp;:</p>



<ul class="wp-block-list">
<li><strong>Connecteur API à l&rsquo;Appliance VCSA VMware</strong><ul><li>Orienté MSP et SI finaux</li></ul>
<ul class="wp-block-list">
<li>Couvrir les architectures standalone et distribuée</li>



<li>Suivre les ressources virtualisées</li>



<li>Suivre les ressources matérielles</li>
</ul>
</li>



<li><strong>Langage de développement &amp; Fonctionnalités</strong>
<ul class="wp-block-list">
<li>.NET Framwork à travers Powershell (v5 ou plus)</li>



<li>Journalisation de l’exécution du code</li>



<li>Export des données en CSV et HTLM</li>



<li>Mode manuel et mode service</li>



<li>Fichier de configuration</li>



<li>Aide au déploiement</li>



<li>Visualisation en mode CLI</li>
</ul>
</li>



<li><strong>SGBD</strong>
<ul class="wp-block-list">
<li>SQLite3</li>
</ul>
</li>



<li><strong>Reporting</strong>
<ul class="wp-block-list">
<li>Microsoft PowerBI</li>
</ul>
</li>



<li><strong>Securité</strong>
<ul class="wp-block-list">
<li>Si poste au domaine, création et utilisation d’un compte de service gMSA dédiéSi hors domaine, création d’un compte restreint au poste</li>



<li>Chiffrement des données d&rsquo;authentification par les algorithmes natives Windows</li>



<li>Token API en lecture seule sur la VCSA</li>
</ul>
</li>
</ul>



<p class="wp-block-paragraph">Il est temps de passer à la construction et définissions de nos différents niveaux de topographie d’architecture, applicative et logiciel.</p>



<h4 class="wp-block-heading">Topographie &#8211; Infrastructure</h4>



<p class="wp-block-paragraph">La topographie a été pensé pour être la plus simple et standard (pour faciliter la gestion et l&rsquo;évolution de l&rsquo;application). J&rsquo;ai fait le choix de tout embarqué dans l&rsquo;application, mais il est toutefois possible de mettre en place une architecture 2 ou 3 tiers en dissociant les parties Engine, Reporting et BDD.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="496" src="https://erwanguillemard.com/wp-content/uploads/2025/07/PP_004_001_topo_infra-1024x496.jpg" alt="" class="wp-image-3113" srcset="https://erwanguillemard.com/wp-content/uploads/2025/07/PP_004_001_topo_infra-1024x496.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2025/07/PP_004_001_topo_infra-300x145.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/07/PP_004_001_topo_infra-768x372.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2025/07/PP_004_001_topo_infra.jpg 1267w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="wp-block-paragraph">En d&rsquo;autres termes, il est seulement nécessaire dans le cadre d&rsquo;une architecture 1 tiers d&rsquo;autoriser la communication des flux https/tcp entre l&rsquo;appliance vCenter et notre application.</p>



<h4 class="wp-block-heading">Topographie &#8211; Applicative</h4>



<p class="wp-block-paragraph">Depuis mon dernier gros projet, je suis désolé de vous apprendre que je ne suis toujours pas architecte applicatif. <a href="https://www.youtube.com/watch?v=3B409cK9IgI&amp;list=RD3B409cK9IgI&amp;start_radio=1&amp;ab_channel=Hubert-F%C3%A9lixThi%C3%A9faine-Topic">Renseignez vous, à l&rsquo;agence des amants de Madame Müller</a>, j&rsquo;ai des restes ! </p>



<p class="wp-block-paragraph">A la racine du répertoire, nous retrouvons les deux fichiers exécutables :</p>



<ul class="wp-block-list">
<li><strong><mark style="background-color:rgba(0, 0, 0, 0);color:#45c832" class="has-inline-color">SS_43_1.0.0_VMWare-PowerCLI_Main.ps1</mark></strong> : Qui est le fichier d’instanciation de la solution est qui permet également de réaliser toutes les actions en mode manuel.</li>



<li><strong><mark style="background-color:rgba(0, 0, 0, 0);color:#20d2e6" class="has-inline-color">SS_43_1.0.0_VMWAre-PowerCLI_Services.ps1</mark></strong> : Presque le même fichier que le fichier Main mais dédié au mode service avec un code adapté. Il ne peut être exécuté si et seulement si l’instanciation et initialisation à eu lieu.</li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="650" height="782" src="https://erwanguillemard.com/wp-content/uploads/2025/07/PP_004_001_topo_appl.jpg" alt="" class="wp-image-3115" style="width:500px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2025/07/PP_004_001_topo_appl.jpg 650w, https://erwanguillemard.com/wp-content/uploads/2025/07/PP_004_001_topo_appl-249x300.jpg 249w" sizes="auto, (max-width: 650px) 100vw, 650px" /></figure>
</div>


<p class="wp-block-paragraph">La suite se déroule en 6 répertoires distincts.</p>



<ul class="wp-block-list">
<li><strong>Modules :</strong>&nbsp;Répertoire contenant les modules powershell développé pour l’application. Aujourd’hui au nombre de quatre dissociant la partie BDD, Windows, HTML et VMware.</li>



<li><strong>Database :</strong>&nbsp;Répertoire contenant la BDD qui va stocker les données. La SGBD&nbsp;étant sous SQLite il n’y a pas besoin de moteur SQLite. Seul le module SQLite pour powershell est nécessaire en termes de dépendance. La base de données est automatiquement générée si cette dernière n’est pas présente ou si cette dernière à un nom qui diffère du fichier de configuration. Uniquement lors de l’exécution du script en mode manuel.</li>



<li><strong>Config :</strong>&nbsp;Répertoire contenant le fichier de configuration powershell. Effectivement depuis des années je faisais ça directement dans le code… Je mourrai moins con ce soir comme dirait quelqu’un que je connais bien 🙂 Je reviendrai plus en détail sur la partie 2 sur le contenu de ce fichier. Afin de palier à toute suppression malencontreuse du fichier de configuration, j’ai développé une fonction pour regénérer ce dernier. Oui je suis adepte du&nbsp;<strong>Alt+Maj+Del</strong>&nbsp;et j’ai dû recommencer mon fichier. Maintenant plus de problème avec mon combo favori &lt;3</li>



<li><strong>Report :</strong>&nbsp;Là où je stocke les fichiers Microsoft PowerBI. Je reviendrais sur ce point dans la partie 2.</li>



<li><strong>Log :</strong>&nbsp;Répertoire qui va contenir la ou les traces d’exécution du code si l’option est activée. Cela à son importance car il permet au petit gars qui à dev l’application dans sa baignoire de corriger les bugs. Le fichier ne prend pas de place et est réinitialiser à chaque lancement.</li>



<li><strong>Export :</strong>&nbsp;Répertoire qui va contenir les données extraites selon les tags dans des rapports HTMLs. Les rapports ont été pensé pour être navigable et donc faciliter la consultation des rapports dans un navigateur internet. Cette fonctionnalité a été abandonnée pour l&rsquo;instant car retranscrit dans PBI<sup data-fn="60113356-51cf-40c6-ba4d-76f5d785982a" class="fn"><a href="#60113356-51cf-40c6-ba4d-76f5d785982a" id="60113356-51cf-40c6-ba4d-76f5d785982a-link">13</a></sup>. Mais cette fonctionnalité à le droit d&rsquo;être finalisé et elle le sera. 🙂</li>



<li><strong>Import :</strong> Répertoire qui va contenir les sources CSV avec les permissions à définir le plus finement possible sur l&rsquo;environnement VMware.</li>
</ul>



<p class="wp-block-paragraph">Il est important de noter que le script manuel et le script de service peuvent être dissocier. Ce qui se traduit dans un sens par je peux utiliser un serveur en mode type console avec l’outil manuel et garder l’automatisation sur un serveur avec uniquement le strict nécessaire.</p>



<h4 class="wp-block-heading">Topographie &#8211; Logiciel</h4>



<p class="wp-block-paragraph">Comme toujours le code peut être optimisé, factorisé. Néanmoins, je considère cette version béta comme stable. Bien que par moment quelques ajustements restent nécessaire et quelques fonctionnalités ont besoin d&rsquo;être finalisées. De plus, je pense sincèrement que d&rsquo;autres cerveaux et d&rsquo;autres idées permettraient de pousser plus loin certaines fonctionnalités existantes et de voir d&rsquo;autres fonctionnalités naitre.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="819" src="https://erwanguillemard.com/wp-content/uploads/2025/08/PP_004_003_topo_logiciel-1024x819.jpg" alt="" class="wp-image-3122" style="width:466px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2025/08/PP_004_003_topo_logiciel-1024x819.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2025/08/PP_004_003_topo_logiciel-300x240.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/08/PP_004_003_topo_logiciel-768x614.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2025/08/PP_004_003_topo_logiciel-1536x1229.jpg 1536w, https://erwanguillemard.com/wp-content/uploads/2025/08/PP_004_003_topo_logiciel.jpg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="has-text-align-center wp-block-paragraph"><em><strong>Oh ! La flemme du type qui ne veut pas se palucher un visio et montrer qu&rsquo;il bosse encore à l&rsquo;ancienne genre papier/crayon !</strong></em></p>



<p class="wp-block-paragraph">Dans son fonctionnement, nous pourrions voir le fonctionnement suivant :</p>



<ul class="wp-block-list">
<li><strong>0</strong>&nbsp;: Contrôle et vérification des prérequis. Pour simplifier la chose, lecture du fichier de configuration vérification de la BDD et tout le toutim. Et dans une certaine mesure, création de la tâche planifiée</li>



<li><strong>1</strong>&nbsp;: Appel API vers l&rsquo;appliance VMWare afin d’établir la connexion à l&rsquo;appliance et réaliser les opérations de lecture nécessaire</li>



<li><strong>2</strong>&nbsp;: Traitement des données retournée par l’API VMWare afin de stocker ces dernières dans la SGBD, naturellement si l’option est activée l’ensemble des sorties consoles sont redirigées dans un fichier de log</li>



<li><strong>3</strong>&nbsp;: Laisser la possibilité d&rsquo;exploitation des données
<ul class="wp-block-list">
<li><strong>3.1 </strong>: PS Output (cli) pour un affichage rapide des données dans la console powershell avec un affichage user friendly des performances et ressources VMWare (sinon tu as quasi la même chose dans la partie Dashboard de VMWare tu sais ?)</li>



<li><strong>3.2</strong> : HTML Output pour générer une synthèse navigable par bulles et environnements virtuels</li>
</ul>
</li>



<li><strong>4</strong>&nbsp;: Envoi d&rsquo;une notification mail via le protocole SMTP pour informer du bon succès de la tâche.</li>



<li><strong>5</strong>&nbsp;: Possibilité d&rsquo;exploitation dans Microsoft PowerBI.
<ul class="wp-block-list">
<li>Une fois le modèle en place de reporting (PowerBI) configuré (comprendre faire les jointures dans l’application), rafraichir les données. Modification des filtres dans un objectif d&rsquo;exploitation</li>
</ul>
</li>
</ul>



<p class="wp-block-paragraph">Comme d&rsquo;accoutumé, je ne présente pas pour l&rsquo;instant les différents bouts de code. Les raisons ? Toujours les mêmes. Première ça serait indigeste ici (bien que pour ça il y a GitHub), la seconde étant que je ne souhaite pas que mes travaux s&rsquo;évaporent dans la nature. Et j&rsquo;ajoute une troisième raison. Vous savez ce que vous pouvez « potentiellement recruter » dans votre équipe interne. (Oui, j&rsquo;ai toujours en travers mon dernier entretien professionnel où je n&rsquo;étais pas assez technique&#8230; Mais ce de bonne guerre #coeuraveclesmains). Je me pose toutefois la question et laisse part à la réflexion de rendre mon projet communautaire.</p>



<h3 class="wp-block-heading">Sécurité</h3>



<p class="wp-block-paragraph">A ce moment de la rédaction, je ne vois qu&rsquo;un point négatif sur l&rsquo;ensemble du projet qui nécessite d&rsquo;être amélioré. Ce point concerne la partie SGBD.</p>



<h4 class="wp-block-heading">SGBD</h4>



<p class="wp-block-paragraph">Comme pour le projet GreenRay, la problématique est la même. Tout reste à faire&#8230; Bien que la BDD ne contienne pas de données sensibles pouvant nuire à la sécurité du SI cette BDD reste conforme à la législation en vigueur avec la RGPD<sup data-fn="3c50d356-83ec-421e-aab0-2abcf8969aff" class="fn"><a href="#3c50d356-83ec-421e-aab0-2abcf8969aff" id="3c50d356-83ec-421e-aab0-2abcf8969aff-link">14</a></sup>.</p>



<p class="wp-block-paragraph">Toutefois, le choix de SQLite et de son caractère singulier cross plateforme nécessite de sécuriser son contenu et intégrité. Hors, de ce côté là, pas de chiffrement de la BDD ni de côte d&rsquo;accès. Alors comme dans le projet précédent il faudrait envisager de développer d&rsquo;autres plugins pour d&rsquo;autres SGBDs relationnels.</p>



<p class="wp-block-paragraph">Une sécurité de base, serait de paramétrer les ACLs afin que le fichier de BDD ne soit accessible que du compte de service et des comptes utilisateurs habilités à lancer l’application en manuel.</p>



<p class="has-text-align-center wp-block-paragraph"><strong>Concernant le MCD&#8230; Toujours le même dilemme&#8230; </strong></p>



<p class="wp-block-paragraph"><a href="https://www.youtube.com/watch?v=x537Cqg5nEI&amp;list=RDx537Cqg5nEI&amp;start_radio=1&amp;ab_channel=SalutCestCoolVEVO">Toujours pareil ! Boum boum dans les oreilles !</a> Le MCD<sup data-fn="23c46418-bc3e-4a85-a9f1-52465592290f" class="fn"><a href="#23c46418-bc3e-4a85-a9f1-52465592290f" id="23c46418-bc3e-4a85-a9f1-52465592290f-link">15</a></sup> a été pensé sur papier puis construit sur les bases d&rsquo;un modèle existant&#8230; Partager le MCD revient à publier mon code finalement. Avec un peu d&rsquo;huile de coude et de reverse engineering vous me remiserez au placard.</p>



<p class="wp-block-paragraph">Pis bon, je vois venir les SysDBAs<sup data-fn="7ae3a458-32c1-46f0-94df-1d88c1ba70e4" class="fn"><a href="#7ae3a458-32c1-46f0-94df-1d88c1ba70e4" id="7ae3a458-32c1-46f0-94df-1d88c1ba70e4-link">16</a></sup> me dire que c&rsquo;est pas MERISE nanani nanana&#8230; La structure de la BDD n&rsquo;était pas d&rsquo;une complexité folle, cette dernière n&rsquo;était composée que de 13 tables.</p>



<h4 class="wp-block-heading">VMware</h4>



<p class="wp-block-paragraph">Concernant VMWare, j&rsquo;ai pensé à deux approches. Une approche d&rsquo;authentification à travers une jonction à un domaine et à l&rsquo;authentification locale.</p>



<p class="wp-block-paragraph">Dans les deux cas, j&rsquo;ai choisi de limiter l&rsquo;accès en lecture seul. L&rsquo;objectif du projet étant rappelons le de suivre et d&rsquo;interpréter dans le temps l&rsquo;évolution des infrastructures et non d&rsquo;interagir par une méthode tierce. Ce qui renforce la sécurité. Toutefois, il sera nécessaire d&rsquo;attribuer les droits manuellement bien que cela pourrait s&rsquo;automatiser.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="652" src="https://erwanguillemard.com/wp-content/uploads/2025/08/PP_004_004_1_topo_logiciel_vmware-1024x652.jpg" alt="" class="wp-image-3126" style="width:635px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2025/08/PP_004_004_1_topo_logiciel_vmware-1024x652.jpg 1024w, https://erwanguillemard.com/wp-content/uploads/2025/08/PP_004_004_1_topo_logiciel_vmware-300x191.jpg 300w, https://erwanguillemard.com/wp-content/uploads/2025/08/PP_004_004_1_topo_logiciel_vmware-768x489.jpg 768w, https://erwanguillemard.com/wp-content/uploads/2025/08/PP_004_004_1_topo_logiciel_vmware.jpg 1204w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="wp-block-paragraph">Naturellement, le couple d&rsquo;authentification ne doit pas apparaitre en clair. Si je permets la saisie manuelle des credentials, dans le cadre de l&rsquo;automatisation de la tâche le mot de passe doit être chiffré.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="729" height="242" src="https://erwanguillemard.com/wp-content/uploads/2025/08/PP_004_004_2_topo_logiciel_vmware.jpg" alt="" class="wp-image-3127" style="width:554px;height:auto" srcset="https://erwanguillemard.com/wp-content/uploads/2025/08/PP_004_004_2_topo_logiciel_vmware.jpg 729w, https://erwanguillemard.com/wp-content/uploads/2025/08/PP_004_004_2_topo_logiciel_vmware-300x100.jpg 300w" sizes="auto, (max-width: 729px) 100vw, 729px" /></figure>
</div>


<p class="wp-block-paragraph">Comme d&rsquo;hab (j&rsquo;ai envie de dire), je préfère utiliser les fonctionnalités natives du système pour chiffrer le mot de passe avec les WAPI<sup data-fn="faa0140a-7764-49ef-a609-c2d0ae1607aa" class="fn"><a href="#faa0140a-7764-49ef-a609-c2d0ae1607aa" id="faa0140a-7764-49ef-a609-c2d0ae1607aa-link">17</a></sup> dans un fichier XML. Encore et toujours ce bon vieux CLIXML. Ainsi, l&rsquo;accès à l&rsquo;appliance est sécurisé et l&rsquo;impact est maitrisé.</p>



<figure class="wp-block-table"><table class="has-background has-fixed-layout" style="background-color:#eaff01"><tbody><tr><td><mark style="background-color:rgba(0, 0, 0, 0);color:#ff0000" class="has-inline-color"><strong>Attention</strong></mark> néanmoins au ACL sur le répertoire dans lequel va être stocké le fichier de credential. Ce dernier doit avoir des permissions <strong>stricts</strong> (même si cela me semble évident).</td></tr></tbody></table></figure>



<h4 class="wp-block-heading">Taches Planifiées</h4>



<p class="wp-block-paragraph">Là, toujours le même dilemme. Le serveur ou poste qui va exécuter le script est il au domaine ou non ?</p>



<p class="wp-block-paragraph">Dans le cadre d’un environnement hors domaine, il conviendra de créer un compte utilisateur dédié avec les droits nécessaire pour assurer la sécurité. Néanmoins et lors de la création de la tâche, il conviendra de préciser le mot de passe ainsi que le compte local. Ce qui n’est pas ouf en termes de MCO. Mais c’est aujourd’hui l’une des méthodes que j’affectionne si le serveur est hors domaine.</p>



<p class="wp-block-paragraph">A l’inverse, si l’environnement est lié à un domaine, l’approche est différente et j’ai pour le coup changer mon fusil d’épaule (va t’il passer l’arme à gauche ?). Je suis devenu un convaincu des groupes de compte de services administrés (gMSA) dans une certaine mesure. Après réflexion sur mon infrastructure ainsi que les 43 types de scripts développés, je me suis dit qu’il n’était pas déconnant de définir un serveur de script dédiée à des tâches planifiées.</p>



<p class="wp-block-paragraph">De ce fait, je n’installe pas sur tous les serveurs les RSATs<sup data-fn="3ee453f5-e6fb-4db5-8061-3d8d6df04663" class="fn"><a href="#3ee453f5-e6fb-4db5-8061-3d8d6df04663" id="3ee453f5-e6fb-4db5-8061-3d8d6df04663-link">18</a></sup> ActiveDirectory et la rotation de mes mots de passe est périodique sans avoir à repasser, modifier les taches à chaque fois. C’est cool non ?</p>



<p class="wp-block-paragraph">Il subsiste toutefois une petite pirouette si nous venions à utiliser les fonctions de chiffrement windows pour encoder et décoder une information. La création de la tâche nécessitera une configuration manuelle pour assurer le chiffrement.</p>



<h3 class="wp-block-heading">Dépendances</h3>



<p class="wp-block-paragraph">Oui, je m&rsquo;appuie sur des dépendances tierces. Il me semble important de parler de ces derniers avant toutes choses. Premièrement pour rendre à Caesar ce qui appartient à Caesar et deuxièmement pour comprendre comment le projet est construit.</p>



<ul class="wp-block-list">
<li><span style="text-decoration: underline;"><strong>Connecteur .Net VMware &#8211; VMWare PowerCLI :</strong></span> Pour communiquer directement avec l&rsquo;appliance VMware, il suffit d&rsquo;installer et d&rsquo;utiliser le plugin VMware.PowerCLI depuis le repo de base powershell (PSGallery). Ainsi, nous disposons de l&rsquo;interface de commande compatible pour interagir avec les produits vSphere, vSAN, NSX, VMware Cloud on AWS etc. </li>



<li><strong><span style="text-decoration: underline;">Interface .Net Powershell – SQLite :</span></strong>&nbsp;Pour communiquer avec une base de données SQLite, j’ai installé le plugin powershell&nbsp;<strong>PSSQLite</strong>&nbsp;depuis le repo officiel.</li>



<li><strong><span style="text-decoration: underline;">Connecteur MS PowerBI et SQLite :</span></strong> Il me manquait les drivers ODBC<sup data-fn="d181a298-adb1-437a-be0f-e75ea138bb35" class="fn"><a href="#d181a298-adb1-437a-be0f-e75ea138bb35" id="d181a298-adb1-437a-be0f-e75ea138bb35-link">19</a></sup>, j’ai donc dû télécharger et installer ces derniers afin d’assurer la connexion entre l’application PowerBI et la BDD SQLite (<a href="http://www.ch-werner.de/sqliteodbc/">lien</a>).</li>
</ul>



<p class="wp-block-paragraph">Et c’est tout. Rien de plus, rien de moins.</p>



<p class="wp-block-paragraph">Avec toute la théorie, je pense que nous pouvons maintenant aborder la seconde partie pratique qui n’est rien d’autre que le guide d’installation et de configuration de l’application développée.</p>



<figure class="wp-block-table"><table class="has-fixed-layout" style="border-style:none;border-width:0px"><tbody><tr><td></td><td class="has-text-align-center" data-align="center"><a href="https://erwanguillemard.com/projet-dream-nebula-vmware-kpi/">PROJET &#8211; Dream Nebula</a></td><td class="has-text-align-center" data-align="center"><a href="https://erwanguillemard.com/projet-dream-nebula-vmware-kpi-partie-2-pratique/">Partie 2 : Pratique<br>—></a></td></tr></tbody></table></figure>



<p class="wp-block-paragraph"></p>


<ol class="wp-block-footnotes"><li id="7caccef3-d6ea-44ac-bcee-b6eb363a4cd4"><strong>SI</strong> : Système d&rsquo;Information <a href="#7caccef3-d6ea-44ac-bcee-b6eb363a4cd4-link" aria-label="Aller à la note de bas de page 1">↩︎</a></li><li id="f5f385b9-0521-48d0-90f7-47fa952abf1e"><strong>DSI</strong> : Directeur des Systèmes d&rsquo;Informations <a href="#f5f385b9-0521-48d0-90f7-47fa952abf1e-link" aria-label="Aller à la note de bas de page 2">↩︎</a></li><li id="4c979ee1-94ba-4da9-8f0b-eb8513606344"><strong>RSI</strong> : Responsable des Systèmes d&rsquo;Informations <a href="#4c979ee1-94ba-4da9-8f0b-eb8513606344-link" aria-label="Aller à la note de bas de page 3">↩︎</a></li><li id="7033a964-de8a-427d-b0e4-5dbca04c3d71"><strong>MSP</strong> : Managed Services Provider <a href="#7033a964-de8a-427d-b0e4-5dbca04c3d71-link" aria-label="Aller à la note de bas de page 4">↩︎</a></li><li id="780843c6-2ef0-45df-8125-19503166d39c"><strong>API</strong> : Application Programing Interface <a href="#780843c6-2ef0-45df-8125-19503166d39c-link" aria-label="Aller à la note de bas de page 5">↩︎</a></li><li id="e7aae3df-f718-4618-83e3-9b14d433a6ee"><strong>IaaS</strong> : Interface as a Service <a href="#e7aae3df-f718-4618-83e3-9b14d433a6ee-link" aria-label="Aller à la note de bas de page 6">↩︎</a></li><li id="8cdf59ce-9608-4bf6-a41e-a301fbdbfd8b"><strong>SaaS</strong> : Software as a Service <a href="#8cdf59ce-9608-4bf6-a41e-a301fbdbfd8b-link" aria-label="Aller à la note de bas de page 7">↩︎</a></li><li id="d72df66d-e2e2-4a72-a31d-9c5af091a4cb"><strong>VCSA</strong> : VMware System Appliance <a href="#d72df66d-e2e2-4a72-a31d-9c5af091a4cb-link" aria-label="Aller à la note de bas de page 8">↩︎</a></li><li id="9c2f2bb2-e9c7-46eb-9f91-0419e30a53b9"><strong>GUI</strong> : Graphic User Interface  <a href="#9c2f2bb2-e9c7-46eb-9f91-0419e30a53b9-link" aria-label="Aller à la note de bas de page 9">↩︎</a></li><li id="43da8cff-22fe-4897-a22f-2f19b0daa69f"><strong>BDD</strong> : Base de données <a href="#43da8cff-22fe-4897-a22f-2f19b0daa69f-link" aria-label="Aller à la note de bas de page 10">↩︎</a></li><li id="877a5f5e-81d0-40d2-b6c1-518e10f35b59"><strong>gMSA</strong> : Groupe Managed Service Account <a href="#877a5f5e-81d0-40d2-b6c1-518e10f35b59-link" aria-label="Aller à la note de bas de page 11">↩︎</a></li><li id="47c14572-16cd-4a96-a53c-11d8d51d7015"><strong>SE</strong> : Système d&rsquo;Exploitation <a href="#47c14572-16cd-4a96-a53c-11d8d51d7015-link" aria-label="Aller à la note de bas de page 12">↩︎</a></li><li id="60113356-51cf-40c6-ba4d-76f5d785982a"><strong>PBI</strong> : Microsoft Power BI <a href="#60113356-51cf-40c6-ba4d-76f5d785982a-link" aria-label="Aller à la note de bas de page 13">↩︎</a></li><li id="3c50d356-83ec-421e-aab0-2abcf8969aff"><strong>RGPD</strong> : Règlement Général sur la Protection des Données <a href="#3c50d356-83ec-421e-aab0-2abcf8969aff-link" aria-label="Aller à la note de bas de page 14">↩︎</a></li><li id="23c46418-bc3e-4a85-a9f1-52465592290f"><strong>MCD</strong> : Modèle Conceptuel de Données <a href="#23c46418-bc3e-4a85-a9f1-52465592290f-link" aria-label="Aller à la note de bas de page 15">↩︎</a></li><li id="7ae3a458-32c1-46f0-94df-1d88c1ba70e4"><strong>SysDBAs</strong> : Administrateur des systèmes de base de données <a href="#7ae3a458-32c1-46f0-94df-1d88c1ba70e4-link" aria-label="Aller à la note de bas de page 16">↩︎</a></li><li id="faa0140a-7764-49ef-a609-c2d0ae1607aa"><strong>WAPI</strong> : Windows Application Programing Interface  <a href="#faa0140a-7764-49ef-a609-c2d0ae1607aa-link" aria-label="Aller à la note de bas de page 17">↩︎</a></li><li id="3ee453f5-e6fb-4db5-8061-3d8d6df04663"><strong>RSATs</strong> : Remote System Administration Tools <a href="#3ee453f5-e6fb-4db5-8061-3d8d6df04663-link" aria-label="Aller à la note de bas de page 18">↩︎</a></li><li id="d181a298-adb1-437a-be0f-e75ea138bb35"><strong>ODBC</strong> : Open Database Connectivity <a href="#d181a298-adb1-437a-be0f-e75ea138bb35-link" aria-label="Aller à la note de bas de page 19">↩︎</a></li></ol>


<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
