<?xml version="1.0"?>
<rdf:RDF
	xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:foaf="http://xmlns.com/foaf/0.1/"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns="http://purl.org/rss/1.0/"
>
<channel rdf:about="http://planet.asrall.fr/">
	<title>Planet Asrall</title>
	<link>http://planet.asrall.fr/</link>
	<description>Planet Asrall - http://planet.asrall.fr/</description>
	<atom:link rel="self" href="http://planet.asrall.fr/rss10.xml" type="application/rss+xml"/>

	<items>
		<rdf:Seq>
			<rdf:li rdf:resource="tag:None,2021-10-26:/playstation2-raspberrypi" />
			<rdf:li rdf:resource="https://fiat-tux.fr/?p=2969" />
			<rdf:li rdf:resource="tag:None,2021-07-04:/mpv-osd-et-chapitre" />
			<rdf:li rdf:resource="tag:None,2021-06-20:/wallpaper-finer" />
			<rdf:li rdf:resource="tag:None,2021-04-24:/cell-broadcast" />
			<rdf:li rdf:resource="tag:www.pboesch.fr,2021-03-18:/2021/03/freebsd-migration-ezjail-vers-iocage/" />
			<rdf:li rdf:resource="https://fiat-tux.fr/?p=2900" />
			<rdf:li rdf:resource="https://fiat-tux.fr/?p=2898" />
			<rdf:li rdf:resource="https://fiat-tux.fr/?p=2712" />
			<rdf:li rdf:resource="tag:None,2020-12-30:/bilan-2020" />
			<rdf:li rdf:resource="tag:None,2020-10-04:/fibre-optique-episode-3" />
			<rdf:li rdf:resource="tag:None,2020-09-14:/reset-sur-tandy-1000-hx" />
			<rdf:li rdf:resource="https://fiat-tux.fr/?p=2850" />
			<rdf:li rdf:resource="tag:None,2020-07-19:/deploiement-termine" />
			<rdf:li rdf:resource="tag:None,2020-07-05:/nouveau-blog-2020" />
			<rdf:li rdf:resource="https://fiat-tux.fr/?p=2805" />
			<rdf:li rdf:resource="https://fiat-tux.fr/?p=2792" />
			<rdf:li rdf:resource="tag:www.pboesch.fr,2020-04-25:/2020/04/freebsd-pkg-pre-install-script-failed/" />
			<rdf:li rdf:resource="https://fiat-tux.fr/?p=2788" />
			<rdf:li rdf:resource="https://fiat-tux.fr/?p=2771" />
			<rdf:li rdf:resource="tag:None,2020-03-08:/nouvelles-du-blog-2020" />
			<rdf:li rdf:resource="https://fiat-tux.fr/?p=2748" />
			<rdf:li rdf:resource="tag:www.pboesch.fr,2019-12-22:/2019/12/zabbix-server-et-proxy-dans-une-jail-freebsd/" />
			<rdf:li rdf:resource="tag:www.pboesch.fr,2019-12-07:/2019/12/thinkpad-fixer-le-mapping-des-touches-de-luminosite/" />
			<rdf:li rdf:resource="tag:www.pboesch.fr,2019-11-22:/2019/11/pacman-52-breaks-dependency-required-by-yay/" />
			<rdf:li rdf:resource="http://www.simon-florentin.fr/blog/?p=1970" />
			<rdf:li rdf:resource="https://fiat-tux.fr/?p=2726" />
			<rdf:li rdf:resource="https://fiat-tux.fr/?p=2718" />
			<rdf:li rdf:resource="tag:None,2019-08-30:/visual-studio-clavier-typematrix-bepo-et-underscore" />
			<rdf:li rdf:resource="https://fiat-tux.fr/?p=2678" />
		</rdf:Seq>
	</items>
</channel>

<item rdf:about="tag:None,2021-10-26:/playstation2-raspberrypi">
	<title>Alexandre Bailly: PlayStation 2, Raspberry Pi et lecteur DVD HS</title>
	<link>https://blog.chibi-nah.fr/playstation2-raspberrypi</link>
	<content:encoded>&lt;p&gt;Ou comment continuer d'exploiter sa PS2 quand le lecteur a l'affreuse tendance à rayer les disques.&lt;/p&gt;
