<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>opensource &amp;mdash; Notes &amp; Développements</title>
    <link>https://blog.gabrielcharib.com/tag:opensource</link>
    <description>Articles techniques, projets et contributions — Gabriel Charib</description>
    <pubDate>Sat, 31 Oct 2026 20:25:13 +0100</pubDate>
    <item>
      <title>scp et disque plein : fichier partiel, dump trompeur</title>
      <link>https://blog.gabrielcharib.com/scp-disque-plein-fichier-partiel</link>
      <description>&lt;![CDATA[Au travail, j’ai croisé un cas pénible autour d’un dump de base copié avec scp : le volume distant n’avait plus assez de place, et on se retrouvait avec un fichier présent… mais incomplet.&#xA;&#xA;Le piège : le fichier est là, donc on croit que la copie est bonne — alors qu’elle est tronquée. (L’éventuel message d’erreur de scp part sur stderr (standard error) correspond à la sortie des messages d&#39;erreur et de diagnostic. Ces messages ne sont pas toujours visibles. Il est possible de les rediriger ou de les afficher explicitement avec certains paramètres.&#xA;&#xA;Le jour du transfert au travail, je n&#39;avais pas pensé à vérifier cette sortie. &#xA;&#xA;J’ai voulu reproduire ça en lab — sans toucher au vrai disque du serveur — puis le signaler à OpenSSH (Bugzilla).&#xA;&#xA;Comment j’ai trouvé le problème&#xA;&#xA;export d’un dump ;&#xA;envoi avec scp ;&#xA;plus assez d’espace sur la destination ;&#xA;un fichier distant existe quand même, mais pas en entier.&#xA;&#xA;Sans comparer taille / checksum, on peut croire que c’est bon.&#xA;&#xA;Comment j’ai reproduit (lab Docker)&#xA;&#xA;Idée : ne pas saturer / du serveur.  &#xA;J’ai lancé un conteneur OpenSSH (linuxserver/openssh-server) avec un tmpfs 8 Mo comme dossier d’upload. Comme ça :&#xA;&#xA;le « disque plein » est isolé dans Docker ;&#xA;on peut vider / recommencer en une commande ;&#xA;le reste de la machine reste intact.&#xA;&#xA;Schéma du lab :&#xA;&#xA;client : ma machine (scp, OpenSSH 8.9) ;&#xA;serveur : conteneur, port 2222, user charib ;&#xA;destination : upload/ → tmpfs /data limité à 8 Mo ;&#xA;~1 Mo libre, fichier source 30 Mo.&#xA;&#xA;Étapes (résumé)&#xA;&#xA;1. Source 30 Mo&#xA;mkdir -p /tmp/scp-diskfull-repro &amp;&amp; cd /tmp/scp-diskfull-repro&#xA;dd if=/dev/urandom of=dumptest.sql bs=1M count=30&#xA;sha256sum dumptest.sql&#xA;ls -lh dumptest.sql&#xA;&#xA;2. Remplir le tmpfs du conteneur (~1 Mo libre)&#xA;docker exec scp-diskfull-sshd sh -c &#39;&#xA;  rm -f /data/dumptest.sql /data/filler.bin&#xA;  avail=$(df -B1 /data | tail -1 | awk &#34;{print \$4}&#34;)&#xA;  leave=1048576&#xA;  fill=$((avail-leave))&#xA;  dd if=/dev/zero of=/data/filler.bin bs=4096 count=$((fill/4096)) status=none&#xA;  df -h /data&#xA;&#39;&#xA;&#xA;3. scp de base (stdout / stderr séparés pour bien voir l’erreur)&#xA;scp -P 2222 dumptest.sql charib@127.0.0.1:upload/ \&#xA;    transferstdout.log \&#xA;  2  transferstderr.log&#xA;echo &#34;Exit code: $?&#34;&#xA;&#xA;4. Vérifier&#xA;ls -lh dumptest.sql&#xA;ssh -p 2222 charib@127.0.0.1 \&#xA;  &#39;ls -lh upload/dumptest.sql; sha256sum upload/dumptest.sql; df -h upload&#39;&#xA;&#xA;Résultats&#xA;&#xA;Cas simple — leftover partiel&#xA;&#xA;| Contrôle | Mesure |&#xA;|----------|--------|&#xA;| Source | 30 Mo |&#xA;| Destination | ~1 Mo |&#xA;| SHA-256 | différents |&#xA;| Fichier distant | toujours présent |&#xA;| df après | 100 % |&#xA;| Exit | ≠ 0 + ENOSPC sur stderr |&#xA;&#xA;Le ls distant seul trompe : on voit un fichier, on croit que c’est copié.&#xA;&#xA;Cas C — un fichier valide est écrasé&#xA;&#xA;Plus intéressant : que se passe-t-il s’il y avait déjà un dump correct au même chemin ?&#xA;&#xA;j’uploade d’abord un petit fichier complet (ex. 512 Ko) → hash OK ;&#xA;je remplis le tmpfs (~1 Mo libre) en gardant ce fichier ;&#xA;je relance scp du gros fichier (30 Mo) vers le même nom ;&#xA;scp échoue (ENOSPC), mais…&#xA;&#xA;| Mesure | Avant | Après |&#xA;|--------|-------|-------|&#xA;| Taille | 512 Ko (valide) | ~1,5 Mo (tronqué) |&#xA;| Hash | OK | changé |&#xA;&#xA;Donc ce n’est pas seulement un leftover : un fichier valide a été remplacé par un incomplet. Pour un dump / backup, c’est une vraie perte de données.&#xA;&#xA;Rapport Bugzilla&#xA;&#xA;J’ai ouvert un rapport sur Bugzilla — Portable OpenSSH (component scp), avec versions, steps, tailles, SHA-256, et le lien vers le bug 1703.&#xA;&#xA;Titre plutôt dans cet esprit :  &#xA;scp leaves incomplete destination file after failed transfer due to insufficient disk space  &#xA;(et le cas C renforce : overwrites an existing valid file with a truncated one).&#xA;&#xA;Capture du rapport Bugzilla&#xA;&#xA;Bonnes pratiques&#xA;&#xA;ne pas se fier à « le fichier existe » ;&#xA;comparer taille source ↔ dest ;&#xA;SHA-256 des deux côtés ;&#xA;si partiel → supprimer (ou mieux : ne jamais écraser en place) ;&#xA;préférer rsync (souvent temp + rename).&#xA;&#xA;En bref&#xA;&#xA;Problème vu sur un dump + espace disque.  &#xA;Lab Docker + tmpfs : sûr, reproductible, sans casser le serveur.  &#xA;Leftover partiel et écrasement d’un fichier déjà valide.  &#xA;Signalé à OpenSSH (lien bug 1703).&#xA;&#xA;#scp #openssh #testing #enospc #docker #opensource #bugreport&#xA;&#xA;---&#xD;&#xA;&#xD;&#xA;Auteur — Gabriel Charib  &#xD;&#xA;Functional Analyst / QA Tester· notes techniques &amp; projets  &#xD;&#xA;&#xD;&#xA;← Tous les articles · Portfolio · LinkedIn]]&gt;</description>
      <content:encoded><![CDATA[<p>Au travail, j’ai croisé un cas pénible autour d’un <strong>dump de base</strong> copié avec <code>scp</code> : le volume distant n’avait plus assez de place, et on se retrouvait avec un fichier <strong>présent</strong>… mais <strong>incomplet</strong>.</p>

<p>Le piège : <strong>le fichier est là</strong>, donc on croit que la copie est bonne — alors qu’elle est tronquée. (L’éventuel message d’erreur de <code>scp</code> part sur <strong>stderr</strong> (standard error) correspond à la sortie des messages d&#39;erreur et de diagnostic. Ces messages ne sont pas toujours visibles. Il est possible de les rediriger ou de les afficher explicitement avec certains paramètres.</p>

<p>Le jour du transfert au travail, je n&#39;avais pas pensé à vérifier cette sortie.</p>

<p>J’ai voulu reproduire ça en lab — sans toucher au vrai disque du serveur — puis le <strong>signaler</strong> à OpenSSH (Bugzilla).</p>

<h2 id="comment-j-ai-trouvé-le-problème">Comment j’ai trouvé le problème</h2>
<ol><li>export d’un dump ;</li>
<li>envoi avec <code>scp</code> ;</li>
<li>plus assez d’espace sur la destination ;</li>
<li>un fichier distant existe quand même, mais <strong>pas en entier</strong>.</li></ol>

<p>Sans comparer <strong>taille</strong> / <strong>checksum</strong>, on peut croire que c’est bon.</p>

<h2 id="comment-j-ai-reproduit-lab-docker">Comment j’ai reproduit (lab Docker)</h2>

<p>Idée : <strong>ne pas</strong> saturer <code>/</code> du serveur.<br>
J’ai lancé un conteneur <strong>OpenSSH</strong> (<code>linuxserver/openssh-server</code>) avec un <strong>tmpfs 8 Mo</strong> comme dossier d’upload. Comme ça :</p>
<ul><li>le « disque plein » est isolé dans Docker ;</li>
<li>on peut vider / recommencer en une commande ;</li>
<li>le reste de la machine reste intact.</li></ul>

<p>Schéma du lab :</p>
<ul><li>client : ma machine (<code>scp</code>, OpenSSH 8.9) ;</li>
<li>serveur : conteneur, port <code>2222</code>, user <code>charib</code> ;</li>
<li>destination : <code>upload/</code> → tmpfs <code>/data</code> limité à <strong>8 Mo</strong> ;</li>
<li>~<strong>1 Mo</strong> libre, fichier source <strong>30 Mo</strong>.</li></ul>

<h3 id="étapes-résumé">Étapes (résumé)</h3>

<p><strong>1. Source 30 Mo</strong></p>

<pre><code class="language-bash">mkdir -p /tmp/scp-diskfull-repro &amp;&amp; cd /tmp/scp-diskfull-repro
dd if=/dev/urandom of=dump_test.sql bs=1M count=30
sha256sum dump_test.sql
ls -lh dump_test.sql
</code></pre>

<p><strong>2. Remplir le tmpfs du conteneur (~1 Mo libre)</strong></p>

<pre><code class="language-bash">docker exec scp-diskfull-sshd sh -c &#39;
  rm -f /data/dump_test.sql /data/filler.bin
  avail=$(df -B1 /data | tail -1 | awk &#34;{print \$4}&#34;)
  leave=1048576
  fill=$((avail-leave))
  dd if=/dev/zero of=/data/filler.bin bs=4096 count=$((fill/4096)) status=none
  df -h /data
&#39;
</code></pre>

<p><strong>3. <code>scp</code> de base</strong> (stdout / stderr séparés pour bien voir l’erreur)</p>

<pre><code class="language-bash">scp -P 2222 dump_test.sql charib@127.0.0.1:upload/ \
  &gt;transfer_stdout.log \
  2&gt;transfer_stderr.log
echo &#34;Exit code: $?&#34;
</code></pre>

<p><strong>4. Vérifier</strong></p>

<pre><code class="language-bash">ls -lh dump_test.sql
ssh -p 2222 charib@127.0.0.1 \
  &#39;ls -lh upload/dump_test.sql; sha256sum upload/dump_test.sql; df -h upload&#39;
</code></pre>

<h2 id="résultats">Résultats</h2>

<h3 id="cas-simple-leftover-partiel">Cas simple — leftover partiel</h3>

<table>
<thead>
<tr>
<th>Contrôle</th>
<th>Mesure</th>
</tr>
</thead>

<tbody>
<tr>
<td>Source</td>
<td><strong>30 Mo</strong></td>
</tr>

<tr>
<td>Destination</td>
<td><strong>~1 Mo</strong></td>
</tr>

<tr>
<td>SHA-256</td>
<td><strong>différents</strong></td>
</tr>

<tr>
<td>Fichier distant</td>
<td><strong>toujours présent</strong></td>
</tr>

<tr>
<td><code>df</code> après</td>
<td><strong>100 %</strong></td>
</tr>

<tr>
<td>Exit</td>
<td><strong>≠ 0</strong> + ENOSPC sur <strong>stderr</strong></td>
</tr>
</tbody>
</table>

<p>Le <code>ls</code> distant seul trompe : on voit un fichier, on croit que c’est copié.</p>

<h3 id="cas-c-un-fichier-valide-est-écrasé">Cas C — un fichier <strong>valide</strong> est écrasé</h3>

<p>Plus intéressant : que se passe-t-il s’il y avait <strong>déjà</strong> un dump correct au même chemin ?</p>
<ol><li>j’uploade d’abord un petit fichier <strong>complet</strong> (ex. 512 Ko) → hash OK ;</li>
<li>je remplis le tmpfs (~1 Mo libre) <strong>en gardant</strong> ce fichier ;</li>
<li>je relance <code>scp</code> du gros fichier (30 Mo) vers le <strong>même nom</strong> ;</li>
<li><code>scp</code> échoue (ENOSPC), mais…</li></ol>

<table>
<thead>
<tr>
<th>Mesure</th>
<th>Avant</th>
<th>Après</th>
</tr>
</thead>

<tbody>
<tr>
<td>Taille</td>
<td><strong>512 Ko</strong> (valide)</td>
<td><strong>~1,5 Mo</strong> (tronqué)</td>
</tr>

<tr>
<td>Hash</td>
<td>OK</td>
<td><strong>changé</strong></td>
</tr>
</tbody>
</table>

<p>Donc ce n’est pas seulement un leftover : <strong>un fichier valide a été remplacé par un incomplet</strong>. Pour un dump / backup, c’est une vraie perte de données.</p>

<h2 id="rapport-bugzilla">Rapport Bugzilla</h2>

<p>J’ai ouvert un rapport sur <strong>Bugzilla — Portable OpenSSH</strong> (component <code>scp</code>), avec versions, steps, tailles, SHA-256, et le lien vers le <a href="https://bugzilla.mindrot.org/show_bug.cgi?id=1703">bug 1703</a>.</p>

<p>Titre plutôt dans cet esprit :<br>
<em>scp leaves incomplete destination file after failed transfer due to insufficient disk space</em><br>
(et le cas C renforce : <em>overwrites an existing valid file with a truncated one</em>).</p>

<p><img src="https://blog.gabrielcharib.com/media/scp-enospc/bugzilla-rapport.png" alt="Capture du rapport Bugzilla"></p>

<h2 id="bonnes-pratiques">Bonnes pratiques</h2>
<ol><li>ne pas se fier à « le fichier existe » ;</li>
<li>comparer <strong>taille</strong> source ↔ dest ;</li>
<li><strong>SHA-256</strong> des deux côtés ;</li>
<li>si partiel → <strong>supprimer</strong> (ou mieux : ne jamais écraser en place) ;</li>
<li>préférer <strong><code>rsync</code></strong> (souvent temp + rename).</li></ol>

<h2 id="en-bref">En bref</h2>
<ul><li>Problème vu sur un dump + espace disque.<br></li>
<li>Lab <strong>Docker + tmpfs</strong> : sûr, reproductible, sans casser le serveur.<br></li>
<li>Leftover partiel <strong>et</strong> écrasement d’un fichier déjà valide.<br></li>
<li>Signalé à OpenSSH (lien <a href="https://bugzilla.mindrot.org/show_bug.cgi?id=1703">bug 1703</a>).</li></ul>

<p><a href="https://blog.gabrielcharib.com/tag:scp" class="hashtag"><span>#</span><span class="p-category">scp</span></a> <a href="https://blog.gabrielcharib.com/tag:openssh" class="hashtag"><span>#</span><span class="p-category">openssh</span></a> <a href="https://blog.gabrielcharib.com/tag:testing" class="hashtag"><span>#</span><span class="p-category">testing</span></a> <a href="https://blog.gabrielcharib.com/tag:enospc" class="hashtag"><span>#</span><span class="p-category">enospc</span></a> <a href="https://blog.gabrielcharib.com/tag:docker" class="hashtag"><span>#</span><span class="p-category">docker</span></a> <a href="https://blog.gabrielcharib.com/tag:opensource" class="hashtag"><span>#</span><span class="p-category">opensource</span></a> <a href="https://blog.gabrielcharib.com/tag:bugreport" class="hashtag"><span>#</span><span class="p-category">bugreport</span></a></p>

<hr>

<p><strong>Auteur — Gabriel Charib</strong><br>
Functional Analyst / QA Tester· notes techniques &amp; projets</p>

<p><a href="/">← Tous les articles</a> · <a href="https://gabrielcharib.com">Portfolio</a> · <a href="https://www.linkedin.com/in/gabriel-charib">LinkedIn</a></p>
]]></content:encoded>
      <guid>https://blog.gabrielcharib.com/scp-disque-plein-fichier-partiel</guid>
      <pubDate>Sat, 31 Oct 2026 18:26:11 +0000</pubDate>
    </item>
    <item>
      <title>Contribution wLaunchELF &amp; serveur OpenPS2SDK</title>
      <link>https://blog.gabrielcharib.com/contribution-wlaunchelf-serveur-openps2sdk</link>
      <description>&lt;![CDATA[Petite contribution open source côté PlayStation 2, plus la mise en place d’un serveur auto-hébergé pour compiler avec l’OpenPS2SDK — sans tout installer sur mon Mac.&#xA;&#xA;!--more--&#xA;&#xA;Contribution : wLaunchELF&#xA;&#xA;PR mergée dans ps2homebrew/wLaunchELF :&#xA;&#xA;fix: clearer color labels in Screen Settings (Fixes #128)&#xA;&#xA;Dans Screen Settings, les couleurs 4 à 8 s’appelaient Normal, Graph1… Graph4. Peu clair : on ne voyait pas ce que chaque couleur changeait dans l’UI.&#xA;&#xA;| Couleur | Avant | Après |&#xA;|---------|-------|-------|&#xA;| Color4 | Normal | Text |&#xA;| Color5 | Graph1 | Folders |&#xA;| Color6 | Graph2 | ELFs |&#xA;| Color7 | Graph3 | Not Readable |&#xA;| Color8 | Graph4 | File Readable |&#xA;&#xA;Couleurs 1–3 inchangées (Backgr, Frames, Select).&#xA;&#xA;Côté code : nouvelles chaînes dans lang.h, mapping mis à jour dans config.c.  &#xA;Pas de changement des valeurs de couleur, des clés CNF (GUICol*), ni de la logique du file browser.&#xA;&#xA;Mergée le 10 juin 2026 dans master.&#xA;&#xA;Pourquoi un serveur de build ?&#xA;&#xA;Compiler le SDK PS2 sur un Mac, ça alourdit vite la machine. J’ai donc monté un serveur auto-hébergé avec l’OpenPS2SDK : édition / git sur le Mac, build sur le serveur.&#xA;&#xA;Chaîne de dev PS2&#xA;&#xA;Mac → Serveur OpenPS2SDK → Build ELF → Émulateur → PS2 réelle&#xA;&#xA;Comment je teste&#xA;&#xA;Émulateur — itérations rapides (lancer l’ELF, vérifier l’UI / les labels).&#xA;PlayStation 2 physique — validation finale sur console réelle.&#xA;&#xA;L’émulateur évite de brancher la PS2 à chaque micro-changement ; la console confirme que ça tient vraiment en conditions réelles.&#xA;&#xA;En bref&#xA;&#xA;Contribution upstream : labels de couleurs plus lisibles dans wLaunchELF.&#xA;Infra perso : serveur + OpenPS2SDK pour compiler hors du Mac.&#xA;Double test : émulateur au quotidien, PS2 pour le go final.&#xA;&#xA;Lien PR : https://github.com/ps2homebrew/wLaunchELF/pull/145&#xA;&#xA;Lire aussi&#xA;&#xA;→ Hackathon 2026 : faire du neuf avec de l&#39;ancien&#xA;&#xA;#ps2 #homebrew #wlaunchelf #opensource #openps2sdk #selfhosted&#xA;&#xA;---&#xD;&#xA;&#xD;&#xA;Auteur — Gabriel Charib  &#xD;&#xA;Functional Analyst / QA Tester· notes techniques &amp; projets  &#xD;&#xA;&#xD;&#xA;← Tous les articles · Portfolio · LinkedIn]]&gt;</description>
      <content:encoded><![CDATA[<p>Petite contribution open source côté <strong>PlayStation 2</strong>, plus la mise en place d’un <strong>serveur auto-hébergé</strong> pour compiler avec l’OpenPS2SDK — sans tout installer sur mon Mac.</p>



<h2 id="contribution-wlaunchelf">Contribution : wLaunchELF</h2>

<p>PR mergée dans <a href="https://github.com/ps2homebrew/wLaunchELF/pull/145">ps2homebrew/wLaunchELF</a> :</p>

<p><strong>fix: clearer color labels in Screen Settings (Fixes #128)</strong></p>

<p>Dans <em>Screen Settings</em>, les couleurs 4 à 8 s’appelaient <code>Normal</code>, <code>Graph1</code>… <code>Graph4</code>. Peu clair : on ne voyait pas <strong>ce que chaque couleur changeait</strong> dans l’UI.</p>

<table>
<thead>
<tr>
<th>Couleur</th>
<th>Avant</th>
<th>Après</th>
</tr>
</thead>

<tbody>
<tr>
<td>Color4</td>
<td>Normal</td>
<td><strong>Text</strong></td>
</tr>

<tr>
<td>Color5</td>
<td>Graph1</td>
<td><strong>Folders</strong></td>
</tr>

<tr>
<td>Color6</td>
<td>Graph2</td>
<td><strong>ELFs</strong></td>
</tr>

<tr>
<td>Color7</td>
<td>Graph3</td>
<td><strong>Not Readable</strong></td>
</tr>

<tr>
<td>Color8</td>
<td>Graph4</td>
<td><strong>File Readable</strong></td>
</tr>
</tbody>
</table>

<p>Couleurs 1–3 inchangées (<em>Backgr</em>, <em>Frames</em>, <em>Select</em>).</p>

<p>Côté code : nouvelles chaînes dans <code>lang.h</code>, mapping mis à jour dans <code>config.c</code>.<br>
<strong>Pas de changement</strong> des valeurs de couleur, des clés CNF (<code>GUI_Col_*</code>), ni de la logique du file browser.</p>

<p>Mergée le 10 juin 2026 dans <code>master</code>.</p>

<h2 id="pourquoi-un-serveur-de-build">Pourquoi un serveur de build ?</h2>

<p>Compiler le SDK PS2 sur un Mac, ça alourdit vite la machine. J’ai donc monté un <strong>serveur auto-hébergé</strong> avec l’<strong>OpenPS2SDK</strong> : édition / git sur le Mac, <strong>build sur le serveur</strong>.</p>

<p><img src="https://blog.gabrielcharib.com/media/wlaunchelf-ps2/chemin.png" alt="Chaîne de dev PS2"></p>

<p><strong>Mac → Serveur OpenPS2SDK → Build ELF → Émulateur → PS2 réelle</strong></p>

<h2 id="comment-je-teste">Comment je teste</h2>
<ol><li><strong>Émulateur</strong> — itérations rapides (lancer l’ELF, vérifier l’UI / les labels).</li>
<li><strong>PlayStation 2 physique</strong> — validation finale sur console réelle.</li></ol>

<p>L’émulateur évite de brancher la PS2 à chaque micro-changement ; la console confirme que ça tient vraiment en conditions réelles.</p>

<h2 id="en-bref">En bref</h2>
<ul><li>Contribution upstream : labels de couleurs plus lisibles dans wLaunchELF.</li>
<li>Infra perso : serveur + OpenPS2SDK pour compiler hors du Mac.</li>
<li>Double test : émulateur au quotidien, PS2 pour le go final.</li></ul>

<p>Lien PR : <a href="https://github.com/ps2homebrew/wLaunchELF/pull/145">https://github.com/ps2homebrew/wLaunchELF/pull/145</a></p>

<h2 id="lire-aussi">Lire aussi</h2>

<p>→ <a href="/hackathon-2026-faire-du-neuf-avec-de-lancien">Hackathon 2026 : faire du neuf avec de l&#39;ancien</a></p>

<p><a href="https://blog.gabrielcharib.com/tag:ps2" class="hashtag"><span>#</span><span class="p-category">ps2</span></a> <a href="https://blog.gabrielcharib.com/tag:homebrew" class="hashtag"><span>#</span><span class="p-category">homebrew</span></a> <a href="https://blog.gabrielcharib.com/tag:wlaunchelf" class="hashtag"><span>#</span><span class="p-category">wlaunchelf</span></a> <a href="https://blog.gabrielcharib.com/tag:opensource" class="hashtag"><span>#</span><span class="p-category">opensource</span></a> <a href="https://blog.gabrielcharib.com/tag:openps2sdk" class="hashtag"><span>#</span><span class="p-category">openps2sdk</span></a> <a href="https://blog.gabrielcharib.com/tag:selfhosted" class="hashtag"><span>#</span><span class="p-category">selfhosted</span></a></p>

<hr>

<p><strong>Auteur — Gabriel Charib</strong><br>
Functional Analyst / QA Tester· notes techniques &amp; projets</p>

<p><a href="/">← Tous les articles</a> · <a href="https://gabrielcharib.com">Portfolio</a> · <a href="https://www.linkedin.com/in/gabriel-charib">LinkedIn</a></p>
]]></content:encoded>
      <guid>https://blog.gabrielcharib.com/contribution-wlaunchelf-serveur-openps2sdk</guid>
      <pubDate>Sat, 31 Oct 2026 15:24:14 +0000</pubDate>
    </item>
  </channel>
</rss>