<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
  <title>Journal technique — Andrew Ebsworth</title>
  <link>https://www.fadamatik.fr/affutos.html#journal</link>
  <atom:link href="https://www.fadamatik.fr/journal.xml" rel="self" type="application/rss+xml"/>
  <description>Des pannes qui m'ont appris quelque chose, et le chemin pour les comprendre.</description>
  <language>fr</language>
  <lastBuildDate>Mon, 10 Aug 2026 09:00:00 +0200</lastBuildDate>
  <item>
  <title>La bonne piste n'était pas celle que je croyais</title>
  <link>https://www.fadamatik.fr/affutos.html#billet-cache</link>
  <guid isPermaLink="true">https://www.fadamatik.fr/affutos.html#billet-cache</guid>
  <pubDate>Tue, 18 Aug 2026 21:40:00 +0200</pubDate>
  <description>Le correctif évident était une régression : douze paquets préchargés sur douze retéléchargés. Le vrai gain venait d'ailleurs — un cache sur le réseau local fait passer l'installation de 12 à 5 minutes, et le trafic de 4,2 Go à 341 Mo.</description>
</item>
<item>
  <title>Sortir la configuration du script, et la mettre dans l'image</title>
  <link>https://www.fadamatik.fr/affutos.html#billet-config</link>
  <guid isPermaLink="true">https://www.fadamatik.fr/affutos.html#billet-config</guid>
  <pubDate>Tue, 18 Aug 2026 21:40:00 +0200</pubDate>
  <description>Mille lignes de substitutions appliquées à chaud remplacées par une configuration qui vit dans l'image, relisible et versionnée. Et 925 lignes tombées dans la relecture qui a suivi.</description>
