nuage de tags sur la liste, suppression dropdown navbar, rôles/droits sur le profil

This commit is contained in:
Cedric Abonnel
2026-05-12 20:07:33 +02:00
parent 1d2e3d9a24
commit 6e438835f8
3470 changed files with 97124 additions and 109 deletions
-3
View File
@@ -7,6 +7,3 @@ vendor/
# OS # OS
.DS_Store .DS_Store
Thumbs.db Thumbs.db
# Contenu du blog (articles, fichiers, données)
data/
+6
View File
@@ -4,6 +4,12 @@
### Fonctionnalités ### Fonctionnalités
- **Page de confirmation à l'enregistrement** : cliquer sur "Enregistrer" affiche une
page intermédiaire avec le diff du contenu, le slug (déplacé ici depuis le formulaire,
avec suggestion auto si le titre a changé), un commentaire de révision pré-rempli
d'après les modifications détectées, et un aperçu SEO (snippet Google). La
sauvegarde effective n'a lieu qu'après confirmation.
- **URLs propres** : toutes les routes internes migrent vers des chemins lisibles. - **URLs propres** : toutes les routes internes migrent vers des chemins lisibles.
Les anciennes URLs `/?action=…` restent fonctionnelles (compatibilité). Les anciennes URLs `/?action=…` restent fonctionnelles (compatibilité).
| Ancienne URL | Nouvelle URL | | Ancienne URL | Nouvelle URL |
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