&lt;p&gt;TL;DR (Trop long, flemme de lire) : FreeMCBoot + OPL OpenPS2Loader + partage SMB/Samba/CIFS sur le Raspberry Pi branché en ethernet sur la PS2.&lt;/p&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/playstation2/intro.jpg&quot; /&gt;
&lt;div class=&quot;section&quot; id=&quot;remarques&quot;&gt;
&lt;h2&gt;Remarques&lt;/h2&gt;
&lt;p&gt;La rédaction de cet article a démarré fin mai début juin 2021, pour publication fin octobre. Il se peut que des choses aient changés, notamment côté raspbian/armbian ou OPL. Ne pas prendre cet article tel quel, veuillez garder un aspect critique/le considérer comme n'étant plus à jour.&lt;/p&gt;
&lt;p&gt;La version d'Open PS2 Loader utilisée ici est la version 1.2.0-Beta-DB_all-2158-f8228f2-2021-09-21&lt;/p&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/playstation2/oplps3.jpg&quot; /&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;contexte&quot;&gt;
&lt;h2&gt;Contexte&lt;/h2&gt;
&lt;p&gt;J'ai installé FreeMCBoot il y a quelques années&lt;sup id=&quot;sf-playstation2-raspberrypi-1-back&quot;&gt;&lt;a class=&quot;simple-footnote&quot; href=&quot;https://blog.chibi-nah.fr/feeds/all.atom.xml#sf-playstation2-raspberrypi-1&quot; title=&quot; https://blog.chibi-nah.fr/bon-ca-c-est-fait &quot;&gt;1&lt;/a&gt;&lt;/sup&gt; sur la console, essentiellement pour pouvoir exploiter le swap magic sans disque swap magic, pour pouvoir jouer aux jeux imports (et jamais sortis en Europe).&lt;/p&gt;
&lt;p&gt;Ça fonctionne bien (très bien, même), mais depuis quelques temps, certains jeux ne passent plus, ou plantent sans raison.&lt;/p&gt;
&lt;p&gt;En retournant les disque, je ne put que constater l'horreur.&lt;/p&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/playstation2/disc1.jpg&quot; /&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/playstation2/disc2.jpg&quot; /&gt;
&lt;p&gt;Deux grosses rayures circulaires, exactement au même endroit, sur plusieurs disques, aussi bien PS1 que PS2.&lt;/p&gt;
&lt;p&gt;Voilà qui explique pourquoi il n'est plus possible de jouer à ces jeux.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;freemcboot&quot;&gt;
&lt;h2&gt;FreeMCBoot&lt;/h2&gt;
&lt;p&gt;FreeMCBoot est une méthode de modification logicielle (softmod) de la Playstation 2, s'installant sur une carte mémoire, et permettant d'exécuter du code non signé depuis la console, sans modification matérielle. La principale contrainte de FreeMCBoot, c'est qu'il faut une console modifiée (logiciel ou matériel) pour pouvoir l'installer (problème de l'œuf et de la poule).&lt;/p&gt;
&lt;p&gt;Ayant profité d'un démontage de la console pour changer la pile CR2032 dans le passé, j'en avais profité pour installer FreeMCBoot sur une carte mémoire (remplacée depuis), via l'exploitation d'un bug sur le jeu 007 espion pour cible.&lt;/p&gt;
&lt;p&gt;Divers homebrews ont été développés, notamment pour pouvoir lancer les backups depuis un disque branché en USB (méthode déconseillée, à cause de la lenteur d'accès, c'est de l'USB 1), ou via un partage réseau SMB/CIFS.&lt;/p&gt;
&lt;p&gt;Je n'entrerai pas dans les détails sur comment préparer la carte mémoire/FreeMCBoot, c'est documenté un peu partout ; et il y a même des carte-mémoire avec FreeMCBoot déjà installé en vente, mais attention aux arnaques possibles.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;prerequis&quot;&gt;
&lt;h2&gt;Prérequis&lt;/h2&gt;
&lt;p&gt;Matériel requis :&lt;/p&gt;
&lt;ul class=&quot;simple&quot;&gt;
&lt;li&gt;Un lecteur de carte SD/MicroSD&lt;sup id=&quot;sf-playstation2-raspberrypi-2-back&quot;&gt;&lt;a class=&quot;simple-footnote&quot; href=&quot;https://blog.chibi-nah.fr/feeds/all.atom.xml#sf-playstation2-raspberrypi-2&quot; title=&quot;J'utilise un lecteur universel Hama (USB 2.0 Card Reader 35 in 1).&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; (avec ou sans adaptateur) ;&lt;/li&gt;
&lt;li&gt;Une micro SD vierge, neuve de préférence ;&lt;/li&gt;
&lt;li&gt;Un Raspberry Pi et un câble ethernet ;&lt;/li&gt;
&lt;li&gt;Une connexion Internet ;&lt;/li&gt;
&lt;li&gt;Un lecteur DVD sur le PC.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pour le Raspberry PI, peu importe le modèle, vu que l'on utilisera que le service Samba (partage de fichiers) et isd dhcpcd (serveur dhcp). Éviter toutefois le Pi Zéro, car on aura besoin d'un port Ethernet. C'est faisable avec, mais il faut dans ce cas un adaptateur USB-OTG et une interface USB-Ethernet.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;installation-cote-raspberry-pi&quot;&gt;
&lt;h2&gt;Installation côté Raspberry Pi&lt;/h2&gt;
&lt;p&gt;Comme on veut un système minimaliste, on ne va pas installer directement raspbian-desktop ou noobs. À la place, on va utiliser raspberrypi-ua-netinst pour installer raspbian avec le moins de trucs possibles.&lt;/p&gt;
&lt;div class=&quot;admonition note&quot;&gt;
&lt;p class=&quot;first admonition-title&quot;&gt;Note&lt;/p&gt;
&lt;p class=&quot;last&quot;&gt;En fait, il existe des distribution GNU/Linux pour ARM nettement plus légères, mais j'ai choisi la facilité avec Raspbian.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Télécharger la dernière version (release) sur github, &lt;a class=&quot;reference external&quot; href=&quot;https://github.com/FooDeas/raspberrypi-ua-netinst/releases&quot;&gt;https://github.com/FooDeas/raspberrypi-ua-netinst/releases&lt;/a&gt; ; notamment l'une des images compressée en xz.&lt;/p&gt;
&lt;p&gt;Lors de la rédaction de cet article, la dernière version fut &lt;cite&gt;raspberrypi-ua-netinst-v2.4.0.img.xz&lt;/cite&gt;. Il faudra remplacer le nom de fichier dans les exemples suivants par le nom du fichier réellement téléchargé.&lt;/p&gt;
&lt;p&gt;Une fois l'image disque téléchargée, décompresser cette image.&lt;/p&gt;
&lt;p&gt;Sous GNU/Linux, en ligne de commande (ou alors, passez par votre outil de gestion de fichiers compressé favori).&lt;/p&gt;
&lt;p&gt;Pour le format xz :&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;xz -d raspberrypi-ua-netinst-v2.4.0.img.xz
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Pour le format bz2 :&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;bunzip2 raspberrypi-ua-netinst-v2.4.0.img.bz2
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Sous Windows&lt;/p&gt;
&lt;p&gt;Pas besoin de se prendre la tête, 7-zip&lt;sup id=&quot;sf-playstation2-raspberrypi-3-back&quot;&gt;&lt;a class=&quot;simple-footnote&quot; href=&quot;https://blog.chibi-nah.fr/feeds/all.atom.xml#sf-playstation2-raspberrypi-3&quot; title=&quot; https://www.7-zip.org/ &quot;&gt;3&lt;/a&gt;&lt;/sup&gt; gère ces formats.&lt;/p&gt;
&lt;p&gt;Flasher la micro SD soit via UNetbootin (ou équivalent), soit via la commande dd :&lt;/p&gt;
&lt;div class=&quot;admonition note&quot;&gt;
&lt;p class=&quot;first admonition-title&quot;&gt;Note&lt;/p&gt;
&lt;p class=&quot;last&quot;&gt;Faire attention à la destination. Ne pas hésiter à vérifier avec la commande lsblk pour vérifier que c'est le bon lecteur et le bon périphérique qui sera flashé. Ici, la moindre erreur entrainera au mieux la perte de données, au pire, rendra le PC inopérable et irrécupérable (réinstallation complète obligatoire).&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Pour moi (vérifié et confirmé à plusieurs reprises), c'est /dev/sdb1.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;sudo dd &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;raspberrypi-ua-netinst-git-caf7423.img &lt;span class=&quot;nv&quot;&gt;of&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;/dev/sdb &lt;span class=&quot;nv&quot;&gt;status&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;progress
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Quelques instants plus tard (une fois que le lecteur a fini de clignoté), éjecter et réinsérer la micro SD dans le lecteur.&lt;/p&gt;
&lt;p&gt;Si la capacité indiquée est de 135 Mo (environ), pas de panique, c'est normal. À la racine se trouvent les différents fichiers pour les différentes version du Raspberry Pi.&lt;/p&gt;
&lt;p&gt;Aller dans le répertoire &lt;cite&gt;raspberrypi-ua-netinst/config&lt;/cite&gt;, et ouvrir le fichier &lt;cite&gt;installer-config.txt&lt;/cite&gt; avec un éditeur de texte (notepad, geany, gedit…). Pas un logiciel de traitement de texte comme MS-Word ou LibreOffice Writer.&lt;/p&gt;
&lt;p&gt;À la fin du fichier, ajouter les lignes suivantes :&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;packages&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;nano,samba&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;timezone&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;Europe/Paris&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;keyboard_layout&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;fr&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;system_default_locale&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;fr_FR.UTF-8&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Enregistrer, fermer le fichier, et éjecter (proprement) la micro SD.&lt;/p&gt;
&lt;p&gt;Insérer la carte dans le Raspberry Pi, brancher le réseau (accès Internet), brancher le Raspberry pi et patienter. L'installation se fait automatiquement.&lt;/p&gt;
&lt;div class=&quot;admonition note&quot;&gt;
&lt;p class=&quot;first admonition-title&quot;&gt;Note&lt;/p&gt;
&lt;p class=&quot;last&quot;&gt;il est p̶o̶s̶s̶i̶b̶l̶e̶ recommandé de brancher un écran pour surveiller l'avancement de l'installation.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;admonition note&quot;&gt;
&lt;p class=&quot;first admonition-title&quot;&gt;Note&lt;/p&gt;
&lt;p class=&quot;last&quot;&gt;Si au bout de 5 minutes, l'écran reste sur la palette arc-en-ciel, que les voyants de la carte réseau ne s'allument pas, et le système n'a pas démarré, débrancher le raspberry pi, retirer la micro SD et flasher une autre version de raspberrypi-ua-netinst. J'ai eu ce problème avec la toute dernière version -git, et aucun problème avec la version 2.4.0.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Compter une vingtaine de minutes, en fonction du type de connexion.&lt;/p&gt;
&lt;p&gt;Une fois l'installation terminée, le système redémarre, et l'écran affiche simplement :&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;Raspbian GNU/Linux &lt;span class=&quot;m&quot;&gt;10&lt;/span&gt; pi tty1
pi login:
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Se connecter au Raspberry (soit en branchant un clavier, soit via ssh, utilisez votre routeur pour trouver l'adresse IP du raspberry pi).&lt;/p&gt;
&lt;p&gt;login: root
password: raspbian&lt;/p&gt;
&lt;div class=&quot;section&quot; id=&quot;configuration-de-samba&quot;&gt;
&lt;h3&gt;Configuration de Samba&lt;/h3&gt;
&lt;p&gt;Créer un répertoire /export/ps2&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;mkdir -p /export/ps2
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Attribuer les droits 777 à ce répertoire.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;chmod &lt;span class=&quot;m&quot;&gt;777&lt;/span&gt; /export/ps2
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Éditer le fichier /etc/samba/smb.conf avec nano&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;nano /etc/samba/smb.conf
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Laisser les paramètres par défaut (ils sont censé être corrects)&lt;/p&gt;
&lt;p&gt;À la fin du fichier, ajouter les lignes suivantes :&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;[jeux]&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;path&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;/export/ps2&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;guest ok&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;yes&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;guest only&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;no&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;read only&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;no&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;browseable&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;yes&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;inherit acls&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;no&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;inherit permissions&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;no&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;ea support&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;no&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;store dos attributes&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;no&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;vfs objects&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;printable&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;no&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;create mask&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;0777&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;force create mode&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;0777&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;directory mask&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;0777&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;force directory mode&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;0778&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;hide special files&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;yes&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;follow symlinks&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;yes&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;hide dot files&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;no&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;yes&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;writable&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;yes&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Pour enregistrer et sortir, appuyer sur les touches Contrôle et X
Confirmer l'écriture avec O, puis Entrée&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;configuration-du-reseau&quot;&gt;
&lt;h3&gt;Configuration du réseau&lt;/h3&gt;
&lt;p&gt;Là, il va falloir ruser. En effet, comme on veut pouvoir brancher le raspberry pi sur le réseau local pour accéder au partage smb pour y écrire des fichiers, et que le raspberry pi doit également fonctionner en mode autonome une fois branché sur la console ;on va définir une IPv4 Fixe.&lt;/p&gt;
&lt;p&gt;Chez moi, le Raspberry Pi a l'adresse IPv4 &lt;cite&gt;192.168.10.35&lt;/cite&gt;, et la passerelle (routeur) a l'adresse &lt;cite&gt;192.168.10.254&lt;/cite&gt;.&lt;/p&gt;
&lt;div class=&quot;admonition warning&quot;&gt;
&lt;p class=&quot;first admonition-title&quot;&gt;Avis&lt;/p&gt;
&lt;p class=&quot;last&quot;&gt;Remplacer 192.168.10.35 et 192.168.10.254 par les valeurs que vous avez chez vous !&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Si vous ne connaissez pas les valeurs, taper les commandes suivantes :&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;ip -4 a
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Sous eth0, à droite de inet, l'adresse IP du Raspberry Pi est affichée, comme ceci :&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;root@pi:~# ip -4 a
&lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;: lo: &amp;lt;LOOPBACK,UP,LOWER_UP&amp;gt; mtu &lt;span class=&quot;m&quot;&gt;65536&lt;/span&gt; qdisc noqueue state UNKNOWN group default qlen &lt;span class=&quot;m&quot;&gt;1000&lt;/span&gt;
        inet &lt;span class=&quot;m&quot;&gt;127&lt;/span&gt;.0.0.1/8 scope host lo
        valid_lft forever preferred_lft forever
&lt;span class=&quot;m&quot;&gt;2&lt;/span&gt;: eth0: &amp;lt;BROADCAST,MULTICAST,UP,LOWER_UP&amp;gt; mtu &lt;span class=&quot;m&quot;&gt;1500&lt;/span&gt; qdisc pfifo_fast state UP group default qlen &lt;span class=&quot;m&quot;&gt;1000&lt;/span&gt;
        inet &lt;span class=&quot;m&quot;&gt;192&lt;/span&gt;.168.10.35/24 brd &lt;span class=&quot;m&quot;&gt;192&lt;/span&gt;.168.10.255 scope global dynamic eth0
        valid_lft 42409sec preferred_lft 42409sec
root@pi:~#
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Ici, c'est bien &lt;cite&gt;192.168.10.35&lt;/cite&gt;.&lt;/p&gt;
&lt;p&gt;Pour la passerelle, taper simplement :&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;route
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;À droite de default, sous Passerelle, l'adresse IP de la passerelle est affichée, comme ceci :&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;root@pi:~# route
Table de routage IP du noyau
Destination     Passerelle      Genmask         Indic Metric Ref    Use Iface
default         &lt;span class=&quot;m&quot;&gt;192&lt;/span&gt;.168.10.254  &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;.0.0.0         UG    &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;      &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;        &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt; eth0
&lt;span class=&quot;m&quot;&gt;192&lt;/span&gt;.168.10.0    &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;.0.0.0         &lt;span class=&quot;m&quot;&gt;255&lt;/span&gt;.255.255.0   U     &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;      &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;        &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt; eth0
root@pi:~#
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;C'est bien &lt;cite&gt;192.168.10.254&lt;/cite&gt;.&lt;/p&gt;
&lt;p&gt;Noter aussi la valeur de genmask : &lt;cite&gt;255.255.255.0&lt;/cite&gt;. On en aura également besoin.&lt;/p&gt;
&lt;p&gt;Éditer le fichier /etc/network/interfaces avec nano.&lt;/p&gt;
&lt;p&gt;Remplacer&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;iface eth0 inet dhcp&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;par&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;iface eth0 inet static&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Puis ajouter en dessous&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;address 192.168.10.35&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;netmask 255.255.255.0&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;gateway 192.168.10.254&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Remplacer les valeurs address par l'adresse IP du Raspberry Pi, netmask par le masque trouvé plus haut sous genmask, et gateway par l'adresse IP de la passerelle.&lt;/p&gt;
&lt;p&gt;Au final, le fichier devrait ressembler à ça :&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;# interfaces(5) file used by ifup(8) and ifdown(8)&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;# Include files from /etc/network/interfaces.d:&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;source-directory /etc/network/interfaces.d&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;auto lo&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;iface lo inet loopback&lt;/span&gt;

&lt;span class=&quot;na&quot;&gt;allow-hotplug eth0&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;iface eth0 inet static&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;address 192.168.10.35&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;netmask 255.255.255.0&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;gateway 192.168.10.254&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Redémarrer le Raspberry Pi pour que toutes les modifications soient prises en compte.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;reboot
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Le Raspberry Pi a redémarré ? Pas de problème de réseau ? On peut continuer.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;copie-des-images-disque&quot;&gt;
&lt;h2&gt;Copie des images disque&lt;/h2&gt;
&lt;div class=&quot;section&quot; id=&quot;preparation&quot;&gt;
&lt;h3&gt;Préparation&lt;/h3&gt;
&lt;p&gt;Blablabla taxe copie privée, blablabla piratage, c’est mal, blablabla image disque, blablabla, iso.&lt;/p&gt;
&lt;div class=&quot;admonition warning&quot;&gt;
&lt;p class=&quot;first admonition-title&quot;&gt;Avis&lt;/p&gt;
&lt;p class=&quot;last&quot;&gt;Pour ce qui va suivre, malheureusement, c’est uniquement sous Windows. Les outils utilisés n’existent pas tel quel sous GNU/Linux&lt;sup id=&quot;sf-playstation2-raspberrypi-4-back&quot;&gt;&lt;a class=&quot;simple-footnote&quot; href=&quot;https://blog.chibi-nah.fr/feeds/all.atom.xml#sf-playstation2-raspberrypi-4&quot; title=&quot;Pour être franc, en fait, je n’ai même pas cherché&quot;&gt;4&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Il nous faut OPL Manager, disponible sur &lt;a class=&quot;reference external&quot; href=&quot;https://oplmanager.com/site/&quot;&gt;https://oplmanager.com/site/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;L’installer dans C:JeuxPS2OPLManager (par exemple)&lt;/p&gt;
&lt;p&gt;Monter le partage PS2 du Raspberry Pi sur le lecteur Z: (ou autre lecteur disponible.)&lt;/p&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/playstation2/mount.png&quot; /&gt;
&lt;p&gt;Ici, le « Dossier » est &lt;cite&gt;\192.168.10.35jeux&lt;/cite&gt;&lt;/p&gt;
&lt;div class=&quot;admonition note&quot;&gt;
&lt;p class=&quot;first admonition-title&quot;&gt;Note&lt;/p&gt;
&lt;p class=&quot;last&quot;&gt;Remplacer l’adresse IP par celle du Raspberry Pi.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Démarrer OPL Manager.&lt;/p&gt;
&lt;p&gt;À l’écran « Changer la langue », sélectionner « Français (French) ». Cliquer sur « Sauvegarder ».&lt;/p&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/playstation2/opl1.png&quot; /&gt;
&lt;p&gt;Décocher la case « [ ] Vérifier si des mises à jour sont disponible au d », puis cliquer sur « Sauvegarde ».&lt;/p&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/playstation2/opl2.png&quot; /&gt;
&lt;p&gt;Dans la fenêtre « Changer Mode / Dossier OPL », laisser le mode sur « Normal (iso + ul.cfg) ».&lt;/p&gt;
&lt;p&gt;Dans « Paramètres normaux », cliquer sur le bouton « Parcourir », déplier le nœud « Ce PC », et sélectionner « jeux (\192.168.10.35) (Z:) ».&lt;/p&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/playstation2/opl3.png&quot; /&gt;
&lt;p&gt;Cliquer sur le bouton « Sauvegarde ».&lt;/p&gt;
&lt;p&gt;Le message « Aucun dossier CD ou DVD ou ART trouvé dans le dossier OPL sélectionné…  » apparaît. C’est normal. On peut l’ignorer en cliquant sur le bouton « OK ».&lt;/p&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/playstation2/opl4.png&quot; /&gt;
&lt;p&gt;Une fenêtre vide avec les boutons « Oui » et « Non » apparaît. Normalement, le message « Les dossiers CD, DVD, ART… n’ont pas été trouvés. Voulez-vous les créer » aurait du apparaître. C’est un bogue connu. Cliquer simplement sur le bouton « Oui ».&lt;/p&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/playstation2/opl5.png&quot; /&gt;
&lt;p&gt;Ouvrir l’explorateur Windows, ouvrir le dossier partagé, et vérifier que les dossiers APPS, ART, CD, … ont bien été créés.&lt;/p&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/playstation2/exp1.png&quot; /&gt;
&lt;p&gt;On peut maintenant installer les jeux.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;copie&quot;&gt;
&lt;h3&gt;Copie&lt;/h3&gt;
&lt;p&gt;Insérer un disque de jeu PlayStation 2 dans le lecteur DVD du PC, puis cliquer dans le menu « Outil » -&amp;gt; « Disque / Convertir en ISO ».&lt;/p&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/playstation2/opl6.png&quot; /&gt;
&lt;p&gt;La fenêtre suivante apparaît :&lt;/p&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/playstation2/opl7.png&quot; /&gt;
&lt;p&gt;Laisser sélectionné (ou sélectionner) le mode « CD/DVD -&amp;gt; ISO », vérifier que le jeu est bien reconnu (ici, Gradius V, Game ID SLES_520.95).&lt;/p&gt;
&lt;p&gt;Cliquer sur le bouton « Parcourir », la fenêtre « Enregistrer sous » s’affiche. Vérifier que le chemin correspond bien au partage réseau du Raspberry Pi.&lt;/p&gt;
&lt;p&gt;Ici, comme le jeu est au format CD-ROM (538 Mo), on va l’enregistrer dans le dossier « CD ».&lt;/p&gt;
&lt;p&gt;S’il s’agissait d’un jeu au format DVD (1,2 Go par exemple), il faudrait l’enregistrer dans le dossier « DVD ».&lt;/p&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/playstation2/opl8.png&quot; /&gt;
&lt;p&gt;Laisser le nom par défaut, ici &quot;SLES_520.95.GRADIUS V.iso&quot;, et cliquer sur le bouton « Enregistrer ».&lt;/p&gt;
&lt;p&gt;Cliquer enfin sur le bouton « Démarrer » pour lancer la copie.&lt;/p&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/playstation2/opl9.png&quot; /&gt;
&lt;p&gt;Copie en cours…&lt;/p&gt;
&lt;p&gt;Une fois terminé, le message suivant apparaît : « Iso créé avec succès ! ».&lt;/p&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/playstation2/opl10.png&quot; /&gt;
&lt;p&gt;Cliquer sur le bouton « OK », et fermer la fenêtre « CD/DVD/Image vers ISO », en cliquant sur la croix en haut à droite de la fenêtre.&lt;/p&gt;
&lt;p&gt;Retirer le disque du lecteur DVD.&lt;/p&gt;
&lt;div class=&quot;admonition note&quot;&gt;
&lt;p class=&quot;first admonition-title&quot;&gt;Note&lt;/p&gt;
&lt;p class=&quot;last&quot;&gt;un autre jeu peut être copié. Répéter les opérations.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Dans le menu Fichier, cliquer sur « Rafraichir la liste ».&lt;/p&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/playstation2/opl11.png&quot; /&gt;
&lt;div class=&quot;admonition note&quot;&gt;
&lt;p class=&quot;first admonition-title&quot;&gt;Note&lt;/p&gt;
&lt;p class=&quot;last&quot;&gt;Parfois, OPL Manager ne voit pas la liste des jeux. Fermer l’application et la relancer.&lt;/p&gt;
&lt;/div&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/playstation2/opl12.png&quot; /&gt;
&lt;p&gt;Le jeu apparaît dans la liste.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;modifier-cfg&quot;&gt;
&lt;h3&gt;Modifier CFG&lt;/h3&gt;
&lt;p&gt;Ce bouton sert à modifier certains paramètres pour OPL (côté console). En effet, certains jeux nécessitent des hacks ou bidouilles pour fonctionner. C’est ce qui est appelé ici Mode.&lt;/p&gt;
&lt;p&gt;Pour paramétrer correctement certains jeux, il faut consulter la liste de compatibilité, vérifier l’absence de problèmes connus (comme pour Gradius V) ou pas (Gran Turismo 4 est assez récalcitrant).&lt;/p&gt;
&lt;p&gt;Liste de compatibilité :&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;reference external&quot; href=&quot;https://www.ps2-home.com/forum/page/opl-game-compatibility-list&quot;&gt;https://www.ps2-home.com/forum/page/opl-game-compatibility-list&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Liste des modes de compatibilité :&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;reference external&quot; href=&quot;https://www.ps2-home.com/forum/app.php/page/opl_modes&quot;&gt;https://www.ps2-home.com/forum/app.php/page/opl_modes&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;En résumé, la plupart des modes activés sont les modes 2 (lecture synchrone) ou 6 (désactivation de l'IGR&lt;sup id=&quot;sf-playstation2-raspberrypi-5-back&quot;&gt;&lt;a class=&quot;simple-footnote&quot; href=&quot;https://blog.chibi-nah.fr/feeds/all.atom.xml#sf-playstation2-raspberrypi-5&quot; title=&quot;In Game Reset ; un appui sur L1 + R1 + L2 + R2 + Select + Start provoque le redémarrage de la Playstation 2.&quot;&gt;5&lt;/a&gt;&lt;/sup&gt;)&lt;/p&gt;
&lt;div class=&quot;admonition note&quot;&gt;
&lt;p class=&quot;first admonition-title&quot;&gt;Note&lt;/p&gt;
&lt;p class=&quot;last&quot;&gt;Avant de remettre en cause OPL ou le mode de compatibilité, ne pas hésiter à vérifier si le dump effectué est correct, notamment en vérifiant la somme de ccontrôle de l'image avec une source fiable, comme redump &lt;a class=&quot;reference external&quot; href=&quot;http://redump.org/&quot;&gt;http://redump.org/&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;artworks&quot;&gt;
&lt;h3&gt;Artworks&lt;/h3&gt;
&lt;p&gt;OPL Manager permet le téléchargement des ressources, images, couvertures et autres depuis Internet. Ça serait dommage de gérer ça à la main.&lt;/p&gt;
&lt;p&gt;Dans le menu « Actions en lots », cliquer sur « Téléchargement de ART ».&lt;/p&gt;
&lt;p&gt;Cocher/décocher les cases suivant ses préférences&lt;sup id=&quot;sf-playstation2-raspberrypi-6-back&quot;&gt;&lt;a class=&quot;simple-footnote&quot; href=&quot;https://blog.chibi-nah.fr/feeds/all.atom.xml#sf-playstation2-raspberrypi-6&quot; title=&quot;je coche tout, sauf les cases « Remplacer s’il(s) existe(s) »&quot;&gt;6&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/playstation2/opl17.png&quot; /&gt;
&lt;p&gt;Cliquer sur le bouton « Démarrer », situé sous les cases à cocher.&lt;/p&gt;
&lt;p&gt;Au bout de quelques instants, un message indiquant que l’opération a été effectué apparaît.&lt;/p&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/playstation2/opl18.png&quot; /&gt;
&lt;p&gt;Cliquer sur le bouton « OK », puis fermer la fenêtre.&lt;/p&gt;
&lt;p&gt;Fermer OPL Manager. On a fini avec.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;cote-playstation-2&quot;&gt;
&lt;h2&gt;Côté Playstation 2&lt;/h2&gt;
&lt;p&gt;Parmi les homebrews installés avec FreeMCBoot, on trouve généralement OPL Open PS2 Loader. Parfois pas. Ou alors, pas à jour. Il faudra alors l'installer.&lt;/p&gt;
&lt;div class=&quot;section&quot; id=&quot;installation-de-open-ps2-loader&quot;&gt;
&lt;h3&gt;Installation de Open PS2 Loader&lt;/h3&gt;
&lt;div class=&quot;admonition note&quot;&gt;
&lt;p class=&quot;first admonition-title&quot;&gt;Note&lt;/p&gt;
&lt;p class=&quot;last&quot;&gt;Une clé USB sera nécessaire. J'utilise une vieille clé USB de 250 Mo, formatée en FAT32.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;admonition warning&quot;&gt;
&lt;p class=&quot;first admonition-title&quot;&gt;Avis&lt;/p&gt;
&lt;p class=&quot;last&quot;&gt;La clé doit être absolument formatée en FAT32/MBR, et non en ExFAT/NTFS/GPT. La clé USB ne serait pas reconnue.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Télécharger la dernière version d'Open PS2 Loader sur &lt;a class=&quot;reference external&quot; href=&quot;https://www.ps2-home.com/forum/viewtopic.php?f=83&amp;amp;t=3&amp;amp;p=47460#p47460&quot;&gt;https://www.ps2-home.com/forum/viewtopic.php?f=83&amp;amp;t=3&amp;amp;p=47460#p47460&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;La version lors de la rédaction de l'article fut : OPNPS2LD-v1.2.0-Beta-DB_all-2158-f8228f2-2021-09-21.zip&lt;/p&gt;
&lt;p&gt;Extraire l'archive zip, créer un répertoire APPS sur la clé USB, et copier le répertoire OPL dans ce répertoire APPS.&lt;/p&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/playstation2/opl19.jpg&quot; /&gt;
&lt;p&gt;Brancher la clé USB dans l'un des ports de libre sur la console, brancher le Raspberry Pi sur le port ethernet de la console, brancher le reste (carte mémoire contenant FreeMCBoot, une manette, un câble vidéo, l'alimentation du Raspberry Pi sur une alimentation externe.&lt;/p&gt;
&lt;div class=&quot;admonition warning&quot;&gt;
&lt;p class=&quot;first admonition-title&quot;&gt;Avis&lt;/p&gt;
&lt;p class=&quot;last&quot;&gt;Ne pas brancher le Raspberry Pi sur un port USB de la PS2, la console ne sort que 500 mA, ce qui est insuffisant pour alimenter correctement la carte saveur framboise.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Démarrer la console, puis lancer Free MCBOOT Configurator.&lt;/p&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/playstation2/fmc1.jpg&quot; /&gt;
&lt;p&gt;Appuyer sur Croix (de la manette)&lt;/p&gt;
&lt;p&gt;L'interface de configuration de FreeMCBoot est alors affiché.&lt;/p&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/playstation2/fmc2.jpg&quot; /&gt;
&lt;p&gt;Descendre jusqu'à &quot;Configure OSDSYS PATH...&quot;. Appuyer sur Croix&lt;/p&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/playstation2/fmc3.jpg&quot; /&gt;
&lt;p&gt;Aller sur Configure Item, puis faire défiler avec les flèches gauche-droite et soit sélectionner un emplacement libre, soit une intreée inutilisée comme HDD Loader. Appuyer sur Croix.&lt;/p&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/playstation2/fmc4.jpg&quot; /&gt;
&lt;p&gt;Si nécessaire, changer le nom en OPL Loader (ou tout autre nom de votre choix).&lt;/p&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/playstation2/fmc5.jpg&quot; /&gt;
&lt;p&gt;Il nous faut maintenant sélectionner le chemin vers Open PS2 Loader. Sélectionner &quot;Path1:&quot; et appuyer sur Croix.&lt;/p&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/playstation2/fmc6.jpg&quot; /&gt;
&lt;p&gt;Sélectionner &quot;mass:/&quot;&lt;/p&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/playstation2/fmc7.jpg&quot; /&gt;
&lt;p&gt;Aller dans APPS/OPL/ et sélectionner OPNPS2LD.ELF avec Croix&lt;/p&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/playstation2/fmc8.jpg&quot; /&gt;
&lt;p&gt;Si tout va bien, les paramètres devraient ressembler à ça :&lt;/p&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/playstation2/fmc9.jpg&quot; /&gt;
&lt;p&gt;Sélectionner &quot;Return&quot; et appuyer sur Croix&lt;/p&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/playstation2/fmc10.jpg&quot; /&gt;
&lt;p&gt;Descendre également et sélectionner &quot;Return&quot;.&lt;/p&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/playstation2/fmc11.jpg&quot; /&gt;
&lt;p&gt;Sélectionner maintenant &quot;Save CNF to MC0&quot; et appuyer sur Croix. Cela enregistrera la configuration sur la carte mémoire 1 (celle de gauche). La carte mémoire 2 est appelée MC1.&lt;/p&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/playstation2/fmc12.jpg&quot; /&gt;
&lt;p&gt;Le message &quot;Saved mc0:/SYS-CONF/FREEMCB.CNF&quot; devrait apparaître en haut de l'écran, en rouge.&lt;/p&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/playstation2/fmc13.jpg&quot; /&gt;
&lt;p&gt;Une fois la sauvegarde effectuée, sélectionner Exit, puis appuyer sur Croix.&lt;/p&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/playstation2/fmc14.jpg&quot; /&gt;
&lt;p&gt;La console redémarre automatiquement.&lt;/p&gt;
&lt;p&gt;Une fois sur le menu (OSDSYS) de la PlayStation 2, sélectionner OPL Loader (ou le nom que vous avez saisi plus haut) et appuyer sur Croix (ou Rond, en fonction de la région de la console) pour lancer Open PS2 Loader.&lt;/p&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/playstation2/osd.jpg&quot; /&gt;
&lt;p&gt;Au bout de quelques instants, l'écran OPL Open PS2 Loader apparaît.&lt;/p&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/playstation2/oplps1.jpg&quot; /&gt;
&lt;p&gt;On arrive alors sur cet écran.&lt;/p&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/playstation2/oplps2.jpg&quot; /&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;configuration-de-open-ps2-loader&quot;&gt;
&lt;h3&gt;Configuration de Open PS2 Loader&lt;/h3&gt;
&lt;p&gt;Aller dans &quot;Settings&quot;.&lt;/p&gt;
&lt;p&gt;Si nécessaire, changer le chemin dans &quot;IGR Path&quot;.&lt;/p&gt;
&lt;div class=&quot;admonition note&quot;&gt;
&lt;p class=&quot;first admonition-title&quot;&gt;Note&lt;/p&gt;
&lt;p class=&quot;last&quot;&gt;IGR = In Game Reset, autrement dit, un appui sur L1 + R1 + L2 + R2 + SELECT + START arrête le jeu et lance ce qui est spécifié ici. Comme on veut revenir sur Open PS2 Loader, il faut spécifier son chemin. C'est simple, il s'agit du même chemin que celui spécifié dans Free MCBoot Configurator.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;admonition warning&quot;&gt;
&lt;p class=&quot;first admonition-title&quot;&gt;Avis&lt;/p&gt;
&lt;p class=&quot;last&quot;&gt;Une erreur dans le chemin = retour sur OSDSYS dans le pire des cas.&lt;/p&gt;
&lt;/div&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/playstation2/oplconf1.jpg&quot; /&gt;
&lt;p&gt;Mettre &quot;HDD Device Start Mode&quot; sur &quot;OFF&quot;, &quot;ETH Device Start Mode&quot; sur &quot;Auto&quot;, et sélectionner &quot;Default Menu&quot; sur &quot;ETH Games&quot;.&lt;/p&gt;
&lt;p&gt;Descendre sur &quot;OK&quot;, et appuyer sur Croix.&lt;/p&gt;
&lt;p&gt;Aller sur &quot;Save Changes&quot; et appuyer sur Croix, pour sauvegarder les paramètres.&lt;/p&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/playstation2/oplconf2.jpg&quot; /&gt;
&lt;div class=&quot;admonition note&quot;&gt;
&lt;p class=&quot;first admonition-title&quot;&gt;Note&lt;/p&gt;
&lt;p class=&quot;last&quot;&gt;Pensez à sauvegarder systématiquement les paramètres au fur et à mesure de la configuration.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;admonition warning&quot;&gt;
&lt;p class=&quot;first admonition-title&quot;&gt;Avis&lt;/p&gt;
&lt;p class=&quot;last&quot;&gt;Si un paramètre est erroné et qu'il n'est plus possible de lancer Open PS2 Loader, brancher la clef USB sur un ordinateur, aller dans &quot;APPS/OPL&quot;, et renommer ou supprimer le fichier &quot;conf_opl.cfg&quot;. Ce fichier contient la configuration de Open PS2 Loader.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Aller ensuite dans &quot;Display Settings&quot;.&lt;/p&gt;
&lt;p&gt;Changer si besoin la résolution vidéo qui sera utilisée pour Open PS2 Loader. Ici, j'ai sélectionné HDTV 1280x720p @60 Hz 16 bit (HIRES).&lt;/p&gt;
&lt;div class=&quot;admonition note&quot;&gt;
&lt;p class=&quot;first admonition-title&quot;&gt;Note&lt;/p&gt;
&lt;p class=&quot;last&quot;&gt;Ma PS2 Slim est branchée sur un OSSC (Open Source Scan Converter) ou sur un GBS 8220 moddé GBS Control en YPbPr/Composante/RCA vert rouge bleu. Ces deux interfaces acceptent ce format vidéo sans aucun problème. Ce n'est pas forcément le cas de tous les écrans, notamment cathodique.&lt;/p&gt;
&lt;/div&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/playstation2/oplconf3.jpg&quot; /&gt;
&lt;p&gt;Aller sur &quot;OK&quot; et sauvegarder si nécessaire. Ne pas hésiter à redémarrer la console et relancer Open PS2 Loader et vérifier que les paramètres vidéo sont bons.&lt;/p&gt;
&lt;p&gt;On arrive au bout. Aller dans &quot;Network Settings&quot;&lt;/p&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/playstation2/oplconf4.jpg&quot; /&gt;
&lt;p&gt;Laisser &quot;Advanced Options&quot; sur OFF.&lt;/p&gt;
&lt;p&gt;Configurer ensuite le réseau -PS2- (la console donc) comme suit :&lt;/p&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/playstation2/oplconf5.jpg&quot; /&gt;
&lt;ul class=&quot;simple&quot;&gt;
&lt;li&gt;&quot;IP Address Type&quot;: &quot;Static&quot; ;&lt;/li&gt;
&lt;li&gt;&quot;IP Address&quot;: &quot;192.168.10.10&quot; ;&lt;/li&gt;
&lt;li&gt;&quot;Mask&quot;: &quot;255.255.255.0&quot; ;&lt;/li&gt;
&lt;li&gt;&quot;Gateway&quot;: &quot;192.168.10.254&quot; ;&lt;/li&gt;
&lt;li&gt;&quot;DNS Server&quot;: &quot;192.168.10.13&quot;.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;admonition note&quot;&gt;
&lt;p class=&quot;first admonition-title&quot;&gt;Note&lt;/p&gt;
&lt;p class=&quot;last&quot;&gt;Changer 192.168.10.* par les paramètres réseau que vous avez. Revenir sur la section [Configuration du réseau] si nécessaire.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;admonition note&quot;&gt;
&lt;p class=&quot;first admonition-title&quot;&gt;Note&lt;/p&gt;
&lt;p class=&quot;last&quot;&gt;En général la passerelle (Gateway), plus couramment appelé (machin)Box, sert de serveur DNS. Dans mon cas, c'est un serveur sur mon réseau local qui s'en occupe (PiHole).&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Enfin, on arrive sur la configuration du serveur SMB (- SMB Server -)&lt;/p&gt;
&lt;ul class=&quot;simple&quot;&gt;
&lt;li&gt;&quot;Address Type&quot;: &quot;IP&quot; ;&lt;/li&gt;
&lt;li&gt;&quot;Address&quot;: &quot;192.168.10.35&quot; ;&lt;/li&gt;
&lt;li&gt;&quot;Port&quot;: &quot;445&quot;&lt;/li&gt;
&lt;li&gt;&quot;Share&quot;: &quot;Jeux&quot;&lt;/li&gt;
&lt;li&gt;&quot;User&quot;: laisser sur &quot;&amp;lt;not set&amp;gt;&quot;&lt;/li&gt;
&lt;li&gt;&quot;Password&quot;: laisser sur &quot;&amp;lt;not set&amp;gt;&quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;admonition note&quot;&gt;
&lt;p class=&quot;first admonition-title&quot;&gt;Note&lt;/p&gt;
&lt;p class=&quot;last&quot;&gt;Dans Address et dans Share, utiliser les paramètres qui ont été définis dans Samba, et qui ont servi pour la copie des images depuis Windows.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Aller sur &quot;OK&quot;, puis enregistrer.&lt;/p&gt;
&lt;p&gt;Depuis l'écran présentant tous les paramètres, appuyer sur Rond (Games List)&lt;/p&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/playstation2/oplps2.jpg&quot; /&gt;
&lt;p&gt;Après quelques instants (le logo OPL devrait clignoter en bas à droite), la liste des jeux apparaît.&lt;/p&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/playstation2/opl-game1.jpg&quot; /&gt;
&lt;p&gt;Sélectionner le jeu à lancer, et appuyer sur Croix.&lt;/p&gt;
&lt;div class=&quot;admonition note&quot;&gt;
&lt;p class=&quot;first admonition-title&quot;&gt;Note&lt;/p&gt;
&lt;ul class=&quot;simple&quot;&gt;
&lt;li&gt;Pour revenir au menu précédent, appuyer sur Start (Menu).&lt;/li&gt;
&lt;li&gt;Pour lancer un jeu, appuyer sur Croix (Run).&lt;/li&gt;
&lt;li&gt;Pour afficher les informations, appuyer sur Carré (Info).&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;last&quot;&gt;** Si nécessaire (en fonction des jeux et des problèmes de compatibilité), il faudra aller dans les Options, via le bouton Triangle (Options). Se référer au site &lt;a class=&quot;reference external&quot; href=&quot;https://www.ps2-home.com/forum/page/opl-game-compatibility-list&quot;&gt;https://www.ps2-home.com/forum/page/opl-game-compatibility-list&lt;/a&gt; et appliquer les corrections (notamment activer les modes).&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;admonition note&quot;&gt;
&lt;p class=&quot;first admonition-title&quot;&gt;Note&lt;/p&gt;
&lt;p class=&quot;last&quot;&gt;Dans les options et dans la liste de compatibilité, &quot;VMC&quot; sera mentionné. VMC signifie Virtual Memory Card. Cela permet de créer une carte mémoire virtuelle, soit commune à tous les jeux, soit pour chaque jeu. Tous les jeux ne sont pas compatibles VMC, vérifier la compatibilité avant d'activer cette option dans les options du jeu. Si cette option est désactivée, les carte-mémoires physique fonctionneront normalement.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Un checksum est vérifié, puis le jeu est lancé.&lt;/p&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/playstation2/opl-game2.jpg&quot; /&gt;
&lt;div class=&quot;admonition note&quot;&gt;
&lt;p class=&quot;first admonition-title&quot;&gt;Note&lt;/p&gt;
&lt;p class=&quot;last&quot;&gt;L'écran peut clignoter en bleu, en vert ou en magenta. Ne pas s'en inquiéter.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Logo PlayStation 2 s'affichant au lancement d'un jeu.&lt;/p&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/playstation2/opl-game3.jpg&quot; /&gt;
&lt;p&gt;Démarrage de Gradius V. Sélection du format vidéo (PAL ou NTSC).&lt;/p&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/playstation2/opl-game4.jpg&quot; /&gt;
&lt;p&gt;Écran titre&lt;/p&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/playstation2/opl-game5.jpg&quot; /&gt;
&lt;p&gt;Menu du jeu.&lt;/p&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/playstation2/opl-game6.jpg&quot; /&gt;
&lt;p&gt;Pour sortir du jeu et revenir sur Open PS2 Loader, soit appuyer sur L1 + R1 + L2 + R2 + SELECT + START, soit redémarrer la console en appuyant sur le bouton &quot;Reset&quot; puis relancer Open PS2 Loader depuis le menu/OSDSYS.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;conclusion&quot;&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Un peu long à mettre en place, quelques pièges possible au niveau réseau, mais au final, parfaitement fonctionnel.&lt;/p&gt;
&lt;p&gt;Je n'ai pas parlé du lancement des jeux PS1, il faudrait un article à lui tout seul pour cela. Je ne pense pas l'écrire, c'est relativement compliqué à mettre en place. Nettement plus compliqué que pour les jeux PS2.&lt;/p&gt;
&lt;p&gt;Les jeux pouvant avoir une taille assez conséquente (DVD9), une petite carte micro SD de 16 ou 32 Go sera très vite remplie. Ne pas hésiter à utiliser une carte de plus grande capacité si nécessaire.&lt;/p&gt;
&lt;div class=&quot;admonition note&quot;&gt;
&lt;p class=&quot;first admonition-title&quot;&gt;Note&lt;/p&gt;
&lt;p class=&quot;last&quot;&gt;On peut très bien utiliser un NAS à la place d'un Raspberry Pi. Il faudra alors brancher la PlayStation 2 sur le même réseau local que le NAS, et modifier les paramètres réseau - SMB Server - dans Open PS2 Loader, et y mettre ce qui correspond au NAS. Toute la partie installation/configuration du Raspberry Pi sera alors inutile :)&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;--&lt;/p&gt;
&lt;/div&gt;
&lt;ol class=&quot;simple-footnotes&quot;&gt;&lt;li id=&quot;sf-playstation2-raspberrypi-1&quot;&gt; &lt;a class=&quot;reference external&quot; href=&quot;https://blog.chibi-nah.fr/bon-ca-c-est-fait&quot;&gt;https://blog.chibi-nah.fr/bon-ca-c-est-fait&lt;/a&gt;  &lt;a class=&quot;simple-footnote-back&quot; href=&quot;https://blog.chibi-nah.fr/feeds/all.atom.xml#sf-playstation2-raspberrypi-1-back&quot;&gt;↩&lt;/a&gt;&lt;/li&gt;&lt;li id=&quot;sf-playstation2-raspberrypi-2&quot;&gt;J'utilise un lecteur universel Hama (USB 2.0 Card Reader 35 in 1). &lt;a class=&quot;simple-footnote-back&quot; href=&quot;https://blog.chibi-nah.fr/feeds/all.atom.xml#sf-playstation2-raspberrypi-2-back&quot;&gt;↩&lt;/a&gt;&lt;/li&gt;&lt;li id=&quot;sf-playstation2-raspberrypi-3&quot;&gt; &lt;a class=&quot;reference external&quot; href=&quot;https://www.7-zip.org/&quot;&gt;https://www.7-zip.org/&lt;/a&gt;  &lt;a class=&quot;simple-footnote-back&quot; href=&quot;https://blog.chibi-nah.fr/feeds/all.atom.xml#sf-playstation2-raspberrypi-3-back&quot;&gt;↩&lt;/a&gt;&lt;/li&gt;&lt;li id=&quot;sf-playstation2-raspberrypi-4&quot;&gt;Pour être franc, en fait, je n’ai même pas cherché &lt;a class=&quot;simple-footnote-back&quot; href=&quot;https://blog.chibi-nah.fr/feeds/all.atom.xml#sf-playstation2-raspberrypi-4-back&quot;&gt;↩&lt;/a&gt;&lt;/li&gt;&lt;li id=&quot;sf-playstation2-raspberrypi-5&quot;&gt;In Game Reset ; un appui sur L1 + R1 + L2 + R2 + Select + Start provoque le redémarrage de la Playstation 2. &lt;a class=&quot;simple-footnote-back&quot; href=&quot;https://blog.chibi-nah.fr/feeds/all.atom.xml#sf-playstation2-raspberrypi-5-back&quot;&gt;↩&lt;/a&gt;&lt;/li&gt;&lt;li id=&quot;sf-playstation2-raspberrypi-6&quot;&gt;je coche tout, sauf les cases « Remplacer s’il(s) existe(s) » &lt;a class=&quot;simple-footnote-back&quot; href=&quot;https://blog.chibi-nah.fr/feeds/all.atom.xml#sf-playstation2-raspberrypi-6-back&quot;&gt;↩&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;</content:encoded>
	<dc:date>2021-10-25T22:00:00+00:00</dc:date>
	<dc:creator>alex</dc:creator>
</item>
<item rdf:about="https://fiat-tux.fr/?p=2969">
	<title>Luc Didry: Précau­tion à prendre pour la mise à jour vers Debian Bull­seye d’un clus­ter Ganeti</title>
	<link>https://fiat-tux.fr/2021/09/07/precaution-a-prendre-pour-la-mise-a-jour-vers-debian-bullseye-dun-cluster-ganeti/</link>
	<content:encoded>&lt;p&gt;Géné­ra­le­ment, on fait sa mise à jour vers la nouvelle version de Debian, ça installe la nouvelle version de Ganeti, on fait un petit &lt;code&gt;gnt-cluster upgrade&lt;/code&gt;, pis ça roule.&lt;/p&gt;
&lt;p&gt;Hélas, pas pour Debian Bull­seye (Debian 11) ! En effet, la mise à jour de Debian dégage les paquets rela­tifs à Ganeti 2.16, ne lais­sant plus en place que les fichiers de Ganeti 3. Or il faut les anciers binaires pour mettre à jour vers les nouveaux !&lt;/p&gt;
&lt;p&gt;Donc, avant le passage à Bull­seye, instal­lez &lt;code&gt;ganeti&lt;/code&gt;, &lt;code&gt;ganeti-3.0&lt;/code&gt;, &lt;code&gt;ganeti-haskell-3.0&lt;/code&gt; et &lt;code&gt;ganeti-htools-3.0&lt;/code&gt; depuis les &lt;a href=&quot;https://backports.debian.org/Instructions/&quot;&gt;back­ports de buster&lt;/a&gt; et faites l’up­grade du clus­ter ganeti vers la 3.0 (&lt;code&gt;gnt-cluster upgrade --to=3.0&lt;/code&gt;).&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;apt install ganeti ganeti-3.0 ganeti-haskell-3.0 ganeti-htools-3.0 -t buster-backports&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Vous pour­rez ensuite mettre à jour les machines vers Bull­seye en toute quié­tude.&lt;/p&gt;
&lt;p&gt;NB : il est dit dans les notes de version de Ganeti qu’&lt;a href=&quot;https://github.com/ganeti/ganeti/releases/tag/v3.0.0beta1&quot;&gt;il faut mettre à jour Ganeti vers la version 2.16.2 pour pouvoir mettre à jour vers la version 3.0&lt;/a&gt;. Debian ne four­nit pas de version 2.16.2 (juste 2.16.0–5), mais ils ont fait ce qu’il faut pour que ça passe (c’est dans la liste des chan­ge­ments lors de la mise à jour vers Bull­seye), n’ayez pas d’inquié­tude.&lt;/p&gt;</content:encoded>
	<dc:date>2021-09-07T11:13:23+00:00</dc:date>
	<dc:creator>Luc</dc:creator>
</item>
<item rdf:about="tag:None,2021-07-04:/mpv-osd-et-chapitre">
	<title>Alexandre Bailly: mpv, OSD et affichage du nom du chapitre en cours de lecture</title>
	<link>https://blog.chibi-nah.fr/mpv-osd-et-chapitre</link>
	<content:encoded>&lt;p&gt;TL;DR (trop long, flemme de tout lire) : Un appui sur la touche 'g' affiche le chapitre en cours de lecture dans mpv.
Copier le script &lt;a class=&quot;reference external&quot; href=&quot;https://aeka.chibi-nah.net/~alex/brol/showCurrentChapter.lua&quot;&gt;https://aeka.chibi-nah.net/~alex/brol/showCurrentChapter.lua&lt;/a&gt; dans ~/.config/mpv/scripts&lt;/p&gt;
&lt;div class=&quot;section&quot; id=&quot;contexte&quot;&gt;
&lt;h2&gt;Contexte&lt;/h2&gt;
&lt;p&gt;Tout est parti d'un pouët de @devnull&lt;sup id=&quot;sf-mpv-osd-et-chapitre-1-back&quot;&gt;&lt;a class=&quot;simple-footnote&quot; href=&quot;https://blog.chibi-nah.fr/feeds/all.atom.xml#sf-mpv-osd-et-chapitre-1&quot; title=&quot; https://mamot.fr/@devnull/106521784534006704 &quot;&gt;1&lt;/a&gt;&lt;/sup&gt; sur le Fediverse&lt;sup id=&quot;sf-mpv-osd-et-chapitre-2-back&quot;&gt;&lt;a class=&quot;simple-footnote&quot; href=&quot;https://blog.chibi-nah.fr/feeds/all.atom.xml#sf-mpv-osd-et-chapitre-2&quot; title=&quot;Pour n̶e̶ ̶p̶a̶s̶ changer…&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;. En résumé : Est-il possible d'afficher la piste d'un fichier .cue en cours de lecture dans mpv ? Soit de manière permanente, soit pendant une certaine durée, ou lors de l'appui sur une touche.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;le-script&quot;&gt;
&lt;h2&gt;Le script&lt;/h2&gt;
&lt;p&gt;Le moyen le plus simple pour arriver à ce résultat, c'est l'écriture d'un script lua, et de l'enregistrer dans ~/.config/mpv/scripts (sous GNU/Linux et BSD, chemin à adapter sous Windows et Mac OS).&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;--affichage du chapitre en cours&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;-- Licence WTFPL v2&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;-- @alex@social.nah.re&lt;/span&gt;

&lt;span class=&quot;kd&quot;&gt;local&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;options&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;require&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;mp.options&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;local&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;utils&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;require&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;mp.utils&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;c1&quot;&gt;--paramètres par défaut&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;local&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;cfg&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;key&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'g'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;osdDuration&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;name&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'showCurrentChapter'&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;options&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;read_options&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;cfg&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'showCurrentChapter'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;kd&quot;&gt;local&lt;/span&gt; &lt;span class=&quot;kr&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;showCurrentChapter&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
        &lt;span class=&quot;kd&quot;&gt;local&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;chapter&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;mp&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;get_property_osd&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'chapter'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;mp&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;osd_message&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;chapter&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;cfg&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;osdDuration&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;kr&quot;&gt;end&lt;/span&gt;

&lt;span class=&quot;kr&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;cfg&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;key&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;kr&quot;&gt;then&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;mp&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;add_key_binding&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;cfg&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;key&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;cfg&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;showCurrentChapter&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;mp&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;msg&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;verbose&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;key:'&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;cfg&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;key&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;' bound to '&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;cfg&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;'&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;kr&quot;&gt;end&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Pas grand-chose à dire en fait.&lt;/p&gt;
&lt;p&gt;Définir les paramètres par défaut, notamment la touche sur laquelle il faudra appuyer pour exécuter le script (ici, 'g'), et la durée d'affichage (5 secondes).&lt;/p&gt;
&lt;p&gt;Ces options peuvent être redéfinies dans un fichier de configuration externe&lt;sup id=&quot;sf-mpv-osd-et-chapitre-3-back&quot;&gt;&lt;a class=&quot;simple-footnote&quot; href=&quot;https://blog.chibi-nah.fr/feeds/all.atom.xml#sf-mpv-osd-et-chapitre-3&quot; title=&quot;Cf. documentation de mpv -&amp;gt; https://mpv.io/manual/stable/ &quot;&gt;3&lt;/a&gt;&lt;/sup&gt;, ce qui évite de modifier le script&lt;sup id=&quot;sf-mpv-osd-et-chapitre-4-back&quot;&gt;&lt;a class=&quot;simple-footnote&quot; href=&quot;https://blog.chibi-nah.fr/feeds/all.atom.xml#sf-mpv-osd-et-chapitre-4&quot; title=&quot;On peut très bien modifier le script en fait.&quot;&gt;4&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;
&lt;p&gt;À la fin, si la touche (cfg.key) est définie, alors on demande à mpv de l'ajouter dans sa liste des touches &quot;mappées&quot;, et en lui indiquant quelle est la fonction à appeler (showCurrentChapter) lors de l'appui sur cette touche (g).&lt;/p&gt;
&lt;p&gt;Et au dessus, la fonction affichant le chapitre.&lt;/p&gt;
&lt;p&gt;J'avais d'abord essayé l'appel à &lt;cite&gt;mp.get_property('chapter')&lt;/cite&gt;, mais je récupérais uniquement l'index du chapitre en cours de lecture (par exemple : &lt;cite&gt;5&lt;/cite&gt;).&lt;/p&gt;
&lt;p&gt;J'ai pensé charger la liste des chapitres dans un tableau, via chapter-list, mais cela complexifiait le code. Et en lisant la doc, en fait, le moyen le plus simple, c'était d'appeler &lt;cite&gt;mp.get_property_osd('chapter')&lt;/cite&gt; directement.&lt;/p&gt;
&lt;p&gt;Et pour l'affichage, il suffit d'appeler la fonction &lt;cite&gt;mp.osd_message(texte à afficher, durée)&lt;/cite&gt;.&lt;/p&gt;
&lt;p&gt;La durée étant stockée dans les paramètres, on n'a pas besoin de modifier la valeur dans cette fonction.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;conclusion&quot;&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Rien de compliqué. Un peu de code, quelques tests, et surtout&lt;sup id=&quot;sf-mpv-osd-et-chapitre-5-back&quot;&gt;&lt;a class=&quot;simple-footnote&quot; href=&quot;https://blog.chibi-nah.fr/feeds/all.atom.xml#sf-mpv-osd-et-chapitre-5&quot; title=&quot;On ne peut pas y échapper.&quot;&gt;5&lt;/a&gt;&lt;/sup&gt; beaucoup de lecture de documentation&lt;sup id=&quot;sf-mpv-osd-et-chapitre-6-back&quot;&gt;&lt;a class=&quot;simple-footnote&quot; href=&quot;https://blog.chibi-nah.fr/feeds/all.atom.xml#sf-mpv-osd-et-chapitre-6&quot; title=&quot;Bon, ça va, je sais à peu près comment fonctionne mpv et comment est organisée la documentation.&quot;&gt;6&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;
&lt;p&gt;--&lt;/p&gt;
&lt;/div&gt;
&lt;ol class=&quot;simple-footnotes&quot;&gt;&lt;li id=&quot;sf-mpv-osd-et-chapitre-1&quot;&gt; &lt;a class=&quot;reference external&quot; href=&quot;https://mamot.fr/@devnull/106521784534006704&quot;&gt;https://mamot.fr/@devnull/106521784534006704&lt;/a&gt;  &lt;a class=&quot;simple-footnote-back&quot; href=&quot;https://blog.chibi-nah.fr/feeds/all.atom.xml#sf-mpv-osd-et-chapitre-1-back&quot;&gt;↩&lt;/a&gt;&lt;/li&gt;&lt;li id=&quot;sf-mpv-osd-et-chapitre-2&quot;&gt;Pour n̶e̶ ̶p̶a̶s̶ changer… &lt;a class=&quot;simple-footnote-back&quot; href=&quot;https://blog.chibi-nah.fr/feeds/all.atom.xml#sf-mpv-osd-et-chapitre-2-back&quot;&gt;↩&lt;/a&gt;&lt;/li&gt;&lt;li id=&quot;sf-mpv-osd-et-chapitre-3&quot;&gt;Cf. documentation de mpv -&amp;gt; &lt;a class=&quot;reference external&quot; href=&quot;https://mpv.io/manual/stable/&quot;&gt;https://mpv.io/manual/stable/&lt;/a&gt;  &lt;a class=&quot;simple-footnote-back&quot; href=&quot;https://blog.chibi-nah.fr/feeds/all.atom.xml#sf-mpv-osd-et-chapitre-3-back&quot;&gt;↩&lt;/a&gt;&lt;/li&gt;&lt;li id=&quot;sf-mpv-osd-et-chapitre-4&quot;&gt;On peut très bien modifier le script en fait. &lt;a class=&quot;simple-footnote-back&quot; href=&quot;https://blog.chibi-nah.fr/feeds/all.atom.xml#sf-mpv-osd-et-chapitre-4-back&quot;&gt;↩&lt;/a&gt;&lt;/li&gt;&lt;li id=&quot;sf-mpv-osd-et-chapitre-5&quot;&gt;On ne peut pas y échapper. &lt;a class=&quot;simple-footnote-back&quot; href=&quot;https://blog.chibi-nah.fr/feeds/all.atom.xml#sf-mpv-osd-et-chapitre-5-back&quot;&gt;↩&lt;/a&gt;&lt;/li&gt;&lt;li id=&quot;sf-mpv-osd-et-chapitre-6&quot;&gt;Bon, ça va, je sais à peu près comment fonctionne mpv et comment est organisée la documentation. &lt;a class=&quot;simple-footnote-back&quot; href=&quot;https://blog.chibi-nah.fr/feeds/all.atom.xml#sf-mpv-osd-et-chapitre-6-back&quot;&gt;↩&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;</content:encoded>
	<dc:date>2021-07-03T22:00:00+00:00</dc:date>
	<dc:creator>alex</dc:creator>
</item>
<item rdf:about="tag:None,2021-06-20:/wallpaper-finer">
	<title>Alexandre Bailly: Wallpaper Finer</title>
	<link>https://blog.chibi-nah.fr/wallpaper-finer</link>
	<content:encoded>&lt;p&gt;Wallpaper finer est un petit logiciel libre et open source (GPLv2), permettant de redimensionner et recadrer très facilement et rapidement une image. Son principal défaut ? Il utilise encore Qt 4.&lt;/p&gt;
&lt;p&gt;Comment modifier le code de ce logiciel pour utiliser Qt5 ? Réponse dans cet article.&lt;/p&gt;
&lt;p&gt;TL;DR (trop long, flemme de tout lire) : le code source du portage vers Qt5 est disponible ici :&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;reference external&quot; href=&quot;https://lab.shelter.moe/nah/wallpaperfiner&quot;&gt;https://lab.shelter.moe/nah/wallpaperfiner&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Compilation :&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;mkdir build
&lt;span class=&quot;nb&quot;&gt;cd&lt;/span&gt; build
qmake ../WallpaperFiner.pro
make
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Vérification que ça utilise bien qt5 :&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;ldd wallpaperfiner
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Exécution :&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;./wallpaperfiner
&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;introduction&quot;&gt;
&lt;h2&gt;Introduction&lt;/h2&gt;
&lt;p&gt;Tout est parti d'un pouët de @TritTriton&lt;sup id=&quot;sf-wallpaper-finer-1-back&quot;&gt;&lt;a class=&quot;simple-footnote&quot; href=&quot;https://blog.chibi-nah.fr/feeds/all.atom.xml#sf-wallpaper-finer-1&quot; title=&quot; https://shelter.moe/@TritTriton/106436810381701106 &quot;&gt;1&lt;/a&gt;&lt;/sup&gt;, qui parlait d'un petit logiciel permettant de recadrer et redimensionner une image facilement. Son seul reproche, c'est que c'est en Qt4&lt;sup id=&quot;sf-wallpaper-finer-2-back&quot;&gt;&lt;a class=&quot;simple-footnote&quot; href=&quot;https://blog.chibi-nah.fr/feeds/all.atom.xml#sf-wallpaper-finer-2&quot; title=&quot;qui date quand même de 2005, et dont la dernière mise à jour date de 2012.&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;. Cela impose donc de garder un framework&lt;sup id=&quot;sf-wallpaper-finer-3-back&quot;&gt;&lt;a class=&quot;simple-footnote&quot; href=&quot;https://blog.chibi-nah.fr/feeds/all.atom.xml#sf-wallpaper-finer-3&quot; title=&quot;En français, on est censé parler de cadriciel, mais personne ne connait ça sous ce nom&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; ancien sur sa machine.&lt;/p&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/wpfiner/wpfiner.jpg&quot; /&gt;
&lt;p&gt;L'application (une fois le portage vers Qt5 effectué) en action.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;le-code-source&quot;&gt;
&lt;h2&gt;Le code source&lt;/h2&gt;
&lt;div class=&quot;admonition note&quot;&gt;
&lt;p class=&quot;first admonition-title&quot;&gt;Note&lt;/p&gt;
&lt;p class=&quot;last&quot;&gt;Tout a été rédigé avec GNU/Linux, notamment Debian, en tête. Rien n'a été testé sous Windows, aucune aide ni support ne sera apporté de ma part pour ce système d'exploitation.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;admonition note&quot;&gt;
&lt;p class=&quot;first admonition-title&quot;&gt;Note&lt;/p&gt;
&lt;p class=&quot;last&quot;&gt;Ici, j'ai utilisé Qt Creator pour des raisons pratiques&lt;sup id=&quot;sf-wallpaper-finer-4-back&quot;&gt;&lt;a class=&quot;simple-footnote&quot; href=&quot;https://blog.chibi-nah.fr/feeds/all.atom.xml#sf-wallpaper-finer-4&quot; title=&quot;Même si je n'aime pas la disposition de l'environnement de développement intégré (IDE), ni sa traduction inconsistente (c'est à moitié traduit en français).&quot;&gt;4&lt;/a&gt;&lt;/sup&gt;. J'aurais pu utiliser geany, vscode, vim, emacs ou autre éditeur de texte.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Le code source de Wallpaper Finer est disponible sur le site du développeur, Péter Deák&lt;sup id=&quot;sf-wallpaper-finer-5-back&quot;&gt;&lt;a class=&quot;simple-footnote&quot; href=&quot;https://blog.chibi-nah.fr/feeds/all.atom.xml#sf-wallpaper-finer-5&quot; title=&quot; http://hyperprog.com/wpfiner/index.html &quot;&gt;5&lt;/a&gt;&lt;/sup&gt;, et est sous licence GPL v2. La dernière version date du mois d'août 2012&lt;sup id=&quot;sf-wallpaper-finer-6-back&quot;&gt;&lt;a class=&quot;simple-footnote&quot; href=&quot;https://blog.chibi-nah.fr/feeds/all.atom.xml#sf-wallpaper-finer-6&quot; title=&quot;ce qui correspond à Qt 4.8, Qt 5 étant sorti après&quot;&gt;6&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;
&lt;p&gt;Le projet s'ouvre sans souci avec Qt Creator&lt;sup id=&quot;sf-wallpaper-finer-7-back&quot;&gt;&lt;a class=&quot;simple-footnote&quot; href=&quot;https://blog.chibi-nah.fr/feeds/all.atom.xml#sf-wallpaper-finer-7&quot; title=&quot;Ça peut être utile d'installer Qt5, les outils de développement, etc. Se référer à la documentation ou au gestionnaire de paquets de la distribution utilisée. Idem : je n'apporterai aucune aide sur comment installer et ou configurer le tout.&quot;&gt;7&lt;/a&gt;&lt;/sup&gt;. Le projet étant créé avec Qt4, il faut modifier la configuration pour utiliser la bonne version de Qt. Lors de la rédaction de l'article, on en était à la version 5.15.2&lt;sup id=&quot;sf-wallpaper-finer-8-back&quot;&gt;&lt;a class=&quot;simple-footnote&quot; href=&quot;https://blog.chibi-nah.fr/feeds/all.atom.xml#sf-wallpaper-finer-8&quot; title=&quot;En tout cas, sous Debian GNU/Linux&quot;&gt;8&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/wpfiner/qtcreator1.jpg&quot; /&gt;
&lt;p&gt;Lors de l'ouverture du projet, Qt Creator demande de le configurer, notamment la cible, ici Desktop (Qt5).&lt;/p&gt;
&lt;p&gt;Il faut quand même vérifier si c'est bien la bonne version de Qt qui est sélectionnée, pour éviter toute surprise si jamais on a plusieurs versions du framework&lt;sup id=&quot;sf-wallpaper-finer-9-back&quot;&gt;&lt;a class=&quot;simple-footnote&quot; href=&quot;https://blog.chibi-nah.fr/feeds/all.atom.xml#sf-wallpaper-finer-9&quot; title=&quot;Cadriciel. Ce terme est barbant, je vais laisser framework partout dans l'article.&quot;&gt;9&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/wpfiner/qtcreator2.jpg&quot; /&gt;
&lt;p&gt;Liste des kits de développement (SDK) paramétrés. Ayant fait du ménage dedans, il n'y a plus que Desktop (Qt5).&lt;/p&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/wpfiner/qtcreator3.jpg&quot; /&gt;
&lt;p&gt;Versions de Qt installées. Version 4.8.7 (Qt4) et version 5.15.2 (Qt5).&lt;/p&gt;
&lt;p&gt;Tout est bon ? On peut continuer.&lt;/p&gt;
&lt;p&gt;Cliquer sur le bouton &quot;Configure project&quot;.&lt;/p&gt;
&lt;p&gt;Au bout de quelques instants, le projet s'affiche sous Projets, en haut à gauche.&lt;/p&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/wpfiner/qtcreator4.jpg&quot; /&gt;
&lt;p&gt;Par défaut, tous les nœuds de l'arborescence sont repliés.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;adaptations-a-faire&quot;&gt;
&lt;h2&gt;Adaptations à faire&lt;/h2&gt;
&lt;div class=&quot;section&quot; id=&quot;projet&quot;&gt;
&lt;h3&gt;Projet&lt;/h3&gt;
&lt;p&gt;Il y a quelques modifications à faire dans WallpaperFiner.pro.&lt;/p&gt;
&lt;p&gt;Ajouter &lt;em&gt;widgets&lt;/em&gt; à droite, sur la ligne QT :&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;QT&lt;/span&gt;       &lt;span class=&quot;o&quot;&gt;+=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;core&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;gui&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;widgets&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Pour la traduction en français, ajouter &lt;em&gt;wpfiner_fr.ts&lt;/em&gt; à droite, sur la ligne TRANSLATIONS :&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;TRANSLATIONS&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;wpfiner_hu&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ts&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;wpfiner_pl&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ts&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;wpfiner_fr&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ts&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/wpfiner/qtcreator5.jpg&quot; /&gt;
&lt;p&gt;Modifications effectuées dans WallpaperFiner.pro.&lt;/p&gt;
&lt;p&gt;Enregistrer et fermer le fichier.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;traduction-fr&quot;&gt;
&lt;h3&gt;Traduction fr&lt;/h3&gt;
&lt;p&gt;On va tout de suite ajouter la traduction en français.&lt;/p&gt;
&lt;ul class=&quot;simple&quot;&gt;
&lt;li&gt;Ouvrir le nœud Other files.&lt;/li&gt;
&lt;li&gt;Dupliquer le fichier wpfiner_pl.ts.&lt;/li&gt;
&lt;li&gt;Nommer le fichier wpfiner_fr.ts.&lt;/li&gt;
&lt;/ul&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/wpfiner/qtcreator6.jpg&quot; /&gt;
&lt;p&gt;Duplication du fichier pour la traduction.&lt;/p&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/wpfiner/qtcreator7.jpg&quot; /&gt;
&lt;p&gt;Nommage du fichier.&lt;/p&gt;
&lt;p&gt;Ouvrir le fichier &lt;em&gt;wpfiner_fr.ts&lt;/em&gt; en double-cliquant dessus. On va faire une modification dans ce fichier xml.&lt;/p&gt;
&lt;p&gt;Dans &lt;em&gt;TS&lt;/em&gt;, changer la langue de &lt;em&gt;pl_PL&lt;/em&gt; à &lt;em&gt;fr_FR&lt;/em&gt;, pour &lt;em&gt;language&lt;/em&gt; et &lt;em&gt;sourceLanguage&lt;/em&gt;.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;lt;TS&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;version=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;2.0&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;language=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;fr_FR&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;sourcelanguage=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;fr_FR&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/wpfiner/qtcreator8.jpg&quot; /&gt;
&lt;p&gt;Modifications effectuées.&lt;/p&gt;
&lt;p&gt;Enregistrer et fermer le fichier.&lt;/p&gt;
&lt;p&gt;Ouvrir maintenant le fichier &lt;em&gt;wpfiner_fr.ts&lt;/em&gt; avec Qt Linguist (l'outil dédié pour la traduction).&lt;/p&gt;
&lt;div class=&quot;admonition note&quot;&gt;
&lt;p class=&quot;first admonition-title&quot;&gt;Note&lt;/p&gt;
&lt;p class=&quot;last&quot;&gt;On peut aussi éditer le fichier xml à la main. Mais ce n'est pas forcément pratique et c'est source d'erreurs.&lt;/p&gt;
&lt;/div&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/wpfiner/qtcreator9.jpg&quot; /&gt;
&lt;p&gt;Menu contextuel -&amp;gt; Ouvrir avec&lt;/p&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/wpfiner/qtlinguist1.jpg&quot; /&gt;
&lt;p&gt;Qt Linguist. Comparé à un outil léger comme PoEdit, l'interface semble compliquée.&lt;/p&gt;
&lt;p&gt;Faire la traduction des différents textes et messages. Je ne m'attarderai pas dessus, ce n'est pas très difficile.&lt;/p&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/wpfiner/qtlinguist2.jpg&quot; /&gt;
&lt;p&gt;Traduction française terminée.&lt;/p&gt;
&lt;p&gt;Cliquer sur le menu Fichier -&amp;gt; Publier pour générer le fichier wpfiner_fr.qm. On en aura besoin par la suite.&lt;/p&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/wpfiner/qtlinguist3.jpg&quot; /&gt;
&lt;p&gt;Menu Fichier -&amp;gt; Publier.&lt;/p&gt;
&lt;p&gt;Fermer Qt Linguist.&lt;/p&gt;
&lt;p&gt;Dans Qt Creator, ouvrir le nœud Resources, wpfiner.qrc, /&lt;/p&gt;
&lt;p&gt;Faire un clic droit sur / -&amp;gt; Ajouter des fichiers existants…&lt;/p&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/wpfiner/qtcreator10.jpg&quot; /&gt;
&lt;p&gt;Menu contextuel -&amp;gt; Ajouter des fichiers existants…&lt;/p&gt;
&lt;p&gt;Sélectionner le fichier wpfiner_fr.qm et cliquer sur Ouvrir.&lt;/p&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/wpfiner/qtcreator11.jpg&quot; /&gt;
&lt;p&gt;Boîte de dialogue de sélection de fichiers.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;entete-wpfiner-h&quot;&gt;
&lt;h3&gt;Entête (wpfiner.h)&lt;/h3&gt;
&lt;p&gt;Ouvrir le fichier &lt;em&gt;wpfiner.h&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Modifier le numéro de version en 0.95 (la version étant 0.94).&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&quot;cp&quot;&gt;#define VERSION &quot;0.95&quot;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Dans ce fichier, il y a une erreur (indiquée en rouge) :&lt;/p&gt;
&lt;ul class=&quot;simple&quot;&gt;
&lt;li&gt;expected class name.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pour corriger cette erreur, il faut ajouter des #includes supplémentaires.&lt;/p&gt;
&lt;div class=&quot;admonition note&quot;&gt;
&lt;p class=&quot;first admonition-title&quot;&gt;Note&lt;/p&gt;
&lt;p class=&quot;last&quot;&gt;S'aider de la documentation du SDK Qt, notamment les pages de migration Qt4 vers Qt5.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Les entêtes à ajouter sous #include &amp;lt;QtCore&amp;gt; sont :&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&quot;cp&quot;&gt;#include&lt;/span&gt; &lt;span class=&quot;cpf&quot;&gt;&amp;lt;QMainWindow&amp;gt;&lt;/span&gt;&lt;span class=&quot;cp&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;cp&quot;&gt;#include&lt;/span&gt; &lt;span class=&quot;cpf&quot;&gt;&amp;lt;QFrame&amp;gt;&lt;/span&gt;&lt;span class=&quot;cp&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;cp&quot;&gt;#include&lt;/span&gt; &lt;span class=&quot;cpf&quot;&gt;&amp;lt;QMenu&amp;gt;&lt;/span&gt;&lt;span class=&quot;cp&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;cp&quot;&gt;#include&lt;/span&gt; &lt;span class=&quot;cpf&quot;&gt;&amp;lt;QMenuBar&amp;gt;&lt;/span&gt;&lt;span class=&quot;cp&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;cp&quot;&gt;#include&lt;/span&gt; &lt;span class=&quot;cpf&quot;&gt;&amp;lt;QMessageBox&amp;gt;&lt;/span&gt;&lt;span class=&quot;cp&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;cp&quot;&gt;#include&lt;/span&gt; &lt;span class=&quot;cpf&quot;&gt;&amp;lt;QFileDialog&amp;gt;&lt;/span&gt;&lt;span class=&quot;cp&quot;&gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/wpfiner/qtcreator12.jpg&quot; /&gt;
&lt;p&gt;Modifications effectuées.&lt;/p&gt;
&lt;div class=&quot;admonition note&quot;&gt;
&lt;p class=&quot;first admonition-title&quot;&gt;Note&lt;/p&gt;
&lt;p class=&quot;last&quot;&gt;il reste un warning (ligne jaune), ne pas en tenir compte pour le moment&lt;sup id=&quot;sf-wallpaper-finer-10-back&quot;&gt;&lt;a class=&quot;simple-footnote&quot; href=&quot;https://blog.chibi-nah.fr/feeds/all.atom.xml#sf-wallpaper-finer-10&quot; title=&quot;En fait, j'ai carrément ignoré tous les warnings dans le code source, cela concerne des fonctions ou des instructions dépréciées.&quot;&gt;10&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Enregistrer et fermer le fichier wpfiner.h.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;c-main-cpp&quot;&gt;
&lt;h3&gt;C++ (main.cpp)&lt;/h3&gt;
&lt;p&gt;Ouvrir le fichier &lt;em&gt;main.cpp&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Il y a deux erreurs dans ce fichier :&lt;/p&gt;
&lt;ul class=&quot;simple&quot;&gt;
&lt;li&gt;QtGui/QApplication: No such file or directory ;&lt;/li&gt;
&lt;li&gt;variable has incomplete type 'QApplication'.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pour corriger ces erreurs, il faut également modifier les includes.&lt;/p&gt;
&lt;p&gt;Supprimer cet include :&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&quot;cp&quot;&gt;#include&lt;/span&gt; &lt;span class=&quot;cpf&quot;&gt;&amp;lt;QtGui/QApplication&amp;gt;&lt;/span&gt;&lt;span class=&quot;cp&quot;&gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Cet include n'existe plus dans Qt5.&lt;/p&gt;
&lt;p&gt;Ajouter les deux includes suivants :&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&quot;cp&quot;&gt;#include&lt;/span&gt; &lt;span class=&quot;cpf&quot;&gt;&amp;lt;QtWidgets&amp;gt;&lt;/span&gt;&lt;span class=&quot;cp&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;cp&quot;&gt;#include&lt;/span&gt; &lt;span class=&quot;cpf&quot;&gt;&amp;lt;QMainWindow&amp;gt;&lt;/span&gt;&lt;span class=&quot;cp&quot;&gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Profiton-en pour ajouter la traduction française dans la liste des traductions.&lt;/p&gt;
&lt;p&gt;Modifier la ligne #define INSTALLED_LANGNUM en remplaçant la valeur 3 par 4&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&quot;cp&quot;&gt;#define INSTALLED_LANGNUM  4&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Modifier la liste des langues en remplaçant également [3] par [4], et en ajoutant une ligne supplémentaire référençant la langue française.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;char&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;langs&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;INSTALLED_LANGNUM&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;][&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;][&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;30&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;English&quot;&lt;/span&gt;  &lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;en&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;French&quot;&lt;/span&gt;   &lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;fr&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;:/wpfiner_fr.qm&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;Hungarian&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;hu&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;:/wpfiner_hu.qm&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;Polish&quot;&lt;/span&gt;   &lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;pl&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;:/wpfiner_pl.qm&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/wpfiner/qtcreator13.jpg&quot; /&gt;
&lt;p&gt;Modifications effectuées.&lt;/p&gt;
&lt;p&gt;Enregistrer et fermer le fichier main.cpp.&lt;/p&gt;
&lt;div class=&quot;admonition note&quot;&gt;
&lt;p class=&quot;first admonition-title&quot;&gt;Note&lt;/p&gt;
&lt;p class=&quot;last&quot;&gt;Comme je ne tiens pas compte de la version Windows&lt;sup id=&quot;sf-wallpaper-finer-11-back&quot;&gt;&lt;a class=&quot;simple-footnote&quot; href=&quot;https://blog.chibi-nah.fr/feeds/all.atom.xml#sf-wallpaper-finer-11&quot; title=&quot;Comme indiqué au début de l'article&quot;&gt;11&lt;/a&gt;&lt;/sup&gt;, tout le code défini dans #ifdef Q_WS_WIN n'a pas été modifié. Il y a de fortes chances pour que la traduction française ne fonctionne pas sous Windows. Il faudra modifier le code en conséquence.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;c-wpfiner-cpp&quot;&gt;
&lt;h3&gt;C++ (wpfiner.cpp)&lt;/h3&gt;
&lt;p&gt;Ouvrir le fichier &lt;em&gt;wpfiner.cpp&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Quatre erreurs sont présentes ici (en fait, il n'y en a que deux, les deux autres en découlent) :&lt;/p&gt;
&lt;ul class=&quot;simple&quot;&gt;
&lt;li&gt;invalid use of incomplete type class 'QDesktopWidget'&lt;/li&gt;
&lt;li&gt;class 'QString' has no member named 'toAscii'&lt;/li&gt;
&lt;li&gt;member access into incomplete type 'QDesktopWidget'&lt;/li&gt;
&lt;li&gt;no member named 'toAscii' in 'QString'&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pour la première erreur, c'est encore un problème d'include. Remplacer QtGui par QtWidgets.&lt;/p&gt;
&lt;p&gt;Supprimer cet include :&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&quot;cp&quot;&gt;#include&lt;/span&gt; &lt;span class=&quot;cpf&quot;&gt;&amp;lt;QtGui&amp;gt;&lt;/span&gt;&lt;span class=&quot;cp&quot;&gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Ajouter cet include :&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&quot;cp&quot;&gt;#include&lt;/span&gt; &lt;span class=&quot;cpf&quot;&gt;&amp;lt;QtWidgets&amp;gt;&lt;/span&gt;&lt;span class=&quot;cp&quot;&gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/wpfiner/qtcreator14.jpg&quot; /&gt;
&lt;p&gt;Modifications effectuées côté include.&lt;/p&gt;
&lt;p&gt;Concernant la seconde erreur, la méthode toAscii() n'existe plus. On va utiliser toLatin1() à la place&lt;/p&gt;
&lt;p&gt;Descendre vers la ligne 339&lt;sup id=&quot;sf-wallpaper-finer-12-back&quot;&gt;&lt;a class=&quot;simple-footnote&quot; href=&quot;https://blog.chibi-nah.fr/feeds/all.atom.xml#sf-wallpaper-finer-12&quot; title=&quot;tout dépend de la présence de sauts de lignes supplémentaires côté code.&quot;&gt;12&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;
&lt;p&gt;Remplacer :&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;finedImage&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;save&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;finedFile&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;save_format&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;toAscii&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;().&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;());&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;par :&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;finedImage&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;save&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;finedFile&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;save_format&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;toLatin1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;().&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;());&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/wpfiner/qtcreator15.jpg&quot; /&gt;
&lt;p&gt;Appel de la méthode corrigée&lt;/p&gt;
&lt;p&gt;Enregistrer et fermer le fichier wpfiner.cpp.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;compilation&quot;&gt;
&lt;h3&gt;Compilation&lt;/h3&gt;
&lt;p&gt;C'est bon ? On peut compiler le projet.&lt;/p&gt;
&lt;p&gt;Pour cela, cliquer sur le petit marteau en bas à gauche, ou passer par le menu Compiler -&amp;gt; Build all projects&lt;/p&gt;
&lt;p&gt;Un petit Build devrait apparaître en bas, vers la droite, pour indiquer que le projet est en cours de compilation.&lt;/p&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/wpfiner/qtcreator16.jpg&quot; /&gt;
&lt;p&gt;Compilation en cours.&lt;/p&gt;
&lt;p&gt;Une fois la compilation terminée, cliquer sur l'onglet &lt;em&gt;Problèmes&lt;/em&gt; en bas.&lt;/p&gt;
&lt;p&gt;Normalement, si tout a été modifié correctement, il ne devrait pas y avoir d'erreurs en rouge. Juste quelques avertissements (warnings) en jaune, notamment des appels dépréciés qu'il faudrait remplacer.&lt;/p&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/wpfiner/qtcreator17.jpg&quot; /&gt;
&lt;p&gt;Liste des problèmes trouvés. Aucune erreur, uniquement des avertissements.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;test&quot;&gt;
&lt;h3&gt;Test&lt;/h3&gt;
&lt;p&gt;C'est bon ? On peut tester ?&lt;/p&gt;
&lt;p&gt;On peut.&lt;/p&gt;
&lt;p&gt;Cliquer sur le triangle en bas à gauche (celui du haut, pas celui du bas avec un insecte dessus).&lt;/p&gt;
&lt;p&gt;L'application doit se lancer sans problème.&lt;/p&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/wpfiner/wpfiner2.jpg&quot; /&gt;
&lt;p&gt;L'application a démarré.&lt;/p&gt;
&lt;p&gt;Ouvrir une image ou la glisser-déposer sur la fenêtre, et vérifier le bon fonctionnement du redimensionnement et du recadrage de l'image. Vérifier aussi que l'enregistrement de l'image fonctionne aussi.&lt;/p&gt;
&lt;div class=&quot;admonition note&quot;&gt;
&lt;p class=&quot;first admonition-title&quot;&gt;Note&lt;/p&gt;
&lt;p class=&quot;last&quot;&gt;Le bouton « Définir comme fond d'écran&lt;sup id=&quot;sf-wallpaper-finer-13-back&quot;&gt;&lt;a class=&quot;simple-footnote&quot; href=&quot;https://blog.chibi-nah.fr/feeds/all.atom.xml#sf-wallpaper-finer-13&quot; title=&quot;To Desktop en anglais&quot;&gt;13&lt;/a&gt;&lt;/sup&gt; » crée un répertoire &lt;em&gt;WpFiner&lt;/em&gt; dans le répertoire $home, enregistre l'image dedans, mais n'effectue pas le changement de fond d'écran. Cela ne fonctionnerait que sous Windows. C'est l'une des limitations de la version GNU/Linux.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;compilation-et-installation&quot;&gt;
&lt;h2&gt;Compilation et installation&lt;/h2&gt;
&lt;p&gt;Pourquoi le titre Compilation ? Pourquoi en plus un changement de niveau de titre alors qu'on vient de compiler et de tester ?&lt;/p&gt;
&lt;p&gt;On a compilé via Qt Creator, en Debug. Maintenant, on va compiler en release.&lt;/p&gt;
&lt;p&gt;Pourquoi ? Parce que la version de debug, qui se trouve dans ../build-WallpaperFiner-Desktop-Debug pèse 2 Mo, et la version Release ne pèse que dans les 155 ko.&lt;/p&gt;
&lt;div class=&quot;admonition note&quot;&gt;
&lt;p class=&quot;first admonition-title&quot;&gt;Note&lt;/p&gt;
&lt;p class=&quot;last&quot;&gt;On peut compiler en release avec Qt Creator, en changeant Debug en Release, en bas à gauche. Cependant, la compilation depuis un terminal intéressera plus de personnes, parce que c'est automatisable/plus simple à gérer avec aur/insérer ici une autre raison pour préférer la ligne de commande.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Lancer un terminal. Se déplacer dans le répertoire du projet.&lt;/p&gt;
&lt;p&gt;Dans le répertoire du projet, créer un répertoire build, via le terminal ou via un gestionnaire de fichiers.&lt;/p&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/wpfiner/term1.jpg&quot; /&gt;
&lt;p&gt;Création du répertoire build.&lt;/p&gt;
&lt;p&gt;Se déplacer dans ce répertoire.&lt;/p&gt;
&lt;p&gt;Taper la commande suivante pour générer le fichier Makefile :&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;qmake ../WallpaperFiner.pro
&lt;/pre&gt;&lt;/div&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/wpfiner/term2.jpg&quot; /&gt;
&lt;p&gt;Création du Makefile.&lt;/p&gt;
&lt;p&gt;Pas d'erreur ? Parfait.&lt;/p&gt;
&lt;p&gt;Taper simplement make pour compiler l'application. Des lignes vont défiler, c'est normal.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;make
&lt;/pre&gt;&lt;/div&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/wpfiner/term3.jpg&quot; /&gt;
&lt;p&gt;Compilation en cours. Les avertissements (warnings) apparaissent à l'écran, c'est normal.&lt;/p&gt;
&lt;p&gt;Une fois terminé, vérifier que le fichier wallpaperfiner a bien été généré, et ne fait que 155 ko (environ, tout dépend si c'est compté en ko ou kio).&lt;/p&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/wpfiner/term4.jpg&quot; /&gt;
&lt;p&gt;Ici, c'est bon. Le fichier exécutable (en vert) fait la taille attendue.&lt;/p&gt;
&lt;p&gt;On va vérifier que c'est bien Qt5 qui est utilisé, via la commande ldd.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;ldd wallpaperfiner
&lt;/pre&gt;&lt;/div&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/wpfiner/term5.jpg&quot; /&gt;
&lt;p&gt;Résultat ?&lt;/p&gt;
&lt;pre class=&quot;literal-block&quot;&gt;libQt5Widgets.so.5 =&amp;gt; /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5 (0x00007f0a08314000)
libQt5Gui.so.5 =&amp;gt; /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5 (0x00007f0a07c52000)
libQt5Core.so.5 =&amp;gt; /usr/lib/x86_64-linux-gnu/libQt5Core.so.5 (0x00007f0a07707000)
&lt;/pre&gt;
&lt;p&gt;C'est bon, c'est bien Qt5.&lt;/p&gt;
&lt;p&gt;On peut lancer l'application et refaire quelques tests, pour confirmer le bon fonctionnement.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;./wallpaperfiner
&lt;/pre&gt;&lt;/div&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/wpfiner/term6.jpg&quot; /&gt;
&lt;p&gt;Parfait, aucun problème rencontré.&lt;/p&gt;
&lt;p&gt;Pour l'installation, il suffit de copier l'exécutable dans un répertoire défini dans $PATH, comme /usr/local/bin&lt;/p&gt;
&lt;p&gt;Par exemple via sudo cp&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;sudo cp wallpaperfiner /usr/local/bin/
&lt;/pre&gt;&lt;/div&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/wpfiner/term7.jpg&quot; /&gt;
&lt;p&gt;Ici, j'ai utilisé en plus la commande &lt;em&gt;whereis wallpaperfiner&lt;/em&gt; pour confirmer que wallpaperfiner est bien reconnu et est situé au bon endroit.&lt;/p&gt;
&lt;div class=&quot;admonition note&quot;&gt;
&lt;p class=&quot;first admonition-title&quot;&gt;Note&lt;/p&gt;
&lt;p&gt;On peut créer une entrée de menu.&lt;/p&gt;
&lt;p&gt;Pour cela :&lt;/p&gt;
&lt;ul class=&quot;last simple&quot;&gt;
&lt;li&gt;soit passer par un éditeur comme &lt;em&gt;alacarte&lt;/em&gt;, &lt;em&gt;MenuLibre&lt;/em&gt; ou équivalent&lt;/li&gt;
&lt;li&gt;soit modifier le fichier &lt;em&gt;wallpaperfiner.desktop&lt;/em&gt; situé dans le répertoire Desktop, notamment changer les chemins et ajouter la traduction en français de la description, le copier dans /usr/local/share/applications et copier l'icône wpfiner.png dans /usr/local/share/pixmaps/.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;conclusion&quot;&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Concrètement, le portage vers Qt5 se fait en moins d'une demi-heure, lecture de documentation comprise. C'est relativement simple, sans prise de tête.&lt;/p&gt;
&lt;p&gt;Remerciements à &lt;a class=&quot;reference external&quot; href=&quot;https://shelter.moe/@TritTriton&quot;&gt;@TritTriton&lt;/a&gt; pour son pouët montrant cet outil, pour avoir pu compiler la version Qt5 et avoir confirmé son bon fonctionnement.&lt;/p&gt;
&lt;p&gt;Modification dimanche 11 juillet 2021.&lt;/p&gt;
&lt;p&gt;Le code source est désormais versionné et est disponible sur Shelter : &lt;a class=&quot;reference external&quot; href=&quot;https://lab.shelter.moe/nah/wallpaperfiner&quot;&gt;https://lab.shelter.moe/nah/wallpaperfiner&lt;/a&gt;
--&lt;/p&gt;
&lt;/div&gt;
&lt;ol class=&quot;simple-footnotes&quot;&gt;&lt;li id=&quot;sf-wallpaper-finer-1&quot;&gt; &lt;a class=&quot;reference external&quot; href=&quot;https://shelter.moe/@TritTriton/106436810381701106&quot;&gt;https://shelter.moe/@TritTriton/106436810381701106&lt;/a&gt;  &lt;a class=&quot;simple-footnote-back&quot; href=&quot;https://blog.chibi-nah.fr/feeds/all.atom.xml#sf-wallpaper-finer-1-back&quot;&gt;↩&lt;/a&gt;&lt;/li&gt;&lt;li id=&quot;sf-wallpaper-finer-2&quot;&gt;qui date quand même de 2005, et dont la dernière mise à jour date de 2012. &lt;a class=&quot;simple-footnote-back&quot; href=&quot;https://blog.chibi-nah.fr/feeds/all.atom.xml#sf-wallpaper-finer-2-back&quot;&gt;↩&lt;/a&gt;&lt;/li&gt;&lt;li id=&quot;sf-wallpaper-finer-3&quot;&gt;En français, on est censé parler de cadriciel, mais personne ne connait ça sous ce nom &lt;a class=&quot;simple-footnote-back&quot; href=&quot;https://blog.chibi-nah.fr/feeds/all.atom.xml#sf-wallpaper-finer-3-back&quot;&gt;↩&lt;/a&gt;&lt;/li&gt;&lt;li id=&quot;sf-wallpaper-finer-4&quot;&gt;Même si je n'aime pas la disposition de l'environnement de développement intégré (IDE), ni sa traduction inconsistente (c'est à moitié traduit en français). &lt;a class=&quot;simple-footnote-back&quot; href=&quot;https://blog.chibi-nah.fr/feeds/all.atom.xml#sf-wallpaper-finer-4-back&quot;&gt;↩&lt;/a&gt;&lt;/li&gt;&lt;li id=&quot;sf-wallpaper-finer-5&quot;&gt; &lt;a class=&quot;reference external&quot; href=&quot;http://hyperprog.com/wpfiner/index.html&quot;&gt;http://hyperprog.com/wpfiner/index.html&lt;/a&gt;  &lt;a class=&quot;simple-footnote-back&quot; href=&quot;https://blog.chibi-nah.fr/feeds/all.atom.xml#sf-wallpaper-finer-5-back&quot;&gt;↩&lt;/a&gt;&lt;/li&gt;&lt;li id=&quot;sf-wallpaper-finer-6&quot;&gt;ce qui correspond à Qt 4.8, Qt 5 étant sorti après &lt;a class=&quot;simple-footnote-back&quot; href=&quot;https://blog.chibi-nah.fr/feeds/all.atom.xml#sf-wallpaper-finer-6-back&quot;&gt;↩&lt;/a&gt;&lt;/li&gt;&lt;li id=&quot;sf-wallpaper-finer-7&quot;&gt;Ça peut être utile d'installer Qt5, les outils de développement, etc. Se référer à la documentation ou au gestionnaire de paquets de la distribution utilisée. Idem : je n'apporterai aucune aide sur comment installer et ou configurer le tout. &lt;a class=&quot;simple-footnote-back&quot; href=&quot;https://blog.chibi-nah.fr/feeds/all.atom.xml#sf-wallpaper-finer-7-back&quot;&gt;↩&lt;/a&gt;&lt;/li&gt;&lt;li id=&quot;sf-wallpaper-finer-8&quot;&gt;En tout cas, sous Debian GNU/Linux &lt;a class=&quot;simple-footnote-back&quot; href=&quot;https://blog.chibi-nah.fr/feeds/all.atom.xml#sf-wallpaper-finer-8-back&quot;&gt;↩&lt;/a&gt;&lt;/li&gt;&lt;li id=&quot;sf-wallpaper-finer-9&quot;&gt;Cadriciel. Ce terme est barbant, je vais laisser framework partout dans l'article. &lt;a class=&quot;simple-footnote-back&quot; href=&quot;https://blog.chibi-nah.fr/feeds/all.atom.xml#sf-wallpaper-finer-9-back&quot;&gt;↩&lt;/a&gt;&lt;/li&gt;&lt;li id=&quot;sf-wallpaper-finer-10&quot;&gt;En fait, j'ai carrément ignoré tous les warnings dans le code source, cela concerne des fonctions ou des instructions dépréciées. &lt;a class=&quot;simple-footnote-back&quot; href=&quot;https://blog.chibi-nah.fr/feeds/all.atom.xml#sf-wallpaper-finer-10-back&quot;&gt;↩&lt;/a&gt;&lt;/li&gt;&lt;li id=&quot;sf-wallpaper-finer-11&quot;&gt;Comme indiqué au début de l'article &lt;a class=&quot;simple-footnote-back&quot; href=&quot;https://blog.chibi-nah.fr/feeds/all.atom.xml#sf-wallpaper-finer-11-back&quot;&gt;↩&lt;/a&gt;&lt;/li&gt;&lt;li id=&quot;sf-wallpaper-finer-12&quot;&gt;tout dépend de la présence de sauts de lignes supplémentaires côté code. &lt;a class=&quot;simple-footnote-back&quot; href=&quot;https://blog.chibi-nah.fr/feeds/all.atom.xml#sf-wallpaper-finer-12-back&quot;&gt;↩&lt;/a&gt;&lt;/li&gt;&lt;li id=&quot;sf-wallpaper-finer-13&quot;&gt;To Desktop en anglais &lt;a class=&quot;simple-footnote-back&quot; href=&quot;https://blog.chibi-nah.fr/feeds/all.atom.xml#sf-wallpaper-finer-13-back&quot;&gt;↩&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;</content:encoded>
	<dc:date>2021-06-19T22:00:00+00:00</dc:date>
	<dc:creator>alex</dc:creator>
</item>
<item rdf:about="tag:None,2021-04-24:/cell-broadcast">
	<title>Alexandre Bailly: Cell broadcast</title>
	<link>https://blog.chibi-nah.fr/cell-broadcast</link>
	<content:encoded>&lt;p&gt;Cell broadcast, ou la diffusion d'alerte via le réseau GSM.&lt;/p&gt;
&lt;p&gt;TL;DR&lt;/p&gt;
&lt;p&gt;Ça fonctionne avec tout téléphone mobile, même tout simple (non &quot;smart&quot;), tout opérateur, sans connexion Internet, sans GPS, et situé dans une zone couverte par (au moins) une antenne.&lt;/p&gt;
&lt;div class=&quot;section&quot; id=&quot;pourquoi-alerter&quot;&gt;
&lt;h2&gt;Pourquoi alerter ?&lt;/h2&gt;
&lt;p&gt;Tenir informé de la population d'un risque imminent (séisme, tsunami), en cours (incendie, pollution de l'air) est primordial, afin de limiter au maximum les expositions au danger.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;comment-alerter&quot;&gt;
&lt;h2&gt;Comment alerter ?&lt;/h2&gt;
&lt;p&gt;En France, un ensemble d'outils, appelé SAIP (Système d'Alerte et d'Information aux Populations&lt;sup id=&quot;sf-cell-broadcast-1-back&quot;&gt;&lt;a class=&quot;simple-footnote&quot; href=&quot;https://blog.chibi-nah.fr/feeds/all.atom.xml#sf-cell-broadcast-1&quot; title=&quot;Si je n'avais pas vérifié, j'aurais écrit « à la Population »&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;) est en place. Les alertes peuvent être déclenchées par les services du ministère de l'intérieur (préfet, cellules de gestion de crise), par les services de secours (SDIS Services Départementaux d'Incendie et de Secours, les pompiers, donc), la municipalité (maire) et les services des armées.&lt;/p&gt;
&lt;p&gt;Plus d'informations : &lt;a class=&quot;reference external&quot; href=&quot;https://www.interieur.gouv.fr/Alerte/Alerte-ORSEC/Qu-est-ce-que-le-SAIP&quot;&gt;https://www.interieur.gouv.fr/Alerte/Alerte-ORSEC/Qu-est-ce-que-le-SAIP&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;section&quot; id=&quot;la-sirene&quot;&gt;
&lt;h3&gt;La sirène&lt;/h3&gt;
&lt;p&gt;Le système le plus simple pour alerter est la sirène. Cependant, ce système informe juste de la présence d'un danger. Aucune information concernant ce danger, les risques ou la nature ne peut être véhiculé par ce système.&lt;/p&gt;
&lt;p&gt;À noter : afin de vérifier le bon fonctionnement de la sirène, un test est fait le premier mercredi de chaque mois, à midi.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;les-medias&quot;&gt;
&lt;h3&gt;Les médias&lt;/h3&gt;
&lt;p&gt;Les médias dits « traditionnels », comme les journaux papiers, la télévision et la radio, sont utilisés pour la diffusion d'alertes. Des spots TV/Radio notamment lors d'alerte enlèvement furent déjà utilisés par le passé.
Pour les journaux, le délai entre l'annonce et la publication (journal disponible) est plutôt important, ce qui rend ce support non adapté dans des situations d'urgence (attentat, accident industriel grave, alerte incendie…)&lt;/p&gt;
&lt;p&gt;Même si ce ne sont pas des médias à proprement parler, certains systèmes d'affichage, comme les panneaux informatifs autoroutiers ou municipaux peuvent également être utilisés pour la diffusion d'alertes.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;les-applications-smart&quot;&gt;
&lt;h3&gt;Les applications « smart »&lt;/h3&gt;
&lt;p&gt;Parmi les autres méthodes, il y a la mode du « smart », qui, comme son nom l'indique, consiste à utiliser des méthodes stupides, avec des technologies absolument pas fiables, sur lesquels les notions de « environnement dégradé » et « réseau saturé » sont simplement oubliés.
Gros avantage, cela permet de signer de gros chèques avec de gros éditeurs (300 000€)&lt;sup id=&quot;sf-cell-broadcast-2-back&quot;&gt;&lt;a class=&quot;simple-footnote&quot; href=&quot;https://blog.chibi-nah.fr/feeds/all.atom.xml#sf-cell-broadcast-2&quot; title=&quot;Ce qui fut facturé pour « alerte attentat ».&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;
&lt;p&gt;L'application pour téléphone mobile tournant sur iOS ou Android, s'appelant SAIP (pourquoi faire compliqué), ou « alerte attentat », fut une de ces méthodes « smart ».
En pratique, cette application fonctionnait tellement mal que le gouvernement a abandonné le projet et la maintenance de l'application.
Les griefs retenus furent :&lt;/p&gt;
&lt;ul class=&quot;simple&quot;&gt;
&lt;li&gt;nécessite un téléphone compatible ;&lt;/li&gt;
&lt;li&gt;nécessite un abonnement Internet fonctionnel ET activé sur le téléphone ;&lt;/li&gt;
&lt;li&gt;doit fonctionner en permanence (en arrière plan) ;&lt;/li&gt;
&lt;li&gt;le système de géolocalisation (GPS) doit être actif et la position connue par le téléphone ;&lt;/li&gt;
&lt;li&gt;le faible déploiement de l'application (seulement 900 000 installations).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;En pratique, l'application fonctionnait très mal. Les alertes émises ne concernaient pas forcément la bonne zone, ou alors, avec des délais trop long (2 heures entre l'émission de l'alerte lors de l'attaque à Nice en juillet 2016 et la réception sur les téléphones). Voire, n'arrivaient pas du tout (attaque du Super U à Trèbes).&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;les-reseau-sociaux&quot;&gt;
&lt;h3&gt;Les réseau sociaux&lt;/h3&gt;
&lt;p&gt;Suite à ces échecs, le gouvernement a concentré ses efforts de communication, notamment sur Facebook et Twitter.
L'utilisation de Safety Check de Facebook (déjà ultra intrusif au niveau vie privée) ne fait que renforcer le pouvoir de Facebook (encore plus de données fiables, donc valant encore plus cher sur le site web publicitaire avec ses milliards d'abonnés).&lt;/p&gt;
&lt;p&gt;Après, le gouvernement préfère les GAFAM aux entreprises locales… rien de nouveau.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;la-diffusion-cellulaire&quot;&gt;
&lt;h3&gt;La diffusion cellulaire&lt;/h3&gt;
&lt;p&gt;Et enfin (et le but de cet article), la méthode qui est mise en place depuis une voire deux décennies dans d'autres pays : la diffusion cellulaire (Cell Broadcast).&lt;/p&gt;
&lt;p&gt;La diffusion des alertes de ce type est simple : l'alerte est envoyée à tout téléphone &quot;visible&quot; ou &quot;connecté&quot; à une antenne relais, peu importe le type de téléphone (mobile classique ou débilophone&lt;sup id=&quot;sf-cell-broadcast-3-back&quot;&gt;&lt;a class=&quot;simple-footnote&quot; href=&quot;https://blog.chibi-nah.fr/feeds/all.atom.xml#sf-cell-broadcast-3&quot; title=&quot;un &amp;quot;smart&amp;quot;phone n'est pas intelligent. Il est juste stupide, mais connecté à Internet.&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;), peu importe le type d'abonnement (actif ou non) ou la nationalité du constructeur ou de la personne en possession du-dit téléphone.&lt;/p&gt;
&lt;p&gt;Gros avantage de cette technologie :&lt;/p&gt;
&lt;ul class=&quot;simple&quot;&gt;
&lt;li&gt;complètement indépendant du type de téléphone ou de son système d'exploitation ;&lt;/li&gt;
&lt;li&gt;ne nécessite pas l'utilisation du GPS (qui peut mettre jusqu'à 12-25 minutes suivant les conditions pour télécharger les éphémérides satellites) ;&lt;/li&gt;
&lt;li&gt;ne nécessite pas de connexion Internet ;&lt;/li&gt;
&lt;li&gt;prévu pour fonctionner sur un réseau dégradé ou saturé.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ce dernier point est important.&lt;/p&gt;
&lt;p&gt;En cas de séisme, accident technologique (penser Seveso) ou coupures majeures au niveau énergie (électricité) ou réseau (télécom), le premier service pris d'assaut est le réseau téléphonique, qui devient rapidement saturé (appels aux services de secours, ou appels des/aux proches pour rassurer ou non par rapport à la situation).&lt;/p&gt;
&lt;p&gt;À noter : dans ces conditions, les stations de radioamateurs peuvent être utilisées pour transmettre les messages de secours&lt;sup id=&quot;sf-cell-broadcast-4-back&quot;&gt;&lt;a class=&quot;simple-footnote&quot; href=&quot;https://blog.chibi-nah.fr/feeds/all.atom.xml#sf-cell-broadcast-4&quot; title=&quot;Fédération nationale des radioamateurs au service de la sécurité civile.&quot;&gt;4&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;
&lt;p&gt;Du coup, pour alerter la population sur une zone géographique précise, il faut et il suffit d'envoyer un message d'alerte aux antennes (relais) présentes sur cette zone, ces antennes étant fixes et leur position connue.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;en-pratique&quot;&gt;
&lt;h2&gt;En pratique&lt;/h2&gt;
&lt;p&gt;Pour des raisons de simplification, je parlerai ici de Cell Broadcast pour les SMS-CB (spécification GSM 03.41) et de SMS pour les SMS-PP (spécification GSM 03.40). Ces spécifications sont disponibles sur le site de l'ETSI.&lt;/p&gt;
&lt;p&gt;La diffusion cellulaire fonctionne en mode uni-directionnel, de l'antenne (voire plusieurs antennes) vers le téléphone (downlink), en mode diffusion (broadcast), donc sans cibler un téléphone en particulier&lt;sup id=&quot;sf-cell-broadcast-5-back&quot;&gt;&lt;a class=&quot;simple-footnote&quot; href=&quot;https://blog.chibi-nah.fr/feeds/all.atom.xml#sf-cell-broadcast-5&quot; title=&quot;Ce qui est le contraire d'un appel téléphonique ou l'envoi d'un SMS : le téléphone est ciblé, la diffusion se fait dans les deux sens, montant (téléphone -&amp;gt; antenne relais) et descendant (antenne relais vers téléphone).&quot;&gt;5&lt;/a&gt;&lt;/sup&gt;. Tous les téléphones allumés présents dans la zone recevront alors le même message, quasiment en même temps.&lt;/p&gt;
&lt;p&gt;Pourquoi ce mode broadcast ? Tout simplement parce qu'envoyer un SMS (en mode classique donc), pour chaque téléphone situé dans une zone, c'est long et lent&lt;sup id=&quot;sf-cell-broadcast-6-back&quot;&gt;&lt;a class=&quot;simple-footnote&quot; href=&quot;https://blog.chibi-nah.fr/feeds/all.atom.xml#sf-cell-broadcast-6&quot; title=&quot;À noter : ce reproche a également été fait par certains services de secours, médecins ou ambulanciers, qui utilisent toujours un pager compatible POCSAG/Tattoo/e*message, parce que non seulement la diffusion est plus rapide, mais également parce que c'est accepté dans les lieux où les téléphones mobiles doivent être éteints. Et oui, les pagers sont toujours utilisé en 2021, mais plus du tout par le grand-public, pour des raisons de coût et de contraintes.&quot;&gt;6&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;
&lt;p&gt;Admettons que dans une zone urbaine, il y ait 1 000 téléphones allumés et vus par une antenne (c'est pour l'exemple), cela signifie qu'il faut alors envoyer 1 000 SMS, un par téléphone. Et chaque téléphone doit alors envoyer un acquitement en retour (peu importe la classe du SMS, même en classe 0 SMS Flash). Donc 1 000 acquitements. Et si un SMS n'a pas pu être délivré, le réseau retente a nouveau, pendant un certain temps.
Si le réseau est saturé ou partiellement inutilisable pendant une catastrophe, les SMS non reçus seraient réexpédiés, saturant encore plus&lt;sup id=&quot;sf-cell-broadcast-7-back&quot;&gt;&lt;a class=&quot;simple-footnote&quot; href=&quot;https://blog.chibi-nah.fr/feeds/all.atom.xml#sf-cell-broadcast-7&quot; title=&quot;façon de parler.&quot;&gt;7&lt;/a&gt;&lt;/sup&gt; le réseau.&lt;/p&gt;
&lt;p&gt;En mode broadcast, ces problèmes n'existent pas. Tous les téléphones recoivent le même message en même temps (penser réception radio FM/DAB ou réception télévision TNT, où tous les dispositifs de réception ou assimilés orientés vers la même antenne reçoivent la station ou la chaîne en même temps).&lt;/p&gt;
&lt;p&gt;Le SMS-CB dispose d'un canal dédié à la diffusion de messages d'urgence (CBCH Cell Broadcast CHannel), et cela a été défini dans les spécifications de la norme GSM phase 2 (2G) en 1995&lt;sup id=&quot;sf-cell-broadcast-8-back&quot;&gt;&lt;a class=&quot;simple-footnote&quot; href=&quot;https://blog.chibi-nah.fr/feeds/all.atom.xml#sf-cell-broadcast-8&quot; title=&quot;ETSI GSM 05.02 Multiplexing and Multiple Access on the Radio Path (version 3.8.0 release 95 phase 1 ~ Radio Sub - system Link Control), section 3.3.5 Cell broadcast channel (CBCH) (gsmts_0502sv030800p.pdf).&quot;&gt;8&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;
&lt;p&gt;Un message peut occuper 82 octets (donc 93 caractères, parce que l'encodage des caractères est sur 7 bits et non 8), et on peut envoyer jusqu'à 15 pages de 82 octets pour former un message complet (1 395 caractères maximum en théorie). Un message peut être répété un certain nombre de fois (jusqu'à 2 880 fois, donc répété toutes les 30 secondes pendant 24 heures), ou indéfiniment jusqu'à ce que l'instruction d'arrêt de l'envoi ne soit envoyé vers les antennes.&lt;/p&gt;
&lt;p&gt;Pour plus de détails, lire la spécification GSM 03.41&lt;sup id=&quot;sf-cell-broadcast-9-back&quot;&gt;&lt;a class=&quot;simple-footnote&quot; href=&quot;https://blog.chibi-nah.fr/feeds/all.atom.xml#sf-cell-broadcast-9&quot; title=&quot;Cette doc est complète et compréhensible, cependant, un minimum de connaissances en réseau/télécom peut être requis pour vraiment tout comprendre.&quot;&gt;9&lt;/a&gt;&lt;/sup&gt; sur le site de l'ETSI (European Telecommunications Standards Institute).&lt;/p&gt;
&lt;p&gt;La première démonstration de cette technologie a eu lieu à Paris, en 1997.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;et-en-france&quot;&gt;
&lt;h2&gt;Et en France ?&lt;/h2&gt;
&lt;p&gt;Aussi absurde que cela puisse paraître, cette technologie pourtant simple et normalisée, n'est pas active/présente en France (à l'heure de la rédaction de cet article, 24 avril 2021). Non pas pour des raisons techniques, mais pour des raisons politiques et financières (l'argument habituel du qui doit payer ? L'opérateur téléphonique ? L'opérateur d'antenne&lt;sup id=&quot;sf-cell-broadcast-10-back&quot;&gt;&lt;a class=&quot;simple-footnote&quot; href=&quot;https://blog.chibi-nah.fr/feeds/all.atom.xml#sf-cell-broadcast-10&quot; title=&quot;Les antennes, ça coûte cher à déployer et à maintenir, du coup, certains opérateurs ont vendu les antennes et équipement associé à des entreprises spécialisées.&quot;&gt;10&lt;/a&gt;&lt;/sup&gt; ? Le gouvernement ?).&lt;/p&gt;
&lt;p&gt;Cependant, le gouvernement a annoncé il y a quelques mois, que cette technologie devrait être (enfin !) déployée entre juillet 2021 et juin 2022, dans toute la France&lt;sup id=&quot;sf-cell-broadcast-11-back&quot;&gt;&lt;a class=&quot;simple-footnote&quot; href=&quot;https://blog.chibi-nah.fr/feeds/all.atom.xml#sf-cell-broadcast-11&quot; title=&quot;https://www.lemonde.fr/planete/article/2020/09/24/la-france-va-s-equiper-d-un-systeme-d-alerte-a-la-population-par-telephone-mobile-d-ici-a-2022_6053473_3244.html&quot;&gt;11&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;
&lt;p&gt;Cela nécessitera l'activation de cette option dans les paramètres du téléphone&lt;sup id=&quot;sf-cell-broadcast-12-back&quot;&gt;&lt;a class=&quot;simple-footnote&quot; href=&quot;https://blog.chibi-nah.fr/feeds/all.atom.xml#sf-cell-broadcast-12&quot; title=&quot;Une option que j'active systématiquement sur mes téléphones, et ce, depuis 2006.&quot;&gt;12&lt;/a&gt;&lt;/sup&gt;, parce que désactivé par défaut.&lt;/p&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/smscb/smscb.png&quot; /&gt;
&lt;p&gt;Capture d'écran d'un téléphone Android (version 6/LineageOS), montrant les paramètres de diffusion cellulaire (cell broadcast).&lt;/p&gt;
&lt;p&gt;--&lt;/p&gt;
&lt;/div&gt;
&lt;ol class=&quot;simple-footnotes&quot;&gt;&lt;li id=&quot;sf-cell-broadcast-1&quot;&gt;Si je n'avais pas vérifié, j'aurais écrit « à la Population » &lt;a class=&quot;simple-footnote-back&quot; href=&quot;https://blog.chibi-nah.fr/feeds/all.atom.xml#sf-cell-broadcast-1-back&quot;&gt;↩&lt;/a&gt;&lt;/li&gt;&lt;li id=&quot;sf-cell-broadcast-2&quot;&gt;Ce qui fut facturé pour « alerte attentat ». &lt;a class=&quot;simple-footnote-back&quot; href=&quot;https://blog.chibi-nah.fr/feeds/all.atom.xml#sf-cell-broadcast-2-back&quot;&gt;↩&lt;/a&gt;&lt;/li&gt;&lt;li id=&quot;sf-cell-broadcast-3&quot;&gt;un &quot;smart&quot;phone n'est pas intelligent. Il est juste stupide, mais connecté à Internet. &lt;a class=&quot;simple-footnote-back&quot; href=&quot;https://blog.chibi-nah.fr/feeds/all.atom.xml#sf-cell-broadcast-3-back&quot;&gt;↩&lt;/a&gt;&lt;/li&gt;&lt;li id=&quot;sf-cell-broadcast-4&quot;&gt;Fédération nationale des radioamateurs au service de la sécurité civile. &lt;a class=&quot;simple-footnote-back&quot; href=&quot;https://blog.chibi-nah.fr/feeds/all.atom.xml#sf-cell-broadcast-4-back&quot;&gt;↩&lt;/a&gt;&lt;/li&gt;&lt;li id=&quot;sf-cell-broadcast-5&quot;&gt;Ce qui est le contraire d'un appel téléphonique ou l'envoi d'un SMS : le téléphone est ciblé, la diffusion se fait dans les deux sens, montant (téléphone -&amp;gt; antenne relais) et descendant (antenne relais vers téléphone). &lt;a class=&quot;simple-footnote-back&quot; href=&quot;https://blog.chibi-nah.fr/feeds/all.atom.xml#sf-cell-broadcast-5-back&quot;&gt;↩&lt;/a&gt;&lt;/li&gt;&lt;li id=&quot;sf-cell-broadcast-6&quot;&gt;À noter : ce reproche a également été fait par certains services de secours, médecins ou ambulanciers, qui utilisent toujours un pager compatible POCSAG/Tattoo/e*message, parce que non seulement la diffusion est plus rapide, mais également parce que c'est accepté dans les lieux où les téléphones mobiles doivent être éteints. Et oui, les pagers sont toujours utilisé en 2021, mais plus du tout par le grand-public, pour des raisons de coût et de contraintes. &lt;a class=&quot;simple-footnote-back&quot; href=&quot;https://blog.chibi-nah.fr/feeds/all.atom.xml#sf-cell-broadcast-6-back&quot;&gt;↩&lt;/a&gt;&lt;/li&gt;&lt;li id=&quot;sf-cell-broadcast-7&quot;&gt;façon de parler. &lt;a class=&quot;simple-footnote-back&quot; href=&quot;https://blog.chibi-nah.fr/feeds/all.atom.xml#sf-cell-broadcast-7-back&quot;&gt;↩&lt;/a&gt;&lt;/li&gt;&lt;li id=&quot;sf-cell-broadcast-8&quot;&gt;ETSI GSM 05.02 Multiplexing and Multiple Access on the Radio Path (version 3.8.0 release 95 phase 1 ~ Radio Sub - system Link Control), section 3.3.5 Cell broadcast channel (CBCH) (gsmts_0502sv030800p.pdf). &lt;a class=&quot;simple-footnote-back&quot; href=&quot;https://blog.chibi-nah.fr/feeds/all.atom.xml#sf-cell-broadcast-8-back&quot;&gt;↩&lt;/a&gt;&lt;/li&gt;&lt;li id=&quot;sf-cell-broadcast-9&quot;&gt;Cette doc est complète et compréhensible, cependant, un minimum de connaissances en réseau/télécom peut être requis pour vraiment tout comprendre. &lt;a class=&quot;simple-footnote-back&quot; href=&quot;https://blog.chibi-nah.fr/feeds/all.atom.xml#sf-cell-broadcast-9-back&quot;&gt;↩&lt;/a&gt;&lt;/li&gt;&lt;li id=&quot;sf-cell-broadcast-10&quot;&gt;Les antennes, ça coûte cher à déployer et à maintenir, du coup, certains opérateurs ont vendu les antennes et équipement associé à des entreprises spécialisées. &lt;a class=&quot;simple-footnote-back&quot; href=&quot;https://blog.chibi-nah.fr/feeds/all.atom.xml#sf-cell-broadcast-10-back&quot;&gt;↩&lt;/a&gt;&lt;/li&gt;&lt;li id=&quot;sf-cell-broadcast-11&quot;&gt;https://www.lemonde.fr/planete/article/2020/09/24/la-france-va-s-equiper-d-un-systeme-d-alerte-a-la-population-par-telephone-mobile-d-ici-a-2022_6053473_3244.html &lt;a class=&quot;simple-footnote-back&quot; href=&quot;https://blog.chibi-nah.fr/feeds/all.atom.xml#sf-cell-broadcast-11-back&quot;&gt;↩&lt;/a&gt;&lt;/li&gt;&lt;li id=&quot;sf-cell-broadcast-12&quot;&gt;Une option que j'active systématiquement sur mes téléphones, et ce, depuis 2006. &lt;a class=&quot;simple-footnote-back&quot; href=&quot;https://blog.chibi-nah.fr/feeds/all.atom.xml#sf-cell-broadcast-12-back&quot;&gt;↩&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;</content:encoded>
	<dc:date>2021-04-23T22:00:00+00:00</dc:date>
	<dc:creator>alex</dc:creator>
</item>
<item rdf:about="tag:www.pboesch.fr,2021-03-18:/2021/03/freebsd-migration-ezjail-vers-iocage/">
	<title>Pierre Boesch: FreeBSD : Migration ezjail vers iocage</title>
	<link>https://www.pboesch.fr/2021/03/freebsd-migration-ezjail-vers-iocage/</link>
	<content:encoded>&lt;p&gt;Après plusieurs années à me trainer &lt;a href=&quot;https://erdgeist.org/arts/software/ezjail/&quot;&gt;ezjail&lt;/a&gt;, je me suis enfin décidé à migrer vers &lt;a href=&quot;https://iocage.readthedocs.io/en/latest/index.html&quot;&gt;iocage&lt;/a&gt;. Depuis FreeBSD 10, le fonctionnement de l'upgrade de RELEASE était compliqué : il fallait d'abord upgrader la basejail avant le système notamment. Avec iocage, je garde le même fonctionnement de ezjail, à savoir le système de basejail. Pour la migration, j'ai récupèré les datas spécifiques de chaques jails vers les nouvelles.&lt;/p&gt;
&lt;h1 id=&quot;installation&quot;&gt;Installation&lt;/h1&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$ pkg install py37-iocage
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$ iocage activate zroot
ZFS pool &lt;span class=&quot;s1&quot;&gt;'zroot'&lt;/span&gt; successfully activated.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Comme mon système est bloqué sur FreeBSD 10.1 à cause d'ezjail, je récupère les sources de cette version pour iocage.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$ iocage fetch
********************************************************************************
fdescfs&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; is not mounted, performance may suffer. Please run:
mount -t fdescfs null /dev/fd
You can also permanently mount it in /etc/fstab with the following entry:
fdescfs /dev/fd  fdescfs  rw  &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;  &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;
********************************************************************************

Creating zroot/iocage
Creating zroot/iocage/download
Creating zroot/iocage/images
Creating zroot/iocage/jails
Creating zroot/iocage/log
Creating zroot/iocage/releases
Creating zroot/iocage/templates
Default configuration missing, creating one
&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;11&lt;/span&gt;.2-RELEASE
&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;11&lt;/span&gt;.3-RELEASE
&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;11&lt;/span&gt;.4-RELEASE
&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;12&lt;/span&gt;.0-RELEASE
&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;12&lt;/span&gt;.1-RELEASE
&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;12&lt;/span&gt;.2-RELEASE

Type the number of the desired RELEASE
Press &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;Enter&lt;span class=&quot;o&quot;&gt;]&lt;/span&gt; to fetch the default selection: &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;12&lt;/span&gt;.1-RELEASE&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
Type EXIT to quit: &lt;span class=&quot;m&quot;&gt;4&lt;/span&gt;
Fetching: &lt;span class=&quot;m&quot;&gt;12&lt;/span&gt;.1-RELEASE
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Je change le point de montage par défaut pour &lt;code&gt;/usr/iocage&lt;/code&gt; :&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$ zfs &lt;span class=&quot;nb&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;mountpoint&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;/usr/iocage zroot/iocage
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Pour améliorer les performances, je monte le système de fichier &lt;a href=&quot;https://www.freebsd.org/cgi/man.cgi?query=fdescfs&amp;amp;sektion=5&amp;amp;manpath=freebsd-release-ports&quot;&gt;file-descriptor&lt;/a&gt; :&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$ mount -t fdescfs null /dev/fd
$ &lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;fdescfs /dev/fd  fdescfs  rw  0  0&quot;&lt;/span&gt; &amp;gt;&amp;gt; /etc/fstab
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;L'environnement est prêt : j'ai les sources 10.1 pour mes jails.&lt;/p&gt;
&lt;h1 id=&quot;migration-vers-iocage&quot;&gt;Migration vers iocage&lt;/h1&gt;
&lt;h2 id=&quot;creation-des-jails-iocage&quot;&gt;Création des jails iocage&lt;/h2&gt;
&lt;p&gt;Je veux récupérer toutes mes jails actuelles avec iocage :&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$ &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; name in &lt;span class=&quot;k&quot;&gt;$(&lt;/span&gt;ezjail-admin list &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; awk &lt;span class=&quot;s1&quot;&gt;'{ print $4 }'&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; tail -n +3&lt;span class=&quot;k&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;do&lt;/span&gt; iocage create -r &lt;span class=&quot;m&quot;&gt;12&lt;/span&gt;.1-RELEASE -n &lt;span class=&quot;nv&quot;&gt;$name&lt;/span&gt; -b&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;done&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&quot;recuperation-des-donnees&quot;&gt;Récupération des données&lt;/h2&gt;
&lt;p&gt;Une fois que l'ensemble des jails sont créees, il faut récupérer l'ensemble des datas ezjail vers iocage et commencer par les stopper :&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$ service ezjail stop
$ &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; name in &lt;span class=&quot;k&quot;&gt;$(&lt;/span&gt;ezjail-admin list &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; awk &lt;span class=&quot;s1&quot;&gt;'{ print $4 }'&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; tail -n +3&lt;span class=&quot;k&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;do&lt;/span&gt; rsync -va --exclude-from&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;excludejail /usr/jails/&lt;span class=&quot;nv&quot;&gt;$name&lt;/span&gt;/ /usr/iocage/jails/&lt;span class=&quot;nv&quot;&gt;$name&lt;/span&gt;/root/ &lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;done&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Le contenu du fichier d'exclusion :&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;/basejail
/bin
/boot
/dev
/lib
/libexec
/rescue
/sbin
/net
/proc
usr/bin
usr/include
usr/lib
usr/libexec
usr/sbin
usr/share
usr/libdata
usr/lib32
usr/ports
usr/sbin
usr/share
usr/src
usr/tests
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&quot;parametrage-specifiques&quot;&gt;Paramétrage spécifiques&lt;/h2&gt;
&lt;p&gt;Attribution des IPs en gardant celles d'origine :&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$ &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; name in &lt;span class=&quot;k&quot;&gt;$(&lt;/span&gt;iocage list -qh &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; awk &lt;span class=&quot;s1&quot;&gt;'{ print $1 }'&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;do&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;ip4&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;sb&quot;&gt;`&lt;/span&gt;grep &lt;span class=&quot;nv&quot;&gt;ip&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; /usr/local/etc/ezjail/&lt;span class=&quot;nv&quot;&gt;$name&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; cut -f &lt;span class=&quot;m&quot;&gt;2&lt;/span&gt; -d &lt;span class=&quot;s1&quot;&gt;'&quot;'&lt;/span&gt;&lt;span class=&quot;sb&quot;&gt;`&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; iocage &lt;span class=&quot;nb&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;ip4_addr&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;ip4&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;done&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Autorisation des raw sockets :&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$ &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; name in &lt;span class=&quot;k&quot;&gt;$(&lt;/span&gt;iocage list -qh &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; awk &lt;span class=&quot;s1&quot;&gt;'{ print $1 }'&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;do&lt;/span&gt; iocage &lt;span class=&quot;nb&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;allow_raw_sockets&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;done&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Désactivation de l'auto création du &lt;a href=&quot;https://github.com/iocage/iocage/issues/138&quot;&gt;fichier resolv.conf&lt;/a&gt; :&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$ &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; name in &lt;span class=&quot;k&quot;&gt;$(&lt;/span&gt;iocage list -qh &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; awk &lt;span class=&quot;s1&quot;&gt;'{ print $1 }'&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;do&lt;/span&gt; iocage &lt;span class=&quot;nb&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;resolver&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;/dev/null &lt;span class=&quot;nv&quot;&gt;$name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;done&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Activation des jails au boot :&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$ &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; name in &lt;span class=&quot;k&quot;&gt;$(&lt;/span&gt;iocage list -qh &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; awk &lt;span class=&quot;s1&quot;&gt;'{ print $1 }'&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;do&lt;/span&gt; iocage &lt;span class=&quot;nb&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;boot&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;on &lt;span class=&quot;nv&quot;&gt;$name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;done&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;cas-plus-specifiques&quot;&gt;Cas plus spécifiques&lt;/h3&gt;
&lt;p&gt;Certaines jails ont des paramètres un peu plus spécifiques notamment celles de zabbix comme expliqué &lt;a href=&quot;https://www.pboesch.fr/2019/12/zabbix-server-et-proxy-dans-une-jail-freebsd/&quot;&gt;dans un précèdent article&lt;/a&gt;. J'ai également une jail openvpn qui nécessite d'établir une route sur l'host directement et au démarrage de la jail. Pour se faire :&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$ iocage &lt;span class=&quot;nb&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;sysvshm&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;new zabbix
$ iocage &lt;span class=&quot;nb&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;sysvsem&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;new zabbix
$ iocage &lt;span class=&quot;nb&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;exec_prestart&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;/sbin/ifconfig tun0 inet 192.168.2.1/32 192.168.2.2 &amp;amp;&amp;amp; /sbin/route add -net 192.168.2.0/24 192.168.2.2&quot;&lt;/span&gt; openvpn
$ iocage &lt;span class=&quot;nb&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;allow_tun&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;1&lt;/span&gt; openvpn
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&quot;verification_1&quot;&gt;Vérification&lt;/h2&gt;
&lt;p&gt;On peut démarrer ses jails et vérifier le bon fonctionnement.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$ iocage start webfront
$ iocage console webfront
webfront ~ ❯❯❯
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Si les services tournent, que les datas sont présentes, c'est tout bon.&lt;/p&gt;
&lt;h1 id=&quot;upgrade-vers-freebsd-122_1&quot;&gt;Upgrade vers FreeBSD 12.2&lt;/h1&gt;
&lt;p&gt;Dernière étape, passer sur la dernière RELEASE.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$ iocage fetch -r &lt;span class=&quot;m&quot;&gt;12&lt;/span&gt;.2-RELEASE
Host: &lt;span class=&quot;m&quot;&gt;12&lt;/span&gt;.1-RELEASE is not greater than target: &lt;span class=&quot;m&quot;&gt;12&lt;/span&gt;.2-RELEASE
This is unsupported.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Il faut d'abord mettre à jour l'host cette fois ;-). L'host en 12.2, le fetch fonctionne correctement. Pensez à désactiver ezjail avant reboot de l'host :&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$ sysrc -X ezjail_enable
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Les sources récupérées, on peut passer à l'upgrade de chaque jails :&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$ &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; j in &lt;span class=&quot;k&quot;&gt;$(&lt;/span&gt;iocage list -qh &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; awk &lt;span class=&quot;s1&quot;&gt;'{ print $1 }'&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;do&lt;/span&gt; iocage upgrade -r &lt;span class=&quot;m&quot;&gt;12&lt;/span&gt;.2-RELEASE &lt;span class=&quot;nv&quot;&gt;$j&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;done&lt;/span&gt;

jailname successfully upgraded from &lt;span class=&quot;m&quot;&gt;12&lt;/span&gt;.1-RELEASE-p13 to &lt;span class=&quot;m&quot;&gt;12&lt;/span&gt;.2-RELEASE-p4!
Please reboot the jail and inspect.
Remove the snapshot: ioc_upgrade_2021-03-11 &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; everything is OK
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Comme à l'étape précédente, on vérifie que tout fonctionne. Si c'est le cas, on peut supprimer les snapshots :&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$ &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; j in &lt;span class=&quot;k&quot;&gt;$(&lt;/span&gt;iocage list -qh &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; awk &lt;span class=&quot;s1&quot;&gt;'{ print $1 }'&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;do&lt;/span&gt; iocage snapremove -n ioc_upgrade_2021-03-11 &lt;span class=&quot;nv&quot;&gt;$j&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;done&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h1 id=&quot;ansibleiocagejailname&quot;&gt;Ansible/iocage/jailname&lt;/h1&gt;
&lt;p&gt;J'utilise le connecteur &lt;code&gt;jail&lt;/code&gt; avec ansible &lt;code&gt;ansible_connection=jail&lt;/code&gt;. Avec iocage, j'obtenais cette erreur :&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$ ansible jails -m ping
webfront &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; FAILED! &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&amp;gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
&lt;span class=&quot;s2&quot;&gt;&quot;msg&quot;&lt;/span&gt;: &lt;span class=&quot;s2&quot;&gt;&quot;incorrect jail name webfront&quot;&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/iocage/iocage/issues/575&quot;&gt;Issue ouverte sur le github&lt;/a&gt; : il faut rajouter le préfixe &lt;code&gt;ioc-&lt;/code&gt; sur chaques jails dans l'inventaire.&lt;/p&gt;
&lt;h1 id=&quot;suppression-ezjail&quot;&gt;Suppression ezjail&lt;/h1&gt;
&lt;p&gt;Au bout de quelques jours d'uptime, on peut définitivement tout supprimer :&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$ &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; j in &lt;span class=&quot;k&quot;&gt;$(&lt;/span&gt;ezjail-admin list &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; awk &lt;span class=&quot;s1&quot;&gt;'{ print $4 }'&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; tail -n +3&lt;span class=&quot;k&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;do&lt;/span&gt; ezjail-admin delete &lt;span class=&quot;nv&quot;&gt;$j&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;done&lt;/span&gt;
$ zfs destroy -r zroot/jails
$ pkg delete ezjail
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Seul regret avec iocage, c'est sa lenteur due à python. Ezjail n'étant qu'un gros script sh, le temps d'exécution est incomparable…&lt;/p&gt;</content:encoded>
	<dc:date>2021-03-17T23:00:00+00:00</dc:date>
	<dc:creator>Pierre Boesch</dc:creator>
</item>
<item rdf:about="https://fiat-tux.fr/?p=2900">
	<title>Luc Didry: Nouveauté dans le wiki : augmen­ter le score de spam pour une certaine adresse mail avec Rspamd</title>
	<link>https://fiat-tux.fr/2021/02/11/nouveaute-dans-le-wiki-augmenter-le-score-de-spam-pour-une-certaine-adresse-mail-avec-rspamd/</link>
	<content:encoded>&lt;p&gt;Exemple d’usage : comme je publie des modules Perl sur le &lt;a href=&quot;https://metacpan.org/author/LDIDRY&quot;&gt;CPAN&lt;/a&gt;, j’ai une adresse @cpan.org qui a été auto­ma­tique­ment créée, dont les mails sont trans­fé­rés chez moi, et qui se retrouve spam­mée à longueur de jour­née. Comme il y a quand même une possi­bi­lité d’avoir des mails légi­times dessus, je ne la bloque pas complè­te­ment. Par contre, augmen­ter le score de spam permet de faire passer des mails qui ont déjà un petit score de spam dans la caté­go­rie « Oui, c’est bien du spam ».&lt;/p&gt;
&lt;p&gt;Pour voir la marche à suivre, c’est sur &lt;a href=&quot;https://wiki.fiat-tux.fr/books/administration-syst%C3%A8mes/page/rspamd#bkmrk-augmenter-le-score-d&quot;&gt;https://wiki.fiat-tux.fr/books/admi­nis­tra­tion-syst%C3%A8mes/page/rspamd#bkmrk-augmen­ter-le-score-d&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Crédit : &lt;a href=&quot;https://unsplash.com/photos/oIMXkEuiXpc&quot;&gt;Photo&lt;/a&gt; par &lt;a href=&quot;https://unsplash.com/@possessedphotography&quot;&gt;Posses­sed Photo­gra­phy&lt;/a&gt; sur &lt;a href=&quot;https://unsplash.com/&quot;&gt;Unsplash&lt;/a&gt;&lt;/p&gt;</content:encoded>
	<dc:date>2021-02-11T09:39:59+00:00</dc:date>
	<dc:creator>Luc</dc:creator>
</item>
<item rdf:about="https://fiat-tux.fr/?p=2898">
	<title>Luc Didry: Plein de choses à apprendre sur le plai­sir fémi­nin</title>
	<link>https://fiat-tux.fr/2021/02/07/plein-de-choses-a-apprendre-sur-le-plaisir-feminin/</link>
	<content:encoded>&lt;p&gt;On m’a récem­ment offert l’ac­cès au site &lt;a href=&quot;https://www.omgyes.com/&quot;&gt;OMGyes&lt;/a&gt;&lt;sup id=&quot;fnref1:1&quot;&gt;&lt;a class=&quot;footnote-ref&quot; href=&quot;https://fiat-tux.fr/feed/#fn:1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;, un site dédié au plai­sir fémi­nin, basé sur des études scien­ti­fiques menées en parte­na­riat avec des cher­cheuses et cher­cheurs de l’&lt;a href=&quot;https://fr.wikipedia.org/wiki/Universit%C3%A9_de_l%27Indiana&quot;&gt;Indiana Univer­sity&lt;/a&gt; et du &lt;a href=&quot;https://fr.wikipedia.org/wiki/Institut_Kinsey&quot;&gt;Kinsey Insti­tute&lt;/a&gt; auprès de 20 000 femmes entre 18 et 95 ans (ça fait pas mal).&lt;/p&gt;
&lt;p&gt;Vous croyez vous y connaître en plai­sir fémi­nin ? Vous vous trom­pez lour­de­ment. Et très certai­ne­ment vous aussi, mesdames (si, si !).&lt;/p&gt;
&lt;figure class=&quot;wp-caption aligncenter&quot; id=&quot;attachshyment_2909&quot; style=&quot;width: 490px; text-align: center;&quot;&gt;&lt;a href=&quot;https://fiat-tux.fr/wp-content/uploads/you_know_nothing_Jon_Snow.gif&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;size-full wp-image-2909&quot; height=&quot;245&quot; src=&quot;https://fiat-tux.fr/wp-content/uploads/you_know_nothing_Jon_Snow.gif&quot; width=&quot;500&quot; /&gt;&lt;/a&gt;&lt;figcaption class=&quot;wp-caption-text&quot; id=&quot;caption-attachshyment-2909&quot;&gt;« You know nothing, Jon Snow »&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;&lt;span id=&quot;more-2898&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;En effet, le plai­sir fémi­nin est encore assez tabou (par exemple, un seul manuel scolaire évoque le clito­ris lors des cours d’édu­ca­tion sexuelle, le fait qu’&lt;a href=&quot;https://fr.wikipedia.org/wiki/Odile_Buisson&quot;&gt;Odile Buis­son&lt;/a&gt; et &lt;a href=&quot;https://fr.wikipedia.org/wiki/Pierre_Foldes&quot;&gt;Pierre Foldes&lt;/a&gt; ont eu des &lt;a href=&quot;https://www.babelio.com/livres/Buisson-Qui-a-peur-du-point-G-/237359&quot;&gt;diffi­cul­tés à faire leurs recherches sur le plai­sir fémi­nin&lt;/a&gt;, recherches qui ont donné lieu à la première écho­gra­phie d’un clito­ris… en 2008 ! C’était hier ! Tiens allez hop, un petit lien vers une BD qui parle de ça : &lt;a href=&quot;https://emmaclit.com/2016/07/03/check-ta-chatte/&quot;&gt;Check ta chatte&lt;/a&gt;).&lt;br /&gt;
En consé­quence de quoi, les femmes doivent apprendre toutes seules, cher­cher par elles-mêmes, expé­ri­men­ter et les hommes… pareil, mais il leur faut déjà commen­cer par s’in­té­res­ser au sujet et écou­ter leurs parte­naires (et mani­fes­te­ment, ce n’est pas une évidence pour tout le monde).&lt;br /&gt;
Il n’y a donc que peu de chances que vous sachiez tout…&lt;/p&gt;
&lt;p&gt;On découvre sur OMGyes une multi­tude de pratiques que ces femmes utilisent pour avoir du plai­sir, orga­ni­sées par thèmes.&lt;/p&gt;
&lt;p&gt;Chaque pratique comprend une ou plusieurs vidéos « théo­riques » où une femme (une par vidéo) va montrer une tech­nique person­nelle reliée au sujet, éven­tuel­le­ment en mimant avec les mains, expliquer pourquoi c’est bon… il y a parfois aussi un moment où elle parle de son expé­rience de la chose (par exemple, sur l’éja­cu­la­tion fémi­nine, une des inter­ve­nantes explique sa première fois, complè­te­ment inat­ten­due et comment son parte­naire l’a rassu­rée — elle croyait avoir uriné — et lui a évité toute honte, toute gène en lui expliquant qu’elle avait éjaculé et que ce n’était pas une chose dont il faut avoir honte&lt;sup id=&quot;fnref1:2&quot;&gt;&lt;a class=&quot;footnote-ref&quot; href=&quot;https://fiat-tux.fr/feed/#fn:2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;).&lt;/p&gt;
&lt;p&gt;Il y a aussi toute une partie texte, avec des dessins, des statis­tiques (toujours inté­res­santes et parfois surpre­nantes !).&lt;/p&gt;
&lt;p&gt;Jusque là, et même si c’est très inté­res­sant, on pour­rait se dire que c’est un site de conseils sexo plutôt clas­sique (bien que déjà au-dessus de moyenne en terme d’in­té­rêt)… et bien non ! Il y a deux compo­santes supplé­men­taires qui m’ont énor­mé­ment surpris :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;encore des vidéos… mais cette fois, côté travaux pratiques : des femmes des vidéos pratiques (pas toutes) qui montrent la tech­nique expo­sée précé­dem­ment, mais en se touchant, la caméra parfois à quelques centi­mètres de leur sexe et, oui, vont parfois jusqu’à l’or­gasme devant nous. Ces femmes se montrent en toute confiance, expriment ce qu’elles ressentent. Il y a là, je trouve, quelque chose de magique et de beau. Bien évidem­ment, la tech­nique est bien plus claire ainsi montrée.&lt;/li&gt;
&lt;li&gt;quelque chose que j’au­rais bien du mal à décrire autre­ment que « un simu­la­teur de stimu­la­tion ». Imagi­nez la photo du sexe d’une des inter­ve­nantes en gros plan (très gros plan)… qui réagit aux caresses ! L’in­ter­ve­nante nous donne quelques indi­ca­tions (un rappel de la tech­nique) en nous parlant, accom­pa­gnées de quelques flèches animées et c’est à nous de cares­ser ce sexe (pour le coup, vaut mieux utili­ser un smart­phone, la souris rend la chose étrange) selon ces indi­ca­tions. Là où c’est magique, c’est que la photo réagit exac­te­ment&lt;sup id=&quot;fnref1:3&quot;&gt;&lt;a class=&quot;footnote-ref&quot; href=&quot;https://fiat-tux.fr/feed/#fn:3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; comme le ferait un véri­table sexe : on voit la peau s’en­fon­cer sous la pres­sion, les lèvres s’ou­vrir sous les cares­ses… Si on s’y prend bien, l’in­ter­ve­nante expri­mera son plai­sir, sinon elle nous guidera.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;C’est un vrai plus au niveau didac­tique !&lt;/p&gt;
&lt;p&gt;Les inter­ve­nantes sont d’âges divers (jeunes et moins jeunes… voire pas jeunes du tout), de diffé­rentes origines ethniques et de diffé­rentes tailles. Bref, vous n’au­rez pas que des jeunes filles blanches à la taille fine. Je ne sais pas pour vous, mais moi je trouve ça chouette 🙂&lt;/p&gt;
&lt;p&gt;Elles ont cepen­dant toutes en commun (pour celles dont j’ai vu les vidéos, bien sûr : je n’ai pas encore tout vu) de déga­ger une certaine éner­gie quand elles parlent de leur plai­sir et sont beau­coup à rire à la fin, que ce soit dans les vidéos de travaux théo­riques ou pratiques. C’est beau à voir, vrai­ment 🤗&lt;/p&gt;
&lt;p&gt;Bref : ce site n’est que du bon pour les femmes, pour les hommes, pour les céli­ba­taires, pour les couples et pour celleux qui sont plus nombreuses. Je le recom­mande chau­de­ment !&lt;/p&gt;
&lt;p&gt;Vous pouvez visi­ter la page d’ac­cueil de &lt;a href=&quot;https://www.omgyes.com&quot;&gt;OMGyes&lt;/a&gt; sans crainte : il n’y a aucun contenu expli­cite dessus 😉&lt;/p&gt;
&lt;p&gt;Crédit : &lt;a href=&quot;https://unsplash.com/photos/YdbpIYSNE1E&quot;&gt;Photo&lt;/a&gt; par &lt;a href=&quot;https://unsplash.com/@iyolanda&quot;&gt;Yolanda Sun&lt;/a&gt; sur &lt;a href=&quot;https://unsplash.com/&quot;&gt;Unsplash&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;footnotes&quot;&gt;
&lt;hr /&gt;
&lt;ol&gt;
&lt;li id=&quot;fn:1&quot;&gt;
&lt;p&gt;et c’est trop chouette 🤗 &lt;a class=&quot;footnote-backref&quot; href=&quot;https://fiat-tux.fr/feed/#fnref1:1&quot; rev=&quot;footnote&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn:2&quot;&gt;
&lt;p&gt;moi j’dis « Respect » à ce gars d’avoir réussi à désa­mor­cer la gène aussi bien et aussi vite &lt;a class=&quot;footnote-backref&quot; href=&quot;https://fiat-tux.fr/feed/#fnref1:2&quot; rev=&quot;footnote&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn:3&quot;&gt;
&lt;p&gt;bon, pas tout à fait complè­te­ment exac­te­ment, je pense qu’il y a des limi­ta­tions tech­niques, mais c’est vrai­ment TRÈS impres­sion­nant ! &lt;a class=&quot;footnote-backref&quot; href=&quot;https://fiat-tux.fr/feed/#fnref1:3&quot; rev=&quot;footnote&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</content:encoded>
	<dc:date>2021-02-07T20:20:36+00:00</dc:date>
	<dc:creator>Luc</dc:creator>
</item>
<item rdf:about="https://fiat-tux.fr/?p=2712">
	<title>Luc Didry: Contra­cep­tion mascu­line : la vasec­to­mie</title>
	<link>https://fiat-tux.fr/2021/01/01/contraception-masculine-la-vasectomie/</link>
	<content:encoded>&lt;p&gt;Non, ça ne va pas parler de tech­nique aujourd’­hui.&lt;/p&gt;
&lt;h2&gt;Inéga­li­tés femmes/hommes&lt;/h2&gt;
&lt;p&gt;On fait trop souvent peser sur les femmes le poids de la contra­cep­tion, ajou­tant ainsi à leur &lt;a href=&quot;https://emmaclit.com/2017/05/09/repartition-des-taches-hommes-femmes/&quot;&gt;charge mentale&lt;/a&gt; déjà bien lourde. Non seule­ment, elle s’en chargent le plus souvent, mais en plus ça n’est pas sans &lt;a href=&quot;http://sante.lefigaro.fr/actualite/2012/10/05/19246-contraception-prendre-pilule-nest-pas-sans-risques&quot;&gt;risque pour leur santé&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Les méthodes de contra­cep­tion mascu­line sont &lt;a href=&quot;https://www.liberation.fr/france/2019/09/25/contraception-le-pendant-masculin-a-la-traine_1753581&quot;&gt;très en retard&lt;/a&gt;.&lt;br /&gt;
Détail « amusant » : la recherche sur une pilule (ou injec­tion, je sais plus) d’hor­mones pour les hommes avait été inter­rom­pue parce que ça avait des effets secon­daires comme la prise de poids, des maux de têtes… tiens, c’est marrant, pile &lt;a href=&quot;https://www.mapilulecontraceptive.com/effets-secondaires-pilule-contraceptive/&quot;&gt;les effets secon­daires de la pilule pour les femmes&lt;/a&gt;. C’est que nous, les hommes, sommes des petites choses fragiles (ne parlons pas de la peur de la perte de « viri­lité », y en a qui s’éva­noui­raient).&lt;/p&gt;
&lt;p&gt;Je n’ai parlé que de la pilule, mais l’im­plant et le stéri­let ne sont pas sans effets secon­daires non plus… Regar­dez la rubriques « Quels sont ses incon­vé­nients » de &lt;a href=&quot;https://www.choisirsacontraception.fr/moyens-de-contraception/l-implant.htm&quot;&gt;cette page pour l’im­plant&lt;/a&gt; et de &lt;a href=&quot;https://www.choisirsacontraception.fr/moyens-de-contraception/le-sterilet-diu.htm&quot;&gt;cette page pour le stéri­let&lt;/a&gt; (qu’il soit au cuivre ou hormo­nal).&lt;/p&gt;
&lt;p&gt;Quand on regarde le &lt;a href=&quot;https://www.choisirsacontraception.fr/contraception_tableau_comparatif.htm&quot;&gt;tableau compa­ra­tif des méthodes contra­cep­tives sur le site https://www.choi­sir­sa­con­tra­cep­tion.fr&lt;/a&gt; (site édité par &lt;a href=&quot;https://www.santepubliquefrance.fr/&quot;&gt;Santé publique France&lt;/a&gt;), on voit… une seule méthode de contra­cep­tion à la charge exclu­sive des hommes (exclu­sive : seul l’homme peut y avoir recours, tout comme seule la femme peut prendre la pilule ou utili­ser un stéri­let), deux méthodes (dont une non-exclu­sive à l’homme) si on ajoute le préser­va­tif mascu­lin (je ne compte pas le préser­va­tif fémi­nin, je vois mal un homme se trim­bal­ler avec ça, déjà qu’on a du mal à en trou­ver).&lt;/p&gt;
&lt;h2&gt;Il existe pour­tant déjà des méthodes de contra­cep­tion pour les hommes !&lt;/h2&gt;
&lt;p&gt;Il existe depuis 30 ans un &lt;a href=&quot;https://www.ladepeche.fr/article/2018/01/12/2720155-contraception-l-avenir-est-dans-le-slip.html&quot;&gt;slip qui remonte les testi­cules près du corps&lt;/a&gt;, augmen­tant ainsi leur tempé­ra­ture, ce qui bloque la sper­ma­to­ge­nèse. On peut obte­nir le même résul­tat avec un anneau en sili­cone appelé &lt;a href=&quot;https://thoreme.com/&quot;&gt;andro-switch&lt;/a&gt; (vous pouvez voir l’avis d’un utili­sa­teur de cet anneau en suivant le tag &lt;a href=&quot;https://framapiaf.org/tags/androswitch&quot;&gt;#andros­witch sur Masto­don&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Et puis, il y a la solu­tion radi­cale : la &lt;a href=&quot;https://fr.wikipedia.org/wiki/Vasectomie&quot;&gt;vasec­to­mie&lt;/a&gt;. Cette opéra­tion consiste à couper ou bloquer les canaux défé­rents amenant les sper­ma­to­zoides. Rassu­rez-vous, les petites natures qui passe­raient par ici, il ne s’agit pas de couper les testi­cules, non, juste de bloquer la sortie.&lt;/p&gt;
&lt;h2&gt;Mon expé­rience&lt;/h2&gt;
&lt;p&gt;J’ai choisi voici près de deux ans (au deuxième semestre 2018) de me faire vasec­to­mi­ser. J’étais alors céli­ba­tai­re… je l’étais toujours lorsque j’ai commencé à écrire ce billet en septembre 2019 (oui, je l’ai un peu beau­coup laissé traî­ner 😅) mais j’ai depuis eu deux rela­tions à long terme.&lt;/p&gt;
&lt;p&gt;Je ne vais pas lais­ser planer de suspense quant à la réac­tion de mes parte­naires : j’en ai retiré deux énormes « MERCI ! ».&lt;br /&gt;
Parce que ça leur enlève un poids des épaules, parce que ça leur évite d’avoir à subir les effets secon­dai­res… bref, pile deux des raisons qui m’ont fait choi­sir la vasec­to­mie (les autres étant que je ne veux plus d’en­fants et que je n’ai pas envie d’uti­li­ser une méthode qui présente le moindre risque d’inef­fi­ca­cité si j’ou­blie de l’uti­li­ser, je me connais, ça aurait été très risqué).&lt;/p&gt;
&lt;p&gt;Mon parcours pour la vasec­to­mie a été long, mais pas compliqué :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;visite chez le méde­cin trai­tant&lt;/li&gt;
&lt;li&gt;visite au CHU chez un urologue, où on m’a bien tout expliqué (même si je m’étais déjà bien rensei­gné sur le net) : l’as­pect défi­ni­tif de la chose, le geste effec­tué, etc&lt;/li&gt;
&lt;li&gt;4 mois d’at­tente (histoire d’être sûr que je veux y passer)&lt;/li&gt;
&lt;li&gt;encore une visite au CHU chez l’uro­logue pour dire que je veux vrai­ment le faire (signa­ture d’un accord écrit), prise de rendez-vous pour l’in­ter­ven­tion&lt;/li&gt;
&lt;li&gt;un petit tour au &lt;a href=&quot;https://www.cecos.org/&quot;&gt;CECOS&lt;/a&gt; histoire d’y conser­ver mes gamètes au cas où (la conser­va­tion des gamètes est payante, le prix dépend de votre CECOS et le rembour­se­ment dépend de votre mutuelle)&lt;/li&gt;
&lt;li&gt;un sper­mo­gramme (pour voir quel est le niveau normal d’ac­ti­vité de mes sper­ma­to­zoïdes, leur nombre…)&lt;/li&gt;
&lt;li&gt;inter­ven­tion en ambu­la­toire : j’ar­rive le matin, je repars le soir (atten­tion, quelqu’un doit venir vous cher­cher et il ne faut pas dormir seul chez soi, il faut avoir quelqu’un au cas où). Même si on a donné son accord écrit, on reste libre de dire stop à tout moment 🙂&lt;/li&gt;
&lt;li&gt;un autre sper­mo­gramme 3 mois après pour voir si ça a bien fonc­tionné&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;L’in­ter­ven­tion ne m’a laissé que deux toutes petites cica­trices, une sur chaque testi­cule et la gène de la cica­tri­sa­tion n’a pas duré bien long­temps.&lt;/p&gt;
&lt;p&gt;Au niveau libido : aucun chan­ge­ment. Au niveau éjacu­la­tion : aucun chan­ge­ment visible (le volume des sper­ma­to­zoïdes dans le sperme est de l’ordre de 3 à 5% d’après mes souve­nirs). Il n’y a aucun effet secon­daire 🙂&lt;/p&gt;
&lt;p&gt;Notez que les risques liés à la vasec­to­mie sont toute­fois les mêmes que pour toute inter­ven­tion chirur­gi­cale : infec­tion, saigne­ments, etc.&lt;/p&gt;
&lt;h2&gt;Conclu­sion&lt;/h2&gt;
&lt;p&gt;Je ne regrette pas un seul instant ma déci­sion.&lt;br /&gt;
C’est rapide (l’in­ter­ven­tion, pas tout le proces­sus, hein !), rela­ti­ve­ment indo­lore (j’ai déjà eu des croûtes aux genoux qui m’ont plus déran­gées que la cica­tri­sa­tion de la vasec­to­mie), gratuit (l’in­ter­ven­tion ne coûte quasi­ment rien, 65€, et c’est pris en charge par la sécu­rité sociale), j’ai une sauve­garde (mes gamètes conser­vés au CECOS, je pense que je les aban­don­ne­rais d’ici quelques années) et surtout, surtout : les remer­cie­ments de mes parte­naires ! 🤗&lt;/p&gt;
&lt;p&gt;Crédit : &lt;a href=&quot;https://unsplash.com/photos/gJ3EpFlw_ss&quot;&gt;Photo&lt;/a&gt; par &lt;a href=&quot;https://unsplash.com/@anniespratt&quot;&gt;Annie Spratt&lt;/a&gt; sur &lt;a href=&quot;https://unsplash.com/&quot;&gt;Unsplash&lt;/a&gt;&lt;/p&gt;</content:encoded>
	<dc:date>2021-01-01T11:11:27+00:00</dc:date>
	<dc:creator>Luc</dc:creator>
</item>
<item rdf:about="tag:None,2020-12-30:/bilan-2020">
	<title>Alexandre Bailly: Bilan de 2020</title>
	<link>https://blog.chibi-nah.fr/bilan-2020</link>
	<content:encoded>&lt;p&gt;Petit bilan de l'année écoulée.&lt;/p&gt;
&lt;p&gt;L'année 2020 fut assez compliquée, entre les confinements, les couvre-feu, et autres soucis IRL.&lt;/p&gt;
&lt;div class=&quot;section&quot; id=&quot;bilan-de-l-annee&quot;&gt;
&lt;h2&gt;Bilan de l'année&lt;/h2&gt;
&lt;div class=&quot;section&quot; id=&quot;au-niveau-associatif&quot;&gt;
&lt;h3&gt;Au niveau associatif&lt;/h3&gt;
&lt;p&gt;Cette année fut assez difficile au niveau associatif.
L'AGO 2019 de Lorraine Data Network a pu se faire sans problème en février dernier, avec un bilan pas exceptionnel mais pas totalement catastrophique.&lt;/p&gt;
&lt;p&gt;Je m'étais posé la question, à savoir : « est-ce que je reste membre du collège solidaire ou bien j'en sors et reste simple membre. » Je suis assez lassé au niveau associatif, et l'année 2020 n'a fait qu'amplifier cette lassitude.&lt;/p&gt;
&lt;p&gt;En ajoutant une charge de travail assez lourde, j'en suis au stade où le PC reste éteint quand je rentre. Le monde associatif n'étant plus prioritaire.&lt;/p&gt;
&lt;p&gt;Bref, je pense présenter ma démission lors de la prochaine AGO.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;au-niveau-en-ligne&quot;&gt;
&lt;h3&gt;Au niveau En ligne&lt;/h3&gt;
&lt;p&gt;Les services tournent sans trop de problème, et sont a peu près à jour.&lt;/p&gt;
&lt;p&gt;Au niveau documentation, c’est simple : je n'ai quasiment rien écrit.&lt;/p&gt;
&lt;p&gt;Côté blog, la migration de PluXML vers Pélican s’est faite sans trop de problèmes. Il reste 2-3 pages à corriger. Je pense notamment à l’article sur l’ajout de points sur une carte Open Street Map, avec Leaflet.js. Le thème, simple et sobre me convient, avec la gestion des MediaQueries pour adapter les couleurs en fonction des préférences de la personne visitant le site (thème clair par défaut ou thème sombre).&lt;/p&gt;
&lt;p&gt;J'ai quelques articles en cours de rédaction, mais rien de publiable en l'état. La recherche de documentation, la lecture et la compréhension prenant pas mal de temps.&lt;/p&gt;
&lt;p&gt;Côté gopher, j'ai ajouté les articles du blog, les fan-fiction de Et La Terre Éclata, plus deux ou trois autres trucs.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;au-niveau-hors-ligne&quot;&gt;
&lt;h3&gt;Au niveau Hors ligne&lt;/h3&gt;
&lt;p&gt;Cette année, à cause du confinement, c'est simple, il n'y a pas eu de séance de karaoké. Je n'ai réinstallé que récemment Karaoké Mugen, en version 4.18.&lt;/p&gt;
&lt;p&gt;Quelques achats de matériel, comme un lecteur de code barre (article à rédiger) et un NAS (article à rédiger). Quelques pouëts sur le Fediverse concernant ce matériel ont été publiés.&lt;/p&gt;
&lt;p&gt;Quelques bidouillages avec ffmpeg (documentation à mettre à jour).&lt;/p&gt;
&lt;p&gt;Quelques mises à jour et bidouillages sur le téléphone sous SailfishOS 3.4 (idem, à documenter).&lt;/p&gt;
&lt;p&gt;Entre deux périodes de confinement, j'ai fini par changer de FAI, me revenant au final moins cher, avec plus de services, et un débit montant (théorique) multiplié par un peu plus de deux (300 Mbps -&amp;gt; 700 Mbps), et un débit descendant multiplié par beaucoup (synchro 300 Mbps -&amp;gt; 5 Gbps).&lt;/p&gt;
&lt;p&gt;L'ajout d'un bouton RESET, prévu de longue date, et enfin en place sur mon Tandy 1000 HX. Un article de blog a été publié à ce sujet.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;au-niveau-irl&quot;&gt;
&lt;h3&gt;Au niveau IRL&lt;/h3&gt;
&lt;p&gt;Quasiment pas d'activité sportive, uniquement de la marche à pieds et de la trottinette (pas électrique) quasiment au quotidien.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;previsions-pour-2021&quot;&gt;
&lt;h2&gt;Prévisions pour 2021&lt;/h2&gt;
&lt;p&gt;Quand le gros projet IRL me laissera un peu de temps…&lt;/p&gt;
&lt;div class=&quot;section&quot; id=&quot;client-km-pour-sailfishos&quot;&gt;
&lt;h3&gt;Client KM pour SailfishOS&lt;/h3&gt;
&lt;p&gt;Pour l'instant, c'est toujours au point mort. J'espère juste pouvoir reprendre le projet et avancer dessus.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;projet-lyan&quot;&gt;
&lt;h3&gt;Projet LYAN&lt;/h3&gt;
&lt;p&gt;Pareil, de l'écriture à faire dessus. J'ai quelques idées, mais pas suffisamment de temps pour rédiger le tout.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;ffmpeg-mpv&quot;&gt;
&lt;h3&gt;ffmpeg/mpv&lt;/h3&gt;
&lt;p&gt;Ajouter de nouveaux trucs et astuces dans la doc.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;projet-v&quot;&gt;
&lt;h3&gt;Projet V&lt;/h3&gt;
&lt;p&gt;Aucune annonce officielle par rapport à ce projet. Juste une idée qu'il me faudra implémenter.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;projet-e&quot;&gt;
&lt;h3&gt;Projet E&lt;/h3&gt;
&lt;p&gt;Un petit projet d'électronique pour l'instant en suspens.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;projet-m&quot;&gt;
&lt;h3&gt;Projet M&lt;/h3&gt;
&lt;p&gt;Idem, un autre petit projet d'électronique démarré en 2020 et également en suspens.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;blog&quot;&gt;
&lt;h3&gt;Blog&lt;/h3&gt;
&lt;p&gt;Finir d'écrire les articles en cours, et en rédiger de nouveaux.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;migrer-les-services-sur-un-nouveau-serveur&quot;&gt;
&lt;h3&gt;Migrer les services sur un nouveau serveur&lt;/h3&gt;
&lt;p&gt;Présentement, cela me coûte ~450€ par an pour deux serveurs dédiés qui commencent à accuser leur âge.
Du coup, j'hésite entre rapatrier certains services chez moi, ou a migrer sur un autre serveur dédié, nettement plus puissant (mais pas au même tarif).&lt;/p&gt;
&lt;p&gt;Si je les rapatrie chez moi, il me faudra regarder ce que je peux utiliser comme micro-serveur.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;conclusion&quot;&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Un petit paquet de projets pour 2021. On verra bien si j'arrive à les mener à bien.&lt;/p&gt;
&lt;/div&gt;</content:encoded>
	<dc:date>2020-12-29T23:00:00+00:00</dc:date>
	<dc:creator>alex</dc:creator>
</item>
<item rdf:about="tag:None,2020-10-04:/fibre-optique-episode-3">
	<title>Alexandre Bailly: Fibre optique - épisode 3</title>
	<link>https://blog.chibi-nah.fr/fibre-optique-episode-3</link>
	<content:encoded>&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/fibre-episode-3/10191471315.png&quot; /&gt;
&lt;div class=&quot;section&quot; id=&quot;contexte&quot;&gt;
&lt;h2&gt;Contexte&lt;/h2&gt;
&lt;p&gt;J'ai changé de FAI¹ courant juillet (après le confinement), pour diverses raisons :&lt;/p&gt;
&lt;ul class=&quot;simple&quot;&gt;
&lt;li&gt;quelques problèmes de Peering bien agaçants avec Orange, notamment avec des serveurs dédiés situés en Allemagne ;&lt;/li&gt;
&lt;li&gt;l'option appels vers les téléphones mobiles qui me rajoute +5€ sur la facture par mois sur la ligne fixe ;&lt;/li&gt;
&lt;li&gt;l'immeuble couvert par d'autres opérateurs Fibre ;&lt;/li&gt;
&lt;li&gt;un concurrent proposant mieux² pour moins cher³.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Après deux semaines d'attente et l'intervention d'un techicien à domicile (+ intervention dans le point de mutualisation pour changer de porte parce que FAI différent), la nouvelle liaison fibre fut opérationnelle.
Seul point négatif : il a fallu douze jours supplémentaires pour porter le numéro de téléphone fixe, et l'assistance de ce nouveau FAI ne fut clairement pas à la hauteur, donnant ce genre de réponse :&lt;/p&gt;
&lt;ul class=&quot;simple&quot;&gt;
&lt;li&gt;ça sera porté quand ça sera porté ;&lt;/li&gt;
&lt;li&gt;ça sera opérationnel prochainement ;&lt;/li&gt;
&lt;li&gt;bientôt.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Bref, une journée de plus d'attente et je demandais l'annulation de la portabilité du numéro et résiliation de l'abonnement (jusqu'à 14 jours pour changer d'avis).&lt;/p&gt;
&lt;p&gt;J'ai rudement bien fait d'attendre la fin du confinement pour changer de fournisseur, parce qu'étant en télétravail pendant cette période difficile, le téléphone était absolument indispensable.&lt;/p&gt;
&lt;p&gt;Bref, abonnement fonctionnel début août.&lt;/p&gt;
&lt;p&gt;Et accessoirement, je passe d'une Livebox Play poussive avec l'ONT Huawei séparé à une Freebox Pop avec l'ONT au format SFP, inséré directement dans sa cage prévue sur la Freebox. Un truc en moins à brancher sur la multiprise, ce n'est pas plus mal.&lt;/p&gt;
&lt;p&gt;Et comme toujours : pas de télévision ni de player/décodeur TV. Juste un abonnement Internet + téléphone.&lt;/p&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/fibre-episode-3/freebox-pop.jpg&quot; /&gt;
&lt;p&gt;La Freebox Pop (blanche), avancée (normalement, elle est plus loin dans le meuble) pour la photo, avec les informations sur les débits affichés à l'écran.&lt;/p&gt;
&lt;p&gt;À noter : j'ai imprimé des petits patins circulaires (pas visibles sur la photo) pour la surélever pour améliorer le refroidissement de la box.&lt;/p&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/fibre-episode-3/afficheur-freebox-pop.jpg&quot; /&gt;
&lt;p&gt;Débits (synchro) 5 Gbit/s descendant, 700 Mbit/s montant. L'ONT supportant jusqu'à 10 Gbit/s descendant et 1 Gbit/s montant.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;limitations&quot;&gt;
&lt;h2&gt;Limitations ?&lt;/h2&gt;
&lt;p&gt;La Freebox disposant de deux ports à 1 Gbit/s et de un port à 2,5 Gbit/s, plus le wifi, il n'est malheureusement pas possible de relier un PC avec une liaison de 5 Gbit/s.&lt;/p&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/fibre-episode-3/freebox.jpg&quot; /&gt;
&lt;p&gt;Interface d'administration de la Freebox. Mon Pihole (Akira) est raccordé en ethernet 100 Mbit/s (amplement suffisant pour le serveur DNS). À noter : Ryoko est (déjà) en 2,5Gbit/s, la capture d'écran fut faite après la rédaction de l'article.&lt;/p&gt;
&lt;p&gt;Dans la pratique, une connexion 300 Mbit/s est largement suffisante pour afficher des pages web. la différence est flagrante plutôt en téléchargement, à condition que le serveur en face ait une connexion Internet qui soit suffisamment élevée.&lt;/p&gt;
&lt;p&gt;Sur la carte mère de mon PC, la carte réseau Realtek est de « seulement » 1 Gbit/s. Ce qui est déjà bien, mais c'est dommage de ne pas pouvoir utiliser ce que la Freebox propose.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;nouvelle-carte-reseau&quot;&gt;
&lt;h2&gt;Nouvelle carte réseau&lt;/h2&gt;
&lt;p&gt;Après quelques recherches, mon choix s'est porté sur une carte générique basée sur un chipset Realtek RTL8125, supportant les liaisons ethernet 10 Mbit/s, 100 Mbit/s, 1 Gbit/s et 2,5 Gbit/s. Modèle générique m'ayant coûté moins de 30 €, frais de port compris.&lt;/p&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/fibre-episode-3/carte-reseau.jpg&quot; /&gt;
&lt;p&gt;À noter : la présence d'un dissipateur thermique sur le chipset Realtek.&lt;/p&gt;
&lt;p&gt;Ce chipset étant supporté dans le noyau Linux (mainstream), il n'y aura donc pas de surprises. En fait, je n'ai même pas eu besoin de le compiler, le driver Realtek 8169/8168/8101/8125 supportant ce chipset (vérifié et validé avec le noyau 5.8.5 utilisé actuellement).&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;installation-de-la-carte&quot;&gt;
&lt;h2&gt;Installation de la carte&lt;/h2&gt;
&lt;p&gt;Bon, pas de grosses surprises à ce niveau là, vu que j'ai monté cette tour.&lt;/p&gt;
&lt;p&gt;Sauf que niveau emplacements libres sur le boîtier, il n'y en a pas tant que ça.&lt;/p&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/fibre-episode-3/emplacements.jpg&quot; /&gt;
&lt;p&gt;Emplacements libres. À noter : l'équerre au niveau du port PCIEX-16-2 a été retirée.&lt;/p&gt;
&lt;p&gt;Je préfèrerais laisser l'équivalent d'un slot libre au niveau des ventilateurs de la carte graphique, pour le refroidissement (elle a atteint les 70°C lors de benchmarks).&lt;/p&gt;
&lt;p&gt;Le truc avec la nappe, c'est le port série (connecteur DB9), mais pas envie de le déplacer.&lt;/p&gt;
&lt;p&gt;Du coup, le plus simple, c'est d'utiliser le port PCIEX-16-2 (c'est parfaitement compatible), le PCIEX-1-1 étant trop bas et le PCIEX-1-2 étant masqué/occupé par l'équerre avec le DB9.&lt;/p&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/fibre-episode-3/carte-installee.jpg&quot; /&gt;
&lt;p&gt;La carte, installée. Plus qu'à visser l'équerre et refermer le capot.&lt;/p&gt;
&lt;p&gt;Lors du démarrage du PC, j'ai pensé à désactiver la carte ethernet sur la carte-mère ; étant inutilisée, cela ne sert à rien de la laisser active.&lt;/p&gt;
&lt;p&gt;Une fois sous GNU/Linux, vérifions si la carte est bien reconnue.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;lspci | grep Ethernet&lt;/p&gt;
&lt;p&gt;05:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8125 2.5GbE Controller&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Ok, là, c'est bon.&lt;/p&gt;
&lt;p&gt;Plus qu'à corriger le nom de la carte réseau dans /etc/network/interfaces, la carte étant enp5s0 et non plus enp3s0.&lt;/p&gt;
&lt;p&gt;Ne pas oublier de relancer le service networking pour que cela soit pris en compte.&lt;/p&gt;
&lt;p&gt;Et maintenant, place aux tests.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;test&quot;&gt;
&lt;h2&gt;Test&lt;/h2&gt;
&lt;p&gt;Alors, là, ça se passe de commentaires…&lt;/p&gt;
&lt;p&gt;Capture vidéo du test de débit&lt;/p&gt;
&lt;p&gt;Résultat :&lt;/p&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/fibre-episode-3/10191471315.png&quot; /&gt;
&lt;p&gt;2 291,37 Mbit/s descendant, 675 Mbit/s montant. La latence varie entre 5 et 20 ms en fonction du serveur de destination.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;verdict&quot;&gt;
&lt;h2&gt;Verdict&lt;/h2&gt;
&lt;p&gt;Sans surprise, la carte fonctionne parfaitement. La connexion est stable, aussi bien au niveau PC comme au niveau Freebox.&lt;/p&gt;
&lt;p&gt;On verra ce que ça donnera sur la durée.&lt;/p&gt;
&lt;p&gt;---&lt;/p&gt;
&lt;p&gt;¹ : Fournisseur d'Accès à Internet.&lt;/p&gt;
&lt;p&gt;² : Débit plus élevé, appels vers les fixes ET mobiles inclus et non en option, meilleur matériel, IPv4 fixe, avec les 65 536 ports disponibles, préfixe IPv6 pas dynamique, port 25 déblocable, configuration DNS non verrouillée au niveau routeur, meilleure couverture wifi, etc.&lt;/p&gt;
&lt;p&gt;³ : 29,90€ par mois la première année, puis 39,90€ par mois. Mais avec une réduction de 10€ sur l'abonnement mobile (qui passe donc de 19,90€ à 9,90€ par mois). Soit passer de 34,90 + 19.90€ par mois à 29,90 + 9,90€ par mois. Même à 39,90€ + 9,90€ après la première année me revient toujours moins cher que ce que me proposait Sosh/Orange.&lt;/p&gt;
&lt;/div&gt;</content:encoded>
	<dc:date>2020-10-03T22:00:00+00:00</dc:date>
	<dc:creator>alex</dc:creator>
</item>
<item rdf:about="tag:None,2020-09-14:/reset-sur-tandy-1000-hx">
	<title>Alexandre Bailly: Reset sur Tandy 1000 HX</title>
	<link>https://blog.chibi-nah.fr/reset-sur-tandy-1000-hx</link>
	<content:encoded>&lt;p&gt;Comment ajouter un bouton reset sur ce compatible PC-XT datant de 1987.&lt;/p&gt;
&lt;p&gt;Un article pour le #septandy 2020.&lt;/p&gt;
&lt;div class=&quot;section&quot; id=&quot;tl-dr&quot;&gt;
&lt;h2&gt;TL;DR&lt;/h2&gt;
&lt;p&gt;Trop long, flemme de lire.&lt;/p&gt;
&lt;p&gt;Souder un bouton poussoir sur le condensateur C132. L'appui sur ce bouton doit court-circuiter le condensateur pour provoquer le RESET de la machine.&lt;/p&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/Tandy1000/DSC00870.JPG&quot; /&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;la-machine&quot;&gt;
&lt;h2&gt;La machine&lt;/h2&gt;
&lt;div class=&quot;section&quot; id=&quot;tandy-1000-hx&quot;&gt;
&lt;h3&gt;Tandy 1000 HX&lt;/h3&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/Tandy1000/Tandy1000HX.jpg&quot; /&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/Tandy1000/Tandy1000.jpg&quot; /&gt;
&lt;p&gt;Ce compatible IBM PC, sorti en 1987, est doté d'un processeur Intel 8088, cadencé à 7,16 MHz (mode turbo, la fréquence de 4,77 MHz étant accessible via une combinaisons de touches au démarrage de la machine ou pouvant être définie dans les paramètres du BIOS).
Le Bios est celui de Phoenix Technologies.
256 ko de RAM sont présents (extensible à 640 ko de RAM au total via la carte d'extension Tandy Memory Expansion Board 25.1062).
Un lecteur de disquettes 3&quot;½ simple densité (720 ko) est présent, avec un emplacement pour un second lecteur de disquettes dans le même format, et un connecteur d'extension pour un troisième lecteur, cette fois, externe, pouvant être un lecteur 3&quot;½ ou 5&quot;¼.&lt;/p&gt;
&lt;p&gt;Particularité de cette machine : MS-DOS 2.11 est présent sur une ROM dans la machine, et il est alors possible de démarrer sans disquette de démarrage.&lt;/p&gt;
&lt;p&gt;Autres particularités : pas de possibilité d'ajouter un disque dur (pas d'emplacement pour), et les connecteurs ISA ne sont pas dans le format standard (on peut aujourd'hui utiliser des adaptateurs).&lt;/p&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/Tandy1000/TandyMemoryExpansionBoard1.jpg&quot; /&gt;
&lt;p&gt;Carte d'extension mémoire Tandy originale.&lt;/p&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/Tandy1000/TandyMemoryExpansionBoard2.jpg&quot; /&gt;
&lt;p&gt;Les deux ports d'extension sont visibles en haut sur la photo.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;le-reset&quot;&gt;
&lt;h2&gt;Le RESET&lt;/h2&gt;
&lt;p&gt;Aussi bizarre que cela puisse paraître, il n'y a pas de bouton RESET présent sur les Tandy 1000 EX et HX. Ce bouton est bel et bien présent sur d'autres modèles de Tandy 1000.&lt;/p&gt;
&lt;div class=&quot;section&quot; id=&quot;le-reset-sur-les-processeurs-808x&quot;&gt;
&lt;h3&gt;Le RESET sur les processeurs 808x&lt;/h3&gt;
&lt;p&gt;À savoir : le reset ne s'effectue pas au niveau du processeur, mais au niveau du générateur d'horloge, pour les machines à base de processeur 8088 et 8086.&lt;/p&gt;
&lt;p&gt;Schéma d'illustration :&lt;/p&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/Tandy1000/8086_chipset-7.gif&quot; /&gt;
&lt;p&gt;Source : &lt;a class=&quot;reference external&quot; href=&quot;https://www.csee.umbc.edu/courses/undergraduate/CMPE310/Spring05/cpatel2/slides/html_versions/chap9_lect03_8086_chipset.html&quot;&gt;https://www.csee.umbc.edu/courses/undergraduate/CMPE310/Spring05/cpatel2/slides/html_versions/chap9_lect03_8086_chipset.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Ici, la broche /RES est reliée à un bouton RESET (relié à la masse, normalement ouvert), et au 5V (via une résistance de 10kΩ et un condensateur de 10 μF).
À l'allumage, la broche /RES est à l'état bas (0V). Le condensateur de 10 μF se charge via la résistance de 10 kΩ (ce qui prend environ 100 ms).
Une fois chargé, la broche /RES est alors à l'état haut.
Cette temporisation permet d'être sûr que la tension délivrée par l'alimentation est stable.
Tant que cette broche est à l'état bas, c'est comme si le bouton RESET restait enfonçé.&lt;/p&gt;
&lt;p&gt;L'état RESET sur le processeur (et autres chipsets/puces) est alors géré via la broche RESET du générateur d'horloge.&lt;/p&gt;
&lt;p&gt;Bon, ça, c'est la théorie.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;le-reset-sur-le-tandy-1000-hx&quot;&gt;
&lt;h3&gt;Le RESET sur le Tandy 1000 HX&lt;/h3&gt;
&lt;p&gt;En pratique, ça donne quoi sur le Tandy 1000 HX ?&lt;/p&gt;
&lt;p&gt;Tout d'abord, après une observation attentive, de la carte-mère, il n'y a pas de chipset Intel autre que le 8088.&lt;/p&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/Tandy1000/carte-mere.jpg&quot; /&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/Tandy1000/carte-mere2.jpg&quot; /&gt;
&lt;p&gt;Les seuls chipsets potentiels générant les signaux d'horloge et dont le quartz 16.0-28.6 MHz est à proximité sont ceux de NEC et de Texas Instruments.&lt;/p&gt;
&lt;p&gt;La lecture du manuel technique est alors obligatoire. Heureusement, cette doc est très facile à trouver.&lt;/p&gt;
&lt;p&gt;Après une lecture longue et fastidieuse de &quot;Tandy 1000 HX Technical Reference&quot;, le schéma à la page 69, Timing and CPU est à analyser.&lt;/p&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/Tandy1000/schema.jpg&quot; /&gt;
&lt;p&gt;Notamment cette partie du schéma, en haut à gauche.&lt;/p&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/Tandy1000/schema-detail.jpg&quot; /&gt;
&lt;p&gt;Se pourrait-il que ?&lt;/p&gt;
&lt;p&gt;La broche 21 de U20 – Light Blue – est appelée RSTIN, et sur cette broche, on retrouve la même disposition que celle plus haut, avec ici, une résistance de 47 kΩ et deux condensateurs de 10 µF et 0,1 µF. Soit un temps de charge des condensateurs de l'ordre de ~470 ms. Le bouton RESET, ici, n'est ni câblé, n'est ni présent sur le schéma.&lt;/p&gt;
&lt;p&gt;Concrètement, ce bouton serait à câbler au niveau du point de liaison entre la résistance de 47 kΩ (R29) et le condensateur de 10 µF (C132) ; et la masse.
Ou plus simplement : shunter (court-circuiter) le condensateur C132.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;montage-de-test&quot;&gt;
&lt;h3&gt;Montage de test&lt;/h3&gt;
&lt;p&gt;Après vérification, re-vérification, et relecture de la doc (notamment des diagrammes), il est temps de câbler.&lt;/p&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/Tandy1000/diagramme.jpg&quot; /&gt;
&lt;p&gt;À noter : sur ce diagramme, il y a bien une section au milieu à droite pour le RESET (RSTIN).&lt;/p&gt;
&lt;p&gt;Ayant des bouton poussoir (de type NO, Normalement Ouvert) sous la main, et des câbles DuPont, j'ai soudé deux fils sur un bouton (et isolé avec de la gaine thermorétractable), et les ai relié à deux mini grip-fil, et les ai branchés sur le condensateur C132 (à noter, ça fonctionne aussi avec C131 qui est monté en parallèle).&lt;/p&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/Tandy1000/grip-fils.jpg&quot; /&gt;
&lt;p&gt;Le montage temporaire étant en place, faisons les tests.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;smoke-test&quot;&gt;
&lt;h3&gt;Smoke test&lt;/h3&gt;
&lt;p&gt;N'arrivant plus à remettre la main sur le moniteur Tandy (RGBI), j'ai utilisé la sortie vidéo composite de la machine via un upscaler CVBS basique pour pouvoir brancher un écran moderne (en HDMI) dessus. C'est pas top, mais ça fonctionne.&lt;/p&gt;
&lt;p&gt;Donc branchement sur la prise de courant, puis allumage.&lt;/p&gt;
&lt;p&gt;Point positif : rien n'a explosé et pas de libération de fumée magique.&lt;/p&gt;
&lt;p&gt;Après quelques secondes d'attente, un appui sur le bouton, et… ça fonctionne ! Le RESET est bel et bien opérationnel.&lt;/p&gt;
&lt;p&gt;Démo en vidéo&lt;/p&gt;
&lt;p&gt;Tout fonctionne. Retirons le montage temporaire.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;choix-de-l-emplacement-percage-et-soudures&quot;&gt;
&lt;h3&gt;Choix de l'emplacement, perçage et soudures&lt;/h3&gt;
&lt;p&gt;Concrètement, rien de compliqué. Prendre deux fils, torsadés ou non (j'ai utilisé une chute de câble réseau), couper à la bonne longueur (ça ne sert à rien de faire passer des fils de 3 mètres de long), ne pas oublier de passer de la gaine thermo avant de souder le bouton.&lt;/p&gt;
&lt;p&gt;Le plus compliqué fut en fait le perçade du boîtier, en partie à cause du blindage (que je voulais laisser en place), et aussi et surtout parce qu'il y a très peu d'endroits possibles où placer le bouton poussoir. Accessoirement, le boîtier en plastique étant courbé et non plat, ça n'arrange pas les choses.&lt;/p&gt;
&lt;p&gt;L'emplacement qui me semblait le plus pratique (pour moi, en tout cas), c'est entre la prise jack 3,5 mm et le potentiomètre servant à régler le volume audio.&lt;/p&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/Tandy1000/DSC00870.JPG&quot; /&gt;
&lt;p&gt;Un coup de Dremel fut nécessaire pour &quot;aplatir&quot; le bord intérieur, la courbure empêchant de visser correctement le bouton. Le perçage en lui-même à été fait à la main, avec un alésoir conique (utilisé notamment en modélisme).&lt;/p&gt;
&lt;p&gt;Au niveau du chemin des fils, il faudra faire attention à la position du blindage, du support pour les lecteurs de disquette et des différents connecteurs pour le clavier. Ne pas hésiter à faire des tests avant de couper et souder les fils.&lt;/p&gt;
&lt;p&gt;Au niveau soudures, concrètement, rien de compliqué. Si c'est fait correctement, il n'y a pas besoin de mettre de la colle chaude, ni même de l'epoxy.&lt;/p&gt;
&lt;p&gt;Si jamais vous avez besoin de mettre de la colle chaude ou de l'epoxy pour faire tenir une soudure ou la &quot;renforcer&quot;, c'est qu'il y a un problème. Bref, ne faites jamais ça.&lt;/p&gt;
&lt;p&gt;Pour le blindage, il m'a fallu couper une partie à la cisaille, pour que je puisse le remettre en place.&lt;/p&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/Tandy1000/DSC00865.JPG&quot; /&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;remontage-de-la-machine&quot;&gt;
&lt;h3&gt;Remontage de la machine&lt;/h3&gt;
&lt;p&gt;Normalement, rien ne doit gêner, à aucun moment.&lt;/p&gt;
&lt;p&gt;Le fait d'avoir mis de la gaine thermo au niveau du bouton permet d'empêcher tout court-circuit intempestif avec le blindage (et provoquant voire bloquant le RESET).&lt;/p&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/Tandy1000/DSC00895.JPG&quot; /&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/Tandy1000/DSC00896.JPG&quot; /&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/Tandy1000/DSC00899.JPG&quot; /&gt;
&lt;p&gt;Plus qu'à remettre le capot et la carte d'extension mémoire. Rien de compliqué.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;conclusion&quot;&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Finalement, le plus long fut surtout la lecture de la doc et la recherche de LA solution, celle présentée ici.&lt;/p&gt;
&lt;p&gt;Ce qui est surprenant en fait, c'est que tout a été prévu pour ajouter un bouton RESET sur cette machine, mais celui-ci n'a jamais été câblé. Pourquoi ? On ne le saura probablement pas.&lt;/p&gt;
&lt;p&gt;À noter : la raison pour laquelle je voulais ajouter un bouton RESET, c'était pour comprendre pourquoi la machine plantait aléatoirement, ou ne détectait pas toute la ram, voire foirait le test mémoire à l'allumage/redémarrage de la machine.&lt;/p&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/Tandy1000/mem-error.jpg&quot; /&gt;
&lt;p&gt;En fait, c'était tout simplement le cavalier sur la carte d'extension mémoire qui avait sauté. Celui qui indique quels sont les emplacements mémoire remplis (une partie ou la totalité).&lt;/p&gt;
&lt;p&gt;Une fois un cavalier (le truc bleu sur la photo) placé sur la carte, plus aucun problème.&lt;/p&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/Tandy1000/TandyMemoryExpansionBoard2.jpg&quot; /&gt;
&lt;/div&gt;</content:encoded>
	<dc:date>2020-09-13T22:00:00+00:00</dc:date>
	<dc:creator>alex</dc:creator>
</item>
<item rdf:about="https://fiat-tux.fr/?p=2850">
	<title>Luc Didry: Nexi, un nouveau logi­ciel de gestion de listes</title>
	<link>https://fiat-tux.fr/2020/09/09/nexi-un-nouveau-logiciel-de-gestion-de-listes/</link>
	<content:encoded>&lt;h2&gt;Le besoin&lt;/h2&gt;
&lt;p&gt;Je cher­chais un logi­ciel me permet­tant de gérer la liste des bandes dessi­nées que je souhaite ache­ter.&lt;/p&gt;
&lt;p&gt;Le cahier des charges des éléments des listes était rela­ti­ve­ment simples :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;un nom ;&lt;/li&gt;
&lt;li&gt;éven­tuel­le­ment un numéro, pour indiquer le tome de la série à ache­ter, incré­men­table en un clic (une fois que j’ai acheté un tome, je vais logique­ment avoir envie d’ache­ter le suivant) ;&lt;/li&gt;
&lt;li&gt;un état publié / pas encore publié, pour garder trace des livres dont j’at­tends la publi­ca­tion.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Voilà qui est rela­ti­ve­ment simple… mais pas moyen de trou­ver exac­te­ment ce que je voulais ! Le plus proche était &lt;a href=&quot;https://framapiaf.org/@Carnet&quot;&gt;Carnet&lt;/a&gt; qui en plus avait l’avan­tage d’être synchro­ni­sable avec un serveur Next­cloud et d’avoir une appli­ca­tion Next­cloud, mais il ne faisait pas les numé­ros, et le passage d’une liste à l’autre est un peu lent (reve­nir à l’écran des listes, retrou­ver l’autre liste, cliquer dessus).&lt;/p&gt;
&lt;p&gt;Bref, ça me déman­geait. Et quand ça démange un libriste, le &lt;a href=&quot;https://carlchenet.com/dans-le-libre-gratter-ses-propres-demangeaisons/&quot;&gt;libriste se gratte&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Le déve­lop­pe­ment&lt;/h2&gt;
&lt;p&gt;N’ayant pas envie d’ap­prendre à déve­lop­per une appli­ca­tion Android (Java ? Non, merci, ça ira), j’ai commencé à coder un site web simple (HTML/CSS/JavaS­cript) en me disant que je pour­rais toujours la trans­for­mer en &lt;a href=&quot;https://fr.wikipedia.org/wiki/Progressive_web_app&quot;&gt;progres­sive web app&lt;/a&gt; (PWA) par la suite.&lt;/p&gt;
&lt;p&gt;Une PWA est une page web qui s’ins­talle sur votre télé­phone comme une appli­ca­tion native. Les éven­tuelles données sont stockées de façon locale si vous êtes hors ligne et synchro­ni­sées lors du retour en ligne.&lt;/p&gt;
&lt;p&gt;J’ai donc déve­loppé mon appli­ca­tion, que j’ai commencé par appe­ler « Next Book », puisque le but était de garder la trace de mes livres à ache­ter.&lt;br /&gt;
Cepen­dant, après discus­sion avec quelques amis, je me suis rendu compte que je pouvais utili­ser cette appli­ca­tion pour n’im­porte quel type de liste : une liste de courses, avec le nombre d’ar­ticles à ache­ter par exemple.&lt;br /&gt;
Je l’ai donc renom­mée en Nexi (pour NEXt Item, « élément suivant » en français).&lt;/p&gt;
&lt;p&gt;Au menu, donc :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;appli­ca­tion en javas­cript avec &lt;a href=&quot;https://github.com/alpinejs/alpine&quot;&gt;Alpi­neJS&lt;/a&gt; ;&lt;/li&gt;
&lt;li&gt;CSS généré avec &lt;a href=&quot;https://tailwindcss.com/&quot;&gt;Tail­windCSS&lt;/a&gt; ;&lt;/li&gt;
&lt;li&gt;données stockées en local via &lt;a href=&quot;https://developer.mozilla.org/fr/docs/Web/API/API_IndexedDB&quot;&gt;IndexedDB&lt;/a&gt; grâce à &lt;a href=&quot;https://jsstore.net/&quot;&gt;JsStore&lt;/a&gt; ;&lt;/li&gt;
&lt;li&gt;utili­sa­tion de l’ex­ten­sion de navi­ga­teur &lt;a href=&quot;https://wave.webaim.org/&quot;&gt;WAVE&lt;/a&gt; pour m’as­su­rer de l’ac­ces­si­bi­lité de Nexi.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;À mon cahier des charges, j’ai ajouté quelques petites choses :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;gestion des thèmes clairs et sombres grâce à la fonc­tion­na­lité CSS &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-color-scheme&quot;&gt;&lt;code&gt;prefers-color-scheme&lt;/code&gt;&lt;/a&gt; ;&lt;/li&gt;
&lt;li&gt;multi-langue avec détec­tion du langage du navi­ga­teur mais avec possi­bi­lité de choi­sir la langue que l’on souhaite (code large­ment repris de celui de &lt;a href=&quot;https://luc.frama.io/wemawema/&quot;&gt;WemaWema&lt;/a&gt;) ;&lt;/li&gt;
&lt;li&gt;possi­bi­lité de décré­men­ter le nombre (pour une liste de course, ne pouvoir qu’in­cré­men­ter le nombre n’est pas très pratique) ;&lt;/li&gt;
&lt;li&gt;export et import des données.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;L’ap­pli­ca­tion&lt;/h2&gt;
&lt;figure style=&quot;margin: auto; padding: 10px; width: 511px;&quot;&gt;&lt;img alt=&quot;Une application de gestion de liste, avec une liste remplie de différents éléments&quot; src=&quot;https://fiat-tux.fr/wp-content/uploads/Screenshot_2020-09-09-Nexi1.png&quot; /&gt;&lt;figcaption style=&quot;text-align: center;&quot;&gt;Voici à quoi ressemble Nexi&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;Aucune donnée n’est envoyée à un quel­conque serveur, tout reste dans le navi­ga­teur. J’avoue que j’avais envie d’al­ler vite et pas du tout envie de devoir déve­lop­per un serveur en plus.&lt;/p&gt;
&lt;p&gt;Vous pouvez utili­ser Nexi sur &lt;a href=&quot;https://nexi.fiat-tux.fr/&quot;&gt;https://nexi.fiat-tux.fr/&lt;/a&gt; (qui est une Gitlab Page sur &lt;a href=&quot;https://framagit.org&quot;&gt;Frama­git&lt;/a&gt;, j’avais la flemme de rajou­ter un site sur mon serveur).&lt;/p&gt;
&lt;p&gt;S’il y en a qui ont utilisé l’adresse que j’ai diffusé sur Masto­don ces derniers jours, &lt;a href=&quot;https://fiat-tux.fr/nexi&quot;&gt;https://fiat-tux.fr/nexi&lt;/a&gt;, je vous conseille d’ex­por­ter vos données et d’al­ler sur &lt;a href=&quot;https://nexi.fiat-tux.fr/&quot;&gt;la nouvelle adresse&lt;/a&gt; pour les y impor­ter : je ne sais pas pendant combien de temps je garde­rais l’an­cienne adresse active.&lt;/p&gt;
&lt;p&gt;Pour ceux qui se demandent quel est l’ori­gine de logo, c’est fort simple : Nexi me permet de passer rapi­de­ment un élément de la sous-liste « En cours » du dessus à la sous-liste « Suivant » du dessous. Le logo est donc une repré­sen­ta­tion de cette fonc­tion­na­lité : ce sont deux flèches, l’une poin­tant vers le haut et l’autre vert le bas 🙂&lt;/p&gt;
&lt;figure style=&quot;margin: auto; padding: 10px; width: 192px;&quot;&gt;&lt;img alt=&quot;Une flèche verte pointant vers le haut, sur une flèche mauve claire pointant vers le bas, sur un fond mauve foncé&quot; src=&quot;https://fiat-tux.fr/wp-content/uploads/pwa-nexi-192.png&quot; /&gt;&lt;figcaption&gt;Le logo de Nexi&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;Pour instal­ler Nexi sur votre smart­phone, allez sur le site puis regar­dez dans le menu de votre navi­ga­teur : Fire­fox me propose un simple mais effi­cace « Instal­ler » (j’ignore comment font les autres navi­ga­teurs).&lt;/p&gt;
&lt;h2&gt;Le code&lt;/h2&gt;
&lt;p&gt;Nexi est publiée sous les termes de la &lt;a href=&quot;https://framagit.org/fiat-tux/hat-softwares/nexi/-/blob/master/LICENSE&quot;&gt;GNU Affero Gene­ral Public License v3.0&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Le dépôt git de Nexi est sur Frama­git : &lt;a href=&quot;https://framagit.org/fiat-tux/hat-softwares/nexi&quot;&gt;https://frama­git.org/fiat-tux/hat-soft­wares/nexi&lt;/a&gt;, n’hé­si­tez pas à créer des tickets et à contri­buer, ou à instal­ler Nexi chez vous : c’est aussi simple que de dépo­ser les fichiers du dépôt sur le serveur web 🙂&lt;br /&gt;
Il est aussi possible de contri­buer en tradui­sant Nexi sur &lt;a href=&quot;https://weblate.framasoft.org/projects/nexi/frontend/&quot;&gt;https://weblate.frama­soft.org/projects/nexi/fron­tend/&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;EDIT 10/09/2020 : ajout de la licence.&lt;/p&gt;
&lt;p&gt;Crédit : &lt;a href=&quot;https://unsplash.com/photos/d6xtir5hf4M&quot;&gt;Photo&lt;/a&gt; par &lt;a href=&quot;https://unsplash.com/@daveballew&quot;&gt;David Ballew&lt;/a&gt; sur &lt;a href=&quot;https://unsplash.com/&quot;&gt;Unsplash&lt;/a&gt;&lt;/p&gt;</content:encoded>
	<dc:date>2020-09-09T17:19:30+00:00</dc:date>
	<dc:creator>Luc</dc:creator>
</item>
<item rdf:about="tag:None,2020-07-19:/deploiement-termine">
	<title>Alexandre Bailly: Déploiement terminé du nouveau blog</title>
	<link>https://blog.chibi-nah.fr/deploiement-termine</link>
	<content:encoded>&lt;p&gt;La mise en place de la nouvelle version du blog est terminée.&lt;/p&gt;
&lt;div class=&quot;section&quot; id=&quot;ancienne-version-du-blog&quot;&gt;
&lt;h2&gt;Ancienne version du blog&lt;/h2&gt;
&lt;p&gt;L'ancienne version du blog est toujours accessible à cette adresse : &lt;a class=&quot;reference external&quot; href=&quot;https://blog.chibi-nah.fr/oldblog/&quot;&gt;https://blog.chibi-nah.fr/oldblog/&lt;/a&gt;
Les commentaires sont bien entendu désactivés.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;nouvelle-version-du-blog&quot;&gt;
&lt;h2&gt;Nouvelle version du blog&lt;/h2&gt;
&lt;p&gt;Bien entendu, le déploiement de la nouvelle version ne s'est pas produite sans erreur :&lt;/p&gt;
&lt;pre class=&quot;code literal-block&quot;&gt;remote: rsync: open &quot;blog/deploiement-termine.html&quot; failed: Permission denied (13)
remote: rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1207) [sender=3.1.3]
To blog: blog.chibi-nah.fr.git
   da63214..4194076  master -&amp;gt; master
&lt;/pre&gt;
&lt;p&gt;Là, c'est bon, c'est corrigé.&lt;/p&gt;
&lt;p&gt;Il ne me reste &quot;plus&quot; qu'à écrire de nouveaux articles… mais ça, c'est une autre histoire.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;flux-rss-atom&quot;&gt;
&lt;h2&gt;Flux RSS/Atom&lt;/h2&gt;
&lt;p&gt;&quot;Normalement&quot;, ça devrait être bon avec de la réécriture d'URL (RewriteRule) et une redirection 302 vers la nouvelle adresse du flux RSS (il n'y a plus de flux par catégorie).&lt;/p&gt;
&lt;/div&gt;</content:encoded>
	<dc:date>2020-07-18T22:00:00+00:00</dc:date>
	<dc:creator>alex</dc:creator>
</item>
<item rdf:about="tag:None,2020-07-05:/nouveau-blog-2020">
	<title>Alexandre Bailly: Nouveau blog (2020)</title>
	<link>https://blog.chibi-nah.fr/nouveau-blog-2020</link>
	<content:encoded>&lt;p&gt;Le nouveau blog est maintenant en place. À la place de PluXML, c'est maintenant au tour de Pelican de gérer le contenu.&lt;/p&gt;
&lt;div class=&quot;section&quot; id=&quot;changements&quot;&gt;
&lt;h2&gt;Changements&lt;/h2&gt;
&lt;p&gt;Au niveau changement, le plus visible est probablement le changement du thème. Cependant, le procédé pour la rédaction des articles est complètement différent.&lt;/p&gt;
&lt;p&gt;Les articles sont désormais stockés au format Markdown (pour ceux écrits par le passé), au format reStructuredText pour les nouveaux articles, et cette fois, tout est versionné et géré avec git.&lt;/p&gt;
&lt;p&gt;Par exemple, pour écrire cet article, je tape présentement dans Visual Studio Code, sur mon PC, dans un fichier texte au format rst. Pour la publication, c'est Pelican qui s'en charge automatiquement dès que j'ajoute l'article dans git (git hook). Simple, rapide, et avec peu de contraintes.&lt;/p&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/nouveau-blog-2020/vs.png&quot; /&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;anciens-articles&quot;&gt;
&lt;h2&gt;Anciens articles&lt;/h2&gt;
&lt;p&gt;Pour les anciens articles, le script d'import a pu convertir le contenu des articles, mais pas les métadonnées (date de publication, url). J'ai du repasser sur tous les articles pour ajouter ces informations, de manière à ne pas casser les liens existants vers les articles du blog. Cependant, certaines pages avaient du contenu supplémentaire, sous forme de son ou de vidéo, le script ne les a pas importés. Il me faudra donc repasser sur chacune de ces pages et ajouter le code supplémentaire pour gérer ces médias.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;commentaires&quot;&gt;
&lt;h2&gt;Commentaires&lt;/h2&gt;
&lt;p&gt;Concernant la gestion des commentaires, ça va être très simple : je ne vais plus m'embêter avec. Les anciens commentaires n'ont pas été repris, et je n'ai pas l'intention ; dans un premier temps, en tout cas ; de les reprendre.&lt;/p&gt;
&lt;p&gt;Pour tout commentaire, le plus simple sera de passer par le Fediverse (vous savez comment me joindre).&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;conclusion&quot;&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;En n'ayant plus de grosses contraintes au niveau écriture me permettra d'écrire plus d'articles de blog dans les prochains mois ? Je ne m'avancerai pas trop dessus, mon emploi du temps (professionnel) étant bien chargé jusqu'à février 2021.&lt;/p&gt;
&lt;/div&gt;</content:encoded>
	<dc:date>2020-07-04T22:00:00+00:00</dc:date>
	<dc:creator>alex</dc:creator>
</item>
<item rdf:about="https://fiat-tux.fr/?p=2805">
	<title>Luc Didry: Γνῶθι σεαυτόν, mais avec des logi­ciels libres</title>
	<link>https://fiat-tux.fr/2020/06/28/%ce%b3%ce%bd%e1%bf%b6%ce%b8%ce%b9-%cf%83%ce%b5%ce%b1%cf%85%cf%84%cf%8c%ce%bd-mais-avec-des-logiciels-libres/</link>
	<content:encoded>&lt;p&gt;&lt;em&gt;Γνῶθι σεαυτόν&lt;/em&gt;, &lt;em&gt;Gnothi seau­ton&lt;/em&gt;, « Connais-toi toi-même » en français (hop, &lt;a href=&quot;https://fr.wikipedia.org/wiki/Gnothi_seauton&quot;&gt;lien Wiki­pé­dia&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Les grecs ne pensaient sans doute pas au &lt;a href=&quot;https://fr.wikipedia.org/wiki/Quantified_self&quot;&gt;&lt;em&gt;quan­ti­fied self&lt;/em&gt;&lt;/a&gt; (mesure de soi), mais moi, oui.&lt;/p&gt;
&lt;p&gt;Je ne suis pas un foufou de la mesure de soi, mais ces derniers temps… disons que j’ai des raisons de m’y inté­res­ser.&lt;br /&gt;
Le problème, récur­rent de nos jours, est que quand on a un truc qui prend des mesures, on doit géné­ra­le­ment les refi­ler (les mesures) à une appli­ca­tion ou un site, bref, on s’en dépos­sède allè­gre­ment.&lt;/p&gt;
&lt;p&gt;Mais nous avons de la chance, il existe des logi­ciels libres qui nous permettent de garder nos mesures pour nous.&lt;/p&gt;
&lt;p&gt;Petit tour des logi­ciels et appli­ca­tions libres que j’uti­li­se…&lt;/p&gt;
&lt;h2&gt;Gadget­bridge&lt;/h2&gt;
&lt;p&gt;Il y a de cela plusieurs années, j’ai souhaité une montre connec­tée pour comp­ter mon nombre de pas quoti­diens : ayant un mode de vie très séden­taire, je souhai­tais m’as­su­rer que je me bougeais suffi­sam­ment les fesses.&lt;/p&gt;
&lt;p&gt;J’ai acheté un brace­let &lt;a href=&quot;https://www.angelsensor.com/wristband/&quot;&gt;Angel sensor&lt;/a&gt; car il était open source. Je vous la fais courte : j’ai eu le machin (cher pour ce que c’était), une appli­ca­tion de test (vrai­ment pas utile, c’était pour montrer les possi­bi­li­tés du &lt;a href=&quot;https://fr.wikipedia.org/wiki/Kit_de_d%C3%A9veloppement&quot;&gt;SDK&lt;/a&gt;) et peu de temps après, la boîte a cessé tout déve­lop­pe­ment et toute commu­ni­ca­tion. Bref, c’est tombé à l’eau.&lt;br /&gt;
Cepen­dant, ce projet m’a fait connaître &lt;a href=&quot;https://f-droid.org/en/packages/nodomain.freeyourgadget.gadgetbridge/&quot;&gt;Gadget­bridge&lt;/a&gt;, une appli­ca­tion Android libre qui commu­nique avec de nombreux brace­lets connec­tés.&lt;/p&gt;
&lt;p&gt;J’ai jeté mon dévolu sur un Xiaomi MiBand 2 : petit, pas cher (± 20€), basique, avec les fonc­tion­na­li­tés qui m’in­té­res­saient mais guère plus.&lt;/p&gt;
&lt;p&gt;Ça a très bien fonc­tionné : Gadget­bridge me permet de modi­fier la confi­gu­ra­tion du MiBand, d’y mettre des alarmes, de choi­sir si je veux être averti quand je suis statique trop long­temps (le but : faire quelques exer­cices après être resté trop long­temps sur l’ordi), de récu­pé­rer le nombre de pas, l’ac­ti­vité détec­tée et le rythme cardiaque. Tout ça en gardant les données sur le télé­phone et non en les envoyant aux serveurs de Xiaomi. Et si je gardais le blue­tooth allumé sur le télé­phone, les noti­fi­ca­tions du télé­phone sont trans­mises au brace­let (ça peut être pratique).&lt;/p&gt;
&lt;p&gt;Bref, ça fonc­tion­ne… sauf pour l’as­pect « ça va m’ai­der à me bouger », je n’ai pas réussi à me moti­ver bien long­temps 😅&lt;/p&gt;
&lt;h2&gt;Slee­pyHead&lt;/h2&gt;
&lt;p&gt;En octobre dernier, j’ai eu de très gros problèmes de sommeil, je ne dormais au mieux que 3 heures par nuit, sauf excep­tions, et ça a duré des mois 🙁&lt;/p&gt;
&lt;p&gt;J’ai passé un examen du sommeil en mars (ouaip, pas top les délais de prise de rendez-vous) et il s’avère que je fais des &lt;a href=&quot;https://fr.wikipedia.org/wiki/Hypopn%C3%A9e&quot;&gt;hypo­pnées&lt;/a&gt;. Mais genre bien : 50 à 55 par heure, c’est &lt;strong&gt;très&lt;/strong&gt; violent. La page Wiki­pé­dia de l’&lt;a href=&quot;https://fr.wikipedia.org/w/index.php?title=Index_Apn%C3%A9es_Hypopn%C3%A9es&quot;&gt;Index Apnées Hypo­pnées&lt;/a&gt; indique « les sujets ayant un IAH supé­rieur à 30 sont extrê­me­ment rares ». C’est violent au point qu’il m’est décon­seillé de conduire (parce qu’in­ci­dem­ment, je suis moins alerte et plus sujet aux endor­mis­se­ments que norma­le­ment).&lt;/p&gt;
&lt;p&gt;Le remède est assez simple : un appa­reil à &lt;a href=&quot;https://fr.wikipedia.org/wiki/Ventilation_en_pression_positive_continue&quot;&gt;pres­sion posi­tive conti­nue&lt;/a&gt; (PPC) pendant la nuit. Un machin qui m’en­voie de l’air sous pres­sion dans le nez et/ou la bouche.&lt;/p&gt;
&lt;p&gt;Apparté, si on vous équipe d’un machin comme ça :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;deman­dez direc­te­ment qu’on vous donne le module qui humi­di­fie l’air, ça vous évitera d’avoir les muqueuses dessé­chées et de vous réveiller à cause de dès que l’air ambiant devient sec ;&lt;/li&gt;
&lt;li&gt;si vous avez l’im­pres­sion que l’air que vous expi­rez reste dans le masque (et donc que vous respi­rez votre CO₂), resse­rez les sangles du masque. Ma barbe qui repous­sait (je l’avais rasée pour l’exa­men) faisait des mini-fuites non détec­tées par l’ap­pa­reil, m’em­pê­chant de souf­fler suffi­sam­ment fort pour ouvrir les clapets d’ex­pi­ra­tion.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;L’en­tre­prise médi­cale qui m’a four­nit l’ap­pa­reil peut le confi­gu­rer et récu­pé­rer les mesures à distance. Par contre, rien n’est prévu pour que je puisse accé­der à celles-ci : les utili­sa­teurs les contac­taient dès que le résul­tat de la nuit n’était pas le même que celui de la veille alors ils ont arrêté de permettre aux utili­sa­teurs de voir leurs données. Bon, OK, mais moi je ne suis pas comme ça, et je veux pouvoir consul­ter mes données : être capable de voir si je dors plus ou moins long­temps (parce que bon, si je me contente de regar­der l’heure de réveil, je vais vite oublier), voir si j’ai eu plus d’hy­po­pnées les nuits où je dors peu, etc. Et puis tant qu’à produire des données, il me paraît natu­rel de pouvoir y accé­der.&lt;/p&gt;
&lt;p&gt;Il existe un logi­ciel fait pour accé­der aux données des appa­reils à PPC : &lt;a href=&quot;https://sleepyhead.jedimark.net/&quot;&gt;Slee­pyHead&lt;/a&gt;. Le projet est malheu­reu­se­ment à l’aban­don car le déve­lop­peur a lâché l’af­faire face aux &lt;a href=&quot;https://jedimark.net/2019/02/08/sleepyhead-project-shutdown/&quot;&gt;casse-pieds&lt;/a&gt;. Je n’ai pas les détails, mais c’est malheu­reux de réus­sir à dégoû­ter un déve­lop­peur d’un tel logi­ciel libre.&lt;/p&gt;
&lt;p&gt;Heureu­se­ment, il est encore possible de télé­char­ger Slee­pyHead. La version GNU/Linux propo­sée étant pour Ubuntu 15.04 (une distri­bu­tion d’il y a 5 ans, donc), j’ai préféré compi­ler le logi­ciel depuis les sources. Je n’ai pas eu trop de soucis (à savoir, instal­ler des dépen­dances au fur et à mesure des plan­tages de la compi­la­tion), le README étant clair et les instruc­tions simples.&lt;/p&gt;
&lt;h2&gt;Next­cloud et GpxPod&lt;/h2&gt;
&lt;p&gt;Je dors bien mieux depuis que j’ai mon appa­reil à PPC mais depuis à peu près un mois, quelque soit l’heure à laquelle je me couche, je me réveille tôt. Très tôt. Trop tôt : entre 4 et 5 heures du matin.&lt;/p&gt;
&lt;p&gt;Ça m’est arrivé l’an­née dernière, pendant l’été (sans doute à cause de la chaleur) et j’en avais profité pour marcher tous les matins. Comme c’est plutôt une bonne chose de faire de l’exer­cice et que j’ai (encore) pris du poids, je me suis (re)mis à marcher tous les matins.&lt;/p&gt;
&lt;p&gt;Afin de voir combien de kilo­mètres je faisais, en combien de temps, et si c’était à un rythme régu­lier, j’ai souhaité utili­ser mon smart­phone et &lt;a href=&quot;https://nextcloud.com/&quot;&gt;Next­cloud&lt;/a&gt; avec l’ap­pli­ca­tion &lt;a href=&quot;https://gitlab.com/eneiluj/phonetrack-oc&quot;&gt;PhoneT­rack&lt;/a&gt;.&lt;br /&gt;
Pour le smart­phone, j’ai essayé l’ap­pli­ca­tion conseillée : &lt;a href=&quot;https://f-droid.org/en/packages/net.eneiluj.nextcloud.phonetrack/&quot;&gt;PhoneT­rack&lt;/a&gt;. Zéro pointé : sur près d’un km, ça loguait à peine deux points (par contre, ça les envoyait direc­te­ment au serveur Next­cloud, c’était bien pratique). Je ne sais pas si c’était un mauvais réglage de ma part, mais c’était déce­vant.&lt;br /&gt;
J’ai ensuite essayé l’ap­pli­ca­tion &lt;a href=&quot;https://f-droid.org/en/packages/de.dennisguse.opentracks/&quot;&gt;OpenT­racks&lt;/a&gt; : bien meilleur suivi ! Par contre il fallait expor­ter les trajets vers le serveur Next­cloud (j’avais mis une synchro­ni­sa­tion du dossier d’ex­port vers le serveur) et impor­ter les trajets dans PhoneT­rack. Il y avait encore un souci : le suivi n’était pas très précis. En regar­dant le trajet, on avait l’im­pres­sion de suivre un homme ivre au dernier degré.&lt;/p&gt;
&lt;p&gt;C’est à ce moment que l’en­vie d’une montre GPS m’a titillé. Pour la préci­sion et aussi pour un appa­reil moins encom­brant.&lt;br /&gt;
Entre prix élevés et coûts envi­ron­ne­men­taux des appa­reils neufs, je me suis tourné vers l’oc­ca­sion et j’ai trouvé une montre Garmin Fore­run­ner 110 à 30€. Pas cher, je lui offre une deuxième vie et en plus non connec­tée. Bingo !&lt;br /&gt;
L’as­pect « non connec­tée » est inté­res­sant car il y a moins de chances de se retrou­ver obligé de la connec­ter à une appli­ca­tion parti­cu­lière pour récu­pé­rer les données. J’avais véri­fié le modèle avant l’achat : elle est détec­tée comme clé USB sur un ordi­na­teur… Parfait, donc 🙂&lt;br /&gt;
Et bonus : la montre vient avec un moni­teur de fréquence cardiaque.&lt;/p&gt;
&lt;p&gt;Petit point à noter, toute­fois : les Garmin crachent des fichiers .fit là où le stan­dard pour les traces GPS est le .gpx. Une petite recherche plus tard et je décou­vrais &lt;a href=&quot;https://www.gpsbabel.org/&quot;&gt;&lt;code&gt;gpsbabel&lt;/code&gt;&lt;/a&gt; qui permet de conver­tir les .fit en .gpx (et je peux même ajou­ter au fichier .gpx les rele­vés de fréquence cardiaque).&lt;/p&gt;
&lt;p&gt;Il me fallait récu­pé­rer les fichiers de la montre, les conver­tir avec &lt;code&gt;gpsbabel&lt;/code&gt;, les envoyer au serveur Next­cloud et les impor­ter dans PhoneT­rack. Pas très pratique. J’ai commencé à écrire un script pour auto­ma­ti­ser tout ça avec &lt;a href=&quot;https://nextcloud.com/workflow/&quot;&gt;Next­cloud &lt;em&gt;work­flow&lt;/em&gt;&lt;/a&gt; : il m’au­rait alors suffi de dépo­ser les fichiers sur Next­cloud. Mais le pilo­tage d’ap­pli­ca­tions n’est pas simple depuis un script…&lt;/p&gt;
&lt;p&gt;J’ai regardé les autres appli­ca­tions Next­cloud pour le suivi GPS dans l’es­poir d’en trou­ver une qui ne néces­si­te­rait pas d’im­por­ter manuel­le­ment les fichiers .gpx et j’ai trouvé &lt;a href=&quot;https://gitlab.com/eneiluj/gpxpod-oc&quot;&gt;GpxPod&lt;/a&gt;, du même déve­lop­peur que PhoneT­rack. Non seule­ment, cette appli­ca­tion peut lire les fichiers .gpx d’un dossier mais en plus elle peut conver­tir elle-même les fichiers .fit en .gpx (pour peu que &lt;code&gt;gpsbabel&lt;/code&gt; soit installé sur le serveur) et permet de compa­rer les diffé­rentes traces !&lt;br /&gt;
Bref, tout bénéf : je monte la clé, je dépose les fichiers sur Next­cloud et c’est tout bon, pas besoin de faire un script 😊&lt;/p&gt;
&lt;p&gt;Je vais quand même faire un script pour Next­cloud &lt;em&gt;work­flow&lt;/em&gt; pour extraire la fréquence cardiaque des traces .gpx et utili­ser ces données avec l’ap­pli­ca­tion &lt;a href=&quot;https://github.com/rello/analytics&quot;&gt;Analy­tics&lt;/a&gt;, histoire de voir s’il y a des chan­ge­ments avec l’ha­bi­tude.&lt;/p&gt;
&lt;h2&gt;OpenS­cale&lt;/h2&gt;
&lt;p&gt;Je l’ai dit : j’ai pris du poids. Encore (la dernière fois, c’était en septembre).&lt;/p&gt;
&lt;p&gt;Ce n’est pas que je cède aux sirènes du « Sois mince pour être beau » ou que je n’aime pas mon corps, mais :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;j’ai­me­rais &lt;strong&gt;beau­coup&lt;/strong&gt; ne pas devoir rache­ter des fringues, ça me gonfle d’avoir plein de fringues dans mon armoire que je ne peux plus mettre ;&lt;/li&gt;
&lt;li&gt;le poids influe sur mon sommeil (si je suis moins lourd, je ronfle moins, donc je pense que ça peut influer sur mes hypo­pnées).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Donc je veux surveiller mon poids (et tant qu’à faire, en perdre). Là-dessus, l’ap­pli­ca­tion &lt;a href=&quot;https://f-droid.org/fr/packages/com.health.openscale/&quot;&gt;openS­cale&lt;/a&gt; est nickel : elle me permet de noter mon poids, mais aussi le tour de taille et d’autres mesures, et calcule des trucs toute seule (comme l’&lt;a href=&quot;https://fr.wikipedia.org/wiki/Indice_de_masse_corporelle&quot;&gt;IMC&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Elle fonc­tionne parfai­te­ment bien toute seule mais peut commu­niquer avec des balances connec­tées.&lt;/p&gt;
&lt;p&gt;Depuis près de 3 semaines que je marche 8 kilo­mètres au petit matin et à jeun, je ne vois guère de résul­tat (et sans augmen­ter ma consom­ma­tion de nour­ri­ture, je précise). Souhai­tant savoir si je prenais de la masse muscu­laire ou si, à tout le moins, je perdais de la masse grais­seuse, j’ai acheté une balance impé­dan­ce­mètre suppor­tée par openS­cale : une Sani­tas SBF70 (je n’ai pas trouvé d’oc­ca­sion quand je l’ai ache­tée mais j’en ai trouvé une à l’ins­tant sur ebay (donc on peut en trou­ver d’oc­ca­sion, pour ceux que ça inté­resse)).&lt;/p&gt;
&lt;p&gt;Ça fonc­tionne très bien : je me pèse, et de temps en temps, alors que la balance est encore active, je lance l’ap­pli­ca­tion qui va aller cher­cher l’his­to­rique des pesées.&lt;/p&gt;
&lt;p&gt;Ça ne fait que 3 jours que j’ai la balance, donc je ne sais pas encore s’il y a des varia­tions (les varia­tions que je constate sont minimes, je pense qu’il n’y a rien à en tirer pour l’ins­tant).&lt;/p&gt;
&lt;p&gt;Et si je souhaite exploi­ter les données d’openS­cale, je peux faire une sauve­garde des données et utili­ser la base de données SQLite qui en résulte comme bon me semble 🙂&lt;/p&gt;
&lt;h2&gt;Aver­tis­se­ment&lt;/h2&gt;
&lt;p&gt;Bien évidem­ment, je n’ai été payé par aucune des marques citées dans cet article. Je les ai citées parce qu’il est impor­tant de connaître les marques et modèles exact·es qui fonc­tionnent avec les logi­ciels libres : autant, au niveau ordi­na­teur, ça va plutôt bien main­te­nant, peu de compo­sants posent problème, autant les bidules connec­tés, il y en a beau­coup (la très grande majo­rité) qui sont verrouillés de partout et inex­ploi­tables par des logi­ciels libres.&lt;/p&gt;
&lt;p&gt;Crédit : &lt;a href=&quot;https://unsplash.com/photos/iLKK0eFTywU&quot;&gt;Photo&lt;/a&gt; par &lt;a href=&quot;https://unsplash.com/@themeinn&quot;&gt;Theme Inn&lt;/a&gt; sur &lt;a href=&quot;https://unsplash.com/&quot;&gt;Unsplash&lt;/a&gt;&lt;/p&gt;</content:encoded>
	<dc:date>2020-06-28T11:18:53+00:00</dc:date>
	<dc:creator>Luc</dc:creator>
</item>
<item rdf:about="https://fiat-tux.fr/?p=2792">
	<title>Luc Didry: J’ai retrouvé mon flow de déve­lop­peur</title>
	<link>https://fiat-tux.fr/2020/04/26/jai-retrouve-mon-flow-de-developpeur/</link>
	<content:encoded>&lt;p&gt;Le &lt;em&gt;flow&lt;/em&gt;, c’est quand vous êtes à fond sur une tâche. &lt;a href=&quot;https://page42.org&quot;&gt;Neil Jomunsi&lt;/a&gt; l’ex­plique fort bien dans son article &lt;a href=&quot;https://page42.org/ecrire/une-methode-simple-pour-ecrire-vite-et-bien-le-flow-de-lecrivain/&quot;&gt;Une méthode simple pour écrire vite et bien : le « flow » de l’écri­vain&lt;/a&gt; :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Concept popu­la­risé par le psycho­logue Mihály Csíks­zent­mihá­lyi, le flow est cet état d’in­tense concen­tra­tion qui permet à n’im­porte quel spor­tif, artiste, joueur, moine boud­dhiste, etc de rester foca­lisé sur l’ins­tant présent et d’ou­blier le monde qui l’en­toure pour ne se consa­crer qu’à une chose : l’ac­com­plis­se­ment de sa tâche. Quand on atteint l’état de flow, on s’ou­blie soi-même et on ne fait plus qu’un avec ce que l’on est en train de faire. &lt;strong&gt;Les barrières entre la personne et l’ac­tion s’ef­facent, les deux s’im­briquent pour ne plus faire qu’un.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Cela fait plusieurs mois, voire &lt;a href=&quot;https://fiat-tux.fr/2019/02/11/un-dernier-merci-a-mes-tipeurs-%f0%9f%99%82/&quot;&gt;plus d’un an&lt;/a&gt; que j’ai perdu ma capa­cité à entrer dans un &lt;em&gt;flow&lt;/em&gt; de déve­lop­peur. Si je pouvais toujours coder, c’était plutôt par petites touches, un &lt;em&gt;bugfix&lt;/em&gt; par ci, une petite amélio­ra­tion par là… mais rien de consé­quent, alors qu’il m’ar­ri­vait fréquem­ment par le passé de coder comme un dément.&lt;/p&gt;
&lt;p&gt;Or cela fait main­te­nant plusieurs semaines qu’elle est reve­nue 🙂&lt;br /&gt;
Elle est reve­nue lorsque j’ai décou­vert &lt;a href=&quot;https://github.com/alpinejs/alpine&quot;&gt;Alpi­neJS&lt;/a&gt; et que j’ai décidé de l’uti­li­ser pour réécrire &lt;a href=&quot;https://framagit.org/luc/wemawema&quot;&gt;WemaWema&lt;/a&gt; (la réécri­ture n’est pas encore termi­née). Cette semaine, il s’est mani­festé lorsque j’ai codé le support du &lt;a href=&quot;https://fr.wikipedia.org/wiki/OpenStack#Stockage_objet_:_Swift&quot;&gt;stockage objet Swift&lt;/a&gt; dans &lt;a href=&quot;https://framagit.org/fiat-tux/hat-softwares/lufi/-/tree/swift-storage&quot;&gt;Lufi&lt;/a&gt; pour les besoins de &lt;a href=&quot;https://framasoft.org&quot;&gt;Frama­soft&lt;/a&gt;&lt;sup id=&quot;fnref1:1&quot;&gt;&lt;a class=&quot;footnote-ref&quot; href=&quot;https://fiat-tux.fr/feed/#fn:1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; et hier quand j’ai &lt;a href=&quot;https://framagit.org/fiat-tux/hat-softwares/lufi-cli/-/commit/4dfe1c4f1a889679664cb2486d5e7c602255a008&quot;&gt;ajouté de l’in­té­gra­tion conti­nue&lt;/a&gt; à &lt;a href=&quot;https://framagit.org/fiat-tux/hat-softwares/lufi-cli/&quot;&gt;Lufi-cli&lt;/a&gt; pour construire et &lt;a href=&quot;https://framagit.org/fiat-tux/hat-softwares/lufi-cli/-/releases/v0.0.4&quot;&gt;publier des paquets binaires de Lufi-cli&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Concrè­te­ment, ça fait de très grosses jour­nées de travail, dans un état quasi second. Une transe. Et quand on sort du &lt;em&gt;flow&lt;/em&gt;, on se sent épuisé, vidé, mais heureux (je pense qu’il doit y avoir une sacrée pous­sée d’&lt;a href=&quot;https://fr.wikipedia.org/wiki/Endorphine&quot;&gt;endor­phine&lt;/a&gt; qui rentre en jeu)… et ça fait du bien au moral de façon géné­rale ! 🤗&lt;/p&gt;
&lt;p&gt;Bref : &lt;em&gt;I’m back in the game, baby!&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Crédit : &lt;a href=&quot;https://unsplash.com/photos/tkzd7gTDu8s&quot;&gt;Photo&lt;/a&gt; par &lt;a href=&quot;https://unsplash.com/@enriqueo&quot;&gt;Enrique Ortega&lt;/a&gt; sur &lt;a href=&quot;https://unsplash.com/&quot;&gt;Unsplash&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;footnotes&quot;&gt;
&lt;hr /&gt;
&lt;ol&gt;
&lt;li id=&quot;fn:1&quot;&gt;
&lt;p&gt;D’ailleurs s’il y en a qui veulent tester cette fonc­tion­na­lité, je suis preneur de retours &lt;a class=&quot;footnote-backref&quot; href=&quot;https://fiat-tux.fr/feed/#fnref1:1&quot; rev=&quot;footnote&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</content:encoded>
	<dc:date>2020-04-26T07:32:14+00:00</dc:date>
	<dc:creator>Luc</dc:creator>
</item>
<item rdf:about="tag:www.pboesch.fr,2020-04-25:/2020/04/freebsd-pkg-pre-install-script-failed/">
	<title>Pierre Boesch: FreeBSD : pkg: PRE-INSTALL script failed</title>
	<link>https://www.pboesch.fr/2020/04/freebsd-pkg-pre-install-script-failed/</link>
	<content:encoded>&lt;p&gt;Lors d'un &lt;code&gt;pkg upgrade&lt;/code&gt;, j'ai eu cette erreur :&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;# pkg upgrade
[...]
===&amp;gt; Creating groups.
Using existing group '_tss'.
===&amp;gt; Creating users
Creating user '_tss' with uid '601'.
pw: user '_tss' disappeared during update
pkg: PRE-INSTALL script failed
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;D'après &lt;a href=&quot;https://forums.freebsd.org/threads/error-adding-new-user-pw-user-anne-disappeared-during-update.59525/#post-341447&quot;&gt;ce thread&lt;/a&gt;, l'erreur &lt;code&gt;pkg: PRE-INSTALL script failed&lt;/code&gt; survient lorsque la db password n'est plus synchronisée. Pour corriger cela, il faut re-générer la db avec &lt;a href=&quot;https://www.freebsd.org/cgi/man.cgi?pwd_mkdb&quot;&gt;pwd_mkdb&lt;/a&gt; :&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;pwd_mkdb -p /etc/master.passwd
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Puis on peut relancer &lt;code&gt;pkg&lt;/code&gt; :&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;# pkg upgrade
[...]
[1/39] Installing tpm-emulator-0.7.4_2...
===&amp;gt; Creating groups.
Using existing group '_tss'.
===&amp;gt; Creating users
Using existing user '_tss'.
[1/39] Extracting tpm-emulator-0.7.4_2: 100%
[2/39] Installing libtasn1-4.15.0...
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2020-04-24T22:00:00+00:00</dc:date>
	<dc:creator>Pierre Boesch</dc:creator>
</item>
<item rdf:about="https://fiat-tux.fr/?p=2788">
	<title>Luc Didry: Deux nouveaux articles dans le wiki</title>
	<link>https://fiat-tux.fr/2020/04/19/deux-nouveaux-articles-dans-le-wiki/</link>
	<content:encoded>&lt;p&gt;Juste un petit mot pour annon­cer deux nouveaux articles sur mon wiki :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://wiki.fiat-tux.fr/books/administration-syst%C3%A8mes/page/tinytinyrssnbsp-r%C3%A9tablir-la-consultation-web-des-articles-publi%C3%A9s-%28-bonus%29&quot;&gt;TinyTi­nyRSS : réta­blir la consul­ta­tion web des articles publiés (+ bonus)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://wiki.fiat-tux.fr/books/administration-syst%C3%A8mes/page/une-web-radio-avec-mpd&quot;&gt;Une web radio avec MPD&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded>
	<dc:date>2020-04-19T14:30:22+00:00</dc:date>
	<dc:creator>Luc</dc:creator>
</item>
<item rdf:about="https://fiat-tux.fr/?p=2771">
	<title>Luc Didry: « Le confi­ne­ment ? Ça va pas te chan­ger grand chose ! Ha ha ! »</title>
	<link>https://fiat-tux.fr/2020/03/27/%e2%80%afle-confinement-ca-va-pas-te-changer-grand-chose-ha-ha-%e2%80%af/</link>
	<content:encoded>&lt;p&gt;Cette formule, je l’ai pas mal enten­due ces derniers jours. Pour être honnête, j’ai blagué dessus aussi. Au début.&lt;/p&gt;
&lt;p&gt;Ça fait main­te­nant presque deux semaines que nous sommes confi­nés. Et main­te­nant, cette blague me gonfle.&lt;/p&gt;
&lt;p&gt;Alors oui, c’est vrai que je bosse en télé­tra­vail depuis &lt;a href=&quot;https://fiat-tux.fr/2016/01/12/nouvelle-annee-nouveau-boulot/&quot;&gt;plus de 4 ans&lt;/a&gt;. Et c’est vrai que ma tenue de travail est un pyjama et une robe de chambre. De même, il est vrai qu’il m’ar­rive de ne pas sortir de chez moi plusieurs jours d’af­fi­lée.&lt;/p&gt;
&lt;p&gt;Donc oui, je suis peut-être mieux préparé au confi­ne­ment que la plupart des gens. Mais dire que ça ne me pèse pas serait mentir.&lt;/p&gt;
&lt;p&gt;Déjà parce que, bossant de chez moi, j’ap­pré­cie les sorties hors de ma tanière. Comme j’ha­bite à deux pas d’un super-marché, je ne fais pas de grandes courses : y aller ache­ter deux ou trois trucs tous les deux jours, ça me fait une coupure, une sortie, un bol d’air. J’ai aussi la chance d’avoir une média­thèque toute aussi proche, où je vais régu­liè­re­ment. Et le marché bio/local du vendredi. Et le marché du dimanche. Il y a aussi les cours hebdo­ma­daires de langue japo­naise, les cours mensuels de cuisine japo­naise. Et aller boire des coups avec les amis. Et aller en ville pour passer à la librai­rie. Bref les occa­sions de sortir, que ce soit pour 5 minutes ou plusieures heures ne manquent pas.&lt;/p&gt;
&lt;p&gt;Ensuite, il y a une immense diffé­rence entre rester chez soi par choix (ou flemme) et ne pas pouvoir le faire libre­ment.&lt;/p&gt;
&lt;p&gt;Il y a aussi le fait que mon fils n’ha­bite chez moi qu’une semaine sur deux. Ça veut dire être seul une semaine sur deux. Et actuel­le­ment, quasi­ment sans sortir.&lt;/p&gt;
&lt;p&gt;J’ai la chance d’avoir un balcon, et quand je me fais un café (plusieurs fois par jour donc), je commence par en boire quelques gorgées accoudé à la rambarde. Le calme du quar­tier (dû au confi­ne­ment et à sa consé­quence sur la circu­la­tion) et, cette semaine, le soleil qui revient et les oiseaux qui gazouillent rendent encore plus dur le fait de ne pas pouvoir sortir pour en profi­ter. Je ne peux que regar­der du haut de ma tour de béton.&lt;/p&gt;
&lt;p&gt;Donc, si, le confi­ne­ment, ça change beau­coup de choses pour moi aussi.&lt;/p&gt;
&lt;p&gt;Crédit : &lt;a href=&quot;https://unsplash.com/photos/sxNt9g77PE0&quot;&gt;Photo&lt;/a&gt; par &lt;a href=&quot;https://unsplash.com/@erdaest&quot;&gt;Erda Estre­mera&lt;/a&gt; sur &lt;a href=&quot;https://unsplash.com/&quot;&gt;Unsplash&lt;/a&gt;&lt;/p&gt;</content:encoded>
	<dc:date>2020-03-27T18:24:06+00:00</dc:date>
	<dc:creator>Luc</dc:creator>
</item>
<item rdf:about="tag:None,2020-03-08:/nouvelles-du-blog-2020">
	<title>Alexandre Bailly: Nouvelles du blog</title>
	<link>https://blog.chibi-nah.fr/nouvelles-du-blog-2020</link>
	<content:encoded>&lt;p&gt;Ça fait un moment que j'hésitais à lâcher PluXML. Non pas parce que j'aime pas ce CMS (bien au contraire), mais à cause de certains détails agaçant.&lt;/p&gt;
&lt;p&gt;Je l'utilise depuis 2010 (quasiment une décennie), mais depuis, ma procédure de rédaction des articles a pas mal évolué.&lt;/p&gt;
&lt;p&gt;Mes derniers articles sont rédigés en ReStructuredText (rst), un langage de balisage léger, dans le même style que Markdown ou Textile, via ReText, suivi d'un export au format html, et enfin copier-coller dans l'éditeur html de PluXML.&lt;/p&gt;
&lt;p&gt;Cela fait donc plusieurs étapes entre la rédaction et l'aperçu dans le blog, avec la répétition de toute la procédure si je veux éditer ou corriger un truc.&lt;/p&gt;
&lt;p&gt;À noter : j'utilise la même procédure pour nv, qui tourne aussi sous PluXML.&lt;/p&gt;
&lt;p&gt;Par exemple, la dernière fiction du mercredi a été rédigée en reStructuredText, à partir d'une idée tenant sur une ligne, puis exportée en html, etc.&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;reference external&quot; href=&quot;https://nouvelles.chibi-nah.fr/controle-z-d&quot;&gt;https://nouvelles.chibi-nah.fr/controle-z-d&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Par contre, pour mes pages de docs, j'utilise une procédure totalement différente. Là, je passe par Sphinx-doc, git, et quelques hooks.&lt;/p&gt;
&lt;p&gt;Pour la rédaction, j'utilise aussi bien ReText, Geany ou Visual Studio Code (pas de troll, merci).&lt;/p&gt;
&lt;p&gt;Je génère les pages en local pour contrôler le contenu. Le suivi des révisions étant géré par git, cela signifie donc que je peux aussi bien bosser avec Ryoko comme avec Yue. Et pour la publication ? Un simple git push, et c'est tout. Les pages sont générées sur le serveur puis copiés vers le répertoire de destination. Pas de copie via ftp ou scp. Pas de prise de tête.&lt;/p&gt;
&lt;p&gt;Un processus totalement différent par rapport au blog.&lt;/p&gt;
&lt;p&gt;Mon occupation actuelle est de reprendre tous les articles du blog (un peu moins d'une centaine), que j'ai converti en Markdown, via un script python, dont David Revoy a parlé récemment.&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;reference external&quot; href=&quot;https://www.davidrevoy.com/article756/moving-to-markdown&quot;&gt;https://www.davidrevoy.com/article756/moving-to-markdown&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;reference external&quot; href=&quot;https://github.com/KillianKemps/Pluxml-to-Markdown&quot;&gt;https://github.com/KillianKemps/Pluxml-to-Markdown&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Cependant, le contenu du blog étant essentiellement statique (les commentaires étant modérés, voire carrément désactivés), l'intérêt d'un CMS générant dynamiquement les pages est discutable.
Je pense m'orienter vers un générateur statique. Pas Sphinx-doc, qui ne correspond pas à mes prérequis pour un blog (pour de la documentation, c'est juste génial). Plutôt Pelican (que je teste en ce moment).&lt;/p&gt;
&lt;p&gt;Cela nécessite pas mal de travail. Notamment insérer toutes les métadonnées dans chacune des pages (date de publication, auteur, tags).
Et chose importante : essayer de garder les mêmes URL que celles générées avec PluXML.&lt;/p&gt;
&lt;p&gt;La migration du blog s'effectuera dans les prochaines semaines, une fois les articles corrigés et le thème mis en place.&lt;/p&gt;</content:encoded>
	<dc:date>2020-03-07T23:00:00+00:00</dc:date>
	<dc:creator>alex</dc:creator>
</item>
<item rdf:about="https://fiat-tux.fr/?p=2748">
	<title>Luc Didry: La tech en grève</title>
	<link>https://fiat-tux.fr/2020/01/16/la-tech-en-greve/</link>
	<content:encoded>&lt;p&gt;C’est un fait marquant dans l’his­toire du secteur infor­ma­tique français : &lt;a href=&quot;https://onestla.tech/&quot;&gt;des « tech » râlent et appellent à la grève&lt;/a&gt; (il y a eu un autre appel mais je ne le retrouve pas).&lt;/p&gt;
&lt;p&gt;TL; DR: on bosse dans l’info, on aime auto­ma­ti­ser des trucs, mais c’est pas pour foutre des gens au chômage. Non, c’est pour libé­rer du temps de loisir, bosser moins, mieux vivre.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;L’au­to­ma­ti­sa­tion peut et doit servir l’hu­ma­nité. Elle permet­trait de travailler moins, de partir en retraite plus tôt, et dans d’ex­cel­lentes condi­tions de vie, de déga­ger à tous du temps libre pour étudier, expé­ri­men­ter, pratiquer les sports, les arts, passer du temps en famille ou entre amis ; de vivre.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Bref, je me retrouve beau­coup dans cet appel, que j’ai signé.&lt;/p&gt;
&lt;p&gt;Il y a sur &lt;a href=&quot;https://onestla.tech/&quot;&gt;https://onestla.tech/&lt;/a&gt; des ressources graphiques pour des affiches, des bannières. Géné­ra­le­ment à base de l’émoji « poing levé » : ✊&lt;/p&gt;
&lt;p&gt;Je ne trou­vais pas cet émoji assez vindi­ca­tif à mon goût, donc j’ai été cher­ché un poing levé sur &lt;a href=&quot;https://freesvg.org/&quot;&gt;https://freesvg.org/&lt;/a&gt; (&lt;a href=&quot;https://freesvg.org/download/59583&quot;&gt;lien vers celui que j’ai choisi&lt;/a&gt;). Étant une quiche&lt;sup id=&quot;fnref1:1&quot;&gt;&lt;a class=&quot;footnote-ref&quot; href=&quot;https://fiat-tux.fr/feed/#fn:1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; en graphisme, j’ai lancé un petit appel sur Masto­don et &lt;a href=&quot;https://jcfrog.com/blog/&quot;&gt;JCFrog&lt;/a&gt; a bien voulu mettre des câbles RJ45 dans le poing levé.&lt;/p&gt;
&lt;p&gt;Après ça, un peu d’inks­cape pour mettre de la couleur et du texte, et hop :&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;wp-block-image aligncenter&quot;&gt;&lt;br /&gt;
&lt;a href=&quot;https://fiat-tux.fr/wp-content/uploads/fist.png&quot;&gt;&lt;img alt=&quot;Affiche rouge au format portrait avec, en noir, un poing levé tenant des câbles RJ45, le texte « La tech en grève » et l'adresse https://onestla.tech&quot; src=&quot;https://fiat-tux.fr/wp-content/uploads/fist-212x300.png&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://fiat-tux.fr/wp-content/uploads/fist_paysage.png&quot;&gt;&lt;img alt=&quot;Affiche rouge au format paysage avec, en noir, un poing levé tenant des câbles RJ45, le texte « La tech en grève » et l'adresse https://onestla.tech&quot; src=&quot;https://fiat-tux.fr/wp-content/uploads/fist_paysage-300x212.png&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;wp-block-image aligncenter&quot;&gt;&lt;br /&gt;
&lt;a href=&quot;https://fiat-tux.fr/wp-content/uploads/raised_fist_tech.zip&quot;&gt;Cliquez ici pour une archive conte­nant les fichiers PNG et SVG des affiches&lt;/a&gt;.&lt;br /&gt;
&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://pouet.chapril.org/@elafon&quot;&gt;Édouard Lafon&lt;/a&gt; en a fait une &lt;a href=&quot;https://pouet.chapril.org/users/elafon/statuses/103329844781461295&quot;&gt;version bannière&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Et parce qu’une pancarte en carton, ça s’abîme vite, j’ai peint l’af­fiche sur une toile avec des &lt;a href=&quot;http://www.pebeo.com/Arts-graphiques/Marqueurs/4Artist-Marker&quot;&gt;marqueurs pein­ture&lt;/a&gt; et je n’au­rais plus qu’à l’ac­cro­cher à un manche à balai pour en faire une pancarte 🙂&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;wp-block-image aligncenter&quot;&gt;&lt;br /&gt;
&lt;a href=&quot;https://fiat-tux.fr/wp-content/uploads/tableau_affiche.jpg&quot;&gt;&lt;img alt=&quot;Tableau rouge avec, en noir, un poing levé tenant des câbles RJ45, le texte « La tech en grève » et l'adresse https://onestla.tech&quot; src=&quot;https://fiat-tux.fr/wp-content/uploads/tableau_affiche-169x300.jpg&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;On se retrouve à la manif’ tout à l’heure, cama­rades ?&lt;/p&gt;
&lt;div class=&quot;footnotes&quot;&gt;
&lt;hr /&gt;
&lt;ol&gt;
&lt;li id=&quot;fn:1&quot;&gt;
&lt;p&gt;lorraine, what else? &lt;a class=&quot;footnote-backref&quot; href=&quot;https://fiat-tux.fr/feed/#fnref1:1&quot; rev=&quot;footnote&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</content:encoded>
	<dc:date>2020-01-16T06:30:09+00:00</dc:date>
	<dc:creator>Luc</dc:creator>
</item>
<item rdf:about="tag:www.pboesch.fr,2019-12-22:/2019/12/zabbix-server-et-proxy-dans-une-jail-freebsd/">
	<title>Pierre Boesch: Zabbix Server et Proxy dans une jail FreeBSD</title>
	<link>https://www.pboesch.fr/2019/12/zabbix-server-et-proxy-dans-une-jail-freebsd/</link>
	<content:encoded>&lt;h1 id=&quot;situation&quot;&gt;Situation&lt;/h1&gt;
&lt;p&gt;J'ai récemment débuté un mini projet pour superviser mes serveurs et services avec Zabbix sur FreeBSD, le tout dans des jails. Un serveur chez kimsufi sera le Zabbix Server (dans un jail) et sur mon serveur principal chez OneProvider, j'ai mis en place un Zabbix Proxy (toujours dans une jail). J'ai rencontré deux problèmes bloquants avec la partie serveur et proxy : l'impossibilité de démarrer le serveur et d'importer le schéma de db pour le proxy.&lt;/p&gt;
&lt;h1 id=&quot;zabbix-server&quot;&gt;Zabbix Server&lt;/h1&gt;
&lt;h2 id=&quot;jail-cannot-allocate-shared-memory&quot;&gt;Jail : cannot allocate shared memory&lt;/h2&gt;
&lt;p&gt;Dans une jail FreeBSD, j'ai donc installé le serveur Zabbix. Après avoir &lt;a href=&quot;https://www.zabbix.com/documentation/4.4/manual/appendix/install/db_scripts&quot;&gt;configuré la db&lt;/a&gt;, et crée le fichier de configuration du serveur (&lt;code&gt;/usr/local/etc/zabbix42/zabbix_server.conf&lt;/code&gt;) lorsque je lançais le service, il ne démarrait simplement pas :&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;# /usr/local/etc/rc.d/zabbix_server start&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;# /usr/local/etc/rc.d/zabbix_server status&lt;/span&gt;
zabbix_server is not running.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Un coup d'œil dans les logs Zabbix : &lt;code&gt;zabbix_server [2691]: cannot create locks: cannot allocate shared memory for locks&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Après une recherche, je tombe sur une &lt;a href=&quot;https://zabbix.org/wiki/How_to/configure_shared_memory#FreeBSD&quot;&gt;page du wiki de Zabbix&lt;/a&gt; qui explique qu'il faut augmenter des paramètres du kernel (&lt;code&gt;shmall&lt;/code&gt; et &lt;code&gt;shmmax&lt;/code&gt;) qui sont par défauts trop bas. Rapidement, je m'aperçois que leur documentation est trop vieille : les valeurs qu'ils conseillent d'appliquer sont plus bas que celles appliquées par défaut sur FreeBSD 12. Pour la pérennité, les valeurs par défaut :&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;# ipcs -M&lt;/span&gt;
shminfo:
    shmmax:    &lt;span class=&quot;m&quot;&gt;536870912&lt;/span&gt;    &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;max shared memory segment size&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
    shmmin:            &lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;    &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;min shared memory segment size&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
    shmmni:          &lt;span class=&quot;m&quot;&gt;192&lt;/span&gt;    &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;max number of shared memory identifiers&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
    shmseg:          &lt;span class=&quot;m&quot;&gt;128&lt;/span&gt;    &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;max shared memory segments per process&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
    shmall:       &lt;span class=&quot;m&quot;&gt;131072&lt;/span&gt;    &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;max amount of shared memory in pages&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Celles conseillées par le &lt;em&gt;how to&lt;/em&gt; :&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt; kern.ipc.shmall&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;2097152&lt;/span&gt;
 kern.ipc.shmmax&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;134217728&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;On voit clairement, comme dit plus haut, que les paramètres en place ont une valeurs bien plus élevés.&lt;/p&gt;
&lt;h2 id=&quot;sysv-ipc&quot;&gt;SYSV IPC&lt;/h2&gt;
&lt;p&gt;En continuant mes recherches, j'arrive par hasard sur la &lt;a href=&quot;https://docs.postgresql.fr/10/kernel-resources.html&quot;&gt;documentation PostgreSQL&lt;/a&gt; fait état des mêmes remarques que celle de Zabbix à un détail près : un paramètre spécifique à appliquer sur une jail dont je ne connaissais pas l'existence :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;En cas d'exécution dans une cage FreeBSD en activant &lt;code&gt;security.jail.sysvipc_allowed&lt;/code&gt; de sysctl, les postmaster exécutés dans différentes cages devront être exécutés par différents utilisateurs du système d'exploitation&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Je tente en activant le paramètre &lt;code&gt;allow.sysvipc&lt;/code&gt; dans la jail zabbix :&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;# vim /usr/local/etc/ezjail/zabbix
&lt;span class=&quot;gd&quot;&gt;-export jail_zabbix_parameters=&quot;allow.raw_sockets=1&quot;&lt;/span&gt;
&lt;span class=&quot;gi&quot;&gt;+export jail_zabbix_parameters=&quot;allow.raw_sockets=1 allow.sysvipc=1&quot;&lt;/span&gt;
# ezjail-admin restart zabbix
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Et le service &lt;code&gt;zabbix_server&lt;/code&gt; s'est lancé sans erreur :&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;# /usr/local/etc/rc.d/zabbix_server status&lt;/span&gt;
zabbix_server is running as pid &lt;span class=&quot;m&quot;&gt;5815&lt;/span&gt;.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Après lecture d'un &lt;a href=&quot;https://blog.tyk.nu/blog/freebsd-jails-and-sysv-ipc/&quot;&gt;blogpost très intéressant&lt;/a&gt; &lt;code&gt;SYSV IPC&lt;/code&gt; correpond au &lt;code&gt;Shared Memory&lt;/code&gt;, &lt;code&gt;Semaphores&lt;/code&gt; and &lt;code&gt;Message Queue&lt;/code&gt;. Les jails se partageant le même kernel, quand elles ont besoin de &lt;code&gt;SYSV IPC&lt;/code&gt; elles doivent demander l'autorisation de l'utiliser. Avant FreeBSD 11, on pouvait soit accorder les droits complets soit les refuser totalement via le paramètre que l'on a vu précédemment &lt;code&gt;allow.sysvipc&lt;/code&gt;. Si deux jails ont ce partage de ressources, si l'une d'elle est comprise, elle peut compromettre l'autre également. Depuis FreeBSD 11 donc, on peut utiliser les paramètres &lt;code&gt;sysvshm&lt;/code&gt; et &lt;code&gt;sysvsem&lt;/code&gt; avec la valeur &lt;code&gt;new&lt;/code&gt; (créer un nouveau namespace SYSV pour la jail). J'ai modifié la configuration de ma jail de cette façon :&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;# vim /usr/local/etc/ezjail/zabbix
&lt;span class=&quot;gd&quot;&gt;-export jail_zabbix_parameters=&quot;allow.raw_sockets=1 allow.sysvipc=1&quot;&lt;/span&gt;
&lt;span class=&quot;gi&quot;&gt;+export jail_zabbix_parameters=&quot;allow.raw_sockets=1 sysvshm=new sysvsem=new&quot;&lt;/span&gt;
# ezjail-admin restart zabbix
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Le service démarre toujours et avec de la sécurité :).&lt;/p&gt;
&lt;h1 id=&quot;zabbix-proxy_1&quot;&gt;Zabbix Proxy&lt;/h1&gt;
&lt;h2 id=&quot;import-sql-row-size-too-large-8126&quot;&gt;Import SQL Row size too large (&amp;gt; 8126)&lt;/h2&gt;
&lt;p&gt;Une fois le paquet installé et la db crée, il faut &lt;a href=&quot;https://www.zabbix.com/documentation/4.2/manual/appendix/install/db_scripts#mysql&quot;&gt;importer les données sql du fichier schema.sql&lt;/a&gt;. Pas de bol une nouvelle fois :&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;# mysql -h 192.168.0.4 -uzabbix zabbix_proxy &amp;lt; /usr/local/share/zabbix42/proxy/database/mysql/schema.sql&lt;/span&gt;
mysql: &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;Warning&lt;span class=&quot;o&quot;&gt;]&lt;/span&gt; Using a password on the &lt;span class=&quot;nb&quot;&gt;command&lt;/span&gt; line interface can be insecure.
ERROR &lt;span class=&quot;m&quot;&gt;1118&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;42000&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; at line &lt;span class=&quot;m&quot;&gt;1284&lt;/span&gt;: Row size too large &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&amp;gt; &lt;span class=&quot;m&quot;&gt;8126&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;. Changing some columns to TEXT or BLOB may help. In current row format, BLOB prefix of &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt; bytes is stored inline.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Ce problème &lt;a href=&quot;https://mariadb.com/kb/en/library/innodb-row-formats-overview/#upgrading-causes-row-size-too-large-errors&quot;&gt;est connu&lt;/a&gt; : MariaDB ne calcule pas correctement la taille des lignes pendant l'exécution. Les calculs sont censés être corrigés entre autre en 10.4.7, j'ai pourtant la 10.4.11… :&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;# pkg info | grep mariadb&lt;/span&gt;
mariadb104-client-10.4.11      Multithreaded SQL database &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;client&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
mariadb104-server-10.4.11      Multithreaded SQL database &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;server&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Le lien ci-dessus renvoie vers le &lt;em&gt;bugreport&lt;/em&gt; &lt;a href=&quot;https://jira.mariadb.org/browse/MDEV-19292?focusedCommentId=132239&amp;amp;page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment-132239&quot;&gt;MDEV-19292&lt;/a&gt; où, mis à part désactiver &lt;code&gt;innodb_strict_mode=OFF&lt;/code&gt;, passer la taille des varchar à 255 de la table &lt;em&gt;host_inventory&lt;/em&gt; serait la solution :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Keep InnoDB strict mode enabled, but change some of those varchar(N) columns to varchar(N &amp;gt;= 256 bytes). If the table's default character set is utf8mb4, then that means that N would have to be 64 or more. i.e. this also succeeds in MariaDB 10.2.26.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Un coup de sed dans &lt;code&gt;schema.sql&lt;/code&gt; :&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$ &lt;span class=&quot;nb&quot;&gt;cd&lt;/span&gt; /usr/local/share/zabbix42/proxy/database/mysql/schema.sql
$ sed -i.bak &lt;span class=&quot;s1&quot;&gt;'/CREATE TABLE `host_inventory`/,/PRIMARY KEY/s/varchar([0-9]\{1,\})/varchar(255)/'&lt;/span&gt; schema.sql
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Et effectivement l'import fonctionne sans faute !&lt;/p&gt;</content:encoded>
	<dc:date>2019-12-21T23:00:00+00:00</dc:date>
	<dc:creator>Pierre Boesch</dc:creator>
</item>
<item rdf:about="tag:www.pboesch.fr,2019-12-07:/2019/12/thinkpad-fixer-le-mapping-des-touches-de-luminosite/">
	<title>Pierre Boesch: Thinkpad fixer le mapping des touches de luminosité</title>
	<link>https://www.pboesch.fr/2019/12/thinkpad-fixer-le-mapping-des-touches-de-luminosite/</link>
	<content:encoded>&lt;p&gt;Sur archlinux après une mise à jour du kernel, à priori depuis la 5.3, les touches de réglages de la luminosité de mon Thinkpad X200 ne fonctionnaient plus.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;xev&lt;/code&gt; (permet d'afficher les évênements de X), me confirme que les touches ne sont plus reconnues :&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$ xev
MappingNotify event, serial 32, synthetic NO, window 0x0,
    request MappingKeyboard, first_keycode 8, count 248

MappingNotify event, serial 32, synthetic NO, window 0x0,
    request MappingKeyboard, first_keycode 8, count 248
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Le &lt;a href=&quot;https://wiki.archlinux.org/index.php/backlight#xbacklight&quot;&gt;wiki d'archlinux&lt;/a&gt; donne plusieurs solutions dont celle d'ajouter une section Device de x11 pour utiliser l'option &lt;em&gt;intel-backlight&lt;/em&gt; du driver intel (sur certains modèles il faudra charger &lt;em&gt;acpi_backlight&lt;/em&gt;).&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$ cat /etc/X11/xorg.conf.d/10-intel-backlight.conf
Section &lt;span class=&quot;s2&quot;&gt;&quot;Device&quot;&lt;/span&gt;
    Identifier &lt;span class=&quot;s2&quot;&gt;&quot;Card0&quot;&lt;/span&gt;
    Driver &lt;span class=&quot;s2&quot;&gt;&quot;intel&quot;&lt;/span&gt;
    Option &lt;span class=&quot;s2&quot;&gt;&quot;Backlight&quot;&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;intel_backlight&quot;&lt;/span&gt;
EndSection
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Après un reboot, les touches de luminosités fonctionnent de nouveau et sont effectivement reconnues par &lt;code&gt;xev&lt;/code&gt; :&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;KeyRelease event, serial 41, synthetic NO, window 0xc00001,
    root 0xc4, subw 0x0, time 50185961, (-160,432), root:(484,469),
    state 0x10, keycode 232 (keysym 0x1008ff03, XF86MonBrightnessDown), same_screen YES,
    XLookupString gives 0 bytes:
    XFilterEvent returns: False
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Pour information, avant la solution précédente, rajouter l'option &lt;code&gt;--release&lt;/code&gt; des bindings &lt;code&gt;XF86MonBrightnessUp/Down&lt;/code&gt; dans ma configuration &lt;code&gt;i3&lt;/code&gt; a fonctionné également :&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&quot;gd&quot;&gt;-bindsym XF86MonBrightnessUp exec --no-startup-id xbacklight -inc 5&lt;/span&gt;
&lt;span class=&quot;gi&quot;&gt;+bindsym --release XF86MonBrightnessDown exec --no-startup-id xbacklight -dec 5&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2019-12-06T23:00:00+00:00</dc:date>
	<dc:creator>Pierre Boesch</dc:creator>
</item>
<item rdf:about="tag:www.pboesch.fr,2019-11-22:/2019/11/pacman-52-breaks-dependency-required-by-yay/">
	<title>Pierre Boesch: Pacman 5.2 breaks dependency required by yay</title>
	<link>https://www.pboesch.fr/2019/11/pacman-52-breaks-dependency-required-by-yay/</link>
	<content:encoded>&lt;p&gt;Récemment lorsque j'ai tenté de mettre à jour ArchLinux avec &lt;code&gt;yay&lt;/code&gt; je me suis retrouvé bloqué sur des dépendances cassées avec &lt;code&gt;pacman&lt;/code&gt; :&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$ yay
:: Synchronizing package databases...
 core is up to date
 extra is up to date
 community is up to date
 multilib is up to date
:: Starting full system upgrade...
resolving dependencies...
looking for conflicting packages...
error: failed to prepare transaction (could not satisfy dependencies)
:: installing pacman (5.2.1-1) breaks dependency 'pacman&amp;lt;=5.1.3' required by yay
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Donc impossible de mettre à jour &lt;code&gt;pacman&lt;/code&gt; en 5.2 parce que &lt;code&gt;yay&lt;/code&gt; est dépendant de la version 5.1. La solution rapide pour résoudre ce problème de dépendance entre &lt;code&gt;yay&lt;/code&gt; et &lt;code&gt;pacman&lt;/code&gt; est de supprimer &lt;code&gt;yay&lt;/code&gt;, de mettre à jour son système avec &lt;code&gt;pacman&lt;/code&gt; et réinstaller &lt;code&gt;yay&lt;/code&gt;.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$ sudo pacman -R yay
$ sudo pacman -Syu
$ sudo pacman -S yay
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;code&gt;yay&lt;/code&gt; fonctionne à nouveau :&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$ yay
:: Synchronizing package databases...
 core is up to date                                                            135,6 KiB  2,50 MiB/s 00:00 [----------------------------------------------------------------]
 extra is up to date                                                          1645,9 KiB  2,79 MiB/s 00:01 [----------------------------------------------------------------]
 community is up to date                                                         4,7 MiB  2,46 MiB/s 00:02 [----------------------------------------------------------------]
 multilib is up to date
:: Starting full system upgrade...
resolving dependencies...
looking for conflicting packages...
Packages (183) […]
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2019-11-21T23:00:00+00:00</dc:date>
	<dc:creator>Pierre Boesch</dc:creator>
</item>
<item rdf:about="http://www.simon-florentin.fr/blog/?p=1970">
	<title>Simon Florentin: Fermeture du blog</title>
	<link>http://www.simon-florentin.fr/blog/2019/10/fermeture-du-blog/</link>
	<content:encoded>Salut, Petit message de service pour annoncer la fermeture du blog. En effet, je n’y poste plus rien. Je vais&lt;p class=&quot;readmore&quot;&gt;&lt;a href=&quot;http://www.simon-florentin.fr/blog/2019/10/fermeture-du-blog/&quot; title=&quot;Read Fermeture du blog&quot;&gt;Read more »&lt;/a&gt;&lt;/p&gt;</content:encoded>
	<dc:date>2019-10-24T08:07:24+00:00</dc:date>
	<dc:creator>Simon</dc:creator>
</item>
<item rdf:about="https://fiat-tux.fr/?p=2726">
	<title>Luc Didry: Pous­ser ses filtres SIEVE en ligne de commande et sans mot de passe (avec Kwal­let)</title>
	<link>https://fiat-tux.fr/2019/10/21/pousser-ses-filtres-sieve-en-ligne-de-commande-et-sans-mot-de-passe-avec-kwallet/</link>
	<content:encoded>&lt;p&gt;Les filtres &lt;a href=&quot;https://fr.wikipedia.org/wiki/Sieve&quot;&gt;Sieve&lt;/a&gt; sont des régles de filtrage de mails exécu­tées par le serveur de messa­ge­rie (NB : tous ne le proposent pas). C’est à mon sens l’op­tion la plus propre pour filtrer ses mails : quelque soit mon logi­ciel de consul­ta­tion de mes mails (webmail, client graphique ou textuel sur ordi­na­teur, client sur &lt;em&gt;smart­phone&lt;/em&gt;…), le filtrage sera toujours le même, sans avoir besoin de reco­pier les règles.&lt;/p&gt;
&lt;p&gt;Pour éditer ces règles, il y a plusieurs solu­tions. La solu­tion de group­ware &lt;a href=&quot;https://www.bluemind.net/&quot;&gt;Blue­mind&lt;/a&gt;, que j’uti­lise à titre person­nel et profes­sion­nel four­nit un éditeur graphique sur le webmail, mais il est trop limité pour mon usage : je ne peux que cumu­ler des règles et non pas les mixer, créer des sous règles, etc. Un exemple de sous-règle : si je souhaite que les mails prove­nant de l’adresse &lt;code&gt;foo@example.org&lt;/code&gt; soit rangés dans un dossier &lt;code&gt;foo&lt;/code&gt;, et que si, parmi ces mails, le sujet contient &lt;code&gt;bar&lt;/code&gt;, le mail soit marqué comme lu, je peux écrire en Sieve :&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-sieve&quot;&gt;if allof ( address :contains &quot;from&quot; [&quot;foo@example.org&quot;] ) {
    if allof ( header :contains &quot;Subject&quot; &quot;bar&quot; ) {
        setflag &quot;\\Seen&quot;;
    }
    fileinto &quot;foo&quot;;
    stop;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Mais Blue­mind ne permet pas cela, les règles seront plus basiques (ah, les limi­ta­tions des inter­faces graphiques !). &lt;a href=&quot;https://fr.wikipedia.org/wiki/Mozilla_Thunderbird&quot;&gt;Thun­der­bird&lt;/a&gt; peut utili­ser une exten­sion, &lt;a href=&quot;https://addons.thunderbird.net/fr/thunderbird/addon/sieve/&quot;&gt;Sieve&lt;/a&gt; pour gérer les filtres Sieve, mais je ne sais plus trop ce que ça vaut, ça fait long­temps que je n’uti­lise plus Thun­der­bird. &lt;a href=&quot;https://fr.wikipedia.org/wiki/KMail&quot;&gt;Kmail&lt;/a&gt;, le client de messa­ge­rie de &lt;a href=&quot;https://fr.wikipedia.org/wiki/KDE&quot;&gt;KDE&lt;/a&gt; et que j’uti­lise, permet de gérer (nati­ve­ment) les filtres Sieve de façon graphique mais pous­sée ou… de les écrire direc­te­ment. Voilà qui est top ! Ah mais… c’est pas ouvert dans &lt;a href=&quot;https://fr.wikipedia.org/wiki/Vim&quot;&gt;Vim&lt;/a&gt;. Dommage, j’ai mes petites habi­tudes et j’ai horreur d’uti­li­ser un autre éditeur de texte.&lt;/p&gt;
&lt;h2&gt;La ligne de commande : sieve-connect&lt;/h2&gt;
&lt;p&gt;Donc, person­nel­le­ment, j’uti­lise Vim pour écrire mes scripts Sieve et &lt;a href=&quot;https://packages.debian.org/buster/sieve-connect&quot;&gt;sieve-connect&lt;/a&gt; pour les envoyer à mon serveur de messa­ge­rie. Exemple :&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sieve-connect -s serveur.example.org -p 2000 -u luc@example.org \
 --localsieve /home/luc/filter.siv --upload --remotesieve mes_regles.sieve&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Expli­ca­tion des options :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-s serveur.example.org&lt;/code&gt; : l’adresse du serveur ;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-p 2000&lt;/code&gt; : le port utilisé par le serveur pour l’in­ter­face de gestion des filtres Sieve ;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-u luc@example.org&lt;/code&gt; : mon login ;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--localsieve /home/luc/filter.siv&lt;/code&gt; : l’adresse du fichier à pous­ser ;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--upload&lt;/code&gt; : l’ac­tion à entre­prendre, donc l’en­voi au serveur ;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--remotesieve mes_regles.sieve&lt;/code&gt; : le nom du fichier distant dans lequel je vais pous­ser mes règles. On peut effec­ti­ve­ment avoir plusieurs fichiers de règles, mais un seul sera actif. Pratique pour avoir des règles spéciales pour les vacances : il n’y a qu’à acti­ver le fichier qui les contient et zou 🙂&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Là-dessus, sieve-connect va me deman­der mon mot de passe et hop, c’est poussé !&lt;/p&gt;
&lt;p&gt;Sieve-connect permet d’en­voyer des règles, de les récu­pé­rer, de lister les fichiers de règles, d’ac­ti­ver l’un ou l’autre. Bien pratique donc !&lt;/p&gt;
&lt;h2&gt;Et le mot de passe ?&lt;/h2&gt;
&lt;p&gt;Pour ne pas avoir à donner mon mot de passe à chaque fois sans pour autant le mettre dans un script, je vais profi­ter de &lt;a href=&quot;https://en.wikipedia.org/wiki/KWallet&quot;&gt;KWal­let&lt;/a&gt;, le gestion­naire de mot de passe de KDE contient déjà le mot de passe de mon compte mail, puisque j’uti­lise Kmail. Donc autant le lui deman­der !&lt;/p&gt;
&lt;p&gt;Je peux deman­der l’ac­cès au porte­feuille de mot de passe via &lt;a href=&quot;https://fr.wikipedia.org/wiki/D-Bus&quot;&gt;D-Bus&lt;/a&gt; :&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;qdbus org.kde.kwalletd5 /modules/kwalletd5 open kdewallet imap &quot;Sieve push&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;La chaîne &lt;code&gt;&quot;Sieve push&quot;&lt;/code&gt; est le nom que je déclare pour mon « appli­ca­tion ». Kwal­let me deman­dera si j’au­to­rise l’ap­pli­ca­tion « Sieve push » à accé­der au porte­feuille. Cette commande va me retour­ner un &lt;code&gt;handle&lt;/code&gt; que je vais utili­ser dans mes demandes ulté­rieures. En allant voir dans l’ap­pli­ca­tion graphique de gestion Kwal­let, KWal­letMa­na­ger, je vois que le mot de passe de mon compte de messa­ge­rie est &lt;code&gt;akonadi_imap_resource_1rc&lt;/code&gt; du dossier &lt;code&gt;imap&lt;/code&gt;. Donc pour en deman­der le mot de passe, je fais :&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;qdbus org.kde.kwalletd5 /modules/kwalletd5 readPassword le_handle_obtenu_avant \
 imap akonadi_imap_resource_1rc &quot;Sieve push&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;NB : on notera que je répète le nom de mon appli­ca­tion, &lt;code&gt;&quot;Sieve push&quot;&lt;/code&gt;, dans la commande. C’est néces­saire.&lt;/p&gt;
&lt;p&gt;Plus qu’à donner le mot de passe à sieve-connect. Pour simpli­fier, je combine tout ça dans une fonc­tion que je vais mettre dans mon &lt;code&gt;~/.zshrc&lt;/code&gt; :&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sievepush() {
    ID=$(qdbus org.kde.kwalletd5 /modules/kwalletd5 open kdewallet imap &quot;Sieve push&quot;)
    echo $(qdbus org.kde.kwalletd5 /modules/kwalletd5 readPassword $ID imap akonadi_imap_resource_1rc &quot;Sieve push&quot;) | sieve-connect -s serveur.example.org -p 2000 -u luc@example.org --localsieve /home/luc/filter.siv --upload --remotesieve mes_regles.sieve
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Et voilà ! Plus qu’à lancer &lt;code&gt;sievepush&lt;/code&gt; depuis mon termi­nal et ça enverra mon fichier de filtres à mon serveur de messa­ge­rie. Si mon porte­feuille KWal­let est ouvert, ça partira direct, sinon, ça me deman­dera le mot de passe du porte­feuille.&lt;/p&gt;
&lt;p&gt;Crédit : &lt;a href=&quot;https://unsplash.com/photos/W9rOPHK--RQ&quot;&gt;Photo&lt;/a&gt; par &lt;a href=&quot;https://unsplash.com/@jtylernix&quot;&gt;Tyler Nix&lt;/a&gt; sur &lt;a href=&quot;https://unsplash.com/&quot;&gt;Unsplash&lt;/a&gt;&lt;/p&gt;</content:encoded>
	<dc:date>2019-10-21T14:34:14+00:00</dc:date>
	<dc:creator>Luc</dc:creator>
</item>
<item rdf:about="https://fiat-tux.fr/?p=2718">
	<title>Luc Didry: Scan­ner et impor­ter faci­le­ment ses livres sur Inven­taire.io</title>
	<link>https://fiat-tux.fr/2019/10/12/scanner-et-importer-facilement-ses-livres-sur-inventaire-io/</link>
	<content:encoded>&lt;p&gt;J’ai des livres. Plein. Peut-être trop. On s’en fout. Le truc, c’est qu’une belle collec­tion comme ça, c’est mieux quand elle est cata­lo­guée.&lt;/p&gt;
&lt;p&gt;D’où mon inté­rêt pour &lt;a href=&quot;https://inventaire.io&quot;&gt;inven­taire.io&lt;/a&gt; : c’est un plate-forme (&lt;a href=&quot;https://github.com/inventaire/inventaire&quot;&gt;libre&lt;/a&gt; !) sur laquelle on peut impor­ter ses livres, les marquer comme dispo­nibles au don ou au prêt, se connec­ter avec des gens, regar­der les inven­taires des uns et des autres, faire une demande de prêt… &lt;/p&gt;
&lt;p&gt;C’est très simple d’em­ploi et si on four­nit l’&lt;a href=&quot;https://fr.wikipedia.org/wiki/Isbn&quot;&gt;ISBN&lt;/a&gt; d’un livre, la plate-forme va essayer de récu­pé­rer les données (auteur, couver­ture, synop­sis, etc) toute seule via wiki­data et d’autres sources de données. Très pratique donc. Le site propose même un scan­ner de code-barres ! Pile-poil avec un smart­phone, mais ça devrait même aussi fonc­tion­ner avec une webcam. On peut aussi utili­ser une appli­ca­tion de scan­ner de code-barres, on n’est pas obligé d’uti­li­ser celui du site.&lt;/p&gt;
&lt;p&gt;Par contre, si scan­ner des codes-barres avec un télé­phone est pratique, véri­fier et vali­der les livres qui résultent du scan­nage sur le télé­pho­ne… c’est un peu bof. Surtout si comme moi vous scan­nez les livres par paquets de 50. L’idéal est donc de scan­ner avec son télé­phone et de vali­der sur l’or­di­na­teur…&lt;/p&gt;
&lt;h2&gt;KDECon­nect pour la liai­son télé­phone — ordi­na­teur&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://community.kde.org/KDEConnect&quot;&gt;KDECon­nect&lt;/a&gt; est un outil très pratique pour contrô­ler son ordi­na­teur depuis son télé­phone : y envoyer des fichiers, gérer le lecteur multi­mé­dia… Et dans l’autre sens, on peut accé­der à l’es­pace disque de son télé­phone depuis son ordi­na­teur. Mais surtout, la &lt;em&gt;killer feature&lt;/em&gt;, pour moi, c’est le partage du presse-papier : je copie un truc sur le télé­phone ou sur l’ordi et son contenu se retrouve dans le presse-papier de l’autre appa­reil.&lt;/p&gt;
&lt;p&gt;Pour utili­ser KDECon­nect, il faut l’ap­pli­ca­tion KDECon­nect (dispo­nible sur F-Droid, je ne sais pas si elle est sur le play store) et sur l’or­di­na­teur, il faut instal­ler le paquet &lt;code&gt;kdeconnect&lt;/code&gt; et lancer les appli­ca­tions (&lt;code&gt;/usr/lib/x86_64-linux-gnu/libexec/kdeconnectd&lt;/code&gt; pour lancer la version ordi­na­teur depuis la ligne de commande pour une Debian). Il y a aussi une version pour Gnome : &lt;a href=&quot;https://extensions.gnome.org/extension/1319/gsconnect/&quot;&gt;gscon­nect&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Ensuite, il faut que les deux appa­reils soient dans le même réseau. Après, il n’y a plus qu’à appa­reiller les appa­reils.&lt;/p&gt;
&lt;h2&gt;Barcode scan­ner sur le télé­phone&lt;/h2&gt;
&lt;p&gt;Instal­lez Barcode scan­ner (dispo­nible sur F-Droid) sur votre télé­phone et confi­gu­rez-le pour qu’il copie ce qu’il scanne dans le presse-papier.&lt;/p&gt;
&lt;p&gt;On y est presque : avec ces deux outils, l’or­di­na­teur peut d’ores et déjà rece­voir dans son presse-papier les codes-barres que vous allez scan­ner.&lt;/p&gt;
&lt;h2&gt;Surveiller le presse-papier avec Clip­no­tify&lt;/h2&gt;
&lt;p&gt;J’ai trouvé un projet, &lt;a href=&quot;https://github.com/cdown/clipnotify/&quot;&gt;Clip­no­tify&lt;/a&gt; qui permet de surveiller le contenu du presse-papier. Télé­char­gez la dernière version sur &lt;a href=&quot;https://github.com/cdown/clipnotify/releases&quot;&gt;https://github.com/cdown/clip­no­tify/releases&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Enre­gis­trer les codes-barres dans un fichier&lt;/h2&gt;
&lt;p&gt;Vous aurez aussi besoin de &lt;code&gt;xsel&lt;/code&gt; pour accé­der au contenu du presse-papier (Clip­no­tify ne donne pas le contenu de celui-ci, il se contente de regar­der s’il change), ainsi que de &lt;code&gt;tee&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Ensuite vous n’au­rez plus qu’à lancer cette petite commande :&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;while clipnotify
do
    ISBN=$(xsel)
    echo $ISBN | tee -a /tmp/clip.log
done&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Faites &lt;code&gt;Ctrl+C&lt;/code&gt; pour arrê­ter.&lt;/p&gt;
&lt;p&gt;NB: Je ne &lt;em&gt;pipe&lt;/em&gt; pas direc­te­ment &lt;code&gt;xsel&lt;/code&gt; vers &lt;code&gt;tee&lt;/code&gt; car &lt;code&gt;xsel&lt;/code&gt; ne fait pas de retour à la ligne. Notez aussi que vous pouvez vous passer de &lt;code&gt;tee&lt;/code&gt; en faisant &lt;code&gt;echo $ISBN &amp;gt;&amp;gt; /tmp/clip.log&lt;/code&gt;, mais j’aime bien voir direc­te­ment sur le termi­nal ce qui écrit dans &lt;code&gt;/tmp/clip.log&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Pour une raison que j’ignore, chaque contenu de press-papier se retrouve écrit plusieurs fois dans le fichier &lt;code&gt;/tmp/clip.log&lt;/code&gt;. Corri­ger le fichier n’est pas diffi­cile :&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;uniq /tmp/clip.log  | grep &quot;^97&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ou (au cas où on scanne le même livre deux fois par inad­ver­tance) :&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sort -u /tmp/clip.log  | grep &quot;^97&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Le &lt;code&gt;grep&lt;/code&gt; est là pour se déba­ras­ser des codes-barres mal scan­nés : un ISBN comment toujours par 978 ou 979. Pensez à regar­der le numéro que vous indique avoir scanné Barcode scan­ner !&lt;/p&gt;
&lt;p&gt;Voilà. Vous avez main­te­nant une belle liste d’ISBN qu’il nous suffit désor­mais de coller sur &lt;a href=&quot;https://inventaire.io/add/import&quot;&gt;https://inven­taire.io/add/import&lt;/a&gt; 🙂&lt;/p&gt;
&lt;p&gt;Et si vous voulez voir ce que j’ai dans ma biblio­thèque, vous pouvez aller voir sur &lt;a href=&quot;https://inventaire.io/inventory/framasky&quot;&gt;https://inven­taire.io/inven­tory/framasky&lt;/a&gt; (mais je suis encore en train d’im­por­ter mes bouquins, j’ai pas fini de tout scan­ner).&lt;/p&gt;
&lt;p&gt;EDIT (12/10/2019) : ajout du &lt;code&gt;grep&lt;/code&gt; pour enle­ver les codes-barres mal scan­nés.&lt;/p&gt;
&lt;p&gt;Crédit : &lt;a href=&quot;https://unsplash.com/photos/MAYsdoYpGuk&quot;&gt;Photo&lt;/a&gt; par &lt;a href=&quot;https://unsplash.com/@elifrancis&quot;&gt;Eli Fran­cis&lt;/a&gt; sur &lt;a href=&quot;https://unsplash.com/&quot;&gt;Unsplash&lt;/a&gt;&lt;/p&gt;</content:encoded>
	<dc:date>2019-10-12T15:06:49+00:00</dc:date>
	<dc:creator>Luc</dc:creator>
</item>
<item rdf:about="tag:None,2019-08-30:/visual-studio-clavier-typematrix-bepo-et-underscore">
	<title>Alexandre Bailly: Visual Studio, clavier TypeMatrix™ bépo et underscore</title>
	<link>https://blog.chibi-nah.fr/visual-studio-clavier-typematrix-bepo-et-underscore</link>
	<content:encoded>&lt;div class=&quot;section&quot; id=&quot;ou-comment-se-prendre-la-tete-pour-pouvoir-taper-le-caractere&quot;&gt;
&lt;h2&gt;Ou comment se prendre la tête pour pouvoir taper le caractère _&lt;/h2&gt;
&lt;p&gt;Lors de la migration vers les nouvelles versions des outils en environnement professionnel, on peut rencontrer des problèmes complètement inattendus, et non documentés. D’autant plus s’il s’agit de produits Microsoft, où le support est absolument incapable de trouver l’origine du problème. Je ne parlerai pas des “experts” certifiés MSVP¹, pour qui le problème vient du clavier.&lt;/p&gt;
&lt;p&gt;Là où c'est amusant, c’est que la touche fonctionne dans le champ de recherche mais pas dans l'éditeur.&lt;/p&gt;
&lt;p&gt;J’avais rencontré ce problème avec Microsoft SQL Server Management Studio pour SQL Server 2017 (basé sur vs2015), et mon contournement était de taper l’underscore dans le bloc-note, puis de faire un copier-coller à chaque fois que j’en avais besoin, c’est-à-dire en permanence.&lt;/p&gt;
&lt;p&gt;L’utilisant nettement moins souvent dans Visual Studio et ayant également Visual Studio Code (j’utilise plus ce dernier que la solution ultra lourde, d’ailleurs, et la touche underscore fonctionne, elle, sur VS Code), et les recherches de la solution s'avérant infructueuses, j’allais abandonner, jusqu’au moment, où au détour d’un message sur Stack Overflow, quelqu’un en Allemagne semblait avoir un problème similaire, mais avec un autre caractère ; sauf que là, une piste était donnée.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;les-raccourcis-claviers&quot;&gt;
&lt;h2&gt;Les raccourcis claviers&lt;/h2&gt;
&lt;p&gt;Certes, très utiles (enlevez-moi mon Ctrl + B et je pète un câble), mais parfois problématiques.&lt;/p&gt;
&lt;p&gt;Après quelques tests stupides que je ne détaillerai pas, il s’avère que VS (depuis 2012 ? 2015 ?) détermine d’abord la séquence de touches, exécute le raccourci-clavier si celui-ci correspond, sinon insère le caractère pouvant correspondre à la même séquence.&lt;/p&gt;
&lt;p&gt;Sur un TypeMatrix™ bépo, le caractère underscore _ s'obtient via Alt gr + espace. Sauf que Alt gr sous Windows, c’est un raccourci pour Ctrl + Alt. Donc, le caractère underscore _ correspond donc à Ctrl + Alt + Espace. Vous voyez venir la blague ?&lt;/p&gt;
&lt;p&gt;Cette séquence de touches est attribuée à un raccourci clavier dans le mode éditeur. Et donc, prend le pas sur l’insertion du caractère tant désiré. Les raccourcis clavier ne s’appliquant pas dans le champ de recherche, cela explique pourquoi le _ peut être saisi sans aucun problème.&lt;/p&gt;
&lt;p&gt;On a maintenant l’explication, du coup, corrigeons le problème.&lt;/p&gt;
&lt;p&gt;Les captures d’écrans proviennent de Visual Studio 2017, mais c’est la même démarche dans MS SQL Server Management Studio.&lt;/p&gt;
&lt;p&gt;Aller dans le menu « Outils », puis cliquer sur « Options… ».&lt;/p&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/vs-bepo/vs-bepo-1.png&quot; /&gt;
&lt;p&gt;Dans la fenêtre, cliquer sur « Clavier » sur la gauche.&lt;/p&gt;
&lt;p&gt;La liste des raccourcis clavier s’affiche. Comme celle-ci est trop longue, on ne va pas les vérifier un par un.&lt;/p&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/vs-bepo/vs-bepo-2.png&quot; /&gt;
&lt;p&gt;Cliquer dans le champ texte sous « Appuyer sur les touches de raccourci : » puis appuyer les touches Alt gr + Espace. Cela insère bien le raccourci clavier Ctrl + Alt + Espace, ici en 1 sur la capture d’écran.&lt;/p&gt;
&lt;p&gt;Le nom de la commande utilisant ce raccourci clavier apparaît alors sous « Raccourci actuellement utilisé par : », ici en 2 sur la capture d’écran.&lt;/p&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/vs-bepo/vs-bepo-3.png&quot; /&gt;
&lt;p&gt;Cliquer dans le champ texte sous « Afficher les commandes contenant : ».&lt;/p&gt;
&lt;p&gt;Taper ensuite le nom de la commande (même partiellement) pour filtrer l’affichage.&lt;/p&gt;
&lt;p&gt;Cliquer ensuite sur le nom de la commande, ici, la sélection en bleu sur la capture d’écran.&lt;/p&gt;
&lt;img alt=&quot;&quot; src=&quot;https://blog.chibi-nah.fr/feeds/images/vs-bepo/vs-bepo-4.png&quot; /&gt;
&lt;p&gt;Cliquer sur le bouton « Supprimer », ici en 1 sur la capture d’écran.&lt;/p&gt;
&lt;p&gt;Vérifier que le raccourci est bien supprimé, ici en 2 sur la capture d’écran.&lt;/p&gt;
&lt;p&gt;Cliquer sur « OK », ici en 3 sur la capture d’écran pour valider et fermer la fenêtre.&lt;/p&gt;
&lt;p&gt;Essayez de taper le caractère underscore. Cela devrait fonctionner.&lt;/p&gt;
&lt;p&gt;Normalement, il y a un seul raccourci clavier avec cette séquence de touches. Si la touche n’est toujours pas reconnue, recommencer les manipulations pour trouver les autres commandes utilisant également cette séquence de touches.&lt;/p&gt;
&lt;p&gt;---&lt;/p&gt;
&lt;p&gt;¹ : Il suffit d’apprendre par cœur les annales et de réciter le tout par cœur² pour avoir la certification. Des gamins de 12 ans sont tout à fait capables (et certain·e·s l’ont obtenu).&lt;/p&gt;
&lt;p&gt;² : La raison pour laquelle je n’ai pas ces certifications. Celles et ceux me connaissant IRL savent pourquoi.&lt;/p&gt;
&lt;/div&gt;</content:encoded>
	<dc:date>2019-10-11T22:00:00+00:00</dc:date>
	<dc:creator>alex</dc:creator>
</item>
<item rdf:about="https://fiat-tux.fr/?p=2678">
	<title>Luc Didry: Instal­ler l’ex­ten­sion Netflix sur Kodi</title>
	<link>https://fiat-tux.fr/2019/08/19/installer-lextension-netflix-sur-kodi/</link>
	<content:encoded>&lt;p&gt;Bon… j’aime pas Netflix parce que ça utilise des &lt;a href=&quot;https://fr.wikipedia.org/wiki/Gestion_des_droits_num%C3%A9riques&quot;&gt;DRM&lt;/a&gt; et que ça pue du cul mais la mère de mon gamin a pris un abon­ne­ment (à deux écrans, pour elle et lui) et comme j’ai pas envie qu’il s’use les yeux à regar­der Netflix sur son télé­phone quand il est chez moi… j’ai installé l’ex­ten­sion Netflix sur le &lt;a href=&quot;https://kodi.tv/&quot;&gt;Kodi&lt;/a&gt; du &lt;a href=&quot;https://www.raspberrypi.org/&quot;&gt;rasp­berry pi&lt;/a&gt; du salon, qui est relié à un vidéo-projec­teur.&lt;/p&gt;
&lt;p&gt;J’ai utilisé ce tuto­riel : &lt;a href=&quot;https://kwartix.wordpress.com/2019/05/13/netflix-raspberry-et-kodi/&quot;&gt;https://kwar­tix.word­press.com/2019/05/13/netflix-rasp­berry-et-kodi/&lt;/a&gt;. Bien fait, mais j’ai rencon­tré des diffi­cul­tés, donc je refais un article avec tout ce que j’au­rais voulu savoir.&lt;/p&gt;
&lt;h2&gt;Pré-requis&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;avoir Kodi en version 18 mini­mum. Ça ne m’a pas posé de problème puisque c’était déjà le cas pour moi, mais c’est bon à savoir ;&lt;/li&gt;
&lt;li&gt;avoir au moins 2Gio d’es­pace libre : pour choper le bazar de DRM qui va bien, l’ex­ten­sion va télé­char­ger une image Chrome OS, et c’est volu­mi­neux.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Ce qui va nickel dans le tuto&lt;/h2&gt;
&lt;p&gt;On installe des dépen­dances :&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo apt install python-pip python-crypto build-essential \
  python-all-dev python-setuptools python-wheel \
  python-crypto-dbg python-crypto-doc python-pip-whl
pip install pycryptodomex
sudo ln -s /usr/lib/python2.7/dist-packages/Crypto /usr/lib/python2.7/dist-packages/Cryptodome&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;NB&lt;/strong&gt; : j’ai fait le &lt;code&gt;pip&lt;/code&gt; en &lt;code&gt;root&lt;/code&gt;, vu que quand j’ai plusieurs commandes &lt;code&gt;sudo&lt;/code&gt; à taper, je m’em­bête pas et je me mets en &lt;code&gt;root&lt;/code&gt;. Je ne sais pas si ça peut faire une diffé­rence quel­conque.&lt;/p&gt;
&lt;h2&gt;Une petite typo&lt;/h2&gt;
&lt;p&gt;Ça, je l’ai dit en &lt;a href=&quot;https://kwartix.wordpress.com/2019/05/13/netflix-raspberry-et-kodi/#comment-12&quot;&gt;commen­taire de l’ar­ticle&lt;/a&gt; : une URL n’est pas bonne. Ça arrive.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;wget https://raw.githubusercontent.com/sonpero/Netflix/master/repository.castagnait-1.0.0.zip&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;L’URL de l’ar­ticle pointe sur la page github du fichier et non sur le fichier lui-même.&lt;/p&gt;
&lt;p&gt;Après cela, on installe ce fichier dans Kodi comme une exten­sion via l’ins­tal­la­tion par fichier zip. Ce n’est cepen­dant pas une exten­sion : c’est un dépôt d’ex­ten­sion qu’on installe là.&lt;/p&gt;
&lt;h2&gt;Les problèmes commencent&lt;/h2&gt;
&lt;p&gt;Il est tout à fait possible que l’au­teur de l’ar­ticle origi­nel n’ait pas rencon­tré les soucis suivants, mais moi si, ce qui justi­fie cet article.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;au moment d’ins­tal­ler l’ex­ten­sion Netflix via le nouveau dépôt, j’ai eu droit, comme sous Android, à un message indiquant que l’ins­tal­la­tion d’ex­ten­sion via des sources incon­nues n’était pas auto­risé. Un petit tour dans les para­mètres (le message a la bonne idée d’in­clure un bouton pour s’y rendre direc­te­ment) et c’est réglé ;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;une fois l’ex­ten­sion instal­lée et les iden­ti­fiants rentrés, impos­sible de lire une vidéo : il me manquait l’ex­ten­sion &lt;a href=&quot;https://kodi.wiki/view/Add-on:InputStream_Adaptive&quot;&gt;InputS­tream Adap­tive&lt;/a&gt;, et impos­sible de la trou­ver dans les dépôts. En fait, ayant installé Kodi à partir des dépôts &lt;a href=&quot;https://www.deb-multimedia.org/&quot;&gt;Deb Multi­me­dia&lt;/a&gt;, il me fallait l’ins­tal­ler depuis les paquets Debian (et j’en ai installé un autre avec, il me semble qu’ils sont rela­ti­ve­ment liés) :&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;apt install kodi-inputstream-adaptive kodi-inputstream-rtmp&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Puis un petit redé­mar­rage de Kodi pour qu’il voit ces nouvelles exten­sions ;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;Après, au lance­ment (enfin !) d’une première vidéo, l’ex­ten­sion m’a proposé l’ins­tal­la­tion de &lt;a href=&quot;https://en.wikipedia.org/wiki/Widevine&quot;&gt;wide­vine&lt;/a&gt;… et c’est là que j’ai été averti qu’il fallait 2Gio d’es­pace libre. J’ai du faire un peu de place ;&lt;/li&gt;
&lt;li&gt;La place faite, Kodi se plai­gnait du fait qu’il fallait &lt;code&gt;fdisk&lt;/code&gt; ou &lt;code&gt;parted&lt;/code&gt; sur la machine pour pouvoir extraire wide­vine. Deux outils pour­tant bien instal­lés. J’ai lancé Kodi avec l’uti­li­sa­teur &lt;code&gt;root&lt;/code&gt; après avoir fait &lt;code&gt;ln -s /home/kodi/.kodi /root/.kodi&lt;/code&gt; (oui, j’ai un utili­sa­teur dédié) et j’ai enfin pu termi­ner l’ins­tal­la­tion de wide­vine ;&lt;/li&gt;
&lt;li&gt;Les vidéos ne se lançaient pas pour autant, pour des problèmes de permis­sions d’après les messages d’er­reur. L’ins­tal­la­tion de wide­vine via l’uti­li­sa­teur &lt;code&gt;root&lt;/code&gt; mais son utili­sa­tion par l’uti­li­sa­teur &lt;code&gt;kodi&lt;/code&gt; avait laissé des traces, en l’oc­cu­rence un lien symbo­lique dont la cible était dans &lt;code&gt;/root/&lt;/code&gt;. Pour y remé­dier :
&lt;pre&gt;&lt;code&gt;cd /home/kodi/.kodi/cdm
rm libwidevinecdm.so;
ln -s /home/kodi/.kodi/userdata/addon_data/script.module.inputstreamhelper/cdm/libwidevinecdm.so&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Et voilà, après ça, ça fonc­tionne 🙂&lt;/p&gt;
&lt;h2&gt;Bonus&lt;/h2&gt;
&lt;p&gt;Je suis chez un FAI asso­cia­tif (&lt;a href=&quot;https://ldn-fai.net/&quot;&gt;LDN&lt;/a&gt;, pour ne pas le nommer) via un VPN. Ce qui veut dire que :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;j’ai un pres­ta­taire qui me permet de monter le VPN, en l’oc­cu­rence Orange ;&lt;/li&gt;
&lt;li&gt;si je pompe trop de bande passante, c’est mon FAI qui est péna­lisé.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Enfin mon &lt;a href=&quot;https://www.turris.cz/en/omnia/&quot;&gt;Turris Omnia&lt;/a&gt;, qui monte le VPN et redis­tri­bue Inter­net chez moi, n’a pas un proces­seur de folie : le chif­fre­ment/déchif­fre­ment du trafic VPN ne me permet pas de profi­ter de la pleine puis­sance de la connexion fibre Orange (ça reste plus que correct quand même hein !).&lt;/p&gt;
&lt;p&gt;Du coup, pour éviter de péna­li­ser mon FAI et de bour­ri­ner mon Turris, je route direc­te­ment le trafic Netflix via la box Orange avec un simple :&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ip route add 45.57.49.131 via 192.168.2.1 dev eth1&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;La première IP est celle d’un serveur Netflix, la deuxième est celle de la box Orange et eth1 est l’in­ter­face du Turris connec­tée à la box.&lt;/p&gt;
&lt;p&gt;Bien sûr, il y a plus d’une adresse IP à router ainsi. J’ai fait une compi­la­tion de ce que j’ai trouvé sur un snip­pet Frama­git : &lt;a href=&quot;https://framagit.org/snippets/3739&quot;&gt;https://frama­git.org/snip­pets/3739&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;EDIT : On a porté à ma connais­sance la commande &lt;code&gt;bgpq3 -J AS-NFLX&lt;/code&gt;, qui permet de connaître les adresses IPv4 de l’&lt;a href=&quot;https://fr.wikipedia.org/wiki/Autonomous_System&quot;&gt;AS&lt;/a&gt; de Netflix. Je ne sais pas s’il faut toutes les dévier vers la box orange (j’ai eu des soucis sur certaines adresses que j’avais détec­tées) mais en tout cas ça va simpli­fier le boulot ! Pour les IPv6, il faut utili­ser &lt;code&gt;bgpq3 -6 -J AS-NFLX&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Crédit : &lt;a href=&quot;https://unsplash.com/photos/MAYsdoYpGuk&quot;&gt;Photo&lt;/a&gt; par &lt;a href=&quot;https://unsplash.com/@alexlitvin&quot;&gt;Alex Litvin&lt;/a&gt; sur &lt;a href=&quot;https://unsplash.com/&quot;&gt;Unsplash&lt;/a&gt;&lt;/p&gt;</content:encoded>
	<dc:date>2019-08-19T17:12:44+00:00</dc:date>
	<dc:creator>Luc</dc:creator>
</item>

</rdf:RDF>
