Carnet de Nicolas - Informatique<p>Journal de bord et autres pérégrinations de l’esprit</p>2024-03-27T22:03:33+01:00Nicolas Deveneturn:md5:c64bf8398f6fc805af0c91614d3dee0bDotclearRésoudre les erreurs Apache « File not found » et « Primary script unknown »urn:md5:aa4da57681fa77ca291f5c241fba911c2024-02-25T14:00:00+01:002024-02-26T00:21:31+01:00NicolasInformatique<p>Avec les ajustements effectués pour PHP 8.2 suite à la <a href="https://www.nicolas.pm/note/2024/mise-a-jour-vers-debian-12-bookworm">migration vers Debian 12</a>, je pensais avoir fait le tour des erreurs rencontrées et les avoir corrigées.
Et puis, en accédant à une page qui n’existe pas, j’ai eu cette page blanche avec l’erreur <code>File not found.</code> au lieu d’avoir une page d’erreur 404 personnalisée.</p>
<figure class="txt-center figure-lg">
<img src="https://www.nicolas.pm/public/screenshots/2024-02-25-not-found-script-error.png" alt="Page d’un navigateur sur URL inexistante qui affiche une page blanche avec le texte « File not found. »." loading="lazy">
<figcaption>Erreur « File not found. » affichée au lieu d’une erreur 404 personnalisée.</figcaption>
</figure>
<p>Dans les journaux d’erreur d’Apache, je trouve une entrée correspondante à l’accès de cette page, que je n’avais encore jamais rencontrée.</p>
<pre><code>… [proxy_fcgi:error] Got error 'Primary script unknown'
</code></pre>
<p>Grâce à <a href="https://serverfault.com/questions/984990/ah01071-got-error-primary-script-unknown-n-apache2-4-php-fpm7-2">cette réponse</a> partagée sur <em>StackExchange</em>, le coupable est bien lié à PHP 8.2 et au module PHP-FPM associé — c’est une sorte d’intermédiaire entre Apache et PHP, qui permet normalement d’améliorer les performances dans l’exécution des requêtes dynamiques.
L’erreur affichée <code>File not found.</code> sur la page web signifie que c’est le moteur PHP-FPM qui a essayé de traiter la demande de cette URL inexistante, au lieu de laisser Apache s’en occuper. Heureusement, il est possible de modifier le comportement de PHP-FPM.</p>
<p>Dans le fichier <code>/etc/apache2/conf-enabled/php8.2-fpm.conf</code>, on va sélectionner la configuration qui vérifie que le script existe au préalable :</p>
<ul class="following">
<li>on commente les lignes 11 à 13 ;</li>
<li>on décommente les lignes 18 à 22.</li>
</ul>
<p>Normalement, le fichier doit avoir été modifié ainsi :</p>
<pre><code># Redirect to local php-fpm if mod_php is not available
<IfModule !mod_php8.c>
<IfModule proxy_fcgi_module>
# Enable http authorization headers
<IfModule setenvif_module>
SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1
</IfModule>
# Using (?:pattern) instead of (pattern) is a small optimization that
# avoid capturing the matching pattern (as $1) which isn't used here
#<FilesMatch ".+\.ph(?:ar|p|tml)$">
# SetHandler "proxy:unix:/run/php/php8.2-fpm.sock|fcgi://localhost"
#</FilesMatch>
# The default configuration works for most of the installation, however it could
# be improved in various ways. One simple improvement is to not pass files that
# doesn't exist to the handler as shown below, for more configuration examples
# see https://wiki.apache.org/httpd/PHP-FPM
<FilesMatch ".+\.ph(?:ar|p|tml)$">
<If "-f %{REQUEST_FILENAME}">
SetHandler "proxy:unix:/run/php/php8.2-fpm.sock|fcgi://localhost"
</If>
</FilesMatch>
<FilesMatch ".+\.phps$">
# Deny access to raw php sources by default
# To re-enable it's recommended to enable access to the files
# only in specific virtual host or directory
Require all denied
</FilesMatch>
# Deny access to files without filename (e.g. '.php')
<FilesMatch "^\.ph(?:ar|p|ps|tml)$">
Require all denied
</FilesMatch>
</IfModule>
</IfModule>
</code></pre>
<p>On redémarre ensuite Apache pour que la configuration soit prise en compte.</p>
<pre><code>systemctl restart apache2
</code></pre>
<figure class="txt-center figure-lg">
<img src="https://www.nicolas.pm/public/screenshots/2024-02-25-not-found-custom-error.png" alt="Page d’un navigateur sur URL inexistante qui affiche une page d’erreur 404 personnalisée." loading="lazy">
<figcaption>Page 404 personnalisée affichée pour une URL inexistante.</figcaption>
</figure>
<p>Le comportement existant affichant la page d’erreur 404 personnalisée est maintenant bien rétabli. Youpi !</p>
https://www.nicolas.pm/note/2024/resoudre-erreurs-apache-file-not-found-et-primary-script-unknown#comment-formhttps://www.nicolas.pm/feed/atom/comments/52Mise à jour vers Debian 12 Bookwormurn:md5:6b797fd31760949499febfc24143e6f02024-02-18T12:00:00+01:002024-02-25T22:20:43+01:00NicolasInformatique<p>Ma précédente montée de version depuis la version 10 (Buster) vers Debian 11 (Bullseye) ne s’était bien passée du tout : j’avais dû réinstaller une nouvelle version de zéro. Je n’avais perdu aucune donnée grâce aux sauvegardes régulières automatiques, et spécifiquement celle faite manuellement avant la mise à jour.</p>
<p>J’ai donc trainé des pieds pour mettre à jour vers la version 12 (Bookworm) qui est sortie depuis juin 2023. D’autant que je n’avais pas particulièrement besoin des nouveautés, mes services tournant bien avec Debian 11. Sauf que… pour bénéficier des dernières versions de PHP supportées (notamment la 8.2), je me suis décidé à faire la mise à jour redoutée.</p>
<h2>Mise à jour de Debian Bullseye vers Debian Bookworm</h2>
<ol>
<li>On commence par sauvegarder ses données et configurations.</li>
<li>On s’assure qu’on est à jour sur notre version actuelle de Debian 11.
<pre>apt update
apt full-upgrade
apt --purge autoremove</pre></li>
<li>On met à jour les dépôts avec la nouvelle version de Debian 12 grâce au fichier <code>/etc/apt/sources.list</code> et ceux présents dans <code>/etc/apt/sources.list.d/</code>.
<ul><li>On remplace les termes <code>bullseye</code> par <code>bookworm</code>.</li>
<li>S’il y a la présence de la valeur <code>non-free</code>, on ajoute aussi la valeur <code>non-free-firmware</code> juste après.</li></ul></li>
<li>On peut maintenant lancer la mise à jour du système vers Debian 12.
<pre>apt update
apt upgrade
apt full-upgrade</pre></li>
<li>On redémarre le système.
<pre>reboot</pre></li>
<li>On termine par retirer les paquets qui ne sont plus utiles.
<pre>apt --purge autoremove</pre></li>
</ol>
<h2>Impacts de la version PHP 8.2</h2>
<p>En mettant à jour vers Debian 12, la version de PHP embarquée passe de la 7.4 à la 8.2, ce qui peut entrainer des erreurs sur des services ou applications pas mises à jour, ou plus maintenues.</p>
<h3>Nextcloud</h3>
<p>Ma version actuelle de Nextcloud ne fonctionnait plus avec PHP 8.2 : elle n’était pas compatible. J’ai simplement téléchargé la version suivante compatible avec PHP 8.2 et remplacé le dossier du moteur de Nextcloud.</p>
<p>À partir de là, j’ai pu lancer la mise à jour via la ligne de commande, et tout est revenu en ordre.</p>
<h3>Dynamic property</h3>
<p>J’utilise un lecteur de flux RSS qui n’est (malheureusement) plus maintenu, mais qui fonctionne très bien. Sauf qu’il charge des propriétés dynamiques, ce qui est déprécié dans PHP 8.2 et entraine des erreurs comme « Creation of dynamic property is deprecated ».</p>
<p>En suivant la recommandation de <a href="https://php.watch/versions/8.2/dynamic-properties-deprecated">PHP 8.2: Dynamic Properties are deprecated</a>, j’ai préfixé les classes problématiques avec l’attribut <code>#[AllowDynamicProperties]</code>, et me voilà reparti pour un tour.</p>
https://www.nicolas.pm/note/2024/mise-a-jour-vers-debian-12-bookworm#comment-formhttps://www.nicolas.pm/feed/atom/comments/51Exclure un dossier des aperçus de Photos sur Nextcloudurn:md5:f0db95d13ee90de00be25cc353beb78d2023-10-15T17:00:00+02:002023-10-16T13:55:10+02:00NicolasInformatique <p>Par défaut dans Nextcloud, toutes les photos des différents dossiers sont indexées et visibles dans l’app <em>Photos</em>. Très pratique, mais parfois certains dossiers ne sont pas pertinents à être indexés.</p>
<p>Il est possible d’exclure les dossiers que l’on souhaite, en créant les deux fichiers (sans contenu) <code>.nomedia</code> et <code>.noindex</code> à la racine du dossier en question. À partir de ce moment, les photos présentes dans ce dossier et ses sous-dossiers ne sont seront plus indexées ni visibles dans <em>Photos</em>.</p>
https://www.nicolas.pm/note/2023/exclure-un-dossier-des-apercus-de-photos-sur-nextcloud#comment-formhttps://www.nicolas.pm/feed/atom/comments/42Installer une machine virtuelle Windows sur Mac avec puce Appleurn:md5:cbea1925b85de8e478f0dd22c03745362023-09-20T22:00:00+02:002023-09-21T10:59:54+02:00NicolasInformatique <p>En passant sur un Mac avec les nouvelles puces Apple (appelées aussi M1 ou M2), il ne m’était plus possible de lancer une machine virtuelle avec Windows. L’architecture des puces des Mac est passée d’Intel à ARM, ce qui posait problème.</p>
<p>J’ai longtemps galéré à trouver un logiciel et une image Windows compatibles. Et puis je suis tombé sur le logiciel UTM.</p>
<figure class="figure-lg txt-center">
<img src="https://www.nicolas.pm/public/screenshots/2023-09-01-utm-windows-on-macos.png" alt="Machine virtuelle Windows sur macOS avec le logiciel UTM." loading="lazy">
<figcaption>Machine virtuelle Windows sur macOS avec le logiciel UTM.</figcaption>
</figure>
<p>Leur <a href="https://docs.getutm.app/guides/windows/">documentation pour l’installation de Windows</a> sur Mac est extrêmement claire et bien détaillée. Il suffit de suivre les étapes et vous voilà avec une machine virtuelle Windows sur votre Mac.</p>
<p>L’architecture de la machine virtuelle Windows repose par contre sur ARM, ce qui impose quelques limitations dans votre utilisation de certaines fonctionnalités Windows. C’est par exemple le cas pour leurs outils de développement dans des anciennes versions de .NET.</p>
https://www.nicolas.pm/note/2023/installer-une-machine-virtuelle-windows-sur-mac-avec-puce-apple#comment-formhttps://www.nicolas.pm/feed/atom/comments/46Le domaine www.frurn:md5:ebabd4e3b55525dad009b448fc0ed61c2022-10-30T19:30:00+01:002024-02-25T23:00:20+01:00NicolasInformatiquenumérique<p>En lisant la nouvelle <a href="https://www.next.ink/brief_article/lafnic-a-migre-son-systeme-registre-sur-nouvelle-infrastructure/"><em>L’Afnic a migré son système de registre sur une nouvelle infrastructure</em></a>, je me suis retrouvé à parcourir leur site. Et c’est ainsi que j’ai découvert que le domaine <a href="http://www.fr">www.fr</a> existe et est fonctionnel.</p>
<p>L’Afnic — Association française pour le nommage Internet en coopération — a pour mission de gérer les domaines Internet nationaux de premier niveau de la France (.fr), mais aussi de certains <abbr title="départements et régions d’outre-mer et collectivités d’outre-mer">DROM-COM</abbr> comme La Réunion (.re) ou Saint-Pierre-et-Miquelon (.pm). C’est d’ailleurs ce dernier qui est utilisé pour le nom de domaine de ce blog : <code>nicolas.pm</code>.</p>
<p>En étudiant la <a href="https://www.afnic.fr/wp-media/uploads/2021/07/afnic-charte-de-nommage-2021-09-15.pdf">charte de nommage des domaines de 1<sup>er</sup> niveau</a>, l’article <em>2.6 - Noms de domaine réservés à l’Office d’enregistrement</em> liste les domaines qui sont réservés à l’Afnic et ne peuvent pas être achetés :</p>
<ul>
<li>asso,</li>
<li>com,</li>
<li>fr,</li>
<li>gouv,</li>
<li>nic,</li>
<li>[…]</li>
<li>w3,</li>
<li>web,</li>
<li>whois,</li>
<li><strong>www</strong>.</li>
</ul>
<p>On apprend qu’il y a plusieurs domaines réservés, par exemple le <code>gouv.fr</code> pour les sites du gouvernement, ou encore le <code>www.fr</code>, que l’on pourrait presque considérer un peu comme le premier site Internet français (au sens « hiérarchique »). La plupart des domaines réservés ne sont pas accessibles, mais certains comme <code>nic.fr</code>, <code>web.fr</code> ou <code>www.fr</code> sont fonctionnels et renvoient vers le site de l’Afnic. C’est intéressant de noter que <code>w3.fr</code> renvoie lui vers le site du W3C France.</p>
<p>Toujours en parcourant les règles pour l’utilisation des domaines en .fr, on peut découvrir les <a href="https://www.afnic.fr/wp-media/uploads/2021/01/Termes-soumis-à-examen-préalable-version-2021.pdf">termes soumis à
examen préalable</a> de l’Afnic pour être enregistrés : par exemple les noms des communes françaises ou des professions réglementées.</p>
https://www.nicolas.pm/note/2022/le-domaine-www-fr#comment-formhttps://www.nicolas.pm/feed/atom/comments/32Configurer Pi-hole pour le décodeur TV Orangeurn:md5:c67f7cd7241c240652e83094864374212022-04-13T00:30:00+02:002022-04-13T09:15:53+02:00NicolasInformatiquevie privée<p>Vous avez configuré Pi-hole sur votre réseau pour profiter d’une navigation sans publicité et plus respectueuse de votre privée. Et pour que ce soit le plus efficace, c’est-à-dire pour que tous les appareils connectés à votre réseau en bénéficient, vous avez désactivé le serveur DHCP de la Livebox pour que celui de Pi-hole prenne le relais. Jusque-là, tout va bien.</p>
<p>Maintenant, si vous avez un décodeur TV Orange, ce dernier ne fonctionne plus. Il a absolument besoin du serveur DNS de la Livebox et d’une configuration réseau particulière. Heureusement, il est possible de le faire fonctionner correctement, tout en conservant Pi-hole !</p>
<p>Grâce au tutoriel <a href="https://forums.framboise314.fr/viewtopic.php?f=57&t=5960" rel="external">[Tuto] Pi-Hole, Livebox et décodeur TV Orange</a> très complet, nous allons pouvoir configurer notre Pi-hole pour permettre au décodeur TV Orange de fonctionner.</p>
<ol>
<li>Connectez-vous à votre Raspberry Pi (ou serveur) hébergeant Pi-hole.</li>
<li>Accédez au dossier <code>/etc/dnsmasq.d/</code>.</li>
<li>Créez le fichier <code>99-pihole-decodeur.conf</code> avec le contenu suivant :
<pre>dhcp-host=AA:BB:CC:DD:EE:FF,set:decodeur
dhcp-option=tag:decodeur,option:router,192.168.1.1
dhcp-option=tag:decodeur,option:domain-name,home
dhcp-option=tag:decodeur,option:dns-server,192.168.1.1
dhcp-option-force=tag:decodeur,vi-encap:3561,4,"001122"
dhcp-option-force=tag:decodeur,vi-encap:3561,5,"ABCDEFGH"
dhcp-option-force=tag:decodeur,vi-encap:3561,6,"Livebox Fibre"</pre>
et en remplaçant :
<ul>
<li><code>AA:BB:CC:DD:EE:FF</code> par l’adresse MAC du décodeur TV ;</li>
<li><code>192.168.1.1</code> par l’adresse IP de la Livebox ;</li>
<li><code>001122</code> par les 6 premiers caractères de l’adresse MAC de la Livebox (sans les deux-points) ;</li>
<li><code>ABCDEFGH</code> par le numéro de série de la Livebox.</li>
</ul>
<p>Ces informations, notamment celle sur le numéro de série de la Livebox, peuvent être récupérées sur l’interface d’administration de la Livebox dans les <em>Paramètres avancés</em> (logo en forme de roue crantée), rubrique <em>Informations systèmes</em>, dans le premier onglet <em>Général</em>.</p>
</li>
</ol>
<p>Après avoir redémarré votre Pi-hole, vous pouvez maintenant allumer votre décodeur TV : il est de nouveau opérationnel !</p>
https://www.nicolas.pm/note/2022/configurer-pi-hole-pour-le-decodeur-tv-orange#comment-formhttps://www.nicolas.pm/feed/atom/comments/26Résoudre l’erreur “Verifying integrity” lors de la mise à jour de Nextcloudurn:md5:a9e84b276f25d4b435c9a1a4f440bc642022-02-22T12:30:00+01:002022-02-23T09:32:56+01:00NicolasInformatique<p>Lors de la dernière mise à jour de Nextcloud, j’ai rencontré à l’étape <em>Verifying integrity</em> l’erreur <code>Parsing response failed</code> bloquant la suite de la procédure.</p>
<figure class="txt-center figure-lg">
<img src="https://www.nicolas.pm/public/screenshots/2022-02-18-maj-nextcloud-integry-failed.png" alt="Erreur à l’étape “Verifying integrity” lors de la mise à jour de Nextcloud." loading="lazy">
<figcaption>Mise à jour de Nextcloud : erreur bloquante à l’étape <em>Verifying integrity</em>.</figcaption>
</figure>
<p>En cherchant le problème dans l’aide de Nexctloud, d’autres personnes ont rencontré le souci : il est fort probable que ça vienne de la limite de mémoire PHP configurée sur le serveur.</p>
<p>Pour en avoir le cœur net, rendez-vous dans l’administration de votre instance Nextcloud, sur la page <em>Vue d’ensemble</em> (accessible à <code>/settings/admin/overview</code>). C’est à cet endroit que sont affichés les avertissements (s’il y en a).</p>
<figure class="txt-center figure-lg ">
<img class="img-screenshot" src="https://www.nicolas.pm/public/screenshots/2022-02-18-nextcloud-php-memory-limit.png" alt="Vue d’ensemble de l’administration de Nexctloud : erreurs concernant la configuration." loading="lazy">
<figcaption>Nextcloud : limite de mémoire PHP inférieure à la recommandation.</figcaption>
</figure>
<p>Si vous avez l’erreur « La limite de mémoire PHP est inférieure à la valeur recommandée de 512 Mo », c’est bien la cause de l’échec de la mise à jour. Nous allons augmenter cette limite en modifiant la configuration de PHP.</p>
<ol>
<li>Accédez au fichier de configuration de PHP sur votre serveur. Comme j’utilise le moteur FPM de PHP 7.4, le fichier à modifier dans mon cas est <code>/etc/php/7.4/fpm/php.ini</code>.</li>
<li>Trouvez la ligne <code>memory_limit</code> et modifiez le paramètre à la valeur recommandée par Nextcloud. <pre>memory_limit = 512M</pre></li>
<li>Redémarrez le moteur FPM. <pre>systemctl restart php7.4-fpm.service</pre></li>
<li>On peut maintenant relancer la mise à jour de Nextcloud. Il n’y aura plus de blocage à l’étape <em>Verifying integrity</em>.</li>
</ol>
<p>Quand c’est terminé, je vous recommande de mettre l’ancienne valeur présente pour <code>memory_limit</code>, généralement <code>64M</code> ou <code>128M</code>, surtout si vous hébergez d’autres services ou sites sur le même serveur.</p>
<hr />
<p>Bonus : si après la mise à jour, dans les avertissements vous avez des indexes manquants, il faut jouer la commande suivante pour corriger, en remplaçant <code>…</code> avec le chemin du répertoire de Nextcloud.</p>
<pre><code>su - www-data -s /bin/bash -c '/usr/bin/php /…/occ db:add-missing-indices'
</code></pre>
https://www.nicolas.pm/note/2022/resoudre-lerreur-verifying-integrity-lors-de-la-maj-de-nextcloud#comment-formhttps://www.nicolas.pm/feed/atom/comments/23Votre calendrier de l’avent pour dévoiler une image par joururn:md5:4c3e722385c2fddec55be1e5b5d3c6512021-12-01T13:00:00+01:002023-07-05T08:59:30+02:00NicolasInformatique<p>Il y a quelques années déjà, j’ai créé une petite application web légère qui permet de faire un calendrier de l’avent en dévoilant une nouvelle image chaque jour avant Noël.</p>
<p>Il s’agit d’<a href="https://www.devenet.eu/advent/">Advent Calendar</a>, disponible sur <a href="https://github.com/Devenet/AdventCalendar" title="Code source d’Advent Calendar">GitHub</a>, et il y a même une <a href="https://www.devenet.eu/advent/demo" title="Version de démo d’Advent Calendar">version de démonstration</a> en ligne.</p>
<figure class="txt-center figure-lg">
<img src="https://www.nicolas.pm/public/screenshots/2021-12-01-advent-calendar.png" alt="Calendrier de l’avent en image : chaque nouveau jour est une case qui permet de découvrir l’image du jour." loading="lazy">
<figcaption>Calendrier de l’avent : une image par jour est dévoilée.</figcaption>
</figure>
<p>Cette application PHP se veut simple, légère et rapide. Il suffit de copier les fichiers téléchargés dans le dossier de votre serveur web, et de placer les images ou photos dans le bon répertoire. Il est aussi possible de configurer l’application pour en faire un compte à rebours avant un événement.</p>
<p>Ce qui suit est un guide d’installation et de configuration simplifiée en français, basé sur la <a href="https://github.com/Devenet/AdventCalendar/blob/master/README.md" title="Guide d’installation d’Advent Calendar (en anglais)">documentation</a> plus détaillée (en anglais).</p>
<aside class="has-translation">
<p>🇬🇧 This article is also available in English!
<br>→ <a href="https://www.nicolas.pm/note/2022/your-advent-calendar-to-reveal-one-image-per-day">Your advent calendar to reveal one image per day</a></p>
</aside>
<h2>Installation d’Advent Calendar</h2>
<ol>
<li>Téléchargez la <a href="https://github.com/Devenet/AdventCalendar/releases">dernière version</a> sur GitHub. (Vous pouvez aussi cloner le dépôt pour plus facilement récupérer les mises à jour.)</li>
<li>Dézippez le fichier téléchargé dans le répertoire de votre serveur web, et accédez au dossier créé. (Vous pouvez modifier le nom du dossier, cela n’a pas d’impact.)</li>
<li>Rendez-vous maintenant dans le dossier <code>private</code>. Il contient la configuration, et c’est là que nous stockerons les fichiers.
<ul>
<li>Dupliquez le fichier <code>settings.example.json</code> en <code>settings.json</code>. Modifiez ce nouveau fichier pour remplacer le titre par celui que vous souhaitez, et configurez la bonne année du calendrier.</li>
<li>Stockez les images ou photos dans ce dossier. Elles doivent être nommées de 1 à 24, et être au format JPEG, PNG ou GIF.<br />
Par exemple <code>1.jpeg</code>, <code>2.jpg</code>, <code>3.png</code>, etc.</li>
</ul></li>
<li>À partir de là, c’est fonctionnel !</li>
</ol>
<h2>Configuration avancée</h2>
<p>Il est possible de configurer plus en détails votre calendrier. Vous pouvez retrouver toutes les <a href="https://github.com/Devenet/AdventCalendar/blob/master/README.md#full-available-options">options disponibles</a> dans le guide en anglais. J’ai aussi mis en ligne un <a href="https://www.devenet.eu/advent/generator/#settings">générateur de fichier de configuration</a>.</p>
<p>Nous allons voir trois options qui peuvent être utiles.</p>
<h3>Ajouter un mot de passe</h3>
<p>Pour protéger l’accès à son calendrier, par exemple pour que seuls ses proches ou ses ami·es y accèdent, il est possible d’ajouter un mot de passe.</p>
<figure class="txt-center figure-lg">
<img src="https://www.nicolas.pm/public/screenshots/2021-12-01-advent-calendar-private.png" alt="Formulaire de connexion pour accéder au calendrier de l’avent privé." loading="lazy">
<figcaption>Calendrier de l’avent privé : connexion avec un mot de passe.</figcaption>
</figure>
<p>Il faut ajouter la ligne suivante dans le fichier de configuration <code>settings.json</code> :</p>
<pre><code>"passkey": "My top secret password!"
</code></pre>
<h3>Compte à rebours</h3>
<p>En précisant dans le fichier de configuration <code>settings.json</code> le jour de début, de fin et le mois, en plus de l’année, le calendrier de l’avent devient un compte à rebours.</p>
<pre><code>"year": 2021,
"month": 12,
"first_day": 1,
"last_day": 24
</code></pre>
<p>Pour l’instant, il n’est pas possible de faire un compte à rebours sur deux mois calendaires différents.</p>
<h3>Ajouter titre, légende et description</h3>
<p>L’application permet de personnaliser le titre de chaque jour, tout comme d’ajouter une légende sous chaque photo ainsi qu’une description. Il est possible également d’ajouter un lien vers lequel l’image et la légende redirigent.</p>
<p>Il faut créer un nouveau fichier nommé <code>calendar.json</code> qui a la structure suivante pour chaque jour à personnaliser :</p>
<pre><code>{
"6": {
"title": "Saint Nicolas",
"legend": "Strasbourg, déc. 2008",
"text": "Lorem ipsum dolor sit amet, […].",
"link": "https://www.devenet.eu/advent/demo"
},
"8": {
"legend": "Paris, juil. 2021",
}
}
</code></pre>
<p>Je vous conseille d’utiliser le <a href="https://www.devenet.eu/advent/generator/#calendar">générateur en ligne de calendrier</a> pour vous faciliter la création du fichier.</p>
<hr />
<p>N’hésitez pas à laisser un commentaire ou ouvrir une <em>issue</em> sur le projet GitHub si vous tombez sur un bogue, ou pour partager des idées d’améliorations et de nouvelles fonctionnalités.</p>
https://www.nicolas.pm/note/2021/votre-calendrier-de-lavent-pour-devoiler-une-image-par-jour#comment-formhttps://www.nicolas.pm/feed/atom/comments/21Exclure son réseau Wi-Fi de la géolocalisation Googleurn:md5:babe17a42ad1b73b5245adb049a31c4c2021-06-24T08:00:00+02:002021-11-16T18:16:37+01:00NicolasInformatiquevie privée<p>Dans les articles les plus notés du <a href="https://www.daemonology.net/hn-daily/2021-06-15.html">15 juin</a> sur Hacker News, le sujet <a href="https://news.ycombinator.com/item?id=27517547"><em>How do I opt my access point out of Google Location services?</em></a> a attiré mon attention.</p>
<blockquote>
<p>Pour améliorer les services de localisation et estimer la position d’un appareil, Google utilise des données Wi-Fi diffusées publiquement depuis des points d’accès sans fil ainsi que des données émanant des GPS, des antennes-relais et des capteurs. Ces données se limitent aux informations sur le point d’accès sans fil lui-même, y compris sa position.</p>
<p><cite><a href="https://support.google.com/maps/answer/1725632#how_opt_out">Déterminer si un point d’accès est inclus dans les services de localisation de Google</a></cite></p>
</blockquote>
<p>Ce n’est pas nouveau, Google utilise et stocke les réseaux Wi-Fi visibles ainsi que leur position sur une carte. Par visible il faut entendre tout réseau Wi-Fi qui ne masque pas son SSID, le nom du réseau. Quasiment la très grande majorité des réseaux Wi-Fi, au doigt mouillé.</p>
<div class="txt-center"><img src="https://www.nicolas.pm/public/screenshots/2021-06-24-liste-reseaux-wifi.png" alt="Liste de réseaux Wi-Fi." loading="lazy" class="img-screenshot"></div>
<p>D’un point de vue utilisateur des services Google, c’est plutôt une bonne chose : cela permet de mieux se géolocaliser en s’aidant de ces informations disponibles aux alentours, en plus des coordonnées GPS elles-mêmes. Mais d’un point de vue des propriétaires des points d’accès sans-fil, dont la plupart ont des noms presque uniques, cela signifie qu’un tiers — Google en l’occurrence — est capable de retrouver la position du nom d’un réseau Wi-Fi, et inversement. Pas terrible.</p>
<p>Heureusement, Google propose une méthode simple pour exclure son point d’accès Wi-Fi de cette collecte et utilisation : il faut ajouter le suffixe <code>_nomap</code> au nom de son réseau Wi-Fi. Mais entre nous, qui (parmi les personnes au courant) va vraiment modifier le nom de son réseau pour ajouter ce suffixe, moche qui plus est ?</p>
<p>C’est bien toute la problématique lorsqu’il faut donner son refus après coup, quand le consentement n’est pas demandé au préalable. Un peu comme pour <a href="https://www.nicolas.pm/note/2021/exclure-vos-visiteurs-chrome-de-lanalyse-floc-de-google" title="Exclure son réseau Wi-Fi de la géolocalisation Google">FLoC</a>.</p>
https://www.nicolas.pm/note/2021/exclure-son-reseau-wifi-de-la-geolocalisation-google#comment-formhttps://www.nicolas.pm/feed/atom/comments/11Exclure vos visiteurs de l’analyse FLoC de Googleurn:md5:cd65edc6d0f49eb96351beee8d1956362021-04-20T00:25:00+02:002022-02-10T14:41:35+01:00NicolasInformatiquevie privée<p>Vous avez sûrement entendu parler de <a href="https://blog.google/products/ads-commerce/2021-01-privacy-sandbox/">FLoC</a> — pour <em>Federated Learning of Cohorts</em> ou « apprentissage fédéré des cohortes » — la nouvelle méthode proposée par Google pour continuer à faire de la publicité ciblée sur le web sans utiliser de cookies, tout en respectant (évidemment) la vie privée des internautes.</p>
<p>L’idée est que le navigateur catégorise son propre internaute dans différents groupes selon les sites visités et leurs catégories associées. Ces groupes, ou <em>cohortes</em>, pourront être utilisés par les sites visités pour afficher de la publicité ciblée et adaptée à l’internaute. Pour l’instant, cette fonctionnalité est uniquement en place sur Google Chrome, et a déjà été déployée.</p>
<p>Le souci — outre les problématiques sur la vie privée — est que les sites visités sont par défaut considérés comme étant d’accord. C’est à chaque site <a href="https://blog.google/products/ads-commerce/2021-01-privacy-sandbox/">d’indiquer son refus</a> de participer à cette catégorisation.</p>
<p>Pour refuser que son site y participe, il faut ajouter l’en-tête HTTP <code>Permissions-Policy: interest-cohort=()</code> aux requêtes retournées par votre serveur. Vous pouvez ajouter cette instruction dans vos fichiers <em>.htaccess</em>, mais si vous avez plusieurs sites hébergés sur le même serveur, autant configurer directement Apache pour que cela s’applique par défaut à tous nos sites (y compris les futurs).</p>
<h2>Configuration globale sur Apache</h2>
<ol>
<li>Déplacez-vous dans le dossier <code>/etc/apache2/conf-available/</code>.</li>
<li>Créez le fichier <code>output-google-floc.conf</code> avec le contenu suivant : <pre>Header always set Permissions-Policy: interest-cohort=()</pre></li>
<li>Activez ensuite le fichier de configuration précédent avec : <pre>a2enconf output-google-floc</pre></li>
<li>Assurez-vous que le module <i>headers</i> d’Apache est bien activé avec : <pre>a2enmod headers</pre></li>
<li>Il ne reste plus qu’à redémarrer le service pour que la configuration soit prise en compte : <pre>systemctl reload apache2</pre></li>
</ol>
<h3>Résultat</h3>
<p>Vous pouvez maintenant vérifier que l’en-tête est bien présente dans les requêtes retournées par votre serveur.</p>
<div class="txt-center"><img src="https://www.nicolas.pm/public/screenshots/2021-04-19-header-output-floc.png" alt="En-tête HTTP de refus de l’analyse FLoC de Google." loading="lazy" class="img-screenshot" style="max-width: 500px"></div>
<p>Félicitations, vous participez à mieux respecter la vie privée de vos internautes sous Chrome.</p>
<h2>Pour en savoir plus</h2>
<ul>
<li>Vous pouvez lire l’analyse détaillée <em><a href="https://plausible.io/blog/google-floc">How to fight back against Google FLoC</a></em> sur le blog de Plausible Analytics.</li>
<li>Vous trouverez dans ce guide <em><a href="https://paramdeo.com/blog/opting-your-website-out-of-googles-floc-network#apache">Opting your Website out of Google’s FLoC Network</a></em> les instructions pour divers serveurs web ou plateformes.</li>
<li>Wordpress a décidé d’apporter la modification à son système comme un <a href="https://make.wordpress.org/core/2021/04/18/proposal-treat-floc-as-a-security-concern/">correctif de sécurité</a>.</li>
</ul>
https://www.nicolas.pm/note/2021/exclure-vos-visiteurs-chrome-de-lanalyse-floc-de-google#comment-formhttps://www.nicolas.pm/feed/atom/comments/7Connecteur ZIF et Windows Messengerurn:md5:ca69606036626b18f3e48e5ea82d5d3f2021-04-18T18:00:00+02:002022-11-01T23:50:56+01:00NicolasInformatiquenostalgie<p>J’ai récemment été sollicité pour récupérer des données sur un vieil ordinateur portable. Habituellement, je démonte l’ordinateur pour y extraire le disque dur et le brancher directement sur un autre PC.<br />
Cela a deux avantages principaux : tout d’abord ne pas devoir gérer le potentiel mot de passe présent (dont la personne ne se souvient plus), mais surtout de ne pas dépendre de l’état de fonctionnement de l’ordinateur (alimentation capricieuse, écran cassé, ou pire, ordinateur qui ne démarre plus).</p>
<p>Sauf que cette fois, je suis tombé sur un disque dur dont je ne connaissais pas du tout le connecteur.</p>
<p>Après des recherches à partir du modèle du disque dur, il s’agit d’un connecteur ZIF, pour <em>Zero Insertion Force</em>. (Voici un <a href="https://fr.ifixit.com/Tutoriel/Reconna%C3%AEtre+et+d%C3%A9brancher+les+connecteurs/25629#s64969">exemple de ce connecteur</a>.) Comme son nom le laisse supposer, il est n’est pas nécessaire d’user de sa force pour brancher ou débrancher les nappes utilisant ce connecteur.</p>
<p>Avant de commander un adaptateur, j’ai tenté un premier allumage, sans grand succès. Après plusieurs tentatives et quelques incantations électroniques, l’alimentation interne a bien voulu revenir à la vie : j’ai pu voir, avec émotion, Windows XP démarrer. Il m’a ensuite été facile de récupérer les données.</p>
<figure class="txt-center figure-lg">
<img src="https://www.nicolas.pm/public/screenshots/2021-04-17-windows-xp-bureau.jpg" alt="Bureau sous Windows XP avec Internet Explorer et Windows Messenger." loading="lazy" class="img-screenshot">
<figcaption>Bureau sous Windows XP avec Internet Explorer et Windows Messenger.</figcaption>
</figure>
<p>Je n’ai pu m’empêcher de lancer Internet Explorer pour voir un peu comment s’affichaient mes sites web. Et bien, ils ne s’affichent pas, sans grande surprise. (C’est très probablement les anciens protocoles SSL/TLS qui ne sont plus supportés ou compatibles.)</p>
<p>Windows Messenger s’est aussi lancé, et le service étant définitivement fermé, on ne peut aller plus loin que la tentative de connexion. Que de nostalgie.</p>
https://www.nicolas.pm/note/2021/connecteur-zif-et-windows-messenger#comment-formhttps://www.nicolas.pm/feed/atom/comments/6