@@ -0,0 +1,17 @@
![Granieu, collecte des ordures ménagères](dummy.png)
Depuis le 1er janvier 2022, le **SICTOM de la région Morestel**, le **SICTOM du Guiers** et une partie du **SMND** devient : SYLCUM
La collecte est organisée par le [SYLCUM](https:*syclum.fr*).
Depuis 2023, elle est réalisée le **mardi après-midi**.
En cas de jour férié lundi ou mardi, la collecte est décalée au mercredi.
Les collectes sont maintenues tous les jours fériés excepté les 1er janvier, 1er mai et 25 décembre.
Voir les détails sur le site [SYLCUM, collecte des ordures ménagère](https:*syclum.fr/calendriers/)
Voir les détails sur le site <https:*www.granieu.fr/vie-municipale/les-services/, Infos Utiles - Mairie de Granieu>
---
Entre le 6 janvier 2020 et 2023, elle était réalisée le **jeudi après-midi**.
@@ -0,0 +1,18 @@
{
"uuid": "002cfb33-0706-4e15-8ca3-43e6d5e06ec0",
"slug": "collecte-des-ordures-menageres",
"title": "Collecte des ordures ménageres à Granieu",
"author": "cedric.abonnel@gmail.com",
"published": true,
"published_at": "2024-05-13 06:58:26",
"created_at": "2024-05-13 06:58:26",
"updated_at": "2024-05-13 06:58:26",
"revisions": [],
"cover": "",
"files_meta": [],
"external_links": [],
"seo_title": "",
"seo_description": "",
"og_image": "",
"category": "Vie pratique"
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

@@ -0,0 +1,19 @@
![Nom de la section](dummy.png)
**Speedtest** est un service Web qui permet d'analyser la vitesse de transfert et la latence entre votre poste informatique et un serveur. Dans cet article je vous propose d'installer votre propre service **speedtest** sur l'un de vos serveurs.
L'installation s'effectue sur un **Raspberry Pi 4**, dont **Apache 2.4** et **PHP 7.4** ont déjà été déployés et paramétrés.
Placez-vous dans votre **home** et téléchargez le dépôt **git** SpeedTest d'AdolfIntel.
git clone https://github.com/adolfintel/speedtest.git
sudo mkdir /var/www/html/speedtest
cd speedtest
sudo cp -R backend example-singleServer-pretty.html *.js /var/www/html/speedtest
cd /var/www/html/speedtest
sudo mv example-singleServer-pretty.html index.html
sudo chown -R www-data .
@@ -0,0 +1,18 @@
{
"uuid": "004d015d-133d-4e6c-8dba-b6336ebbeff2",
"slug": "speedtest",
"title": "Speedtest, installez votre testeur de débit",
"author": "cedric.abonnel@gmail.com",
"published": true,
"published_at": "2023-02-10 22:48:31",
"created_at": "2023-02-10 22:48:31",
"updated_at": "2023-02-10 22:48:31",
"revisions": [],
"cover": "",
"files_meta": [],
"external_links": [],
"seo_title": "",
"seo_description": "",
"og_image": "",
"category": "Informatique"
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

@@ -0,0 +1,134 @@
![](dummy.png)
La commande `virsh` est une interface en ligne de commande pour la gestion des machines virtuelles et des réseaux sur des hôtes utilisant libvirt, une bibliothèque open-source pour la virtualisation.
## Installation
La commande **virsh** est fournie par le paquet **libvirt-client**. Sur les distributions Linux basées sur Debian, vous pouvez l'installer en utilisant la commande suivante :
```
sudo apt install libvirt-clients
```
Sur les distributions Linux basées sur Fedora, vous pouvez l'installer en utilisant la commande suivante :
```
sudo dnf install libvirt-client
```
Une fois le paquet **libvirt-client** installé, vous pouvez utiliser la commande **virsh** pour gérer les machines virtuelles et les réseaux.
## Description
**virsh** permet de gérer les machines virtuelles en utilisant des commandes pour créer, supprimer, démarrer, arrêter et afficher les informations sur les machines virtuelles.
Voici quelques exemples de commandes **virsh** courantes pour la gestion des machines virtuelles :
- `virsh list` : affiche la liste des machines virtuelles en cours d'exécution sur l'hôte.
- `virsh start <nom-vm>` : démarre la machine virtuelle spécifiée.
- `virsh shutdown <nom-vm>` : arrête proprement la machine virtuelle spécifiée.
- `virsh destroy <nom-vm>` : arrête la machine virtuelle spécifiée de manière forcée.
- `virsh create <chemin-vers-fichier-XML>` : crée une nouvelle machine virtuelle en utilisant un fichier XML décrivant sa configuration.
**virsh** peut également être utilisé pour gérer les réseaux, notamment pour créer et supprimer des bridges réseau.
## Exemples d'utilisation
### Vérification / Création de virbr0
Pour vérifier si le bridge réseau **virbr0** existe sur votre système, vous pouvez exécuter la commande suivante dans un terminal :
```
sudo virsh net-list --all
```
Cela affichera la liste de tous les réseaux gérés par **libvirt**, y compris le bridge réseau **virbr0** s'il existe. Si le bridge réseau **virbr0** n'apparaît pas dans la liste, cela signifie qu'il n'a pas été créé sur votre système.
Si le bridge réseau **virbr0** n'existe pas, vous pouvez le créer en utilisant la commande suivante :
```
sudo virsh net-create /usr/share/libvirt/networks/default.xml
```
Cela créera le bridge réseau **virbr0** avec les paramètres par défaut sur votre système. Vous pouvez également personnaliser les paramètres du bridge en modifiant le fichier XML avant de créer le réseau.
Une fois que le bridge réseau **virbr0** a été créé, vous pouvez utiliser l'option `--network bridge=virbr0` avec pour spécifier que la machine virtuelle doit utiliser ce bridge réseau.
### Fichier /usr/share/libvirt/networks/default.xml
Voici à quoi ressemble le fichier XML par défaut pour le réseau **virbr0** sur la plupart des systèmes basés sur **libvirt**, tel que Fedora et Ubuntu :
```XML
<network>
<name>default</name>
<uuid>...</uuid>
<forward mode='nat'/>
<bridge name='virbr0' stp='on' delay='0'/>
<mac address='...'/>
<ip address='192.168.122.1' netmask='255.255.255.0'>
<dhcp>
<range start='192.168.122.2' end='192.168.122.254'/>
</dhcp>
</ip>
</network>
```
Ce fichier définit un réseau nommé **default** avec le bridge **virbr0**. Le mode **forward** est défini sur **bridge**, ce qui active le mode bridge pour le réseau virtuel. Le réseau utilise également le protocole **DHCP** pour attribuer des adresses IP aux machines virtuelles, avec une plage d'adresses allant de 192.168.122.2 à 192.168.122.254.
Le fichier XML peut être modifié pour personnaliser les paramètres du réseau, tels que l'adresse IP du réseau, la plage d'adresses DHCP et d'autres paramètres avancés. Toutefois, il est recommandé de créer un nouveau fichier XML pour définir un réseau personnalisé plutôt que de modifier le fichier `default.xml`, car les modifications apportées à ce fichier peuvent être écrasées lors de mises à jour ultérieures de **libvirt**.
--
Si vous utilisez un serveur DHCP externe pour vos machines virtuelles, vous n'avez pas besoin de spécifier une adresse IP statique dans le fichier XML de définition du réseau. L'adresse IP de l'hôte **libvirt** qui héberge les machines virtuelles sera attribuée automatiquement par le serveur DHCP externe. Il faut utiliser un pont réseau (bridge).
La création d'un pont réseau est généralement la première étape de la mise en place d'un environnement de virtualisation.
Si la carte réseau `virbr0` n'existe pas, vous pouvez créer un nouveau pont réseau nommé `virbr0` dans le système hôte :
```
sudo ip link add virbr0 type bridge
```
Un pont réseau est un composant qui relie plusieurs interfaces réseau ensemble pour créer un réseau logique unique. Dans ce cas, le pont **virbr0** permettra aux machines virtuelles de se connecter au réseau de l'hôte et de communiquer avec d'autres machines sur le réseau.
Lorsque la commande est exécutée, un nouveau périphérique de type pont est créé avec le nom **virbr0**. Ce périphérique peut être configuré avec des adresses IP, des règles de filtrage de paquets, des paramètres de QoS, etc.
Vérifier :
```
sudo ip link show type bridge
6: virbr0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/ether 0e:fd:02:17:39:65 brd ff:ff:ff:ff:ff:ff
```
Ajouter l'interface réseau **enp2s0f0u9** en tant que membre du pont réseau **virbr0** :
```
sudo ip link set enp2s0f0u9 master virbr0
```
Cela signifie que tout le trafic réseau entrant ou sortant de **enp2s0f0u9** sera redirigé vers le pont **virbr0**. Les machines virtuelles connectées au pont **virbr0** peuvent alors communiquer avec **enp2s0f0u9** et d'autres machines sur le réseau.
Activer l'interface réseau **virbr0** :
```
sudo ip link set virbr0 up
```
Par conséquent, le fichier XML de définition de réseau **perso** peut ressembler à ceci sans la section <ip> :
```XML
<network>
<name>perso</name>
<forward mode='bridge'/>
<bridge name='virbr0'/>
</network>
```
Dans cet exemple, la section `<ip>` est supprimée car elle n'est pas nécessaire si vous utilisez un serveur DHCP externe pour vos machines virtuelles. L'adresse IP de l'hôte libvirt sera attribuée automatiquement par le serveur DHCP externe.
Vous pouvez lancer la création du réseau :
```
sudo virsh net-create /usr/share/libvirt/networks/perso.xml
```
Le résultat attendu est :
```
Réseau perso créé depuis /usr/share/libvirt/networks/perso.xml
```
@@ -0,0 +1,18 @@
{
"uuid": "01521905-2d02-4b7d-8aff-7029cb10bfcb",
"slug": "virsh",
"title": "virsh",
"author": "cedric.abonnel@gmail.com",
"published": true,
"published_at": "2023-04-01 07:51:05",
"created_at": "2023-04-01 07:51:05",
"updated_at": "2023-04-01 07:51:05",
"revisions": [],
"cover": "",
"files_meta": [],
"external_links": [],
"seo_title": "",
"seo_description": "",
"og_image": "",
"category": "Informatique"
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 252 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 738 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 637 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 403 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 542 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 226 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 989 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

@@ -0,0 +1,114 @@
![Nom de la section](dummy.png)
Thomson SA était un groupe industriel français qui a été fondé en 1879. Il était connu pour ses produits électroniques de grande consommation, tels que les téléviseurs, les radios, les lecteurs de disques et les ordinateurs personnels. Il était également présent dans les secteurs de l'équipement médical, des équipements de télécommunication, de l'aéronautique et de l'énergie.
En 2001, **Thomson Multimedia** a acquis une société américaine spécialisée dans les services à l'industrie des médias et du divertissement audio-visuel : **Technicolor**. En 2022, **Technicolor** a cédé son activité de licence de marque à un fonds d'investissement américain, et la marque Thomson appartient désormais à la société **Talisman Brands, Inc.1 d/b/a Established**.
![](20230126-034825.png)
Thomson SA était également un constructeur d'ordinateurs personnels. Il a commencé à produire des ordinateurs dans les années 1980 avec des modèles tels que le TO7, le TO8 et le TO9. Ces ordinateurs étaient populaires en France et étaient équipés de processeurs Motorola 68000. Ils étaient également dotés d'un clavier AZERTY complet, ce qui était apprécié par les utilisateurs français. Malgré cela, Thomson n'a pas réussi à rivaliser avec les autres constructeurs d'ordinateurs de l'époque, comme IBM ou Amstrad, et il a finalement abandonné la production d'ordinateurs dans les années 1990.
Les ordinateurs personnels fabriqués par **Thomson SA** dans les années 80 comprennent principalement les modèles suivants:
---
![Thomson MO5](20230126-025305.png)
**Thomson MO5**
Le Thomson MO5 a été introduit en France en 1984 et était destiné au marché de l'éducation et de la maison. Il était équipé d'un clavier AZERTY et d'un connecteur pour cassette audio pour l'enregistrement et la lecture de programmes. Il était également compatible avec les périphériques de la gamme Thomson, tels que les imprimantes et les disques durs.
Il a été très populaire en France et a été utilisé dans de nombreux foyers et écoles. Il a également été utilisé par de nombreux développeurs pour créer des jeux et des logiciels pour le marché domestique. Il a été remplacé par le Thomson MO6 en 1986, qui a apporté des améliorations significatives telles que la mémoire supplémentaire, un interpréteur de BASIC intégré et des capacités graphiques améliorées.
Le Thomson MO5 fonctionne sur un processeur Motorola 6809E cadencé à 1 MHz et dispose de 48 KB de RAM (16 KB utilisés comme mémoire vidéo, 32 KB comme RAM utilisateur libre) et de 16 KB de ROM (4 KB pour le moniteur et 12 KB pour l'interpréteur BASIC). Les graphismes sont générés par un ensemble de portes EFGJ03L (ou MA4Q-1200) capable d'afficher un texte de 40x25 et une résolution de 320x200 pixels avec 16 couleurs (limitées par des zones d'attribut de couleur de 8x1 pixels). La palette de couleurs matérielle est RGBI à 4 bits, avec 8 couleurs RGB de base et un bit d'intensité (appelé P pour "Pastel") qui contrôle la saturation ("saturé" ou "pastel"). En mémoire, l'ordre des bits est PBGR. Les couleurs dé-saturées sont obtenues en mélangeant les composants RGB originaux dans le matériel vidéo. Cela est fait par un circuit PROM, où un masque à deux bits contrôle les ratios de mélange des couleurs de 0%, 33%, 66% et 100% de la teinte saturée. Cette approche permet d'afficher de l'orange plutôt que du "blanc dé-saturé" et du gris plutôt que du "noir dé-saturé".
---
**Thomson MO6**
Le Thomson MO6 était un ordinateur basé sur le processeur Motorola 6809E qui a été introduit en France en 1986. Il était conçu comme le successeur du Thomson MO5 et disposait de 128 KB de RAM, d'un affichage de texte de 40x25 et d'un nouvel interpréteur de Microsoft BASIC intégré (BASIC 128). Il était compatible avec son prédécesseur, tout en incorporant la même technologie que le TO8.
Les capacités graphiques ont été étendues par rapport au MO5 grâce à l'utilisation de la puce graphique Thomson EF9369. La palette de 16 couleurs pouvait être définie à partir d'un total de 4096 et des modes vidéo supplémentaires étaient disponibles : 320x200x16 couleurs (2 couleurs par pixel de 8x1), 640x200x2 couleurs, 320x200x4 couleurs, 160x200x16 couleurs, 320x200x3 couleurs et un niveau de transparence, 320x200x2 couleurs (permet de basculer entre deux pages d'écran) et 160x200x5 couleurs avec 3 niveaux de transparence.
En Italie, il a été vendu par Olivetti avec de petits changements esthétiques et s'appelait Olivetti Prodest PC128. 21 jeux ont été sortis pour le MO6. La machine était disponible jusqu'en janvier 1989.
---
![Thomson TO7, source : mo5.com](20230126-025421.png)
**Thomson TO7**
Le Thomson TO7 a été introduit en France en 1982 et était destiné au marché de la maison, similaire au Thomson MO5. Il était également compatible avec les périphériques de la gamme Thomson, tels que les imprimantes et les lecteurs de disquettes.
Il fonctionne sur un processeur Motorola 6809 cadencé à 1 MHz et dispose de 22 KB de RAM (8 KB pour l'utilisateur, 8 KB utilisés comme mémoire vidéo et 8 K x 6 bits de mémoire de couleur) et de 20 KB de ROM (4 KB pour le moniteur et 16 KB sur les cartouches MEMO7).
Comme c'est commun pour les ordinateurs domestiques conçus pour être connectés à un écran de télévision ordinaire, la zone active de 320x200 pixels ne couvre pas l'intégralité de l'écran et est entourée d'une bordure. Les graphismes étaient limités à 8 couleurs (générés par combinaison de primaires RVB) avec des contraintes de proximité (2 couleurs pour chaque zone de 8x1 pixels). La sortie vidéo est RVB sur un connecteur SCART, avec un taux de rafraîchissement compatible 625 lignes 50Hz.
L'audio était équipé d'un générateur de son à un seul canal avec cinq octaves. Une "extension de jeu" était capable de son à quatre canaux, six octaves.
Le clavier comporte 58 touches et comprend des touches de direction.
En plus des cartouches, la machine utilisait des bandes magnétiques pour le stockage des fichiers. Il est intéressant de noter que le Thomson TO7 était également connu sous le nom de "Thomson T07" en Allemagne et en Suisse, où il a également été commercialisé.
Il a été un concurrent direct des ordinateurs domestiques populaires de l'époque tels que le **Commodore 64** et l'**Atari 800**, mais n'a pas connu le même succès commercial. Malgré cela, il a été utilisé par de nombreux développeurs pour créer des jeux et des logiciels pour le marché domestique. Il a été remplacé par le **Thomson TO8** en 1984, qui a apporté des améliorations significatives telles que la mémoire supplémentaire, un processeur plus rapide et des capacités graphiques améliorées.
---
![Thomson TO7/70, source : mo5.com](20230126-025634.png)
**Variante TO7/70**
Le "/70" dans le nom du modèle Thomson TO7/70 fait référence à la quantité de mémoire vive (RAM) de l'ordinateur. La version TO7/70 était équipée de 70 ko de mémoire vive, ce qui était plus que la mémoire standard de 32 ko de RAM dans le modèle de base TO7. Cette mémoire supplémentaire permettait à l'ordinateur de gérer des applications plus complexes et de travailler avec des fichiers plus volumineux.
---
![Thomson TO8](20230126-024652.png)
**Thomson TO8**
Le Thomson TO8 est un ordinateur domestique introduit par la société française Thomson SA en 1986. Il remplace son prédécesseur, le **Thomson TO7/70**, tout en restant essentiellement compatible. Les nouvelles fonctionnalités du TO8, telles que la mémoire plus grande et les meilleurs modes graphiques, sont partagées avec les autres ordinateurs Thomson de troisième génération (MO6 et TO9+).
Le TO8 possède un lecteur de cassette et un interpréteur **Microsoft BASIC 1.0** (dans les versions standard et 512 KB) sur sa ROM interne, et il existe un lecteur de disquette externe en option. Les graphismes étaient fournis par le circuit **Thomson EF9369**, permettant l'affichage de 16 couleurs à partir d'une palette de 4096.
Plus de 120 jeux existent pour le système.
Une version améliorée, le **Thomson TO8D**, inclut un lecteur de disquette 3,5" intégré.
---
![Thomson TO9](20230126-024849.png)
**Thomson TO9**
Le Thomson TO9 est un ordinateur domestique introduit par la société française Thomson SA en 1985. Il est basé sur le Thomson TO7/70 avec de nouvelles fonctionnalités. Il comprend un lecteur de disquette 3,5" intégré de 320 Kb, et des entrées pour stylo lumineux, joystick et souris. La ROM comprend des utilitaires tels que: deux versions de BASIC, un traitement de texte (Paragraphe) et un programme de base de données (Fiche & Dossiers). La machine était compatible avec les modèles précédents TO7 et TO7/70. Dix jeux ont été publiés pour le TO9.
Introduit en octobre 1985, le Thomson TO9 a été rapidement remplacé par le Thomson TO9+ qui est sorti en 1986.
---
**Thomson TO9+**
Le Thomson TO9+ est un ordinateur personnel introduit par la société française Thomson SA en 1986. Il a conservé l'aspect professionnel du Thomson TO9 en utilisant un clavier séparé (les modèles d'entrée de gamme avaient généralement un clavier intégré).
Il est basé sur le Thomson TO8 et entièrement compatible avec lui. Cela lui permet également de faire fonctionner les logiciels Thomson MO6. L'ordinateur a été conçu pour être utilisé comme un serveur Minitel et possède un modem V23 intégré (à une vitesse de 1200/75 bauds). Cette fonctionnalité était accessible via BASIC et à partir du logiciel de communication qui accompagnait l'ordinateur. La machine était vendue avec un programme de traitement de texte (Paragraphe), une base de données (Fiches & Dossiers) et un tableur (Multiplan).
Par rapport au TO9, le TO9+ a ajouté :
- Basic 512
- 512 KB de RAM
- lecteur de disquettes double face (640 kB)
- modem intégré
- deux ports pour souris ou joysticks.
Le Thomson TO9+ était un ordinateur de bureau populaire en France dans les années 80, notamment en raison de ses capacités de serveur Minitel intégrées. Il était souvent utilisé dans les entreprises et les écoles pour la gestion de bases de données et la communication en ligne. Il était également apprécié pour sa compatibilité avec les logiciels de la série Thomson MO6, ce qui a augmenté sa polyvalence pour les utilisateurs. Cependant, malgré ses améliorations par rapport au Thomson TO9, il n'a pas connu autant de succès commercial que ses concurrents tels que le Commodore Amiga ou l'Atari ST.
---
![Thomson TO8D](20230126-024438.png)
**Thomson TO8D**
Une version améliorée du **Thomson TO8**, inclut un lecteur de disquette 3,5" intégré.
---
**Variante T08D/80**
Le "/80" dans le nom du modèle Thomson TO8D/80 fait référence à la mémoire vidéo de 80ko. Cette mémoire vidéo était utilisée pour stocker les informations d'affichage à l'écran, ce qui permettait une meilleure résolution graphique. Cela signifie que l'ordinateur pouvait afficher des images plus détaillées et des couleurs plus riches.
---
![Thomson TO16, source mo5.com](20230126-031103.png)
**Thomson TO16**
Il était un ordinateur personnel qui a été lancé en 1987. Il était équipé d'un processeur **Intel 8088** qui tournait à des fréquences de 4.77 ou 9.54 MHz. Il était également compatible avec un co-processeur **Intel 8087**, ce qui lui permettait de gérer des calculs plus complexes. Il avait également 512 KB de RAM, qui pouvait être étendu jusqu'à 768 KB sur la carte mère, et 32 KB de ROM.
En termes de connectivité, le TO16 était équipé d'un **Adaptateur d'affichage monochrome IBM**, une carte graphique Hercules Graphics Card, CGA et Plantronics Colorplus compatible. Il disposait d'un lecteur de disquette interne 5"1/4 de 360 KB, deux emplacements d'expansion ISA, des connections pour un disque dur externe, des interfaces RS-232C Serie et Centronics Parallel (Micro ribbon connector) et en option un modem.
Il était doté d'un clavier AZERTY complet, ce qui était apprécié par les utilisateurs français.
Il était également compatible avec les logiciels déjà existants pour les modèles précédents de la marque Thomson tels que le **TO7/70**, ce qui a permis aux utilisateurs de continuer à utiliser leurs logiciels préférés. Malheureusement, le **TO16** a été commercialisé à un moment où les **ordinateurs compatibles IBM** étaient en train de devenir la norme sur le marché, ce qui a rendu difficile pour Thomson de rivaliser avec les autres constructeurs. Néanmoins, il reste un ordinateur très apprécié des collectionneurs et des utilisateurs nostalgiques de cette époque.
Il y a aussi des modèles moins connus comme le TO7/90, TO9+/120
@@ -0,0 +1,18 @@
{
"uuid": "01ad03f7-2bdb-4d5a-b9d4-6038e60ea9cd",
"slug": "ordinateurs-personnels-fabriques-par-thomson-dans-les-80",
"title": "Ordinateurs personnels fabriqués par Thomson dans les années 80",
"author": "cedric.abonnel@gmail.com",
"published": true,
"published_at": "2023-02-09 19:08:53",
"created_at": "2023-02-09 19:08:53",
"updated_at": "2023-02-09 19:08:53",
"revisions": [],
"cover": "",
"files_meta": [],
"external_links": [],
"seo_title": "",
"seo_description": "",
"og_image": "",
"category": "Informatique"
}
@@ -0,0 +1,2 @@
*
-
@@ -0,0 +1,18 @@
{
"uuid": "01f4255f-b0fb-4f0d-bf52-9e11e165f035",
"slug": "scanner",
"title": "Numériser un document",
"author": "cedric.abonnel@gmail.com",
"published": true,
"published_at": "2023-02-28 20:02:45",
"created_at": "2023-02-28 20:02:45",
"updated_at": "2023-02-28 20:02:45",
"revisions": [],
"cover": "",
"files_meta": [],
"external_links": [],
"seo_title": "",
"seo_description": "",
"og_image": "",
"category": "Informatique"
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 151 KiB

@@ -0,0 +1,16 @@
![Electronique, Arduino & Raspberry Pi](logo-electronique.png)
La passion des sciences et de la technologie. On en parle ? **Électronique**, **Arduino**, **Raspberry Pi** et composants sont les thèmes de cette section.
## Table des matières
- introduction
### Les pages
<nav stacked="true" fade="true">
</nav>
### Les sous-catégories
<nav stacked="true" fade="true">
</nav>
@@ -0,0 +1,18 @@
{
"uuid": "0230a214-bfd2-44dd-9bd2-67889306565d",
"slug": "electronique",
"title": "Technologies",
"author": "cedric.abonnel@gmail.com",
"published": true,
"published_at": "2023-02-02 14:18:08",
"created_at": "2023-02-02 14:18:08",
"updated_at": "2023-02-02 14:18:08",
"revisions": [],
"cover": "",
"files_meta": [],
"external_links": [],
"seo_title": "",
"seo_description": "",
"og_image": "",
"category": "Électronique"
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

@@ -0,0 +1,19 @@
![Docker Compose](dummy.png)
Docker Compose est un outil qui permet de décrire et de gérer des applications multi-conteneurs. Le fichier **docker-compose.yml** est utilisé pour définir la configuration des services d'une application et les paramètres nécessaires à son exécution.
Le fichier **docker-compose.yml** est généralement écrit en format YAML (Yet Another Markup Language) et il contient les informations suivantes :
- Services : Il s'agit des différents conteneurs qui composent votre application. Chaque service est défini avec un nom et peut spécifier l'image Docker à utiliser, les volumes à monter, les ports à exposer, les variables d'environnement, etc.
- Réseaux : Vous pouvez spécifier les réseaux auxquels les conteneurs doivent être connectés, ainsi que les paramètres réseau spécifiques à chaque service.
- Volumes : Vous pouvez définir des volumes pour partager des données entre les conteneurs ou pour stocker des données persistantes.
- Variables d'environnement : Vous pouvez définir des variables d'environnement spécifiques à chaque service, qui seront accessibles depuis les conteneurs.
- Dépendances : Vous pouvez spécifier des dépendances entre les services, ce qui permet de contrôler l'ordre de démarrage et de garantir que les services dépendants sont prêts avant que d'autres services ne démarrent.
Une fois que vous avez défini votre configuration dans le fichier docker-compose.yml, vous pouvez utiliser la commande docker-compose up pour démarrer tous les conteneurs et les services correspondants en fonction de cette configuration.
Voir l'étude d'un exemple : https://www.abonnel.fr/informatique/serveur/castopod/docker-compose
@@ -0,0 +1,18 @@
{
"uuid": "0297ae4d-23ba-44cc-ba52-ec6ed48a4cbc",
"slug": "20230527-etude-d-une-configuration-docker-compose",
"title": "Étude d'une configuration docker compose",
"author": "cedric.abonnel@gmail.com",
"published": true,
"published_at": "2023-05-27 05:56:44",
"created_at": "2023-05-27 05:56:44",
"updated_at": "2023-05-27 05:56:44",
"revisions": [],
"cover": "",
"files_meta": [],
"external_links": [],
"seo_title": "",
"seo_description": "",
"og_image": "",
"category": "Journal geek"
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

@@ -0,0 +1,3 @@
![Système Linux](dummy.png)
Le dossier `/media` sur un système Linux contient généralement des sous-dossiers pour les périphériques de stockage amovibles tels que les clés USB, les disques durs externes, les lecteurs de mémoire flash, les CD et les DVD qui ont été montés sur le système. Chacun de ces sous-dossiers contient les fichiers et dossiers qui se trouvent sur le périphérique de stockage amovible. C'est là où vous pouvez accéder aux fichiers sur ces périphériques.
@@ -0,0 +1,18 @@
{
"uuid": "03eead16-b38f-4f68-94df-e3a2d217f794",
"slug": "media",
"title": "/media",
"author": "cedric.abonnel@gmail.com",
"published": true,
"published_at": "2023-02-09 15:22:30",
"created_at": "2023-02-09 15:22:30",
"updated_at": "2023-02-09 15:22:30",
"revisions": [],
"cover": "",
"files_meta": [],
"external_links": [],
"seo_title": "",
"seo_description": "",
"og_image": "",
"category": "Informatique"
}
@@ -0,0 +1,5 @@
* 39 % des gens passent des appels personnels
- 28% surfent sur Internet
- 15% envoient des mails à leurs amis
- 12% lisent le journal
- 6% profitent du service courrier pour effectuer des envois personnels
@@ -0,0 +1,18 @@
{
"uuid": "048c20fc-65ff-431b-8cdf-5b5bdbc64662",
"slug": "que-font-les-salaries-quand-ils-ne-travaillent-pas-pendant-les-heures-de-travail",
"title": "Que font les salariés quand ils ne travaillent pas pendant les heures de travail ?",
"author": "cedric.abonnel@gmail.com",
"published": true,
"published_at": "2020-04-17 18:06:54",
"created_at": "2020-04-17 18:06:54",
"updated_at": "2020-04-17 18:06:54",
"revisions": [],
"cover": "",
"files_meta": [],
"external_links": [],
"seo_title": "",
"seo_description": "",
"og_image": "",
"category": "Journal geek"
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

@@ -0,0 +1,42 @@
![Quoi de neuf Docker ?](38-20200530-quoi-de-neuf-docker.jpg)
Voici un rapide tour des informations que je traite dans ce 38ème épisode : Quoi de neuf Docker ?
Cette page est amenée à évoluer. Réagissez à cet épisode dans la partie
*[Épisode disponible sur https:*info.mindcast.fr/]*
---
**Configuration de Maria DB**
Le fichier de configuration en standard est `/etc/mysql/my.cnf`
/var/lib/mysql
---
**Fedora 32**
Le 28/04 Fedora est sorti en version 32
- Linux / Red Hat
- Gnome : détection des connexions limitées
- Mot de passe sur la mire
- earlyoom : saturation mémoire. 90% SIGN_TERM 95% SIG_KILL
- iptables > nftables changement déjà constaté dans Red Hat 8 et Debian 10.
- Postgre SQL passe en version 12, Python passe en 3.8, Python 2 est retiré.
- Live CD en 64 bits AMD uniquement.
- Informations sur les [nouveautés de Fedora 32](https:*forums.fedora-fr.org/viewtopic.php?id=70879)
- Guide sur la mise à jour de Fedora
- Guide sur earlyoom
---
**Pi Hole**
Pi Hole 5.0 est sortie. Nouveauté : groupe d'utilisateurs, mise en base de données des noms des sites Internet. Commençons la mise à jour.
- Guide pour Mettre à jour Pi Hole
J'ai rencontré un souci lors de la mise à jour Pi Hole 5.0 sur Raspbian. Les détais sont dans la vidéo https://youtu.be/K-hVdAlc2cU
@@ -0,0 +1,18 @@
{
"uuid": "04a3214a-c277-44e5-b4a9-537ae7ec35cd",
"slug": "38-20200530-quoi-de-neuf-docker",
"title": "Quoi de neuf Docker ?",
"author": "cedric.abonnel@gmail.com",
"published": true,
"published_at": "2023-02-10 22:48:32",
"created_at": "2023-02-10 22:48:32",
"updated_at": "2023-02-10 22:48:32",
"revisions": [],
"cover": "",
"files_meta": [],
"external_links": [],
"seo_title": "",
"seo_description": "",
"og_image": "",
"category": "Podcasts"
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

@@ -0,0 +1,9 @@
![Hack et liberté](dummy.png)
**La Déclaration d'Indépendance du Cyberespace** (Declaration of the Independence of Cyberspace) est un texte écrit en 1996 par John Perry Barlow, un écrivain, militant et défenseur des droits numériques américain. Ce texte a été écrit en réponse à la mise en place de règlements et de contrôles gouvernementaux sur Internet, et a été présenté comme une vision alternative de la façon dont Internet pourrait être géré.
La Déclaration d'Indépendance du Cyberespace soutient que les gouvernements et les institutions traditionnelles ne devraient pas avoir le pouvoir de réguler ou de contrôler Internet, qui est présenté comme un espace libre et ouvert pour la communication et l'expression. Le texte appelle à une gouvernance autonome de l'Internet par la communauté des utilisateurs et des développeurs, plutôt que par les gouvernements et les grandes entreprises.
La Déclaration d'Indépendance du Cyberespace est considérée comme un document fondateur du mouvement des droits numériques et de la défense de la liberté d'expression en ligne. Il a inspiré de nombreuses personnes à travers le monde à défendre la liberté et l'autonomie d'Internet en tant qu'espace pour la communication et l'expression libre.
Il est possible de trouver des traductions en français en ligne, par exemple sur le site du Parti Pirate français ou sur le site de l'association La Quadrature du Net, et sur Wikiepdia en Français : https://fr.wikipedia.org/wiki/D%C3%A9claration_d%27ind%C3%A9pendance_du_cyberespace
@@ -0,0 +1,18 @@
{
"uuid": "050ee2c0-955b-4bbd-a655-138e528397ff",
"slug": "la-declaration-d-independance-du-cyberespace",
"title": "La Déclaration d'Indépendance du Cyberespace",
"author": "cedric.abonnel@gmail.com",
"published": true,
"published_at": "2023-03-14 21:22:31",
"created_at": "2023-03-14 21:22:31",
"updated_at": "2023-03-14 21:22:31",
"revisions": [],
"cover": "",
"files_meta": [],
"external_links": [],
"seo_title": "",
"seo_description": "",
"og_image": "",
"category": "Informatique"
}
@@ -0,0 +1,64 @@
Une vague de cyberattaques cible spécifiquement les serveurs Linux en les intégrant de force dans des réseaux de minage de cryptomonnaies et en propageant simultanément des attaques par déni de service distribué. Selon le rapport récent du AhnLab Security Emergency Response Center (ASEC), des cybercriminels exploitent des failles de sécurité en devinant les identifiants SSH à travers des attaques par force brute, communément appelées attaques par dictionnaire. Ces intrusions permettent l'installation de scanners de ports et de logiciels malveillants variés, dont DDOSbot et CoinMiner.
Après installation, ces programmes malveillants scrutent le réseau à la recherche de nouveaux serveurs à compromettre, amplifiant ainsi la portée de l'attaque. Parallèlement, les informations d'accès obtenues (IP et identifiants) sont souvent vendues sur le dark web, augmentant le risque de violations futures.
L'ASEC souligne que l'outil d'attaque semble provenir d'un collectif nommé PRG old Team, bien que modifié pour ces opérations spécifiques. Ces attaques ciblent principalement des systèmes exposant le port 22, le port par défaut pour les connexions SSH, exploitant ainsi les faiblesses des politiques de mots de passe et de sécurité.
En réponse, il est vivement recommandé aux administrateurs et utilisateurs de renforcer les mots de passe, d'assurer une mise à jour constante des systèmes, et si possible, de déplacer le service SSH vers un port moins conventionnel que le port 22. Ces mesures préventives sont d'autant plus cruciales à la suite des récentes attaques de Terrapin (CVE-2023-48795), visant spécifiquement le protocole SSH à travers une technique de troncature de préfixe.
Face à la menace persistante des attaques de Terrapin, une mobilisation des chercheurs a mené à contacter près de 30 fournisseurs de services SSH. Ils signalent que le processus de mise à jour et de correction des vulnérabilités peut être long, mettant en lumière la nécessité d'une vigilance et d'une adaptation continues face aux évolutions des menaces cybernétiques.
*Source : https:*www.linux-magazine.com/Online/News/Linux-Machines-with-Poorly-Secured-SSH-Servers-are-Under-Attack //
# Configurer une alerte par mail
Pour configurer un serveur afin qu'il envoie un email chaque fois qu'une connexion SSH se produit sur un compte particulier, vous pouvez utiliser les scripts de shell et la fonctionnalité de notification par e-mail du système. Voici une méthode générale que vous pourriez suivre, en supposant que vous avez déjà une configuration de serveur de messagerie ou un service SMTP que vous pouvez utiliser pour envoyer des e-mails:
1. **Configurer le Serveur de Messagerie**:
Assurez-vous que votre système est capable d'envoyer des emails. Cela peut être fait via `sendmail`, `postfix`, ou un client SMTP comme `ssmtp` ou `msmtp` relié à un service à un fournisseur SMTP.
2. **Créer un Script de Notification**:
Créez un script shell (`notify.sh` par exemple) qui envoie un email lorsque quelqu'un se connecte via SSH. Voici un exemple de ce à quoi le script pourrait ressembler:
```BASH
#!/bin/bash
# Mettez l'adresse e-mail du destinataire ici
RECIPIENT="your-email@example.com"
# Message de notification
SUBJECT="Alerte de Connexion SSH"
MESSAGE="Une connexion SSH a été établie sur $(hostname) par $(whoami) à $(date)."
# Commande pour envoyer l'email
echo "$MESSAGE" | mail -s "$SUBJECT" $RECIPIENT
```
3. **Modifier le Fichier de Configuration SSH**:
Éditez le fichier de configuration SSH `sshd_config` situé normalement dans `/etc/ssh/sshd_config`.
Ajoutez ou modifiez la ligne `ForceCommand` pour l'utilisateur spécifique ou globalement pour exécuter le script à chaque connexion. Par exemple:
```
Match User nomutilisateur
ForceCommand /chemin/vers/notify.sh
```
4. **Rendre le Script Exécutable et Redémarrer le SSHD**:
Assurez-vous que le script est exécutable : `chmod +x /chemin/vers/notify.sh`.
Redémarrez le service SSH pour appliquer les modifications : `sudo systemctl restart sshd` ou `sudo service sshd restart` selon votre système.
5. **Testez la Configuration**:
Testez en vous connectant via SSH pour voir si vous recevez un email.
## Notes importantes
- Assurez-vous que le script et la configuration ne nuisent pas à la capacité de se connecter en SSH. Testez cela soigneusement.
- Soyez conscient de la sécurité et des implications de la confidentialité de l'envoi d'informations par e-mail.
- Cette méthode envoie une notification pour chaque connexion SSH, pas seulement pour les connexions réussies. Vous pouvez affiner le script pour répondre à des besoins plus spécifiques.
C'est une approche de base.
@@ -0,0 +1,18 @@
{
"uuid": "055737c8-5d2f-4cac-b8cd-13bfc0a2b193",
"slug": "20231229-ssh-brutforce",
"title": "Attaques Cryptographiques Sur Les Serveurs Linux : Mineurs Malveillants et Vulnérabilités SSH",
"author": "cedric.abonnel@gmail.com",
"published": true,
"published_at": "2023-12-29 18:58:21",
"created_at": "2023-12-29 18:58:21",
"updated_at": "2023-12-29 18:58:21",
"revisions": [],
"cover": "",
"files_meta": [],
"external_links": [],
"seo_title": "",
"seo_description": "",
"og_image": "",
"category": "Journal geek"
}
@@ -0,0 +1,12 @@
Cet article décrit comment installer une autre version de PHP sur votre système.
```BASH
sudo apt update
sudo apt install php5.6 php5.6-fpm
```
Nous vérifions le fonctionnement de **fpm** :
```BASH
sudo systemctl status php5.6-fpm
```
@@ -0,0 +1,18 @@
{
"uuid": "064d82b7-b652-410b-9ea9-88b2f9d1e67e",
"slug": "php-installer-un-second-moteur",
"title": "Installer une seconde version de PHP",
"author": "cedric.abonnel@gmail.com",
"published": true,
"published_at": "2023-02-09 16:12:18",
"created_at": "2023-02-09 16:12:18",
"updated_at": "2023-02-09 16:12:18",
"revisions": [],
"cover": "",
"files_meta": [],
"external_links": [],
"seo_title": "",
"seo_description": "",
"og_image": "",
"category": "Informatique"
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

@@ -0,0 +1,19 @@
![Nom de la section](dummy.png)
La commande `rmdir` est une commande en ligne de commande utilisée dans les systèmes d'exploitation de type Unix et Linux pour supprimer des répertoires (ou dossiers) vides. Le nom `rmdir` est une contraction de *remove directory*.
Lorsqu'on exécute la commande `rmdir` suivi du nom du répertoire à supprimer, le système supprime le répertoire uniquement s'il est vide. Si le répertoire contient des fichiers ou des sous-répertoires, la commande renverra une erreur.
Par exemple, pour supprimer le répertoire nommé `monDossier`, la commande à exécuter est la suivante :
rmdir monDossier
Si le répertoire n'est pas vide, vous pouvez utiliser la commande `rm -r` pour supprimer le répertoire et tout son contenu. Cependant, soyez très prudent lors de l'utilisation de cette commande, car elle peut supprimer des fichiers et des répertoires de manière irréversible.
La commande ''rm -fr /' est extrêmement dangereuse et elle peut entraîner la suppression de tout le système de fichiers sur lequel elle est exécutée, y compris les fichiers du système d'exploitation, les fichiers de configuration, les programmes, les données utilisateur, etc.
Cependant, la commande n'est pas protégée par défaut sur les systèmes d'exploitation de type Unix et Linux. Si vous exécutez cette commande en tant qu'utilisateur avec des privilèges d'administration, elle supprimera tout le système de fichiers.
L'exécution de cette commande peut causer des dommages irréparables à votre système et il est presque impossible de récupérer les fichiers supprimés. Il est donc très important d'utiliser cette commande avec une extrême prudence et uniquement lorsque vous êtes sûr de ce que vous faites.
En général, il est recommandé d'éviter d'utiliser cette commande ou toute autre commande potentiellement dangereuse si vous n'êtes pas certain de ce qu'elle fera et des conséquences qu'elle aura sur votre système.
@@ -0,0 +1,18 @@
{
"uuid": "0666381b-a22f-4e00-9022-fc89f12cd7c7",
"slug": "rmdir",
"title": "rmdir",
"author": "cedric.abonnel@gmail.com",
"published": true,
"published_at": "2023-02-18 09:15:07",
"created_at": "2023-02-18 09:15:07",
"updated_at": "2023-02-18 09:15:07",
"revisions": [],
"cover": "",
"files_meta": [],
"external_links": [],
"seo_title": "",
"seo_description": "",
"og_image": "",
"category": "Informatique"
}
@@ -0,0 +1,9 @@
Installer :
```bash
sudo dnf install testdisk
```
Executer :
```bash
sudo testdisk
```
@@ -0,0 +1,18 @@
{
"uuid": "06735e41-9ddf-4b48-a408-b7111bf2a9c3",
"slug": "linux-testdisk",
"title": "Récupérer des données effacées",
"author": "cedric.abonnel@gmail.com",
"published": true,
"published_at": "2020-04-17 18:06:31",
"created_at": "2020-04-17 18:06:31",
"updated_at": "2020-04-17 18:06:31",
"revisions": [],
"cover": "",
"files_meta": [],
"external_links": [],
"seo_title": "",
"seo_description": "",
"og_image": "",
"category": "Informatique"
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 133 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

@@ -0,0 +1,45 @@
Application de bureau à distance fonctionnant sous Linux, Windows, Android, iOS, FreeBSD, Raspberry Pi, Chrome OS.
Le contrôle à distance **AnyDesk** assure des connexions pour tous les systèmes d'opération. Il vous permet d'accéder à distance à vos appareils Linux et Windows, Mac et les autres systèmes depuis n'importe quel autre système d'exploitation.
**AnyDesk** utilise un codec DeskRT et les connexions sont chiffrés avec le standard TLS 1.2 et au chiffrage asymétrique à échange de clés RSA 2048. Il est possible de se connecter au bureau à distance sans devoir se connecter à Internet, sans passer par des serveurs intermédiaires.
Les autres produits comparables sont : **TeamViewer** et **TigerVNC** sous Linux.
## - Installer anydesk
L'installation d'AnyDesk nécessite des droits administrateur.
> Avec Debian, MX Linux ...
>> Se rendre sur la page https:*anydesk.com/fr/downloads/linux
![](anydesk_siteweb_accueil.png)
>> Télécharger le programme **anydesk_*.deb**
![](anydesk_download.png)
```
wget https:*download.anydesk.com/linux/anydesk_5.5.4-1_amd64.deb
```
>> Exécuter le programme d'installation
```
sudo dpkg -i anydesk_5.5.4-1_amd64.deb
sudo apt install -f
```
## - Erreur : Permission non accordée
Si vous rencontrez le problème `/var/lib/dpkg/info/anydesk.postinst: ligne 23: /etc/init.d/anydesk: Permission non accordée` lors de lexécution du programme **apt**, voici la marche à suivre.
Le paquet **Débian** téléchargé sur le site **AnyDesk** comporte une erreur sur les permissions.
>> Actions correctives à saisir dans un terminal :
```
$ sudo chmod -R 755 /usr/share/anydesk
$ sudo chmod 755 /var/lib/dpkg/info/anydesk.p*
$ sudo dpkg --configure anydesk
$ sudo apt-get install -f
```
@@ -0,0 +1,18 @@
{
"uuid": "067b085a-1080-47fb-a129-b88731e94a9b",
"slug": "anydesk",
"title": "AnyDesk",
"author": "cedric.abonnel@gmail.com",
"published": true,
"published_at": "2023-02-10 22:48:42",
"created_at": "2023-02-10 22:48:42",
"updated_at": "2023-02-10 22:48:42",
"revisions": [],
"cover": "",
"files_meta": [],
"external_links": [],
"seo_title": "",
"seo_description": "",
"og_image": "",
"category": "Informatique"
}
@@ -0,0 +1,96 @@
Prérequis :
- PHP 7.4
- Apache 2.4
- MariaDB / MySQL 5.5 et plus
Les modules PHP **mysql**, **zip**, **gd** et **mbstring** sont nécessaires pour une utilisation optimale de l'application.
```BASH
sudo apt install php7.4-mysql php7.4-mbstring php-zip php-gd
```
Télécharger l'archive présent sur le site `phpmyadmin.net` permet d'avoir la dernière version stable en date. A l'heure où j'écris ces lignes, il s'agit de la version 5.0.2.
cd /var/www
wget https:*files.phpmyadmin.net/phpMyAdmin/5.0.2/phpMyAdmin-5.0.2-all-languages.tar.gz
sudo tar -xzvf phpMyAdmin-5.0.2-all-languages.tar.gz
sudo rm phpMyAdmin-5.0.2-all-languages.tar.gz
cd phpMyAdmin-5.0.2-all-languages
sudo chgrp -R www-data .
sudo chmod -R g+s .
---
Configuration simple avec le fichier présent dans ``/var/html/phpMyAdmin-5.0.2-all-languages/config.inc.php``
```PHP
<?php
* use here a value of your choice at least 32 chars long
$cfg['blowfish_secret'] = '1{dd0`<Q),5XP_:R9UK%%8\"EEcyH#{o';
$i=0;
$i++;
$cfg['Servers'][$i]['auth_type'] = 'cookie';
* if you insist on "root" having no password:
* $cfg['Servers'][$i]['AllowNoPassword'] = true;
```
---
configuration site avaible
sudo nano /etc/apache2/sites-available/100-phpmyadmin.conf
```
Alias /phpmyadmin /var/www/phpMyAdmin-5.0.2-all-languages
<Directory /var/www/phpMyAdmin-5.0.2-all-languages>
Options Indexes FollowSymLinks
DirectoryIndex index.php
<IfModule mod_php5.c>
AddType application/x-httpd-php .php
php_flag magic_quotes_gpc Off
php_flag track_vars On
php_flag register_globals Off
php_value include_path .
</IfModule>
</Directory>
# Authorize for setup
<Directory /var/www/phpMyAdmin-5.0.2-all-languages/setup>
<IfModule mod_authn_file.c>
AuthType Basic
AuthName "phpMyAdmin Setup"
AuthUserFile /etc/phpmyadmin/htpasswd.setup
</IfModule>
Require valid-user
</Directory>
# Disallow web access to directories that don't need it
<Directory /var/www/phpMyAdmin-5.0.2-all-languages/libraries>
Order Deny,Allow
Deny from All
</Directory>
<Directory /var/www/phpMyAdmin-5.0.2-all-languages/setup/lib>
Order Deny,Allow
Deny from All
</Directory>
```
---
Activer la configuration du site
sudo a2ensite 100-phpmyadmin
sudo systemctl reload apache2
---
Code intégral et interactif en cours de rédaction sur <https://github.com/cedricAbonnel/server-web/scripts/install-phpmyadmin>
@@ -0,0 +1,18 @@
{
"uuid": "06c4a59c-7892-4138-986d-667b3263b16f",
"slug": "installer-phpmyadmin",
"title": "Installer phpMyAdmin",
"author": "cedric.abonnel@gmail.com",
"published": true,
"published_at": "2023-02-09 16:12:18",
"created_at": "2023-02-09 16:12:18",
"updated_at": "2023-02-09 16:12:18",
"revisions": [],
"cover": "",
"files_meta": [],
"external_links": [],
"seo_title": "",
"seo_description": "",
"og_image": "",
"category": "Informatique"
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

@@ -0,0 +1,26 @@
![Actualité](dummy.png)
La Mutualité sociale agricole (MSA) a récemment été confrontée à une usurpation d'identité touchant 1 410 comptes de ses adhérents via FranceConnect, un portail d'identités numériques. Cependant, aucun acte frauduleux n'a été détecté jusqu'à présent.
L'incident s'est produit mi-mai et a conduit la MSA à suspendre temporairement l'accès à sa plateforme via FranceConnect. FranceConnect a signalé une activité inhabituelle considérée comme à risque, mais cela n'a pas abouti à des fraudes.
FranceConnect est un portail utilisé par plus de 40 millions de personnes pour se connecter à divers services publics en ligne en utilisant les mêmes identifiants et mots de passe. La MSA, en charge de la gestion de la protection sociale des professionnels agricoles, a pris des mesures pour informer les adhérents concernés et fermer provisoirement l'accès à la MSA via FranceConnect. Des actions sont en cours pour renforcer la sécurité de l'ensemble des comptes MSA.
Les victimes de cette usurpation d'identité, comme Laurence Riaublanc, ont déclaré n'avoir constaté aucune modification de leurs informations personnelles ou de leur RIB au niveau de leurs impôts. Cependant, elles regrettent de ne pas pouvoir effectuer de signalement préventif d'une tentative d'usurpation d'identité, ce qui soulève des préoccupations quant à la vulnérabilité des utilisateurs dans le système numérique.
Il est donc important pour la MSA de renforcer la sécurité de ses comptes et de sensibiliser les utilisateurs aux mesures de prévention des usurpations d'identité.
Sur la base des informations fournies dans les articles, il n'y a pas de détails techniques spécifiques sur la façon dont l'usurpation d'identité a pu se produire. Les articles mentionnent simplement que des pirates ont réussi à accéder à FranceConnect, le portail d'identités numériques, mais n'ont pas pu mener d'activités frauduleuses une fois connectés.
Cependant, les incidents d'usurpation d'identité peuvent avoir différentes méthodes et techniques. Voici quelques scénarios possibles :
- Phishing : Les pirates peuvent avoir envoyé des e-mails ou des messages prétendant être légitimes pour inciter les utilisateurs de FranceConnect à divulguer leurs identifiants et mots de passe. Cela peut se faire via des liens malveillants redirigeant vers de faux sites Web ou en incitant les utilisateurs à télécharger des fichiers infectés.
- Attaques par force brute : Les pirates peuvent avoir utilisé des logiciels automatisés pour tenter de deviner les combinaisons d'identifiants et de mots de passe en utilisant différentes combinaisons possibles.
- Vulnérabilités du système : Il est possible qu'il y ait eu des vulnérabilités dans le système de FranceConnect ou dans les systèmes de la MSA qui ont été exploitées par les pirates pour accéder aux comptes des adhérents.
## Articles
- https:*www.usine-digitale.fr/article/franceconnect.N2137097
- https:*www.lefigaro.fr/secteur/high-tech/franceconnect-usurpation-d-identite-de-1400-adherents-de-la-mutualite-sociale-agricole-20230526
- https://www.bfmtv.com/tech/cybersecurite/france-connect-1400-adherents-de-la-mutualite-sociale-agricole-victimes-d-usurpation-d-identite_AD-202305260840.html
@@ -0,0 +1,18 @@
{
"uuid": "0752653a-2c49-435d-a1fd-126fb7428a33",
"slug": "20230531-plus-de-1400-adherents-de-la-msa-victimes-d-usurpation-d-identite-sur-franceconnect",
"title": "Plus de 1400 adhérents de la MSA victimes d'usurpation d'identité sur FranceConnect",
"author": "cedric.abonnel@gmail.com",
"published": true,
"published_at": "2023-05-31 06:16:36",
"created_at": "2023-05-31 06:16:36",
"updated_at": "2023-05-31 06:16:36",
"revisions": [],
"cover": "",
"files_meta": [],
"external_links": [],
"seo_title": "",
"seo_description": "",
"og_image": "",
"category": "Journal geek"
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

@@ -0,0 +1,19 @@
![Nom de la section](dummy.png)
Autrefois, dans les bourgs et les villages, s'appelait la Maison Commune.
## De la maison Commune à lHôtel de Ville
En 1390, les Consuls firent élever sur les bords de l'Isère, la Tour de l'Isle, qui devint ainsi la première Maison Commune, avec un puissant beffroi à l'aspect de forteresse. Enfin les archives et les sceaux étaient abrités dans un endroit sûr. On y déposa en particulier les **chartes des franchises**, la bulle impériale, le poinçon des orfèvres et le grand sceau de la ville. Les réunions du conseil se tenaient tous les vendredis, à 2 heures de l'après-midi dans une salle de la tour, décorée d'un crucifix et des armes de Grenoble. Mais, après la prise de la Ville en 1590 par **François de Bonne**, **Lesdiguière**, celui-ci voulant construire de nouveaux remparts, expulsa les consuls de leur Maison Commune, dont la Tour devint un donjon de défense pour les nouvelles fortifications construites au début du XVIè siècle.
Les **chartes des franchises** étaient reliées en un livre, le "**livre de la Chaîne**", dont la chaîne de fer était rivé aux murs ayant plus de deux mètres d'épaisseur.
## Biblio
**Textes**
[Tou de l'Isle](https:*fr.wikipedia.org/wiki/Tour_de_l%27Isle) Licence CC BY-SA 3.0
[La Tour de l'Isle à Grenoble](https:*www.ginsteve-visiterhonealpesisere.com/blog/un-dimanche-une-decouverte/1-dimanche-1-decouverte-n-11-la-tour-de-l-isle-a-grenoble.html)
**Photos**
[1](https:*commons.wikimedia.org/wiki/File:Mus%C3%A9e_de_Grenoble.JPG) Musée de Grenoble depuis la Bastille avec la Tour de Lisle à droite. [Milky](https:*commons.wikimedia.org/wiki/User:Milky) 02/09/2008
@@ -0,0 +1,18 @@
{
"uuid": "076cce5b-ebf8-4199-9dfc-509b0f18cb63",
"slug": "l-hotel-de-ville-grenoble",
"title": "L'Hotel de Ville Grenoble",
"author": "cedric.abonnel@gmail.com",
"published": true,
"published_at": "2021-06-21 14:48:16",
"created_at": "2021-06-21 14:48:16",
"updated_at": "2021-06-21 14:48:16",
"revisions": [],
"cover": "",
"files_meta": [],
"external_links": [],
"seo_title": "",
"seo_description": "",
"og_image": "",
"category": "Loisirs"
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

@@ -0,0 +1,15 @@
![Nom de la section](dummy.png)
En utilisant la ligne de commande de Linux, vous pouvez utiliser la commande suivante pour afficher le "tail" des 5 derniers fichiers modifiés des sous-dossiers d'un dossier donné:
find . -type f -print0 | xargs -0 ls -t | head -n 5 | xargs -I{} tail -n 10 "{}"
Cette commande utilise les options suivantes:
- `find . -type f -print0` pour trouver tous les fichiers dans le répertoire courant et ses sous-dossiers et imprimer leur chemin avec un caractère nul (`\0`) comme séparateur
- `xargs -0 ls -t` pour utiliser les chemins de fichier trouvés comme entrée pour la commande `ls -t` qui les affiche dans l'ordre de modification (les plus récemment modifiés en premier)
- `head -n 5` pour sélectionner les 5 premiers fichiers de la liste
- `xargs -I{} tail -n 10 "{}"` pour afficher les 10 dernières lignes de chaque fichier sélectionné, où `{}` est remplacé par le chemin de chaque fichier. Voir
@@ -0,0 +1,18 @@
{
"uuid": "076d72ba-29e4-4ae7-95b6-3d496c728af8",
"slug": "afficher-les-dernieres-lignes-des-5-derniers-fichiers-modifies-des-sous-dossiers",
"title": "ls et tail : afficher les dernières lignes des 5 derniers fichiers modifiés des sous-dossiers",
"author": "cedric.abonnel@gmail.com",
"published": true,
"published_at": "2023-02-18 08:49:52",
"created_at": "2023-02-18 08:49:52",
"updated_at": "2023-02-18 08:49:52",
"revisions": [],
"cover": "",
"files_meta": [],
"external_links": [],
"seo_title": "",
"seo_description": "",
"og_image": "",
"category": "Informatique"
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

@@ -0,0 +1,17 @@
![Créer un utilisateur et sa base donnes](20220105-211558.png)
Instructions à suivre pour créer un administrateur en requête SQL.
## MySQL et MariaDB
Les instructions sont testées sous
- MariadDB 10.1
- MariadDB 10.3
Les noms à adapter sont :
- mon_user
- mon_mdp
```SQL
CREATE USER 'mon_user'@'localhost' IDENTIFIED BY 'mon_mdp';
GRANT ALL ON *.* TO mon_user@localhost;
FLUSH PRIVILEGES;
```
@@ -0,0 +1,18 @@
{
"uuid": "0799bc19-1818-4d2e-9ece-a8caf7584107",
"slug": "creer-un-administrateur",
"title": "Créer un administrateur",
"author": "cedric.abonnel@gmail.com",
"published": true,
"published_at": "2023-02-10 22:48:29",
"created_at": "2023-02-10 22:48:29",
"updated_at": "2023-02-10 22:48:29",
"revisions": [],
"cover": "",
"files_meta": [],
"external_links": [],
"seo_title": "",
"seo_description": "",
"og_image": "",
"category": "Informatique"
}
@@ -0,0 +1,9 @@
> C'est bientôt l'avent, mais n'oublions pas le présent
01/12/2019 - Je fais le point sur la consommation électrique du domicile. Une première vidéo permet de faire le [point sur les offres alléchantes d'ENGIE](https:*youtu.be/4OhjOvRtDCo) et leur prix à -50% sur la tarification creuse.
03/12/2019 - Les États-Unis menacent la France de surtaxer jusqu'à 100%, 63 produits français. Yaourt, maquillage, beurre, sac à main... soit l'équivalent de 2,4 milliards de dollars de produits. <https:*www.lefigaro.fr/conjoncture/riposte-americaine-a-la-taxe-gafa-100-de-surtaxe-sur-2-4-milliards-de-dollars-de-produits-francais-de-luxe-20191203>
Ceci est la réponse à la taxe GAFA qui doit être mise en place début 2020. Il s'agit de taxer à hauteur 3% les entreprises étrangères qui ont un chiffre d'affaire de plus de 750 millions d'euros. Soit 120 à 150 entreprises seulement (des géants de la tech, avant tout américains, mais aussi asiatiques et européens principalement). Et ce pour des recettes fiscales conséquentes : 500 millions pour la France. <https:*www.touteleurope.eu/actualite/qu-est-ce-que-la-taxe-gafa.html>
En octobre 2019, les États-Unis avait déjà taxer 7,5 milliards de dollars de produits européens, pour les dommages subis par le pays après les subventions de l'Europe à Airbus. <https:*www.lesechos.fr/monde/etats-unis/vins-fromages-textiles-trump-sanctionne-tous-types-de-produits-europeens-1136844>
@@ -0,0 +1,18 @@
{
"uuid": "080ba045-33ff-4c3c-ab18-a3d7fe0957e9",
"slug": "12-3",
"title": "décembre",
"author": "cedric.abonnel@gmail.com",
"published": true,
"published_at": "2020-04-17 18:06:44",
"created_at": "2020-04-17 18:06:44",
"updated_at": "2020-04-17 18:06:44",
"revisions": [],
"cover": "",
"files_meta": [],
"external_links": [],
"seo_title": "",
"seo_description": "",
"og_image": "",
"category": "Journal geek"
}
@@ -0,0 +1,48 @@
Dans cet article, nous allons installer **PHP-FPM (FastCGI Process Manager)**, un gestionnaire de processus FastCGI optimisé pour exécuter PHP. Cet outil offre des fonctionnalités avancées, comme la gestion fine des processus et une meilleure performance, particulièrement adaptée aux sites à fort trafic. Contrairement au mode mod_php traditionnel, PHP-FPM est plus performant et consomme moins de ressources.
## Pourquoi utiliser PHP-FPM ?
PHP-FPM est conçu pour les sites de toutes tailles, mais il excelle dans les environnements exigeants, grâce à ses fonctionnalités telles que :
- La gestion avancée des pools de processus.
- Une meilleure répartition des ressources système.
- La compatibilité avec divers serveurs web comme **Apache** (via `mod_proxy_fcgi`) et **Nginx**.
## Utilisation avec Apache 2
Avec **Apache 2**, PHP-FPM est utilisé en combinaison avec le module `mod_proxy_fcgi`, qui permet de rediriger les requêtes PHP vers le gestionnaire PHP-FPM.
## Installation de PHP via le dépôt d'Ondřej Surý
Pour installer PHP et PHP-FPM, nous utiliserons le dépôt d'Ondřej Surý, réputé pour fournir des versions récentes et stables de PHP pour Debian et ses dérivés (comme Ubuntu). Ce dépôt est compatible avec les architectures suivantes :
- **ARM64** (pour les systèmes 64 bits ARM, comme Raspberry Pi modernes).
- **ARMhf** (pour les systèmes ARM 32 bits).
- **amd64** (pour les systèmes 64 bits basés sur Intel/AMD).
- **i386** (pour les systèmes 32 bits).
## Étapes d'installation
1. **Ajout du dépôt dOndřej Surý**
Avant dinstaller PHP, ajoutez le dépôt :
```bash
sudo apt update
sudo apt install -y lsb-release apt-transport-https ca-certificates curl
curl -fsSL https:*packages.sury.org/php/README.txt | sudo bash
```
2. **Installation de PHP et PHP-FPM**
Installez la version de PHP souhaitée (par exemple PHP 8.2) et son module FPM :
```bash
sudo apt update
sudo apt install -y php8.3 php8.3-fpm
```
3. **Configuration dApache pour utiliser PHP-FPM**
Activez les modules nécessaires :
```bash
sudo a2enmod proxy_fcgi setenvif
sudo a2enconf php8.3-fpm
sudo systemctl restart apache2
```
4. **Vérification de l'installation**
Créez un fichier PHP dinformation pour vérifier la configuration :
```bash
echo "<?php phpinfo(); ?>" | sudo tee /var/www/html/info.php
```
Ensuite, ouvrez votre navigateur et accédez à `http:*votre-serveur/info.php`.
@@ -0,0 +1,18 @@
{
"uuid": "08331a9c-def4-497a-a728-6a91eafc2d4e",
"slug": "installer-php-fpm",
"title": "Installation de PHP-FPM 8.3",
"author": "cedric.abonnel@gmail.com",
"published": true,
"published_at": "2025-01-18 18:51:41",
"created_at": "2025-01-18 18:51:41",
"updated_at": "2025-01-18 18:51:41",
"revisions": [],
"cover": "",
"files_meta": [],
"external_links": [],
"seo_title": "",
"seo_description": "",
"og_image": "",
"category": "Informatique"
}
@@ -0,0 +1,892 @@
## Radios publiques nationales
- France Inter
- France Culture
- France Musique
- FIP
- France Info
- Le Mouv'
- RFI
- RFO 1
- RFO 2
## Radios publiques régionales
- France Bleu Breizh Izel
- France Bleu Berry
- France Bleu Cotentin
- France Bleu Gironde
- France Bleu Drôme Ardèche
- France Bleu Bourgogne
- France Bleu Pays Basque
- France Bleu Orléans
- France Bleu Champagne
- France Bleu Azur
- France Bleu Armorique
- France Bleu Limousin à Tulle
- France Bleu Besançon
- France Bleu Gascogne
- France Bleu Gard Lozère
- France Bleu Poitou
- France Bleu Lorraine Nord
- France Bleu Loire Océan à La Roche sur Yon
- France Bleu Picardie
- France Bleu Vaucluse
- France Bleu Touraine
- France Bleu Roussillon
- France Bleu Périgord
- France Bleu Isère
- France Bleu Creuse
- France Bleu Belfort Montbéliard
- France Bleu Béarn
- France Bleu Auxerre
- France Bleu Frequenza Mora
- France Bleu Basse-Normandie
- France Bleu Île de France
- France Bleu La Rochelle
- France Bleu Nord
- France Bleu Hérault
- France Bleu Sud Lorraine
- France Bleu Pays de Savoie
- France Bleu Pays d'Auvergne
- France Bleu Mayenne
- France Bleu Alsace
- France Bleu Limousin
- France Bleu Loire Océan
- France Bleu Provence
- France Bleu Haute-Normandie
## Radios privées nationales
- Sud Radio +
- RTL
- RFM
-
- Skyrock
- RTL 2
- RMC
-
- Nostalgie
- Virgin Radio
- Radio Néo
- Ado FM
- Oui FM
- NRJ
- Radio Classique
- Radio Trafic FM
- Autoroute Info
- Autoroute FM
- TSF JAZZ
- Chérie FM
- MFM
- Rire et Chansons
-
- Radio Courtoisie
- Beur FM
- Radio Nova
- Radio Orient
- Radio FG
- France Maghreb 2
- Parenthèse Radio
- Jazz Radio
- Radio Soleil
- Africa n° 1
-
- ===== Radios locales et régionales privées ou indépendantes =====
-
- 1
- 666
- 3D FM
- 47 FM
- 48 FM
- 77 FM
- 97,2 Radio Nord Bourgogne
- Accent 4
- Activ Radio
- Active Radio
- Agora
- Agora FM
- Aléo
- Aligre FM
- Alouette
- Alpes 1
- Alta Fréquenza
- Alta Serena
- Alternantes FM
- Antenne d'Oc
- Antenne Réunion Radio
- Aqui FM
- ARL
- Arvorig FM
- Atlantic FM
- Attitude
- Auxois FM
- Azot Radio
- Azur FM
- Azur FM
- Bac FM
- Barousse FM
- Beaub'FM
- Bergerac 95
- Best FM Arras
- Booster
- BPM
- Bram'FM
- Bréniges FM
- Bulle FM
- C' Radio
- Campus Amiens
- Canal B
- Canal Sambre Avesnois
- Canal Sud
- Cap FM
- Capital FM
- Caribou FM
- Cartable FM
- Castel FM
- Cerise FM
- CFM 82
- Champagne FM
- Chante France
- Chérie FM
- Chérie FM
- Chérie FM Pyrénées
- CHIC FM
- Chlorophylle FM
- Climax FM
- Clin d'Oeil FM
- Club Altitude
- Cob FM
- Cocktail FM
- Collines FM
- Coloriage
- Comète FM
- Connexion FM
- Contact
- Contact FM
- Contact FM 88.8
- Contact FM prog.Radio Star Monaco
- Cosmic FM
- Costa Serena FM
- Couleur 3
- Couleurs FM
- Cristal FM
- CVFM
- Décibel FM
- Déclic
- Delta FM
- Delta FM
- Delta FM
- Demoiselle FM
- DFM 930
- Dialogue, la Radio des chrétiens de Marseille
- Dici Radio
- Digital FM
- Direct FM
- Distortion
- Divergence FM
- Durance FM
- Echo FM
- EFM
- ELLES FM
- Emergence FM
- Entre-deux FM
- Eole
- Espace
- Espace FM
- Est FM
- Euradionantes
- Euro-Infos Pyrénées Métropole
- EvryOne
- Exo FM
- Fajet 94,2 FM Nancy
- FC Radio
- First Radio
- FLASH FM
- Flotteurs FM
- FM 43
- FM 81
- FM Evangile 66
- FM Plus Grille Ouverte
- FMC Radio
- FMR
- France Maghreb
- Free Dom 2
- Fréquence 10
- Fréquence 4
- Fréquence 7
- Fréquence Adour
- Fréquence Amitié Vesoul
- Fréquence des Loisirs
- Fréquence Grands Lacs
- Fréquence Horizon
- Fréquence Jazz
- Fréquence K
- Fréquence Luz
- Fréquence Mistral
- Fréquence Mutine
- Fréquence Oasis
- Fréquence Plus
- Fréquence Protestante
- Fréquence Sillé FM
- Fréquence verte
- Fréquences Alizés Europe 3
- Fugue FM programme Contact FM
- Fun Radio
- Fun Radio Guyane
- Fusion FM
- GALERE
- Gascogne FM
- Génération FM
- Générations
- Gold FM
- Graffic FM
- Graffiti Urban Radio
- Grand Sud FM
- Graph'hit
- Grimaldi FM
- Gure Irratia
- Handi FM
- Happy
- Hélène FM
- HIT FM
- Hit West
- Horizon FM
- Horizon FM
- Horizon FM +
- Hot Radio
- Ici et Maintenant
- IMAGINE
- Impact FM
- Info RC
- Inside
- Isabelle FM
- JAIME
- Jet FM
- Jordanne FM
- Judaïca
- Kaolin FM
- Kayanm FM
- Kernews
- Kilti FM
- Kiss FM
- Kit FM
- L'autre radio
- L'Echo des Garrigues
- La Ciotat Fréquence Nautique
- Là La Radio
- La Radio de la Mer
- La Radio Plus
- La Radio Primitive
- La Tribu
- La Voix de l'Armagnac
- Latitude FM
- Lenga d'Oc
- LFM Réunion
- Littoral FM
- Lo Rénioné
- Lyon Première
- Madras FM (M.F.M.)
- Magic FM
- Magnum La Radio
- Mangembo FM
- Marmite FM
- Max FM
- Maxi FM
- MBS Music Box Stéréo
- MEGA FM
- Mélodie FM
- Mélody FM
- Métis FM
- Métropole Radio
- Meuse FM
- Mistral FM
- Mix la Radio Etudiante
- Mixx
- Mona FM
- Montagne FM
- MTI
- Nature Space Radio FM
- NEPTUNE FM
- New FM
- Newest
- Nice Radio
- Normandie FM
- Nov FM
- NRJ Antilles
- NRJ Guyane
- NRJ Nouvelle-Calédonie
- NRJ Polynésie
- NRJ Réunion
- NTI
- O2 Radio
- Océane FM
- ODS Radio
- ONE FM
- Only Raï
- OR FM
- Orion 87,6 La Voix de la Vallée
- ORNITHORYNQUE
- Ouest FM
- Ouest FM (Guadeloupe)
- Ouest FM (Guyane)
- Oxygène
- Oxygène FM
- Oxygène Radio
- Passion FM
- Pastel FM
- Perrine FM
- Phare FM
- Phare FM aux Portes du Dauphiné
- Phare FM Grenoble
- Phare FM Haguenau
- Phare FM Haute-Normandie
- PIC FM
- Pixel FM
- Planète FM
- Plein Air
- Plein C?ur
- Ploubaz FM
- Plum FM
- Plus FM
- Plus FM
- Plus FM
- Positif Radio
- Présence Figeac
- Présence Lot
- Présence Lourdes Pyrénées
- Prun'
- Pulse
- R d'Autan
- R-DWA
- R.D.C.
- R.D.L.
- R'Alpes Sud
- R'Grand Briançonnais
- R'La Plagne
- R'Les Arcs
- R'Méribel
- R'Tignes
- R2M La Radio plus
- Radio 1
- Radio 100 Kol Hachalom
- Radio 100% Jazz
- Radio 102 FM
- Radio 13
- Radio 16
- Radio 2000
- Radio 22
- Radio 4 Cantons
- Radio 6
- Radio 74
- Radio 8
- Radio A
- Radio A.R.I.A.
- Radio Accords
- Radio Actif Martinique
- Radio Activ'
- Radio Active
- Radio Active
- Radio Activités
- Radio Agora
- Radio Albatros
- Radio Albiges
- Radio Alizés FM
- Radio Alliance Plus
- Radio Alpa
- Radio Alpes Mancelle
- Radio Alpine Meilleure
- Radio Altitude
- Radio Altitude
- Radio Altitude
- Radio Alto
- Radio Amitié
- Radio Antenne Portugaise
- Radio Arago
- Radio Arc-en-Ciel
- Radio Arc-en-ciel
- Radio Arc-en-Ciel
- Radio Arménie
- Radio Arrels
- Radio Arverne
- Radio As
- Radio As
- Radio Ase Plere A Nou Lite
- Radio Association
- Radio Aube etSeine
- Radio Avallon
- Radio Aviva
- Radio Axe Sud
- Radio AYP
- Radio Azur
- Radio B L C
- Radio Balagne
- Radio Balisier
- Radio Balistiq
- Radio Ballade
- Radio Banlieue Relax (RBR)
- Radio Banquise
- Radio Basses Internationale (R.B.I.)
- Radio Bel Age Martinique
- Radio Bellevue
- Radio Béton
- Radio Bienvenue Strasbourg
- Radio Bip
- Radio Blackbox
- Radio Bleue
- Radio BLV
- Radio Bocage
- Radio Bonheur
- Radio Bonne Humeur
- Radio Bonne Nouvelle
- Radio Bonne Nouvelle de Guyane
- Radio Bora Bora
- Radio Bort Artense
- Radio Bouton
- Radio Bresse
- Radio Bro Gwened
- Radio Bruaysis
- Radio Brume
- Radio Bulle
- Radio Cactus
- Radio Cadence Musique
- Radio Cagnac
- Radio Calvi Citadelle
- Radio Camargue
- Radio Campus
- Radio Campus
- Radio Campus
- Radio Campus
- Radio Campus
- Radio Campus Besançon
- Radio Campus FM
- Radio Campus Paris
- Radio Campus Rennes
- Radio Campus Toulouse
- Radio Campus Tours
- Radio Campus Troyes
- Radio Canal Centre
- Radio Canal Myrtille
- Radio Canut
- Radio Capucins
- Radio Caraïb Nancy (RCN)
- Radio Caroline
- Radio Carrefour
- Radio Case Infos
- Radio Catalogne Nord
- Radio Chalette
- Radio Chalom Nitsan
- Radio Chrono
- Radio ciel bleu
- Radio Cigale FM
- Radio Cité Bretagne
- Radio Clapas
- Radio Clash
- Radio Club
- Radio Cocktail FM
- Radio Collége
- Radio Collège Pergaud
- Radio Condé Macou
- Radio Contact
- Radio Contact
- Radio Coquelicot
- Radio Corse Bellevue
- Radio Corti Vivu
- Radio Cosmique One
- Radio Cote d'amour
- Radio Côte d'Argent
- Radio Côte sous le vent (RCV)
- Radio Coteaux
- Radio Coup de Foudre
- Radio Courchevel
- Radio Craponne
- Radio Cristal
- Radio Cristal
- Radio Culture Outre-Mer
- Radio Cultures Dijon
- Radio D 4 B
- Radio d'Artagnan
- Radio d'Ici
- Radio de la Save
- Radio Décibel
- Radio Déclic
- Radio des Ballons
- Radio Des Boutières
- Radio des Hauts deRouen
- Radio des Iles
- Radio des Meilleurs Jours
- Radio des Trois Vallées
- Radio Dijon Campus
- Radio Dio
- Radio Djiido
- Radio Dreyeckland
- Radio Dreyeckland Centre Alsace Colmar
- Radio Dziani
- Radio Ecclesia
- Radio Eclair
- Radio ECN
- Radio Ellebore
- Radio Emeraude
- RADIO EMOTION
- Radio en construction
- Radio Enghien
- Radio Entre Deux Mers
- Radio Escapades
- Radio Espace
- Radio Espérance
- Radio Espérance
- Radio Espoir
- Radio Espoir
- Radio Espoir 82
- Radio Est Réunion
- Radio Evangélique de la Martinique
- Radio Evasion
- Radio Evasion (le Faou)
- Radio Evasion (Saint-Méen-le-Grand)
- Radio Festival
- Radio Festival
- Radio Fidélité
- Radio Fil de L'eau
- Radio Flam
- Radio Flash
- Radio Florival
- Radio FMR
- Radio Fontaine
- Radio Forum
- Radio Free Dom
- Radio Fréquence Atlantique (RFA)
- Radio Fréquence Caraibe
- Radio Fréquence Laon RFL
- Radio Fréquence Nîmes
- Radio Fréquence Soleil Toulouse
- Radio Fréquence Sud
- Radio Fugi
- Radio Fusion
- Radio G !
- Radio Gaiac
- Radio Galaxie
- Radio Galaxie
- Radio Galaxie
- Radio Gatine
- Radio Ginglet la Boucle
- Radio Golfe d'Amour (RGA)
- Radio Graffiti
- Radio Graffiti's
- Radio Grand Brive (RGB)
- Radio Grand Ciel
- Radio Grenouille
- Radio Grésivaudan
- Radio Gué Mozot
- RADIO HARMONIE CORNOUAILLE
- Radio Haute Angevine
- Radio Haute Tension
- Radio Iguanodon Gironde - RIG
- Radio Imagine
- Radio Intensité
- Radio Inter S'cool
- Radio Inter Tropicale
- Radio Inter-Val
- Radio Iris
- Radio Isa
- Radio Jerico
- Radio Jeunes Reims (RJR)
- Radio Jeunesse Lumière
- Radio JM Radio Juive Marseille
- Radio Judaïca Lyon
- Radio K6 FM
- Radio Kaléïdoscope
- Radio Kalimé
- Radio Kanal Océan Indien
- Radio Kerne
- Radio Kikiwi
- Radio Kol Aviv
- Radio Kontak
- Radio Kreiz Breizh
- Radio Kréol FM
- Radio L.G.B.
- Radio La Clé des Ondes
- Radio La Locale
- Radio La Sentinelle
- Radio La Voix de l'Espérance
- Radio La Voix du Nord
- Radio Lacaune
- Radio Lapurdi Irratia
- Radio Larzac
- Radio Laser
- Radio Latina
- Radio Lenga d'Oc Narbonna
- Radio Les Vaux Village
- Radio Leve Doubout Matinik (RLDM)
- Radio Libertaire
- Radio Liberté
- Radio Liberté
- Radio Liberté
- Radio Lodéve
- Radio Logos
- Radio Loire FM
- Radio Loisirs Guyane
- Radio Lor'FM
- Radio M
- Radio Maohi
- Radio Margeride
- Radio Maritima
- Radio Marseillette
- Radio Mau-Nau
- Radio Mayotte
- Radio MDM
- Radio Media France
- Radio Média Tropical Guadeloupe
- Radio Média Tropique
- Radio Méga
- Radio Mélodie
- Radio Mendililia
- Radio Menergy
- Radio Mercure
- Radio Mille Pattes
- RADIO MILLENIUM
- Radio Mission Pionnière
- Radio Mixte 9
- Radio Mon Pais
- Radio Mont Aiguille
- Radio Mont-Blanc
- Radio Montaillou
- Radio Montaillou
- Radio Morvan
- Radio Mosaïque
- Radio Mouv'Matnik
- Radio Muret
- Radio Musique Infos Mayotte (MIM)
- Radio Néo
- Radio Néo
- Radio Neptune
- Radio Nevers
- Radio Nohain
- Radio Nord Bretagne
- Radio Notre Dame
- Radio Occitanie
- Radio Oloron
- Radio Oméga
- Radio Ondaine
- Radio Ouassailles
- Radio P.FM
- Radio PAC
- Radio Pacot Lambersart RPL
- Radio Païs
- Radio Parole de Vie
- Radio Passion
- Radio Pau d'Ousse
- Radio Pays
- Radio Pays d'Aurillac
- Radio Pays d'Hérault
- Radio Pays de Guéret
- Radio Peltre Loisirs
- Radio Périgueux 103
- Radio Pikan
- Radio Plaine
- Radio Plainoise FM
- Radio Pluriel
- Radio Plus
- Radio Plus
- Radio Plus
- Radio Plus FM
- Radio Pons
- Radio Présence
- Radio Présence Pyrénées
- Radio Prevert
- Radio Prévert
- Radio Principe Actif
- Radio Puisaleine
- Radio Pulsar
- Radio Pytagor
- Radio Qui Q'en Grogne
- Radio Radio
- Radio Rencontre
- Radio Rennes
- Radio Rève
- Radio Rivière Saint-Louis
- Radio Rupt de Mad
- Radio Rythme Bleu
- Radio Saint Gabriel
- Radio Saint-Affrique
- Radio Saint-Barth FM
- Radio Saint-Ferréol
- Radio Saint-Louis
- Radio Saint-Martin
- Radio Saint-Nabor
- Radio Sainte Baume
- Radio Salam
- Radio Salazes
- Radio Salve Regina
- Radio Salvetat Peinard
- Radio Samoens
- Radio Saphir FM
- Radio Sauvagine
- Radio Scoop
- Radio Série One
- Radio Shalom Dijon
- Radio Sofaïa Atitude
- Radio Soleil
- Radio Soleil 35
- Radio Souffle de Vie
- Radio Star
- Radio Star
- Radio Star
- Radio Star
- Radio Star
- Radio Stéréo Centre Prog. Vibration
- Radio Studio 1
- Radio Sud Besançon
- Radio Sud Plus
- Radio Sud-Est
- Radio Sun FM Music
- Radio Sun Light FM
- Radio Sun'Lazes
- Radio Swing
- Radio Tanbou
- Radio Tartasse
- Radio Te Reo o Tefana
- Radio Te Vevo
- Radio Télé des Graves
- Radio Temps
- Radio TER
- Radio Tiare
- Radio Top FM
- Radio Top FM
- Radio Tout'Moune
- Radio Trait d'Union
- Radio Transat
- Radio Trouble Fête
- Radio TSF
- Radio U
- Radio Univers
- Radio Uylenspiegel
- Radio Vag
- Radio Val d'Isère
- Radio Val d'Or
- Radio Val de Loire
- Radio Val de Reins
- Radio Val Pireneos
- Radio Vallée Bergerac
- Radio Vallée d'Isle (RVI)
- Radio Vallée de la Lézarde
- Radio Vallée Vézère
- Radio Valloire
- Radio Valois Multien RVM
- Radio Vassivière
- Radio Velly Music
- Radio Verdon
- Radio Vexin Val-de-Seine
- Radio Vicomté
- Radio Vie
- Radio Vie Meilleure (RVM)
- Radio Vieille Eglise
- Radio Villages FM
- Radio Vitamine
- Radio Voix dans le Désert
- Radio Ylang FM
- Radio Zantak
- Radio Zig Zag
- Radio Zinzine
- Radio Zirondel FM
- Radio Zones
- Radiocéan
- Rado Picardie Littoral
- Radyonne FM
- Raje
- RBM Radio Billy Montigny
- RC 2
- RCB La Radio de la Vallée
- RCF
- RCF Accord16
- RCI Guadeloupe
- RCI Martinique
- RCT Cap Sao
- RDB
- RDC
- RDM
- RDS Chérie FM Nancy
- REC (Echos des Choucas)
- Resonance
- Résonance
- Résonnance FM
- RFC
- RFL 101
- RFM
- RFM Quercy Rouergue
- RJFM
- RLK
- RMB
- RMN
- RMS 89,6
- RMZ
- Roc FM
- Rock FM
- RPH-SUD
- RPS FM
- RTL 2
- RTS FM
- RV1
- RVA
- RVM
- RVM
- Sea FM
- Sensation
- Séquence FM
- Sing Sing
- Sky Réunion
- SNR
- Sol FM
- Soleil de Ré
- Soleil FM
- Soleil FM
- Soleil Média
- Sorgia FM
- Souvenirs FM
- STUDIO ZEF
- Styl'FM
- Sud Ardennes Radio
- Sud Radio
- Sun 101.5
- Sun FM
- Super Radio
- Sweet FM
- Swing FM
- Système
- TAUI FM
- Tempo La Radio
- Tendance Ouest
- Terre Marine
- TFM
- Thème Radio
- Tonic FM
- Tonic Radio, la radio du sport
- Top Music
- Totem
- Toucan Fréquence International - TFI
- Toulouse FM
- Trace FM
- Transat FM
- Transparence
- Triage FM
- Tropiques FM
- TSF 98
- Urban Hit
- Vallée FM Radio Marne-la-Vallée
- Variance FM
- Variation
- VDB Fréquence Béarn
- VFM
- Vibration
- Vintage
- Vinyle Radio
- Vire FM
- Vivre FM
- Voce Nustrale
- Voltage FM
- Vosges FM
- VTI
- Wit FM
- Xiberoko Botza
- Yao FM
- Yvelines Radio
- ZAP FM
- Zénith FM
- Zinfosradio
- Zouk Radio
@@ -0,0 +1,18 @@
{
"uuid": "088e20eb-b569-47fd-92c6-0db6f58d1121",
"slug": "radios-nationales",
"title": "Radios françaises",
"author": "cedric.abonnel@gmail.com",
"published": true,
"published_at": "2024-01-09 16:11:06",
"created_at": "2024-01-09 16:11:06",
"updated_at": "2024-01-09 16:11:06",
"revisions": [],
"cover": "",
"files_meta": [],
"external_links": [],
"seo_title": "",
"seo_description": "",
"og_image": "",
"category": "Vie pratique"
}
@@ -0,0 +1,56 @@
Pour adapter l'article afin de créer un script de hook Let's Encrypt pour Postfix, voici une version modifiée du texte :
Assurer la continuité et la sécurité de votre serveur de messagerie Postfix est crucial, surtout lorsqu'il s'agit de la gestion automatique des certificats SSL/TLS via Let's Encrypt. La mise en place d'un script de hook qui redémarre Postfix à chaque renouvellement de certificat est une étape essentielle. Voici les étapes pour configurer cela avec Certbot :
## 1. Élaboration d'un Script de Hook
Créez un script qui initiera le redémarrage de Postfix une fois le certificat renouvelé. Voici un exemple de script que vous pourriez utiliser :
```BASH
#!/bin/bash
# reload-postfix.sh
# Redémarrer Postfix
echo "Reloading Postfix..."
systemctl restart postfix
```
Sauvegardez ce script dans un endroit sûr, tel que `/etc/letsencrypt/renewal-hooks/post/reload-postfix.sh`.
**Rendez le script exécutable :**
```BASH
chmod +x /etc/letsencrypt/renewal-hooks/post/reload-postfix.sh
```
## 2. Intégration avec Certbot
Lorsque vous exécutez Certbot pour le renouvellement des certificats, indiquez ce script comme un hook post-renouvellement. Si Certbot est configuré pour renouveler automatiquement vos certificats, ajoutez votre script dans la configuration de renouvellement de Certbot en modifiant le fichier de configuration du domaine concerné, par exemple, `/etc/letsencrypt/renewal/yourdomain.conf`:
```BASH
[renewalparams]
post_hook = /etc/letsencrypt/renewal-hooks/post/reload-postfix.sh
```
## 3. Exploitation des Directoires de Hooks
Certbot recherche dans trois répertoires spécifiques des scripts à exécuter en tant que hooks :
- `/etc/letsencrypt/renewal-hooks/pre/` : Avant le renouvellement.
- `/etc/letsencrypt/renewal-hooks/deploy/` : Après un renouvellement réussi.
- `/etc/letsencrypt/renewal-hooks/post/` : Après toute tentative de renouvellement.
Placer votre script dans `/etc/letsencrypt/renewal-hooks/post/` s'assure qu'il sera exécuté après chaque renouvellement, garantissant ainsi que Postfix redémarre avec le nouveau certificat.
## 4. Validation de la Configuration
Effectuez un test de renouvellement pour vous assurer que tout fonctionne correctement :
```BASH
certbot renew --dry-run
```
Si tout est bien configuré, Certbot renouvellera le certificat en mode test et exécutera votre script pour redémarrer Postfix. Vérifiez que Postfix fonctionne correctement après le redémarrage.
## Remarques Importantes :
- **Sécurité :** Assurez-vous que seuls les utilisateurs appropriés ont des permissions d'écriture sur le script et les fichiers de configuration.
- **Logs :** Surveillez les logs de Certbot et Postfix pour tout problème éventuel lors des renouvellements et redémarrages.
- **Compatibilité :** Vérifiez que les versions de Certbot et Postfix en usage sont compatibles avec les méthodes décrites ici.
En mettant en place un hook bien configuré, vous vous assurez que Postfix fonctionne toujours avec un certificat valide, maintenant ainsi la sécurité et la fiabilité de votre serveur de messagerie.
@@ -0,0 +1,18 @@
{
"uuid": "092742d7-100b-46b2-acd6-0c0a432d2435",
"slug": "creer-un-script-de-hook-let-s-encrypt-pour-postfix",
"title": "Configurer un Script de Hook Let's Encrypt pour Postfix",
"author": "cedric.abonnel@gmail.com",
"published": true,
"published_at": "2023-12-29 17:32:41",
"created_at": "2023-12-29 17:32:41",
"updated_at": "2023-12-29 17:32:41",
"revisions": [],
"cover": "",
"files_meta": [],
"external_links": [],
"seo_title": "",
"seo_description": "",
"og_image": "",
"category": "Informatique"
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 97 KiB

@@ -0,0 +1,107 @@
<svg width="100%" viewBox="0 0 690 430" xmlns="http://www.w3.org/2000/svg" role="img" style=""><defs><mask id="imagine-text-gaps-m5xkrk" maskUnits="userSpaceOnUse"><rect x="0" y="0" width="690" height="430" fill="white"/><rect x="48" y="42.75" width="107.25" height="19" fill="black" rx="2"/><rect x="36" y="70.5" width="378.3333435058594" height="51.5" fill="black" rx="2"/><rect x="36" y="110.5" width="382.29998779296875" height="51.5" fill="black" rx="2"/><rect x="36" y="167" width="378.7166748046875" height="22.75" fill="black" rx="2"/><rect x="39.68333435058594" y="-58.25" width="20.633333206176758" height="31.5" fill="black" rx="2"/><rect x="31.016666412353516" y="-29.75" width="37.96666717529297" height="15.25" fill="black" rx="2"/><rect x="-4" y="-14.5" width="110.31666564941406" height="19" fill="black" rx="2"/><rect x="351" y="-4.5" width="31.66666603088379" height="20.25" fill="black" rx="2"/><rect x="-4" y="-14.5" width="101.98332977294922" height="19" fill="black" rx="2"/><rect x="116" y="-4.75" width="25.016666412353516" height="21.5" fill="black" rx="2"/><rect x="36" y="382.5" width="260.53334045410156" height="21.5" fill="black" rx="2"/><rect x="448.29998779296875" y="382.5" width="196.23333740234375" height="21.5" fill="black" rx="2"/></mask></defs>
<title style="fill:rgb(0, 0, 0);stroke:none;color:rgb(0, 0, 0);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:&quot;Anthropic Sans&quot;, -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto">Certificats Let's Encrypt 6 jours — illustration d'article</title>
<desc style="fill:rgb(0, 0, 0);stroke:none;color:rgb(0, 0, 0);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:&quot;Anthropic Sans&quot;, -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto">Bannière illustrant le passage des certificats Let's Encrypt à une durée de 6 jours, avec un cadenas central et un compteur de jours.</desc>
<!-- Background -->
<rect x="0" y="0" width="680" height="420" style="fill:rgb(245, 239, 230);stroke:none;color:rgb(0, 0, 0);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:&quot;Anthropic Sans&quot;, -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"/>
<!-- Top tag/eyebrow -->
<rect x="40" y="40" width="140" height="24" rx="4" style="fill:rgb(249, 115, 22);stroke:none;color:rgb(0, 0, 0);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:&quot;Anthropic Sans&quot;, -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"/>
<text x="52" y="56" style="fill:rgb(245, 239, 230);stroke:none;color:rgb(0, 0, 0);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:ui-monospace, monospace;font-size:11px;font-weight:500;text-anchor:start;dominant-baseline:auto">DEVOPS / WEBOPS</text>
<!-- Main title -->
<text x="40" y="110" font-size="38" style="fill:rgb(31, 41, 55);stroke:none;color:rgb(0, 0, 0);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:Anthropic Sans, sans-serif;font-size:38px;font-weight:500;text-anchor:start;dominant-baseline:auto">Certificats à 6 jours :</text>
<text x="40" y="150" font-size="38" style="fill:rgb(31, 41, 55);stroke:none;color:rgb(0, 0, 0);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:Anthropic Sans, sans-serif;font-size:38px;font-weight:500;text-anchor:start;dominant-baseline:auto">faut-il sauter le pas ?</text>
<!-- Subtitle -->
<text x="40" y="184" font-size="15" style="fill:rgb(75, 85, 99);stroke:none;color:rgb(0, 0, 0);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:Anthropic Sans, sans-serif;font-size:15px;font-weight:400;text-anchor:start;dominant-baseline:auto">Le profil shortlived de Let's Encrypt expliqué aux ops</text>
<!-- Decorative line under title -->
<line x1="40" y1="210" x2="180" y2="210" stroke-width="2" style="fill:none;stroke:rgb(249, 115, 22);color:rgb(0, 0, 0);stroke-width:2px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:&quot;Anthropic Sans&quot;, -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"/>
<!-- Logo / Padlock illustration on the right -->
<!-- Padlock body -->
<g transform="translate(480, 220)" style="fill:rgb(0, 0, 0);stroke:none;color:rgb(0, 0, 0);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:&quot;Anthropic Sans&quot;, -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto">
<!-- Shackle -->
<path d="M -40 -10 Q -40 -60 0 -60 Q 40 -60 40 -10 L 40 10" stroke-width="8" stroke-linecap="round" mask="url(#imagine-text-gaps-m5xkrk)" style="fill:none;stroke:rgb(31, 41, 55);color:rgb(0, 0, 0);stroke-width:8px;stroke-linecap:round;stroke-linejoin:miter;opacity:1;font-family:&quot;Anthropic Sans&quot;, -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"/>
<!-- Body -->
<rect x="-58" y="0" width="116" height="90" rx="10" style="fill:rgb(31, 41, 55);stroke:none;color:rgb(0, 0, 0);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:&quot;Anthropic Sans&quot;, -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"/>
<!-- Keyhole -->
<circle cx="0" cy="35" r="8" fill="#F97316" style="fill:rgb(249, 115, 22);stroke:none;color:rgb(0, 0, 0);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:&quot;Anthropic Sans&quot;, -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"/>
<rect x="-3" y="35" width="6" height="20" fill="#F97316" style="fill:rgb(249, 115, 22);stroke:none;color:rgb(0, 0, 0);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:&quot;Anthropic Sans&quot;, -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"/>
<!-- Day counter badge on padlock -->
<circle cx="50" cy="-30" r="32" style="fill:rgb(249, 115, 22);stroke:none;color:rgb(0, 0, 0);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:&quot;Anthropic Sans&quot;, -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"/>
<text x="50" y="-35" text-anchor="middle" font-family="var(--font-sans)" font-weight="500" font-size="22" fill="#F5EFE6" style="fill:rgb(245, 239, 230);stroke:none;color:rgb(0, 0, 0);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:Anthropic Sans, sans-serif;font-size:22px;font-weight:500;text-anchor:middle;dominant-baseline:auto">6</text>
<text x="50" y="-19" text-anchor="middle" font-family="var(--font-sans)" font-weight="400" font-size="9" fill="#F5EFE6" style="fill:rgb(245, 239, 230);stroke:none;color:rgb(0, 0, 0);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:Anthropic Sans, sans-serif;font-size:9px;font-weight:400;text-anchor:middle;dominant-baseline:auto">JOURS</text>
</g>
<!-- Calendar dots showing the contrast: 90 days vs 6 days -->
<g transform="translate(40, 260)" style="fill:rgb(0, 0, 0);stroke:none;color:rgb(0, 0, 0);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:&quot;Anthropic Sans&quot;, -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto">
<!-- 90 days row -->
<text x="0" y="0" font-size="12" style="fill:rgb(75, 85, 99);stroke:none;color:rgb(0, 0, 0);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:Anthropic Sans, sans-serif;font-size:12px;font-weight:400;text-anchor:start;dominant-baseline:auto">AVANT — 90 jours</text>
<g transform="translate(0, 12)" style="fill:rgb(0, 0, 0);stroke:none;color:rgb(0, 0, 0);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:&quot;Anthropic Sans&quot;, -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto">
<!-- Generate many tiny dots representing 90 days -->
<g style="fill:rgb(0, 0, 0);stroke:none;color:rgb(0, 0, 0);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:&quot;Anthropic Sans&quot;, -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto">
<circle cx="0" cy="6" r="3" opacity="0.4" style="fill:rgb(16, 185, 129);stroke:none;color:rgb(0, 0, 0);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:0.4;font-family:&quot;Anthropic Sans&quot;, -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"/>
<circle cx="10" cy="6" r="3" opacity="0.4" style="fill:rgb(16, 185, 129);stroke:none;color:rgb(0, 0, 0);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:0.4;font-family:&quot;Anthropic Sans&quot;, -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"/>
<circle cx="20" cy="6" r="3" opacity="0.4" style="fill:rgb(16, 185, 129);stroke:none;color:rgb(0, 0, 0);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:0.4;font-family:&quot;Anthropic Sans&quot;, -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"/>
<circle cx="30" cy="6" r="3" opacity="0.4" style="fill:rgb(16, 185, 129);stroke:none;color:rgb(0, 0, 0);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:0.4;font-family:&quot;Anthropic Sans&quot;, -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"/>
<circle cx="40" cy="6" r="3" opacity="0.4" style="fill:rgb(16, 185, 129);stroke:none;color:rgb(0, 0, 0);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:0.4;font-family:&quot;Anthropic Sans&quot;, -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"/>
<circle cx="50" cy="6" r="3" opacity="0.4" style="fill:rgb(16, 185, 129);stroke:none;color:rgb(0, 0, 0);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:0.4;font-family:&quot;Anthropic Sans&quot;, -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"/>
<circle cx="60" cy="6" r="3" opacity="0.4" style="fill:rgb(16, 185, 129);stroke:none;color:rgb(0, 0, 0);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:0.4;font-family:&quot;Anthropic Sans&quot;, -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"/>
<circle cx="70" cy="6" r="3" opacity="0.4" style="fill:rgb(16, 185, 129);stroke:none;color:rgb(0, 0, 0);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:0.4;font-family:&quot;Anthropic Sans&quot;, -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"/>
<circle cx="80" cy="6" r="3" opacity="0.4" style="fill:rgb(16, 185, 129);stroke:none;color:rgb(0, 0, 0);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:0.4;font-family:&quot;Anthropic Sans&quot;, -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"/>
<circle cx="90" cy="6" r="3" opacity="0.4" style="fill:rgb(16, 185, 129);stroke:none;color:rgb(0, 0, 0);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:0.4;font-family:&quot;Anthropic Sans&quot;, -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"/>
<circle cx="100" cy="6" r="3" opacity="0.4" style="fill:rgb(16, 185, 129);stroke:none;color:rgb(0, 0, 0);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:0.4;font-family:&quot;Anthropic Sans&quot;, -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"/>
<circle cx="110" cy="6" r="3" opacity="0.4" style="fill:rgb(16, 185, 129);stroke:none;color:rgb(0, 0, 0);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:0.4;font-family:&quot;Anthropic Sans&quot;, -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"/>
<circle cx="120" cy="6" r="3" opacity="0.4" style="fill:rgb(16, 185, 129);stroke:none;color:rgb(0, 0, 0);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:0.4;font-family:&quot;Anthropic Sans&quot;, -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"/>
<circle cx="130" cy="6" r="3" opacity="0.4" style="fill:rgb(16, 185, 129);stroke:none;color:rgb(0, 0, 0);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:0.4;font-family:&quot;Anthropic Sans&quot;, -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"/>
<circle cx="140" cy="6" r="3" opacity="0.4" style="fill:rgb(16, 185, 129);stroke:none;color:rgb(0, 0, 0);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:0.4;font-family:&quot;Anthropic Sans&quot;, -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"/>
<circle cx="150" cy="6" r="3" opacity="0.4" style="fill:rgb(16, 185, 129);stroke:none;color:rgb(0, 0, 0);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:0.4;font-family:&quot;Anthropic Sans&quot;, -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"/>
<circle cx="160" cy="6" r="3" opacity="0.4" style="fill:rgb(16, 185, 129);stroke:none;color:rgb(0, 0, 0);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:0.4;font-family:&quot;Anthropic Sans&quot;, -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"/>
<circle cx="170" cy="6" r="3" opacity="0.4" style="fill:rgb(16, 185, 129);stroke:none;color:rgb(0, 0, 0);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:0.4;font-family:&quot;Anthropic Sans&quot;, -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"/>
<circle cx="180" cy="6" r="3" opacity="0.4" style="fill:rgb(16, 185, 129);stroke:none;color:rgb(0, 0, 0);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:0.4;font-family:&quot;Anthropic Sans&quot;, -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"/>
<circle cx="190" cy="6" r="3" opacity="0.4" style="fill:rgb(16, 185, 129);stroke:none;color:rgb(0, 0, 0);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:0.4;font-family:&quot;Anthropic Sans&quot;, -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"/>
<circle cx="200" cy="6" r="3" opacity="0.4" style="fill:rgb(16, 185, 129);stroke:none;color:rgb(0, 0, 0);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:0.4;font-family:&quot;Anthropic Sans&quot;, -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"/>
<circle cx="210" cy="6" r="3" opacity="0.4" style="fill:rgb(16, 185, 129);stroke:none;color:rgb(0, 0, 0);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:0.4;font-family:&quot;Anthropic Sans&quot;, -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"/>
<circle cx="220" cy="6" r="3" opacity="0.4" style="fill:rgb(16, 185, 129);stroke:none;color:rgb(0, 0, 0);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:0.4;font-family:&quot;Anthropic Sans&quot;, -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"/>
<circle cx="230" cy="6" r="3" opacity="0.4" style="fill:rgb(16, 185, 129);stroke:none;color:rgb(0, 0, 0);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:0.4;font-family:&quot;Anthropic Sans&quot;, -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"/>
<circle cx="240" cy="6" r="3" opacity="0.4" style="fill:rgb(16, 185, 129);stroke:none;color:rgb(0, 0, 0);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:0.4;font-family:&quot;Anthropic Sans&quot;, -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"/>
<circle cx="250" cy="6" r="3" opacity="0.4" style="fill:rgb(16, 185, 129);stroke:none;color:rgb(0, 0, 0);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:0.4;font-family:&quot;Anthropic Sans&quot;, -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"/>
<circle cx="260" cy="6" r="3" opacity="0.4" style="fill:rgb(16, 185, 129);stroke:none;color:rgb(0, 0, 0);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:0.4;font-family:&quot;Anthropic Sans&quot;, -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"/>
<circle cx="270" cy="6" r="3" opacity="0.4" style="fill:rgb(16, 185, 129);stroke:none;color:rgb(0, 0, 0);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:0.4;font-family:&quot;Anthropic Sans&quot;, -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"/>
<circle cx="280" cy="6" r="3" opacity="0.4" style="fill:rgb(16, 185, 129);stroke:none;color:rgb(0, 0, 0);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:0.4;font-family:&quot;Anthropic Sans&quot;, -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"/>
<circle cx="290" cy="6" r="3" opacity="0.4" style="fill:rgb(16, 185, 129);stroke:none;color:rgb(0, 0, 0);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:0.4;font-family:&quot;Anthropic Sans&quot;, -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"/>
<circle cx="300" cy="6" r="3" opacity="0.4" style="fill:rgb(16, 185, 129);stroke:none;color:rgb(0, 0, 0);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:0.4;font-family:&quot;Anthropic Sans&quot;, -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"/>
<circle cx="310" cy="6" r="3" opacity="0.4" style="fill:rgb(16, 185, 129);stroke:none;color:rgb(0, 0, 0);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:0.4;font-family:&quot;Anthropic Sans&quot;, -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"/>
<circle cx="320" cy="6" r="3" opacity="0.4" style="fill:rgb(16, 185, 129);stroke:none;color:rgb(0, 0, 0);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:0.4;font-family:&quot;Anthropic Sans&quot;, -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"/>
<circle cx="330" cy="6" r="3" opacity="0.4" style="fill:rgb(16, 185, 129);stroke:none;color:rgb(0, 0, 0);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:0.4;font-family:&quot;Anthropic Sans&quot;, -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"/>
<circle cx="340" cy="6" r="3" opacity="0.4" style="fill:rgb(16, 185, 129);stroke:none;color:rgb(0, 0, 0);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:0.4;font-family:&quot;Anthropic Sans&quot;, -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"/>
</g>
<text x="355" y="10" font-size="13" style="fill:rgb(156, 163, 175);stroke:none;color:rgb(0, 0, 0);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:Anthropic Sans, sans-serif;font-size:13px;font-weight:500;text-anchor:start;dominant-baseline:auto">×90</text>
</g>
</g>
<g transform="translate(40, 320)" style="fill:rgb(0, 0, 0);stroke:none;color:rgb(0, 0, 0);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:&quot;Anthropic Sans&quot;, -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto">
<!-- 6 days row -->
<text x="0" y="0" font-size="12" style="fill:rgb(31, 41, 55);stroke:none;color:rgb(0, 0, 0);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:Anthropic Sans, sans-serif;font-size:12px;font-weight:500;text-anchor:start;dominant-baseline:auto">APRÈS — 6 jours</text>
<g transform="translate(0, 12)" style="fill:rgb(0, 0, 0);stroke:none;color:rgb(0, 0, 0);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:&quot;Anthropic Sans&quot;, -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto">
<circle cx="0" cy="6" r="6" style="fill:rgb(249, 115, 22);stroke:none;color:rgb(0, 0, 0);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:&quot;Anthropic Sans&quot;, -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"/>
<circle cx="20" cy="6" r="6" style="fill:rgb(249, 115, 22);stroke:none;color:rgb(0, 0, 0);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:&quot;Anthropic Sans&quot;, -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"/>
<circle cx="40" cy="6" r="6" style="fill:rgb(249, 115, 22);stroke:none;color:rgb(0, 0, 0);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:&quot;Anthropic Sans&quot;, -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"/>
<circle cx="60" cy="6" r="6" style="fill:rgb(249, 115, 22);stroke:none;color:rgb(0, 0, 0);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:&quot;Anthropic Sans&quot;, -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"/>
<circle cx="80" cy="6" r="6" style="fill:rgb(249, 115, 22);stroke:none;color:rgb(0, 0, 0);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:&quot;Anthropic Sans&quot;, -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"/>
<circle cx="100" cy="6" r="6" style="fill:rgb(249, 115, 22);stroke:none;color:rgb(0, 0, 0);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:&quot;Anthropic Sans&quot;, -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"/>
<text x="120" y="11" font-size="14" style="fill:rgb(31, 41, 55);stroke:none;color:rgb(0, 0, 0);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:Anthropic Sans, sans-serif;font-size:14px;font-weight:500;text-anchor:start;dominant-baseline:auto">×6</text>
</g>
</g>
<!-- Bottom footer -->
<line x1="40" y1="375" x2="640" y2="375" stroke-width="0.5" opacity="0.3" style="fill:none;stroke:rgb(31, 41, 55);color:rgb(0, 0, 0);stroke-width:0.5px;stroke-linecap:butt;stroke-linejoin:miter;opacity:0.3;font-family:&quot;Anthropic Sans&quot;, -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"/>
<text x="40" y="397" font-size="12" style="fill:rgb(75, 85, 99);stroke:none;color:rgb(0, 0, 0);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:Anthropic Sans, sans-serif;font-size:12px;font-weight:400;text-anchor:start;dominant-baseline:auto">Let's Encrypt · Profil shortlived · Certbot 4.0+</text>
<text x="640" y="397" text-anchor="end" font-size="12" font-style="italic" style="fill:rgb(75, 85, 99);stroke:none;color:rgb(0, 0, 0);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:Anthropic Sans, sans-serif;font-size:12px;font-weight:400;font-style:italic;text-anchor:end;dominant-baseline:auto">Guide pour les ops auto-hébergés</text>
</svg>

After

Width:  |  Height:  |  Size: 26 KiB

@@ -0,0 +1,198 @@
> Guide DevOps / WebOps pour comprendre les certificats à durée de vie courte (`shortlived`) et décider si vous devez migrer.
---
## TL;DR
Let's Encrypt propose désormais au grand public des certificats valides **6 jours** (profil `shortlived`), en plus du classique 90 jours. Pour les certificats sur **adresse IP**, c'est même obligatoire. La question n'est pas "est-ce que c'est bien ?" — techniquement oui — mais "est-ce que mon infra est prête ?". Si votre renouvellement automatique fonctionne sans accroc depuis 6 mois, foncez. Sinon, fiabilisez d'abord, migrez ensuite.
---
## 1. De quoi on parle
Depuis janvier 2026, Let's Encrypt émet en disponibilité générale deux nouveautés couplées : les certificats pour adresses IP, et les certificats à durée de vie de 6 jours via un nouveau profil ACME nommé `shortlived`. Certbot 4.0 a introduit le flag `--preferred-profile` pour les sélectionner, et Certbot 5.3 a ajouté `--ip-address` pour demander un cert sur IP.
Concrètement, un certificat `shortlived` a une validité de ~6 jours au lieu de 90. Tout le reste — chaîne de confiance, algorithmes, format — est identique. Pour le navigateur, c'est un certificat Let's Encrypt standard.
### Les profils disponibles
| Profil | Durée | Usage |
|---|---|---|
| `classic` (défaut) | 90 jours | Tout le monde, par défaut |
| `shortlived` | ~6 jours | Adopters précoces, certs sur IP (obligatoire) |
| `tlsserver` | 90 jours | Variante optimisée serveur web (sans clientAuth) |
---
## 2. Pourquoi Let's Encrypt pousse vers le court
Quatre raisons techniques, par ordre d'importance.
### 2.1 La révocation TLS est cassée — autant l'éviter
C'est le vrai sujet. Le mécanisme de révocation des certificats (CRL, OCSP) n'a jamais fonctionné correctement à grande échelle :
- **OCSP soft-fail** : si le serveur OCSP est injoignable, la plupart des navigateurs acceptent quand même le certificat. Un attaquant qui contrôle le réseau bloque l'OCSP et le cert révoqué passe.
- **OCSP stapling** mal configuré sur beaucoup de serveurs.
- **CRLite, OneCRL** : couvertures partielles, déploiement client incohérent.
- **OCSP retiré** : Let's Encrypt a arrêté OCSP en 2025, justement parce que ça ne servait quasiment à rien tout en posant des problèmes de vie privée.
Avec un cert à 6 jours, la révocation devient cosmétique : on attend l'expiration. La fenêtre d'exploitation d'une clé compromise passe de plusieurs semaines (cert 90 jours, OCSP douteux) à quelques jours maximum.
### 2.2 Réduire la fenêtre de compromission
Si votre clé privée fuite (backup mal protégé, faille serveur, employé qui part avec une copie, vulnérabilité type Heartbleed), l'attaquant peut usurper votre site tant que le cert est valide. À 90 jours, c'est trois mois d'exposition dans le pire cas. À 6 jours, c'est une semaine.
C'est encore plus critique pour les **certs sur IP** : une IP peut changer de propriétaire (cloud, VPS recyclé, réattribution FAI). Un cert long pour une IP qui ne vous appartient plus, c'est un risque que LE refuse de prendre — d'où l'obligation du profil court pour cet usage.
### 2.3 Forcer une automatisation propre
Personne ne renouvelle un cert à la main tous les 6 jours. C'est mécaniquement infaisable. Le profil `shortlived` est donc un **filtre qualité** : si votre renouvellement n'est pas blindé, vous le saurez vite.
L'effet de bord positif : ça élimine les pannes classiques type "le cert a expiré parce que le cron était cassé depuis trois mois et personne ne s'en est rendu compte". À 6 jours, un cron cassé devient visible immédiatement.
### 2.4 Agilité cryptographique
Si une vulnérabilité majeure impose de déprécier un algorithme en urgence (RSA, transition post-quantique, faille découverte sur SHA-256), un parc avec des certs à 6 jours bascule en une semaine. Un parc 90 jours met trois mois. C'est la raison qui motive aussi le CA/Browser Forum à pousser globalement vers des durées plus courtes (45 jours d'ici 2029 dans la baseline).
---
## 3. Pourquoi vous pourriez ne *pas* migrer
Soyons honnêtes : pour la plupart des infras web classiques, le 90 jours suffit largement. Le 6 jours a des coûts réels.
### 3.1 Pression sur le rate limiting
Let's Encrypt limite à **300 nouveaux certificats par compte par 3 heures** et **5 duplicatas de cert par semaine**. Avec des certs 90 jours, vous renouvelez ~4 fois par an. Avec des 6 jours, c'est ~60 fois par an et par cert. Si vous avez 50 services derrière 50 certs distincts, vous explosez votre budget de requêtes ACME.
**Mitigation :** regrouper les domaines dans des certs SAN (un seul cert pour `app.a5l.fr`, `api.a5l.fr`, `admin.a5l.fr` plutôt que trois certs).
### 3.2 Dépendance critique au CA et au réseau
À 90 jours, si Let's Encrypt est down 48h, vous ne le remarquez même pas. À 6 jours, une panne de 48h sur LE *et* votre fenêtre de renouvellement (typiquement à 1/3 de la durée restante, soit ~2 jours), et votre cert expire. Vos services tombent.
Conséquences concrètes :
- Il faut un **monitoring sérieux** de l'expiration des certs (Prometheus blackbox exporter, `check_ssl_cert`, etc.).
- Il faut un **fallback** : second client ACME, second account, ou cert de secours d'une autre CA.
- Il faut absolument que la résolution DNS et le port 80/443 sortants depuis votre serveur soient fiables.
### 3.3 Charge sur les systèmes de déploiement
Chaque renouvellement déclenche : appel ACME, validation HTTP-01 ou DNS-01, écriture des fichiers, **rechargement du serveur web** (Nginx, Apache, HAProxy, etc.). À ~60 fois par an au lieu de 4, ça multiplie par 15 le nombre de reloads.
Sur un serveur web basique, un `nginx -s reload` est gratuit. Sur des architectures plus complexes (load balancers stateful, terminations TLS distribuées, certs poussés vers un CDN, configs multi-nœuds avec Ansible/Salt), chaque renouvellement déclenche une cascade. À évaluer.
### 3.4 Logs, audit, conformité
Certains contextes réglementaires demandent une traçabilité des certificats (PCI-DSS, ISO 27001, HDS). Multiplier par 15 le volume d'événements de renouvellement à archiver et auditer, ça représente du stockage et du tooling à adapter.
### 3.5 Le cas "monitoring TLS externe"
Si vous avez des outils tiers (uptime monitors, scanners de conformité) qui vérifient l'expiration de vos certs, ils risquent de hurler en permanence : un cert qui montre toujours "expire dans 6 jours" déclenche les alertes "cert expirant bientôt" sur la plupart des outils mal configurés. Il faut soit ajuster les seuils, soit changer d'outil.
---
## 4. Décision : grille de lecture
| Situation | Recommandation |
|---|---|
| Serveurs web classiques, renouvellement Certbot qui marche, < 20 certs | Restez en 90 jours. Le bénéfice marginal ne justifie pas le risque. |
| Vous gérez des **certs sur IP** | Pas le choix : `shortlived` est obligatoire. |
| Architecture critique avec rotation de clés agressive (banque, santé, infra publique) | Migrez. Le 6 jours est aligné avec vos exigences de sécurité. |
| Infra dev/staging interne | Excellent terrain de test. Migrez d'abord ici pour valider votre pipeline. |
| Vous avez déjà eu une expiration cert non détectée en prod | **Ne migrez pas tout de suite.** Fiabilisez d'abord le monitoring et le renouvellement, puis migrez. Sinon vous transformez un incident annuel en incident hebdomadaire. |
| Vous publiez via reverse proxy unique (un seul cert SAN pour plusieurs services) | Bon candidat. Un seul renouvellement à fiabiliser. |
| Vous avez un parc hétérogène (Apache + Nginx + HAProxy + Traefik...) avec hooks custom | Auditez chaque hook avant de migrer. C'est là que ça casse. |
---
## 5. Comment migrer concrètement (Certbot)
### 5.1 Pré-requis
Avant tout :
1. **Certbot 4.0+** pour `--preferred-profile`, **5.3+** pour `--ip-address`, **5.4+** pour `webroot` avec IP.
2. Un renouvellement automatique opérationnel et **vérifié** (timer systemd ou cron actif, testé avec `certbot renew --dry-run`).
3. Un monitoring d'expiration des certs en place. Si vous n'en avez pas, installez-le **avant** de migrer.
4. Un hook de reload du serveur web qui fonctionne (`--deploy-hook`).
### 5.2 Test sur le staging Let's Encrypt
```bash
sudo certbot certonly --staging \
--preferred-profile shortlived \
--webroot \
--webroot-path /var/www/html \
-d test.example.com
```
Vérifier que le cert obtenu a bien une durée de 6 jours :
```bash
openssl x509 -in /etc/letsencrypt/live/test.example.com/cert.pem -noout -dates
```
### 5.3 Renouvellement plus fréquent
Par défaut, Certbot renouvelle quand il reste 1/3 de la durée. Pour un cert 6 jours, ça veut dire renouveler à 2 jours restants. Ça laisse peu de marge en cas de panne. Vous pouvez forcer un renouvellement plus tôt :
```bash
# Renouvelle si moins de 4 jours restants (au lieu de 2 par défaut)
certbot renew --deploy-hook "systemctl reload nginx"
```
Le timer Certbot tourne deux fois par jour par défaut, ce qui est suffisant. Pas besoin de l'accélérer.
### 5.4 Cas d'un certificat sur IP
```bash
sudo certbot certonly \
--preferred-profile shortlived \
--webroot \
--webroot-path /var/www/html \
--ip-address 203.0.113.42
```
Note importante : Certbot ne sait pas encore *installer* automatiquement les certs IP dans Nginx ou Apache. Il faut éditer la config manuellement pour pointer vers `/etc/letsencrypt/live/<ip>/fullchain.pem` et `privkey.pem`, et configurer un `--deploy-hook` pour le reload.
### 5.5 Plan de bascule recommandé
1. **Semaine 1-2** : un domaine non critique (un sous-domaine de test, un service interne) en `shortlived`. Surveillez les renouvellements.
2. **Semaine 3-4** : étendez à la moitié de votre dev/staging.
3. **Semaine 5-6** : migration progressive en prod, en commençant par les services les moins critiques.
4. **À tout moment** : possibilité de retour arrière en supprimant `--preferred-profile shortlived` du fichier de config Certbot dans `/etc/letsencrypt/renewal/<domain>.conf`.
---
## 6. Pièges à éviter
- **Ne migrez pas tout en même temps.** Si votre hook de reload a un bug, vous le découvrez sur un seul service, pas sur 50.
- **Ne désactivez pas le monitoring d'expiration sous prétexte que c'est automatisé.** L'automatisation peut casser silencieusement. Un check externe qui hurle à J-2 reste indispensable.
- **Attention aux secrets stockés dans des configs autres que Certbot.** Si vous avez des certs poussés manuellement vers un CDN, un load balancer cloud ou un firewall TLS-inspectant, le passage à 6 jours impose d'automatiser cette propagation aussi.
- **Pas de cert IP pour un service exposé publiquement à long terme.** Si l'IP change, le cert devient inutilisable instantanément. Préférez le DNS quand c'est possible.
- **Vérifiez votre client ACME.** Tous les clients ACME ne supportent pas encore les profils. acme.sh, Caddy, lego, Traefik : checkez la version. Certbot 4.0 minimum.
---
## 7. Verdict
Le profil `shortlived` est **techniquement supérieur** au 90 jours sur le plan sécuritaire. Mais il déplace le coût : moins de risques liés aux clés compromises et à la révocation cassée, **plus** de risques liés à la chaîne de renouvellement.
La règle simple : **si votre renouvellement automatique est fiable, migrez. Sinon, fiabilisez-le d'abord — la migration n'en sera que la conséquence naturelle.**
Pour la majorité des infras web auto-hébergées (typiquement, un Proxmox + reverse proxy + une dizaine de services derrière), le 90 jours reste un excellent compromis. Le `shortlived` devient pertinent quand :
- Vous avez besoin de certs sur IP (obligatoire).
- Vous exploitez des services à forte exigence de sécurité (clés très sensibles).
- Vous voulez tester votre résilience opérationnelle (le 6 jours est un excellent test de fiabilité de votre stack).
Le reste du temps, gardez le 90 jours, dormez tranquille, et ressortez ce document quand le CA/Browser Forum imposera 45 jours par défaut (vers 2027-2028).
---
## Sources
- [Let's Encrypt — Six-Day and IP Address Certificates Available in Certbot](https://letsencrypt.org/2026/03/11/shorter-certs-certbot) (mars 2026)
- [Let's Encrypt — 6-day and IP address certs in general availability](https://letsencrypt.org/2026/01/15/6day-and-ip-general-availability) (janvier 2026)
- [Documentation Certbot — Hooks](https://eff-certbot.readthedocs.io/en/stable/using.html#hooks)
- [CA/Browser Forum Baseline Requirements](https://cabforum.org/baseline-requirements-documents/)
@@ -0,0 +1,72 @@
{
"uuid": "093711bf-4e60-4ea8-ba73-928d2d67776c",
"slug": "certificats-let-s-encrypt-a-6-jours-faut-il-sauter-le-pas",
"title": "Certificats Let's Encrypt à 6 jours : faut-il sauter le pas ?",
"author": "cedric@abonnel.fr",
"published": true,
"published_at": "2026-05-07 22:46",
"created_at": "2026-05-12 08:47:27",
"updated_at": "2026-05-12 08:59:58",
"revisions": [],
"cover": "cover.svg",
"files_meta": {
"447e17138517246a-26778.svg": {
"author": "",
"source_url": ""
},
"_thumb_3007bde7fd56be76-3567.png": {
"author": "",
"source_url": ""
},
"_thumb_58a97ee03002ccd0-21513.png": {
"author": "",
"source_url": ""
},
"_thumb_7fa3a5beb503fead-99693.png": {
"author": "",
"source_url": ""
},
"cover.svg": {
"author": "Cédrix / Générée par IA",
"source_url": ""
}
},
"external_links": [
{
"url": "https://letsencrypt.org/2026/03/11/shorter-certs-certbot",
"name": "Six-Day and IP Address Certificates Available in Certbot - Let's Encrypt",
"added_at": "2026-05-12 08:51:48",
"meta": {
"mime": "text/html",
"size": 30330,
"description": " This was also posted on EFFs blog.\nAs we announced earlier this year, Lets Encrypt now issues IP address and six-day certificates to the general public. The Certbot team at the Electronic Frontier Foundation has been working on two improvements to support these features: the --preferred-profile flag released last year in Certbot 4.0, and the --ip-address flag, new in Certbot 5.3. With these improvements together, you can now use Certbot to get those IP address certificates!\n",
"og_image": "/file?uuid=093711bf-4e60-4ea8-ba73-928d2d67776c&name=_thumb_58a97ee03002ccd0-21513.png",
"og_type": "website"
}
},
{
"url": "https://eff-certbot.readthedocs.io/en/stable/using.html#hooks",
"name": "User Guide — Certbot 5.6.0 documentation",
"added_at": "2026-05-12 08:52:14",
"meta": {
"mime": "text/html",
"size": 191138,
"og_image": "/file?uuid=093711bf-4e60-4ea8-ba73-928d2d67776c&name=_thumb_3007bde7fd56be76-3567.png"
}
},
{
"url": "https://cabforum.org/baseline-requirements-documents/",
"name": "https://cabforum.org/working-groups/server/baseline-requirements/documents/",
"added_at": "2026-05-12 08:52:42",
"meta": {
"mime": "text/html",
"size": 209,
"og_image": "/file?uuid=093711bf-4e60-4ea8-ba73-928d2d67776c&name=_thumb_7fa3a5beb503fead-99693.png"
}
}
],
"seo_title": "",
"seo_description": "",
"og_image": "",
"category": "actualité"
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

@@ -0,0 +1,61 @@
![Linux Postfix generic](dummy.png)
Le Return-Path, également connu sous le nom d'adresse d'enveloppe, est une adresse e-mail utilisée pour les notifications de non-distribution (bounces) et pour les erreurs de livraison des e-mails. Il est généralement différent de l'adresse affichée dans l'en-tête "**From**" du message.
Lorsque vous utilisez le fichier `/etc/postfix/generic` pour réécrire les adresses e-mail dans Postfix, la réécriture s'applique par défaut uniquement aux en-têtes "**From**", "**Sender**" et "**Return-Path**".
Voici comment réécrire les en-têtes "**From**", "**Sender**" et "**Return-Path**" en utilisant le fichier `/etc/postfix/generic` :
## Ouvrez le fichier `/etc/postfix/generic`
Utilisez votre éditeur de texte préféré pour ouvrir le fichier `/etc/postfix/generic` :
```
sudo nano /etc/postfix/generic
```
## Configurer les règles de réécriture
Dans ce fichier, vous pouvez ajouter des règles de réécriture sous la forme suivante :
```
@server.ntdl adresse_modifiee@example.com
@server adresse_modifiee@example.com
@localhost adresse_modifiee@example.com
```
Remplacez
- `adresse_modifiee@example.com` par l'adresse e-mail modifiée que vous souhaitez afficher pour les destinataires
- `server.ntdl` par le nom de votre serveur FQDN
- `server` par le nom de votre serveur non FQDN
Vous pouvez ajouter autant de règles que nécessaire, chacune sur une nouvelle ligne.
## Enregistrer et fermer le fichier
Une fois que vous avez configuré toutes les règles de réécriture souhaitées, enregistrez et fermez le fichier `/etc/postfix/generic`.
## Générer le fichier de hachage
Le fichier `/etc/postfix/generic` doit être converti en un fichier de hachage pour que Postfix puisse l'utiliser efficacement. Pour générer le fichier de hachage, exécutez la commande suivante :
```
sudo postmap /etc/postfix/generic
```
Cela va créer un fichier `/etc/postfix/generic.db`, qui contient le hachage des adresses e-mail réécrites.
## Configurer Postfix pour utiliser `/etc/postfix/generic`
Ouvrez le fichier de configuration principal de Postfix `/etc/postfix/main.cf` et recherchez la directive `smtp_generic_maps`. Si elle n'existe pas, ajoutez la ligne suivante :
```
sender_canonical_maps = hash:/etc/postfix/generic
```
Cette directive indique à Postfix d'utiliser le fichier `/etc/postfix/generic` pour la réécriture des adresses e-mail sortantes.
## Redémarrez Postfix pour appliquer les modifications
```
sudo service postfix restart
```
Avec cette configuration, les réécritures spécifiées dans `/etc/postfix/generic` s'appliqueront également au Return-Path des messages sortants, en plus des en-têtes "**From**", "**Sender**" et "**Return-Path**". Cela vous permet de personnaliser entièrement les adresses d'enveloppe utilisées pour les erreurs de livraison des e-mails.
Si vous souhaitez réécrire d'autres en-têtes des messages sortants comme "**Reply-To**", vous devrez utiliser d'autres directives et configurations spécifiques de Postfix.
@@ -0,0 +1,18 @@
{
"uuid": "0960985d-9e37-4daa-9a48-ba26bdfa7d05",
"slug": "reecrire-return-path-et-l-adresse-d-expediteur",
"title": "Réécriture des adresses e-mail sortantes dans Postfix",
"author": "cedric.abonnel@gmail.com",
"published": true,
"published_at": "2023-05-14 08:19:05",
"created_at": "2023-05-14 08:19:05",
"updated_at": "2023-05-14 08:19:05",
"revisions": [],
"cover": "",
"files_meta": [],
"external_links": [],
"seo_title": "",
"seo_description": "",
"og_image": "",
"category": "Informatique"
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 128 KiB

@@ -0,0 +1,23 @@
## Private Network Firefox
![](firefox_vpn.png)
Les outils Mozilla s'agrandissent. [Firefox Private Network](https:*private-network.firefox.com) propose désormais une protection pour votre protéger des curieux, pirates et méchants hackers sur des réseaux publics et ouverts.
> When requests are sent to the Cloudflare proxy, Cloudflare will observe your IP address (known as the source IP address), the IP address for the Internet property you are accessing (known as the destination IP address), source port, destination port, timestamp and a token provided by Mozilla that indicates that you are a Firefox Private Network user (together, “Proxy Data”).
Cet outil est une extension Firefox et permet également de masquer les requêtes DNS effectuées par Firefox à votre gestionnaire de réseau (FAI, réseau d'entreprise, Wifi connecté, opérateur mobile...). Il s'agit ni plus, ni moins d'une solution VPN. Actuellement disponible pour les versions de Firefox Desktop, cette solution gratuite, est en version Beta et utilise les solutions Cloudflare. Cette solution confère également une solution de Proxy avec conservation des données durant 24 heures.
<https:*www.mozilla.org/en-US/privacy/firefox-private-network/>
<https:*www.cloudflare.com/mozilla/firefox-private-network-privacy-notice/>
Suis-je obliger d’énumérer les points négatifs de cette solution ? Ben oui : **unique opérateur**, **opérateur américain**, **intermédiaire**, **conservation des données hors de notre contrôle**
## Liens
JP m'a rappelé que de la lecture sur des magazines oubliés existait sur le site [Abandonware Magazine](https:*www.abandonware-magazines.org/). Il m'a avoué avoir un faible pour le ZX81. J'en connais un autre qui crackerait pour en avoir un de nouveau.
Il m'a également rappelé au bon souvenir de mon montage de NAS et m'a indiqué que je pouvais également opter pour une solution toute prête avec le [Synology DS1819 + 8 Bay Desktop NAS](https:*amzn.to/2QaKDYZ). 1027€, un peu cher.
Enfin, un vieux logiciel qui traîne dans nos cartes SIM pourrait compromettre notre vie privée. [Ces SMS « invisibles » pourraient géolocaliser plus dun milliard de mobiles](https:*www.01net.com/actualites/ces-sms-invisibles-pourraient-geolocaliser-plus-d-un-milliard-de-mobiles-1766383.html)
Retrouver la [revue digitale du 16/09/2019](https:*info.mindcast.fr/?name=2019-09-16_cedric_info_25_private_network_firefox_abandonware_magazines_simjacker_mcINFO.mp3) dans le podcast audio [mindcast INFO](https:*info.mindcast.fr/).
@@ -0,0 +1,18 @@
{
"uuid": "096df1cd-df10-4134-b6b9-fb1dd420fdc4",
"slug": "15-2",
"title": "15/09/2019",
"author": "cedric.abonnel@gmail.com",
"published": true,
"published_at": "2020-04-17 18:06:42",
"created_at": "2020-04-17 18:06:42",
"updated_at": "2020-04-17 18:06:42",
"revisions": [],
"cover": "",
"files_meta": [],
"external_links": [],
"seo_title": "",
"seo_description": "",
"og_image": "",
"category": "Journal geek"
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 742 KiB

@@ -0,0 +1,7 @@
![](20220220-193728.png)
Le fichier `/sys/firmware/devicetree/base/serial-number` contient le numéro de série du Raspberry Pi. On peut utiliser la commande suivante pour le lire :
cat /sys/firmware/devicetree/base/serial-number
Le fichier `/proc/cpuinfo` contient des informations sur les processeurs et il contient également le numéro de série du Raspberry Pi. La commande suivante permet d'extraire le numéro de série :
cat /proc/cpuinfo | grep Serial | cut -d ' ' -f 2
@@ -0,0 +1,18 @@
{
"uuid": "099c8d09-24a2-40ee-a87a-c6c1861a2cea",
"slug": "lire-le-numero-de-serie",
"title": "Lire le numéro de série du Raspberry Pi",
"author": "cedric.abonnel@gmail.com",
"published": true,
"published_at": "2022-02-20 18:41:23",
"created_at": "2022-02-20 18:41:23",
"updated_at": "2022-02-20 18:41:23",
"revisions": [],
"cover": "",
"files_meta": [],
"external_links": [],
"seo_title": "",
"seo_description": "",
"og_image": "",
"category": "Électronique"
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 784 KiB

@@ -0,0 +1,22 @@
En cours de rédaction
Le contenu peut être faux
L'[ESP32-C3](https:*amzn.to/3KPSx2b) est un circuit imprimé avec pour caractéristique un **microcontrôleur ESP32 série C**.
> Acheter un [ESP32-C3, le successeur de l'ESP32](https:*amzn.to/3KPSx2b)
## Fiche technique / datasheet
Vous pouvez télécharger les datasheets :
- ![ESP32-C3](esp32-c3_datasheet_en.pdf)
- ![Ai ESP-c3-32s](esp-c3-32s-kit-v1.0_specification.pdf)
![esp32-c3-devkitm-1-v1-pinout](20220128-004933.png)
## Configurer l'IDE Arduino
![Paramétrage Arduino Uno](20201212-183454.png)
Je vous invite à consulter la page dédiée à l'installation de logiciel IDE Arduino et au paramétrage de celui-ci pour intégrer les paramètres pour les circuits ESP32.
Ensuite, il faut modifier quelques paramètres.
Pour l**ESP32** il faut sélectionner le **???????** et modifier les paramètres selon votre carte ! Dans la plupart des cas dont le mien, pas besoin de toucher à quoique se soit mise à part le port série sur lequel votre carte est branchée.
@@ -0,0 +1,18 @@
{
"uuid": "09c76f8a-a485-47f3-8dda-49d03f5cd344",
"slug": "specifications-esp32-c3",
"title": "Spécifications de l'ESP32-C3",
"author": "cedric.abonnel@gmail.com",
"published": true,
"published_at": "2022-01-28 10:27:50",
"created_at": "2022-01-28 10:27:50",
"updated_at": "2022-01-28 10:27:50",
"revisions": [],
"cover": "",
"files_meta": [],
"external_links": [],
"seo_title": "",
"seo_description": "",
"og_image": "",
"category": "Électronique"
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 120 KiB

@@ -0,0 +1,40 @@
![Installer PHP FPM et PhpMyAdmin](itunes_mindcast_info_podcast_36.png)
Le projet de migration de bases données MySQL et en cours. Voici un rapide tour des informations que je traite dans cette seconde partie.
Épisode audio disponible dès le **mardi 12 mai 2020**.\\
*[Épisode audio disponible sur https://info.mindcast.fr/media/2020-05-12_36__cedric_abonnel_-_installer_php_fpm_et_phpmyadmin_.mp3]*
Cette page est amenée à évoluer. Vous pouvez réagir à cet épisode
--
**Maria DB, réinitialiser le mot de passe de root**
À chaque installation de Maria DB, le mot de passe ROOT est initialisé avec un mot de passe que je ne connais pas.
- Guide pour Réinitialiser le mot de passe ROOT dans MariaDB
--
**Déplacer les fichiers (InnoDB et MyISAM) de la base de données MySQL vers un serveur Maria DB**
J'ai récupéré les fichiers systèmes dans mon ancien SGBD MySQL. Je veux pouvoir les reprendre.
- Guide pour Restaurer des fichiers systèmes Maria DB
--
**Utiliser PHP FPM pour Apache 2**
Pour exécuter du code PHP, il faut installer linterpréteur PHP.
- Guide pour
--
**Installer phpMyAdmin depuis les sources**
Une application Web PhpMyAdmin permet de naviguer facilement dans les bases de données du SGBD Maria DB / MySQL.
- Guide pour

Some files were not shown because too many files have changed in this diff Show More