</item>
<item>
    <title>Un seul bit retourné dans une image de 2,8 Go</title>
    <link>https://www.fadamatik.fr/affutos.html#billet-bit</link>
    <guid isPermaLink="false">fadamatik-journal-bit</guid>
    <pubDate>Mon, 10 Aug 2026 09:00:00 +0200</pubDate>
    <description><![CDATA[<p>Le démarrage réseau d'AffûtOS s'est mis à refuser l'image système : <code>checksum error</code>. Réflexe habituel : régénérer la somme de contrôle. Ç'aurait été la pire décision possible.</p>
<h4>Le disque disait vrai, la mémoire mentait</h4>
<p>En comparant l'image publiée avec celle du répertoire de travail, un seul octet différait sur 2 823 114 752 — et il ne différait que d'<b>un bit</b> : <code>0xA2</code> était devenu <code>0xAA</code>. Le reste de l'image, noyau et initramfs compris, était identique au bit près.</p>
<p>La chronologie situait l'accident dans une fenêtre d'une seconde et demie, pendant la recopie de l'image vers le fichier ISO. Le fichier source sur le disque, relu plus tard en contournant le cache mémoire, était parfaitement sain.</p>
<h4>La preuve, quelques heures plus tard</h4>
<p>Le même jour, un paquet du cache s'est mis à échouer sa vérification de signature. Lu normalement — donc depuis la mémoire — sa signature était invalide. Lu <b>directement depuis le disque</b>, elle était parfaite. Et le bit fautif était le même que celui de l'image : le bit 3.</p>
<p>La machine a une mémoire sans correction d'erreurs, quatre barrettes poussées au-delà des fréquences validées par le constructeur. Elle n'a aucun moyen de détecter, et encore moins de corriger, ce genre d'accident.</p>
<h4>Ce que j'en ai tiré</h4>
<ul>
  <li>Une somme de contrôle qui échoue est une <b>bonne nouvelle</b> : elle a fait son travail. La régénérer revient à certifier officiellement une donnée corrompue.</li>
  <li>Une vérification qui relit un fichier juste après l'avoir écrit ne vérifie que la mémoire. Il faut <b>vider le cache avant de relire</b>, sinon on valide la copie suspecte avec elle-même.</li>
  <li>Rien n'est publié désormais sans une relecture disque de tous les fichiers, et pas seulement du plus gros.</li>
</ul>]]></description>
  </item>
  <item>
    <title>Trois heures perdues sur un bit de permission</title>
    <link>https://www.fadamatik.fr/affutos.html#billet-hook</link>
    <guid isPermaLink="false">fadamatik-journal-hook</guid>
    <pubDate>Sun, 09 Aug 2026 09:00:00 +0200</pubDate>
    <description><![CDATA[<p>Objectif : associer le Wi-Fi <b>depuis l'initramfs</b>, avant que le système n'existe, pour installer une machine sans câble réseau. Le script était écrit, injecté dans l'image, et ne s'exécutait pas. Aucun message. Aucune erreur. Rien.</p>
<h4>Tout était correct, sauf une chose</h4>
<p>Le fichier était bien présent dans l'image — vérifié. Sa syntaxe était valide — vérifiée avec l'interpréteur exact de l'initramfs. Son chargement définissait bien la fonction attendue — vérifié. Il figurait dans la liste des scripts à exécuter — vérifié. Et pourtant il ne tournait jamais.</p>
<p>La réponse était dans le code du système d'amorçage, une seule ligne :</p>
<p><code>[ -x "/hooks/$hook" ] || continue</code></p>
<p><b>Un script non exécutable est ignoré, sans le moindre message.</b> C'est même le mécanisme officiel de désactivation : la fonction prévue pour désactiver un script se contente de lui retirer son bit d'exécution.</p>
<p>En reconstruisant l'image à la main, j'avais recréé le fichier en <code>0644</code> au lieu de <code>0755</code>. J'avais désactivé mon propre script sans le savoir, à chaque tentative.</p>
<h4>Deux leçons de méthode</h4>
<ul>
  <li>J'ai ajouté un <b>numéro de version affiché à l'écran</b> par le script. Sans lui, impossible de savoir quelle version tournait réellement — j'ai passé une heure à tester des correctifs qui n'étaient pas chargés.</li>
  <li>La console de l'initramfs n'affiche pas les caractères accentués : tous mes messages de diagnostic en français apparaissaient comme des symboles illisibles. Ils étaient là depuis le début, je ne pouvais simplement pas les lire.</li>
</ul>]]></description>
  </item>
  <item>
    <title>Chercher un réglage dans du JavaScript minifié</title>
    <link>https://www.fadamatik.fr/affutos.html#billet-steam</link>
    <guid isPermaLink="false">fadamatik-journal-steam</guid>
    <pubDate>Sun, 09 Aug 2026 09:00:00 +0200</pubDate>
    <description><![CDATA[<p>Je voulais que trois réglages du mode jeu soient appliqués dès l'installation, sans intervention : ne jamais réduire la luminosité sur secteur, ne jamais se mettre en veille, et afficher le pourcentage de batterie. Les noms de clés semblaient évidents. Ils ne fonctionnaient pas.</p>
<h4>La bonne clé au mauvais endroit</h4>
<p>Le fichier de configuration contient <b>deux blocs portant le même nom</b>. Le logiciel n'en lit qu'un : le plus profond. J'écrivais dans l'autre. La clé était juste, la valeur était juste, l'emplacement était faux — donc rien ne se passait, sans le moindre avertissement.</p>
<p>Même piège pour le pourcentage de batterie, quelques heures plus tard : la clé devait vivre dans un sous-bloc précis, aux côtés de trois clés sœurs écrites par le même composant. À la racine, elle restait lettre morte.</p>
<h4>La méthode qui a marché</h4>
<p>Deux approches complémentaires. D'abord l'<b>empirique</b> : prendre une photo des fichiers, modifier le réglage à la main dans l'interface, comparer. Le fichier avoue alors exactement ce qu'il faut écrire, et où.</p>
<p>Ensuite la <b>lecture des sources</b>. L'interface de Steam n'est plus une bibliothèque compilée mais du JavaScript minifié : une centaine de mégaoctets de code illisible, mais parfaitement consultable. On y retrouve le nom exact de la clé, la fonction qui l'écrit, et celle qui la relit au démarrage — donc la certitude qu'une valeur posée d'avance sera bien reprise.</p>
<h4>Un piège à éviter absolument</h4>
<p>Une astuce circule pour désactiver l'assistant de premier démarrage : créer un certain fichier de configuration avec une ligne magique. Le lanceur, quand il rencontre cette ligne, exécute un <code>rm -rf</code> sur tout le dossier de l'application — <b>à chaque démarrage</b>. La solution correcte utilise un fichier d'amorçage prévu par l'éditeur, que personne ne semble utiliser.</p>]]></description>
  </item>
</channel>
</rss>
