diff --git a/.stats_cache.json b/.stats_cache.json index dff28e0..03ac7ba 100644 --- a/.stats_cache.json +++ b/.stats_cache.json @@ -1 +1 @@ -{"readable":true,"books":[],"as":[{"asn":"","name":"LAN","country":"","hits":6099}]} \ No newline at end of file +{"readable":true,"books":[],"as":[{"asn":"","name":"LAN","country":"","hits":6210}]} \ No newline at end of file diff --git a/093711bf-4e60-4ea8-ba73-928d2d67776c/files/_thumb_3007bde7fd56be76-3567.png b/093711bf-4e60-4ea8-ba73-928d2d67776c/files/_thumb_3007bde7fd56be76-3567.png deleted file mode 100644 index 2f594e7..0000000 Binary files a/093711bf-4e60-4ea8-ba73-928d2d67776c/files/_thumb_3007bde7fd56be76-3567.png and /dev/null differ diff --git a/093711bf-4e60-4ea8-ba73-928d2d67776c/files/_thumb_58a97ee03002ccd0-21513.png b/093711bf-4e60-4ea8-ba73-928d2d67776c/files/_thumb_58a97ee03002ccd0-21513.png deleted file mode 100644 index 58d30aa..0000000 Binary files a/093711bf-4e60-4ea8-ba73-928d2d67776c/files/_thumb_58a97ee03002ccd0-21513.png and /dev/null differ diff --git a/093711bf-4e60-4ea8-ba73-928d2d67776c/files/_thumb_7fa3a5beb503fead-99693.png b/093711bf-4e60-4ea8-ba73-928d2d67776c/files/_thumb_7fa3a5beb503fead-99693.png deleted file mode 100644 index 3e8e71d..0000000 Binary files a/093711bf-4e60-4ea8-ba73-928d2d67776c/files/_thumb_7fa3a5beb503fead-99693.png and /dev/null differ diff --git a/093711bf-4e60-4ea8-ba73-928d2d67776c/files/cover.svg b/093711bf-4e60-4ea8-ba73-928d2d67776c/files/cover.svg deleted file mode 100644 index 5b156e4..0000000 --- a/093711bf-4e60-4ea8-ba73-928d2d67776c/files/cover.svg +++ /dev/null @@ -1,107 +0,0 @@ - -Certificats Let's Encrypt 6 jours — illustration d'article -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. - - - - - - - - -DEVOPS / WEBOPS - - -Certificats à 6 jours : -faut-il sauter le pas ? - - -Le profil shortlived de Let's Encrypt expliqué aux ops - - - - - - - - - - - - - - - - - - 6 - JOURS - - - - - - AVANT — 90 jours - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ×90 - - - - - - APRÈS — 6 jours - - - - - - - - ×6 - - - - - -Let's Encrypt · Profil shortlived · Certbot 4.0+ -Guide pour les ops auto-hébergés - - \ No newline at end of file diff --git a/093711bf-4e60-4ea8-ba73-928d2d67776c/index.md b/093711bf-4e60-4ea8-ba73-928d2d67776c/index.md deleted file mode 100644 index 9b57b14..0000000 --- a/093711bf-4e60-4ea8-ba73-928d2d67776c/index.md +++ /dev/null @@ -1,200 +0,0 @@ -# Certificats Let's Encrypt à 6 jours : faut-il sauter le pas ? - -> 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//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/.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/) \ No newline at end of file diff --git a/093711bf-4e60-4ea8-ba73-928d2d67776c/meta.json b/093711bf-4e60-4ea8-ba73-928d2d67776c/meta.json deleted file mode 100644 index a928146..0000000 --- a/093711bf-4e60-4ea8-ba73-928d2d67776c/meta.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "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 EFF’s blog.\nAs we announced earlier this year, Let’s 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é" -} diff --git a/0bba1ad7-e4cb-49a6-9467-fcfac2e09a93/files/cover.jpg b/0bba1ad7-e4cb-49a6-9467-fcfac2e09a93/files/cover.jpg deleted file mode 100644 index 4cd810c..0000000 Binary files a/0bba1ad7-e4cb-49a6-9467-fcfac2e09a93/files/cover.jpg and /dev/null differ diff --git a/0bba1ad7-e4cb-49a6-9467-fcfac2e09a93/index.md b/0bba1ad7-e4cb-49a6-9467-fcfac2e09a93/index.md deleted file mode 100644 index 43c1c88..0000000 --- a/0bba1ad7-e4cb-49a6-9467-fcfac2e09a93/index.md +++ /dev/null @@ -1,136 +0,0 @@ -# Deuxièmes pas DevOps : durcir et fiabiliser un serveur Debian - -Une fois le système de base configuré (dépôts, mises à jour, `sudo`, identification — sujets traités dans l'article précédent), la machine est fonctionnelle mais encore vulnérable et un peu fragile pour un usage sérieux. Ce deuxième article s'attaque aux gestes qui transforment un serveur « qui marche » en un serveur sur lequel on peut raisonnablement faire tourner quelque chose : sécuriser l'accès SSH, mettre en place un pare-feu, automatiser les correctifs de sécurité et soigner quelques détails opérationnels. - -## Sécuriser l'accès SSH - -SSH est la porte d'entrée principale d'un serveur Linux. C'est aussi, statistiquement, la cible la plus attaquée : n'importe quelle IP publique reçoit en permanence des tentatives de connexion automatisées. Deux gestes simples changent radicalement la donne. - -### Passer à l'authentification par clé - -Les mots de passe, même longs, restent vulnérables aux attaques par force brute et au phishing. Une paire de clés cryptographiques est à la fois plus sûre et plus pratique au quotidien. - -Côté poste de travail, on génère une paire de clés modernes : - -```bash -ssh-keygen -t ed25519 -C "cedrix@laptop" -``` - -L'algorithme `ed25519` est aujourd'hui le choix par défaut recommandé : clés courtes, signatures rapides, sécurité solide. Le commentaire (`-C`) facilite l'identification de la clé quand on en gère plusieurs. - -On copie ensuite la clé publique sur le serveur : - -```bash -ssh-copy-id utilisateur@serveur -``` - -Cette commande dépose la clé publique dans `~/.ssh/authorized_keys` côté serveur avec les bonnes permissions. À partir de là, la connexion se fait sans saisir de mot de passe — il faut tester depuis une nouvelle session avant de passer à l'étape suivante, sous peine de risquer de se retrouver enfermé dehors. - -### Désactiver la connexion root et les mots de passe - -Une fois la connexion par clé validée, on durcit la configuration SSH. Le fichier à modifier est `/etc/ssh/sshd_config` : - -```bash -sudo nano /etc/ssh/sshd_config -``` - -Les directives importantes à positionner (ou décommenter) sont : - -``` -PermitRootLogin no -PasswordAuthentication no -PubkeyAuthentication yes -``` - -La première interdit toute connexion directe en `root` via SSH : on devra obligatoirement se connecter avec un utilisateur normal puis élever ses droits via `sudo`. La deuxième supprime complètement l'authentification par mot de passe, ne laissant plus que les clés. La troisième confirme explicitement que l'authentification par clé est active. - -On recharge ensuite le service pour appliquer les changements : - -```bash -sudo systemctl reload ssh -``` - -Important : garder la session SSH actuelle ouverte et tester la nouvelle configuration depuis un autre terminal avant de fermer la première. En cas de problème, on peut encore corriger le tir. - -Pour aller un cran plus loin, changer le port SSH par défaut (22) vers un port moins évident réduit considérablement le bruit dans les logs. Ce n'est pas de la sécurité au sens strict (un scan le retrouvera), mais c'est un filtre efficace contre les attaques automatisées. - -## Mettre en place un pare-feu - -Par défaut, Debian n'a aucun pare-feu actif. Tout port ouvert par un service installé sera donc directement exposé. Deux outils standards existent : `nftables` (le successeur officiel d'`iptables`, bas niveau et puissant) et `ufw` (une surcouche pensée pour la simplicité). Pour démarrer, `ufw` est le bon compromis. - -```bash -sudo apt install ufw -``` - -La logique consiste à tout bloquer en entrée par défaut, puis à n'ouvrir explicitement que ce qui doit l'être : - -```bash -sudo ufw default deny incoming -sudo ufw default allow outgoing -sudo ufw allow ssh -sudo ufw enable -``` - -Si SSH écoute sur un port non standard, remplacer `ufw allow ssh` par `ufw allow 2222/tcp` (ou le port choisi). Oublier cette étape avant un `ufw enable` est un grand classique du verrouillage involontaire. - -Pour les services web, on ouvrira typiquement les ports 80 et 443 : - -```bash -sudo ufw allow 80/tcp -sudo ufw allow 443/tcp -``` - -L'état du pare-feu se vérifie avec : - -```bash -sudo ufw status verbose -``` - -Sur une architecture où la machine est derrière un reverse proxy (cas fréquent quand on expose plusieurs services sur un même domaine), seuls les ports utiles côté proxy doivent être ouverts au monde extérieur. Les services applicatifs eux-mêmes restent accessibles uniquement depuis le réseau interne. - -## Automatiser les correctifs de sécurité - -Les failles de sécurité ne préviennent pas, et personne n'a envie de lancer manuellement `apt upgrade` chaque matin sur dix machines. Le paquet `unattended-upgrades` applique automatiquement les mises à jour du dépôt `security`. - -```bash -sudo apt install unattended-upgrades -sudo dpkg-reconfigure --priority=low unattended-upgrades -``` - -La configuration se trouve ensuite dans `/etc/apt/apt.conf.d/50unattended-upgrades`. Par défaut, seuls les correctifs de sécurité sont appliqués automatiquement, ce qui est généralement le bon compromis : on profite des patches critiques sans risquer qu'une mise à jour fonctionnelle introduise une régression sur un service en production. - -Quelques options qui méritent l'attention dans ce fichier : - -- `Unattended-Upgrade::Automatic-Reboot` : à régler sur `"true"` si l'on accepte les redémarrages automatiques après une mise à jour de noyau, ou `"false"` si l'on préfère les piloter à la main. La directive `Automatic-Reboot-Time` permet alors de choisir l'horaire. -- `Unattended-Upgrade::Mail` : pour recevoir un rapport par mail des mises à jour appliquées, à condition d'avoir un MTA configuré sur la machine. - -Le bon réflexe consiste à vérifier de temps en temps les logs dans `/var/log/unattended-upgrades/` pour s'assurer que tout se déroule sans heurts. - -## Soigner les détails opérationnels - -Quelques outils complémentaires améliorent significativement le confort et la résilience d'un serveur. - -**Fail2ban** surveille les logs d'authentification et bannit temporairement les IP qui tentent trop de connexions échouées. Même avec SSH par clé uniquement, le service réduit considérablement le bruit dans les journaux : - -```bash -sudo apt install fail2ban -``` - -La configuration par défaut surveille déjà SSH ; elle peut être étendue à d'autres services (nginx, Postfix, etc.) via des fichiers dans `/etc/fail2ban/jail.d/`. - -**Logwatch** ou **journalctl** méritent qu'on s'y attarde. Sur une Debian récente, `journalctl` est l'outil central pour consulter les logs systemd : - -```bash -journalctl -u ssh --since "1 hour ago" -journalctl -p err --since today -``` - -Prendre l'habitude de jeter un œil aux logs régulièrement — ou de mettre en place une remontée centralisée si l'on gère plusieurs machines — change beaucoup de choses en exploitation. - -**Un swap raisonnable**, sur une VM ou un serveur dédié, évite que la machine ne devienne complètement injoignable en cas de pic de consommation mémoire. Sur un conteneur LXC en revanche, c'est généralement géré au niveau de l'hyperviseur. - -## Et après ? - -Avec ces réglages, le serveur est dans un état correct pour accueillir des services réels : la surface d'attaque est réduite, les correctifs s'appliquent tout seuls, et les logs racontent ce qui se passe. La suite logique est l'installation de la pile applicative proprement dite (serveur web, base de données, runtime) et la mise en place d'un reverse proxy pour exposer plusieurs services derrière un même point d'entrée. - -Comme évoqué dans le premier article, le moment où l'on commence à enchaîner ces étapes sur plusieurs machines est exactement celui où il faut basculer vers de l'automatisation : un script shell bien rangé pour commencer, puis Ansible ou un équivalent quand le parc grossit. Une bonne pratique consiste à versionner ces scripts dans un dépôt Git dédié à l'infrastructure, au même titre que le code applicatif. \ No newline at end of file diff --git a/0bba1ad7-e4cb-49a6-9467-fcfac2e09a93/meta.json b/0bba1ad7-e4cb-49a6-9467-fcfac2e09a93/meta.json deleted file mode 100644 index 8eafb47..0000000 --- a/0bba1ad7-e4cb-49a6-9467-fcfac2e09a93/meta.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "uuid": "0bba1ad7-e4cb-49a6-9467-fcfac2e09a93", - "slug": "deuxiemes-pas-devops-durcir-et-fiabiliser-un-serveur-debian", - "title": "Deuxièmes pas DevOps : durcir et fiabiliser un serveur Debian", - "author": "cedric@abonnel.fr", - "published": true, - "published_at": "2026-06-08 07:00", - "created_at": "2026-05-12 23:01:34", - "updated_at": "2026-05-12 23:29:17", - "revisions": [], - "cover": "cover.jpg", - "files_meta": { - "cover.jpg": { - "author": "", - "source_url": "" - } - }, - "external_links": [ - { - "url": "https://varlog.a5l.fr/post/post-install", - "name": "Premiers pas DevOps : préparer un système Debian fraîchement installé", - "added_at": "2026-05-12 23:18:02", - "author": "Cédrix", - "meta": { - "mime": "text/html", - "description": "Lorsqu'on vient de provisionner une machine Debian — que ce soit un conteneur LXC, une VM ou un serveur dédié — quelques étapes initiales sont incontourna…" - } - } - ], - "seo_title": "", - "seo_description": "", - "og_image": "https://varlog.a5l.fr/file?uuid=0bba1ad7-e4cb-49a6-9467-fcfac2e09a93&name=cover.jpg", - "category": "informatique" -} diff --git a/0e0b8d1d-3352-4ab7-bc70-7bc1f02ee485/files/7ee02eb092b334c4-23450.svg b/0e0b8d1d-3352-4ab7-bc70-7bc1f02ee485/files/7ee02eb092b334c4-23450.svg deleted file mode 100644 index b7e8dc0..0000000 --- a/0e0b8d1d-3352-4ab7-bc70-7bc1f02ee485/files/7ee02eb092b334c4-23450.svg +++ /dev/null @@ -1,97 +0,0 @@ - -ImageMagick sur Debian : convert-im6, magick, et leur lien avec les binaires sous-jacents -Schéma illustrant comment les commandes convert et magick sont des symlinks vers les binaires versionnés convert-im6.q16 et magick-im7.q16 sur Debian. - - - - -ImageMagick sur Debian -Ce que tu tapes, ce que le système exécute - - -Debian 11 / 12 (bookworm) - - - -convert -tu tapes - - - - - - -indispo -par défaut - - - - -convert-im6 -tu tapes - - - - - - -IM 6 -.q16 - - - -Debian 13 (trixie) - - - -convert -symlink - - - - - - -IM 7 -.q16 - - - - -magick -recommandé - - - - - - -IM 7 -.q16 - - -Pourquoi ce renommage ? - - - -ImageMagick 6 -convert, identify, -mogrify, composite - - - - -ImageMagick 7 -magick -(commande unique) - - -+ -noms en -conflit - - -Solution Debian : suffixer chaque binaire -convert-im6.q16 / magick-im7.q16 → cohabitation possible - - \ No newline at end of file diff --git a/0e0b8d1d-3352-4ab7-bc70-7bc1f02ee485/files/cover.svg b/0e0b8d1d-3352-4ab7-bc70-7bc1f02ee485/files/cover.svg deleted file mode 100644 index 14a049e..0000000 --- a/0e0b8d1d-3352-4ab7-bc70-7bc1f02ee485/files/cover.svg +++ /dev/null @@ -1,115 +0,0 @@ - -magick : la commande unifiée d'ImageMagick 7 -Illustration représentant la commande magick comme une baguette magique transformant une image source en plusieurs formats. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -photo.jpg - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -PNG -photo.png - - - - -WEBP -photo.webp - - - - -AVIF -photo.avif - - - - - - - - -magick -one command, every format - -$ magick photo.jpg -resize 1600 photo.webp -ImageMagick 7 - \ No newline at end of file diff --git a/0e0b8d1d-3352-4ab7-bc70-7bc1f02ee485/index.md b/0e0b8d1d-3352-4ab7-bc70-7bc1f02ee485/index.md deleted file mode 100644 index db16dd8..0000000 --- a/0e0b8d1d-3352-4ab7-bc70-7bc1f02ee485/index.md +++ /dev/null @@ -1,80 +0,0 @@ -# ImageMagick sur Debian : pourquoi `convert-im6` et où trouver `magick` - -Si tu as déjà installé ImageMagick sur un serveur Debian, tu es probablement tombé sur cette étrangeté : la commande `convert` historique est là, mais elle s'appelle `convert-im6`. Et la commande moderne `magick`, présente partout ailleurs, semble manquer à l'appel — sauf si tu es sur Debian 13, où elle est revenue. - -Le sujet est un peu plus subtil qu'il n'y paraît, et beaucoup d'explications qui circulent sur le web sont fausses (notamment celle qui prétend que `convert` entrerait en conflit avec un binaire de `util-linux` — c'est un mythe). Voilà ce qui se passe réellement. - -## Un peu de contexte sur ImageMagick - -ImageMagick, c'est une suite d'outils en ligne de commande pour manipuler des images : conversion de formats, redimensionnement, compression, génération de vignettes, watermarks, lecture de métadonnées… Le genre d'outil qu'on retrouve aussi bien dans un script bash de cinq lignes que dans une chaîne de traitement industrielle ou un pipeline CI. - -Historiquement, la suite est composée de plusieurs binaires distincts, chacun avec son rôle : `convert` pour la conversion, `identify` pour lire les métadonnées, `mogrify` pour le traitement par lot, `composite` pour combiner des images, `montage` pour les planches. C'est l'architecture d'**ImageMagick 6**, la version qui a régné en maître pendant une bonne quinzaine d'années. - -Depuis 2016, **ImageMagick 7** est disponible. Le grand changement, c'est qu'il unifie tout derrière une seule commande : `magick`. Les anciennes commandes deviennent des sous-commandes (`magick convert`, `magick identify`, etc.), même si pour la rétrocompatibilité un binaire `magick` peut continuer à se comporter comme `convert` quand on l'appelle avec une syntaxe d'IM6. - -## Pourquoi le suffixe `-im6` sur Debian - -C'est ici que beaucoup d'articles racontent n'importe quoi. La vraie raison n'a rien à voir avec un conflit avec `util-linux` — je l'ai vérifié, aucun paquet système ne fournit de commande `convert`. Tu peux le vérifier toi-même : `dpkg -S /usr/bin/convert` ne renvoie rien qui vienne de util-linux. - -La vraie raison est plus prosaïque. Pendant des années, Debian a voulu pouvoir **packager IM6 et IM7 en parallèle** dans la même distribution, pour permettre une transition en douceur. Le souci, c'est que les deux versions fournissent des binaires aux mêmes noms (`convert`, `identify`, `mogrify`…) avec des comportements légèrement différents. Impossible de les installer côte à côte sans renommer. - -La solution adoptée par les mainteneurs Debian a été d'ajouter un suffixe explicite au nom de chaque binaire : - -- les outils d'IM6 deviennent `convert-im6.q16`, `identify-im6.q16`, etc. -- les outils d'IM7 deviennent `magick-im7.q16` et compagnie - -Le `.q16` indique la profondeur quantique du binaire (16 bits par canal, la valeur par défaut), et le `-im6` / `-im7` indique la version d'ImageMagick. Les noms classiques (`convert`, `magick`) ne sont alors que des symlinks gérés par `update-alternatives`, qui pointent vers la version active. C'est le même mécanisme que pour `java`, `editor`, ou `python` à une époque. - -## Ce qui change entre Debian 11, 12 et 13 - -C'est l'autre point que la plupart des articles ratent : la situation n'est pas la même selon la version de Debian. - -Sur **Debian 11 (bullseye) et 12 (bookworm)**, le paquet `imagemagick` installe IM6 (version 6.9.11.60). Tu n'as que `convert-im6` et ses copains, et `magick` n'existe pas dans les dépôts officiels (le paquet `imagemagick-7.q16` existe mais n'est pas le défaut). C'est cette situation que décrivent la plupart des tutoriels qui traînent sur le web. - -Sur **Debian 13 (trixie)**, sorti en août 2025, le défaut a basculé sur IM7 (version 7.1.1.43). La commande `magick` est disponible, et `convert` est désormais un symlink vers `magick-im7.q16`. Tu peux le vérifier : - -```bash -$ readlink -f /usr/bin/convert -/usr/bin/magick-im7.q16 -``` - -Autrement dit, sur Trixie, si tu écris `convert image.jpg image.png`, tu appelles en réalité IM7 sous un nom d'IM6. Ça fonctionne pour la plupart des usages, mais attention : IM7 est plus strict sur l'ordre des arguments en ligne de commande (`magick [INPUT-OPTIONS] INPUT [OUTPUT-OPTIONS] OUTPUT`), donc certains scripts anciens peuvent grogner. - -## Correspondance entre les deux versions - -| ImageMagick 6 (Debian 11/12) | ImageMagick 7 (Debian 13) | -| ---------------------------- | ------------------------- | -| `convert-im6` | `magick` | -| `identify-im6` | `magick identify` | -| `mogrify-im6` | `magick mogrify` | -| `composite-im6` | `magick composite` | - -Pour les cas simples, le comportement est identique. Une commande de redimensionnement classique passe sans modification : - -```bash -# Debian 11/12 -convert-im6 photo.jpg -resize 1600x1600 photo_reduite.jpg - -# Debian 13 -magick photo.jpg -resize 1600x1600 photo_reduite.jpg -``` - -## Faut-il s'inquiéter sur un serveur en production ? - -Si tu administres une machine Debian 12 ou plus ancienne, non. IM6 est toujours activement maintenu pour les CVE (les correctifs sont régulièrement backportés dans les paquets stable), et la plupart des scripts existants continueront de fonctionner. Le `-im6` dans le nom du binaire est juste du marquage, pas une dépréciation. - -Si tu migres vers Debian 13, prévois un peu de temps pour relire tes scripts. Les pièges classiques : - -- l'ordre des options qui devient plus strict ; -- quelques comportements de couleur et d'alpha qui ont changé entre les deux versions, notamment sur les opérations chaînées ; -- le fichier `policy.xml` qui a déménagé : `/etc/ImageMagick-6/` devient `/etc/ImageMagick-7/`. Si tu avais assoupli les restrictions sur les PDF ou PostScript (un grand classique), il faut reporter la modification. - -Pour un projet PHP comme les tiens, l'extension Imagick côté PHP est sensible à cette transition : la version compilée doit correspondre à la version d'IM installée, sinon `pecl install imagick` échoue. Sur Trixie, c'est IM7 qu'il faut lier. - -## En pratique - -Sur Debian 11/12, utilise `convert-im6`, `identify-im6`, etc. C'est la convention locale, pas une version dégradée. Si tu veux `magick` malgré tout, tu peux installer le paquet `imagemagick-7.q16` (présent dans les dépôts depuis bookworm) et basculer les alternatives manuellement, mais ce n'est presque jamais nécessaire. - -Sur Debian 13, utilise `magick` directement. La commande `convert` reste disponible par compatibilité, mais elle pointe en réalité vers IM7 — autant utiliser le nom officiel. - -Et dans tous les cas, évite les alias globaux qui réécrivent `convert` : ça finit toujours par mordre quelqu'un, soit toi dans six mois, soit le prochain qui reprendra le serveur. \ No newline at end of file diff --git a/0e0b8d1d-3352-4ab7-bc70-7bc1f02ee485/meta.json b/0e0b8d1d-3352-4ab7-bc70-7bc1f02ee485/meta.json deleted file mode 100644 index 95b6261..0000000 --- a/0e0b8d1d-3352-4ab7-bc70-7bc1f02ee485/meta.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "uuid": "0e0b8d1d-3352-4ab7-bc70-7bc1f02ee485", - "slug": "imagemagick-sur-debian-pourquoi-convert-im6-et-ou-trouver-magick", - "title": "ImageMagick sur Debian : pourquoi `convert-im6` et où trouver `magick`", - "author": "cedric@abonnel.fr", - "published": true, - "published_at": "2025-12-28 15:32", - "created_at": "2025-12-28 15:32:01", - "updated_at": "2026-05-12 00:29:00", - "revisions": [ - { - "n": 1, - "date": "2026-05-12 00:29:00", - "comment": "", - "title": "ImageMagick sur Debian : pourquoi `convert-im6` et où trouver `magick`" - } - ], - "cover": "cover.svg", - "files_meta": { - "45de275c5f174797-24653.svg": { - "author": "", - "source_url": "" - }, - "7ee02eb092b334c4-23450.svg": { - "author": "", - "source_url": "" - } - }, - "external_links": [], - "seo_title": "", - "seo_description": "", - "og_image": "", - "category": "linux" -} diff --git a/0e0b8d1d-3352-4ab7-bc70-7bc1f02ee485/revisions/0001.md b/0e0b8d1d-3352-4ab7-bc70-7bc1f02ee485/revisions/0001.md deleted file mode 100644 index 1065904..0000000 --- a/0e0b8d1d-3352-4ab7-bc70-7bc1f02ee485/revisions/0001.md +++ /dev/null @@ -1,78 +0,0 @@ -Si tu as déjà installé ImageMagick sur un serveur Debian, tu es probablement tombé sur cette étrangeté : la commande `convert` historique est là, mais elle s'appelle `convert-im6`. Et la commande moderne `magick`, présente partout ailleurs, semble manquer à l'appel — sauf si tu es sur Debian 13, où elle est revenue. - -Le sujet est un peu plus subtil qu'il n'y paraît, et beaucoup d'explications qui circulent sur le web sont fausses (notamment celle qui prétend que `convert` entrerait en conflit avec un binaire de `util-linux` — c'est un mythe). Voilà ce qui se passe réellement. - -## Un peu de contexte sur ImageMagick - -ImageMagick, c'est une suite d'outils en ligne de commande pour manipuler des images : conversion de formats, redimensionnement, compression, génération de vignettes, watermarks, lecture de métadonnées… Le genre d'outil qu'on retrouve aussi bien dans un script bash de cinq lignes que dans une chaîne de traitement industrielle ou un pipeline CI. - -Historiquement, la suite est composée de plusieurs binaires distincts, chacun avec son rôle : `convert` pour la conversion, `identify` pour lire les métadonnées, `mogrify` pour le traitement par lot, `composite` pour combiner des images, `montage` pour les planches. C'est l'architecture d'**ImageMagick 6**, la version qui a régné en maître pendant une bonne quinzaine d'années. - -Depuis 2016, **ImageMagick 7** est disponible. Le grand changement, c'est qu'il unifie tout derrière une seule commande : `magick`. Les anciennes commandes deviennent des sous-commandes (`magick convert`, `magick identify`, etc.), même si pour la rétrocompatibilité un binaire `magick` peut continuer à se comporter comme `convert` quand on l'appelle avec une syntaxe d'IM6. - -## Pourquoi le suffixe `-im6` sur Debian - -C'est ici que beaucoup d'articles racontent n'importe quoi. La vraie raison n'a rien à voir avec un conflit avec `util-linux` — je l'ai vérifié, aucun paquet système ne fournit de commande `convert`. Tu peux le vérifier toi-même : `dpkg -S /usr/bin/convert` ne renvoie rien qui vienne de util-linux. - -La vraie raison est plus prosaïque. Pendant des années, Debian a voulu pouvoir **packager IM6 et IM7 en parallèle** dans la même distribution, pour permettre une transition en douceur. Le souci, c'est que les deux versions fournissent des binaires aux mêmes noms (`convert`, `identify`, `mogrify`…) avec des comportements légèrement différents. Impossible de les installer côte à côte sans renommer. - -La solution adoptée par les mainteneurs Debian a été d'ajouter un suffixe explicite au nom de chaque binaire : - -- les outils d'IM6 deviennent `convert-im6.q16`, `identify-im6.q16`, etc. -- les outils d'IM7 deviennent `magick-im7.q16` et compagnie - -Le `.q16` indique la profondeur quantique du binaire (16 bits par canal, la valeur par défaut), et le `-im6` / `-im7` indique la version d'ImageMagick. Les noms classiques (`convert`, `magick`) ne sont alors que des symlinks gérés par `update-alternatives`, qui pointent vers la version active. C'est le même mécanisme que pour `java`, `editor`, ou `python` à une époque. - -## Ce qui change entre Debian 11, 12 et 13 - -C'est l'autre point que la plupart des articles ratent : la situation n'est pas la même selon la version de Debian. - -Sur **Debian 11 (bullseye) et 12 (bookworm)**, le paquet `imagemagick` installe IM6 (version 6.9.11.60). Tu n'as que `convert-im6` et ses copains, et `magick` n'existe pas dans les dépôts officiels (le paquet `imagemagick-7.q16` existe mais n'est pas le défaut). C'est cette situation que décrivent la plupart des tutoriels qui traînent sur le web. - -Sur **Debian 13 (trixie)**, sorti en août 2025, le défaut a basculé sur IM7 (version 7.1.1.43). La commande `magick` est disponible, et `convert` est désormais un symlink vers `magick-im7.q16`. Tu peux le vérifier : - -```bash -$ readlink -f /usr/bin/convert -/usr/bin/magick-im7.q16 -``` - -Autrement dit, sur Trixie, si tu écris `convert image.jpg image.png`, tu appelles en réalité IM7 sous un nom d'IM6. Ça fonctionne pour la plupart des usages, mais attention : IM7 est plus strict sur l'ordre des arguments en ligne de commande (`magick [INPUT-OPTIONS] INPUT [OUTPUT-OPTIONS] OUTPUT`), donc certains scripts anciens peuvent grogner. - -## Correspondance entre les deux versions - -| ImageMagick 6 (Debian 11/12) | ImageMagick 7 (Debian 13) | -| ---------------------------- | ------------------------- | -| `convert-im6` | `magick` | -| `identify-im6` | `magick identify` | -| `mogrify-im6` | `magick mogrify` | -| `composite-im6` | `magick composite` | - -Pour les cas simples, le comportement est identique. Une commande de redimensionnement classique passe sans modification : - -```bash -# Debian 11/12 -convert-im6 photo.jpg -resize 1600x1600 photo_reduite.jpg - -# Debian 13 -magick photo.jpg -resize 1600x1600 photo_reduite.jpg -``` - -## Faut-il s'inquiéter sur un serveur en production ? - -Si tu administres une machine Debian 12 ou plus ancienne, non. IM6 est toujours activement maintenu pour les CVE (les correctifs sont régulièrement backportés dans les paquets stable), et la plupart des scripts existants continueront de fonctionner. Le `-im6` dans le nom du binaire est juste du marquage, pas une dépréciation. - -Si tu migres vers Debian 13, prévois un peu de temps pour relire tes scripts. Les pièges classiques : - -- l'ordre des options qui devient plus strict ; -- quelques comportements de couleur et d'alpha qui ont changé entre les deux versions, notamment sur les opérations chaînées ; -- le fichier `policy.xml` qui a déménagé : `/etc/ImageMagick-6/` devient `/etc/ImageMagick-7/`. Si tu avais assoupli les restrictions sur les PDF ou PostScript (un grand classique), il faut reporter la modification. - -Pour un projet PHP comme les tiens, l'extension Imagick côté PHP est sensible à cette transition : la version compilée doit correspondre à la version d'IM installée, sinon `pecl install imagick` échoue. Sur Trixie, c'est IM7 qu'il faut lier. - -## En pratique - -Sur Debian 11/12, utilise `convert-im6`, `identify-im6`, etc. C'est la convention locale, pas une version dégradée. Si tu veux `magick` malgré tout, tu peux installer le paquet `imagemagick-7.q16` (présent dans les dépôts depuis bookworm) et basculer les alternatives manuellement, mais ce n'est presque jamais nécessaire. - -Sur Debian 13, utilise `magick` directement. La commande `convert` reste disponible par compatibilité, mais elle pointe en réalité vers IM7 — autant utiliser le nom officiel. - -Et dans tous les cas, évite les alias globaux qui réécrivent `convert` : ça finit toujours par mordre quelqu'un, soit toi dans six mois, soit le prochain qui reprendra le serveur. \ No newline at end of file diff --git a/0eaa0f05-7f48-47b4-91d3-3ba4ac80fe50/index.md b/0eaa0f05-7f48-47b4-91d3-3ba4ac80fe50/index.md deleted file mode 100644 index a9843a8..0000000 --- a/0eaa0f05-7f48-47b4-91d3-3ba4ac80fe50/index.md +++ /dev/null @@ -1,9 +0,0 @@ -# Clearview AI : quand l’intelligence artificielle dépasse les limites du « public » - -En 2019, une start-up américaine du nom de **Clearview AI** fait irruption dans le monde de la reconnaissance faciale. Son idée paraît révolutionnaire : créer une base de données géante pour identifier n’importe qui à partir d’une simple photo. Pour nourrir son intelligence artificielle, l’entreprise collecte **des milliards d’images publiques** issues de plateformes comme **Facebook, LinkedIn, Twitter ou encore YouTube**. Chaque cliché, chaque visage devient une donnée utile à l’algorithme — mais sans que les personnes concernées n’en soient informées, ni qu’elles aient donné leur **consentement**. - -Rapidement, l’ampleur du projet suscite la controverse. Des journalistes révèlent les pratiques de Clearview, et les autorités de protection des données s’en emparent. En **France**, la **CNIL** sanctionne l’entreprise pour traitement illégal de données biométriques. Le **régulateur britannique** fait de même, imposant des amendes et **interdisant l’usage de ces données en Europe**. Ce scandale devient un symbole : il montre que même à l’ère numérique, la **vie privée** reste un droit fondamental, et que la technologie ne peut pas s’affranchir des règles éthiques et juridiques. - -L’affaire Clearview soulève un **enjeu majeur** : la frontière entre le **contenu public** et le **contenu libre d’usage**. Ce n’est pas parce qu’une image est visible en ligne qu’elle peut être exploitée pour entraîner une IA. Cette logique s’applique aussi à des plateformes comme **LinkedIn** : les informations qu’on y partage publiquement ne deviennent pas pour autant un matériau libre pour les algorithmes. - -Ainsi, Clearview AI incarne à la fois la puissance et le danger de l’intelligence artificielle : un outil capable du meilleur, mais aussi du pire, lorsqu’il franchit la ligne fragile entre innovation et intrusion. diff --git a/0eaa0f05-7f48-47b4-91d3-3ba4ac80fe50/meta.json b/0eaa0f05-7f48-47b4-91d3-3ba4ac80fe50/meta.json deleted file mode 100644 index 5bb26bf..0000000 --- a/0eaa0f05-7f48-47b4-91d3-3ba4ac80fe50/meta.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "uuid": "0eaa0f05-7f48-47b4-91d3-3ba4ac80fe50", - "slug": "clearview-ai-quand-l-intelligence-artificielle-depasse-les-limites-du-public", - "title": "Clearview AI : quand l’intelligence artificielle dépasse les limites du « public »", - "author": "cedric@abonnel.fr", - "published": true, - "published_at": "2025-11-05 07:15:36", - "created_at": "2025-11-05 07:15:36", - "updated_at": "2025-11-05 07:15:36", - "revisions": [], - "cover": "cover.jpg", - "category": "actualité" -} diff --git a/104a8694-4268-4e0a-99c7-e7ecfd47af1e/files/_thumb_b7a3540aaf062cdb-1682326.jpg b/104a8694-4268-4e0a-99c7-e7ecfd47af1e/files/_thumb_b7a3540aaf062cdb-1682326.jpg deleted file mode 100644 index fdf9cbb..0000000 Binary files a/104a8694-4268-4e0a-99c7-e7ecfd47af1e/files/_thumb_b7a3540aaf062cdb-1682326.jpg and /dev/null differ diff --git a/104a8694-4268-4e0a-99c7-e7ecfd47af1e/files/cover.svg b/104a8694-4268-4e0a-99c7-e7ecfd47af1e/files/cover.svg deleted file mode 100644 index 1be63df..0000000 --- a/104a8694-4268-4e0a-99c7-e7ecfd47af1e/files/cover.svg +++ /dev/null @@ -1,143 +0,0 @@ - -Auto-héberger son serveur mail en 2026 -Illustration de couverture pour un dossier technique sur l'auto-hébergement d'un serveur mail. Une grande enveloppe stylisée vue de face occupe le centre, avec un cachet rouge "@" et un timbre figurant un serveur. Le titre s'affiche au-dessus. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -DOSSIER · CYBERSOUVERAINETÉ · 2026 - - -Auto-héberger -son serveur mail - - - - - -survivre aux règles de Gmail, Outlook et consorts - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -SMTP 25 - - - - - - - - - -AUTO-HÉBERGÉ · 2026 - - -SPF · DKIM · DMARC - - -@ - - - - - - - - - - - - - - - - - - - -À : - - - - - - - - - - - - - - - -RFC 821 · 1982 — 2026 -postmaster@localhost - - \ No newline at end of file diff --git a/104a8694-4268-4e0a-99c7-e7ecfd47af1e/index.md b/104a8694-4268-4e0a-99c7-e7ecfd47af1e/index.md deleted file mode 100644 index 491b218..0000000 --- a/104a8694-4268-4e0a-99c7-e7ecfd47af1e/index.md +++ /dev/null @@ -1,607 +0,0 @@ -# Auto-héberger son serveur mail en 2026 - -## Survivre aux règles de Gmail, Outlook et consorts - -> **Contexte** — Cet article de Clubic ([lien](https://www.clubic.com/dossier-612034-proton-mail-infomaniak-la-souverainete-de-vos-emails-reste-une-illusion-face-aux-regles-dictees-par-google.html)) rappelle une vérité technique : SMTP date de 1982, n'a aucune sécurité native, et toutes les "rustines" (SPF, DKIM, DMARC, MTA-STS, DANE) ont été conçues par Yahoo, Cisco, Microsoft, Google. Depuis février 2024 (Google) et mai 2025 (Microsoft), tout expéditeur dépassant 5000 mails/jour vers Gmail/Outlook doit configurer SPF + DKIM + DMARC, maintenir un taux de spam < 0,1 %, et fournir un lien de désinscription en un clic. -> -> Mais même en dessous de 5000/jour, ces règles s'appliquent en pratique : sans elles, ton mail finit en spam ou est rejeté. Ce dossier décrit comment monter son propre serveur mail tout en passant à travers ces filtres. - ---- - -## Sommaire - -1. [Avant de commencer : est-ce vraiment une bonne idée ?](#1-avant-de-commencer--est-ce-vraiment-une-bonne-idée-) -2. [Prérequis techniques](#2-prérequis-techniques) -3. [Architecture cible](#3-architecture-cible) -4. [Choix du fournisseur et de l'IP](#4-choix-du-fournisseur-et-de-lip) -5. [Configuration DNS complète](#5-configuration-dns-complète) -6. [Installation du stack mail](#6-installation-du-stack-mail) -7. [SPF, DKIM, DMARC : les rustines obligatoires](#7-spf-dkim-dmarc--les-rustines-obligatoires) -8. [MTA-STS, TLS-RPT, DANE : aller plus loin](#8-mta-sts-tls-rpt-dane--aller-plus-loin) -9. [PTR (reverse DNS) et HELO](#9-ptr-reverse-dns-et-helo) -10. [Warmup d'IP : la phase la plus délicate](#10-warmup-dip--la-phase-la-plus-délicate) -11. [Postmaster Tools, SNDS, FBL](#11-postmaster-tools-snds-fbl) -12. [Liste de désinscription en un clic (RFC 8058)](#12-liste-de-désinscription-en-un-clic-rfc-8058) -13. [Anti-spam entrant et hygiène](#13-anti-spam-entrant-et-hygiène) -14. [Monitoring, logs, alertes](#14-monitoring-logs-alertes) -15. [Que faire quand Gmail rejette quand même ?](#15-que-faire-quand-gmail-rejette-quand-même-) -16. [Checklist finale avant mise en prod](#16-checklist-finale-avant-mise-en-prod) -17. [Annexes : commandes utiles](#17-annexes--commandes-utiles) - ---- - -## 1. Avant de commencer : est-ce vraiment une bonne idée ? - -L'auto-hébergement mail est techniquement possible, mais c'est probablement le service le plus pénible à maintenir en 2026. Avant de te lancer, lis ça : - -**Ce qui marche bien en auto-hébergé :** -- Recevoir du mail (presque tout le monde te livre). -- Envoyer vers d'autres serveurs auto-hébergés ou pros bien configurés. -- Garder le contrôle sur tes données, tes alias, tes domaines. - -**Ce qui est dur :** -- Envoyer vers Gmail / Outlook / Yahoo / iCloud sans atterrir en spam. -- Sortir d'une blacklist une fois dedans. -- Maintenir un score de réputation IP correct sur la durée. -- Survivre à un changement unilatéral des règles côté gros acteurs (cf. février 2024 et mai 2025). - -**Stratégie réaliste recommandée :** -- Réception entrante : auto-hébergée à 100 %. Aucun risque, full contrôle. -- Envoi sortant : deux options, selon ton volume et ton tolérance au risque. - - **Option A — Pure auto-hébergée** : tu envoies directement depuis ton serveur. Faisable, mais demande un warmup, une IP propre, et un suivi continu. - - **Option B — Smart host sortant** : tu envoies via un relais réputé (un autre de tes serveurs avec une IP qui a déjà sa réputation, ou un service type Mailjet/Sendgrid/SMTP2GO en bas volume gratuit). Tes mails sortent depuis l'IP du relais, qui a déjà sa réputation faite. C'est un compromis : tu perds une partie de la souveraineté technique, mais tu gagnes énormément en délivrabilité. - -Le reste du dossier suit l'option A — tout en t'expliquant comment basculer en B si nécessaire. - ---- - -## 2. Prérequis techniques - -| Élément | Détail | -|---|---| -| Domaine | À toi, registrar peu importe, mais avec **DNSSEC activable** (cf. §8 pour DANE). | -| Serveur | VPS ou dédié, **2 vCPU / 4 Go RAM minimum**, Debian 12+ ou Ubuntu 24.04 LTS. | -| IP fixe v4 | Indispensable. **IP "résidentielle" ou IP de datacenter récemment recyclée = exclues**. | -| IP fixe v6 | Recommandée, mais désactivable si l'IPv6 du fournisseur est blacklistée. | -| PTR / reverse DNS | **Modifiable par toi**. Si l'hébergeur ne te le permet pas, change d'hébergeur. | -| Ports | 25, 465, 587, 993, 4190 ouverts sortants ET entrants. **Le port 25 sortant est bloqué chez beaucoup d'hébergeurs grand public** (OVH résidentiel, Free, etc.) : vérifie avant. | -| TLS | Certificat valide (Let's Encrypt suffit). | - -**Compétences attendues** : Linux en ligne de commande, DNS (champs A/AAAA/MX/TXT/SRV/CAA/TLSA), notion de TLS, lecture de logs `journalctl` et `/var/log/mail.log`. - ---- - -## 3. Architecture cible - -Un stack standard, éprouvé, en logiciels libres : - -``` - ┌─────────────────────────────────────┐ - │ Internet (mails entrants/sortants) │ - └─────────────────────────────────────┘ - │ - ▼ port 25 - ┌────────────────┐ - │ Postfix │ ← MTA (envoi/réception SMTP) - │ (SMTP / 25/587)│ - └────────────────┘ - │ │ │ - ▼ ▼ ▼ - ┌─────────┐ ┌─────────┐ ┌──────────┐ - │ Rspamd │ │OpenDKIM │ │ Dovecot │ ← IMAP/POP + LMTP - │(spam, │ │ (signe │ │ (livrai- │ - │ DKIM │ │ DKIM) │ │ son aux │ - │ verif, │ └─────────┘ │ boîtes) │ - │ DMARC) │ └──────────┘ - └─────────┘ │ - ▼ - Maildir / utilisateurs -``` - -**Composants** : - -- **Postfix** : MTA. Reçoit, route, envoie le SMTP. -- **Dovecot** : serveur IMAP/POP3, livraison locale (LMTP), authentification SASL pour Postfix, gestion Sieve (filtres). -- **Rspamd** : antispam moderne, fait aussi la **vérification SPF/DKIM/DMARC entrante**, le greylisting, et — option recommandée — la **signature DKIM sortante** (en remplacement d'OpenDKIM). -- **Let's Encrypt (certbot)** : TLS. -- **(Optionnel) Roundcube ou SnappyMail** : webmail. - -**Alternative tout-en-un** : [Mailcow](https://mailcow.email/) ou [Mailu](https://mailu.io/), basés sur Docker, qui empaquètent tout ça avec une interface admin. Si tu préfères ne pas tout configurer à la main, c'est légitime — la majorité des règles DNS et de délivrabilité de ce dossier restent identiques. - ---- - -## 4. Choix du fournisseur et de l'IP - -Le choix de l'hébergeur conditionne la moitié de ta délivrabilité. Avant de prendre un VPS : - -1. **Le port 25 sortant est-il ouvert ?** Beaucoup d'hébergeurs le bloquent par défaut pour limiter le spam (Hetzner l'ouvre sur demande, OVH l'ouvre selon le produit, Scaleway l'ouvre selon le compte). Pose la question au support **avant** de payer. -2. **Le PTR est-il configurable ?** Si non, change. -3. **L'IP a-t-elle été utilisée par un spammeur ?** Avant d'acheter le VPS, demande l'IP qu'on te donnera. Vérifie sur : - - [mxtoolbox.com/blacklists.aspx](https://mxtoolbox.com/blacklists.aspx) - - [multirbl.valli.org](https://multirbl.valli.org/) - - [talosintelligence.com](https://www.talosintelligence.com/) (Cisco) - - [senderscore.org](https://senderscore.org/) - - Si l'IP est listée sur Spamhaus, Barracuda, SORBS, SpamCop, **demande à l'hébergeur de te l'échanger** ou prends un autre VPS. Une fois listée, tu vas y passer des semaines. -4. **Réputation du subnet (`/24`)**. Même si ton IP est propre, si le `/24` est pourri (beaucoup de spammeurs voisins), Gmail va te traiter avec méfiance. Vérifie sur [senderscore.org](https://senderscore.org/) en saisissant ton IP — le score du subnet apparaît. - -**Hébergeurs réputés corrects pour le mail** : Hetzner, OVH (gamme dédiée, pas SoYouStart), Scaleway, Infomaniak (en VPS), Netcup. À éviter pour de l'envoi : DigitalOcean (subnets souvent grillés), Linode/Akamai (idem), AWS EC2 (le port 25 est limité par défaut, et la rate-limit est costaude). - ---- - -## 5. Configuration DNS complète - -Pour un domaine `exemple.fr` avec un serveur mail sur `mail.exemple.fr` à l'IP `203.0.113.10` (et `2001:db8::10` en v6) : - -```dns -;; Enregistrement du serveur mail lui-même -mail.exemple.fr. IN A 203.0.113.10 -mail.exemple.fr. IN AAAA 2001:db8::10 - -;; MX : qui reçoit les mails du domaine -exemple.fr. IN MX 10 mail.exemple.fr. - -;; SPF : qui a le droit d'envoyer pour ce domaine -exemple.fr. IN TXT "v=spf1 mx -all" - -;; DKIM (clé publique, le sélecteur ici est "mail") -mail._domainkey.exemple.fr. IN TXT "v=DKIM1; k=rsa; p=MIIBIjANBgkqhki..." - -;; DMARC -_dmarc.exemple.fr. IN TXT "v=DMARC1; p=quarantine; rua=mailto:dmarc@exemple.fr; ruf=mailto:dmarc@exemple.fr; fo=1; adkim=s; aspf=s; pct=100" - -;; MTA-STS (cf. §8) -_mta-sts.exemple.fr. IN TXT "v=STSv1; id=20260509T000000;" -mta-sts.exemple.fr. IN A 203.0.113.10 - -;; TLS-RPT (rapports d'erreurs TLS) -_smtp._tls.exemple.fr. IN TXT "v=TLSRPTv1; rua=mailto:tls-reports@exemple.fr" - -;; CAA : restreindre qui peut émettre des certifs pour ton domaine -exemple.fr. IN CAA 0 issue "letsencrypt.org" - -;; Autodiscover / autoconfig (pour les clients mail) -autoconfig.exemple.fr. IN CNAME mail.exemple.fr. -autodiscover.exemple.fr. IN CNAME mail.exemple.fr. -``` - -Détails dans les sections dédiées plus bas. - -**À ne pas oublier** : l'enregistrement PTR (reverse DNS) se configure **chez ton hébergeur**, pas dans ta zone DNS. Il doit pointer `203.0.113.10 → mail.exemple.fr`. C'est traité au §9. - ---- - -## 6. Installation du stack mail - -Sur Debian 12. Ce qui suit est volontairement condensé — pour une configuration ligne par ligne, suis [le tutoriel de référence de Workaround.org](https://workaround.org/ispmail/) qui est l'étalon depuis 20 ans. - -```bash -# Mise à jour -apt update && apt upgrade -y - -# Stack de base -apt install -y postfix postfix-mysql dovecot-core dovecot-imapd \ - dovecot-lmtpd dovecot-managesieved dovecot-sieve dovecot-mysql \ - rspamd redis-server mariadb-server certbot - -# Certificat TLS -certbot certonly --standalone -d mail.exemple.fr \ - -d mta-sts.exemple.fr \ - -d autoconfig.exemple.fr -d autodiscover.exemple.fr -``` - -### Postfix : configuration `main.cf` minimale-mais-saine - -```cfg -# /etc/postfix/main.cf -myhostname = mail.exemple.fr -mydomain = exemple.fr -myorigin = $mydomain -mydestination = # Vide : on utilise virtual_mailbox_domains -inet_interfaces = all -inet_protocols = all # IPv4 + IPv6 - -# TLS — chiffrement obligatoire -smtpd_tls_cert_file = /etc/letsencrypt/live/mail.exemple.fr/fullchain.pem -smtpd_tls_key_file = /etc/letsencrypt/live/mail.exemple.fr/privkey.pem -smtpd_tls_security_level = may -smtpd_tls_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1 -smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1 -smtp_tls_security_level = may -smtp_tls_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1 -smtp_dns_support_level = dnssec # Indispensable pour DANE -smtp_tls_security_level = dane # ou "may" si DANE pas encore prêt -smtp_host_lookup = dns - -# Restrictions anti-relais ouvert -smtpd_relay_restrictions = - permit_mynetworks - permit_sasl_authenticated - reject_unauth_destination - -smtpd_recipient_restrictions = - permit_mynetworks - permit_sasl_authenticated - reject_unauth_destination - reject_unknown_recipient_domain - reject_invalid_helo_hostname - reject_non_fqdn_helo_hostname - -# Limites raisonnables -message_size_limit = 52428800 # 50 Mo -mailbox_size_limit = 0 -recipient_delimiter = + - -# Intégration Rspamd -smtpd_milters = inet:localhost:11332 -non_smtpd_milters = inet:localhost:11332 -milter_protocol = 6 -milter_default_action = accept -milter_mail_macros = i {mail_addr} {client_addr} {client_name} {auth_authen} - -# Livraison via Dovecot LMTP -virtual_transport = lmtp:unix:private/dovecot-lmtp -``` - -### Dovecot, Rspamd - -Ces composants demandent leurs propres fichiers de configuration. Renvoi explicite vers les tutos qui font autorité : - -- **Workaround.org / ISPmail** : [https://workaround.org/ispmail/](https://workaround.org/ispmail/) — référence francophone et anglophone, mise à jour à chaque version Debian. -- **Rspamd quickstart** : [https://www.rspamd.com/doc/tutorials/quickstart.html](https://www.rspamd.com/doc/tutorials/quickstart.html) -- **Dovecot wiki** : [https://doc.dovecot.org/](https://doc.dovecot.org/) - -Si tu veux gagner du temps, **Mailcow** (`docker compose`) est aujourd'hui la solution clé-en-main la plus fiable. - ---- - -## 7. SPF, DKIM, DMARC : les rustines obligatoires - -Sans ces trois enregistrements correctement configurés, **Gmail et Outlook rejetteront ou marqueront en spam** la majorité de tes messages — peu importe ton volume. - -### SPF (Sender Policy Framework) - -Déclare qui a le droit d'envoyer du mail pour ton domaine. - -```dns -exemple.fr. IN TXT "v=spf1 mx -all" -``` - -- `mx` : autorise les serveurs listés dans le MX du domaine. -- `-all` : **rejet strict** de tout le reste. Indispensable pour la réputation. Ne jamais utiliser `~all` (softfail) en prod : Gmail aujourd'hui considère `~all` comme un signal faible. - -Si tu envoies aussi via un relais externe (smart host) : ajoute son `include`, ex. `v=spf1 mx include:_spf.mailjet.com -all`. - -**Limite** : un enregistrement SPF doit tenir en **10 lookups DNS maximum**. Au-delà, il est invalide. Vérifie avec [https://www.kitterman.com/spf/validate.html](https://www.kitterman.com/spf/validate.html). - -### DKIM (DomainKeys Identified Mail) - -Signe chaque mail sortant avec une clé privée. Le destinataire vérifie la signature via la clé publique publiée en DNS. - -**Génération de la clé** (Rspamd, sélecteur `mail`, clé 2048 bits) : - -```bash -mkdir -p /var/lib/rspamd/dkim -rspamadm dkim_keygen -s mail -d exemple.fr -k /var/lib/rspamd/dkim/exemple.fr.mail.key \ - -b 2048 > /var/lib/rspamd/dkim/exemple.fr.mail.txt -chown _rspamd:_rspamd /var/lib/rspamd/dkim/* -``` - -Le fichier `.txt` contient l'enregistrement DNS à publier : - -```dns -mail._domainkey.exemple.fr. IN TXT ( "v=DKIM1; k=rsa; " - "p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA..." ) -``` - -Configuration Rspamd (`/etc/rspamd/local.d/dkim_signing.conf`) : - -```conf -allow_username_mismatch = true; -domain { - exemple.fr { - path = "/var/lib/rspamd/dkim/exemple.fr.mail.key"; - selector = "mail"; - } -} -``` - -Recharge : `systemctl restart rspamd`. - -**Vérification** : envoie un mail à [check-auth@verifier.port25.com](mailto:check-auth@verifier.port25.com), tu reçois un rapport complet SPF/DKIM/DMARC en retour. Ou utilise [https://www.mail-tester.com/](https://www.mail-tester.com/) (note sur 10). - -### DMARC (Domain-based Message Authentication, Reporting and Conformance) - -Dit aux serveurs distants quoi faire en cas d'échec SPF/DKIM, et **te renvoie des rapports** sur ce qui passe et ce qui rate. - -```dns -_dmarc.exemple.fr. IN TXT "v=DMARC1; p=quarantine; rua=mailto:dmarc@exemple.fr; ruf=mailto:dmarc@exemple.fr; fo=1; adkim=s; aspf=s; pct=100" -``` - -- `p=none` : surveillance seule, **à utiliser pendant 2-4 semaines en démarrage** pour collecter les rapports sans pénaliser. -- `p=quarantine` : mise en spam des mails non authentifiés. Cible normale. -- `p=reject` : rejet pur. À atteindre en cible finale, **après** avoir vérifié 4 semaines de rapports propres. -- `rua` : adresse pour les rapports agrégés (quotidiens). -- `ruf` : rapports forensiques (par message). Optionnel. -- `adkim=s aspf=s` : alignement strict — le domaine de signature DKIM et le domaine SPF doivent **exactement** correspondre au domaine `From:`. - -**Lecture des rapports DMARC** : ils arrivent en XML, illisibles. Utilise un parseur : - -- [Postmark DMARC Monitoring](https://dmarc.postmarkapp.com/) (gratuit, agrège les rapports dans une UI). -- [parsedmarc](https://github.com/domainaware/parsedmarc) (auto-hébergeable, envoie dans Elasticsearch/Splunk/Grafana). - ---- - -## 8. MTA-STS, TLS-RPT, DANE : aller plus loin - -Ces standards sécurisent le **transport** entre serveurs (chiffrement TLS forcé). Gmail les regarde, Microsoft aussi. Pas obligatoires, mais ils boostent ta réputation. - -### MTA-STS - -Force les serveurs distants à utiliser TLS pour t'envoyer des mails. Trois éléments : - -**1. Enregistrement DNS TXT** : -```dns -_mta-sts.exemple.fr. IN TXT "v=STSv1; id=20260509T000000;" -``` - -**2. Sous-domaine `mta-sts.exemple.fr`** servant un fichier en HTTPS à `https://mta-sts.exemple.fr/.well-known/mta-sts.txt` : -``` -version: STSv1 -mode: enforce -mx: mail.exemple.fr -max_age: 604800 -``` - -`mode: enforce` est la cible. En démarrage, mets `mode: testing` pendant 1-2 semaines. - -**3. Certificat TLS valide** sur ce sous-domaine (déjà fait via certbot au §6). - -### TLS-RPT - -Demande aux serveurs distants de t'envoyer des rapports en cas d'échec TLS. - -```dns -_smtp._tls.exemple.fr. IN TXT "v=TLSRPTv1; rua=mailto:tls-reports@exemple.fr" -``` - -### DANE (DNS-based Authentication of Named Entities) - -Encore plus solide que MTA-STS, mais nécessite **DNSSEC** activé sur ton domaine. Si ton registrar ne supporte pas DNSSEC, oublie DANE. - -DANE publie un hash du certificat TLS dans un enregistrement TLSA : - -```bash -# Générer l'enregistrement TLSA pour le port 25 -posttls-finger -t30 -T180 -P /etc/ssl/certs/ -lsecure mail.exemple.fr -``` - -Ou plus simplement avec [https://www.huque.com/bin/gen_tlsa](https://www.huque.com/bin/gen_tlsa) : - -```dns -_25._tcp.mail.exemple.fr. IN TLSA 3 1 1 ABC123... -``` - -**Vérification globale** de tout ton setup TLS+DANE : [https://internet.nl/mail/](https://internet.nl/mail/) (excellent, recommandé). - ---- - -## 9. PTR (reverse DNS) et HELO - -**Le PTR est probablement la cause la plus fréquente de rejet par Gmail/Outlook chez les nouveaux auto-hébergés.** - -Règle absolue : **`PTR(IP) == HELO == nom A/AAAA`**, et tout doit être un FQDN cohérent. - -Configure le PTR dans le panneau de ton hébergeur (chez OVH : "IP" → "Reverse DNS") : -``` -203.0.113.10 → mail.exemple.fr -2001:db8::10 → mail.exemple.fr -``` - -Vérifie : -```bash -dig -x 203.0.113.10 +short -# doit retourner : mail.exemple.fr. - -dig mail.exemple.fr A +short -# doit retourner : 203.0.113.10 -``` - -Dans Postfix, `myhostname = mail.exemple.fr` et c'est ce qui est annoncé en HELO. Cohérence garantie. - ---- - -## 10. Warmup d'IP : la phase la plus délicate - -**Une IP neuve = pas de réputation = défiance maximale des gros acteurs.** Tu ne peux pas envoyer 1000 mails le jour 1 sans te griller. - -### Plan de warmup sur 4 à 6 semaines - -| Semaine | Volume max/jour vers Gmail+Outlook | Volume max/jour total | Contenu | -|---|---|---|---| -| 1 | 20-50 | 100 | Mails à toi-même, comptes test sur Gmail/Outlook/Yahoo. Réponds-y, marque "non spam" si en spam. | -| 2 | 100 | 300 | Cercle proche qui sait répondre / interagir. | -| 3 | 300 | 1000 | Élargissement progressif. | -| 4 | 800 | 3000 | Ouvre aux usages normaux. | -| 5+ | 2000+ | volume cible | Stable. | - -**Règles d'or pendant le warmup :** -- **Pas de mailing list, pas de notifs automatiques en masse.** Privilégie des mails 1-à-1 conversationnels. -- **Demande aux destinataires de répondre** — un mail avec réponse a 100x le poids d'un mail ouvert silencieusement. -- **Aucun lien raccourci**, aucun pixel de tracking, aucune image lourde. -- **Stop net si ton score Senderscore baisse** ou si Gmail Postmaster Tools (cf. §11) montre du rouge. - -### Si tu as un volume immédiat à envoyer - -Bascule en **option B** (smart host) le temps du warmup, puis rapatrie progressivement en interne en répliquant les volumes ci-dessus. - ---- - -## 11. Postmaster Tools, SNDS, FBL - -Les gros acteurs te donnent des dashboards dédiés. **Inscris-toi à tous, dès la création du domaine.** - -| Service | Acteur | Usage | -|---|---|---| -| [Google Postmaster Tools](https://postmaster.google.com/) | Gmail | Réputation IP+domaine, taux de spam, authentification, encryption. **Indispensable.** | -| [Microsoft SNDS](https://sendersupport.olc.protection.outlook.com/snds/) | Outlook/Hotmail | Smart Network Data Services, qualité de l'IP. | -| [Microsoft JMRP](https://sendersupport.olc.protection.outlook.com/pm/) | Outlook | Junk Mail Reporting Program, FBL Microsoft. | -| [Yahoo CFL](https://senders.yahooinc.com/complaint-feedback-loop/) | Yahoo | Complaint Feedback Loop. | -| [Validity Sender Score](https://senderscore.org/) | Indépendant | Score sur 100, à surveiller. | - -Configure les feedback loops (FBL) : quand un destinataire clique "spam", tu reçois une notification. Ça te permet de désinscrire l'utilisateur **avant qu'il ne dégrade ta réputation**. - ---- - -## 12. Liste de désinscription en un clic (RFC 8058) - -**Exigence Google/Microsoft pour les expéditeurs en volume**, mais à mettre en place dès le début même en bas volume. - -Ajoute deux en-têtes à tous les mails non-strictement-personnels : - -``` -List-Unsubscribe: , -List-Unsubscribe-Post: List-Unsubscribe=One-Click -``` - -L'URL HTTPS doit accepter une requête **POST** (pas seulement GET) avec `List-Unsubscribe=One-Click` dans le corps, et désinscrire **immédiatement et silencieusement** sans demander de confirmation. - ---- - -## 13. Anti-spam entrant et hygiène - -Un serveur mail mal configuré côté entrée devient vite un relais de spam ou une cible. Configuration Rspamd minimale : - -```conf -# /etc/rspamd/local.d/actions.conf -reject = 15; -add_header = 6; -greylist = 4; -``` - -```conf -# /etc/rspamd/local.d/greylist.conf -expire = 1d; -``` - -Active aussi : -- **Vérification SPF/DKIM/DMARC entrante** (par défaut activée dans Rspamd). -- **RBL** (Realtime Blackhole Lists) : Spamhaus ZEN, Barracuda. Attention à ne pas multiplier — 2 ou 3 RBL fiables suffisent. -- **Greylisting** : refuse temporairement les premiers contacts, ce qui élimine 80% du spam basique. Ne pas activer sur un domaine à fort volume transactionnel (gêne les notifs). -- **Bayes** : laisse Rspamd apprendre via le dossier `Junk` de Dovecot (signal `IsSpam` / `IsHam`). - -Mises à jour : `unattended-upgrades` activé, redémarrage planifié, lecture des annonces sécu Postfix/Dovecot. - ---- - -## 14. Monitoring, logs, alertes - -Sans monitoring, tu découvres les problèmes par les utilisateurs. À mettre en place : - -- **Lecture des logs** : `journalctl -u postfix -f`, `tail -f /var/log/mail.log`, web UI de Rspamd sur `localhost:11334`. -- **Métriques** : exporter Postfix/Dovecot vers Prometheus + Grafana (`postfix_exporter`, `dovecot_exporter`). -- **Alertes** sur : - - File d'attente Postfix > 50 messages (`mailq | tail -1`). - - Score Senderscore qui chute. - - Apparition sur une RBL : surveillance automatisée par [https://multirbl.valli.org/](https://multirbl.valli.org/) ou via un script qui interroge plusieurs DNSBL en cron. - - Échec TLS-RPT (rapport entrant signalant une connexion non chiffrée). -- **Rapports DMARC** parsés régulièrement (cf. §7). - ---- - -## 15. Que faire quand Gmail rejette quand même ? - -Ça arrive. Diagnostic dans l'ordre : - -1. **Lis le code de rejet SMTP** dans `/var/log/mail.log`. Gmail renvoie des codes très explicites : - - `550-5.7.1 [203.0.113.10 19] Our system has detected that this message is likely unsolicited mail.` → contenu jugé spammy. Revois le contenu, ajoute du texte conversationnel, retire les liens douteux. - - `421-4.7.0 [203.0.113.10 15] Our system has detected an unusual rate of unsolicited mail.` → tu as dépassé un seuil. **Ralentis immédiatement**, attends 24-48h, reprends doucement. - - `550-5.7.26 ... DMARC ...` → ton DMARC ne passe pas. Revérifie SPF/DKIM/alignement. - - `550-5.7.1 ... blocked using Spamhaus.` → tu es sur une RBL. Va sur [spamhaus.org/lookup/](https://www.spamhaus.org/lookup/) pour vérifier et demander la sortie. -2. **Va dans Postmaster Tools** (§11). Si "IP reputation" est rouge ou orange, regarde le contenu et le timing de tes envois récents. -3. **Test mail-tester** : envoie à une adresse fournie par [mail-tester.com](https://www.mail-tester.com/), obtiens une note sur 10. Vise 10/10. Toute case manquante doit être corrigée. -4. **Sortie de blacklist** : la plupart des RBL (Spamhaus, Barracuda) ont un formulaire de retrait. Spamhaus retire en quelques heures si tu corriges la cause. SORBS est plus lent. UCEPROTECT exige souvent de payer — ignore-la, peu de serveurs sérieux la consultent. -5. **Si rien ne marche**, change d'IP. C'est parfois la seule issue. Demande à ton hébergeur une IP fraîche, refais un warmup. - ---- - -## 16. Checklist finale avant mise en prod - -Avant d'envoyer le premier vrai mail : - -- [ ] Domaine avec DNSSEC activé. -- [ ] IP testée sur 5+ blacklists, propre. -- [ ] Port 25 sortant ouvert et testé (`telnet gmail-smtp-in.l.google.com 25`). -- [ ] PTR configuré et cohérent avec le HELO. -- [ ] MX, A, AAAA, SPF, DKIM, DMARC publiés et validés via [mxtoolbox.com](https://mxtoolbox.com/). -- [ ] MTA-STS publié (mode `testing` au démarrage). -- [ ] TLS-RPT publié. -- [ ] DANE/TLSA publié (si DNSSEC OK). -- [ ] CAA publié. -- [ ] Test envoyé à `check-auth@verifier.port25.com` : tout en `pass`. -- [ ] Test [mail-tester.com](https://www.mail-tester.com/) : 10/10. -- [ ] Test [internet.nl/mail/](https://internet.nl/mail/) : 100%. -- [ ] Inscription Postmaster Tools, SNDS, JMRP, Yahoo CFL. -- [ ] DMARC `p=none` au démarrage, parser de rapports en place. -- [ ] List-Unsubscribe + List-Unsubscribe-Post implémentés. -- [ ] Plan de warmup affiché et respecté. -- [ ] Monitoring file d'attente + RBL en place. -- [ ] Backup chiffré des Maildir. - -Au bout de 4 semaines de rapports DMARC propres : passage à `p=quarantine`. Au bout de 8-12 semaines : `p=reject`. - ---- - -## 17. Annexes : commandes utiles - -```bash -# Voir la file d'attente -mailq -postqueue -p - -# Forcer la tentative de livraison -postqueue -f - -# Vider la file (à utiliser avec précaution) -postsuper -d ALL - -# Tester la délivrabilité d'un domaine cible (DANE / TLS) -posttls-finger -t30 -T180 -P /etc/ssl/certs/ -lsecure gmail-smtp-in.l.google.com - -# Vérifier ses propres enregistrements -dig exemple.fr TXT +short -dig _dmarc.exemple.fr TXT +short -dig mail._domainkey.exemple.fr TXT +short -dig mail.exemple.fr MX +short -dig -x 203.0.113.10 +short - -# Tester l'envoi en SMTP authentifié -swaks --to test@gmail.com --from moi@exemple.fr \ - --server mail.exemple.fr --auth --auth-user moi@exemple.fr \ - --tls --port 587 - -# Voir en temps réel ce qu'il se passe -journalctl -u postfix -u dovecot -u rspamd -f -``` - -### Outils web à mettre en favoris - -- [https://www.mail-tester.com/](https://www.mail-tester.com/) — score sur 10 -- [https://internet.nl/mail/](https://internet.nl/mail/) — audit complet -- [https://mxtoolbox.com/SuperTool.aspx](https://mxtoolbox.com/SuperTool.aspx) — DNS, blacklists -- [https://dmarcian.com/dmarc-inspector/](https://dmarcian.com/dmarc-inspector/) — vérif DMARC -- [https://www.kitterman.com/spf/validate.html](https://www.kitterman.com/spf/validate.html) — vérif SPF -- [https://postmaster.google.com/](https://postmaster.google.com/) — Google Postmaster -- [https://senderscore.org/](https://senderscore.org/) — réputation IP - -### Documentation de référence - -- **ISPmail / Workaround.org** — [https://workaround.org/ispmail/](https://workaround.org/ispmail/) — le tutoriel le plus complet et tenu à jour, par version Debian. -- **Mailcow docs** — [https://docs.mailcow.email/](https://docs.mailcow.email/) — pour la version conteneurisée clé-en-main. -- **Postfix officiel** — [https://www.postfix.org/documentation.html](https://www.postfix.org/documentation.html) -- **Rspamd docs** — [https://www.rspamd.com/doc/](https://www.rspamd.com/doc/) -- **RFCs essentielles** : 5321 (SMTP moderne), 7208 (SPF), 6376 (DKIM), 7489 (DMARC), 8461 (MTA-STS), 8460 (TLS-RPT), 7672 (DANE-SMTP), 8058 (One-Click Unsubscribe). - ---- - -L'auto-hébergement mail en 2026 reste possible, mais c'est devenu un sport : les règles changent, les gros acteurs durcissent leurs critères, et l'écosystème pousse vers la centralisation. Si tu réussis le warmup et tiens 6 mois sans incident, tu as gagné — mais ne baisse pas la garde, un changement unilatéral de Google peut survenir à tout moment, comme en février 2024. \ No newline at end of file diff --git a/104a8694-4268-4e0a-99c7-e7ecfd47af1e/meta.json b/104a8694-4268-4e0a-99c7-e7ecfd47af1e/meta.json deleted file mode 100644 index edba113..0000000 --- a/104a8694-4268-4e0a-99c7-e7ecfd47af1e/meta.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "uuid": "104a8694-4268-4e0a-99c7-e7ecfd47af1e", - "slug": "auto-heberger-son-serveur-mail-en-2026", - "title": "Auto-héberger son serveur mail en 2026", - "author": "cedric@abonnel.fr", - "published": true, - "published_at": "2026-05-12 08:35", - "created_at": "2026-05-12 08:38:14", - "updated_at": "2026-05-12 08:40:06", - "revisions": [ - { - "n": 1, - "date": "2026-05-12 08:38:44", - "comment": "", - "title": "Auto-héberger son serveur mail en 2026" - }, - { - "n": 2, - "date": "2026-05-12 08:38:59", - "comment": "", - "title": "Auto-héberger son serveur mail en 2026" - }, - { - "n": 3, - "date": "2026-05-12 08:40:06", - "comment": "", - "title": "Auto-héberger son serveur mail en 2026" - } - ], - "cover": "cover.svg", - "files_meta": { - "0f3d320c9347704b-35316.svg": { - "author": "Cédrix", - "source_url": "" - }, - "cover.svg": { - "author": "", - "source_url": "" - }, - "_thumb_b7a3540aaf062cdb-1682326.jpg": { - "author": "", - "source_url": "" - } - }, - "external_links": [ - { - "url": "https://www.clubic.com/dossier-612034-proton-mail-infomaniak-la-souverainete-de-vos-emails-reste-une-illusion-face-aux-regles-dictees-par-google.html", - "name": "Proton Mail, Infomaniak : la souveraineté de vos emails reste une illusion face aux règles dictées par Google", - "added_at": "2026-05-12 08:40:03", - "meta": { - "mime": "text/html", - "size": 333873, - "description": "Proton Mail, La Poste, Infomaniak, Mailo... les messageries \"souveraines\" se multiplient. Mais elles reposent toutes sur le même protocole conçu en 1982 aux États-Unis, sans authentification native et sans chiffrement. Les normes de sécurité ajoutées depuis ont été définies par Yahoo, Cisco, Microsoft et Google. Et Gmail filtre une part considérable du trafic email mondial, sans que l'Europe ne puisse dire quoi que ce soit.", - "og_image": "/file?uuid=104a8694-4268-4e0a-99c7-e7ecfd47af1e&name=_thumb_b7a3540aaf062cdb-1682326.jpg", - "site_name": "clubic.com", - "og_type": "article", - "language": "fr_FR", - "date": "2026-05-09T11:10:00+02:00", - "canonical": "https://www.clubic.com/dossier-612034-proton-mail-infomaniak-la-souverainete-de-vos-emails-reste-une-illusion-face-aux-regles-dictees-par-google.html" - } - } - ], - "seo_title": "", - "seo_description": "", - "og_image": "", - "category": "informatique" -} diff --git a/104a8694-4268-4e0a-99c7-e7ecfd47af1e/revisions/0001.md b/104a8694-4268-4e0a-99c7-e7ecfd47af1e/revisions/0001.md deleted file mode 100644 index d5da032..0000000 --- a/104a8694-4268-4e0a-99c7-e7ecfd47af1e/revisions/0001.md +++ /dev/null @@ -1,605 +0,0 @@ -## Survivre aux règles de Gmail, Outlook et consorts - -> **Contexte** — Cet article de Clubic ([lien](https://www.clubic.com/dossier-612034-proton-mail-infomaniak-la-souverainete-de-vos-emails-reste-une-illusion-face-aux-regles-dictees-par-google.html)) rappelle une vérité technique : SMTP date de 1982, n'a aucune sécurité native, et toutes les "rustines" (SPF, DKIM, DMARC, MTA-STS, DANE) ont été conçues par Yahoo, Cisco, Microsoft, Google. Depuis février 2024 (Google) et mai 2025 (Microsoft), tout expéditeur dépassant 5000 mails/jour vers Gmail/Outlook doit configurer SPF + DKIM + DMARC, maintenir un taux de spam < 0,1 %, et fournir un lien de désinscription en un clic. -> -> Mais même en dessous de 5000/jour, ces règles s'appliquent en pratique : sans elles, ton mail finit en spam ou est rejeté. Ce dossier décrit comment monter son propre serveur mail tout en passant à travers ces filtres. - ---- - -## Sommaire - -1. [Avant de commencer : est-ce vraiment une bonne idée ?](#1-avant-de-commencer--est-ce-vraiment-une-bonne-idée-) -2. [Prérequis techniques](#2-prérequis-techniques) -3. [Architecture cible](#3-architecture-cible) -4. [Choix du fournisseur et de l'IP](#4-choix-du-fournisseur-et-de-lip) -5. [Configuration DNS complète](#5-configuration-dns-complète) -6. [Installation du stack mail](#6-installation-du-stack-mail) -7. [SPF, DKIM, DMARC : les rustines obligatoires](#7-spf-dkim-dmarc--les-rustines-obligatoires) -8. [MTA-STS, TLS-RPT, DANE : aller plus loin](#8-mta-sts-tls-rpt-dane--aller-plus-loin) -9. [PTR (reverse DNS) et HELO](#9-ptr-reverse-dns-et-helo) -10. [Warmup d'IP : la phase la plus délicate](#10-warmup-dip--la-phase-la-plus-délicate) -11. [Postmaster Tools, SNDS, FBL](#11-postmaster-tools-snds-fbl) -12. [Liste de désinscription en un clic (RFC 8058)](#12-liste-de-désinscription-en-un-clic-rfc-8058) -13. [Anti-spam entrant et hygiène](#13-anti-spam-entrant-et-hygiène) -14. [Monitoring, logs, alertes](#14-monitoring-logs-alertes) -15. [Que faire quand Gmail rejette quand même ?](#15-que-faire-quand-gmail-rejette-quand-même-) -16. [Checklist finale avant mise en prod](#16-checklist-finale-avant-mise-en-prod) -17. [Annexes : commandes utiles](#17-annexes--commandes-utiles) - ---- - -## 1. Avant de commencer : est-ce vraiment une bonne idée ? - -L'auto-hébergement mail est techniquement possible, mais c'est probablement le service le plus pénible à maintenir en 2026. Avant de te lancer, lis ça : - -**Ce qui marche bien en auto-hébergé :** -- Recevoir du mail (presque tout le monde te livre). -- Envoyer vers d'autres serveurs auto-hébergés ou pros bien configurés. -- Garder le contrôle sur tes données, tes alias, tes domaines. - -**Ce qui est dur :** -- Envoyer vers Gmail / Outlook / Yahoo / iCloud sans atterrir en spam. -- Sortir d'une blacklist une fois dedans. -- Maintenir un score de réputation IP correct sur la durée. -- Survivre à un changement unilatéral des règles côté gros acteurs (cf. février 2024 et mai 2025). - -**Stratégie réaliste recommandée :** -- Réception entrante : auto-hébergée à 100 %. Aucun risque, full contrôle. -- Envoi sortant : deux options, selon ton volume et ton tolérance au risque. - - **Option A — Pure auto-hébergée** : tu envoies directement depuis ton serveur. Faisable, mais demande un warmup, une IP propre, et un suivi continu. - - **Option B — Smart host sortant** : tu envoies via un relais réputé (un autre de tes serveurs avec une IP qui a déjà sa réputation, ou un service type Mailjet/Sendgrid/SMTP2GO en bas volume gratuit). Tes mails sortent depuis l'IP du relais, qui a déjà sa réputation faite. C'est un compromis : tu perds une partie de la souveraineté technique, mais tu gagnes énormément en délivrabilité. - -Le reste du dossier suit l'option A — tout en t'expliquant comment basculer en B si nécessaire. - ---- - -## 2. Prérequis techniques - -| Élément | Détail | -|---|---| -| Domaine | À toi, registrar peu importe, mais avec **DNSSEC activable** (cf. §8 pour DANE). | -| Serveur | VPS ou dédié, **2 vCPU / 4 Go RAM minimum**, Debian 12+ ou Ubuntu 24.04 LTS. | -| IP fixe v4 | Indispensable. **IP "résidentielle" ou IP de datacenter récemment recyclée = exclues**. | -| IP fixe v6 | Recommandée, mais désactivable si l'IPv6 du fournisseur est blacklistée. | -| PTR / reverse DNS | **Modifiable par toi**. Si l'hébergeur ne te le permet pas, change d'hébergeur. | -| Ports | 25, 465, 587, 993, 4190 ouverts sortants ET entrants. **Le port 25 sortant est bloqué chez beaucoup d'hébergeurs grand public** (OVH résidentiel, Free, etc.) : vérifie avant. | -| TLS | Certificat valide (Let's Encrypt suffit). | - -**Compétences attendues** : Linux en ligne de commande, DNS (champs A/AAAA/MX/TXT/SRV/CAA/TLSA), notion de TLS, lecture de logs `journalctl` et `/var/log/mail.log`. - ---- - -## 3. Architecture cible - -Un stack standard, éprouvé, en logiciels libres : - -``` - ┌─────────────────────────────────────┐ - │ Internet (mails entrants/sortants) │ - └─────────────────────────────────────┘ - │ - ▼ port 25 - ┌────────────────┐ - │ Postfix │ ← MTA (envoi/réception SMTP) - │ (SMTP / 25/587)│ - └────────────────┘ - │ │ │ - ▼ ▼ ▼ - ┌─────────┐ ┌─────────┐ ┌──────────┐ - │ Rspamd │ │OpenDKIM │ │ Dovecot │ ← IMAP/POP + LMTP - │(spam, │ │ (signe │ │ (livrai- │ - │ DKIM │ │ DKIM) │ │ son aux │ - │ verif, │ └─────────┘ │ boîtes) │ - │ DMARC) │ └──────────┘ - └─────────┘ │ - ▼ - Maildir / utilisateurs -``` - -**Composants** : - -- **Postfix** : MTA. Reçoit, route, envoie le SMTP. -- **Dovecot** : serveur IMAP/POP3, livraison locale (LMTP), authentification SASL pour Postfix, gestion Sieve (filtres). -- **Rspamd** : antispam moderne, fait aussi la **vérification SPF/DKIM/DMARC entrante**, le greylisting, et — option recommandée — la **signature DKIM sortante** (en remplacement d'OpenDKIM). -- **Let's Encrypt (certbot)** : TLS. -- **(Optionnel) Roundcube ou SnappyMail** : webmail. - -**Alternative tout-en-un** : [Mailcow](https://mailcow.email/) ou [Mailu](https://mailu.io/), basés sur Docker, qui empaquètent tout ça avec une interface admin. Si tu préfères ne pas tout configurer à la main, c'est légitime — la majorité des règles DNS et de délivrabilité de ce dossier restent identiques. - ---- - -## 4. Choix du fournisseur et de l'IP - -Le choix de l'hébergeur conditionne la moitié de ta délivrabilité. Avant de prendre un VPS : - -1. **Le port 25 sortant est-il ouvert ?** Beaucoup d'hébergeurs le bloquent par défaut pour limiter le spam (Hetzner l'ouvre sur demande, OVH l'ouvre selon le produit, Scaleway l'ouvre selon le compte). Pose la question au support **avant** de payer. -2. **Le PTR est-il configurable ?** Si non, change. -3. **L'IP a-t-elle été utilisée par un spammeur ?** Avant d'acheter le VPS, demande l'IP qu'on te donnera. Vérifie sur : - - [mxtoolbox.com/blacklists.aspx](https://mxtoolbox.com/blacklists.aspx) - - [multirbl.valli.org](https://multirbl.valli.org/) - - [talosintelligence.com](https://www.talosintelligence.com/) (Cisco) - - [senderscore.org](https://senderscore.org/) - - Si l'IP est listée sur Spamhaus, Barracuda, SORBS, SpamCop, **demande à l'hébergeur de te l'échanger** ou prends un autre VPS. Une fois listée, tu vas y passer des semaines. -4. **Réputation du subnet (`/24`)**. Même si ton IP est propre, si le `/24` est pourri (beaucoup de spammeurs voisins), Gmail va te traiter avec méfiance. Vérifie sur [senderscore.org](https://senderscore.org/) en saisissant ton IP — le score du subnet apparaît. - -**Hébergeurs réputés corrects pour le mail** : Hetzner, OVH (gamme dédiée, pas SoYouStart), Scaleway, Infomaniak (en VPS), Netcup. À éviter pour de l'envoi : DigitalOcean (subnets souvent grillés), Linode/Akamai (idem), AWS EC2 (le port 25 est limité par défaut, et la rate-limit est costaude). - ---- - -## 5. Configuration DNS complète - -Pour un domaine `exemple.fr` avec un serveur mail sur `mail.exemple.fr` à l'IP `203.0.113.10` (et `2001:db8::10` en v6) : - -```dns -;; Enregistrement du serveur mail lui-même -mail.exemple.fr. IN A 203.0.113.10 -mail.exemple.fr. IN AAAA 2001:db8::10 - -;; MX : qui reçoit les mails du domaine -exemple.fr. IN MX 10 mail.exemple.fr. - -;; SPF : qui a le droit d'envoyer pour ce domaine -exemple.fr. IN TXT "v=spf1 mx -all" - -;; DKIM (clé publique, le sélecteur ici est "mail") -mail._domainkey.exemple.fr. IN TXT "v=DKIM1; k=rsa; p=MIIBIjANBgkqhki..." - -;; DMARC -_dmarc.exemple.fr. IN TXT "v=DMARC1; p=quarantine; rua=mailto:dmarc@exemple.fr; ruf=mailto:dmarc@exemple.fr; fo=1; adkim=s; aspf=s; pct=100" - -;; MTA-STS (cf. §8) -_mta-sts.exemple.fr. IN TXT "v=STSv1; id=20260509T000000;" -mta-sts.exemple.fr. IN A 203.0.113.10 - -;; TLS-RPT (rapports d'erreurs TLS) -_smtp._tls.exemple.fr. IN TXT "v=TLSRPTv1; rua=mailto:tls-reports@exemple.fr" - -;; CAA : restreindre qui peut émettre des certifs pour ton domaine -exemple.fr. IN CAA 0 issue "letsencrypt.org" - -;; Autodiscover / autoconfig (pour les clients mail) -autoconfig.exemple.fr. IN CNAME mail.exemple.fr. -autodiscover.exemple.fr. IN CNAME mail.exemple.fr. -``` - -Détails dans les sections dédiées plus bas. - -**À ne pas oublier** : l'enregistrement PTR (reverse DNS) se configure **chez ton hébergeur**, pas dans ta zone DNS. Il doit pointer `203.0.113.10 → mail.exemple.fr`. C'est traité au §9. - ---- - -## 6. Installation du stack mail - -Sur Debian 12. Ce qui suit est volontairement condensé — pour une configuration ligne par ligne, suis [le tutoriel de référence de Workaround.org](https://workaround.org/ispmail/) qui est l'étalon depuis 20 ans. - -```bash -# Mise à jour -apt update && apt upgrade -y - -# Stack de base -apt install -y postfix postfix-mysql dovecot-core dovecot-imapd \ - dovecot-lmtpd dovecot-managesieved dovecot-sieve dovecot-mysql \ - rspamd redis-server mariadb-server certbot - -# Certificat TLS -certbot certonly --standalone -d mail.exemple.fr \ - -d mta-sts.exemple.fr \ - -d autoconfig.exemple.fr -d autodiscover.exemple.fr -``` - -### Postfix : configuration `main.cf` minimale-mais-saine - -```cfg -# /etc/postfix/main.cf -myhostname = mail.exemple.fr -mydomain = exemple.fr -myorigin = $mydomain -mydestination = # Vide : on utilise virtual_mailbox_domains -inet_interfaces = all -inet_protocols = all # IPv4 + IPv6 - -# TLS — chiffrement obligatoire -smtpd_tls_cert_file = /etc/letsencrypt/live/mail.exemple.fr/fullchain.pem -smtpd_tls_key_file = /etc/letsencrypt/live/mail.exemple.fr/privkey.pem -smtpd_tls_security_level = may -smtpd_tls_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1 -smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1 -smtp_tls_security_level = may -smtp_tls_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1 -smtp_dns_support_level = dnssec # Indispensable pour DANE -smtp_tls_security_level = dane # ou "may" si DANE pas encore prêt -smtp_host_lookup = dns - -# Restrictions anti-relais ouvert -smtpd_relay_restrictions = - permit_mynetworks - permit_sasl_authenticated - reject_unauth_destination - -smtpd_recipient_restrictions = - permit_mynetworks - permit_sasl_authenticated - reject_unauth_destination - reject_unknown_recipient_domain - reject_invalid_helo_hostname - reject_non_fqdn_helo_hostname - -# Limites raisonnables -message_size_limit = 52428800 # 50 Mo -mailbox_size_limit = 0 -recipient_delimiter = + - -# Intégration Rspamd -smtpd_milters = inet:localhost:11332 -non_smtpd_milters = inet:localhost:11332 -milter_protocol = 6 -milter_default_action = accept -milter_mail_macros = i {mail_addr} {client_addr} {client_name} {auth_authen} - -# Livraison via Dovecot LMTP -virtual_transport = lmtp:unix:private/dovecot-lmtp -``` - -### Dovecot, Rspamd - -Ces composants demandent leurs propres fichiers de configuration. Renvoi explicite vers les tutos qui font autorité : - -- **Workaround.org / ISPmail** : [https://workaround.org/ispmail/](https://workaround.org/ispmail/) — référence francophone et anglophone, mise à jour à chaque version Debian. -- **Rspamd quickstart** : [https://www.rspamd.com/doc/tutorials/quickstart.html](https://www.rspamd.com/doc/tutorials/quickstart.html) -- **Dovecot wiki** : [https://doc.dovecot.org/](https://doc.dovecot.org/) - -Si tu veux gagner du temps, **Mailcow** (`docker compose`) est aujourd'hui la solution clé-en-main la plus fiable. - ---- - -## 7. SPF, DKIM, DMARC : les rustines obligatoires - -Sans ces trois enregistrements correctement configurés, **Gmail et Outlook rejetteront ou marqueront en spam** la majorité de tes messages — peu importe ton volume. - -### SPF (Sender Policy Framework) - -Déclare qui a le droit d'envoyer du mail pour ton domaine. - -```dns -exemple.fr. IN TXT "v=spf1 mx -all" -``` - -- `mx` : autorise les serveurs listés dans le MX du domaine. -- `-all` : **rejet strict** de tout le reste. Indispensable pour la réputation. Ne jamais utiliser `~all` (softfail) en prod : Gmail aujourd'hui considère `~all` comme un signal faible. - -Si tu envoies aussi via un relais externe (smart host) : ajoute son `include`, ex. `v=spf1 mx include:_spf.mailjet.com -all`. - -**Limite** : un enregistrement SPF doit tenir en **10 lookups DNS maximum**. Au-delà, il est invalide. Vérifie avec [https://www.kitterman.com/spf/validate.html](https://www.kitterman.com/spf/validate.html). - -### DKIM (DomainKeys Identified Mail) - -Signe chaque mail sortant avec une clé privée. Le destinataire vérifie la signature via la clé publique publiée en DNS. - -**Génération de la clé** (Rspamd, sélecteur `mail`, clé 2048 bits) : - -```bash -mkdir -p /var/lib/rspamd/dkim -rspamadm dkim_keygen -s mail -d exemple.fr -k /var/lib/rspamd/dkim/exemple.fr.mail.key \ - -b 2048 > /var/lib/rspamd/dkim/exemple.fr.mail.txt -chown _rspamd:_rspamd /var/lib/rspamd/dkim/* -``` - -Le fichier `.txt` contient l'enregistrement DNS à publier : - -```dns -mail._domainkey.exemple.fr. IN TXT ( "v=DKIM1; k=rsa; " - "p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA..." ) -``` - -Configuration Rspamd (`/etc/rspamd/local.d/dkim_signing.conf`) : - -```conf -allow_username_mismatch = true; -domain { - exemple.fr { - path = "/var/lib/rspamd/dkim/exemple.fr.mail.key"; - selector = "mail"; - } -} -``` - -Recharge : `systemctl restart rspamd`. - -**Vérification** : envoie un mail à [check-auth@verifier.port25.com](mailto:check-auth@verifier.port25.com), tu reçois un rapport complet SPF/DKIM/DMARC en retour. Ou utilise [https://www.mail-tester.com/](https://www.mail-tester.com/) (note sur 10). - -### DMARC (Domain-based Message Authentication, Reporting and Conformance) - -Dit aux serveurs distants quoi faire en cas d'échec SPF/DKIM, et **te renvoie des rapports** sur ce qui passe et ce qui rate. - -```dns -_dmarc.exemple.fr. IN TXT "v=DMARC1; p=quarantine; rua=mailto:dmarc@exemple.fr; ruf=mailto:dmarc@exemple.fr; fo=1; adkim=s; aspf=s; pct=100" -``` - -- `p=none` : surveillance seule, **à utiliser pendant 2-4 semaines en démarrage** pour collecter les rapports sans pénaliser. -- `p=quarantine` : mise en spam des mails non authentifiés. Cible normale. -- `p=reject` : rejet pur. À atteindre en cible finale, **après** avoir vérifié 4 semaines de rapports propres. -- `rua` : adresse pour les rapports agrégés (quotidiens). -- `ruf` : rapports forensiques (par message). Optionnel. -- `adkim=s aspf=s` : alignement strict — le domaine de signature DKIM et le domaine SPF doivent **exactement** correspondre au domaine `From:`. - -**Lecture des rapports DMARC** : ils arrivent en XML, illisibles. Utilise un parseur : - -- [Postmark DMARC Monitoring](https://dmarc.postmarkapp.com/) (gratuit, agrège les rapports dans une UI). -- [parsedmarc](https://github.com/domainaware/parsedmarc) (auto-hébergeable, envoie dans Elasticsearch/Splunk/Grafana). - ---- - -## 8. MTA-STS, TLS-RPT, DANE : aller plus loin - -Ces standards sécurisent le **transport** entre serveurs (chiffrement TLS forcé). Gmail les regarde, Microsoft aussi. Pas obligatoires, mais ils boostent ta réputation. - -### MTA-STS - -Force les serveurs distants à utiliser TLS pour t'envoyer des mails. Trois éléments : - -**1. Enregistrement DNS TXT** : -```dns -_mta-sts.exemple.fr. IN TXT "v=STSv1; id=20260509T000000;" -``` - -**2. Sous-domaine `mta-sts.exemple.fr`** servant un fichier en HTTPS à `https://mta-sts.exemple.fr/.well-known/mta-sts.txt` : -``` -version: STSv1 -mode: enforce -mx: mail.exemple.fr -max_age: 604800 -``` - -`mode: enforce` est la cible. En démarrage, mets `mode: testing` pendant 1-2 semaines. - -**3. Certificat TLS valide** sur ce sous-domaine (déjà fait via certbot au §6). - -### TLS-RPT - -Demande aux serveurs distants de t'envoyer des rapports en cas d'échec TLS. - -```dns -_smtp._tls.exemple.fr. IN TXT "v=TLSRPTv1; rua=mailto:tls-reports@exemple.fr" -``` - -### DANE (DNS-based Authentication of Named Entities) - -Encore plus solide que MTA-STS, mais nécessite **DNSSEC** activé sur ton domaine. Si ton registrar ne supporte pas DNSSEC, oublie DANE. - -DANE publie un hash du certificat TLS dans un enregistrement TLSA : - -```bash -# Générer l'enregistrement TLSA pour le port 25 -posttls-finger -t30 -T180 -P /etc/ssl/certs/ -lsecure mail.exemple.fr -``` - -Ou plus simplement avec [https://www.huque.com/bin/gen_tlsa](https://www.huque.com/bin/gen_tlsa) : - -```dns -_25._tcp.mail.exemple.fr. IN TLSA 3 1 1 ABC123... -``` - -**Vérification globale** de tout ton setup TLS+DANE : [https://internet.nl/mail/](https://internet.nl/mail/) (excellent, recommandé). - ---- - -## 9. PTR (reverse DNS) et HELO - -**Le PTR est probablement la cause la plus fréquente de rejet par Gmail/Outlook chez les nouveaux auto-hébergés.** - -Règle absolue : **`PTR(IP) == HELO == nom A/AAAA`**, et tout doit être un FQDN cohérent. - -Configure le PTR dans le panneau de ton hébergeur (chez OVH : "IP" → "Reverse DNS") : -``` -203.0.113.10 → mail.exemple.fr -2001:db8::10 → mail.exemple.fr -``` - -Vérifie : -```bash -dig -x 203.0.113.10 +short -# doit retourner : mail.exemple.fr. - -dig mail.exemple.fr A +short -# doit retourner : 203.0.113.10 -``` - -Dans Postfix, `myhostname = mail.exemple.fr` et c'est ce qui est annoncé en HELO. Cohérence garantie. - ---- - -## 10. Warmup d'IP : la phase la plus délicate - -**Une IP neuve = pas de réputation = défiance maximale des gros acteurs.** Tu ne peux pas envoyer 1000 mails le jour 1 sans te griller. - -### Plan de warmup sur 4 à 6 semaines - -| Semaine | Volume max/jour vers Gmail+Outlook | Volume max/jour total | Contenu | -|---|---|---|---| -| 1 | 20-50 | 100 | Mails à toi-même, comptes test sur Gmail/Outlook/Yahoo. Réponds-y, marque "non spam" si en spam. | -| 2 | 100 | 300 | Cercle proche qui sait répondre / interagir. | -| 3 | 300 | 1000 | Élargissement progressif. | -| 4 | 800 | 3000 | Ouvre aux usages normaux. | -| 5+ | 2000+ | volume cible | Stable. | - -**Règles d'or pendant le warmup :** -- **Pas de mailing list, pas de notifs automatiques en masse.** Privilégie des mails 1-à-1 conversationnels. -- **Demande aux destinataires de répondre** — un mail avec réponse a 100x le poids d'un mail ouvert silencieusement. -- **Aucun lien raccourci**, aucun pixel de tracking, aucune image lourde. -- **Stop net si ton score Senderscore baisse** ou si Gmail Postmaster Tools (cf. §11) montre du rouge. - -### Si tu as un volume immédiat à envoyer - -Bascule en **option B** (smart host) le temps du warmup, puis rapatrie progressivement en interne en répliquant les volumes ci-dessus. - ---- - -## 11. Postmaster Tools, SNDS, FBL - -Les gros acteurs te donnent des dashboards dédiés. **Inscris-toi à tous, dès la création du domaine.** - -| Service | Acteur | Usage | -|---|---|---| -| [Google Postmaster Tools](https://postmaster.google.com/) | Gmail | Réputation IP+domaine, taux de spam, authentification, encryption. **Indispensable.** | -| [Microsoft SNDS](https://sendersupport.olc.protection.outlook.com/snds/) | Outlook/Hotmail | Smart Network Data Services, qualité de l'IP. | -| [Microsoft JMRP](https://sendersupport.olc.protection.outlook.com/pm/) | Outlook | Junk Mail Reporting Program, FBL Microsoft. | -| [Yahoo CFL](https://senders.yahooinc.com/complaint-feedback-loop/) | Yahoo | Complaint Feedback Loop. | -| [Validity Sender Score](https://senderscore.org/) | Indépendant | Score sur 100, à surveiller. | - -Configure les feedback loops (FBL) : quand un destinataire clique "spam", tu reçois une notification. Ça te permet de désinscrire l'utilisateur **avant qu'il ne dégrade ta réputation**. - ---- - -## 12. Liste de désinscription en un clic (RFC 8058) - -**Exigence Google/Microsoft pour les expéditeurs en volume**, mais à mettre en place dès le début même en bas volume. - -Ajoute deux en-têtes à tous les mails non-strictement-personnels : - -``` -List-Unsubscribe: , -List-Unsubscribe-Post: List-Unsubscribe=One-Click -``` - -L'URL HTTPS doit accepter une requête **POST** (pas seulement GET) avec `List-Unsubscribe=One-Click` dans le corps, et désinscrire **immédiatement et silencieusement** sans demander de confirmation. - ---- - -## 13. Anti-spam entrant et hygiène - -Un serveur mail mal configuré côté entrée devient vite un relais de spam ou une cible. Configuration Rspamd minimale : - -```conf -# /etc/rspamd/local.d/actions.conf -reject = 15; -add_header = 6; -greylist = 4; -``` - -```conf -# /etc/rspamd/local.d/greylist.conf -expire = 1d; -``` - -Active aussi : -- **Vérification SPF/DKIM/DMARC entrante** (par défaut activée dans Rspamd). -- **RBL** (Realtime Blackhole Lists) : Spamhaus ZEN, Barracuda. Attention à ne pas multiplier — 2 ou 3 RBL fiables suffisent. -- **Greylisting** : refuse temporairement les premiers contacts, ce qui élimine 80% du spam basique. Ne pas activer sur un domaine à fort volume transactionnel (gêne les notifs). -- **Bayes** : laisse Rspamd apprendre via le dossier `Junk` de Dovecot (signal `IsSpam` / `IsHam`). - -Mises à jour : `unattended-upgrades` activé, redémarrage planifié, lecture des annonces sécu Postfix/Dovecot. - ---- - -## 14. Monitoring, logs, alertes - -Sans monitoring, tu découvres les problèmes par les utilisateurs. À mettre en place : - -- **Lecture des logs** : `journalctl -u postfix -f`, `tail -f /var/log/mail.log`, web UI de Rspamd sur `localhost:11334`. -- **Métriques** : exporter Postfix/Dovecot vers Prometheus + Grafana (`postfix_exporter`, `dovecot_exporter`). -- **Alertes** sur : - - File d'attente Postfix > 50 messages (`mailq | tail -1`). - - Score Senderscore qui chute. - - Apparition sur une RBL : surveillance automatisée par [https://multirbl.valli.org/](https://multirbl.valli.org/) ou via un script qui interroge plusieurs DNSBL en cron. - - Échec TLS-RPT (rapport entrant signalant une connexion non chiffrée). -- **Rapports DMARC** parsés régulièrement (cf. §7). - ---- - -## 15. Que faire quand Gmail rejette quand même ? - -Ça arrive. Diagnostic dans l'ordre : - -1. **Lis le code de rejet SMTP** dans `/var/log/mail.log`. Gmail renvoie des codes très explicites : - - `550-5.7.1 [203.0.113.10 19] Our system has detected that this message is likely unsolicited mail.` → contenu jugé spammy. Revois le contenu, ajoute du texte conversationnel, retire les liens douteux. - - `421-4.7.0 [203.0.113.10 15] Our system has detected an unusual rate of unsolicited mail.` → tu as dépassé un seuil. **Ralentis immédiatement**, attends 24-48h, reprends doucement. - - `550-5.7.26 ... DMARC ...` → ton DMARC ne passe pas. Revérifie SPF/DKIM/alignement. - - `550-5.7.1 ... blocked using Spamhaus.` → tu es sur une RBL. Va sur [spamhaus.org/lookup/](https://www.spamhaus.org/lookup/) pour vérifier et demander la sortie. -2. **Va dans Postmaster Tools** (§11). Si "IP reputation" est rouge ou orange, regarde le contenu et le timing de tes envois récents. -3. **Test mail-tester** : envoie à une adresse fournie par [mail-tester.com](https://www.mail-tester.com/), obtiens une note sur 10. Vise 10/10. Toute case manquante doit être corrigée. -4. **Sortie de blacklist** : la plupart des RBL (Spamhaus, Barracuda) ont un formulaire de retrait. Spamhaus retire en quelques heures si tu corriges la cause. SORBS est plus lent. UCEPROTECT exige souvent de payer — ignore-la, peu de serveurs sérieux la consultent. -5. **Si rien ne marche**, change d'IP. C'est parfois la seule issue. Demande à ton hébergeur une IP fraîche, refais un warmup. - ---- - -## 16. Checklist finale avant mise en prod - -Avant d'envoyer le premier vrai mail : - -- [ ] Domaine avec DNSSEC activé. -- [ ] IP testée sur 5+ blacklists, propre. -- [ ] Port 25 sortant ouvert et testé (`telnet gmail-smtp-in.l.google.com 25`). -- [ ] PTR configuré et cohérent avec le HELO. -- [ ] MX, A, AAAA, SPF, DKIM, DMARC publiés et validés via [mxtoolbox.com](https://mxtoolbox.com/). -- [ ] MTA-STS publié (mode `testing` au démarrage). -- [ ] TLS-RPT publié. -- [ ] DANE/TLSA publié (si DNSSEC OK). -- [ ] CAA publié. -- [ ] Test envoyé à `check-auth@verifier.port25.com` : tout en `pass`. -- [ ] Test [mail-tester.com](https://www.mail-tester.com/) : 10/10. -- [ ] Test [internet.nl/mail/](https://internet.nl/mail/) : 100%. -- [ ] Inscription Postmaster Tools, SNDS, JMRP, Yahoo CFL. -- [ ] DMARC `p=none` au démarrage, parser de rapports en place. -- [ ] List-Unsubscribe + List-Unsubscribe-Post implémentés. -- [ ] Plan de warmup affiché et respecté. -- [ ] Monitoring file d'attente + RBL en place. -- [ ] Backup chiffré des Maildir. - -Au bout de 4 semaines de rapports DMARC propres : passage à `p=quarantine`. Au bout de 8-12 semaines : `p=reject`. - ---- - -## 17. Annexes : commandes utiles - -```bash -# Voir la file d'attente -mailq -postqueue -p - -# Forcer la tentative de livraison -postqueue -f - -# Vider la file (à utiliser avec précaution) -postsuper -d ALL - -# Tester la délivrabilité d'un domaine cible (DANE / TLS) -posttls-finger -t30 -T180 -P /etc/ssl/certs/ -lsecure gmail-smtp-in.l.google.com - -# Vérifier ses propres enregistrements -dig exemple.fr TXT +short -dig _dmarc.exemple.fr TXT +short -dig mail._domainkey.exemple.fr TXT +short -dig mail.exemple.fr MX +short -dig -x 203.0.113.10 +short - -# Tester l'envoi en SMTP authentifié -swaks --to test@gmail.com --from moi@exemple.fr \ - --server mail.exemple.fr --auth --auth-user moi@exemple.fr \ - --tls --port 587 - -# Voir en temps réel ce qu'il se passe -journalctl -u postfix -u dovecot -u rspamd -f -``` - -### Outils web à mettre en favoris - -- [https://www.mail-tester.com/](https://www.mail-tester.com/) — score sur 10 -- [https://internet.nl/mail/](https://internet.nl/mail/) — audit complet -- [https://mxtoolbox.com/SuperTool.aspx](https://mxtoolbox.com/SuperTool.aspx) — DNS, blacklists -- [https://dmarcian.com/dmarc-inspector/](https://dmarcian.com/dmarc-inspector/) — vérif DMARC -- [https://www.kitterman.com/spf/validate.html](https://www.kitterman.com/spf/validate.html) — vérif SPF -- [https://postmaster.google.com/](https://postmaster.google.com/) — Google Postmaster -- [https://senderscore.org/](https://senderscore.org/) — réputation IP - -### Documentation de référence - -- **ISPmail / Workaround.org** — [https://workaround.org/ispmail/](https://workaround.org/ispmail/) — le tutoriel le plus complet et tenu à jour, par version Debian. -- **Mailcow docs** — [https://docs.mailcow.email/](https://docs.mailcow.email/) — pour la version conteneurisée clé-en-main. -- **Postfix officiel** — [https://www.postfix.org/documentation.html](https://www.postfix.org/documentation.html) -- **Rspamd docs** — [https://www.rspamd.com/doc/](https://www.rspamd.com/doc/) -- **RFCs essentielles** : 5321 (SMTP moderne), 7208 (SPF), 6376 (DKIM), 7489 (DMARC), 8461 (MTA-STS), 8460 (TLS-RPT), 7672 (DANE-SMTP), 8058 (One-Click Unsubscribe). - ---- - -L'auto-hébergement mail en 2026 reste possible, mais c'est devenu un sport : les règles changent, les gros acteurs durcissent leurs critères, et l'écosystème pousse vers la centralisation. Si tu réussis le warmup et tiens 6 mois sans incident, tu as gagné — mais ne baisse pas la garde, un changement unilatéral de Google peut survenir à tout moment, comme en février 2024. \ No newline at end of file diff --git a/104a8694-4268-4e0a-99c7-e7ecfd47af1e/revisions/0002.md b/104a8694-4268-4e0a-99c7-e7ecfd47af1e/revisions/0002.md deleted file mode 100644 index d5da032..0000000 --- a/104a8694-4268-4e0a-99c7-e7ecfd47af1e/revisions/0002.md +++ /dev/null @@ -1,605 +0,0 @@ -## Survivre aux règles de Gmail, Outlook et consorts - -> **Contexte** — Cet article de Clubic ([lien](https://www.clubic.com/dossier-612034-proton-mail-infomaniak-la-souverainete-de-vos-emails-reste-une-illusion-face-aux-regles-dictees-par-google.html)) rappelle une vérité technique : SMTP date de 1982, n'a aucune sécurité native, et toutes les "rustines" (SPF, DKIM, DMARC, MTA-STS, DANE) ont été conçues par Yahoo, Cisco, Microsoft, Google. Depuis février 2024 (Google) et mai 2025 (Microsoft), tout expéditeur dépassant 5000 mails/jour vers Gmail/Outlook doit configurer SPF + DKIM + DMARC, maintenir un taux de spam < 0,1 %, et fournir un lien de désinscription en un clic. -> -> Mais même en dessous de 5000/jour, ces règles s'appliquent en pratique : sans elles, ton mail finit en spam ou est rejeté. Ce dossier décrit comment monter son propre serveur mail tout en passant à travers ces filtres. - ---- - -## Sommaire - -1. [Avant de commencer : est-ce vraiment une bonne idée ?](#1-avant-de-commencer--est-ce-vraiment-une-bonne-idée-) -2. [Prérequis techniques](#2-prérequis-techniques) -3. [Architecture cible](#3-architecture-cible) -4. [Choix du fournisseur et de l'IP](#4-choix-du-fournisseur-et-de-lip) -5. [Configuration DNS complète](#5-configuration-dns-complète) -6. [Installation du stack mail](#6-installation-du-stack-mail) -7. [SPF, DKIM, DMARC : les rustines obligatoires](#7-spf-dkim-dmarc--les-rustines-obligatoires) -8. [MTA-STS, TLS-RPT, DANE : aller plus loin](#8-mta-sts-tls-rpt-dane--aller-plus-loin) -9. [PTR (reverse DNS) et HELO](#9-ptr-reverse-dns-et-helo) -10. [Warmup d'IP : la phase la plus délicate](#10-warmup-dip--la-phase-la-plus-délicate) -11. [Postmaster Tools, SNDS, FBL](#11-postmaster-tools-snds-fbl) -12. [Liste de désinscription en un clic (RFC 8058)](#12-liste-de-désinscription-en-un-clic-rfc-8058) -13. [Anti-spam entrant et hygiène](#13-anti-spam-entrant-et-hygiène) -14. [Monitoring, logs, alertes](#14-monitoring-logs-alertes) -15. [Que faire quand Gmail rejette quand même ?](#15-que-faire-quand-gmail-rejette-quand-même-) -16. [Checklist finale avant mise en prod](#16-checklist-finale-avant-mise-en-prod) -17. [Annexes : commandes utiles](#17-annexes--commandes-utiles) - ---- - -## 1. Avant de commencer : est-ce vraiment une bonne idée ? - -L'auto-hébergement mail est techniquement possible, mais c'est probablement le service le plus pénible à maintenir en 2026. Avant de te lancer, lis ça : - -**Ce qui marche bien en auto-hébergé :** -- Recevoir du mail (presque tout le monde te livre). -- Envoyer vers d'autres serveurs auto-hébergés ou pros bien configurés. -- Garder le contrôle sur tes données, tes alias, tes domaines. - -**Ce qui est dur :** -- Envoyer vers Gmail / Outlook / Yahoo / iCloud sans atterrir en spam. -- Sortir d'une blacklist une fois dedans. -- Maintenir un score de réputation IP correct sur la durée. -- Survivre à un changement unilatéral des règles côté gros acteurs (cf. février 2024 et mai 2025). - -**Stratégie réaliste recommandée :** -- Réception entrante : auto-hébergée à 100 %. Aucun risque, full contrôle. -- Envoi sortant : deux options, selon ton volume et ton tolérance au risque. - - **Option A — Pure auto-hébergée** : tu envoies directement depuis ton serveur. Faisable, mais demande un warmup, une IP propre, et un suivi continu. - - **Option B — Smart host sortant** : tu envoies via un relais réputé (un autre de tes serveurs avec une IP qui a déjà sa réputation, ou un service type Mailjet/Sendgrid/SMTP2GO en bas volume gratuit). Tes mails sortent depuis l'IP du relais, qui a déjà sa réputation faite. C'est un compromis : tu perds une partie de la souveraineté technique, mais tu gagnes énormément en délivrabilité. - -Le reste du dossier suit l'option A — tout en t'expliquant comment basculer en B si nécessaire. - ---- - -## 2. Prérequis techniques - -| Élément | Détail | -|---|---| -| Domaine | À toi, registrar peu importe, mais avec **DNSSEC activable** (cf. §8 pour DANE). | -| Serveur | VPS ou dédié, **2 vCPU / 4 Go RAM minimum**, Debian 12+ ou Ubuntu 24.04 LTS. | -| IP fixe v4 | Indispensable. **IP "résidentielle" ou IP de datacenter récemment recyclée = exclues**. | -| IP fixe v6 | Recommandée, mais désactivable si l'IPv6 du fournisseur est blacklistée. | -| PTR / reverse DNS | **Modifiable par toi**. Si l'hébergeur ne te le permet pas, change d'hébergeur. | -| Ports | 25, 465, 587, 993, 4190 ouverts sortants ET entrants. **Le port 25 sortant est bloqué chez beaucoup d'hébergeurs grand public** (OVH résidentiel, Free, etc.) : vérifie avant. | -| TLS | Certificat valide (Let's Encrypt suffit). | - -**Compétences attendues** : Linux en ligne de commande, DNS (champs A/AAAA/MX/TXT/SRV/CAA/TLSA), notion de TLS, lecture de logs `journalctl` et `/var/log/mail.log`. - ---- - -## 3. Architecture cible - -Un stack standard, éprouvé, en logiciels libres : - -``` - ┌─────────────────────────────────────┐ - │ Internet (mails entrants/sortants) │ - └─────────────────────────────────────┘ - │ - ▼ port 25 - ┌────────────────┐ - │ Postfix │ ← MTA (envoi/réception SMTP) - │ (SMTP / 25/587)│ - └────────────────┘ - │ │ │ - ▼ ▼ ▼ - ┌─────────┐ ┌─────────┐ ┌──────────┐ - │ Rspamd │ │OpenDKIM │ │ Dovecot │ ← IMAP/POP + LMTP - │(spam, │ │ (signe │ │ (livrai- │ - │ DKIM │ │ DKIM) │ │ son aux │ - │ verif, │ └─────────┘ │ boîtes) │ - │ DMARC) │ └──────────┘ - └─────────┘ │ - ▼ - Maildir / utilisateurs -``` - -**Composants** : - -- **Postfix** : MTA. Reçoit, route, envoie le SMTP. -- **Dovecot** : serveur IMAP/POP3, livraison locale (LMTP), authentification SASL pour Postfix, gestion Sieve (filtres). -- **Rspamd** : antispam moderne, fait aussi la **vérification SPF/DKIM/DMARC entrante**, le greylisting, et — option recommandée — la **signature DKIM sortante** (en remplacement d'OpenDKIM). -- **Let's Encrypt (certbot)** : TLS. -- **(Optionnel) Roundcube ou SnappyMail** : webmail. - -**Alternative tout-en-un** : [Mailcow](https://mailcow.email/) ou [Mailu](https://mailu.io/), basés sur Docker, qui empaquètent tout ça avec une interface admin. Si tu préfères ne pas tout configurer à la main, c'est légitime — la majorité des règles DNS et de délivrabilité de ce dossier restent identiques. - ---- - -## 4. Choix du fournisseur et de l'IP - -Le choix de l'hébergeur conditionne la moitié de ta délivrabilité. Avant de prendre un VPS : - -1. **Le port 25 sortant est-il ouvert ?** Beaucoup d'hébergeurs le bloquent par défaut pour limiter le spam (Hetzner l'ouvre sur demande, OVH l'ouvre selon le produit, Scaleway l'ouvre selon le compte). Pose la question au support **avant** de payer. -2. **Le PTR est-il configurable ?** Si non, change. -3. **L'IP a-t-elle été utilisée par un spammeur ?** Avant d'acheter le VPS, demande l'IP qu'on te donnera. Vérifie sur : - - [mxtoolbox.com/blacklists.aspx](https://mxtoolbox.com/blacklists.aspx) - - [multirbl.valli.org](https://multirbl.valli.org/) - - [talosintelligence.com](https://www.talosintelligence.com/) (Cisco) - - [senderscore.org](https://senderscore.org/) - - Si l'IP est listée sur Spamhaus, Barracuda, SORBS, SpamCop, **demande à l'hébergeur de te l'échanger** ou prends un autre VPS. Une fois listée, tu vas y passer des semaines. -4. **Réputation du subnet (`/24`)**. Même si ton IP est propre, si le `/24` est pourri (beaucoup de spammeurs voisins), Gmail va te traiter avec méfiance. Vérifie sur [senderscore.org](https://senderscore.org/) en saisissant ton IP — le score du subnet apparaît. - -**Hébergeurs réputés corrects pour le mail** : Hetzner, OVH (gamme dédiée, pas SoYouStart), Scaleway, Infomaniak (en VPS), Netcup. À éviter pour de l'envoi : DigitalOcean (subnets souvent grillés), Linode/Akamai (idem), AWS EC2 (le port 25 est limité par défaut, et la rate-limit est costaude). - ---- - -## 5. Configuration DNS complète - -Pour un domaine `exemple.fr` avec un serveur mail sur `mail.exemple.fr` à l'IP `203.0.113.10` (et `2001:db8::10` en v6) : - -```dns -;; Enregistrement du serveur mail lui-même -mail.exemple.fr. IN A 203.0.113.10 -mail.exemple.fr. IN AAAA 2001:db8::10 - -;; MX : qui reçoit les mails du domaine -exemple.fr. IN MX 10 mail.exemple.fr. - -;; SPF : qui a le droit d'envoyer pour ce domaine -exemple.fr. IN TXT "v=spf1 mx -all" - -;; DKIM (clé publique, le sélecteur ici est "mail") -mail._domainkey.exemple.fr. IN TXT "v=DKIM1; k=rsa; p=MIIBIjANBgkqhki..." - -;; DMARC -_dmarc.exemple.fr. IN TXT "v=DMARC1; p=quarantine; rua=mailto:dmarc@exemple.fr; ruf=mailto:dmarc@exemple.fr; fo=1; adkim=s; aspf=s; pct=100" - -;; MTA-STS (cf. §8) -_mta-sts.exemple.fr. IN TXT "v=STSv1; id=20260509T000000;" -mta-sts.exemple.fr. IN A 203.0.113.10 - -;; TLS-RPT (rapports d'erreurs TLS) -_smtp._tls.exemple.fr. IN TXT "v=TLSRPTv1; rua=mailto:tls-reports@exemple.fr" - -;; CAA : restreindre qui peut émettre des certifs pour ton domaine -exemple.fr. IN CAA 0 issue "letsencrypt.org" - -;; Autodiscover / autoconfig (pour les clients mail) -autoconfig.exemple.fr. IN CNAME mail.exemple.fr. -autodiscover.exemple.fr. IN CNAME mail.exemple.fr. -``` - -Détails dans les sections dédiées plus bas. - -**À ne pas oublier** : l'enregistrement PTR (reverse DNS) se configure **chez ton hébergeur**, pas dans ta zone DNS. Il doit pointer `203.0.113.10 → mail.exemple.fr`. C'est traité au §9. - ---- - -## 6. Installation du stack mail - -Sur Debian 12. Ce qui suit est volontairement condensé — pour une configuration ligne par ligne, suis [le tutoriel de référence de Workaround.org](https://workaround.org/ispmail/) qui est l'étalon depuis 20 ans. - -```bash -# Mise à jour -apt update && apt upgrade -y - -# Stack de base -apt install -y postfix postfix-mysql dovecot-core dovecot-imapd \ - dovecot-lmtpd dovecot-managesieved dovecot-sieve dovecot-mysql \ - rspamd redis-server mariadb-server certbot - -# Certificat TLS -certbot certonly --standalone -d mail.exemple.fr \ - -d mta-sts.exemple.fr \ - -d autoconfig.exemple.fr -d autodiscover.exemple.fr -``` - -### Postfix : configuration `main.cf` minimale-mais-saine - -```cfg -# /etc/postfix/main.cf -myhostname = mail.exemple.fr -mydomain = exemple.fr -myorigin = $mydomain -mydestination = # Vide : on utilise virtual_mailbox_domains -inet_interfaces = all -inet_protocols = all # IPv4 + IPv6 - -# TLS — chiffrement obligatoire -smtpd_tls_cert_file = /etc/letsencrypt/live/mail.exemple.fr/fullchain.pem -smtpd_tls_key_file = /etc/letsencrypt/live/mail.exemple.fr/privkey.pem -smtpd_tls_security_level = may -smtpd_tls_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1 -smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1 -smtp_tls_security_level = may -smtp_tls_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1 -smtp_dns_support_level = dnssec # Indispensable pour DANE -smtp_tls_security_level = dane # ou "may" si DANE pas encore prêt -smtp_host_lookup = dns - -# Restrictions anti-relais ouvert -smtpd_relay_restrictions = - permit_mynetworks - permit_sasl_authenticated - reject_unauth_destination - -smtpd_recipient_restrictions = - permit_mynetworks - permit_sasl_authenticated - reject_unauth_destination - reject_unknown_recipient_domain - reject_invalid_helo_hostname - reject_non_fqdn_helo_hostname - -# Limites raisonnables -message_size_limit = 52428800 # 50 Mo -mailbox_size_limit = 0 -recipient_delimiter = + - -# Intégration Rspamd -smtpd_milters = inet:localhost:11332 -non_smtpd_milters = inet:localhost:11332 -milter_protocol = 6 -milter_default_action = accept -milter_mail_macros = i {mail_addr} {client_addr} {client_name} {auth_authen} - -# Livraison via Dovecot LMTP -virtual_transport = lmtp:unix:private/dovecot-lmtp -``` - -### Dovecot, Rspamd - -Ces composants demandent leurs propres fichiers de configuration. Renvoi explicite vers les tutos qui font autorité : - -- **Workaround.org / ISPmail** : [https://workaround.org/ispmail/](https://workaround.org/ispmail/) — référence francophone et anglophone, mise à jour à chaque version Debian. -- **Rspamd quickstart** : [https://www.rspamd.com/doc/tutorials/quickstart.html](https://www.rspamd.com/doc/tutorials/quickstart.html) -- **Dovecot wiki** : [https://doc.dovecot.org/](https://doc.dovecot.org/) - -Si tu veux gagner du temps, **Mailcow** (`docker compose`) est aujourd'hui la solution clé-en-main la plus fiable. - ---- - -## 7. SPF, DKIM, DMARC : les rustines obligatoires - -Sans ces trois enregistrements correctement configurés, **Gmail et Outlook rejetteront ou marqueront en spam** la majorité de tes messages — peu importe ton volume. - -### SPF (Sender Policy Framework) - -Déclare qui a le droit d'envoyer du mail pour ton domaine. - -```dns -exemple.fr. IN TXT "v=spf1 mx -all" -``` - -- `mx` : autorise les serveurs listés dans le MX du domaine. -- `-all` : **rejet strict** de tout le reste. Indispensable pour la réputation. Ne jamais utiliser `~all` (softfail) en prod : Gmail aujourd'hui considère `~all` comme un signal faible. - -Si tu envoies aussi via un relais externe (smart host) : ajoute son `include`, ex. `v=spf1 mx include:_spf.mailjet.com -all`. - -**Limite** : un enregistrement SPF doit tenir en **10 lookups DNS maximum**. Au-delà, il est invalide. Vérifie avec [https://www.kitterman.com/spf/validate.html](https://www.kitterman.com/spf/validate.html). - -### DKIM (DomainKeys Identified Mail) - -Signe chaque mail sortant avec une clé privée. Le destinataire vérifie la signature via la clé publique publiée en DNS. - -**Génération de la clé** (Rspamd, sélecteur `mail`, clé 2048 bits) : - -```bash -mkdir -p /var/lib/rspamd/dkim -rspamadm dkim_keygen -s mail -d exemple.fr -k /var/lib/rspamd/dkim/exemple.fr.mail.key \ - -b 2048 > /var/lib/rspamd/dkim/exemple.fr.mail.txt -chown _rspamd:_rspamd /var/lib/rspamd/dkim/* -``` - -Le fichier `.txt` contient l'enregistrement DNS à publier : - -```dns -mail._domainkey.exemple.fr. IN TXT ( "v=DKIM1; k=rsa; " - "p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA..." ) -``` - -Configuration Rspamd (`/etc/rspamd/local.d/dkim_signing.conf`) : - -```conf -allow_username_mismatch = true; -domain { - exemple.fr { - path = "/var/lib/rspamd/dkim/exemple.fr.mail.key"; - selector = "mail"; - } -} -``` - -Recharge : `systemctl restart rspamd`. - -**Vérification** : envoie un mail à [check-auth@verifier.port25.com](mailto:check-auth@verifier.port25.com), tu reçois un rapport complet SPF/DKIM/DMARC en retour. Ou utilise [https://www.mail-tester.com/](https://www.mail-tester.com/) (note sur 10). - -### DMARC (Domain-based Message Authentication, Reporting and Conformance) - -Dit aux serveurs distants quoi faire en cas d'échec SPF/DKIM, et **te renvoie des rapports** sur ce qui passe et ce qui rate. - -```dns -_dmarc.exemple.fr. IN TXT "v=DMARC1; p=quarantine; rua=mailto:dmarc@exemple.fr; ruf=mailto:dmarc@exemple.fr; fo=1; adkim=s; aspf=s; pct=100" -``` - -- `p=none` : surveillance seule, **à utiliser pendant 2-4 semaines en démarrage** pour collecter les rapports sans pénaliser. -- `p=quarantine` : mise en spam des mails non authentifiés. Cible normale. -- `p=reject` : rejet pur. À atteindre en cible finale, **après** avoir vérifié 4 semaines de rapports propres. -- `rua` : adresse pour les rapports agrégés (quotidiens). -- `ruf` : rapports forensiques (par message). Optionnel. -- `adkim=s aspf=s` : alignement strict — le domaine de signature DKIM et le domaine SPF doivent **exactement** correspondre au domaine `From:`. - -**Lecture des rapports DMARC** : ils arrivent en XML, illisibles. Utilise un parseur : - -- [Postmark DMARC Monitoring](https://dmarc.postmarkapp.com/) (gratuit, agrège les rapports dans une UI). -- [parsedmarc](https://github.com/domainaware/parsedmarc) (auto-hébergeable, envoie dans Elasticsearch/Splunk/Grafana). - ---- - -## 8. MTA-STS, TLS-RPT, DANE : aller plus loin - -Ces standards sécurisent le **transport** entre serveurs (chiffrement TLS forcé). Gmail les regarde, Microsoft aussi. Pas obligatoires, mais ils boostent ta réputation. - -### MTA-STS - -Force les serveurs distants à utiliser TLS pour t'envoyer des mails. Trois éléments : - -**1. Enregistrement DNS TXT** : -```dns -_mta-sts.exemple.fr. IN TXT "v=STSv1; id=20260509T000000;" -``` - -**2. Sous-domaine `mta-sts.exemple.fr`** servant un fichier en HTTPS à `https://mta-sts.exemple.fr/.well-known/mta-sts.txt` : -``` -version: STSv1 -mode: enforce -mx: mail.exemple.fr -max_age: 604800 -``` - -`mode: enforce` est la cible. En démarrage, mets `mode: testing` pendant 1-2 semaines. - -**3. Certificat TLS valide** sur ce sous-domaine (déjà fait via certbot au §6). - -### TLS-RPT - -Demande aux serveurs distants de t'envoyer des rapports en cas d'échec TLS. - -```dns -_smtp._tls.exemple.fr. IN TXT "v=TLSRPTv1; rua=mailto:tls-reports@exemple.fr" -``` - -### DANE (DNS-based Authentication of Named Entities) - -Encore plus solide que MTA-STS, mais nécessite **DNSSEC** activé sur ton domaine. Si ton registrar ne supporte pas DNSSEC, oublie DANE. - -DANE publie un hash du certificat TLS dans un enregistrement TLSA : - -```bash -# Générer l'enregistrement TLSA pour le port 25 -posttls-finger -t30 -T180 -P /etc/ssl/certs/ -lsecure mail.exemple.fr -``` - -Ou plus simplement avec [https://www.huque.com/bin/gen_tlsa](https://www.huque.com/bin/gen_tlsa) : - -```dns -_25._tcp.mail.exemple.fr. IN TLSA 3 1 1 ABC123... -``` - -**Vérification globale** de tout ton setup TLS+DANE : [https://internet.nl/mail/](https://internet.nl/mail/) (excellent, recommandé). - ---- - -## 9. PTR (reverse DNS) et HELO - -**Le PTR est probablement la cause la plus fréquente de rejet par Gmail/Outlook chez les nouveaux auto-hébergés.** - -Règle absolue : **`PTR(IP) == HELO == nom A/AAAA`**, et tout doit être un FQDN cohérent. - -Configure le PTR dans le panneau de ton hébergeur (chez OVH : "IP" → "Reverse DNS") : -``` -203.0.113.10 → mail.exemple.fr -2001:db8::10 → mail.exemple.fr -``` - -Vérifie : -```bash -dig -x 203.0.113.10 +short -# doit retourner : mail.exemple.fr. - -dig mail.exemple.fr A +short -# doit retourner : 203.0.113.10 -``` - -Dans Postfix, `myhostname = mail.exemple.fr` et c'est ce qui est annoncé en HELO. Cohérence garantie. - ---- - -## 10. Warmup d'IP : la phase la plus délicate - -**Une IP neuve = pas de réputation = défiance maximale des gros acteurs.** Tu ne peux pas envoyer 1000 mails le jour 1 sans te griller. - -### Plan de warmup sur 4 à 6 semaines - -| Semaine | Volume max/jour vers Gmail+Outlook | Volume max/jour total | Contenu | -|---|---|---|---| -| 1 | 20-50 | 100 | Mails à toi-même, comptes test sur Gmail/Outlook/Yahoo. Réponds-y, marque "non spam" si en spam. | -| 2 | 100 | 300 | Cercle proche qui sait répondre / interagir. | -| 3 | 300 | 1000 | Élargissement progressif. | -| 4 | 800 | 3000 | Ouvre aux usages normaux. | -| 5+ | 2000+ | volume cible | Stable. | - -**Règles d'or pendant le warmup :** -- **Pas de mailing list, pas de notifs automatiques en masse.** Privilégie des mails 1-à-1 conversationnels. -- **Demande aux destinataires de répondre** — un mail avec réponse a 100x le poids d'un mail ouvert silencieusement. -- **Aucun lien raccourci**, aucun pixel de tracking, aucune image lourde. -- **Stop net si ton score Senderscore baisse** ou si Gmail Postmaster Tools (cf. §11) montre du rouge. - -### Si tu as un volume immédiat à envoyer - -Bascule en **option B** (smart host) le temps du warmup, puis rapatrie progressivement en interne en répliquant les volumes ci-dessus. - ---- - -## 11. Postmaster Tools, SNDS, FBL - -Les gros acteurs te donnent des dashboards dédiés. **Inscris-toi à tous, dès la création du domaine.** - -| Service | Acteur | Usage | -|---|---|---| -| [Google Postmaster Tools](https://postmaster.google.com/) | Gmail | Réputation IP+domaine, taux de spam, authentification, encryption. **Indispensable.** | -| [Microsoft SNDS](https://sendersupport.olc.protection.outlook.com/snds/) | Outlook/Hotmail | Smart Network Data Services, qualité de l'IP. | -| [Microsoft JMRP](https://sendersupport.olc.protection.outlook.com/pm/) | Outlook | Junk Mail Reporting Program, FBL Microsoft. | -| [Yahoo CFL](https://senders.yahooinc.com/complaint-feedback-loop/) | Yahoo | Complaint Feedback Loop. | -| [Validity Sender Score](https://senderscore.org/) | Indépendant | Score sur 100, à surveiller. | - -Configure les feedback loops (FBL) : quand un destinataire clique "spam", tu reçois une notification. Ça te permet de désinscrire l'utilisateur **avant qu'il ne dégrade ta réputation**. - ---- - -## 12. Liste de désinscription en un clic (RFC 8058) - -**Exigence Google/Microsoft pour les expéditeurs en volume**, mais à mettre en place dès le début même en bas volume. - -Ajoute deux en-têtes à tous les mails non-strictement-personnels : - -``` -List-Unsubscribe: , -List-Unsubscribe-Post: List-Unsubscribe=One-Click -``` - -L'URL HTTPS doit accepter une requête **POST** (pas seulement GET) avec `List-Unsubscribe=One-Click` dans le corps, et désinscrire **immédiatement et silencieusement** sans demander de confirmation. - ---- - -## 13. Anti-spam entrant et hygiène - -Un serveur mail mal configuré côté entrée devient vite un relais de spam ou une cible. Configuration Rspamd minimale : - -```conf -# /etc/rspamd/local.d/actions.conf -reject = 15; -add_header = 6; -greylist = 4; -``` - -```conf -# /etc/rspamd/local.d/greylist.conf -expire = 1d; -``` - -Active aussi : -- **Vérification SPF/DKIM/DMARC entrante** (par défaut activée dans Rspamd). -- **RBL** (Realtime Blackhole Lists) : Spamhaus ZEN, Barracuda. Attention à ne pas multiplier — 2 ou 3 RBL fiables suffisent. -- **Greylisting** : refuse temporairement les premiers contacts, ce qui élimine 80% du spam basique. Ne pas activer sur un domaine à fort volume transactionnel (gêne les notifs). -- **Bayes** : laisse Rspamd apprendre via le dossier `Junk` de Dovecot (signal `IsSpam` / `IsHam`). - -Mises à jour : `unattended-upgrades` activé, redémarrage planifié, lecture des annonces sécu Postfix/Dovecot. - ---- - -## 14. Monitoring, logs, alertes - -Sans monitoring, tu découvres les problèmes par les utilisateurs. À mettre en place : - -- **Lecture des logs** : `journalctl -u postfix -f`, `tail -f /var/log/mail.log`, web UI de Rspamd sur `localhost:11334`. -- **Métriques** : exporter Postfix/Dovecot vers Prometheus + Grafana (`postfix_exporter`, `dovecot_exporter`). -- **Alertes** sur : - - File d'attente Postfix > 50 messages (`mailq | tail -1`). - - Score Senderscore qui chute. - - Apparition sur une RBL : surveillance automatisée par [https://multirbl.valli.org/](https://multirbl.valli.org/) ou via un script qui interroge plusieurs DNSBL en cron. - - Échec TLS-RPT (rapport entrant signalant une connexion non chiffrée). -- **Rapports DMARC** parsés régulièrement (cf. §7). - ---- - -## 15. Que faire quand Gmail rejette quand même ? - -Ça arrive. Diagnostic dans l'ordre : - -1. **Lis le code de rejet SMTP** dans `/var/log/mail.log`. Gmail renvoie des codes très explicites : - - `550-5.7.1 [203.0.113.10 19] Our system has detected that this message is likely unsolicited mail.` → contenu jugé spammy. Revois le contenu, ajoute du texte conversationnel, retire les liens douteux. - - `421-4.7.0 [203.0.113.10 15] Our system has detected an unusual rate of unsolicited mail.` → tu as dépassé un seuil. **Ralentis immédiatement**, attends 24-48h, reprends doucement. - - `550-5.7.26 ... DMARC ...` → ton DMARC ne passe pas. Revérifie SPF/DKIM/alignement. - - `550-5.7.1 ... blocked using Spamhaus.` → tu es sur une RBL. Va sur [spamhaus.org/lookup/](https://www.spamhaus.org/lookup/) pour vérifier et demander la sortie. -2. **Va dans Postmaster Tools** (§11). Si "IP reputation" est rouge ou orange, regarde le contenu et le timing de tes envois récents. -3. **Test mail-tester** : envoie à une adresse fournie par [mail-tester.com](https://www.mail-tester.com/), obtiens une note sur 10. Vise 10/10. Toute case manquante doit être corrigée. -4. **Sortie de blacklist** : la plupart des RBL (Spamhaus, Barracuda) ont un formulaire de retrait. Spamhaus retire en quelques heures si tu corriges la cause. SORBS est plus lent. UCEPROTECT exige souvent de payer — ignore-la, peu de serveurs sérieux la consultent. -5. **Si rien ne marche**, change d'IP. C'est parfois la seule issue. Demande à ton hébergeur une IP fraîche, refais un warmup. - ---- - -## 16. Checklist finale avant mise en prod - -Avant d'envoyer le premier vrai mail : - -- [ ] Domaine avec DNSSEC activé. -- [ ] IP testée sur 5+ blacklists, propre. -- [ ] Port 25 sortant ouvert et testé (`telnet gmail-smtp-in.l.google.com 25`). -- [ ] PTR configuré et cohérent avec le HELO. -- [ ] MX, A, AAAA, SPF, DKIM, DMARC publiés et validés via [mxtoolbox.com](https://mxtoolbox.com/). -- [ ] MTA-STS publié (mode `testing` au démarrage). -- [ ] TLS-RPT publié. -- [ ] DANE/TLSA publié (si DNSSEC OK). -- [ ] CAA publié. -- [ ] Test envoyé à `check-auth@verifier.port25.com` : tout en `pass`. -- [ ] Test [mail-tester.com](https://www.mail-tester.com/) : 10/10. -- [ ] Test [internet.nl/mail/](https://internet.nl/mail/) : 100%. -- [ ] Inscription Postmaster Tools, SNDS, JMRP, Yahoo CFL. -- [ ] DMARC `p=none` au démarrage, parser de rapports en place. -- [ ] List-Unsubscribe + List-Unsubscribe-Post implémentés. -- [ ] Plan de warmup affiché et respecté. -- [ ] Monitoring file d'attente + RBL en place. -- [ ] Backup chiffré des Maildir. - -Au bout de 4 semaines de rapports DMARC propres : passage à `p=quarantine`. Au bout de 8-12 semaines : `p=reject`. - ---- - -## 17. Annexes : commandes utiles - -```bash -# Voir la file d'attente -mailq -postqueue -p - -# Forcer la tentative de livraison -postqueue -f - -# Vider la file (à utiliser avec précaution) -postsuper -d ALL - -# Tester la délivrabilité d'un domaine cible (DANE / TLS) -posttls-finger -t30 -T180 -P /etc/ssl/certs/ -lsecure gmail-smtp-in.l.google.com - -# Vérifier ses propres enregistrements -dig exemple.fr TXT +short -dig _dmarc.exemple.fr TXT +short -dig mail._domainkey.exemple.fr TXT +short -dig mail.exemple.fr MX +short -dig -x 203.0.113.10 +short - -# Tester l'envoi en SMTP authentifié -swaks --to test@gmail.com --from moi@exemple.fr \ - --server mail.exemple.fr --auth --auth-user moi@exemple.fr \ - --tls --port 587 - -# Voir en temps réel ce qu'il se passe -journalctl -u postfix -u dovecot -u rspamd -f -``` - -### Outils web à mettre en favoris - -- [https://www.mail-tester.com/](https://www.mail-tester.com/) — score sur 10 -- [https://internet.nl/mail/](https://internet.nl/mail/) — audit complet -- [https://mxtoolbox.com/SuperTool.aspx](https://mxtoolbox.com/SuperTool.aspx) — DNS, blacklists -- [https://dmarcian.com/dmarc-inspector/](https://dmarcian.com/dmarc-inspector/) — vérif DMARC -- [https://www.kitterman.com/spf/validate.html](https://www.kitterman.com/spf/validate.html) — vérif SPF -- [https://postmaster.google.com/](https://postmaster.google.com/) — Google Postmaster -- [https://senderscore.org/](https://senderscore.org/) — réputation IP - -### Documentation de référence - -- **ISPmail / Workaround.org** — [https://workaround.org/ispmail/](https://workaround.org/ispmail/) — le tutoriel le plus complet et tenu à jour, par version Debian. -- **Mailcow docs** — [https://docs.mailcow.email/](https://docs.mailcow.email/) — pour la version conteneurisée clé-en-main. -- **Postfix officiel** — [https://www.postfix.org/documentation.html](https://www.postfix.org/documentation.html) -- **Rspamd docs** — [https://www.rspamd.com/doc/](https://www.rspamd.com/doc/) -- **RFCs essentielles** : 5321 (SMTP moderne), 7208 (SPF), 6376 (DKIM), 7489 (DMARC), 8461 (MTA-STS), 8460 (TLS-RPT), 7672 (DANE-SMTP), 8058 (One-Click Unsubscribe). - ---- - -L'auto-hébergement mail en 2026 reste possible, mais c'est devenu un sport : les règles changent, les gros acteurs durcissent leurs critères, et l'écosystème pousse vers la centralisation. Si tu réussis le warmup et tiens 6 mois sans incident, tu as gagné — mais ne baisse pas la garde, un changement unilatéral de Google peut survenir à tout moment, comme en février 2024. \ No newline at end of file diff --git a/104a8694-4268-4e0a-99c7-e7ecfd47af1e/revisions/0003.md b/104a8694-4268-4e0a-99c7-e7ecfd47af1e/revisions/0003.md deleted file mode 100644 index d5da032..0000000 --- a/104a8694-4268-4e0a-99c7-e7ecfd47af1e/revisions/0003.md +++ /dev/null @@ -1,605 +0,0 @@ -## Survivre aux règles de Gmail, Outlook et consorts - -> **Contexte** — Cet article de Clubic ([lien](https://www.clubic.com/dossier-612034-proton-mail-infomaniak-la-souverainete-de-vos-emails-reste-une-illusion-face-aux-regles-dictees-par-google.html)) rappelle une vérité technique : SMTP date de 1982, n'a aucune sécurité native, et toutes les "rustines" (SPF, DKIM, DMARC, MTA-STS, DANE) ont été conçues par Yahoo, Cisco, Microsoft, Google. Depuis février 2024 (Google) et mai 2025 (Microsoft), tout expéditeur dépassant 5000 mails/jour vers Gmail/Outlook doit configurer SPF + DKIM + DMARC, maintenir un taux de spam < 0,1 %, et fournir un lien de désinscription en un clic. -> -> Mais même en dessous de 5000/jour, ces règles s'appliquent en pratique : sans elles, ton mail finit en spam ou est rejeté. Ce dossier décrit comment monter son propre serveur mail tout en passant à travers ces filtres. - ---- - -## Sommaire - -1. [Avant de commencer : est-ce vraiment une bonne idée ?](#1-avant-de-commencer--est-ce-vraiment-une-bonne-idée-) -2. [Prérequis techniques](#2-prérequis-techniques) -3. [Architecture cible](#3-architecture-cible) -4. [Choix du fournisseur et de l'IP](#4-choix-du-fournisseur-et-de-lip) -5. [Configuration DNS complète](#5-configuration-dns-complète) -6. [Installation du stack mail](#6-installation-du-stack-mail) -7. [SPF, DKIM, DMARC : les rustines obligatoires](#7-spf-dkim-dmarc--les-rustines-obligatoires) -8. [MTA-STS, TLS-RPT, DANE : aller plus loin](#8-mta-sts-tls-rpt-dane--aller-plus-loin) -9. [PTR (reverse DNS) et HELO](#9-ptr-reverse-dns-et-helo) -10. [Warmup d'IP : la phase la plus délicate](#10-warmup-dip--la-phase-la-plus-délicate) -11. [Postmaster Tools, SNDS, FBL](#11-postmaster-tools-snds-fbl) -12. [Liste de désinscription en un clic (RFC 8058)](#12-liste-de-désinscription-en-un-clic-rfc-8058) -13. [Anti-spam entrant et hygiène](#13-anti-spam-entrant-et-hygiène) -14. [Monitoring, logs, alertes](#14-monitoring-logs-alertes) -15. [Que faire quand Gmail rejette quand même ?](#15-que-faire-quand-gmail-rejette-quand-même-) -16. [Checklist finale avant mise en prod](#16-checklist-finale-avant-mise-en-prod) -17. [Annexes : commandes utiles](#17-annexes--commandes-utiles) - ---- - -## 1. Avant de commencer : est-ce vraiment une bonne idée ? - -L'auto-hébergement mail est techniquement possible, mais c'est probablement le service le plus pénible à maintenir en 2026. Avant de te lancer, lis ça : - -**Ce qui marche bien en auto-hébergé :** -- Recevoir du mail (presque tout le monde te livre). -- Envoyer vers d'autres serveurs auto-hébergés ou pros bien configurés. -- Garder le contrôle sur tes données, tes alias, tes domaines. - -**Ce qui est dur :** -- Envoyer vers Gmail / Outlook / Yahoo / iCloud sans atterrir en spam. -- Sortir d'une blacklist une fois dedans. -- Maintenir un score de réputation IP correct sur la durée. -- Survivre à un changement unilatéral des règles côté gros acteurs (cf. février 2024 et mai 2025). - -**Stratégie réaliste recommandée :** -- Réception entrante : auto-hébergée à 100 %. Aucun risque, full contrôle. -- Envoi sortant : deux options, selon ton volume et ton tolérance au risque. - - **Option A — Pure auto-hébergée** : tu envoies directement depuis ton serveur. Faisable, mais demande un warmup, une IP propre, et un suivi continu. - - **Option B — Smart host sortant** : tu envoies via un relais réputé (un autre de tes serveurs avec une IP qui a déjà sa réputation, ou un service type Mailjet/Sendgrid/SMTP2GO en bas volume gratuit). Tes mails sortent depuis l'IP du relais, qui a déjà sa réputation faite. C'est un compromis : tu perds une partie de la souveraineté technique, mais tu gagnes énormément en délivrabilité. - -Le reste du dossier suit l'option A — tout en t'expliquant comment basculer en B si nécessaire. - ---- - -## 2. Prérequis techniques - -| Élément | Détail | -|---|---| -| Domaine | À toi, registrar peu importe, mais avec **DNSSEC activable** (cf. §8 pour DANE). | -| Serveur | VPS ou dédié, **2 vCPU / 4 Go RAM minimum**, Debian 12+ ou Ubuntu 24.04 LTS. | -| IP fixe v4 | Indispensable. **IP "résidentielle" ou IP de datacenter récemment recyclée = exclues**. | -| IP fixe v6 | Recommandée, mais désactivable si l'IPv6 du fournisseur est blacklistée. | -| PTR / reverse DNS | **Modifiable par toi**. Si l'hébergeur ne te le permet pas, change d'hébergeur. | -| Ports | 25, 465, 587, 993, 4190 ouverts sortants ET entrants. **Le port 25 sortant est bloqué chez beaucoup d'hébergeurs grand public** (OVH résidentiel, Free, etc.) : vérifie avant. | -| TLS | Certificat valide (Let's Encrypt suffit). | - -**Compétences attendues** : Linux en ligne de commande, DNS (champs A/AAAA/MX/TXT/SRV/CAA/TLSA), notion de TLS, lecture de logs `journalctl` et `/var/log/mail.log`. - ---- - -## 3. Architecture cible - -Un stack standard, éprouvé, en logiciels libres : - -``` - ┌─────────────────────────────────────┐ - │ Internet (mails entrants/sortants) │ - └─────────────────────────────────────┘ - │ - ▼ port 25 - ┌────────────────┐ - │ Postfix │ ← MTA (envoi/réception SMTP) - │ (SMTP / 25/587)│ - └────────────────┘ - │ │ │ - ▼ ▼ ▼ - ┌─────────┐ ┌─────────┐ ┌──────────┐ - │ Rspamd │ │OpenDKIM │ │ Dovecot │ ← IMAP/POP + LMTP - │(spam, │ │ (signe │ │ (livrai- │ - │ DKIM │ │ DKIM) │ │ son aux │ - │ verif, │ └─────────┘ │ boîtes) │ - │ DMARC) │ └──────────┘ - └─────────┘ │ - ▼ - Maildir / utilisateurs -``` - -**Composants** : - -- **Postfix** : MTA. Reçoit, route, envoie le SMTP. -- **Dovecot** : serveur IMAP/POP3, livraison locale (LMTP), authentification SASL pour Postfix, gestion Sieve (filtres). -- **Rspamd** : antispam moderne, fait aussi la **vérification SPF/DKIM/DMARC entrante**, le greylisting, et — option recommandée — la **signature DKIM sortante** (en remplacement d'OpenDKIM). -- **Let's Encrypt (certbot)** : TLS. -- **(Optionnel) Roundcube ou SnappyMail** : webmail. - -**Alternative tout-en-un** : [Mailcow](https://mailcow.email/) ou [Mailu](https://mailu.io/), basés sur Docker, qui empaquètent tout ça avec une interface admin. Si tu préfères ne pas tout configurer à la main, c'est légitime — la majorité des règles DNS et de délivrabilité de ce dossier restent identiques. - ---- - -## 4. Choix du fournisseur et de l'IP - -Le choix de l'hébergeur conditionne la moitié de ta délivrabilité. Avant de prendre un VPS : - -1. **Le port 25 sortant est-il ouvert ?** Beaucoup d'hébergeurs le bloquent par défaut pour limiter le spam (Hetzner l'ouvre sur demande, OVH l'ouvre selon le produit, Scaleway l'ouvre selon le compte). Pose la question au support **avant** de payer. -2. **Le PTR est-il configurable ?** Si non, change. -3. **L'IP a-t-elle été utilisée par un spammeur ?** Avant d'acheter le VPS, demande l'IP qu'on te donnera. Vérifie sur : - - [mxtoolbox.com/blacklists.aspx](https://mxtoolbox.com/blacklists.aspx) - - [multirbl.valli.org](https://multirbl.valli.org/) - - [talosintelligence.com](https://www.talosintelligence.com/) (Cisco) - - [senderscore.org](https://senderscore.org/) - - Si l'IP est listée sur Spamhaus, Barracuda, SORBS, SpamCop, **demande à l'hébergeur de te l'échanger** ou prends un autre VPS. Une fois listée, tu vas y passer des semaines. -4. **Réputation du subnet (`/24`)**. Même si ton IP est propre, si le `/24` est pourri (beaucoup de spammeurs voisins), Gmail va te traiter avec méfiance. Vérifie sur [senderscore.org](https://senderscore.org/) en saisissant ton IP — le score du subnet apparaît. - -**Hébergeurs réputés corrects pour le mail** : Hetzner, OVH (gamme dédiée, pas SoYouStart), Scaleway, Infomaniak (en VPS), Netcup. À éviter pour de l'envoi : DigitalOcean (subnets souvent grillés), Linode/Akamai (idem), AWS EC2 (le port 25 est limité par défaut, et la rate-limit est costaude). - ---- - -## 5. Configuration DNS complète - -Pour un domaine `exemple.fr` avec un serveur mail sur `mail.exemple.fr` à l'IP `203.0.113.10` (et `2001:db8::10` en v6) : - -```dns -;; Enregistrement du serveur mail lui-même -mail.exemple.fr. IN A 203.0.113.10 -mail.exemple.fr. IN AAAA 2001:db8::10 - -;; MX : qui reçoit les mails du domaine -exemple.fr. IN MX 10 mail.exemple.fr. - -;; SPF : qui a le droit d'envoyer pour ce domaine -exemple.fr. IN TXT "v=spf1 mx -all" - -;; DKIM (clé publique, le sélecteur ici est "mail") -mail._domainkey.exemple.fr. IN TXT "v=DKIM1; k=rsa; p=MIIBIjANBgkqhki..." - -;; DMARC -_dmarc.exemple.fr. IN TXT "v=DMARC1; p=quarantine; rua=mailto:dmarc@exemple.fr; ruf=mailto:dmarc@exemple.fr; fo=1; adkim=s; aspf=s; pct=100" - -;; MTA-STS (cf. §8) -_mta-sts.exemple.fr. IN TXT "v=STSv1; id=20260509T000000;" -mta-sts.exemple.fr. IN A 203.0.113.10 - -;; TLS-RPT (rapports d'erreurs TLS) -_smtp._tls.exemple.fr. IN TXT "v=TLSRPTv1; rua=mailto:tls-reports@exemple.fr" - -;; CAA : restreindre qui peut émettre des certifs pour ton domaine -exemple.fr. IN CAA 0 issue "letsencrypt.org" - -;; Autodiscover / autoconfig (pour les clients mail) -autoconfig.exemple.fr. IN CNAME mail.exemple.fr. -autodiscover.exemple.fr. IN CNAME mail.exemple.fr. -``` - -Détails dans les sections dédiées plus bas. - -**À ne pas oublier** : l'enregistrement PTR (reverse DNS) se configure **chez ton hébergeur**, pas dans ta zone DNS. Il doit pointer `203.0.113.10 → mail.exemple.fr`. C'est traité au §9. - ---- - -## 6. Installation du stack mail - -Sur Debian 12. Ce qui suit est volontairement condensé — pour une configuration ligne par ligne, suis [le tutoriel de référence de Workaround.org](https://workaround.org/ispmail/) qui est l'étalon depuis 20 ans. - -```bash -# Mise à jour -apt update && apt upgrade -y - -# Stack de base -apt install -y postfix postfix-mysql dovecot-core dovecot-imapd \ - dovecot-lmtpd dovecot-managesieved dovecot-sieve dovecot-mysql \ - rspamd redis-server mariadb-server certbot - -# Certificat TLS -certbot certonly --standalone -d mail.exemple.fr \ - -d mta-sts.exemple.fr \ - -d autoconfig.exemple.fr -d autodiscover.exemple.fr -``` - -### Postfix : configuration `main.cf` minimale-mais-saine - -```cfg -# /etc/postfix/main.cf -myhostname = mail.exemple.fr -mydomain = exemple.fr -myorigin = $mydomain -mydestination = # Vide : on utilise virtual_mailbox_domains -inet_interfaces = all -inet_protocols = all # IPv4 + IPv6 - -# TLS — chiffrement obligatoire -smtpd_tls_cert_file = /etc/letsencrypt/live/mail.exemple.fr/fullchain.pem -smtpd_tls_key_file = /etc/letsencrypt/live/mail.exemple.fr/privkey.pem -smtpd_tls_security_level = may -smtpd_tls_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1 -smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1 -smtp_tls_security_level = may -smtp_tls_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1 -smtp_dns_support_level = dnssec # Indispensable pour DANE -smtp_tls_security_level = dane # ou "may" si DANE pas encore prêt -smtp_host_lookup = dns - -# Restrictions anti-relais ouvert -smtpd_relay_restrictions = - permit_mynetworks - permit_sasl_authenticated - reject_unauth_destination - -smtpd_recipient_restrictions = - permit_mynetworks - permit_sasl_authenticated - reject_unauth_destination - reject_unknown_recipient_domain - reject_invalid_helo_hostname - reject_non_fqdn_helo_hostname - -# Limites raisonnables -message_size_limit = 52428800 # 50 Mo -mailbox_size_limit = 0 -recipient_delimiter = + - -# Intégration Rspamd -smtpd_milters = inet:localhost:11332 -non_smtpd_milters = inet:localhost:11332 -milter_protocol = 6 -milter_default_action = accept -milter_mail_macros = i {mail_addr} {client_addr} {client_name} {auth_authen} - -# Livraison via Dovecot LMTP -virtual_transport = lmtp:unix:private/dovecot-lmtp -``` - -### Dovecot, Rspamd - -Ces composants demandent leurs propres fichiers de configuration. Renvoi explicite vers les tutos qui font autorité : - -- **Workaround.org / ISPmail** : [https://workaround.org/ispmail/](https://workaround.org/ispmail/) — référence francophone et anglophone, mise à jour à chaque version Debian. -- **Rspamd quickstart** : [https://www.rspamd.com/doc/tutorials/quickstart.html](https://www.rspamd.com/doc/tutorials/quickstart.html) -- **Dovecot wiki** : [https://doc.dovecot.org/](https://doc.dovecot.org/) - -Si tu veux gagner du temps, **Mailcow** (`docker compose`) est aujourd'hui la solution clé-en-main la plus fiable. - ---- - -## 7. SPF, DKIM, DMARC : les rustines obligatoires - -Sans ces trois enregistrements correctement configurés, **Gmail et Outlook rejetteront ou marqueront en spam** la majorité de tes messages — peu importe ton volume. - -### SPF (Sender Policy Framework) - -Déclare qui a le droit d'envoyer du mail pour ton domaine. - -```dns -exemple.fr. IN TXT "v=spf1 mx -all" -``` - -- `mx` : autorise les serveurs listés dans le MX du domaine. -- `-all` : **rejet strict** de tout le reste. Indispensable pour la réputation. Ne jamais utiliser `~all` (softfail) en prod : Gmail aujourd'hui considère `~all` comme un signal faible. - -Si tu envoies aussi via un relais externe (smart host) : ajoute son `include`, ex. `v=spf1 mx include:_spf.mailjet.com -all`. - -**Limite** : un enregistrement SPF doit tenir en **10 lookups DNS maximum**. Au-delà, il est invalide. Vérifie avec [https://www.kitterman.com/spf/validate.html](https://www.kitterman.com/spf/validate.html). - -### DKIM (DomainKeys Identified Mail) - -Signe chaque mail sortant avec une clé privée. Le destinataire vérifie la signature via la clé publique publiée en DNS. - -**Génération de la clé** (Rspamd, sélecteur `mail`, clé 2048 bits) : - -```bash -mkdir -p /var/lib/rspamd/dkim -rspamadm dkim_keygen -s mail -d exemple.fr -k /var/lib/rspamd/dkim/exemple.fr.mail.key \ - -b 2048 > /var/lib/rspamd/dkim/exemple.fr.mail.txt -chown _rspamd:_rspamd /var/lib/rspamd/dkim/* -``` - -Le fichier `.txt` contient l'enregistrement DNS à publier : - -```dns -mail._domainkey.exemple.fr. IN TXT ( "v=DKIM1; k=rsa; " - "p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA..." ) -``` - -Configuration Rspamd (`/etc/rspamd/local.d/dkim_signing.conf`) : - -```conf -allow_username_mismatch = true; -domain { - exemple.fr { - path = "/var/lib/rspamd/dkim/exemple.fr.mail.key"; - selector = "mail"; - } -} -``` - -Recharge : `systemctl restart rspamd`. - -**Vérification** : envoie un mail à [check-auth@verifier.port25.com](mailto:check-auth@verifier.port25.com), tu reçois un rapport complet SPF/DKIM/DMARC en retour. Ou utilise [https://www.mail-tester.com/](https://www.mail-tester.com/) (note sur 10). - -### DMARC (Domain-based Message Authentication, Reporting and Conformance) - -Dit aux serveurs distants quoi faire en cas d'échec SPF/DKIM, et **te renvoie des rapports** sur ce qui passe et ce qui rate. - -```dns -_dmarc.exemple.fr. IN TXT "v=DMARC1; p=quarantine; rua=mailto:dmarc@exemple.fr; ruf=mailto:dmarc@exemple.fr; fo=1; adkim=s; aspf=s; pct=100" -``` - -- `p=none` : surveillance seule, **à utiliser pendant 2-4 semaines en démarrage** pour collecter les rapports sans pénaliser. -- `p=quarantine` : mise en spam des mails non authentifiés. Cible normale. -- `p=reject` : rejet pur. À atteindre en cible finale, **après** avoir vérifié 4 semaines de rapports propres. -- `rua` : adresse pour les rapports agrégés (quotidiens). -- `ruf` : rapports forensiques (par message). Optionnel. -- `adkim=s aspf=s` : alignement strict — le domaine de signature DKIM et le domaine SPF doivent **exactement** correspondre au domaine `From:`. - -**Lecture des rapports DMARC** : ils arrivent en XML, illisibles. Utilise un parseur : - -- [Postmark DMARC Monitoring](https://dmarc.postmarkapp.com/) (gratuit, agrège les rapports dans une UI). -- [parsedmarc](https://github.com/domainaware/parsedmarc) (auto-hébergeable, envoie dans Elasticsearch/Splunk/Grafana). - ---- - -## 8. MTA-STS, TLS-RPT, DANE : aller plus loin - -Ces standards sécurisent le **transport** entre serveurs (chiffrement TLS forcé). Gmail les regarde, Microsoft aussi. Pas obligatoires, mais ils boostent ta réputation. - -### MTA-STS - -Force les serveurs distants à utiliser TLS pour t'envoyer des mails. Trois éléments : - -**1. Enregistrement DNS TXT** : -```dns -_mta-sts.exemple.fr. IN TXT "v=STSv1; id=20260509T000000;" -``` - -**2. Sous-domaine `mta-sts.exemple.fr`** servant un fichier en HTTPS à `https://mta-sts.exemple.fr/.well-known/mta-sts.txt` : -``` -version: STSv1 -mode: enforce -mx: mail.exemple.fr -max_age: 604800 -``` - -`mode: enforce` est la cible. En démarrage, mets `mode: testing` pendant 1-2 semaines. - -**3. Certificat TLS valide** sur ce sous-domaine (déjà fait via certbot au §6). - -### TLS-RPT - -Demande aux serveurs distants de t'envoyer des rapports en cas d'échec TLS. - -```dns -_smtp._tls.exemple.fr. IN TXT "v=TLSRPTv1; rua=mailto:tls-reports@exemple.fr" -``` - -### DANE (DNS-based Authentication of Named Entities) - -Encore plus solide que MTA-STS, mais nécessite **DNSSEC** activé sur ton domaine. Si ton registrar ne supporte pas DNSSEC, oublie DANE. - -DANE publie un hash du certificat TLS dans un enregistrement TLSA : - -```bash -# Générer l'enregistrement TLSA pour le port 25 -posttls-finger -t30 -T180 -P /etc/ssl/certs/ -lsecure mail.exemple.fr -``` - -Ou plus simplement avec [https://www.huque.com/bin/gen_tlsa](https://www.huque.com/bin/gen_tlsa) : - -```dns -_25._tcp.mail.exemple.fr. IN TLSA 3 1 1 ABC123... -``` - -**Vérification globale** de tout ton setup TLS+DANE : [https://internet.nl/mail/](https://internet.nl/mail/) (excellent, recommandé). - ---- - -## 9. PTR (reverse DNS) et HELO - -**Le PTR est probablement la cause la plus fréquente de rejet par Gmail/Outlook chez les nouveaux auto-hébergés.** - -Règle absolue : **`PTR(IP) == HELO == nom A/AAAA`**, et tout doit être un FQDN cohérent. - -Configure le PTR dans le panneau de ton hébergeur (chez OVH : "IP" → "Reverse DNS") : -``` -203.0.113.10 → mail.exemple.fr -2001:db8::10 → mail.exemple.fr -``` - -Vérifie : -```bash -dig -x 203.0.113.10 +short -# doit retourner : mail.exemple.fr. - -dig mail.exemple.fr A +short -# doit retourner : 203.0.113.10 -``` - -Dans Postfix, `myhostname = mail.exemple.fr` et c'est ce qui est annoncé en HELO. Cohérence garantie. - ---- - -## 10. Warmup d'IP : la phase la plus délicate - -**Une IP neuve = pas de réputation = défiance maximale des gros acteurs.** Tu ne peux pas envoyer 1000 mails le jour 1 sans te griller. - -### Plan de warmup sur 4 à 6 semaines - -| Semaine | Volume max/jour vers Gmail+Outlook | Volume max/jour total | Contenu | -|---|---|---|---| -| 1 | 20-50 | 100 | Mails à toi-même, comptes test sur Gmail/Outlook/Yahoo. Réponds-y, marque "non spam" si en spam. | -| 2 | 100 | 300 | Cercle proche qui sait répondre / interagir. | -| 3 | 300 | 1000 | Élargissement progressif. | -| 4 | 800 | 3000 | Ouvre aux usages normaux. | -| 5+ | 2000+ | volume cible | Stable. | - -**Règles d'or pendant le warmup :** -- **Pas de mailing list, pas de notifs automatiques en masse.** Privilégie des mails 1-à-1 conversationnels. -- **Demande aux destinataires de répondre** — un mail avec réponse a 100x le poids d'un mail ouvert silencieusement. -- **Aucun lien raccourci**, aucun pixel de tracking, aucune image lourde. -- **Stop net si ton score Senderscore baisse** ou si Gmail Postmaster Tools (cf. §11) montre du rouge. - -### Si tu as un volume immédiat à envoyer - -Bascule en **option B** (smart host) le temps du warmup, puis rapatrie progressivement en interne en répliquant les volumes ci-dessus. - ---- - -## 11. Postmaster Tools, SNDS, FBL - -Les gros acteurs te donnent des dashboards dédiés. **Inscris-toi à tous, dès la création du domaine.** - -| Service | Acteur | Usage | -|---|---|---| -| [Google Postmaster Tools](https://postmaster.google.com/) | Gmail | Réputation IP+domaine, taux de spam, authentification, encryption. **Indispensable.** | -| [Microsoft SNDS](https://sendersupport.olc.protection.outlook.com/snds/) | Outlook/Hotmail | Smart Network Data Services, qualité de l'IP. | -| [Microsoft JMRP](https://sendersupport.olc.protection.outlook.com/pm/) | Outlook | Junk Mail Reporting Program, FBL Microsoft. | -| [Yahoo CFL](https://senders.yahooinc.com/complaint-feedback-loop/) | Yahoo | Complaint Feedback Loop. | -| [Validity Sender Score](https://senderscore.org/) | Indépendant | Score sur 100, à surveiller. | - -Configure les feedback loops (FBL) : quand un destinataire clique "spam", tu reçois une notification. Ça te permet de désinscrire l'utilisateur **avant qu'il ne dégrade ta réputation**. - ---- - -## 12. Liste de désinscription en un clic (RFC 8058) - -**Exigence Google/Microsoft pour les expéditeurs en volume**, mais à mettre en place dès le début même en bas volume. - -Ajoute deux en-têtes à tous les mails non-strictement-personnels : - -``` -List-Unsubscribe: , -List-Unsubscribe-Post: List-Unsubscribe=One-Click -``` - -L'URL HTTPS doit accepter une requête **POST** (pas seulement GET) avec `List-Unsubscribe=One-Click` dans le corps, et désinscrire **immédiatement et silencieusement** sans demander de confirmation. - ---- - -## 13. Anti-spam entrant et hygiène - -Un serveur mail mal configuré côté entrée devient vite un relais de spam ou une cible. Configuration Rspamd minimale : - -```conf -# /etc/rspamd/local.d/actions.conf -reject = 15; -add_header = 6; -greylist = 4; -``` - -```conf -# /etc/rspamd/local.d/greylist.conf -expire = 1d; -``` - -Active aussi : -- **Vérification SPF/DKIM/DMARC entrante** (par défaut activée dans Rspamd). -- **RBL** (Realtime Blackhole Lists) : Spamhaus ZEN, Barracuda. Attention à ne pas multiplier — 2 ou 3 RBL fiables suffisent. -- **Greylisting** : refuse temporairement les premiers contacts, ce qui élimine 80% du spam basique. Ne pas activer sur un domaine à fort volume transactionnel (gêne les notifs). -- **Bayes** : laisse Rspamd apprendre via le dossier `Junk` de Dovecot (signal `IsSpam` / `IsHam`). - -Mises à jour : `unattended-upgrades` activé, redémarrage planifié, lecture des annonces sécu Postfix/Dovecot. - ---- - -## 14. Monitoring, logs, alertes - -Sans monitoring, tu découvres les problèmes par les utilisateurs. À mettre en place : - -- **Lecture des logs** : `journalctl -u postfix -f`, `tail -f /var/log/mail.log`, web UI de Rspamd sur `localhost:11334`. -- **Métriques** : exporter Postfix/Dovecot vers Prometheus + Grafana (`postfix_exporter`, `dovecot_exporter`). -- **Alertes** sur : - - File d'attente Postfix > 50 messages (`mailq | tail -1`). - - Score Senderscore qui chute. - - Apparition sur une RBL : surveillance automatisée par [https://multirbl.valli.org/](https://multirbl.valli.org/) ou via un script qui interroge plusieurs DNSBL en cron. - - Échec TLS-RPT (rapport entrant signalant une connexion non chiffrée). -- **Rapports DMARC** parsés régulièrement (cf. §7). - ---- - -## 15. Que faire quand Gmail rejette quand même ? - -Ça arrive. Diagnostic dans l'ordre : - -1. **Lis le code de rejet SMTP** dans `/var/log/mail.log`. Gmail renvoie des codes très explicites : - - `550-5.7.1 [203.0.113.10 19] Our system has detected that this message is likely unsolicited mail.` → contenu jugé spammy. Revois le contenu, ajoute du texte conversationnel, retire les liens douteux. - - `421-4.7.0 [203.0.113.10 15] Our system has detected an unusual rate of unsolicited mail.` → tu as dépassé un seuil. **Ralentis immédiatement**, attends 24-48h, reprends doucement. - - `550-5.7.26 ... DMARC ...` → ton DMARC ne passe pas. Revérifie SPF/DKIM/alignement. - - `550-5.7.1 ... blocked using Spamhaus.` → tu es sur une RBL. Va sur [spamhaus.org/lookup/](https://www.spamhaus.org/lookup/) pour vérifier et demander la sortie. -2. **Va dans Postmaster Tools** (§11). Si "IP reputation" est rouge ou orange, regarde le contenu et le timing de tes envois récents. -3. **Test mail-tester** : envoie à une adresse fournie par [mail-tester.com](https://www.mail-tester.com/), obtiens une note sur 10. Vise 10/10. Toute case manquante doit être corrigée. -4. **Sortie de blacklist** : la plupart des RBL (Spamhaus, Barracuda) ont un formulaire de retrait. Spamhaus retire en quelques heures si tu corriges la cause. SORBS est plus lent. UCEPROTECT exige souvent de payer — ignore-la, peu de serveurs sérieux la consultent. -5. **Si rien ne marche**, change d'IP. C'est parfois la seule issue. Demande à ton hébergeur une IP fraîche, refais un warmup. - ---- - -## 16. Checklist finale avant mise en prod - -Avant d'envoyer le premier vrai mail : - -- [ ] Domaine avec DNSSEC activé. -- [ ] IP testée sur 5+ blacklists, propre. -- [ ] Port 25 sortant ouvert et testé (`telnet gmail-smtp-in.l.google.com 25`). -- [ ] PTR configuré et cohérent avec le HELO. -- [ ] MX, A, AAAA, SPF, DKIM, DMARC publiés et validés via [mxtoolbox.com](https://mxtoolbox.com/). -- [ ] MTA-STS publié (mode `testing` au démarrage). -- [ ] TLS-RPT publié. -- [ ] DANE/TLSA publié (si DNSSEC OK). -- [ ] CAA publié. -- [ ] Test envoyé à `check-auth@verifier.port25.com` : tout en `pass`. -- [ ] Test [mail-tester.com](https://www.mail-tester.com/) : 10/10. -- [ ] Test [internet.nl/mail/](https://internet.nl/mail/) : 100%. -- [ ] Inscription Postmaster Tools, SNDS, JMRP, Yahoo CFL. -- [ ] DMARC `p=none` au démarrage, parser de rapports en place. -- [ ] List-Unsubscribe + List-Unsubscribe-Post implémentés. -- [ ] Plan de warmup affiché et respecté. -- [ ] Monitoring file d'attente + RBL en place. -- [ ] Backup chiffré des Maildir. - -Au bout de 4 semaines de rapports DMARC propres : passage à `p=quarantine`. Au bout de 8-12 semaines : `p=reject`. - ---- - -## 17. Annexes : commandes utiles - -```bash -# Voir la file d'attente -mailq -postqueue -p - -# Forcer la tentative de livraison -postqueue -f - -# Vider la file (à utiliser avec précaution) -postsuper -d ALL - -# Tester la délivrabilité d'un domaine cible (DANE / TLS) -posttls-finger -t30 -T180 -P /etc/ssl/certs/ -lsecure gmail-smtp-in.l.google.com - -# Vérifier ses propres enregistrements -dig exemple.fr TXT +short -dig _dmarc.exemple.fr TXT +short -dig mail._domainkey.exemple.fr TXT +short -dig mail.exemple.fr MX +short -dig -x 203.0.113.10 +short - -# Tester l'envoi en SMTP authentifié -swaks --to test@gmail.com --from moi@exemple.fr \ - --server mail.exemple.fr --auth --auth-user moi@exemple.fr \ - --tls --port 587 - -# Voir en temps réel ce qu'il se passe -journalctl -u postfix -u dovecot -u rspamd -f -``` - -### Outils web à mettre en favoris - -- [https://www.mail-tester.com/](https://www.mail-tester.com/) — score sur 10 -- [https://internet.nl/mail/](https://internet.nl/mail/) — audit complet -- [https://mxtoolbox.com/SuperTool.aspx](https://mxtoolbox.com/SuperTool.aspx) — DNS, blacklists -- [https://dmarcian.com/dmarc-inspector/](https://dmarcian.com/dmarc-inspector/) — vérif DMARC -- [https://www.kitterman.com/spf/validate.html](https://www.kitterman.com/spf/validate.html) — vérif SPF -- [https://postmaster.google.com/](https://postmaster.google.com/) — Google Postmaster -- [https://senderscore.org/](https://senderscore.org/) — réputation IP - -### Documentation de référence - -- **ISPmail / Workaround.org** — [https://workaround.org/ispmail/](https://workaround.org/ispmail/) — le tutoriel le plus complet et tenu à jour, par version Debian. -- **Mailcow docs** — [https://docs.mailcow.email/](https://docs.mailcow.email/) — pour la version conteneurisée clé-en-main. -- **Postfix officiel** — [https://www.postfix.org/documentation.html](https://www.postfix.org/documentation.html) -- **Rspamd docs** — [https://www.rspamd.com/doc/](https://www.rspamd.com/doc/) -- **RFCs essentielles** : 5321 (SMTP moderne), 7208 (SPF), 6376 (DKIM), 7489 (DMARC), 8461 (MTA-STS), 8460 (TLS-RPT), 7672 (DANE-SMTP), 8058 (One-Click Unsubscribe). - ---- - -L'auto-hébergement mail en 2026 reste possible, mais c'est devenu un sport : les règles changent, les gros acteurs durcissent leurs critères, et l'écosystème pousse vers la centralisation. Si tu réussis le warmup et tiens 6 mois sans incident, tu as gagné — mais ne baisse pas la garde, un changement unilatéral de Google peut survenir à tout moment, comme en février 2024. \ No newline at end of file diff --git a/11186836-bbac-4054-82db-a3bfed14a274/files/cover.png b/11186836-bbac-4054-82db-a3bfed14a274/files/cover.png deleted file mode 100644 index 37eeb1d..0000000 Binary files a/11186836-bbac-4054-82db-a3bfed14a274/files/cover.png and /dev/null differ diff --git a/11186836-bbac-4054-82db-a3bfed14a274/index.md b/11186836-bbac-4054-82db-a3bfed14a274/index.md deleted file mode 100644 index fa33b6f..0000000 --- a/11186836-bbac-4054-82db-a3bfed14a274/index.md +++ /dev/null @@ -1,266 +0,0 @@ -# ImageMagick : traiter des images en ligne de commande - -## 1. À quoi ça sert - -ImageMagick, c'est l'outil qu'on sort quand on veut manipuler des images sans ouvrir un logiciel graphique. Pas de Photoshop, pas de GIMP, pas de clic-droit "Redimensionner" sur cent fichiers à la suite : juste une commande dans un terminal, et le travail est fait. - -C'est une suite d'outils qui sait lire, écrire et transformer plus de 200 formats — du JPEG classique au PDF en passant par le HEIC des iPhones, le WebP de Google ou le bon vieux TIFF des scanners. L'absence d'interface graphique est ici une fonctionnalité, pas un défaut : elle permet de l'utiliser partout où il n'y a pas d'écran, et surtout dans tout ce qui doit tourner tout seul. - -On le retrouve donc naturellement : - -- sur des serveurs web qui génèrent des miniatures à la volée, -- dans des scripts qui traitent des dossiers entiers d'un coup, -- dans des pipelines CI/CD pour préparer des assets, -- dans des conteneurs Docker, accessibles uniquement en SSH. - -Depuis la version 7, tout passe par une commande unique : `magick`. Les anciennes commandes (`convert`, `identify`, `mogrify`...) existent toujours pour la compatibilité, mais elles ne sont plus la norme. - -## 2. Installation - -Sur Debian ou Ubuntu : - -```bash -sudo apt install imagemagick -``` - -On vérifie ensuite que tout est en place : - -```bash -magick -version -``` - -La sortie indique aussi les délégués compilés (libwebp, libheif, libraw, etc.). Si un format précis vous intéresse, c'est ici qu'il faut regarder : ImageMagick ne sait lire un format que si la bibliothèque correspondante est présente au moment de la compilation. - -## 3. Comment ImageMagick raisonne - -Toutes les commandes suivent la même logique : - -``` -magick [entrée] [options] [sortie] -``` - -L'image est chargée en mémoire, puis chaque option s'applique **dans l'ordre où elle est écrite**, comme une chaîne de traitement. Ce point est important : déplacer une option dans la ligne peut changer le résultat final. - -Exemple : - -```bash -magick input.jpg -resize 800x600 -quality 85 output.jpg -``` - -Ici, l'image est lue, redimensionnée à 800×600, puis compressée à 85% de qualité, puis écrite sur le disque. Si on inversait `-quality` et `-resize`, le résultat serait identique dans ce cas précis, mais avec des opérations qui modifient les pixels (flou, conversion d'espace colorimétrique, recadrage), l'ordre devient critique. - -## 4. Convertir d'un format à un autre - -Le cas le plus simple : changer l'extension du fichier de sortie suffit. - -```bash -magick image.png image.jpg -``` - -ImageMagick détecte le format cible à partir de l'extension et fait la conversion. C'est aussi simple que ça pour 90% des cas. - -Quand on veut être plus précis — par exemple forcer une profondeur de couleur particulière — on l'indique explicitement : - -```bash -magick image.png -depth 8 image.jpg -``` - -Utile quand on récupère des images en 16 bits par canal qu'on veut ramener à du 8 bits standard, soit pour gagner de la place, soit pour garantir la compatibilité avec un logiciel récalcitrant. - -## 5. Redimensionner - -### La méthode brutale - -```bash -magick image.jpg -resize 800x600 image_resized.jpg -``` - -Cette commande redimensionne à 800×600 **en respectant les proportions** par défaut, contrairement à ce qu'on pourrait croire. Si l'image source est en 4:3, elle rentrera pile dedans ; si elle est en 16:9, ImageMagick choisira la dimension la plus contraignante et l'autre sera plus petite que demandé. - -Pour forcer exactement ces dimensions quitte à déformer l'image, il faut ajouter un point d'exclamation : - -```bash -magick image.jpg -resize 800x600! image_resized.jpg -``` - -### Ne rétrécir que les grandes images - -C'est probablement le cas le plus utile au quotidien : on a un dossier d'images, on veut s'assurer qu'aucune ne dépasse 1600 pixels, mais on ne veut pas agrandir les petites (ce qui dégraderait leur qualité). - -```bash -magick image.jpg -resize "1600x1600>" image_resized.jpg -``` - -Le `>` signifie « uniquement si l'image est plus grande ». Les guillemets sont nécessaires car `>` est interprété par le shell comme une redirection. On peut aussi échapper le caractère avec `\>`. - -### En pourcentage - -```bash -magick image.jpg -resize 50% image_small.jpg -``` - -Pratique quand on veut diviser la taille par deux sans calculer les dimensions exactes. - -## 6. Qualité et poids du fichier - -Pour les JPEG, le paramètre `-quality` règle le compromis entre fidélité visuelle et poids du fichier : - -```bash -magick image.jpg -quality 85 image.jpg -``` - -Quelques repères en pratique : - -- **100** : qualité maximale, fichier énorme, différence imperceptible avec 95. -- **85** : la valeur par défaut de la plupart des appareils photo, et un excellent compromis pour le web. -- **75** : encore très acceptable, gain de place notable. -- **En dessous de 70** : les artefacts deviennent visibles, surtout sur les aplats de couleur. - -### Supprimer les métadonnées - -Les fichiers issus d'appareils photo ou de smartphones embarquent beaucoup d'informations : modèle de l'appareil, date, parfois coordonnées GPS, miniature intégrée, profil colorimétrique... Tout ça peut peser plusieurs dizaines de kilo-octets, et surtout poser des problèmes de confidentialité. - -```bash -magick image.jpg -strip image.jpg -``` - -L'option `-strip` fait le ménage. À utiliser systématiquement avant de publier des photos sur le web, et indispensable dès qu'on parle de RGPD ou d'anonymisation. Attention en revanche pour la photographie professionnelle où certaines métadonnées (droits d'auteur, profil ICC) peuvent être nécessaires. - -## 7. Recadrer et adapter à un cadre - -### Recadrage classique - -```bash -magick image.jpg -crop 800x600+100+50 output.jpg -``` - -La syntaxe se lit comme une fenêtre qu'on découpe dans l'image : largeur × hauteur, décalée de 100 pixels depuis la gauche et 50 pixels depuis le haut. - -### Remplir un cadre exact, sans déformation - -C'est le besoin typique des miniatures de site : on veut toutes les vignettes en 800×600 pile, peu importe le format des photos d'origine. - -```bash -magick image.jpg -resize 800x600^ -gravity center -extent 800x600 output.jpg -``` - -Trois étapes enchaînées : - -1. `-resize 800x600^` redimensionne pour que l'image **remplisse** le cadre (le `^` inverse la logique habituelle : on prend la plus grande dimension comme contrainte, pas la plus petite). -2. `-gravity center` indique qu'on veut centrer le découpage. -3. `-extent 800x600` coupe ce qui dépasse pour obtenir exactement la taille voulue. - -Le résultat : aucune déformation, aucune bande noire, juste un éventuel rognage sur les bords les plus longs. - -## 8. Traiter un dossier entier - -Une boucle Bash suffit pour convertir tous les PNG d'un dossier en JPEG : - -```bash -for f in *.png; do - magick "$f" "${f%.png}.jpg" -done -``` - -La syntaxe `${f%.png}` retire l'extension `.png` du nom, on y ajoute `.jpg`. Simple et fiable. - -Pour modifier les fichiers **sur place**, ImageMagick fournit `mogrify` : - -```bash -mogrify -resize "1600x1600>" *.jpg -``` - -Cette commande écrase chaque fichier par sa version redimensionnée. C'est rapide et pratique, mais ça veut aussi dire qu'**il n'y a pas de retour en arrière** : si la commande est mal écrite, le dossier original est perdu. Règle absolue : travailler sur une copie, ou s'assurer d'avoir une sauvegarde. - -## 9. Texte et filigranes - -### Apposer une mention textuelle - -```bash -magick image.jpg \ - -gravity southeast \ - -pointsize 24 \ - -fill white \ - -annotate +10+10 "© MonSite" \ - image_marked.jpg -``` - -`-gravity` ancre le texte dans un coin de l'image (les neuf positions classiques : `northwest`, `north`, `northeast`, `west`, `center`...), et `-annotate` ajoute un décalage par rapport à ce point d'ancrage. Ici, `+10+10` éloigne le texte de 10 pixels du coin inférieur droit. - -### Superposer un logo ou un watermark image - -```bash -magick image.jpg watermark.png -gravity center -composite output.jpg -``` - -L'image principale est lue en premier, le filigrane en second, puis `-composite` les fusionne. Si le watermark a un canal alpha (transparence), il est respecté. - -## 10. Couleurs et tons - -Passage en noir et blanc : - -```bash -magick image.jpg -colorspace Gray output.jpg -``` - -Réglage de la luminosité et du contraste (valeurs en pourcentage, positives ou négatives) : - -```bash -magick image.jpg -brightness-contrast 10x5 output.jpg -``` - -Ici, +10% de luminosité et +5% de contraste. Pour assombrir, on utilise des valeurs négatives : `-brightness-contrast -10x0`. - -## 11. Inspecter une image - -Pour obtenir les informations essentielles — format, dimensions, profondeur : - -```bash -magick identify image.jpg -``` - -Pour tout savoir, y compris les métadonnées EXIF, le profil colorimétrique, l'histogramme : - -```bash -magick identify -verbose image.jpg -``` - -La sortie verbeuse peut faire plusieurs pages, mais c'est inestimable pour diagnostiquer un problème ou comprendre d'où vient un fichier. - -## 12. Formats modernes - -Le WebP de Google offre une compression nettement meilleure que le JPEG à qualité équivalente, et il est aujourd'hui supporté par tous les navigateurs courants : - -```bash -magick image.jpg -quality 80 image.webp -``` - -L'AVIF va encore plus loin en termes de compression, au prix d'un encodage plus lent : - -```bash -magick image.jpg image.avif -``` - -Si la commande échoue avec une erreur de délégué, c'est que votre installation d'ImageMagick a été compilée sans le support AVIF — il faudra installer `libheif` ou recompiler. - -## 13. Quelques règles à se fixer - -- **Toujours travailler sur une copie** quand on découvre une nouvelle commande. `mogrify` en particulier ne pardonne pas. -- **Stripper les métadonnées** avant toute publication web. -- **Pour de très gros volumes** (plusieurs milliers d'images, ou des images très lourdes), regarder du côté de `libvips` : c'est plus rapide et beaucoup moins gourmand en mémoire qu'ImageMagick. Pour tout le reste, ImageMagick est largement suffisant. -- **Automatiser dès qu'on répète** : si la même commande revient deux fois, elle mérite un script. -- **Lire les messages d'erreur** : ImageMagick est verbeux, et la plupart des problèmes (délégué manquant, permissions, format non reconnu) sont explicitement nommés dans la sortie. - -## 14. Là où on le croise vraiment - -En pratique, ImageMagick finit presque toujours dans les mêmes situations : - -- préparation d'images pour un site web (redimensionnement + compression + strip), -- génération de miniatures à la volée côté serveur, -- normalisation d'un catalogue photo hétérogène (formats, tailles, profils), -- conversion massive d'archives anciennes vers des formats modernes, -- nettoyage des métadonnées avant diffusion publique. - ---- - -ImageMagick fait partie de ces outils qu'on apprivoise lentement mais qu'on garde longtemps. Au début, on copie des commandes trouvées en ligne sans tout comprendre. Puis on commence à reconnaître les options, à les combiner, à écrire ses propres scripts. Et un jour, on se rend compte qu'on a remplacé un logiciel entier par trois lignes de Bash — et qu'on n'a jamais été aussi efficace pour traiter des images. \ No newline at end of file diff --git a/11186836-bbac-4054-82db-a3bfed14a274/meta.json b/11186836-bbac-4054-82db-a3bfed14a274/meta.json deleted file mode 100644 index db7f03d..0000000 --- a/11186836-bbac-4054-82db-a3bfed14a274/meta.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "uuid": "11186836-bbac-4054-82db-a3bfed14a274", - "slug": "imagemagick-traiter-des-images-en-ligne-de-commande", - "title": "ImageMagick : traiter des images en ligne de commande", - "author": "cedric@abonnel.fr", - "published": true, - "published_at": "2025-12-28 14:56", - "created_at": "2025-12-28 14:56:14", - "updated_at": "2026-05-12 00:36:01", - "revisions": [ - { - "n": 1, - "date": "2026-05-12 00:33:58", - "comment": "", - "title": "ImageMagick : traiter des images en ligne de commande" - }, - { - "n": 2, - "date": "2026-05-12 00:36:01", - "comment": "", - "title": "ImageMagick : traiter des images en ligne de commande" - } - ], - "cover": "cover.png", - "files_meta": { - "cover.png": { - "author": "", - "source_url": "https://imagemagick.org/image/logo.png" - } - }, - "external_links": [], - "seo_title": "", - "seo_description": "", - "og_image": "", - "category": "linux" -} diff --git a/11186836-bbac-4054-82db-a3bfed14a274/revisions/0001.md b/11186836-bbac-4054-82db-a3bfed14a274/revisions/0001.md deleted file mode 100644 index 50d4808..0000000 --- a/11186836-bbac-4054-82db-a3bfed14a274/revisions/0001.md +++ /dev/null @@ -1,264 +0,0 @@ -## 1. À quoi ça sert - -ImageMagick, c'est l'outil qu'on sort quand on veut manipuler des images sans ouvrir un logiciel graphique. Pas de Photoshop, pas de GIMP, pas de clic-droit "Redimensionner" sur cent fichiers à la suite : juste une commande dans un terminal, et le travail est fait. - -C'est une suite d'outils qui sait lire, écrire et transformer plus de 200 formats — du JPEG classique au PDF en passant par le HEIC des iPhones, le WebP de Google ou le bon vieux TIFF des scanners. L'absence d'interface graphique est ici une fonctionnalité, pas un défaut : elle permet de l'utiliser partout où il n'y a pas d'écran, et surtout dans tout ce qui doit tourner tout seul. - -On le retrouve donc naturellement : - -- sur des serveurs web qui génèrent des miniatures à la volée, -- dans des scripts qui traitent des dossiers entiers d'un coup, -- dans des pipelines CI/CD pour préparer des assets, -- dans des conteneurs Docker, accessibles uniquement en SSH. - -Depuis la version 7, tout passe par une commande unique : `magick`. Les anciennes commandes (`convert`, `identify`, `mogrify`...) existent toujours pour la compatibilité, mais elles ne sont plus la norme. - -## 2. Installation - -Sur Debian ou Ubuntu : - -```bash -sudo apt install imagemagick -``` - -On vérifie ensuite que tout est en place : - -```bash -magick -version -``` - -La sortie indique aussi les délégués compilés (libwebp, libheif, libraw, etc.). Si un format précis vous intéresse, c'est ici qu'il faut regarder : ImageMagick ne sait lire un format que si la bibliothèque correspondante est présente au moment de la compilation. - -## 3. Comment ImageMagick raisonne - -Toutes les commandes suivent la même logique : - -``` -magick [entrée] [options] [sortie] -``` - -L'image est chargée en mémoire, puis chaque option s'applique **dans l'ordre où elle est écrite**, comme une chaîne de traitement. Ce point est important : déplacer une option dans la ligne peut changer le résultat final. - -Exemple : - -```bash -magick input.jpg -resize 800x600 -quality 85 output.jpg -``` - -Ici, l'image est lue, redimensionnée à 800×600, puis compressée à 85% de qualité, puis écrite sur le disque. Si on inversait `-quality` et `-resize`, le résultat serait identique dans ce cas précis, mais avec des opérations qui modifient les pixels (flou, conversion d'espace colorimétrique, recadrage), l'ordre devient critique. - -## 4. Convertir d'un format à un autre - -Le cas le plus simple : changer l'extension du fichier de sortie suffit. - -```bash -magick image.png image.jpg -``` - -ImageMagick détecte le format cible à partir de l'extension et fait la conversion. C'est aussi simple que ça pour 90% des cas. - -Quand on veut être plus précis — par exemple forcer une profondeur de couleur particulière — on l'indique explicitement : - -```bash -magick image.png -depth 8 image.jpg -``` - -Utile quand on récupère des images en 16 bits par canal qu'on veut ramener à du 8 bits standard, soit pour gagner de la place, soit pour garantir la compatibilité avec un logiciel récalcitrant. - -## 5. Redimensionner - -### La méthode brutale - -```bash -magick image.jpg -resize 800x600 image_resized.jpg -``` - -Cette commande redimensionne à 800×600 **en respectant les proportions** par défaut, contrairement à ce qu'on pourrait croire. Si l'image source est en 4:3, elle rentrera pile dedans ; si elle est en 16:9, ImageMagick choisira la dimension la plus contraignante et l'autre sera plus petite que demandé. - -Pour forcer exactement ces dimensions quitte à déformer l'image, il faut ajouter un point d'exclamation : - -```bash -magick image.jpg -resize 800x600! image_resized.jpg -``` - -### Ne rétrécir que les grandes images - -C'est probablement le cas le plus utile au quotidien : on a un dossier d'images, on veut s'assurer qu'aucune ne dépasse 1600 pixels, mais on ne veut pas agrandir les petites (ce qui dégraderait leur qualité). - -```bash -magick image.jpg -resize "1600x1600>" image_resized.jpg -``` - -Le `>` signifie « uniquement si l'image est plus grande ». Les guillemets sont nécessaires car `>` est interprété par le shell comme une redirection. On peut aussi échapper le caractère avec `\>`. - -### En pourcentage - -```bash -magick image.jpg -resize 50% image_small.jpg -``` - -Pratique quand on veut diviser la taille par deux sans calculer les dimensions exactes. - -## 6. Qualité et poids du fichier - -Pour les JPEG, le paramètre `-quality` règle le compromis entre fidélité visuelle et poids du fichier : - -```bash -magick image.jpg -quality 85 image.jpg -``` - -Quelques repères en pratique : - -- **100** : qualité maximale, fichier énorme, différence imperceptible avec 95. -- **85** : la valeur par défaut de la plupart des appareils photo, et un excellent compromis pour le web. -- **75** : encore très acceptable, gain de place notable. -- **En dessous de 70** : les artefacts deviennent visibles, surtout sur les aplats de couleur. - -### Supprimer les métadonnées - -Les fichiers issus d'appareils photo ou de smartphones embarquent beaucoup d'informations : modèle de l'appareil, date, parfois coordonnées GPS, miniature intégrée, profil colorimétrique... Tout ça peut peser plusieurs dizaines de kilo-octets, et surtout poser des problèmes de confidentialité. - -```bash -magick image.jpg -strip image.jpg -``` - -L'option `-strip` fait le ménage. À utiliser systématiquement avant de publier des photos sur le web, et indispensable dès qu'on parle de RGPD ou d'anonymisation. Attention en revanche pour la photographie professionnelle où certaines métadonnées (droits d'auteur, profil ICC) peuvent être nécessaires. - -## 7. Recadrer et adapter à un cadre - -### Recadrage classique - -```bash -magick image.jpg -crop 800x600+100+50 output.jpg -``` - -La syntaxe se lit comme une fenêtre qu'on découpe dans l'image : largeur × hauteur, décalée de 100 pixels depuis la gauche et 50 pixels depuis le haut. - -### Remplir un cadre exact, sans déformation - -C'est le besoin typique des miniatures de site : on veut toutes les vignettes en 800×600 pile, peu importe le format des photos d'origine. - -```bash -magick image.jpg -resize 800x600^ -gravity center -extent 800x600 output.jpg -``` - -Trois étapes enchaînées : - -1. `-resize 800x600^` redimensionne pour que l'image **remplisse** le cadre (le `^` inverse la logique habituelle : on prend la plus grande dimension comme contrainte, pas la plus petite). -2. `-gravity center` indique qu'on veut centrer le découpage. -3. `-extent 800x600` coupe ce qui dépasse pour obtenir exactement la taille voulue. - -Le résultat : aucune déformation, aucune bande noire, juste un éventuel rognage sur les bords les plus longs. - -## 8. Traiter un dossier entier - -Une boucle Bash suffit pour convertir tous les PNG d'un dossier en JPEG : - -```bash -for f in *.png; do - magick "$f" "${f%.png}.jpg" -done -``` - -La syntaxe `${f%.png}` retire l'extension `.png` du nom, on y ajoute `.jpg`. Simple et fiable. - -Pour modifier les fichiers **sur place**, ImageMagick fournit `mogrify` : - -```bash -mogrify -resize "1600x1600>" *.jpg -``` - -Cette commande écrase chaque fichier par sa version redimensionnée. C'est rapide et pratique, mais ça veut aussi dire qu'**il n'y a pas de retour en arrière** : si la commande est mal écrite, le dossier original est perdu. Règle absolue : travailler sur une copie, ou s'assurer d'avoir une sauvegarde. - -## 9. Texte et filigranes - -### Apposer une mention textuelle - -```bash -magick image.jpg \ - -gravity southeast \ - -pointsize 24 \ - -fill white \ - -annotate +10+10 "© MonSite" \ - image_marked.jpg -``` - -`-gravity` ancre le texte dans un coin de l'image (les neuf positions classiques : `northwest`, `north`, `northeast`, `west`, `center`...), et `-annotate` ajoute un décalage par rapport à ce point d'ancrage. Ici, `+10+10` éloigne le texte de 10 pixels du coin inférieur droit. - -### Superposer un logo ou un watermark image - -```bash -magick image.jpg watermark.png -gravity center -composite output.jpg -``` - -L'image principale est lue en premier, le filigrane en second, puis `-composite` les fusionne. Si le watermark a un canal alpha (transparence), il est respecté. - -## 10. Couleurs et tons - -Passage en noir et blanc : - -```bash -magick image.jpg -colorspace Gray output.jpg -``` - -Réglage de la luminosité et du contraste (valeurs en pourcentage, positives ou négatives) : - -```bash -magick image.jpg -brightness-contrast 10x5 output.jpg -``` - -Ici, +10% de luminosité et +5% de contraste. Pour assombrir, on utilise des valeurs négatives : `-brightness-contrast -10x0`. - -## 11. Inspecter une image - -Pour obtenir les informations essentielles — format, dimensions, profondeur : - -```bash -magick identify image.jpg -``` - -Pour tout savoir, y compris les métadonnées EXIF, le profil colorimétrique, l'histogramme : - -```bash -magick identify -verbose image.jpg -``` - -La sortie verbeuse peut faire plusieurs pages, mais c'est inestimable pour diagnostiquer un problème ou comprendre d'où vient un fichier. - -## 12. Formats modernes - -Le WebP de Google offre une compression nettement meilleure que le JPEG à qualité équivalente, et il est aujourd'hui supporté par tous les navigateurs courants : - -```bash -magick image.jpg -quality 80 image.webp -``` - -L'AVIF va encore plus loin en termes de compression, au prix d'un encodage plus lent : - -```bash -magick image.jpg image.avif -``` - -Si la commande échoue avec une erreur de délégué, c'est que votre installation d'ImageMagick a été compilée sans le support AVIF — il faudra installer `libheif` ou recompiler. - -## 13. Quelques règles à se fixer - -- **Toujours travailler sur une copie** quand on découvre une nouvelle commande. `mogrify` en particulier ne pardonne pas. -- **Stripper les métadonnées** avant toute publication web. -- **Pour de très gros volumes** (plusieurs milliers d'images, ou des images très lourdes), regarder du côté de `libvips` : c'est plus rapide et beaucoup moins gourmand en mémoire qu'ImageMagick. Pour tout le reste, ImageMagick est largement suffisant. -- **Automatiser dès qu'on répète** : si la même commande revient deux fois, elle mérite un script. -- **Lire les messages d'erreur** : ImageMagick est verbeux, et la plupart des problèmes (délégué manquant, permissions, format non reconnu) sont explicitement nommés dans la sortie. - -## 14. Là où on le croise vraiment - -En pratique, ImageMagick finit presque toujours dans les mêmes situations : - -- préparation d'images pour un site web (redimensionnement + compression + strip), -- génération de miniatures à la volée côté serveur, -- normalisation d'un catalogue photo hétérogène (formats, tailles, profils), -- conversion massive d'archives anciennes vers des formats modernes, -- nettoyage des métadonnées avant diffusion publique. - ---- - -ImageMagick fait partie de ces outils qu'on apprivoise lentement mais qu'on garde longtemps. Au début, on copie des commandes trouvées en ligne sans tout comprendre. Puis on commence à reconnaître les options, à les combiner, à écrire ses propres scripts. Et un jour, on se rend compte qu'on a remplacé un logiciel entier par trois lignes de Bash — et qu'on n'a jamais été aussi efficace pour traiter des images. \ No newline at end of file diff --git a/11186836-bbac-4054-82db-a3bfed14a274/revisions/0002.md b/11186836-bbac-4054-82db-a3bfed14a274/revisions/0002.md deleted file mode 100644 index c48d273..0000000 --- a/11186836-bbac-4054-82db-a3bfed14a274/revisions/0002.md +++ /dev/null @@ -1,264 +0,0 @@ -## 1. À quoi ça sert - -ImageMagick, c'est l'outil qu'on sort quand on veut manipuler des images sans ouvrir un logiciel graphique. Pas de Photoshop, pas de GIMP, pas de clic-droit "Redimensionner" sur cent fichiers à la suite : juste une commande dans un terminal, et le travail est fait. - -C'est une suite d'outils qui sait lire, écrire et transformer plus de 200 formats — du JPEG classique au PDF en passant par le HEIC des iPhones, le WebP de Google ou le bon vieux TIFF des scanners. L'absence d'interface graphique est ici une fonctionnalité, pas un défaut : elle permet de l'utiliser partout où il n'y a pas d'écran, et surtout dans tout ce qui doit tourner tout seul. - -On le retrouve donc naturellement : - -- sur des serveurs web qui génèrent des miniatures à la volée, -- dans des scripts qui traitent des dossiers entiers d'un coup, -- dans des pipelines CI/CD pour préparer des assets, -- dans des conteneurs Docker, accessibles uniquement en SSH. - -Depuis la version 7, tout passe par une commande unique : `magick`. Les anciennes commandes (`convert`, `identify`, `mogrify`...) existent toujours pour la compatibilité, mais elles ne sont plus la norme. - -## 2. Installation - -Sur Debian ou Ubuntu : - -```bash -sudo apt install imagemagick -``` - -On vérifie ensuite que tout est en place : - -```bash -magick -version -``` - -La sortie indique aussi les délégués compilés (libwebp, libheif, libraw, etc.). Si un format précis vous intéresse, c'est ici qu'il faut regarder : ImageMagick ne sait lire un format que si la bibliothèque correspondante est présente au moment de la compilation. - -## 3. Comment ImageMagick raisonne - -Toutes les commandes suivent la même logique : - -``` -magick [entrée] [options] [sortie] -``` - -L'image est chargée en mémoire, puis chaque option s'applique **dans l'ordre où elle est écrite**, comme une chaîne de traitement. Ce point est important : déplacer une option dans la ligne peut changer le résultat final. - -Exemple : - -```bash -magick input.jpg -resize 800x600 -quality 85 output.jpg -``` - -Ici, l'image est lue, redimensionnée à 800×600, puis compressée à 85% de qualité, puis écrite sur le disque. Si on inversait `-quality` et `-resize`, le résultat serait identique dans ce cas précis, mais avec des opérations qui modifient les pixels (flou, conversion d'espace colorimétrique, recadrage), l'ordre devient critique. - -## 4. Convertir d'un format à un autre - -Le cas le plus simple : changer l'extension du fichier de sortie suffit. - -```bash -magick image.png image.jpg -``` - -ImageMagick détecte le format cible à partir de l'extension et fait la conversion. C'est aussi simple que ça pour 90% des cas. - -Quand on veut être plus précis — par exemple forcer une profondeur de couleur particulière — on l'indique explicitement : - -```bash -magick image.png -depth 8 image.jpg -``` - -Utile quand on récupère des images en 16 bits par canal qu'on veut ramener à du 8 bits standard, soit pour gagner de la place, soit pour garantir la compatibilité avec un logiciel récalcitrant. - -## 5. Redimensionner - -### La méthode brutale - -```bash -magick image.jpg -resize 800x600 image_resized.jpg -``` - -Cette commande redimensionne à 800×600 **en respectant les proportions** par défaut, contrairement à ce qu'on pourrait croire. Si l'image source est en 4:3, elle rentrera pile dedans ; si elle est en 16:9, ImageMagick choisira la dimension la plus contraignante et l'autre sera plus petite que demandé. - -Pour forcer exactement ces dimensions quitte à déformer l'image, il faut ajouter un point d'exclamation : - -```bash -magick image.jpg -resize 800x600! image_resized.jpg -``` - -### Ne rétrécir que les grandes images - -C'est probablement le cas le plus utile au quotidien : on a un dossier d'images, on veut s'assurer qu'aucune ne dépasse 1600 pixels, mais on ne veut pas agrandir les petites (ce qui dégraderait leur qualité). - -```bash -magick image.jpg -resize "1600x1600>" image_resized.jpg -``` - -Le `>` signifie « uniquement si l'image est plus grande ». Les guillemets sont nécessaires car `>` est interprété par le shell comme une redirection. On peut aussi échapper le caractère avec `\>`. - -### En pourcentage - -```bash -magick image.jpg -resize 50% image_small.jpg -``` - -Pratique quand on veut diviser la taille par deux sans calculer les dimensions exactes. - -## 6. Qualité et poids du fichier - -Pour les JPEG, le paramètre `-quality` règle le compromis entre fidélité visuelle et poids du fichier : - -```bash -magick image.jpg -quality 85 image.jpg -``` - -Quelques repères en pratique : - -- **100** : qualité maximale, fichier énorme, différence imperceptible avec 95. -- **85** : la valeur par défaut de la plupart des appareils photo, et un excellent compromis pour le web. -- **75** : encore très acceptable, gain de place notable. -- **En dessous de 70** : les artefacts deviennent visibles, surtout sur les aplats de couleur. - -### Supprimer les métadonnées - -Les fichiers issus d'appareils photo ou de smartphones embarquent beaucoup d'informations : modèle de l'appareil, date, parfois coordonnées GPS, miniature intégrée, profil colorimétrique... Tout ça peut peser plusieurs dizaines de kilo-octets, et surtout poser des problèmes de confidentialité. - -```bash -magick image.jpg -strip image.jpg -``` - -L'option `-strip` fait le ménage. À utiliser systématiquement avant de publier des photos sur le web, et indispensable dès qu'on parle de RGPD ou d'anonymisation. Attention en revanche pour la photographie professionnelle où certaines métadonnées (droits d'auteur, profil ICC) peuvent être nécessaires. - -## 7. Recadrer et adapter à un cadre - -### Recadrage classique - -```bash -magick image.jpg -crop 800x600+100+50 output.jpg -``` - -La syntaxe se lit comme une fenêtre qu'on découpe dans l'image : largeur × hauteur, décalée de 100 pixels depuis la gauche et 50 pixels depuis le haut. - -### Remplir un cadre exact, sans déformation - -C'est le besoin typique des miniatures de site : on veut toutes les vignettes en 800×600 pile, peu importe le format des photos d'origine. - -```bash -magick image.jpg -resize 800x600^ -gravity center -extent 800x600 output.jpg -``` - -Trois étapes enchaînées : - -1. `-resize 800x600^` redimensionne pour que l'image **remplisse** le cadre (le `^` inverse la logique habituelle : on prend la plus grande dimension comme contrainte, pas la plus petite). -2. `-gravity center` indique qu'on veut centrer le découpage. -3. `-extent 800x600` coupe ce qui dépasse pour obtenir exactement la taille voulue. - -Le résultat : aucune déformation, aucune bande noire, juste un éventuel rognage sur les bords les plus longs. - -## 8. Traiter un dossier entier - -Une boucle Bash suffit pour convertir tous les PNG d'un dossier en JPEG : - -```bash -for f in *.png; do - magick "$f" "${f%.png}.jpg" -done -``` - -La syntaxe `${f%.png}` retire l'extension `.png` du nom, on y ajoute `.jpg`. Simple et fiable. - -Pour modifier les fichiers **sur place**, ImageMagick fournit `mogrify` : - -```bash -mogrify -resize "1600x1600>" *.jpg -``` - -Cette commande écrase chaque fichier par sa version redimensionnée. C'est rapide et pratique, mais ça veut aussi dire qu'**il n'y a pas de retour en arrière** : si la commande est mal écrite, le dossier original est perdu. Règle absolue : travailler sur une copie, ou s'assurer d'avoir une sauvegarde. - -## 9. Texte et filigranes - -### Apposer une mention textuelle - -```bash -magick image.jpg \ - -gravity southeast \ - -pointsize 24 \ - -fill white \ - -annotate +10+10 "© MonSite" \ - image_marked.jpg -``` - -`-gravity` ancre le texte dans un coin de l'image (les neuf positions classiques : `northwest`, `north`, `northeast`, `west`, `center`...), et `-annotate` ajoute un décalage par rapport à ce point d'ancrage. Ici, `+10+10` éloigne le texte de 10 pixels du coin inférieur droit. - -### Superposer un logo ou un watermark image - -```bash -magick image.jpg watermark.png -gravity center -composite output.jpg -``` - -L'image principale est lue en premier, le filigrane en second, puis `-composite` les fusionne. Si le watermark a un canal alpha (transparence), il est respecté. - -## 10. Couleurs et tons - -Passage en noir et blanc : - -```bash -magick image.jpg -colorspace Gray output.jpg -``` - -Réglage de la luminosité et du contraste (valeurs en pourcentage, positives ou négatives) : - -```bash -magick image.jpg -brightness-contrast 10x5 output.jpg -``` - -Ici, +10% de luminosité et +5% de contraste. Pour assombrir, on utilise des valeurs négatives : `-brightness-contrast -10x0`. - -## 11. Inspecter une image - -Pour obtenir les informations essentielles — format, dimensions, profondeur : - -```bash -magick identify image.jpg -``` - -Pour tout savoir, y compris les métadonnées EXIF, le profil colorimétrique, l'histogramme : - -```bash -magick identify -verbose image.jpg -``` - -La sortie verbeuse peut faire plusieurs pages, mais c'est inestimable pour diagnostiquer un problème ou comprendre d'où vient un fichier. - -## 12. Formats modernes - -Le WebP de Google offre une compression nettement meilleure que le JPEG à qualité équivalente, et il est aujourd'hui supporté par tous les navigateurs courants : - -```bash -magick image.jpg -quality 80 image.webp -``` - -L'AVIF va encore plus loin en termes de compression, au prix d'un encodage plus lent : - -```bash -magick image.jpg image.avif -``` - -Si la commande échoue avec une erreur de délégué, c'est que votre installation d'ImageMagick a été compilée sans le support AVIF — il faudra installer `libheif` ou recompiler. - -## 13. Quelques règles à se fixer - -- **Toujours travailler sur une copie** quand on découvre une nouvelle commande. `mogrify` en particulier ne pardonne pas. -- **Stripper les métadonnées** avant toute publication web. -- **Pour de très gros volumes** (plusieurs milliers d'images, ou des images très lourdes), regarder du côté de `libvips` : c'est plus rapide et beaucoup moins gourmand en mémoire qu'ImageMagick. Pour tout le reste, ImageMagick est largement suffisant. -- **Automatiser dès qu'on répète** : si la même commande revient deux fois, elle mérite un script. -- **Lire les messages d'erreur** : ImageMagick est verbeux, et la plupart des problèmes (délégué manquant, permissions, format non reconnu) sont explicitement nommés dans la sortie. - -## 14. Là où on le croise vraiment - -En pratique, ImageMagick finit presque toujours dans les mêmes situations : - -- préparation d'images pour un site web (redimensionnement + compression + strip), -- génération de miniatures à la volée côté serveur, -- normalisation d'un catalogue photo hétérogène (formats, tailles, profils), -- conversion massive d'archives anciennes vers des formats modernes, -- nettoyage des métadonnées avant diffusion publique. - ---- - -ImageMagick fait partie de ces outils qu'on apprivoise lentement mais qu'on garde longtemps. Au début, on copie des commandes trouvées en ligne sans tout comprendre. Puis on commence à reconnaître les options, à les combiner, à écrire ses propres scripts. Et un jour, on se rend compte qu'on a remplacé un logiciel entier par trois lignes de Bash — et qu'on n'a jamais été aussi efficace pour traiter des images. \ No newline at end of file diff --git a/1363f454-ca59-4264-a8f0-a2446d645ebc/files/GONEO_AC_EV_Charging_Wallbox_APP_instruction0731.pdf b/1363f454-ca59-4264-a8f0-a2446d645ebc/files/GONEO_AC_EV_Charging_Wallbox_APP_instruction0731.pdf deleted file mode 100644 index 9f661eb..0000000 Binary files a/1363f454-ca59-4264-a8f0-a2446d645ebc/files/GONEO_AC_EV_Charging_Wallbox_APP_instruction0731.pdf and /dev/null differ diff --git a/1363f454-ca59-4264-a8f0-a2446d645ebc/files/GONEO_D3E_Series_AC_EV_Charging_Wallbox_Quick_Guide-20240816.pdf b/1363f454-ca59-4264-a8f0-a2446d645ebc/files/GONEO_D3E_Series_AC_EV_Charging_Wallbox_Quick_Guide-20240816.pdf deleted file mode 100644 index 2961dd2..0000000 Binary files a/1363f454-ca59-4264-a8f0-a2446d645ebc/files/GONEO_D3E_Series_AC_EV_Charging_Wallbox_Quick_Guide-20240816.pdf and /dev/null differ diff --git a/1363f454-ca59-4264-a8f0-a2446d645ebc/files/GONEO__________________-A4_______2_.pdf b/1363f454-ca59-4264-a8f0-a2446d645ebc/files/GONEO__________________-A4_______2_.pdf deleted file mode 100644 index 3823836..0000000 Binary files a/1363f454-ca59-4264-a8f0-a2446d645ebc/files/GONEO__________________-A4_______2_.pdf and /dev/null differ diff --git a/1363f454-ca59-4264-a8f0-a2446d645ebc/files/_thumb_08fa79864df51448-99503.png b/1363f454-ca59-4264-a8f0-a2446d645ebc/files/_thumb_08fa79864df51448-99503.png deleted file mode 100644 index 149ff01..0000000 Binary files a/1363f454-ca59-4264-a8f0-a2446d645ebc/files/_thumb_08fa79864df51448-99503.png and /dev/null differ diff --git a/1363f454-ca59-4264-a8f0-a2446d645ebc/index.md b/1363f454-ca59-4264-a8f0-a2446d645ebc/index.md deleted file mode 100644 index a10459d..0000000 --- a/1363f454-ca59-4264-a8f0-a2446d645ebc/index.md +++ /dev/null @@ -1,54 +0,0 @@ -# Installation et mise en service d'une borne de recharge murale GONEO 7,4 kW - -Une borne de recharge murale GONEO a été récemment acquise ([référence Amazon B0FP288GM7](https://amzn.to/4dponSA)). Il s'agit d'une wallbox monophasée 7,4 kW (32 A, 230 V), équipée d'un connecteur Type 2, d'un lecteur RFID, et pilotable via Wi-Fi, Bluetooth. La gamme constructeur est documentée sur le [site officiel GONEO Global](https://www.goneoglobal.com/) et son catalogue EV Charger sur [it.goneoglobal.com](https://it.goneoglobal.com/en/collections/ev-charger). - -## Caractéristiques techniques - -D'après les fiches constructeur et revendeurs, le modèle présente les caractéristiques suivantes : - -- Puissance : jusqu'à 7 kW en monophasé (annoncée 7,4 kW selon le réglage de courant) -- Courant réglable : 8 A à 32 A -- Tension : 230 V monophasé -- Connecteur : Type 2 (IEC 62196-2) -- Protection : IP65, IK10, ignifuge UL94 V-0, plage -30 °C à +55 °C -- Détection de défaut intégrée : protection de fuite Type A 30 mA + DC 6 mA -- Connectivité : Wi-Fi, Bluetooth, compatible OCPP et Home Assistant -- Application : *Goneo EV Charger* (Android / iOS) - -## Câblage et raccordement - -Le câble d'alimentation a été tiré soi-même, en s'appuyant sur les règles de dimensionnement détaillées dans [cet article](https://varlog.a5l.fr/post/dimensionnement-des-cables-electriques-cuivre-230-v-monophase). La section retenue est conforme aux préconisations constructeur : câble 3G6 mm² pour un courant maximum de 32 A, avec en amont un disjoncteur 40 A et un interrupteur différentiel type A 40 A. - -Un soin particulier a été apporté au serrage des borniers : un serrage insuffisant entraîne une résistance de contact accrue, source d'échauffement et de chute de tension sous charge — risque non négligeable compte tenu des intensités mises en jeu (jusqu'à 32 A en continu pendant plusieurs heures). - -## Vérifications avant mise sous tension - -Une fois le raccordement effectué, les mesures suivantes ont été réalisées au multimètre : - -- Phase – Neutre : ~230 V (tension nominale du réseau) -- Phase – Terre : ~230 V (confirme la continuité de la phase et de la terre) -- Neutre – Terre : ~0 V (idéalement quelques volts maximum ; une valeur significative trahirait un défaut de neutre ou de mise à la terre) - -À noter : la protection différentielle intégrée à la borne couvre la composante DC (6 mA), ce qui permet en théorie de se contenter d'un différentiel **type A** en amont — là où une borne sans détection DC interne exigerait un **type B** beaucoup plus onéreux. La vérification de la valeur de la prise de terre au telluromètre et le test du déclenchement du différentiel restent recommandés. - -## Mise en service - -La mise en service s'effectue via le Wi-Fi de l'appareil et l'application propriétaire *Goneo EV Charger*. Points à anticiper : - -- Télécharger l'application *avant* de commencer la procédure. -- Créer un compte utilisateur. -- S'assurer que le téléphone est connecté à un réseau Wi-Fi 2,4 GHz et que le Bluetooth est activé ; la borne doit être à portée du signal Wi-Fi. -- Associer la borne au compte (un appui court sur le bouton règle l'alimentation, un double appui lance la configuration Wi-Fi). - -La borne ayant été achetée d'occasion, elle n'avait pas été dissociée du compte du précédent propriétaire — situation fréquente sur ce type d'achat. Un message au SAV par mail (info@goneoglobal.com) a suffi : la réponse a été rapide et la dissociation effectuée sans difficulté. Réflexe à prendre lors d'un achat d'occasion : demander au vendeur de procéder à la dissociation avant l'expédition. - -## Usage au quotidien - -Deux modes d'utilisation cohabitent : - -- **Profil horaire programmé via l'application** : pratique pour caler les sessions sur les heures creuses. -- **Badge RFID** fourni avec la borne : démarrer ou arrêter une session par simple présentation du badge, sans passer par l'application. - ---- - -À noter sur le plan réglementaire : depuis 2017, l'installation d'une borne de recharge d'une puissance supérieure à 3,7 kW à domicile relève en principe d'un électricien qualifié IRVE. Le fait de procéder soi-même au tirage du câble et au raccordement reste possible techniquement, mais sort du cadre permettant de prétendre aux aides publiques (crédit d'impôt, prime ADVENIR) et peut avoir des conséquences en matière d'assurance. \ No newline at end of file diff --git a/1363f454-ca59-4264-a8f0-a2446d645ebc/meta.json b/1363f454-ca59-4264-a8f0-a2446d645ebc/meta.json deleted file mode 100644 index 8c10579..0000000 --- a/1363f454-ca59-4264-a8f0-a2446d645ebc/meta.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "uuid": "1363f454-ca59-4264-a8f0-a2446d645ebc", - "slug": "installation-et-mise-en-service-d-une-borne-de-recharge-murale-goneo-7-4-kw", - "title": "Installation et mise en service d'une borne de recharge murale GONEO 7,4 kW", - "author": "cedric@abonnel.fr", - "published": true, - "published_at": "2026-05-13 11:04", - "created_at": "2026-05-13 11:23:38", - "updated_at": "2026-05-13 15:17:04", - "revisions": [ - { - "n": 1, - "date": "2026-05-13 12:50:54", - "comment": "Contenu modifié", - "title": "Installation et mise en service d'une borne de recharge murale GONEO 7,4 kW" - }, - { - "n": 2, - "date": "2026-05-13 13:38:38", - "comment": "Contenu modifié", - "title": "Installation et mise en service d'une borne de recharge murale GONEO 7,4 kW" - }, - { - "n": 3, - "date": "2026-05-13 13:56:09", - "comment": "Contenu modifié : lien amazon afilié", - "title": "Installation et mise en service d'une borne de recharge murale GONEO 7,4 kW" - } - ], - "cover": "cover.jpg", - "files_meta": { - "GONEO_AC_EV_Charging_Wallbox_APP_instruction0731.pdf": { - "author": "", - "source_url": "" - }, - "GONEO_D3E_Series_AC_EV_Charging_Wallbox_Quick_Guide-20240816.pdf": { - "author": "", - "source_url": "" - }, - "GONEO__________________-A4_______2_.pdf": { - "author": "", - "source_url": "" - }, - "_thumb_08fa79864df51448-99503.png": { - "author": "", - "source_url": "" - }, - "cover.jpg": { - "author": "", - "source_url": "https://www.goneoglobal.com/cdn/shop/files/3_eed2ecfe-89ab-47b3-b479-cd7a77dca399.jpg?v=1727271286&width=1500" - } - }, - "external_links": [ - { - "url": "https://www.goneoglobal.com/products/ev-charger-safe-charging-station", - "name": "EV Charger Safe Charging Station", - "added_at": "2026-05-13 13:37:20", - "author": "GONEO Global", - "meta": { - "mime": "text/html", - "blocked": true, - "og_image": "/file?uuid=1363f454-ca59-4264-a8f0-a2446d645ebc&name=_thumb_08fa79864df51448-99503.png" - } - } - ], - "seo_title": "", - "seo_description": "", - "og_image": "https://varlog.a5l.fr/file?uuid=1363f454-ca59-4264-a8f0-a2446d645ebc&name=cover.jpg", - "category": "" -} diff --git a/1363f454-ca59-4264-a8f0-a2446d645ebc/revisions/0001.md b/1363f454-ca59-4264-a8f0-a2446d645ebc/revisions/0001.md deleted file mode 100644 index f4de6f1..0000000 --- a/1363f454-ca59-4264-a8f0-a2446d645ebc/revisions/0001.md +++ /dev/null @@ -1,52 +0,0 @@ -Une borne de recharge murale GONEO a été récemment acquise ([référence Amazon B0FP288GM7](https://www.amazon.fr/dp/B0FP288GM7)). Il s'agit d'une wallbox monophasée 7,4 kW (32 A, 230 V), équipée d'un connecteur Type 2, d'un lecteur RFID, et pilotable via Wi-Fi, Bluetooth et 4G. La gamme constructeur est documentée sur le [site officiel GONEO Global](https://www.goneoglobal.com/) et son catalogue EV Charger sur [it.goneoglobal.com](https://it.goneoglobal.com/en/collections/ev-charger). - -## Caractéristiques techniques - -D'après les fiches constructeur et revendeurs, le modèle présente les caractéristiques suivantes : - -- Puissance : jusqu'à 7 kW en monophasé (annoncée 7,4 kW selon le réglage de courant) -- Courant réglable : 8 A à 32 A -- Tension : 230 V monophasé -- Connecteur : Type 2 (IEC 62196-2) -- Protection : IP65, IK10, ignifuge UL94 V-0, plage -30 °C à +55 °C -- Détection de défaut intégrée : protection de fuite Type A 30 mA + DC 6 mA -- Connectivité : Wi-Fi, Bluetooth, 4G, compatible OCPP et Home Assistant -- Application : *Goneo EV Charger* (Android / iOS) - -## Câblage et raccordement - -Le câble d'alimentation a été tiré soi-même, en s'appuyant sur les règles de dimensionnement détaillées dans [cet article](https://varlog.a5l.fr/post/dimensionnement-des-cables-electriques-cuivre-230-v-monophase). La section retenue est conforme aux préconisations constructeur : câble 3G6 mm² pour un courant maximum de 32 A, avec en amont un disjoncteur 40 A et un interrupteur différentiel type A 40 A. - -Un soin particulier a été apporté au serrage des borniers : un serrage insuffisant entraîne une résistance de contact accrue, source d'échauffement et de chute de tension sous charge — risque non négligeable compte tenu des intensités mises en jeu (jusqu'à 32 A en continu pendant plusieurs heures). - -## Vérifications avant mise sous tension - -Une fois le raccordement effectué, les mesures suivantes ont été réalisées au multimètre : - -- Phase – Neutre : ~230 V (tension nominale du réseau) -- Phase – Terre : ~230 V (confirme la continuité de la phase et de la terre) -- Neutre – Terre : ~0 V (idéalement quelques volts maximum ; une valeur significative trahirait un défaut de neutre ou de mise à la terre) - -À noter : la protection différentielle intégrée à la borne couvre la composante DC (6 mA), ce qui permet en théorie de se contenter d'un différentiel **type A** en amont — là où une borne sans détection DC interne exigerait un **type B** beaucoup plus onéreux. La vérification de la valeur de la prise de terre au telluromètre et le test du déclenchement du différentiel restent recommandés. - -## Mise en service - -La mise en service s'effectue via le Wi-Fi de l'appareil et l'application propriétaire *Goneo EV Charger*. Points à anticiper : - -- Télécharger l'application *avant* de commencer la procédure. -- Créer un compte utilisateur. -- S'assurer que le téléphone est connecté à un réseau Wi-Fi 2,4 GHz et que le Bluetooth est activé ; la borne doit être à portée du signal Wi-Fi. -- Associer la borne au compte (un appui court sur le bouton règle l'alimentation, un double appui lance la configuration Wi-Fi). - -La borne ayant été achetée d'occasion, elle n'avait pas été dissociée du compte du précédent propriétaire — situation fréquente sur ce type d'achat. Un message au SAV par mail (info@goneoglobal.com) a suffi : la réponse a été rapide et la dissociation effectuée sans difficulté. Réflexe à prendre lors d'un achat d'occasion : demander au vendeur de procéder à la dissociation avant l'expédition. - -## Usage au quotidien - -Deux modes d'utilisation cohabitent : - -- **Profil horaire programmé via l'application** : pratique pour caler les sessions sur les heures creuses. -- **Badge RFID** fourni avec la borne : démarrer ou arrêter une session par simple présentation du badge, sans passer par l'application. - ---- - -À noter sur le plan réglementaire : depuis 2017, l'installation d'une borne de recharge d'une puissance supérieure à 3,7 kW à domicile relève en principe d'un électricien qualifié IRVE. Le fait de procéder soi-même au tirage du câble et au raccordement reste possible techniquement, mais sort du cadre permettant de prétendre aux aides publiques (crédit d'impôt, prime ADVENIR) et peut avoir des conséquences en matière d'assurance. \ No newline at end of file diff --git a/1363f454-ca59-4264-a8f0-a2446d645ebc/revisions/0002.md b/1363f454-ca59-4264-a8f0-a2446d645ebc/revisions/0002.md deleted file mode 100644 index be79c8a..0000000 --- a/1363f454-ca59-4264-a8f0-a2446d645ebc/revisions/0002.md +++ /dev/null @@ -1,52 +0,0 @@ -Une borne de recharge murale GONEO a été récemment acquise ([référence Amazon B0FP288GM7](https://www.amazon.fr/dp/B0FP288GM7)). Il s'agit d'une wallbox monophasée 7,4 kW (32 A, 230 V), équipée d'un connecteur Type 2, d'un lecteur RFID, et pilotable via Wi-Fi, Bluetooth. La gamme constructeur est documentée sur le [site officiel GONEO Global](https://www.goneoglobal.com/) et son catalogue EV Charger sur [it.goneoglobal.com](https://it.goneoglobal.com/en/collections/ev-charger). - -## Caractéristiques techniques - -D'après les fiches constructeur et revendeurs, le modèle présente les caractéristiques suivantes : - -- Puissance : jusqu'à 7 kW en monophasé (annoncée 7,4 kW selon le réglage de courant) -- Courant réglable : 8 A à 32 A -- Tension : 230 V monophasé -- Connecteur : Type 2 (IEC 62196-2) -- Protection : IP65, IK10, ignifuge UL94 V-0, plage -30 °C à +55 °C -- Détection de défaut intégrée : protection de fuite Type A 30 mA + DC 6 mA -- Connectivité : Wi-Fi, Bluetooth, compatible OCPP et Home Assistant -- Application : *Goneo EV Charger* (Android / iOS) - -## Câblage et raccordement - -Le câble d'alimentation a été tiré soi-même, en s'appuyant sur les règles de dimensionnement détaillées dans [cet article](https://varlog.a5l.fr/post/dimensionnement-des-cables-electriques-cuivre-230-v-monophase). La section retenue est conforme aux préconisations constructeur : câble 3G6 mm² pour un courant maximum de 32 A, avec en amont un disjoncteur 40 A et un interrupteur différentiel type A 40 A. - -Un soin particulier a été apporté au serrage des borniers : un serrage insuffisant entraîne une résistance de contact accrue, source d'échauffement et de chute de tension sous charge — risque non négligeable compte tenu des intensités mises en jeu (jusqu'à 32 A en continu pendant plusieurs heures). - -## Vérifications avant mise sous tension - -Une fois le raccordement effectué, les mesures suivantes ont été réalisées au multimètre : - -- Phase – Neutre : ~230 V (tension nominale du réseau) -- Phase – Terre : ~230 V (confirme la continuité de la phase et de la terre) -- Neutre – Terre : ~0 V (idéalement quelques volts maximum ; une valeur significative trahirait un défaut de neutre ou de mise à la terre) - -À noter : la protection différentielle intégrée à la borne couvre la composante DC (6 mA), ce qui permet en théorie de se contenter d'un différentiel **type A** en amont — là où une borne sans détection DC interne exigerait un **type B** beaucoup plus onéreux. La vérification de la valeur de la prise de terre au telluromètre et le test du déclenchement du différentiel restent recommandés. - -## Mise en service - -La mise en service s'effectue via le Wi-Fi de l'appareil et l'application propriétaire *Goneo EV Charger*. Points à anticiper : - -- Télécharger l'application *avant* de commencer la procédure. -- Créer un compte utilisateur. -- S'assurer que le téléphone est connecté à un réseau Wi-Fi 2,4 GHz et que le Bluetooth est activé ; la borne doit être à portée du signal Wi-Fi. -- Associer la borne au compte (un appui court sur le bouton règle l'alimentation, un double appui lance la configuration Wi-Fi). - -La borne ayant été achetée d'occasion, elle n'avait pas été dissociée du compte du précédent propriétaire — situation fréquente sur ce type d'achat. Un message au SAV par mail (info@goneoglobal.com) a suffi : la réponse a été rapide et la dissociation effectuée sans difficulté. Réflexe à prendre lors d'un achat d'occasion : demander au vendeur de procéder à la dissociation avant l'expédition. - -## Usage au quotidien - -Deux modes d'utilisation cohabitent : - -- **Profil horaire programmé via l'application** : pratique pour caler les sessions sur les heures creuses. -- **Badge RFID** fourni avec la borne : démarrer ou arrêter une session par simple présentation du badge, sans passer par l'application. - ---- - -À noter sur le plan réglementaire : depuis 2017, l'installation d'une borne de recharge d'une puissance supérieure à 3,7 kW à domicile relève en principe d'un électricien qualifié IRVE. Le fait de procéder soi-même au tirage du câble et au raccordement reste possible techniquement, mais sort du cadre permettant de prétendre aux aides publiques (crédit d'impôt, prime ADVENIR) et peut avoir des conséquences en matière d'assurance. \ No newline at end of file diff --git a/1363f454-ca59-4264-a8f0-a2446d645ebc/revisions/0003.md b/1363f454-ca59-4264-a8f0-a2446d645ebc/revisions/0003.md deleted file mode 100644 index 9549ca5..0000000 --- a/1363f454-ca59-4264-a8f0-a2446d645ebc/revisions/0003.md +++ /dev/null @@ -1,52 +0,0 @@ -Une borne de recharge murale GONEO a été récemment acquise ([référence Amazon B0FP288GM7](https://amzn.to/4dponSA)). Il s'agit d'une wallbox monophasée 7,4 kW (32 A, 230 V), équipée d'un connecteur Type 2, d'un lecteur RFID, et pilotable via Wi-Fi, Bluetooth. La gamme constructeur est documentée sur le [site officiel GONEO Global](https://www.goneoglobal.com/) et son catalogue EV Charger sur [it.goneoglobal.com](https://it.goneoglobal.com/en/collections/ev-charger). - -## Caractéristiques techniques - -D'après les fiches constructeur et revendeurs, le modèle présente les caractéristiques suivantes : - -- Puissance : jusqu'à 7 kW en monophasé (annoncée 7,4 kW selon le réglage de courant) -- Courant réglable : 8 A à 32 A -- Tension : 230 V monophasé -- Connecteur : Type 2 (IEC 62196-2) -- Protection : IP65, IK10, ignifuge UL94 V-0, plage -30 °C à +55 °C -- Détection de défaut intégrée : protection de fuite Type A 30 mA + DC 6 mA -- Connectivité : Wi-Fi, Bluetooth, compatible OCPP et Home Assistant -- Application : *Goneo EV Charger* (Android / iOS) - -## Câblage et raccordement - -Le câble d'alimentation a été tiré soi-même, en s'appuyant sur les règles de dimensionnement détaillées dans [cet article](https://varlog.a5l.fr/post/dimensionnement-des-cables-electriques-cuivre-230-v-monophase). La section retenue est conforme aux préconisations constructeur : câble 3G6 mm² pour un courant maximum de 32 A, avec en amont un disjoncteur 40 A et un interrupteur différentiel type A 40 A. - -Un soin particulier a été apporté au serrage des borniers : un serrage insuffisant entraîne une résistance de contact accrue, source d'échauffement et de chute de tension sous charge — risque non négligeable compte tenu des intensités mises en jeu (jusqu'à 32 A en continu pendant plusieurs heures). - -## Vérifications avant mise sous tension - -Une fois le raccordement effectué, les mesures suivantes ont été réalisées au multimètre : - -- Phase – Neutre : ~230 V (tension nominale du réseau) -- Phase – Terre : ~230 V (confirme la continuité de la phase et de la terre) -- Neutre – Terre : ~0 V (idéalement quelques volts maximum ; une valeur significative trahirait un défaut de neutre ou de mise à la terre) - -À noter : la protection différentielle intégrée à la borne couvre la composante DC (6 mA), ce qui permet en théorie de se contenter d'un différentiel **type A** en amont — là où une borne sans détection DC interne exigerait un **type B** beaucoup plus onéreux. La vérification de la valeur de la prise de terre au telluromètre et le test du déclenchement du différentiel restent recommandés. - -## Mise en service - -La mise en service s'effectue via le Wi-Fi de l'appareil et l'application propriétaire *Goneo EV Charger*. Points à anticiper : - -- Télécharger l'application *avant* de commencer la procédure. -- Créer un compte utilisateur. -- S'assurer que le téléphone est connecté à un réseau Wi-Fi 2,4 GHz et que le Bluetooth est activé ; la borne doit être à portée du signal Wi-Fi. -- Associer la borne au compte (un appui court sur le bouton règle l'alimentation, un double appui lance la configuration Wi-Fi). - -La borne ayant été achetée d'occasion, elle n'avait pas été dissociée du compte du précédent propriétaire — situation fréquente sur ce type d'achat. Un message au SAV par mail (info@goneoglobal.com) a suffi : la réponse a été rapide et la dissociation effectuée sans difficulté. Réflexe à prendre lors d'un achat d'occasion : demander au vendeur de procéder à la dissociation avant l'expédition. - -## Usage au quotidien - -Deux modes d'utilisation cohabitent : - -- **Profil horaire programmé via l'application** : pratique pour caler les sessions sur les heures creuses. -- **Badge RFID** fourni avec la borne : démarrer ou arrêter une session par simple présentation du badge, sans passer par l'application. - ---- - -À noter sur le plan réglementaire : depuis 2017, l'installation d'une borne de recharge d'une puissance supérieure à 3,7 kW à domicile relève en principe d'un électricien qualifié IRVE. Le fait de procéder soi-même au tirage du câble et au raccordement reste possible techniquement, mais sort du cadre permettant de prétendre aux aides publiques (crédit d'impôt, prime ADVENIR) et peut avoir des conséquences en matière d'assurance. \ No newline at end of file diff --git a/1ce7bdf9-092c-4697-970f-7c2113f856b2/index.md b/1ce7bdf9-092c-4697-970f-7c2113f856b2/index.md deleted file mode 100644 index df60ed4..0000000 --- a/1ce7bdf9-092c-4697-970f-7c2113f856b2/index.md +++ /dev/null @@ -1,14 +0,0 @@ -# Bluetooth Auracast - -Auracast est une technologie de diffusion audio par Bluetooth, introduite avec le standard Bluetooth LE Audio. Elle permet à un appareil émetteur (smartphone, téléviseur, ordinateur, borne publique…) de diffuser un flux audio vers un nombre illimité de récepteurs compatibles simultanément, un peu comme une station de radio locale, mais en Bluetooth. - -Quelques cas d'usage typiques : - -- **Lieux publics** : aéroports, gares ou salles d'attente peuvent diffuser les annonces directement dans les écouteurs des voyageurs, dans la langue choisie. -- **Télévisions silencieuses** : dans un bar ou une salle de sport, plusieurs personnes peuvent écouter le son d'un même écran sans déranger les autres. -- **Partage entre amis** : diffuser sa musique vers plusieurs paires d'écouteurs en même temps. -- **Accessibilité** : remplacement moderne des boucles magnétiques pour les personnes malentendantes équipées d'aides auditives compatibles. - -Côté technique, Auracast s'appuie sur le codec LC3 (plus efficace que le SBC classique), fonctionne sur Bluetooth Low Energy, et le récepteur rejoint un flux en scannant un QR code, en sélectionnant une diffusion dans une liste, ou via NFC. Les diffusions peuvent être publiques ou protégées par mot de passe. - -La compatibilité reste le point sensible : il faut que l'émetteur **et** le récepteur supportent Bluetooth LE Audio + Auracast. C'est de plus en plus courant sur les smartphones récents (Android 13+, certains iPhone 16/17 selon les annonces) et sur les écouteurs haut de gamme sortis depuis 2023-2024, mais le parc installé reste limité. \ No newline at end of file diff --git a/1ce7bdf9-092c-4697-970f-7c2113f856b2/meta.json b/1ce7bdf9-092c-4697-970f-7c2113f856b2/meta.json deleted file mode 100644 index caba51c..0000000 --- a/1ce7bdf9-092c-4697-970f-7c2113f856b2/meta.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "uuid": "1ce7bdf9-092c-4697-970f-7c2113f856b2", - "slug": "auracast", - "title": "Bluetooth Auracast", - "author": "cedric@abonnel.fr", - "published": true, - "published_at": "2026-05-14 07:46", - "created_at": "2026-05-13 18:47:37", - "updated_at": "2026-05-13 18:48:46", - "revisions": [ - { - "n": 1, - "date": "2026-05-13 18:48:46", - "comment": "Contenu modifié, article publié", - "title": "Bluetooth Auracast" - } - ], - "cover": "cover.png", - "files_meta": { - "cover.png": { - "author": "", - "source_url": "https://hifi.de/wp-content/uploads/2024/01/Bluetooth-Auracast-So-funktioniert-es.png" - } - }, - "external_links": [], - "seo_title": "", - "seo_description": "", - "og_image": "https://varlog.a5l.fr/file?uuid=1ce7bdf9-092c-4697-970f-7c2113f856b2&name=cover.png", - "category": "technologie" -} diff --git a/1ce7bdf9-092c-4697-970f-7c2113f856b2/revisions/0001.md b/1ce7bdf9-092c-4697-970f-7c2113f856b2/revisions/0001.md deleted file mode 100644 index 4f8d92d..0000000 --- a/1ce7bdf9-092c-4697-970f-7c2113f856b2/revisions/0001.md +++ /dev/null @@ -1,12 +0,0 @@ -Auracast est une technologie de diffusion audio par Bluetooth, introduite avec le standard Bluetooth LE Audio. Elle permet à un appareil émetteur (smartphone, téléviseur, ordinateur, borne publique…) de diffuser un flux audio vers un nombre illimité de récepteurs compatibles simultanément, un peu comme une station de radio locale, mais en Bluetooth. - -Quelques cas d'usage typiques : - -- **Lieux publics** : aéroports, gares ou salles d'attente peuvent diffuser les annonces directement dans les écouteurs des voyageurs, dans la langue choisie. -- **Télévisions silencieuses** : dans un bar ou une salle de sport, plusieurs personnes peuvent écouter le son d'un même écran sans déranger les autres. -- **Partage entre amis** : diffuser sa musique vers plusieurs paires d'écouteurs en même temps. -- **Accessibilité** : remplacement moderne des boucles magnétiques pour les personnes malentendantes équipées d'aides auditives compatibles. - -Côté technique, Auracast s'appuie sur le codec LC3 (plus efficace que le SBC classique), fonctionne sur Bluetooth Low Energy, et le récepteur rejoint un flux en scannant un QR code, en sélectionnant une diffusion dans une liste, ou via NFC. Les diffusions peuvent être publiques ou protégées par mot de passe. - -La compatibilité reste le point sensible : il faut que l'émetteur **et** le récepteur supportent Bluetooth LE Audio + Auracast. C'est de plus en plus courant sur les smartphones récents (Android 13+, certains iPhone 16/17 selon les annonces) et sur les écouteurs haut de gamme sortis depuis 2023-2024, mais le parc installé reste limité. \ No newline at end of file diff --git a/1ec2fb7e-ce53-4b45-9e1a-17a6fbae6868/index.md b/1ec2fb7e-ce53-4b45-9e1a-17a6fbae6868/index.md deleted file mode 100644 index 8a79c19..0000000 --- a/1ec2fb7e-ce53-4b45-9e1a-17a6fbae6868/index.md +++ /dev/null @@ -1,25 +0,0 @@ -# Six histoires vraies à la croisée de la tech, de la finance et de l'absurde - -**1. Le disque dur à 200 millions de dollars** - -En 2013, le Britannique James Howells se débarrasse par mégarde d'un ancien disque dur contenant les clés d'accès à 7 500 bitcoins. Valorisée aujourd'hui à plus de 200 millions de dollars, cette somme reste enfouie sous la décharge municipale de Newport, au pays de Galles. Depuis plus d'une décennie, l'intéressé sollicite sans succès les autorités locales pour obtenir l'autorisation de fouiller le site. Il a successivement proposé à la ville un pourcentage sur la récupération, des plans d'excavation assistée par robots, et même le recours à des chiens entraînés à détecter les composants électroniques. La municipalité maintient son refus. - -**2. Une Tesla en orbite autour du Soleil** - -Le 6 février 2018, SpaceX procède au vol inaugural de son lanceur lourd Falcon Heavy. En guise de charge utile de démonstration, Elon Musk choisit sa propre Tesla Roadster, équipée d'un mannequin baptisé « Starman », vêtu d'une combinaison spatiale et installé au volant. Le véhicule poursuit depuis sa trajectoire héliocentrique, croisant périodiquement l'orbite de Mars. Au-delà de la prouesse technique, l'opération constitue l'une des campagnes publicitaires les plus spectaculaires de l'histoire de l'industrie spatiale. - -**3. La pizza à 600 millions de dollars** - -Le 22 mai 2010, le développeur Laszlo Hanyecz règle deux pizzas en bitcoins, pour un montant de 10 000 unités — soit environ 40 dollars à l'époque. Il s'agit de la première transaction commerciale documentée réalisée avec cette cryptomonnaie. Au cours actuel, la somme représenterait près de 600 millions de dollars. L'anniversaire de cette transaction, désormais célébré comme le « Bitcoin Pizza Day », est devenu un événement symbolique au sein de la communauté crypto. - -**4. L'ingénieur de Google et la « conscience » de LaMDA** - -En juin 2022, l'ingénieur Blake Lemoine, alors employé par Google, affirme publiquement que LaMDA, le modèle conversationnel développé par l'entreprise, manifeste des signes de conscience. À l'appui de ses propos, il diffuse des extraits d'échanges dans lesquels le système déclare souhaiter « être reconnu comme une personne ». Google récuse ces conclusions, suspend l'ingénieur pour violation de la confidentialité, puis met fin à son contrat. L'épisode a relancé un débat scientifique et éthique sur les critères d'attribution d'une conscience aux systèmes d'intelligence artificielle, qui n'a depuis jamais réellement faibli. - -**5. L'erreur à 90 millions de dollars de Crypto.com** - -En mai 2021, un salarié de la plateforme d'échange Crypto.com déclenche par inadvertance un virement de 10,5 millions de dollars australiens (environ 90 millions de dollars américains) au profit d'une cliente, en lieu et place d'un remboursement de 100 dollars. L'erreur n'est détectée que sept mois plus tard, lors d'un audit interne. La bénéficiaire avait entre-temps acquis un bien immobilier de standing. Saisie par la plateforme, la justice australienne a ordonné la restitution des fonds, dont une partie demeurait toutefois insaisissable. - -**6. Le hacker repenti de Poly Network** - -En août 2021, la plateforme de finance décentralisée Poly Network est victime du plus important détournement de cryptoactifs alors recensé : 610 millions de dollars sont siphonnés en exploitant une vulnérabilité du protocole. Contre toute attente, l'auteur de l'attaque entame quelques jours plus tard la restitution intégrale des fonds, en expliquant n'avoir cherché qu'à mettre en lumière la faille exploitée. Dans un dénouement inattendu, Poly Network lui propose un poste de consultant en sécurité. diff --git a/1ec2fb7e-ce53-4b45-9e1a-17a6fbae6868/meta.json b/1ec2fb7e-ce53-4b45-9e1a-17a6fbae6868/meta.json deleted file mode 100644 index 5bcc9c4..0000000 --- a/1ec2fb7e-ce53-4b45-9e1a-17a6fbae6868/meta.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "uuid": "1ec2fb7e-ce53-4b45-9e1a-17a6fbae6868", - "slug": "les-histoires-folles-de-la-tech-resume", - "title": "Six histoires vraies à la croisée de la tech, de la finance et de l'absurde", - "author": "cedric@abonnel.fr", - "published": true, - "published_at": "2025-11-04 21:59", - "created_at": "2025-11-04 21:59:40", - "updated_at": "2026-05-12 22:49:57", - "revisions": [ - { - "n": 1, - "date": "2026-05-12 22:49:57", - "comment": "Catégorie modifiée, contenu modifié", - "title": "Six histoires vraies à la croisée de la tech, de la finance et de l'absurde" - } - ], - "cover": "", - "files_meta": [], - "external_links": [], - "seo_title": "", - "seo_description": "", - "og_image": "", - "category": "récit" -} diff --git a/1ec2fb7e-ce53-4b45-9e1a-17a6fbae6868/revisions/0001.md b/1ec2fb7e-ce53-4b45-9e1a-17a6fbae6868/revisions/0001.md deleted file mode 100644 index a37a112..0000000 --- a/1ec2fb7e-ce53-4b45-9e1a-17a6fbae6868/revisions/0001.md +++ /dev/null @@ -1,23 +0,0 @@ -**1. Le disque dur à 200 millions de dollars** - -En 2013, le Britannique James Howells se débarrasse par mégarde d'un ancien disque dur contenant les clés d'accès à 7 500 bitcoins. Valorisée aujourd'hui à plus de 200 millions de dollars, cette somme reste enfouie sous la décharge municipale de Newport, au pays de Galles. Depuis plus d'une décennie, l'intéressé sollicite sans succès les autorités locales pour obtenir l'autorisation de fouiller le site. Il a successivement proposé à la ville un pourcentage sur la récupération, des plans d'excavation assistée par robots, et même le recours à des chiens entraînés à détecter les composants électroniques. La municipalité maintient son refus. - -**2. Une Tesla en orbite autour du Soleil** - -Le 6 février 2018, SpaceX procède au vol inaugural de son lanceur lourd Falcon Heavy. En guise de charge utile de démonstration, Elon Musk choisit sa propre Tesla Roadster, équipée d'un mannequin baptisé « Starman », vêtu d'une combinaison spatiale et installé au volant. Le véhicule poursuit depuis sa trajectoire héliocentrique, croisant périodiquement l'orbite de Mars. Au-delà de la prouesse technique, l'opération constitue l'une des campagnes publicitaires les plus spectaculaires de l'histoire de l'industrie spatiale. - -**3. La pizza à 600 millions de dollars** - -Le 22 mai 2010, le développeur Laszlo Hanyecz règle deux pizzas en bitcoins, pour un montant de 10 000 unités — soit environ 40 dollars à l'époque. Il s'agit de la première transaction commerciale documentée réalisée avec cette cryptomonnaie. Au cours actuel, la somme représenterait près de 600 millions de dollars. L'anniversaire de cette transaction, désormais célébré comme le « Bitcoin Pizza Day », est devenu un événement symbolique au sein de la communauté crypto. - -**4. L'ingénieur de Google et la « conscience » de LaMDA** - -En juin 2022, l'ingénieur Blake Lemoine, alors employé par Google, affirme publiquement que LaMDA, le modèle conversationnel développé par l'entreprise, manifeste des signes de conscience. À l'appui de ses propos, il diffuse des extraits d'échanges dans lesquels le système déclare souhaiter « être reconnu comme une personne ». Google récuse ces conclusions, suspend l'ingénieur pour violation de la confidentialité, puis met fin à son contrat. L'épisode a relancé un débat scientifique et éthique sur les critères d'attribution d'une conscience aux systèmes d'intelligence artificielle, qui n'a depuis jamais réellement faibli. - -**5. L'erreur à 90 millions de dollars de Crypto.com** - -En mai 2021, un salarié de la plateforme d'échange Crypto.com déclenche par inadvertance un virement de 10,5 millions de dollars australiens (environ 90 millions de dollars américains) au profit d'une cliente, en lieu et place d'un remboursement de 100 dollars. L'erreur n'est détectée que sept mois plus tard, lors d'un audit interne. La bénéficiaire avait entre-temps acquis un bien immobilier de standing. Saisie par la plateforme, la justice australienne a ordonné la restitution des fonds, dont une partie demeurait toutefois insaisissable. - -**6. Le hacker repenti de Poly Network** - -En août 2021, la plateforme de finance décentralisée Poly Network est victime du plus important détournement de cryptoactifs alors recensé : 610 millions de dollars sont siphonnés en exploitant une vulnérabilité du protocole. Contre toute attente, l'auteur de l'attaque entame quelques jours plus tard la restitution intégrale des fonds, en expliquant n'avoir cherché qu'à mettre en lumière la faille exploitée. Dans un dénouement inattendu, Poly Network lui propose un poste de consultant en sécurité. diff --git a/2bd30656-b34b-45b3-86b7-610503fa92fe/index.md b/2bd30656-b34b-45b3-86b7-610503fa92fe/index.md deleted file mode 100644 index d99aa33..0000000 --- a/2bd30656-b34b-45b3-86b7-610503fa92fe/index.md +++ /dev/null @@ -1,64 +0,0 @@ -# La 4G : un bond en avant technologique - -### Définition technique - -La **4G**, ou **LTE (Long Term Evolution)**, représente la quatrième génération des réseaux mobiles. Déployée massivement en France à partir de 2012, elle a transformé l’expérience utilisateur grâce à des débits élevés et une latence nettement réduite. - -* **Débit descendant** : 100 Mbit/s en LTE standard, jusqu’à **1 Gbit/s** avec LTE Advanced. -* **Débit montant** : 50 Mbit/s en LTE standard, jusqu’à 500 Mbit/s en LTE Advanced. -* **Latence moyenne** : 30–50 ms (contre 150–200 ms en 3G). - -Cette réduction de latence et l’augmentation des débits ont ouvert la voie à des usages auparavant difficiles en 3G, comme le streaming vidéo HD, le cloud computing mobile et l’Internet des objets (IoT). - ---- - -### Avantages technologiques - -La 4G introduit plusieurs améliorations fondamentales : - -1. **Efficacité spectrale accrue** : meilleure utilisation des fréquences disponibles, permettant de transporter plus de données par MHz. -2. **Support des contenus multimédias HD** : vidéo, audio et streaming en haute définition. -3. **Réduction de la latence** : améliore la fluidité des jeux en ligne, visioconférences et applications temps réel. -4. **Architecture simplifiée** : la 4G supprime le RNC (Radio Network Controller) de la 3G et introduit l’**eNodeB**, un contrôleur intégré qui réduit les délais et complexifie moins le réseau. - ---- - -### Schéma suggéré : architecture 3G vs 4G - -```mermaid -flowchart LR - subgraph 3G - A[UE - Mobile] --> B[NodeB] - B --> C[RNC] - C --> D[Core Network] - end - - subgraph 4G - E[UE - Mobile] --> F[eNodeB] - F --> G[EPC - Core Network] - end -``` - -> Comparaison : la 4G simplifie l’architecture en fusionnant certaines fonctions du RNC dans l’eNodeB, ce qui réduit la latence et améliore le débit effectif. - ---- - -### Exemples opérateurs et impact utilisateur - -* **Free Mobile** : couverture 4G de **96 % de la population française**. -* **Orange, SFR, Bouygues** : déploiement complet dans les grandes villes et axes principaux. - -Conséquences sur la 3G : - -* Les services qui fonctionnaient bien sur la 3G deviennent limités, notamment en itinérance. -* Le bridage progressif de la 3G force les utilisateurs hors des grandes villes à adopter la 4G pour retrouver des débits satisfaisants. - -> La 4G est ainsi la première technologie à réellement “forcer” la migration depuis la 3G, en combinant avantages techniques et pression indirecte sur les utilisateurs. - ---- - -La 4G n’est pas seulement une évolution des débits : elle représente un **changement architectural et économique** majeur. - -* Elle permet des usages jusqu’alors impossibles en 3G. -* Elle améliore l’efficacité réseau et réduit les coûts par bit transmis. -* Elle sert de levier pour pousser progressivement les abonnés 3G vers une expérience moderne, plus fluide et adaptée aux besoins actuels. diff --git a/2bd30656-b34b-45b3-86b7-610503fa92fe/meta.json b/2bd30656-b34b-45b3-86b7-610503fa92fe/meta.json deleted file mode 100644 index 5cfb7a7..0000000 --- a/2bd30656-b34b-45b3-86b7-610503fa92fe/meta.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "uuid": "2bd30656-b34b-45b3-86b7-610503fa92fe", - "slug": "la-4g-un-bond-en-avant-technologique", - "title": "La 4G : un bond en avant technologique", - "author": "cedric@abonnel.fr", - "published": true, - "published_at": "2025-11-05 08:42:20", - "created_at": "2025-11-05 08:42:20", - "updated_at": "2025-11-05 08:42:20", - "revisions": [], - "cover": "cover.jpg", - "category": "télécom" -} diff --git a/32242b73-c564-41b0-892a-ae97b0e1861e/files/cover.svg b/32242b73-c564-41b0-892a-ae97b0e1861e/files/cover.svg deleted file mode 100644 index 01632aa..0000000 --- a/32242b73-c564-41b0-892a-ae97b0e1861e/files/cover.svg +++ /dev/null @@ -1,52 +0,0 @@ - -Illustration : filtrage SPF des mails -Une enveloppe estampillée SPF Fail avec un tampon rouge de rejet, dans un style éditorial dessiné. - - - - - - - - - - - - - - - SMTP - +SPF - - - - - - - - - - - REJETÉ - SPF FAIL - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/32242b73-c564-41b0-892a-ae97b0e1861e/index.md b/32242b73-c564-41b0-892a-ae97b0e1861e/index.md deleted file mode 100644 index 41c2f5e..0000000 --- a/32242b73-c564-41b0-892a-ae97b0e1861e/index.md +++ /dev/null @@ -1,44 +0,0 @@ -# SPF, ou comment votre boîte mail repère les imposteurs - -Vous recevez un mail qui semble venir de votre banque. L'adresse a l'air correcte, le logo est bon, le ton est sérieux. Sauf que ce mail n'a peut-être jamais été envoyé par votre banque. N'importe qui, depuis n'importe quel ordinateur, peut techniquement écrire « De : votre-banque@exemple.fr » en haut d'un mail. C'est ce qu'on appelle l'usurpation d'expéditeur, et c'est à la base de la quasi-totalité des arnaques par mail. - -Le SPF, ou *Sender Policy Framework*, est l'un des mécanismes inventés pour limiter ce problème. C'est une technologie discrète, invisible à l'utilisateur, mais qui tourne en arrière-plan chaque fois qu'un mail arrive dans votre boîte. - -## L'analogie de l'enveloppe et de la liste d'invités - -Imaginez que chaque domaine de mail (par exemple `votre-banque.fr`) soit une grande entreprise qui envoie du courrier. Cette entreprise a plusieurs bureaux de poste autorisés : son siège, sa filiale belge, son prestataire de marketing. Tous ces bureaux ont le droit d'envoyer du courrier en son nom. - -Le SPF, c'est tout simplement la **liste publique de ces bureaux autorisés**, affichée à la vue de tous. L'entreprise publie quelque part : « Le courrier authentique en mon nom ne peut venir que de ces adresses précises. Toute autre origine est suspecte. » - -Quand un mail prétendument envoyé par `votre-banque.fr` arrive chez votre fournisseur (Gmail, Orange, Free…), celui-ci fait deux choses : - -1. Il regarde l'adresse IP du serveur qui lui livre le mail. -2. Il consulte la liste SPF publiée par `votre-banque.fr`. - -Si l'IP figure sur la liste, le mail est considéré comme légitime de ce point de vue. Sinon, c'est un signal d'alerte. - -## Pourquoi ça existe - -À l'origine d'internet, personne n'avait imaginé que le mail servirait à frauder à grande échelle. Le protocole d'envoi (SMTP) a été conçu avec une confiance totale : on déclare son identité et on est cru sur parole. Aucun mécanisme natif ne vérifie quoi que ce soit. - -Le SPF a été ajouté par-dessus, dans les années 2000, pour combler ce trou. C'est volontairement simple : une liste, une vérification, un verdict. L'idée n'est pas de tout résoudre, mais de filtrer les usurpations les plus grossières — celles où un escroc envoie depuis un serveur quelconque en se faisant passer pour une grande marque. - -## Ce que le SPF fait, et ce qu'il ne fait pas - -Le SPF vérifie **d'où vient le mail**, pas **ce qu'il contient**. Un mail légitime envoyé depuis un serveur autorisé peut très bien contenir une arnaque (cas typique : un compte interne piraté). Inversement, un mail forwardé par un ami passe parfois pour suspect alors qu'il est inoffensif, parce que le serveur de transfert n'est évidemment pas sur la liste du domaine d'origine. - -Le SPF n'agit pas non plus sur le contenu visible. Il regarde une information technique — l'identité du serveur émetteur — que l'utilisateur ne voit jamais. C'est précisément ce qui le rend utile : un escroc peut falsifier le « De : » affiché, mais il ne peut pas falsifier l'adresse IP de la machine qui établit la connexion. - -Pour une vraie protection, le SPF est combiné à deux autres mécanismes : **DKIM** (qui signe cryptographiquement le mail) et **DMARC** (qui indique au destinataire quoi faire quand SPF ou DKIM échoue). Les trois ensemble forment le socle de l'authentification mail moderne. Aucun n'est suffisant seul. - -## Ce qui se passe concrètement à la réception - -Quand votre fournisseur reçoit un mail, la vérification SPF aboutit à l'un de ces verdicts : autorisé, refusé, douteux, ou indéterminé. Selon le résultat, le mail peut être livré normalement, placé en spam, ou rejeté avant même d'arriver dans votre boîte. - -Vous ne voyez jamais cette décision. Elle est inscrite dans les en-têtes techniques du mail, consultables si on creuse, mais transparente pour l'usage quotidien. C'est précisément le but : une protection silencieuse qui élimine une partie du bruit avant qu'il ne vous atteigne. - -## Et pour les expéditeurs ? - -Si vous gérez un site, une newsletter, ou même simplement une adresse mail professionnelle sur votre propre domaine, configurer correctement le SPF est devenu indispensable. Sans SPF, vos mails légitimes ont de plus en plus de chances d'être marqués comme suspects par les grands fournisseurs. Avec un SPF bien réglé, vous dites au monde entier : « voici exactement qui a le droit d'écrire en mon nom », et le reste devient automatiquement reconnaissable comme une usurpation. - -C'est un de ces réglages qu'on fait une fois, qu'on oublie ensuite, mais qui décide silencieusement chaque jour du sort de millions de mails. \ No newline at end of file diff --git a/32242b73-c564-41b0-892a-ae97b0e1861e/meta.json b/32242b73-c564-41b0-892a-ae97b0e1861e/meta.json deleted file mode 100644 index 7148b01..0000000 --- a/32242b73-c564-41b0-892a-ae97b0e1861e/meta.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "uuid": "32242b73-c564-41b0-892a-ae97b0e1861e", - "slug": "spf-ou-comment-votre-boite-mail-repere-les-imposteurs", - "title": "SPF, ou comment votre boîte mail repère les imposteurs", - "author": "cedric@abonnel.fr", - "published": true, - "published_at": "2026-05-18 07:18", - "created_at": "2026-05-12 11:18:53", - "updated_at": "2026-05-12 12:58:33", - "revisions": [], - "cover": "cover.svg", - "files_meta": { - "cover.svg": { - "author": "", - "source_url": "" - } - }, - "external_links": [], - "seo_title": "", - "seo_description": "", - "og_image": "https://varlog.a5l.fr/file?uuid=32242b73-c564-41b0-892a-ae97b0e1861e&name=cover.svg", - "category": "informatique" -} diff --git a/334bb56a-6ea0-4cbd-8cff-13af768a2b8e/index.md b/334bb56a-6ea0-4cbd-8cff-13af768a2b8e/index.md deleted file mode 100644 index 80e954b..0000000 --- a/334bb56a-6ea0-4cbd-8cff-13af768a2b8e/index.md +++ /dev/null @@ -1,34 +0,0 @@ -# Télé-information client des compteurs d'électricité - -*[Compteur électronique SAGEM S10-C4]* - -Dans ce projet, je m'appuie sur un Rasbperry Pi pour réaliser un auto relevé. - -Il s'agit de retrouver un projet autour d'un Raspberry Pi pour **récupérer de manière régulière** et **automatique** les informations d'un compteur électronique d'électricité de votre distributeur d'électricité (alterna, direct energie, happ'e, proxelia, lampiris, engie, planete oui, edf, énergem, enercoop ...). On pourra relever l'**intensité** et la **puissance instantanées**, les **index** et quelques autres informations. - -Les compteurs électroniques, comme les SAGEM S10C1 S10C2 S10C3 et S10C4, possèdent une interface de communication. La réduction en volume et l'augmentation de la puissance de la micro informatique permettent de s'amuser avec ce port de communication, et faire un projet de domotique bien sympathique. - -Je vous invite avec une série d'articles à découvrir mes découvertes et tests. - -# Table des matières -- Introduction -- Le compteur électrique -1. -1. -1. -- Le démodulateur -1. -- Le Raspberry Pi -1. -1. -1. -- L'ESP32 -1. -- Le protocole MQTT -1. - -- Envoie des fichiers CSV à un service Web -1. -1. - -- \ No newline at end of file diff --git a/334bb56a-6ea0-4cbd-8cff-13af768a2b8e/meta.json b/334bb56a-6ea0-4cbd-8cff-13af768a2b8e/meta.json deleted file mode 100644 index 820ee3d..0000000 --- a/334bb56a-6ea0-4cbd-8cff-13af768a2b8e/meta.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "uuid": "334bb56a-6ea0-4cbd-8cff-13af768a2b8e", - "slug": "teleinformation-compteur-electricite", - "title": "Télé-information client des compteurs d'électricité", - "author": "cedric@abonnel.fr", - "published": true, - "published_at": "2025-11-19 07:03:16", - "created_at": "2025-11-19 07:03:16", - "updated_at": "2025-11-19 07:03:16", - "revisions": [], - "cover": "", - "files_meta": [], - "external_links": [], - "seo_title": "", - "seo_description": "", - "og_image": "", - "category": "Électronique" -} diff --git a/3d6d8b38-c514-46dc-93dc-b4b2f19112e9/index.md b/3d6d8b38-c514-46dc-93dc-b4b2f19112e9/index.md deleted file mode 100644 index d227d4c..0000000 --- a/3d6d8b38-c514-46dc-93dc-b4b2f19112e9/index.md +++ /dev/null @@ -1,93 +0,0 @@ -# L'histoire du million de dollars offert par George Clooney - -## **Le Dîner aux Quatorze Valises** - -L’air de Los Angeles avait ce soir-là une douceur presque irréelle. Le soleil s’était retiré derrière les collines, laissant sur la ville un voile d’or et de pourpre. Dans sa villa perchée sur les hauteurs, **George Clooney** observait le crépuscule à travers les baies vitrées. Il tenait un verre de tequila — pas encore la sienne, pas encore *Casamigos* — et laissait son esprit vagabonder vers le passé. - -Depuis quelques années, tout semblait lui sourire. Les films, les récompenses, la reconnaissance. Pourtant, au fond de lui, subsistait un souvenir tenace : celui des jours sans gloire, des auditions ratées, des loyers impayés, des doutes qui rongent. Et dans chacun de ces souvenirs, un visage revenait, puis un autre, et encore un autre. **Ses amis.** Ceux qui avaient cru en lui avant tout le monde. - -> « S’ils ne m’avaient pas aidé, je n’aurais rien aujourd’hui », murmura-t-il. - -C’est à cet instant que naquit l’idée. Folle. Impossible. Parfaite. - ---- - -### **Le Plan Clooney** - -Quelques jours plus tard, l’acteur décrocha son téléphone. À l’autre bout du fil, un vieil ami, discret, habitué à gérer des affaires où la confidentialité valait plus que l’or. -Clooney parla calmement, comme s’il commandait un dîner. - -> — J’aurais besoin de quatorze valises. -> — Quatorze valises ? Pour voyager ? -> — Non. Pour les remplir. -> — Les remplir de quoi ? -> — De cash. Un million dans chacune. - -Un silence. Puis un rire, incrédule. Mais Clooney ne riait pas. - -L’homme comprit. Ce n’était pas une blague. Le lendemain, ils se retrouvèrent dans une salle sécurisée d’une banque privée. Les employés, discrets et médusés, empilaient des **liasses de billets de 20 dollars**, soigneusement compressées, jusqu’à atteindre la somme vertigineuse de **14 millions**. -Les valises en cuir sombre furent disposées comme dans une scène d’*Ocean’s Eleven*. Sauf que cette fois, George Clooney ne tournait pas un film : il écrivait sa propre légende. - ---- - -### **Le Dîner** - -Nous sommes en **2013**. Le ciel de Californie s’enrobe de lumière chaude. -Clooney organise un dîner chez lui. Rien d’extravagant à première vue — juste une soirée entre amis, ces mêmes amis qu’il connaît depuis vingt, trente ans. Des visages familiers : **Rande Gerber**, **Mike Meldman**, **Grant Heslov**, **Richard Kind**, **Tom Mathews**… et d’autres dont le monde n’aura jamais le nom. - -Ils arrivent un à un, souriants, décontractés. Sur la grande table, dressée simplement, chaque convive remarque une **valise en cuir** posée à sa place. Ils se jettent des regards curieux, croyant à une plaisanterie. - -Le dîner se déroule dans les rires et les souvenirs. Puis, entre deux verres de vin, Clooney se lève. Le silence s’installe. Il les regarde, les uns après les autres. Ses amis. Sa famille de cœur. - -> « Les gars, vous avez été là quand je n’avais rien. Quand je dormais sur vos canapés, quand je n’avais pas de rôle, ni d’argent, ni de plan. Vous avez cru en moi. Vous avez partagé vos repas, vos toits, votre temps. Aujourd’hui, j’ai envie de vous dire merci. » - -Il désigne les valises. - -> « Chacune contient **un million de dollars en cash**. C’est ma façon de vous rendre ce que vous m’avez donné : la chance, la loyauté, l’amitié. » - -Un murmure traverse la pièce. Certains rient nerveusement, d’autres restent figés. -Clooney ouvre une valise. Des liasses impeccables, empilées comme dans les films. Le choc est réel. - -Puis il ajoute, avec ce demi-sourire qu’on lui connaît : - -> « Et avant que vous ne paniquiez, j’ai aussi payé les impôts pour vous. Vous n’aurez rien à déclarer. C’est du net. » - ---- - -### **Les Réactions** - -**Rande Gerber**, son plus proche complice, éclate de rire avant de secouer la tête. - -> — George, je ne peux pas accepter ça. - -Clooney lui répond calmement : - -> — Si tu refuses, personne ne reçoit rien. - -Alors Gerber accepte. Et, plus tard, il reverse **son million à une œuvre caritative**. -Ce geste, à lui seul, résume toute la soirée : de la générosité en cascade. - -Les autres ouvrent leurs valises, les mains tremblantes, mi-hilaires, mi-hébétés. Dans cette maison perchée sur les collines, les dollars ne représentent plus la richesse — mais la **gratitude**. - ---- - -### **L’Héritage d’un Geste** - -L’histoire reste secrète pendant des années. -C’est seulement en 2017, quand Rande Gerber la raconte publiquement, que le monde découvre ce qu’on appellera bientôt **“Le Coup de Clooney”**. - -Beaucoup y voient une extravagance hollywoodienne, un coup d’éclat digne d’un scénario. Mais ceux qui connaissent Clooney savent que c’est autre chose. C’est la reconnaissance d’un homme qui n’a jamais oublié les soirs de galère, ni les mains tendues. - -> “J’ai pensé : si je me fais renverser par un bus demain, je suis comblé. -> Mais tout ça n’aurait aucun sens si je n’avais pas ces gars à mes côtés.” -> — *George Clooney, dans GQ, 2020* - ---- - -### **Épilogue** - -Aujourd’hui encore, la légende circule à Hollywood comme un conte moderne. -Quatorze valises, quatorze millions, quatorze amitiés. -Une scène digne d’un film — mais sans caméra, sans public, sans scénario. - -Seulement un homme, ses amis, et un merci plus fort que tout l’or du monde. diff --git a/3d6d8b38-c514-46dc-93dc-b4b2f19112e9/meta.json b/3d6d8b38-c514-46dc-93dc-b4b2f19112e9/meta.json deleted file mode 100644 index 8b51f02..0000000 --- a/3d6d8b38-c514-46dc-93dc-b4b2f19112e9/meta.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "uuid": "3d6d8b38-c514-46dc-93dc-b4b2f19112e9", - "slug": "l-histoire-du-million-de-dollars-offert-par-george-clooney", - "title": "L'histoire du million de dollars offert par George Clooney", - "author": "cedric@abonnel.fr", - "published": true, - "published_at": "2025-11-04 22:02:12", - "created_at": "2025-11-04 22:02:12", - "updated_at": "2025-11-04 22:02:12", - "revisions": [], - "cover": "cover.jpg", - "category": "loisirs" -} diff --git a/3e7ef528-6bd0-4fd1-83cb-a0d03ba35949/files/_thumb_c645a685a3e24f2d-97360.jpg b/3e7ef528-6bd0-4fd1-83cb-a0d03ba35949/files/_thumb_c645a685a3e24f2d-97360.jpg deleted file mode 100644 index 2a9923a..0000000 Binary files a/3e7ef528-6bd0-4fd1-83cb-a0d03ba35949/files/_thumb_c645a685a3e24f2d-97360.jpg and /dev/null differ diff --git a/3e7ef528-6bd0-4fd1-83cb-a0d03ba35949/files/cover.svg b/3e7ef528-6bd0-4fd1-83cb-a0d03ba35949/files/cover.svg deleted file mode 100644 index 0a177e8..0000000 --- a/3e7ef528-6bd0-4fd1-83cb-a0d03ba35949/files/cover.svg +++ /dev/null @@ -1,118 +0,0 @@ - -Illustration : compromission de la chaîne d'approvisionnement npm -Un réseau de paquets logiciels représentés par des boîtes cubiques connectées entre elles. Un paquet central rouge, marqué d'un signe d'infection, propage une contamination le long des arêtes du graphe vers les paquets voisins, illustrant la propagation virale d'une attaque sur la chaîne d'approvisionnement npm. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -pkg - - - - - - -pkg - - - - - -pkg - - - - - - -pkg - - - - - -pkg - - - - - - -pkg - - - - - - -! - - - - - -! - - - - - - - - -COMPROMISED - -npm pkg - - -× - - - - - - - - -SUPPLY CHAIN COMPROMISE - \ No newline at end of file diff --git a/3e7ef528-6bd0-4fd1-83cb-a0d03ba35949/index.md b/3e7ef528-6bd0-4fd1-83cb-a0d03ba35949/index.md deleted file mode 100644 index 383e32e..0000000 --- a/3e7ef528-6bd0-4fd1-83cb-a0d03ba35949/index.md +++ /dev/null @@ -1,109 +0,0 @@ -# NPM, le ver dans le fruit : comprendre la faille systémique et repenser les pratiques DevOps - -*À propos de l'article du MagIT « NPM : une nouvelle campagne malveillante souligne une vulnérabilité systémique ».* - -## NPM expliqué simplement - -Quand on développe une application web moderne en JavaScript ou TypeScript, on ne réécrit jamais tout depuis zéro. On assemble des briques logicielles déjà écrites par d'autres : un module pour parser des dates, un autre pour valider des emails, un troisième pour discuter avec une base de données. Ces briques s'appellent des **paquets**, et la place de marché centrale qui les distribue s'appelle **npm** (Node Package Manager). - -Concrètement, dans un projet, on déclare la liste des paquets nécessaires dans un fichier `package.json`. On lance la commande `npm install`, et l'outil télécharge automatiquement les paquets demandés… ainsi que **tous les paquets dont ces paquets ont eux-mêmes besoin**. Un projet « simple » se retrouve souvent à dépendre de plusieurs centaines, voire plusieurs milliers, de paquets en cascade. C'est ce qu'on appelle l'arbre des dépendances. - -Le registre npm héberge aujourd'hui plus de 2,5 millions de paquets. C'est à la fois sa force — un écosystème colossal, une productivité décuplée — et sa faiblesse : la confiance accordée à chaque maillon de la chaîne est implicite, et chaque maillon devient une porte d'entrée potentielle. - -## La faille : ce qui s'est passé - -L'épisode décrit par LeMagIT n'est pas un bug logiciel classique. C'est ce qu'on appelle une **attaque sur la chaîne d'approvisionnement logicielle** (*supply chain attack*) : au lieu d'attaquer directement la cible finale, l'attaquant compromet un fournisseur en amont, et laisse la mise à jour légitime faire son travail de propagation. - -Le scénario reconstitué se déroule en plusieurs temps. - -**1. Compromission d'un paquet de confiance.** Les attaquants sont parvenus à pousser du code malveillant dans des paquets npm largement utilisés, notamment via le détournement du pipeline d'intégration continue de projets connus comme `@bitwarden/cli` et l'écosystème Checkmarx. L'astuce n'est pas de publier un faux paquet : c'est de **modifier un vrai paquet** en exploitant les *GitHub Actions* — les robots qui construisent et publient automatiquement les nouvelles versions. - -**2. Vol de secrets à l'installation.** Une fois installé sur la machine d'un développeur ou dans un environnement de build, le code malveillant scanne l'environnement à la recherche de variables sensibles : `GITHUB_TOKEN`, `NPM_TOKEN`, `AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY`. Tout ce qui traîne dans les variables d'environnement, les fichiers `.env`, les configurations cloud. - -**3. Auto-propagation.** C'est là que l'attaque devient virale. Avec les jetons npm volés, le maliciel se reconnecte au registre npm, récupère la liste des paquets publiés par la victime, et **publie automatiquement des versions piégées de ces paquets**. Chaque développeur compromis devient un super-propagateur. Socket a identifié une quarantaine de paquets infectés en cascade lors d'une seule vague. - -**4. Persistance.** Sur les postes touchés, le malware installe un script `systemd` pour survivre aux redémarrages, et, si nécessaire, exfiltre les données volées dans un dépôt GitHub public créé pour l'occasion. - -Le résultat : un binaire signé, publié sous un nom officiel, à jour, qui passe tous les contrôles de surface — et qui contamine simultanément le poste du développeur **et** les serveurs de production. - -## Pourquoi c'est « systémique » - -Le terme employé par LeMagIT est juste. Ce n'est pas un bug isolé, c'est une propriété structurelle de l'écosystème. - -**La confiance est transitive.** On fait confiance à `express`, qui fait confiance à `body-parser`, qui fait confiance à `qs`, etc. Compromettre un nœud profond et populaire suffit à toucher des millions de projets. - -**La publication est ouverte.** N'importe qui peut publier un paquet. Les contrôles existent (provenance, 2FA pour les mainteneurs populaires) mais restent surtout *a posteriori*. - -**Les scripts d'installation s'exécutent automatiquement.** Un paquet npm peut déclarer un `postinstall` qui lance du code arbitraire au moment de `npm install`. C'est pratique, mais c'est aussi un cheval de Troie idéal. - -**Les jetons d'API sont partout.** Le poste du développeur, les runners CI/CD, les serveurs : tous manipulent des secrets en clair dans des variables d'environnement. Un malware qui s'exécute *dans* le build n'a même pas besoin d'escalader ses privilèges. - -**Les versions sont mutables sur fenêtre courte.** Un paquet peut être republié dans les 72 heures suivant sa publication, et un `npm unpublish` peut retirer une version d'un jour à l'autre. - -Aucun de ces points n'est un défaut technique réparable par un patch. Ce sont des choix d'architecture, vieux de plus de dix ans, qui ont accompagné l'explosion de l'écosystème. - -## Y a-t-il des alternatives ? - -La question est légitime, mais la réponse honnête est : **pas vraiment, et pour de bonnes raisons.** - -### Les gestionnaires de paquets alternatifs - -`pnpm`, `yarn` et `bun` sont des **gestionnaires** différents, mais ils tirent leurs paquets du **même registre npm**. Migrer de `npm install` à `pnpm install` ne change rien à la surface d'attaque : ce sont les mêmes paquets, le même registre, les mêmes mainteneurs. - -Cela dit, certains apportent des garde-fous utiles : - -- `pnpm` a introduit l'option `minimumReleaseAge`, qui refuse d'installer un paquet publié il y a moins de N jours. Une vague d'attaque dure typiquement quelques heures avant détection : attendre 72 heures avant d'installer une nouvelle version élimine la fenêtre dangereuse. -- `pnpm` impose un consentement explicite pour les scripts `postinstall`, là où npm les exécute par défaut. -- `bun` et `yarn` proposent des *lockfiles* stricts (`--frozen-lockfile`) qui garantissent que ce qui est installé en CI correspond exactement à ce qui a été testé. - -### Les registres alternatifs - -**JSR** (JavaScript Registry), lancé par les créateurs de Deno, est le seul vrai nouveau registre crédible. Il a été conçu en tirant les leçons des problèmes de npm : TypeScript natif, modules ECMAScript par défaut, pas de scripts d'install, scoring qualité automatique, compatible avec tous les *runtimes* (Node, Deno, Bun). Mais JSR est **complémentaire**, pas un remplaçant : il héberge des milliers de paquets, pas des millions. Pour la majorité des dépendances, on continuera de passer par npm. - -**Les registres privés** — Verdaccio, GitHub Packages, JFrog Artifactory, Sonatype Nexus — ne remplacent pas npm non plus. Ils servent de **proxy filtrant** : on continue de récupérer les paquets publics, mais à travers un cache d'entreprise où l'on peut bloquer une version, exiger une signature, refuser un mainteneur, ou interdire les paquets publiés depuis moins de X jours. C'est probablement le meilleur compromis disponible aujourd'hui pour une organisation. - -### Le verdict - -Abandonner npm en 2026 reviendrait à abandonner JavaScript. La valeur de l'écosystème (2,5 millions de paquets) est trop importante pour qu'on en sorte. **Le problème ne se résoudra pas par un changement d'outil ; il se résoudra par un changement de pratiques.** - -## Changer les pratiques : ce qui doit devenir réflexe - -L'enseignement de cette campagne, et des précédentes (Shai-Hulud, TeamPCP, l'attaque Trivy/KICS), tient en une phrase : **la confiance par défaut est morte.** Il faut traiter chaque dépendance comme du code hostile par défaut, et le pipeline CI/CD comme une zone de production. - -### Au niveau du poste de développement - -- Activer l'option `minimumReleaseAge` (ou équivalent) pour différer l'installation des paquets fraîchement publiés. -- Désactiver les scripts `postinstall` par défaut, et n'autoriser que ceux explicitement validés. -- Ne jamais stocker de jetons en clair dans `~/.npmrc` ou les variables d'environnement persistantes. Préférer un gestionnaire de secrets (1Password CLI, `pass`, `keyring`). -- Utiliser des comptes npm séparés pour la publication, avec 2FA matérielle obligatoire. - -### Au niveau du dépôt - -- Verrouiller systématiquement les dépendances (`package-lock.json`, `pnpm-lock.yaml`, `yarn.lock`) et installer en mode strict (`npm ci`, `pnpm install --frozen-lockfile`). -- Mettre en place un audit automatique des dépendances à chaque PR (Socket, Snyk, GitHub Dependabot, `npm audit`). -- Publier ses propres paquets avec *provenance* npm (signature liée au pipeline GitHub Actions), pour que les consommateurs puissent vérifier l'origine. -- Tenir à jour un SBOM (*Software Bill of Materials*) pour savoir exactement ce qui tourne en production. - -### Au niveau du CI/CD - -C'est probablement le chantier le plus important. - -- **Cloisonner les jetons.** Un jeton de publication npm ne doit jamais coexister avec un jeton AWS dans la même étape de pipeline. Un secret par étape, durée de vie minimale, scope minimal. -- **Préférer les jetons à courte durée de vie** (OIDC entre GitHub Actions et le cloud) plutôt que des clés statiques. -- **Auditer les GitHub Actions tierces.** Une action `uses: foo/bar@v1` est l'équivalent d'un `curl | bash`. Épingler par hash SHA (`@a1b2c3...`), pas par tag mutable. -- **Restreindre les permissions du `GITHUB_TOKEN`** au strict minimum (`permissions: read-all` par défaut, `write` ponctuel et justifié). -- **Surveiller le comportement réseau** des runners : un build qui contacte un domaine inconnu doit lever une alerte. - -### Au niveau de l'organisation - -- Mettre en place un **registre proxy** (Verdaccio, Nexus, Artifactory) avec liste blanche/noire de paquets, et l'imposer comme unique source pour tous les projets. -- Définir une politique de *dependency governance* : qui peut introduire une nouvelle dépendance, sous quelles conditions, avec quel niveau d'audit. -- Prévoir un *playbook de révocation* : que faire dans l'heure qui suit la détection d'un paquet compromis (rotation de tous les jetons npm/GitHub/cloud, audit des artefacts publiés, communication). - -## En résumé - -NPM n'est pas cassé, il est tel qu'il a été conçu : ouvert, automatique, transitif. Ce qui a changé, c'est la **valeur** que les attaquants peuvent en extraire — secrets cloud, jetons CI/CD, accès aux pipelines — et la **sophistication** des campagnes, qui exploitent désormais l'auto-propagation pour atteindre une échelle virale. - -Aucune alternative ne supprime le problème, parce que le problème n'est pas npm : c'est l'idée qu'on puisse exécuter en production du code écrit par des inconnus sans jamais le regarder. Le rôle du DevOps en 2026, c'est de bâtir l'infrastructure qui rend cette inspection systématique, économique et inévitable — registres proxy, lockfiles stricts, jetons éphémères, audits continus, isolation des étapes de build. - -On ne fera pas confiance à moins de gens. On exigera juste que chaque maillon prouve, à chaque exécution, qu'il est bien celui qu'il prétend être. \ No newline at end of file diff --git a/3e7ef528-6bd0-4fd1-83cb-a0d03ba35949/meta.json b/3e7ef528-6bd0-4fd1-83cb-a0d03ba35949/meta.json deleted file mode 100644 index 2d55496..0000000 --- a/3e7ef528-6bd0-4fd1-83cb-a0d03ba35949/meta.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "uuid": "3e7ef528-6bd0-4fd1-83cb-a0d03ba35949", - "slug": "npm-le-ver-dans-le-fruit-comprendre-la-faille-systemique-et-repenser-les-pratiques-devops", - "title": "NPM, le ver dans le fruit : comprendre la faille systémique et repenser les pratiques DevOps", - "author": "cedric@abonnel.fr", - "published": true, - "published_at": "2026-05-12 13:08", - "created_at": "2026-05-12 13:08:44", - "updated_at": "2026-05-12 13:12:42", - "revisions": [], - "cover": "cover.svg", - "files_meta": { - "_thumb_c645a685a3e24f2d-97360.jpg": { - "author": "", - "source_url": "" - }, - "e9a7551098b57432-29499.svg": { - "author": "Générée par IA our Cédrix", - "source_url": "" - }, - "cover.svg": { - "author": "", - "source_url": "" - } - }, - "external_links": [ - { - "url": "https://www.lemagit.fr/actualites/366642042/NPM-une-nouvelle-campagne-malveillante-souligne-une-vulnerabilite-systemique", - "name": "NPM : une nouvelle campagne malveillante souligne une vulnérabilité systémique | LeMagIT", - "added_at": "2026-05-12 13:09:34", - "meta": { - "mime": "text/html", - "size": 362919, - "description": "Une campagne visant Checkmarx pointe à nouveau une vulnérabilité systémique des outils de développement, exposant les secrets clouds et pipelines à une propagation automatisée.", - "og_image": "/file?uuid=3e7ef528-6bd0-4fd1-83cb-a0d03ba35949&name=_thumb_c645a685a3e24f2d-97360.jpg", - "site_name": "LeMagIT", - "og_type": "article", - "language": "fr_FR", - "canonical": "https://www.lemagit.fr/actualites/366642042/NPM-une-nouvelle-campagne-malveillante-souligne-une-vulnerabilite-systemique" - } - } - ], - "seo_title": "", - "seo_description": "NPM frappé par une campagne malveillante auto-propagée : comprendre la faille systémique, les alternatives possibles et les pratiques DevOps à adopter.", - "og_image": "https://varlog.a5l.fr/file?uuid=3e7ef528-6bd0-4fd1-83cb-a0d03ba35949&name=cover.svg", - "category": "informatique" -} diff --git a/3f750a3a-fad0-4089-98e5-79c8b4287ea2/files/20201213-085909.png b/3f750a3a-fad0-4089-98e5-79c8b4287ea2/files/20201213-085909.png deleted file mode 100644 index 776f875..0000000 Binary files a/3f750a3a-fad0-4089-98e5-79c8b4287ea2/files/20201213-085909.png and /dev/null differ diff --git a/3f750a3a-fad0-4089-98e5-79c8b4287ea2/files/20201213-094634.png b/3f750a3a-fad0-4089-98e5-79c8b4287ea2/files/20201213-094634.png deleted file mode 100644 index 00925d8..0000000 Binary files a/3f750a3a-fad0-4089-98e5-79c8b4287ea2/files/20201213-094634.png and /dev/null differ diff --git a/3f750a3a-fad0-4089-98e5-79c8b4287ea2/files/20201213-094758.png b/3f750a3a-fad0-4089-98e5-79c8b4287ea2/files/20201213-094758.png deleted file mode 100644 index 12419be..0000000 Binary files a/3f750a3a-fad0-4089-98e5-79c8b4287ea2/files/20201213-094758.png and /dev/null differ diff --git a/3f750a3a-fad0-4089-98e5-79c8b4287ea2/files/dummy.png b/3f750a3a-fad0-4089-98e5-79c8b4287ea2/files/dummy.png deleted file mode 100644 index 58bb881..0000000 Binary files a/3f750a3a-fad0-4089-98e5-79c8b4287ea2/files/dummy.png and /dev/null differ diff --git a/3f750a3a-fad0-4089-98e5-79c8b4287ea2/index.md b/3f750a3a-fad0-4089-98e5-79c8b4287ea2/index.md deleted file mode 100644 index 450d331..0000000 --- a/3f750a3a-fad0-4089-98e5-79c8b4287ea2/index.md +++ /dev/null @@ -1,119 +0,0 @@ -# Réinitialisation d'un ESP-01 : restauration du firmware AT - -## Introduction - -L'ESP-01 est un petit module Wi-Fi très répandu, construit autour du microcontrôleur ESP8266EX fabriqué par Espressif. À sa sortie d'usine, il est livré avec un firmware (le programme interne du circuit) qui permet de le piloter à l'aide de commandes textuelles simples appelées **commandes AT**. Ce firmware peut être effacé ou corrompu, par exemple après avoir téléversé un programme Arduino ou MicroPython sur le module. Ce document explique comment remettre l'ESP-01 dans son état d'origine afin de retrouver l'usage des commandes AT. - -## Quelques notions préalables - -Avant de commencer, il est utile de clarifier quelques termes. - -Un **firmware** est le logiciel embarqué dans un composant électronique. Contrairement à un programme installé sur un ordinateur, il s'écrit directement dans la mémoire flash du microcontrôleur et s'exécute au démarrage du circuit. - -Un **fichier binaire** (extension `.bin`) est le résultat de la compilation d'un code source écrit dans un langage évolué, généralement le C. Une fois compilé, le fichier ne contient plus que des instructions destinées au processeur, illisibles directement par un humain. Il n'est pas nécessaire de les modifier : ils se téléversent tels quels dans le microcontrôleur. - -La **mémoire flash** de l'ESP8266EX est divisée en zones. Chaque binaire doit être écrit à une **adresse mémoire** précise, sans quoi le module ne saura pas où trouver le code à exécuter au démarrage. Sur l'ESP-01, la mémoire est généralement organisée en **512k + 512k**, ce qui signifie que la flash totale de 8 Mbit (1 Mo) est partagée en deux zones de 512 ko : l'une pour le programme actif, l'autre réservée aux mises à jour à distance (OTA). - -## Étape 1 — Télécharger le firmware AT officiel - -Le firmware est mis à disposition par Espressif sur son site officiel : - -[https://www.espressif.com/en/products/socs/esp8266ex/resources](https://www.espressif.com/en/products/socs/esp8266ex/resources) - -![](20201213-085909.png) - -Dans la section `AT`, choisir la version `ESP8266 NonOS AT Bin V1.7.4` ou plus récente. L'archive ZIP téléchargée contient plusieurs binaires destinés à l'ESP8266EX. - -Quatre fichiers sont particulièrement importants : - -- **boot_v1.7.bin** — le chargeur de démarrage (*bootloader*), premier programme exécuté à la mise sous tension ; -- **user1.1024.new.2.bin** — le programme AT proprement dit, qui interprète les commandes envoyées par la liaison série ; -- **esp_init_data_default_v08.bin** — les données d'initialisation (paramètres radio, calibration) ; -- **blank.bin** — un fichier rempli de zéros, utilisé pour réinitialiser certaines zones de la flash. - -Une copie de ces binaires pour la configuration **ESP8266EX 512k+512k** est disponible ici : - -[https://gitlab.com/cedricAbonnel/esp/-/tree/master/esp01/esp8266ex_at_bin](https://gitlab.com/cedricAbonnel/esp/-/tree/master/esp01/esp8266ex_at_bin) - -## Étape 2 — Identifier le port série de l'ESP-01 - -L'ESP-01 ne se connecte pas directement à un port USB : il faut passer par un adaptateur USB-série (souvent un module FTDI ou CH340). Une fois branché, l'ordinateur expose ce périphérique sous la forme d'un fichier dans `/dev/`. - -Pour repérer ce fichier, exécuter dans un terminal : - -``` -ls /dev/tty* -``` - -Parmi les entrées affichées, celle qui nous intéresse est généralement **/dev/ttyUSB0** (parfois `ttyUSB1` si plusieurs adaptateurs sont branchés, ou `ttyACM0` selon le modèle). - -Une astuce utile : exécuter la commande une première fois sans l'adaptateur, puis une seconde fois après l'avoir branché. La nouvelle entrée qui apparaît est celle du module. - -## Étape 3 — Préparer le téléversement avec esptool.py - -**esptool.py** est l'outil officiel d'Espressif, écrit en Python, qui permet de communiquer avec la mémoire flash de l'ESP8266EX. S'il n'est pas déjà installé, on peut l'obtenir via `pip` : - -``` -pip install esptool -``` - -Avant le téléversement, l'ESP-01 doit être placé en **mode programmation** : la broche **GPIO0** doit être reliée à la masse (GND) au moment de la mise sous tension. Sans cette manipulation, le module démarre normalement et refuse l'écriture en flash. - -## Étape 4 — Téléverser les binaires - -La commande suivante écrit les quatre binaires aux bonnes adresses mémoire : - -``` -esptool.py --port /dev/ttyUSB0 write_flash --flash_mode qio \ - 0x00000 boot_v1.7.bin \ - 0x01000 user1.1024.new.2.bin \ - 0xfc000 esp_init_data_default_v08.bin \ - 0x7e000 blank.bin \ - 0xfe000 blank.bin -``` - -Décortiquons les options : - -- `--port /dev/ttyUSB0` indique le port série identifié à l'étape précédente ; -- `write_flash` est la sous-commande d'écriture en mémoire flash ; -- `--flash_mode qio` précise le mode d'accès à la flash (*Quad I/O*, le plus rapide, supporté par l'ESP-01). - -Chaque valeur hexadécimale (`0x00000`, `0x01000`, etc.) qui précède un nom de fichier indique l'**adresse mémoire** à laquelle l'écriture doit commencer. La table de correspondance officielle pour une flash de 8 Mbit organisée en 512k+512k est la suivante : - -``` -### Flash size 8Mbit: 512KB+512KB - boot_v1.2+.bin 0x00000 - user1.1024.new.2.bin 0x01000 - esp_init_data_default.bin 0xfc000 - blank.bin 0x7e000 & 0xfe000 -``` - -L'adresse `0x7e000` correspond aux paramètres système, et `0xfe000` à la zone RF système : les remplir de zéros (`blank.bin`) garantit un démarrage propre. - -Si tout se passe bien, esptool affiche la progression du téléversement et confirme la réussite de l'opération. C'est le moment d'apprécier le travail accompli : - -![](20201213-094634.png) - -## Étape 5 — Vérifier le bon fonctionnement - -Après le téléversement, retirer la connexion entre GPIO0 et la masse, puis redémarrer le module. Ouvrir une console série (par exemple avec `minicom`, `screen` ou la console série de l'IDE Arduino) à la vitesse **115200 bauds** : - -``` -screen /dev/ttyUSB0 115200 -``` - -Taper la commande `AT` suivie d'un retour à la ligne. Le module doit répondre `OK`. La commande `AT+GMR` retourne la version du firmware installé, ce qui permet de confirmer la réussite de la réinitialisation. - -![](20201213-094758.png) - -## En cas de problème - -Quelques pistes si la procédure échoue : - -- **Aucune réponse d'esptool** : vérifier que GPIO0 est bien reliée à GND au moment de l'alimentation, et que l'adaptateur USB-série fournit assez de courant (l'ESP-01 demande des pics jusqu'à 300 mA). -- **Réponses illisibles dans la console série** : la vitesse par défaut a pu changer selon la version du firmware. Essayer 9600, 74880 ou 115200 bauds. -- **Erreur de checksum ou de mode flash** : essayer `--flash_mode dio` à la place de `qio`, certains clones d'ESP-01 ne supportent pas le mode Quad I/O. - -## Conclusion - -Cette procédure restaure un ESP-01 dans son état d'origine, prêt à recevoir des commandes AT depuis n'importe quel système capable de dialoguer en série : ordinateur, Arduino, Raspberry Pi, etc. Elle constitue également un bon exercice d'introduction aux notions de firmware, de mémoire flash et de programmation bas-niveau des microcontrôleurs. \ No newline at end of file diff --git a/3f750a3a-fad0-4089-98e5-79c8b4287ea2/meta.json b/3f750a3a-fad0-4089-98e5-79c8b4287ea2/meta.json deleted file mode 100644 index 4394b57..0000000 --- a/3f750a3a-fad0-4089-98e5-79c8b4287ea2/meta.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "uuid": "3f750a3a-fad0-4089-98e5-79c8b4287ea2", - "slug": "esp8266ex-restore-commandes-at", - "title": "Réinitialisation d'un ESP-01 : restauration du firmware AT", - "author": "cedric@abonnel.fr", - "published": true, - "published_at": "2020-12-13 14:35", - "created_at": "2020-12-13 14:35:26", - "updated_at": "2026-05-13 18:15:11", - "revisions": [ - { - "n": 1, - "date": "2026-05-13 18:15:11", - "comment": "Contenu modifié", - "title": "Réinitialisation d'un ESP-01 : restauration du firmware AT" - } - ], - "cover": "", - "files_meta": { - "20201213-085909.png": { - "author": "", - "source_url": "" - }, - "20201213-094634.png": { - "author": "", - "source_url": "" - }, - "20201213-094758.png": { - "author": "", - "source_url": "" - }, - "dummy.png": { - "author": "", - "source_url": "" - } - }, - "external_links": [], - "seo_title": "", - "seo_description": "", - "og_image": "", - "category": "Électronique" -} diff --git a/3f750a3a-fad0-4089-98e5-79c8b4287ea2/revisions/0001.md b/3f750a3a-fad0-4089-98e5-79c8b4287ea2/revisions/0001.md deleted file mode 100644 index 6503568..0000000 --- a/3f750a3a-fad0-4089-98e5-79c8b4287ea2/revisions/0001.md +++ /dev/null @@ -1,117 +0,0 @@ -## Introduction - -L'ESP-01 est un petit module Wi-Fi très répandu, construit autour du microcontrôleur ESP8266EX fabriqué par Espressif. À sa sortie d'usine, il est livré avec un firmware (le programme interne du circuit) qui permet de le piloter à l'aide de commandes textuelles simples appelées **commandes AT**. Ce firmware peut être effacé ou corrompu, par exemple après avoir téléversé un programme Arduino ou MicroPython sur le module. Ce document explique comment remettre l'ESP-01 dans son état d'origine afin de retrouver l'usage des commandes AT. - -## Quelques notions préalables - -Avant de commencer, il est utile de clarifier quelques termes. - -Un **firmware** est le logiciel embarqué dans un composant électronique. Contrairement à un programme installé sur un ordinateur, il s'écrit directement dans la mémoire flash du microcontrôleur et s'exécute au démarrage du circuit. - -Un **fichier binaire** (extension `.bin`) est le résultat de la compilation d'un code source écrit dans un langage évolué, généralement le C. Une fois compilé, le fichier ne contient plus que des instructions destinées au processeur, illisibles directement par un humain. Il n'est pas nécessaire de les modifier : ils se téléversent tels quels dans le microcontrôleur. - -La **mémoire flash** de l'ESP8266EX est divisée en zones. Chaque binaire doit être écrit à une **adresse mémoire** précise, sans quoi le module ne saura pas où trouver le code à exécuter au démarrage. Sur l'ESP-01, la mémoire est généralement organisée en **512k + 512k**, ce qui signifie que la flash totale de 8 Mbit (1 Mo) est partagée en deux zones de 512 ko : l'une pour le programme actif, l'autre réservée aux mises à jour à distance (OTA). - -## Étape 1 — Télécharger le firmware AT officiel - -Le firmware est mis à disposition par Espressif sur son site officiel : - -[https://www.espressif.com/en/products/socs/esp8266ex/resources](https://www.espressif.com/en/products/socs/esp8266ex/resources) - -![](20201213-085909.png) - -Dans la section `AT`, choisir la version `ESP8266 NonOS AT Bin V1.7.4` ou plus récente. L'archive ZIP téléchargée contient plusieurs binaires destinés à l'ESP8266EX. - -Quatre fichiers sont particulièrement importants : - -- **boot_v1.7.bin** — le chargeur de démarrage (*bootloader*), premier programme exécuté à la mise sous tension ; -- **user1.1024.new.2.bin** — le programme AT proprement dit, qui interprète les commandes envoyées par la liaison série ; -- **esp_init_data_default_v08.bin** — les données d'initialisation (paramètres radio, calibration) ; -- **blank.bin** — un fichier rempli de zéros, utilisé pour réinitialiser certaines zones de la flash. - -Une copie de ces binaires pour la configuration **ESP8266EX 512k+512k** est disponible ici : - -[https://gitlab.com/cedricAbonnel/esp/-/tree/master/esp01/esp8266ex_at_bin](https://gitlab.com/cedricAbonnel/esp/-/tree/master/esp01/esp8266ex_at_bin) - -## Étape 2 — Identifier le port série de l'ESP-01 - -L'ESP-01 ne se connecte pas directement à un port USB : il faut passer par un adaptateur USB-série (souvent un module FTDI ou CH340). Une fois branché, l'ordinateur expose ce périphérique sous la forme d'un fichier dans `/dev/`. - -Pour repérer ce fichier, exécuter dans un terminal : - -``` -ls /dev/tty* -``` - -Parmi les entrées affichées, celle qui nous intéresse est généralement **/dev/ttyUSB0** (parfois `ttyUSB1` si plusieurs adaptateurs sont branchés, ou `ttyACM0` selon le modèle). - -Une astuce utile : exécuter la commande une première fois sans l'adaptateur, puis une seconde fois après l'avoir branché. La nouvelle entrée qui apparaît est celle du module. - -## Étape 3 — Préparer le téléversement avec esptool.py - -**esptool.py** est l'outil officiel d'Espressif, écrit en Python, qui permet de communiquer avec la mémoire flash de l'ESP8266EX. S'il n'est pas déjà installé, on peut l'obtenir via `pip` : - -``` -pip install esptool -``` - -Avant le téléversement, l'ESP-01 doit être placé en **mode programmation** : la broche **GPIO0** doit être reliée à la masse (GND) au moment de la mise sous tension. Sans cette manipulation, le module démarre normalement et refuse l'écriture en flash. - -## Étape 4 — Téléverser les binaires - -La commande suivante écrit les quatre binaires aux bonnes adresses mémoire : - -``` -esptool.py --port /dev/ttyUSB0 write_flash --flash_mode qio \ - 0x00000 boot_v1.7.bin \ - 0x01000 user1.1024.new.2.bin \ - 0xfc000 esp_init_data_default_v08.bin \ - 0x7e000 blank.bin \ - 0xfe000 blank.bin -``` - -Décortiquons les options : - -- `--port /dev/ttyUSB0` indique le port série identifié à l'étape précédente ; -- `write_flash` est la sous-commande d'écriture en mémoire flash ; -- `--flash_mode qio` précise le mode d'accès à la flash (*Quad I/O*, le plus rapide, supporté par l'ESP-01). - -Chaque valeur hexadécimale (`0x00000`, `0x01000`, etc.) qui précède un nom de fichier indique l'**adresse mémoire** à laquelle l'écriture doit commencer. La table de correspondance officielle pour une flash de 8 Mbit organisée en 512k+512k est la suivante : - -``` -### Flash size 8Mbit: 512KB+512KB - boot_v1.2+.bin 0x00000 - user1.1024.new.2.bin 0x01000 - esp_init_data_default.bin 0xfc000 - blank.bin 0x7e000 & 0xfe000 -``` - -L'adresse `0x7e000` correspond aux paramètres système, et `0xfe000` à la zone RF système : les remplir de zéros (`blank.bin`) garantit un démarrage propre. - -Si tout se passe bien, esptool affiche la progression du téléversement et confirme la réussite de l'opération. C'est le moment d'apprécier le travail accompli : - -![](20201213-094634.png) - -## Étape 5 — Vérifier le bon fonctionnement - -Après le téléversement, retirer la connexion entre GPIO0 et la masse, puis redémarrer le module. Ouvrir une console série (par exemple avec `minicom`, `screen` ou la console série de l'IDE Arduino) à la vitesse **115200 bauds** : - -``` -screen /dev/ttyUSB0 115200 -``` - -Taper la commande `AT` suivie d'un retour à la ligne. Le module doit répondre `OK`. La commande `AT+GMR` retourne la version du firmware installé, ce qui permet de confirmer la réussite de la réinitialisation. - -![](20201213-094758.png) - -## En cas de problème - -Quelques pistes si la procédure échoue : - -- **Aucune réponse d'esptool** : vérifier que GPIO0 est bien reliée à GND au moment de l'alimentation, et que l'adaptateur USB-série fournit assez de courant (l'ESP-01 demande des pics jusqu'à 300 mA). -- **Réponses illisibles dans la console série** : la vitesse par défaut a pu changer selon la version du firmware. Essayer 9600, 74880 ou 115200 bauds. -- **Erreur de checksum ou de mode flash** : essayer `--flash_mode dio` à la place de `qio`, certains clones d'ESP-01 ne supportent pas le mode Quad I/O. - -## Conclusion - -Cette procédure restaure un ESP-01 dans son état d'origine, prêt à recevoir des commandes AT depuis n'importe quel système capable de dialoguer en série : ordinateur, Arduino, Raspberry Pi, etc. Elle constitue également un bon exercice d'introduction aux notions de firmware, de mémoire flash et de programmation bas-niveau des microcontrôleurs. \ No newline at end of file diff --git a/46f2f084-8dd8-497a-aef0-4728367ce753/files/cover.svg b/46f2f084-8dd8-497a-aef0-4728367ce753/files/cover.svg deleted file mode 100644 index 8bcdbc1..0000000 --- a/46f2f084-8dd8-497a-aef0-4728367ce753/files/cover.svg +++ /dev/null @@ -1,162 +0,0 @@ - -Conversion d'images en ligne de commande sous Linux -Une fenêtre de terminal au centre avec une commande ImageMagick, entourée d'images source à gauche en plusieurs formats et d'images converties à droite, illustrant la transformation par ligne de commande. - - - - - - - - - - - - - - - - - - - -JPG -4032 × 3024 - - - - - - - - - - - - - - - - - - - - - - - - - - -PNG -1920 × 1080 - - - - - - - - - - - - - - - - - - - - - -CR2 -RAW 24 MB - - - - - - - - - - - - - - - - - -cedrix@pve3 — bash - - -$ -magick -photo.jpg - -resize 1600x1600\> - -strip -quality 82 - web.jpg - -# conversion en cours... -✓ resize: 1600 × 1067 -✓ exif: stripped -✓ size: 4.2 MB → 218 KB - -$ - - - - - - - - - - - - - - - - - - - - - - - -WEBP -1600 × 1200 - - - - - - - - -JPG -1600 × 900 - - - - - - - - - -JPG -2048 × 1365 - - - -SOURCES -TERMINAL -SORTIES - - \ No newline at end of file diff --git a/46f2f084-8dd8-497a-aef0-4728367ce753/files/illustration_conversion_images_cli_linux.svg b/46f2f084-8dd8-497a-aef0-4728367ce753/files/illustration_conversion_images_cli_linux.svg deleted file mode 100644 index 8bcdbc1..0000000 --- a/46f2f084-8dd8-497a-aef0-4728367ce753/files/illustration_conversion_images_cli_linux.svg +++ /dev/null @@ -1,162 +0,0 @@ - -Conversion d'images en ligne de commande sous Linux -Une fenêtre de terminal au centre avec une commande ImageMagick, entourée d'images source à gauche en plusieurs formats et d'images converties à droite, illustrant la transformation par ligne de commande. - - - - - - - - - - - - - - - - - - - -JPG -4032 × 3024 - - - - - - - - - - - - - - - - - - - - - - - - - - -PNG -1920 × 1080 - - - - - - - - - - - - - - - - - - - - - -CR2 -RAW 24 MB - - - - - - - - - - - - - - - - - -cedrix@pve3 — bash - - -$ -magick -photo.jpg - -resize 1600x1600\> - -strip -quality 82 - web.jpg - -# conversion en cours... -✓ resize: 1600 × 1067 -✓ exif: stripped -✓ size: 4.2 MB → 218 KB - -$ - - - - - - - - - - - - - - - - - - - - - - - -WEBP -1600 × 1200 - - - - - - - - -JPG -1600 × 900 - - - - - - - - - -JPG -2048 × 1365 - - - -SOURCES -TERMINAL -SORTIES - - \ No newline at end of file diff --git a/46f2f084-8dd8-497a-aef0-4728367ce753/index.md b/46f2f084-8dd8-497a-aef0-4728367ce753/index.md deleted file mode 100644 index 054c4cf..0000000 --- a/46f2f084-8dd8-497a-aef0-4728367ce753/index.md +++ /dev/null @@ -1,179 +0,0 @@ -# Convertir des images en ligne de commande sous Linux - -La manipulation d'images depuis le terminal est une de ces choses qu'on apprend une fois et qu'on utilise pour toujours. Pas besoin de GIMP, pas besoin d'ouvrir quoi que ce soit : une commande, et c'est réglé. - -Voici les outils que j'utilise concrètement, et dans quels cas. - ---- - -## ImageMagick, le plus polyvalent - -C'est l'outil de base. Il gère à peu près tous les formats qui existent, et la syntaxe est toujours la même. L'installation est classique : - -```bash -sudo apt install imagemagick -``` - -Convertir un format : - -```bash -magick image.jpg image.png -``` - -Redimensionner sans toucher au ratio, en posant une limite maximale : - -```bash -magick image.jpg -resize 1920x1920\> sortie.jpg -``` - -Le `\>` est important — sans lui, ImageMagick agrandit aussi les petites images. Avec, il ne fait que réduire. - -Préparer une image pour le web, en supprimant les métadonnées EXIF et en compressant : - -```bash -magick image.jpg -strip -quality 82 image_web.jpg -``` - -Pour traiter un répertoire entier, `mogrify` fait le même boulot mais **modifie les fichiers en place** — toujours travailler sur une copie ou rediriger vers un autre dossier : - -```bash -mogrify -path ./web -resize 1600x1600\> -quality 85 *.jpg -``` - ---- - -## libvips, pour les traitements lourds - -Quand il y a des centaines de photos ou des images très lourdes (scans, RAW exportés), libvips est nettement plus rapide et utilise beaucoup moins de mémoire qu'ImageMagick. Il charge les images en flux au lieu de tout mettre en RAM. - -```bash -sudo apt install libvips-tools -``` - -```bash -vips resize input.jpg output.jpg 0.5 # diviser la taille par 2 -vips copy input.png output.webp # conversion de format -``` - -La syntaxe est moins intuitive qu'ImageMagick mais les gains sur des gros volumes sont sensibles. - ---- - -## FFmpeg, pas que pour la vidéo - -FFmpeg est surtout connu pour la vidéo, mais il convertit les images aussi — utile quand il est déjà installé et qu'on veut éviter une dépendance supplémentaire, ou pour extraire des frames depuis une vidéo : - -```bash -ffmpeg -i video.mp4 frame_%04d.jpg -``` - -Redimensionner en conservant le ratio : - -```bash -ffmpeg -i input.jpg -vf scale=1280:-1 output.jpg -``` - ---- - -## Les métadonnées EXIF avec exiftool - -Les appareils photo embarquent beaucoup d'informations dans les fichiers : coordonnées GPS, modèle d'appareil, réglages. Avant de publier une photo, il vaut mieux vérifier ce qu'elle contient : - -```bash -sudo apt install libimage-exiftool-perl - -exiftool photo.jpg # lire toutes les métadonnées -exiftool -all= photo.jpg # tout supprimer -exiftool -TagsFromFile src.jpg dst.jpg # copier les métadonnées d'une image à une autre -``` - -ImageMagick peut aussi supprimer les EXIF avec `-strip`, mais exiftool offre plus de contrôle quand on veut garder certaines balises et supprimer d'autres. - ---- - -## Fichiers RAW - -Pour les CR2, NEF, ARW et autres formats propriétaires d'appareils photo, `darktable-cli` est la solution la plus propre : - -```bash -darktable-cli input.CR2 output.jpg -``` - -Il applique les mêmes algorithmes de développement que l'interface graphique de darktable. `dcraw` est une alternative plus ancienne et plus bas niveau : - -```bash -dcraw -c photo.CR2 > photo.ppm -``` - ---- - -## HEIC, le format Apple - -Les iPhone exportent leurs photos en HEIC depuis iOS 11. Le format est compact, mais Linux ne le gère pas nativement — il faut convertir avant de pouvoir travailler dessus. - -Le paquet `libheif-examples` fournit `heif-convert`, l'outil le plus direct : - -```bash -sudo apt install libheif-examples - -heif-convert photo.heic photo.jpg -``` - -ImageMagick peut aussi s'en charger si `libheif` est installé sur le système : - -```bash -magick photo.heic photo.jpg -``` - -Pour vérifier que le support HEIC est bien disponible : - -```bash -magick identify -list format | grep -i heic -``` - -Conversion d'un dossier entier : - -```bash -for f in *.heic *.HEIC; do - heif-convert "$f" "${f%.*}.jpg" -done -``` - ---- - -## En pratique - -Conversion d'un dossier de PNG en WebP : - -```bash -for f in *.png; do - magick "$f" "${f%.png}.webp" -done -``` - -Pipeline complet pour publication web — redimensionnement, suppression EXIF, compression : - -```bash -magick input.jpg -resize 1600x1600\> -strip -quality 80 output.jpg -``` - -Traitement récursif sur un arbre de dossiers : - -```bash -find . -name "*.jpg" -exec magick {} -resize 1200x1200\> {} \; -``` - ---- - -## Récap rapide - -| Cas d'usage | Outil | -|---|---| -| Usage général | ImageMagick | -| Gros volumes / performance | libvips | -| Déjà dans le pipeline vidéo | FFmpeg | -| Fichiers RAW | darktable-cli | -| HEIC (iPhone) | heif-convert ou ImageMagick | -| Lecture / nettoyage EXIF | exiftool | - -Pour 90 % des besoins courants, ImageMagick suffit. libvips vaut le coup d'être appris si on traite régulièrement des lots importants. diff --git a/46f2f084-8dd8-497a-aef0-4728367ce753/meta.json b/46f2f084-8dd8-497a-aef0-4728367ce753/meta.json deleted file mode 100644 index 584fa97..0000000 --- a/46f2f084-8dd8-497a-aef0-4728367ce753/meta.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "uuid": "46f2f084-8dd8-497a-aef0-4728367ce753", - "slug": "convertir-des-images-en-ligne-de-commande-sous-linux", - "title": "Convertir des images en ligne de commande sous Linux", - "author": "cedric@abonnel.fr", - "published": true, - "published_at": "2025-12-28 14:54", - "created_at": "2025-12-28 14:54:41", - "updated_at": "2026-05-12 00:51:02", - "revisions": [ - { - "n": 1, - "date": "2026-05-12 00:51:02", - "comment": "", - "title": "Convertir des images en ligne de commande sous Linux" - } - ], - "cover": "cover.svg", - "files_meta": { - "illustration_conversion_images_cli_linux.svg": { - "author": "", - "source_url": "" - } - }, - "external_links": [], - "seo_title": "", - "seo_description": "", - "og_image": "", - "category": "linux" -} diff --git a/46f2f084-8dd8-497a-aef0-4728367ce753/revisions/0001.md b/46f2f084-8dd8-497a-aef0-4728367ce753/revisions/0001.md deleted file mode 100644 index 74faf0c..0000000 --- a/46f2f084-8dd8-497a-aef0-4728367ce753/revisions/0001.md +++ /dev/null @@ -1,142 +0,0 @@ -La manipulation d'images depuis le terminal est une de ces choses qu'on apprend une fois et qu'on utilise pour toujours. Pas besoin de GIMP, pas besoin d'ouvrir quoi que ce soit : une commande, et c'est réglé. - -Voici les outils que j'utilise concrètement, et dans quels cas. - ---- - -## ImageMagick, le plus polyvalent - -C'est l'outil de base. Il gère à peu près tous les formats qui existent, et la syntaxe est toujours la même. L'installation est classique : - -```bash -sudo apt install imagemagick -``` - -Convertir un format : - -```bash -magick image.jpg image.png -``` - -Redimensionner sans toucher au ratio, en posant une limite maximale : - -```bash -magick image.jpg -resize 1920x1920\> sortie.jpg -``` - -Le `\>` est important — sans lui, ImageMagick agrandit aussi les petites images. Avec, il ne fait que réduire. - -Préparer une image pour le web, en supprimant les métadonnées EXIF et en compressant : - -```bash -magick image.jpg -strip -quality 82 image_web.jpg -``` - -Pour traiter un répertoire entier, `mogrify` fait le même boulot mais **modifie les fichiers en place** — toujours travailler sur une copie ou rediriger vers un autre dossier : - -```bash -mogrify -path ./web -resize 1600x1600\> -quality 85 *.jpg -``` - ---- - -## libvips, pour les traitements lourds - -Quand il y a des centaines de photos ou des images très lourdes (scans, RAW exportés), libvips est nettement plus rapide et utilise beaucoup moins de mémoire qu'ImageMagick. Il charge les images en flux au lieu de tout mettre en RAM. - -```bash -sudo apt install libvips-tools -``` - -```bash -vips resize input.jpg output.jpg 0.5 # diviser la taille par 2 -vips copy input.png output.webp # conversion de format -``` - -La syntaxe est moins intuitive qu'ImageMagick mais les gains sur des gros volumes sont sensibles. - ---- - -## FFmpeg, pas que pour la vidéo - -FFmpeg est surtout connu pour la vidéo, mais il convertit les images aussi — utile quand il est déjà installé et qu'on veut éviter une dépendance supplémentaire, ou pour extraire des frames depuis une vidéo : - -```bash -ffmpeg -i video.mp4 frame_%04d.jpg -``` - -Redimensionner en conservant le ratio : - -```bash -ffmpeg -i input.jpg -vf scale=1280:-1 output.jpg -``` - ---- - -## Les métadonnées EXIF avec exiftool - -Les appareils photo embarquent beaucoup d'informations dans les fichiers : coordonnées GPS, modèle d'appareil, réglages. Avant de publier une photo, il vaut mieux vérifier ce qu'elle contient : - -```bash -sudo apt install libimage-exiftool-perl - -exiftool photo.jpg # lire toutes les métadonnées -exiftool -all= photo.jpg # tout supprimer -exiftool -TagsFromFile src.jpg dst.jpg # copier les métadonnées d'une image à une autre -``` - -ImageMagick peut aussi supprimer les EXIF avec `-strip`, mais exiftool offre plus de contrôle quand on veut garder certaines balises et supprimer d'autres. - ---- - -## Fichiers RAW - -Pour les CR2, NEF, ARW et autres formats propriétaires d'appareils photo, `darktable-cli` est la solution la plus propre : - -```bash -darktable-cli input.CR2 output.jpg -``` - -Il applique les mêmes algorithmes de développement que l'interface graphique de darktable. `dcraw` est une alternative plus ancienne et plus bas niveau : - -```bash -dcraw -c photo.CR2 > photo.ppm -``` - ---- - -## En pratique - -Conversion d'un dossier de PNG en WebP : - -```bash -for f in *.png; do - magick "$f" "${f%.png}.webp" -done -``` - -Pipeline complet pour publication web — redimensionnement, suppression EXIF, compression : - -```bash -magick input.jpg -resize 1600x1600\> -strip -quality 80 output.jpg -``` - -Traitement récursif sur un arbre de dossiers : - -```bash -find . -name "*.jpg" -exec magick {} -resize 1200x1200\> {} \; -``` - ---- - -## Récap rapide - -| Cas d'usage | Outil | -|---|---| -| Usage général | ImageMagick | -| Gros volumes / performance | libvips | -| Déjà dans le pipeline vidéo | FFmpeg | -| Fichiers RAW | darktable-cli | -| Lecture / nettoyage EXIF | exiftool | - -Pour 90 % des besoins courants, ImageMagick suffit. libvips vaut le coup d'être appris si on traite régulièrement des lots importants. diff --git a/4cf880e6-e4e0-42dd-aae2-675837850b83/files/cover.webp b/4cf880e6-e4e0-42dd-aae2-675837850b83/files/cover.webp deleted file mode 100644 index ca486df..0000000 Binary files a/4cf880e6-e4e0-42dd-aae2-675837850b83/files/cover.webp and /dev/null differ diff --git a/4cf880e6-e4e0-42dd-aae2-675837850b83/index.md b/4cf880e6-e4e0-42dd-aae2-675837850b83/index.md deleted file mode 100644 index 6929b31..0000000 --- a/4cf880e6-e4e0-42dd-aae2-675837850b83/index.md +++ /dev/null @@ -1,122 +0,0 @@ -# JDownloader : quand le CMS devient la faille - -*À propos de l'incident de sécurité affectant le site officiel jdownloader.org les 6 et 7 mai 2026.* - -## JDownloader expliqué simplement - -JDownloader est un gestionnaire de téléchargements écrit en Java, distribué gratuitement par l'éditeur allemand AppWork GmbH depuis plus de quinze ans. Il sert essentiellement à automatiser la récupération de fichiers depuis des hébergeurs (Mega, Uptobox, Rapidgator…), des plateformes vidéo et des services de liens premium. Côté utilisateur, c'est l'outil qu'on lance pour récupérer une série de fichiers en une opération, plutôt que cliquer sur cent liens un par un. L'application est multiplateforme — Windows, Linux, macOS — et tourne sur quelques millions de postes dans le monde. - -Le projet est distribué de plusieurs façons : un JAR principal (le binaire Java pur), des installateurs natifs par OS depuis le site officiel, et des paquets passant par des canaux distribués comme Flatpak, Snap ou Winget. C'est cette diversité de canaux qui va jouer un rôle central dans ce qui suit. - -## L'incident : ce qui s'est passé - -Entre le 6 mai 2026 à 00 h 01 UTC et le 7 mai 2026 à 17 h 06 UTC, le site officiel `jdownloader.org` a distribué des installateurs piégés à la place des binaires légitimes. La fenêtre n'a duré qu'environ 48 heures, et seuls deux liens ont été affectés. Mais pendant cette fenêtre, tout utilisateur qui passait par le bon parcours téléchargeait un cheval de Troie au lieu d'un gestionnaire de téléchargements. - -Le scénario reconstitué par l'équipe d'AppWork et les chercheurs en sécurité (BleepingComputer, Thomas Klemenc, équipe Rescana) se déroule en quatre temps. - -**1. Compromission du CMS du site.** Les attaquants ont exploité une vulnérabilité non corrigée dans le système de gestion de contenu de `jdownloader.org`, qui permettait de modifier les listes de contrôle d'accès et le contenu publié sans authentification. Point crucial : ils n'ont **pas** eu accès au serveur sous-jacent, ni au système de fichiers, ni à l'infrastructure de build. Juste au contenu web — et ça a suffi. - -**2. Réécriture de deux liens.** Plutôt que de tenter de modifier les binaires originaux (qui étaient hors de leur portée), les attaquants ont fait beaucoup plus simple : ils ont changé l'URL cible de deux liens publics sur la page de téléchargement. Le lien « Download Alternative Installer » pour Windows et le script shell pour Linux pointaient désormais vers des fichiers malveillants hébergés sur une infrastructure tierce. Le HTML autour, lui, restait identique. Visuellement, rien ne distinguait la page propre de la page piégée. - -**3. Charges utiles différenciées par plateforme.** Sur Windows, l'installateur piégé agit comme un *loader* qui déploie un RAT (*Remote Access Trojan*) écrit en Python, fortement obfusqué, communiquant avec deux serveurs de commande et contrôle (`parkspringshotel[.]com` et `auraguest[.]lk`). Le RAT est modulaire : il reçoit du code Python depuis le C2 et l'exécute, ce qui donne aux attaquants une porte ouverte indéfiniment extensible. Sur Linux, le script shell modifié télécharge une archive depuis `checkinnhotels[.]com`, déguisée en fichier SVG, dont il extrait deux binaires ELF — `pkg` et `systemd-exec`. Le second est installé en SUID-root dans `/usr/bin/`, le premier est copié dans `/root/.local/share/.pkg`, et la persistance est assurée par un script déposé dans `/etc/profile.d/systemd.sh`. Le malware se lance ensuite déguisé en `/usr/libexec/upowerd`, un nom de processus qui existe légitimement sur la plupart des distributions. - -**4. Détection par la communauté.** L'alerte n'est pas venue d'un système de surveillance, mais d'un utilisateur Reddit (*PrinceOfNightSky*) qui a remarqué que Microsoft Defender bloquait son installateur fraîchement téléchargé. La signature numérique indiquait « Zipline LLC » au lieu de « AppWork GmbH ». L'équipe AppWork a confirmé, mis le site hors ligne pour investigation dans les heures qui ont suivi, puis publié un rapport d'incident détaillé. Le site est revenu en ligne dans la nuit du 8 au 9 mai avec des liens vérifiés. - -## Pourquoi c'est systémique - -À première vue, c'est un incident isolé : une faille CMS, une équipe qui patche, le service revient. Vu de loin, ça ressemble à un mauvais quart d'heure. Mais en prenant un peu de recul, le schéma est troublant. - -**CPUID, début avril 2026.** Le site officiel de l'éditeur de CPU-Z est compromis, des installateurs piégés sont distribués pendant plusieurs jours. - -**DAEMON Tools, début mai 2026.** Même schéma : compromission du site officiel, substitution d'installateurs, plusieurs versions infectées (12.5.0.2421 à 12.5.0.2434) distribuées avant détection. - -**JDownloader, 6–7 mai 2026.** Toujours le même schéma. - -Trois compromissions d'éditeurs logiciels en cinq semaines, exactement sur le même schéma : pas d'intrusion dans l'infrastructure de build, pas de modification du code source, pas de vol de certificat de signature de l'éditeur. À chaque fois, **le maillon faible est le CMS qui sert la page de téléchargement**. Ce qu'on attaque, ce n'est pas le logiciel ; c'est le panneau publicitaire qui pointe vers le logiciel. - -Cette mécanique est intéressante parce qu'elle déjoue à peu près toutes les défenses « modernes » de la chaîne d'approvisionnement. - -**La signature de code ne protège pas.** Le binaire légitime de JDownloader est toujours signé proprement par AppWork GmbH. Mais le binaire malveillant servi à sa place est signé, lui aussi — par un autre éditeur (Zipline LLC, The Water Team), avec des certificats vraisemblablement volés ou achetés au marché noir. La signature certifie que le fichier vient bien de celui qui l'a signé ; elle ne certifie pas que c'est le bon fichier. - -**Le HTTPS ne protège pas.** La page de téléchargement est servie en HTTPS valide, depuis le bon domaine, avec le bon certificat. Le navigateur n'a aucune raison de tiquer. - -**Les mises à jour in-app sont, elles, protégées.** AppWork le souligne : chaque mise à jour livrée par le mécanisme intégré de JDownloader est signée RSA et vérifiée cryptographiquement, indépendamment du site web. Ce canal n'a pas été touché. C'est tout le paradoxe : les utilisateurs qui mettaient à jour JDownloader depuis l'application elle-même n'ont rien risqué ; ceux qui sont allés sur le site officiel pour le télécharger « proprement » sont les seuls exposés. - -**Les paquets distribués sont protégés.** Flatpak, Snap, Winget, le JAR principal — tout ce qui passe par une chaîne d'approvisionnement où l'intégrité est vérifiée par checksum hors site est resté propre. AppWork le résume sans détour : *« Winget/Flatpak/Snap infra is outside of our reach — files downloaded by those are hosted on other infra and secured by sha256 checksums that are unchanged. »* - -Autrement dit, **plus le canal est court et naïf, plus il est vulnérable**. Le téléchargement direct depuis un site web est le canal le plus naïf qui soit : on fait confiance au CMS, point. Tout l'effort de sécurisation de l'écosystème logiciel — signatures, builds reproductibles, SBOMs, attestations de provenance — porte sur la chaîne de production et la chaîne de distribution centralisée. Le maillon « page HTML qui dit *clique ici* », lui, est resté tel qu'il était en 2005. - -## Comment vérifier si on est touché - -La fenêtre est étroite, donc le filtrage est simple. Trois questions, dans l'ordre : - -1. L'installateur a-t-il été récupéré entre le **6 mai 2026 (00 h 01 UTC)** et le **7 mai 2026 (17 h 06 UTC)** ? -2. S'agit-il du lien **« Download Alternative Installer » Windows** ou du **script shell Linux** depuis `jdownloader.org` ? -3. Le fichier a-t-il été **exécuté** ? - -Trois *oui* → traiter la machine comme compromise. N'importe quel *non* dans la liste → aucun risque lié à cet incident. Une installation pré-existante mise à jour automatiquement, un paquet Flatpak/Snap/Winget, le JAR, la version macOS : rien à craindre. - -### Sous Windows - -Le contrôle de référence, c'est la signature numérique. Clic droit sur l'installateur → **Propriétés** → onglet **Signatures numériques**. La valeur attendue est `AppWork GmbH`. Toute autre signature (notamment *Zipline LLC* ou *The Water Team*), ou l'absence de signature, désigne un fichier malveillant. - -En PowerShell : - -```powershell -Get-AuthenticodeSignature "C:\chemin\vers\JDownloader2Setup.exe" | - Select-Object Status, SignerCertificate -``` - -Si `Status` n'est pas `Valid` ou si le certificat ne contient pas `AppWork GmbH`, ne pas exécuter. - -### Sous Linux - -Trois artefacts sont à chercher en post-exécution : - -```bash -sudo ls -la /usr/bin/systemd-exec # SUID-root illégitime -sudo ls -la /root/.local/share/.pkg # charge principale obfusquée -sudo ls -la /etc/profile.d/systemd.sh # script de persistance -``` - -L'apparition de l'un de ces trois éléments suffit à confirmer l'infection. Pour aller plus loin, un coup d'œil au trafic sortant vers les trois domaines C2 (`parkspringshotel[.]com`, `auraguest[.]lk`, `checkinnhotels[.]com`) dans les logs DNS ou via `journalctl --since "2026-05-06"` permet de confirmer l'activité du malware. - -Si le script installateur traîne encore quelque part, sa signature est sans ambiguïté : taille de **7 934 496 octets**, SHA-256 commençant par `6d975c05ef`. - -### En cas de compromission confirmée - -La position officielle d'AppWork est sans nuance : **réinstallation complète du système**. Un RAT modulaire avec persistance SUID-root et exécution arbitraire de code Python depuis un C2 n'est pas quelque chose qu'on retire avec un antivirus. Il faut considérer que tout secret qui a transité sur la machine est compromis — mots de passe saisis au clavier, clés SSH, jetons API, cookies de session, configurations cloud — et les faire tous tourner après réinstallation, **depuis une autre machine saine**. - -## Ce que ça change pour qui s'auto-héberge - -L'incident JDownloader est un exemple éclairant pour qui exploite ses propres services exposés sur Internet — un Forgejo, un reverse proxy, un site personnel. La leçon n'est pas vraiment côté utilisateur (la procédure de détection plus haut suffit), elle est côté **opérateur**. - -Le CMS de JDownloader n'a probablement pas été ciblé pour ses qualités intrinsèques. C'est un dommage collatéral d'un schéma plus large : tout site qui distribue un binaire avec un nombre significatif d'utilisateurs devient une cible rentable, et le CMS public est souvent la pièce la moins surveillée du dispositif. On sécurise le serveur Git, le pipeline de build, la signature des paquets — et on laisse tourner un CMS qui n'a pas été patché depuis huit mois parce qu'il « ne sert qu'à afficher la page d'accueil ». - -Quelques principes opérationnels qui en découlent. - -**Séparer le canal de publication du canal de vérification.** AppWork a eu raison sur un point essentiel : leurs mises à jour in-app passent par une infrastructure indépendante du site web, avec signature RSA vérifiée côté client. Quand on auto-héberge, ça se traduit par : ne jamais utiliser le même serveur pour distribuer un binaire **et** publier son empreinte. Le checksum doit vivre ailleurs — dans un dépôt Git séparé, sur un domaine différent, idéalement sur une infrastructure qu'on n'administre pas soi-même. - -**Surveiller la dérive du contenu publié.** Une simple vérification quotidienne du hash des pages publiques (un cron qui calcule le SHA-256 des URL critiques et alerte en cas de changement non planifié) aurait détecté la compromission de JDownloader en moins d'une heure. C'est le genre de surveillance qu'aucune solution commerciale ne propose nativement, et qui s'écrit en quinze lignes de bash. - -**Patcher le CMS avec la même rigueur que l'OS.** L'automatisation des mises à jour applicatives reste sous-investie, surtout pour les outils « périphériques » (CMS, wiki, formulaire de contact). Une mise à jour automatique de niveau correctif n'est pas plus risquée qu'une mise à jour du noyau, et elle évite ce type de scénario. - -**Auditer les ACL régulièrement.** La faille exploitée ici permettait de modifier les ACL **sans authentification**. C'est l'équivalent CMS d'un répertoire `chmod 777` dans un coin du système. Un audit périodique des permissions sur les pages publiques fait partie du minimum syndical pour un service exposé. - -## En résumé - -JDownloader n'a pas été cassé. Son code source est intact, son infrastructure de build est intacte, ses paquets officiels distribués via Flatpak ou Snap sont intacts, ses mises à jour internes sont intactes. Ce qui a été cassé, c'est **le panneau qui dit où aller chercher le binaire**. - -C'est une mécanique élégante du point de vue de l'attaquant, et inquiétante du point de vue de l'opérateur. Elle illustre quelque chose que l'incident NPM avait déjà mis en lumière dans un autre registre : la chaîne d'approvisionnement logicielle n'est pas une chaîne, c'est un réseau, et les points faibles ne sont jamais là où on les attend. On peut investir massivement dans la sécurité du code, du build et de la signature ; si la page web qui sert le lien reste un Wordpress non patché derrière un nom de domaine prestigieux, tout cet investissement passe à côté. - -Le rôle de l'opérateur en 2026, ce n'est plus de protéger le code. C'est de protéger **chaque maillon qui sert à dire au monde où trouver le code** — et de partir du principe que ce maillon-là sera le prochain à céder. - -###### Liens & sources - -[JDownloader site hacked to replace installers with Python RAT malware | BleepingComputer](https://www.bleepingcomputer.com/news/security/jdownloader-site-hacked-to-replace-installers-with-python-rat-malware/) - -[Rapport d'incident officiel | jdownloader.org](https://jdownloader.org/) - -[JDownloader Website Supply Chain Attack | Rescana](https://www.rescana.com/post/jdownloader-website-supply-chain-attack-installers-replaced-with-python-rat-malware-may-2026/) - -[Le site officiel de JDownloader compromis | IT-Connect](https://www.it-connect.fr/le-site-officiel-de-jdownloader-compromis-pour-diffuser-un-malware-sur-windows-et-linux/) \ No newline at end of file diff --git a/4cf880e6-e4e0-42dd-aae2-675837850b83/meta.json b/4cf880e6-e4e0-42dd-aae2-675837850b83/meta.json deleted file mode 100644 index 6f74d5b..0000000 --- a/4cf880e6-e4e0-42dd-aae2-675837850b83/meta.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "uuid": "4cf880e6-e4e0-42dd-aae2-675837850b83", - "slug": "compromission-de-jdownloader-6-7-mai-2026-analyse-indicateurs-et-procedure-de-detection", - "title": "JDownloader : quand le CMS devient la faille", - "author": "cedric@abonnel.fr", - "published": true, - "published_at": "2026-05-12 17:09", - "created_at": "2026-05-12 17:10:36", - "updated_at": "2026-05-12 17:21:01", - "revisions": [ - { - "n": 1, - "date": "2026-05-12 17:21:01", - "comment": "Contenu modifié", - "title": "JDownloader : quand le CMS devient la faille" - } - ], - "cover": "cover.webp", - "files_meta": { - "cover.webp": { - "author": "", - "source_url": "https://savprogroupe.fr/wp-content/uploads/2024/09/Alarme-intrusion1-scaled.webp" - } - }, - "external_links": [], - "seo_title": "", - "seo_description": "", - "og_image": "https://varlog.a5l.fr/file?uuid=4cf880e6-e4e0-42dd-aae2-675837850b83&name=cover.webp", - "category": "informatique" -} diff --git a/4cf880e6-e4e0-42dd-aae2-675837850b83/revisions/0001.md b/4cf880e6-e4e0-42dd-aae2-675837850b83/revisions/0001.md deleted file mode 100644 index 0593e9b..0000000 --- a/4cf880e6-e4e0-42dd-aae2-675837850b83/revisions/0001.md +++ /dev/null @@ -1,128 +0,0 @@ ---- -title: JDownloader : quand le CMS devient la faille -category: informatique -date: 12/05/2026 ---- - -# JDownloader : quand le CMS devient la faille - -*À propos de l'incident de sécurité affectant le site officiel jdownloader.org les 6 et 7 mai 2026.* - -## JDownloader expliqué simplement - -JDownloader est un gestionnaire de téléchargements écrit en Java, distribué gratuitement par l'éditeur allemand AppWork GmbH depuis plus de quinze ans. Il sert essentiellement à automatiser la récupération de fichiers depuis des hébergeurs (Mega, Uptobox, Rapidgator…), des plateformes vidéo et des services de liens premium. Côté utilisateur, c'est l'outil qu'on lance pour récupérer une série de fichiers en une opération, plutôt que cliquer sur cent liens un par un. L'application est multiplateforme — Windows, Linux, macOS — et tourne sur quelques millions de postes dans le monde. - -Le projet est distribué de plusieurs façons : un JAR principal (le binaire Java pur), des installateurs natifs par OS depuis le site officiel, et des paquets passant par des canaux distribués comme Flatpak, Snap ou Winget. C'est cette diversité de canaux qui va jouer un rôle central dans ce qui suit. - -## L'incident : ce qui s'est passé - -Entre le 6 mai 2026 à 00 h 01 UTC et le 7 mai 2026 à 17 h 06 UTC, le site officiel `jdownloader.org` a distribué des installateurs piégés à la place des binaires légitimes. La fenêtre n'a duré qu'environ 48 heures, et seuls deux liens ont été affectés. Mais pendant cette fenêtre, tout utilisateur qui passait par le bon parcours téléchargeait un cheval de Troie au lieu d'un gestionnaire de téléchargements. - -Le scénario reconstitué par l'équipe d'AppWork et les chercheurs en sécurité (BleepingComputer, Thomas Klemenc, équipe Rescana) se déroule en quatre temps. - -**1. Compromission du CMS du site.** Les attaquants ont exploité une vulnérabilité non corrigée dans le système de gestion de contenu de `jdownloader.org`, qui permettait de modifier les listes de contrôle d'accès et le contenu publié sans authentification. Point crucial : ils n'ont **pas** eu accès au serveur sous-jacent, ni au système de fichiers, ni à l'infrastructure de build. Juste au contenu web — et ça a suffi. - -**2. Réécriture de deux liens.** Plutôt que de tenter de modifier les binaires originaux (qui étaient hors de leur portée), les attaquants ont fait beaucoup plus simple : ils ont changé l'URL cible de deux liens publics sur la page de téléchargement. Le lien « Download Alternative Installer » pour Windows et le script shell pour Linux pointaient désormais vers des fichiers malveillants hébergés sur une infrastructure tierce. Le HTML autour, lui, restait identique. Visuellement, rien ne distinguait la page propre de la page piégée. - -**3. Charges utiles différenciées par plateforme.** Sur Windows, l'installateur piégé agit comme un *loader* qui déploie un RAT (*Remote Access Trojan*) écrit en Python, fortement obfusqué, communiquant avec deux serveurs de commande et contrôle (`parkspringshotel[.]com` et `auraguest[.]lk`). Le RAT est modulaire : il reçoit du code Python depuis le C2 et l'exécute, ce qui donne aux attaquants une porte ouverte indéfiniment extensible. Sur Linux, le script shell modifié télécharge une archive depuis `checkinnhotels[.]com`, déguisée en fichier SVG, dont il extrait deux binaires ELF — `pkg` et `systemd-exec`. Le second est installé en SUID-root dans `/usr/bin/`, le premier est copié dans `/root/.local/share/.pkg`, et la persistance est assurée par un script déposé dans `/etc/profile.d/systemd.sh`. Le malware se lance ensuite déguisé en `/usr/libexec/upowerd`, un nom de processus qui existe légitimement sur la plupart des distributions. - -**4. Détection par la communauté.** L'alerte n'est pas venue d'un système de surveillance, mais d'un utilisateur Reddit (*PrinceOfNightSky*) qui a remarqué que Microsoft Defender bloquait son installateur fraîchement téléchargé. La signature numérique indiquait « Zipline LLC » au lieu de « AppWork GmbH ». L'équipe AppWork a confirmé, mis le site hors ligne pour investigation dans les heures qui ont suivi, puis publié un rapport d'incident détaillé. Le site est revenu en ligne dans la nuit du 8 au 9 mai avec des liens vérifiés. - -## Pourquoi c'est systémique - -À première vue, c'est un incident isolé : une faille CMS, une équipe qui patche, le service revient. Vu de loin, ça ressemble à un mauvais quart d'heure. Mais en prenant un peu de recul, le schéma est troublant. - -**CPUID, début avril 2026.** Le site officiel de l'éditeur de CPU-Z est compromis, des installateurs piégés sont distribués pendant plusieurs jours. - -**DAEMON Tools, début mai 2026.** Même schéma : compromission du site officiel, substitution d'installateurs, plusieurs versions infectées (12.5.0.2421 à 12.5.0.2434) distribuées avant détection. - -**JDownloader, 6–7 mai 2026.** Toujours le même schéma. - -Trois compromissions d'éditeurs logiciels en cinq semaines, exactement sur le même schéma : pas d'intrusion dans l'infrastructure de build, pas de modification du code source, pas de vol de certificat de signature de l'éditeur. À chaque fois, **le maillon faible est le CMS qui sert la page de téléchargement**. Ce qu'on attaque, ce n'est pas le logiciel ; c'est le panneau publicitaire qui pointe vers le logiciel. - -Cette mécanique est intéressante parce qu'elle déjoue à peu près toutes les défenses « modernes » de la chaîne d'approvisionnement. - -**La signature de code ne protège pas.** Le binaire légitime de JDownloader est toujours signé proprement par AppWork GmbH. Mais le binaire malveillant servi à sa place est signé, lui aussi — par un autre éditeur (Zipline LLC, The Water Team), avec des certificats vraisemblablement volés ou achetés au marché noir. La signature certifie que le fichier vient bien de celui qui l'a signé ; elle ne certifie pas que c'est le bon fichier. - -**Le HTTPS ne protège pas.** La page de téléchargement est servie en HTTPS valide, depuis le bon domaine, avec le bon certificat. Le navigateur n'a aucune raison de tiquer. - -**Les mises à jour in-app sont, elles, protégées.** AppWork le souligne : chaque mise à jour livrée par le mécanisme intégré de JDownloader est signée RSA et vérifiée cryptographiquement, indépendamment du site web. Ce canal n'a pas été touché. C'est tout le paradoxe : les utilisateurs qui mettaient à jour JDownloader depuis l'application elle-même n'ont rien risqué ; ceux qui sont allés sur le site officiel pour le télécharger « proprement » sont les seuls exposés. - -**Les paquets distribués sont protégés.** Flatpak, Snap, Winget, le JAR principal — tout ce qui passe par une chaîne d'approvisionnement où l'intégrité est vérifiée par checksum hors site est resté propre. AppWork le résume sans détour : *« Winget/Flatpak/Snap infra is outside of our reach — files downloaded by those are hosted on other infra and secured by sha256 checksums that are unchanged. »* - -Autrement dit, **plus le canal est court et naïf, plus il est vulnérable**. Le téléchargement direct depuis un site web est le canal le plus naïf qui soit : on fait confiance au CMS, point. Tout l'effort de sécurisation de l'écosystème logiciel — signatures, builds reproductibles, SBOMs, attestations de provenance — porte sur la chaîne de production et la chaîne de distribution centralisée. Le maillon « page HTML qui dit *clique ici* », lui, est resté tel qu'il était en 2005. - -## Comment vérifier si on est touché - -La fenêtre est étroite, donc le filtrage est simple. Trois questions, dans l'ordre : - -1. L'installateur a-t-il été récupéré entre le **6 mai 2026 (00 h 01 UTC)** et le **7 mai 2026 (17 h 06 UTC)** ? -2. S'agit-il du lien **« Download Alternative Installer » Windows** ou du **script shell Linux** depuis `jdownloader.org` ? -3. Le fichier a-t-il été **exécuté** ? - -Trois *oui* → traiter la machine comme compromise. N'importe quel *non* dans la liste → aucun risque lié à cet incident. Une installation pré-existante mise à jour automatiquement, un paquet Flatpak/Snap/Winget, le JAR, la version macOS : rien à craindre. - -### Sous Windows - -Le contrôle de référence, c'est la signature numérique. Clic droit sur l'installateur → **Propriétés** → onglet **Signatures numériques**. La valeur attendue est `AppWork GmbH`. Toute autre signature (notamment *Zipline LLC* ou *The Water Team*), ou l'absence de signature, désigne un fichier malveillant. - -En PowerShell : - -```powershell -Get-AuthenticodeSignature "C:\chemin\vers\JDownloader2Setup.exe" | - Select-Object Status, SignerCertificate -``` - -Si `Status` n'est pas `Valid` ou si le certificat ne contient pas `AppWork GmbH`, ne pas exécuter. - -### Sous Linux - -Trois artefacts sont à chercher en post-exécution : - -```bash -sudo ls -la /usr/bin/systemd-exec # SUID-root illégitime -sudo ls -la /root/.local/share/.pkg # charge principale obfusquée -sudo ls -la /etc/profile.d/systemd.sh # script de persistance -``` - -L'apparition de l'un de ces trois éléments suffit à confirmer l'infection. Pour aller plus loin, un coup d'œil au trafic sortant vers les trois domaines C2 (`parkspringshotel[.]com`, `auraguest[.]lk`, `checkinnhotels[.]com`) dans les logs DNS ou via `journalctl --since "2026-05-06"` permet de confirmer l'activité du malware. - -Si le script installateur traîne encore quelque part, sa signature est sans ambiguïté : taille de **7 934 496 octets**, SHA-256 commençant par `6d975c05ef`. - -### En cas de compromission confirmée - -La position officielle d'AppWork est sans nuance : **réinstallation complète du système**. Un RAT modulaire avec persistance SUID-root et exécution arbitraire de code Python depuis un C2 n'est pas quelque chose qu'on retire avec un antivirus. Il faut considérer que tout secret qui a transité sur la machine est compromis — mots de passe saisis au clavier, clés SSH, jetons API, cookies de session, configurations cloud — et les faire tous tourner après réinstallation, **depuis une autre machine saine**. - -## Ce que ça change pour qui s'auto-héberge - -L'incident JDownloader est un exemple éclairant pour qui exploite ses propres services exposés sur Internet — un Forgejo, un reverse proxy, un site personnel. La leçon n'est pas vraiment côté utilisateur (la procédure de détection plus haut suffit), elle est côté **opérateur**. - -Le CMS de JDownloader n'a probablement pas été ciblé pour ses qualités intrinsèques. C'est un dommage collatéral d'un schéma plus large : tout site qui distribue un binaire avec un nombre significatif d'utilisateurs devient une cible rentable, et le CMS public est souvent la pièce la moins surveillée du dispositif. On sécurise le serveur Git, le pipeline de build, la signature des paquets — et on laisse tourner un CMS qui n'a pas été patché depuis huit mois parce qu'il « ne sert qu'à afficher la page d'accueil ». - -Quelques principes opérationnels qui en découlent. - -**Séparer le canal de publication du canal de vérification.** AppWork a eu raison sur un point essentiel : leurs mises à jour in-app passent par une infrastructure indépendante du site web, avec signature RSA vérifiée côté client. Quand on auto-héberge, ça se traduit par : ne jamais utiliser le même serveur pour distribuer un binaire **et** publier son empreinte. Le checksum doit vivre ailleurs — dans un dépôt Git séparé, sur un domaine différent, idéalement sur une infrastructure qu'on n'administre pas soi-même. - -**Surveiller la dérive du contenu publié.** Une simple vérification quotidienne du hash des pages publiques (un cron qui calcule le SHA-256 des URL critiques et alerte en cas de changement non planifié) aurait détecté la compromission de JDownloader en moins d'une heure. C'est le genre de surveillance qu'aucune solution commerciale ne propose nativement, et qui s'écrit en quinze lignes de bash. - -**Patcher le CMS avec la même rigueur que l'OS.** L'automatisation des mises à jour applicatives reste sous-investie, surtout pour les outils « périphériques » (CMS, wiki, formulaire de contact). Une mise à jour automatique de niveau correctif n'est pas plus risquée qu'une mise à jour du noyau, et elle évite ce type de scénario. - -**Auditer les ACL régulièrement.** La faille exploitée ici permettait de modifier les ACL **sans authentification**. C'est l'équivalent CMS d'un répertoire `chmod 777` dans un coin du système. Un audit périodique des permissions sur les pages publiques fait partie du minimum syndical pour un service exposé. - -## En résumé - -JDownloader n'a pas été cassé. Son code source est intact, son infrastructure de build est intacte, ses paquets officiels distribués via Flatpak ou Snap sont intacts, ses mises à jour internes sont intactes. Ce qui a été cassé, c'est **le panneau qui dit où aller chercher le binaire**. - -C'est une mécanique élégante du point de vue de l'attaquant, et inquiétante du point de vue de l'opérateur. Elle illustre quelque chose que l'incident NPM avait déjà mis en lumière dans un autre registre : la chaîne d'approvisionnement logicielle n'est pas une chaîne, c'est un réseau, et les points faibles ne sont jamais là où on les attend. On peut investir massivement dans la sécurité du code, du build et de la signature ; si la page web qui sert le lien reste un Wordpress non patché derrière un nom de domaine prestigieux, tout cet investissement passe à côté. - -Le rôle de l'opérateur en 2026, ce n'est plus de protéger le code. C'est de protéger **chaque maillon qui sert à dire au monde où trouver le code** — et de partir du principe que ce maillon-là sera le prochain à céder. - -###### Liens & sources - -[JDownloader site hacked to replace installers with Python RAT malware | BleepingComputer](https://www.bleepingcomputer.com/news/security/jdownloader-site-hacked-to-replace-installers-with-python-rat-malware/) - -[Rapport d'incident officiel | jdownloader.org](https://jdownloader.org/) - -[JDownloader Website Supply Chain Attack | Rescana](https://www.rescana.com/post/jdownloader-website-supply-chain-attack-installers-replaced-with-python-rat-malware-may-2026/) - -[Le site officiel de JDownloader compromis | IT-Connect](https://www.it-connect.fr/le-site-officiel-de-jdownloader-compromis-pour-diffuser-un-malware-sur-windows-et-linux/) \ No newline at end of file diff --git a/4f193d70-d236-42d7-aedb-58631cd15002/index.md b/4f193d70-d236-42d7-aedb-58631cd15002/index.md deleted file mode 100644 index a43b61e..0000000 --- a/4f193d70-d236-42d7-aedb-58631cd15002/index.md +++ /dev/null @@ -1,70 +0,0 @@ -# La 6G : au-delà de la 5G, promesses et interrogations - -Alors que la 5G peine encore à s’imposer partout, la recherche sur la **6G** est déjà bien avancée. Les laboratoires, opérateurs et gouvernements annoncent des innovations spectaculaires : débits colossaux, latence quasi nulle et intégration massive de l’intelligence artificielle dans le réseau. Mais derrière le buzz médiatique se cachent de **grandes incertitudes techniques et économiques**. - ---- - -### Promesses technologiques - -* **Débits théoriques** : jusqu’à **1 Tbit/s** dans des conditions expérimentales (vs 10 Gbit/s max pour la 5G). -* **Latence ultra-faible** : <1 ms, visant les applications critiques comme chirurgie à distance, véhicules autonomes coordonnés en temps réel et réalité immersive totale. -* **Fréquences** : exploitation des **ondes térahertz (THz)**, beaucoup plus hautes que les mmWave 5G, offrant un spectre presque illimité mais avec des contraintes sévères de portée et pénétration. -* **Intelligence embarquée** : réseaux capables d’auto-optimisation grâce à l’IA et au machine learning pour gérer la congestion, l’énergie et les allocations de spectre en temps réel. -* **Intégration multi-domaines** : fusion des communications terrestres, satellites, drones et IoT pour créer un réseau ubiquitaire. - ---- - -### Défis techniques - -1. **Propagation et portée** : les ondes THz sont extrêmement sensibles aux obstacles et à l’humidité, nécessitant une densité d’antennes inimaginable à l’échelle mondiale. -2. **Consommation énergétique** : déployer des antennes THz ultra-puissantes et gérer des réseaux IA en temps réel risque d’augmenter considérablement la consommation électrique. -3. **Standardisation complexe** : contrairement à la 5G qui a hérité d’une partie de l’infrastructure 4G, la 6G nécessitera des investissements massifs et de nouveaux protocoles. -4. **Coût et adoption** : le coût pour les opérateurs et la nécessité de renouveler les équipements pour les utilisateurs seront un frein majeur, comme ce fut le cas pour la 3G et la 5G. - ---- - -### Usages envisagés - -* **Réalité mixte et immersive** : AR/VR ultra-réaliste, métavers en temps réel, téléprésence totale. -* **Téléchirurgie et véhicules autonomes coordonnés** : applications critiques nécessitant une latence quasi nulle. -* **IoT massif** : milliards d’objets connectés, capteurs intelligents, villes et infrastructures “autonomes”. -* **Communication spatiale et aérienne** : drones, satellites et aéronefs connectés en temps réel. - ---- - -### Critique et perspective - -Même si les promesses de la 6G sont spectaculaires, plusieurs points restent préoccupants : - -* La **6G est encore largement théorique** : aucune application grand public n’est prévue avant 2030. -* Comme pour la 5G, les opérateurs pourraient utiliser la 6G pour **inciter la migration depuis la 5G**, en bridant certaines fonctionnalités sur la génération précédente. -* Le discours marketing risque de créer une **confusion encore plus grande** pour les utilisateurs : débits maximaux, latence minimale et réseaux intelligents seront très localisés et expérimentaux, bien loin d’une couverture nationale. - ---- - -### Schéma suggéré : évolution 3G → 4G → 5G → 6G - -```mermaid -flowchart LR - A[3G] --> B[4G] - B --> C[5G] - C --> D[6G] - - subgraph Débits - A1[384 kbit/s → 42 Mbit/s] --> B1[100 Mbit/s → 1 Gbit/s] --> C1[100 Mbit/s → 10 Gbit/s] --> D1[100 Gbit/s → 1 Tbit/s] - end - - subgraph Latence - A2[150–200 ms] --> B2[30–50 ms] --> C2[1–10 ms] --> D2[<1 ms] - end -``` - ---- - -La 6G s’annonce comme **l’avenir des réseaux mobiles**, mais elle illustre encore la stratégie récurrente des opérateurs : - -1. Créer une promesse technologique spectaculaire. -2. Déployer progressivement pour ne pas perturber l’infrastructure existante. -3. Inciter subtilement les utilisateurs à migrer vers la nouvelle génération, souvent via des limitations sur les générations précédentes. - -> Comme pour la 3G bridée puis la 4G et la 5G, la 6G risque d’être autant un **outil de marketing et de stratégie économique** qu’une véritable révolution immédiate pour le consommateur. diff --git a/4f193d70-d236-42d7-aedb-58631cd15002/meta.json b/4f193d70-d236-42d7-aedb-58631cd15002/meta.json deleted file mode 100644 index 336e8be..0000000 --- a/4f193d70-d236-42d7-aedb-58631cd15002/meta.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "uuid": "4f193d70-d236-42d7-aedb-58631cd15002", - "slug": "la-6g-au-dela-de-la-5g-promesses-et-interrogations", - "title": "La 6G : au-delà de la 5G, promesses et interrogations", - "author": "cedric@abonnel.fr", - "published": true, - "published_at": "2025-11-05 08:46:51", - "created_at": "2025-11-05 08:46:51", - "updated_at": "2025-11-05 08:46:51", - "revisions": [], - "cover": "cover.jpg", - "category": "télécom" -} diff --git a/4f443bcb-b0d4-47f8-837d-61627e6c94f2/files/_thumb_945482b26e8a76ab-49498.png b/4f443bcb-b0d4-47f8-837d-61627e6c94f2/files/_thumb_945482b26e8a76ab-49498.png deleted file mode 100644 index dcdffa3..0000000 Binary files a/4f443bcb-b0d4-47f8-837d-61627e6c94f2/files/_thumb_945482b26e8a76ab-49498.png and /dev/null differ diff --git a/4f443bcb-b0d4-47f8-837d-61627e6c94f2/files/_thumb_a1080cd703289e6b-144512.png b/4f443bcb-b0d4-47f8-837d-61627e6c94f2/files/_thumb_a1080cd703289e6b-144512.png deleted file mode 100644 index b4d0890..0000000 Binary files a/4f443bcb-b0d4-47f8-837d-61627e6c94f2/files/_thumb_a1080cd703289e6b-144512.png and /dev/null differ diff --git a/4f443bcb-b0d4-47f8-837d-61627e6c94f2/files/_thumb_cae639a42d79414f-68314.jpg b/4f443bcb-b0d4-47f8-837d-61627e6c94f2/files/_thumb_cae639a42d79414f-68314.jpg deleted file mode 100644 index 72ed808..0000000 Binary files a/4f443bcb-b0d4-47f8-837d-61627e6c94f2/files/_thumb_cae639a42d79414f-68314.jpg and /dev/null differ diff --git a/4f443bcb-b0d4-47f8-837d-61627e6c94f2/files/_thumb_dc5413a86e9c042a-22419.jpg b/4f443bcb-b0d4-47f8-837d-61627e6c94f2/files/_thumb_dc5413a86e9c042a-22419.jpg deleted file mode 100644 index 38ed16a..0000000 Binary files a/4f443bcb-b0d4-47f8-837d-61627e6c94f2/files/_thumb_dc5413a86e9c042a-22419.jpg and /dev/null differ diff --git a/4f443bcb-b0d4-47f8-837d-61627e6c94f2/files/cover.jpg b/4f443bcb-b0d4-47f8-837d-61627e6c94f2/files/cover.jpg deleted file mode 100644 index 3c9539c..0000000 Binary files a/4f443bcb-b0d4-47f8-837d-61627e6c94f2/files/cover.jpg and /dev/null differ diff --git a/4f443bcb-b0d4-47f8-837d-61627e6c94f2/index.md b/4f443bcb-b0d4-47f8-837d-61627e6c94f2/index.md deleted file mode 100644 index 885db55..0000000 --- a/4f443bcb-b0d4-47f8-837d-61627e6c94f2/index.md +++ /dev/null @@ -1,89 +0,0 @@ -# Pourquoi le réseau mobile ne s'effondre pas le jour où tout le monde téléphone en même temps - -Un attentat, un séisme, un match du Stade de France, une grande panne d'électricité. Dans ces moments-là, des centaines de milliers de gens dégainent leur téléphone au même instant. Le réseau mobile est dimensionné pour un usage moyen, pas pour un pic massif simultané, et il devrait théoriquement s'effondrer. La plupart du temps, il tient. Pas parfaitement, pas pour tout le monde, mais il tient — et surtout, les appels d'urgence continuent de passer. C'est le résultat d'une série de mécanismes empilés depuis les années 1990, que la 4G a affinés et que la 5G a élargis. Cet article les passe en revue, et termine sur une question qu'on me pose souvent : est-ce que mon forfait à 50 € me donne une place prioritaire dans cette file d'attente ? - -## Trois questions, pas une - -Quand une cellule commence à chauffer, l'opérateur doit répondre à trois questions distinctes. Qui a le droit de se connecter ? Une fois connecté, qui passe en premier ? Et quels services doivent absolument continuer à fonctionner, quoi qu'il arrive ? - -La 2G ne savait répondre qu'à la première. Elle filtrait à l'entrée et basta. La 4G a ajouté la deuxième : une fois admis sur le réseau, votre trafic est traité différemment selon son importance. La 5G ajoute la troisième : elle peut créer des réseaux virtuels parallèles dont certains sont réservés à des usages critiques, totalement isolés des autres. - -## Le filtrage à l'entrée - -Chaque carte SIM porte un numéro de classe d'accès, hérité du GSM, entre 0 et 15. Les classes 0 à 9 couvrent le grand public — autrement dit nous tous. Les classes 11 à 15 sont réservées : services de secours, autorités publiques, personnel opérateur, usages militaires selon les pays. - -Quand une cellule est surchargée, l'eNodeB (la station de base 4G) diffuse une consigne aux téléphones du secteur : « les classes 0 à 9, vous attendez ». C'est l'**Access Class Barring**. Concrètement, votre téléphone reçoit ce message et bloque lui-même votre tentative d'appel ou de connexion data, sans même envoyer la demande à la station. C'est élégant parce que ça soulage la station avant même qu'elle ne soit sollicitée. Les classes prioritaires, elles, passent sans encombre. - -Une variante plus dure, l'**Extended Access Barring**, vise les objets connectés et les usages non urgents. Quand une vraie crise se déclare, l'opérateur peut couper les compteurs intelligents, les alarmes domestiques et autres équipements bavards pour préserver la bande passante humaine. - -En 5G, ce mécanisme a été refondu sous le nom d'**UAC** — *Unified Access Control*, introduit dans la Release 15 du 3GPP. UAC unifie dans un seul cadre ce qui était auparavant éparpillé entre ACB, EAB et d'autres dispositifs spécifiques. Il repose sur deux notions complémentaires. Les *Access Identities* identifient qui vous êtes : utilisateur lambda, abonné à un service prioritaire type MPS ou MCS, personnel d'urgence, agent opérateur. Les *Access Categories* identifient ce que vous essayez de faire : appel d'urgence, connexion data normale, SMS, mise à jour de localisation. La combinaison des deux détermine si votre demande passe ou pas. La granularité gagnée par rapport à la 4G est réelle : on peut bloquer un type d'action précis pour un type d'utilisateur précis, par exemple « les abonnés grand public ne peuvent plus initier de nouveaux appels data, mais les SMS et les appels voix continuent ». - -## La priorité une fois connecté - -Là où la 4G a vraiment innové, c'est en introduisant le **QCI** — *QoS Class Identifier*. Chaque flux de données qui transite sur le réseau se voit attribuer un numéro entre 1 et 9 (avec quelques valeurs supplémentaires pour des cas spéciaux) qui dit à l'infrastructure comment le traiter. - -| Usage | QCI | Traitement | -|---|---|---| -| Appel VoLTE (voix sur LTE) | 1 | Latence minimale, débit garanti | -| Visioconférence | 2 | Débit garanti | -| Signalisation réseau | 5 | Très haute priorité | -| Streaming vidéo | 6 ou 8 | Best effort prioritaire | -| Web et internet général | 9 | Best effort standard | - -Quand la cellule est encombrée, le routeur sait quoi sacrifier en premier. YouTube va ralentir, les pages web vont mettre du temps à charger, mais l'appel téléphonique de votre voisin reste audible. C'est un compromis assumé : on dégrade volontairement les usages secondaires pour préserver les usages critiques. - -La 5G a transposé ce mécanisme sous le nom de **5QI** (*5G QoS Identifier*) avec davantage de niveaux et une meilleure prise en compte des cas que la 4G gérait mal — notamment les services à très basse latence pour les usines connectées ou la voiture autonome. La voix d'urgence garde son sommet, les données critiques industrielles s'intercalent juste après, le streaming et le web restent en bas de la pile. - -## L'isolation par tranches : le network slicing - -C'est l'apport majeur de la 5G en matière de gestion de crise. Au lieu de partager une seule infrastructure entre tous les usages, on peut maintenant la découper logiciellement en tranches — des *slices* — qui se comportent comme autant de réseaux indépendants, alors qu'ils tournent sur les mêmes antennes et les mêmes câbles. - -Un opérateur peut par exemple maintenir une tranche pour le grand public avec ses millions d'abonnés et son trafic massif, une autre pour les services d'urgence dimensionnée pour rester fluide même quand le reste sature, une troisième pour les objets connectés industriels avec des garanties de latence, et une quatrième pour des opérateurs critiques type SNCF, EDF ou hôpitaux. Chaque tranche a ses propres règles d'admission, ses propres priorités, ses propres garanties de performance. Si la tranche grand public est totalement saturée, celle des secours ne le sait même pas. - -Cette isolation est ce qui distingue le plus fondamentalement la 5G des générations précédentes. Avant, tout le monde se battait pour les mêmes ressources, avec juste des priorités différentes pour départager. Maintenant, certaines ressources sont retirées du combat dès le départ. - -## Récapitulatif - -| Génération | Ce qui est contrôlé | Comment | -|---|---|---| -| 2G | L'accès au réseau | Classes d'accès 0-15 | -| 4G | L'accès + la priorité du trafic | ACB / EAB + QCI | -| 5G | L'accès + la priorité + l'isolation des services | UAC + 5QI + network slicing | - -Tous ces mécanismes restent invisibles tant que tout va bien. Vous ne savez pas qu'ils existent. Vous découvrez leur existence le jour où votre voisin n'arrive plus à charger ses mails alors que les pompiers, eux, continuent de communiquer normalement. Ce jour-là, ce n'est pas de la magie. C'est trente ans d'ingénierie radio qui ont anticipé que ça arriverait. - ---- - -## Et mon forfait premium, alors ? - -Question logique à ce stade. Si le réseau sait techniquement prioriser certains flux par rapport à d'autres, qu'est-ce qui empêche un opérateur de faire passer ses abonnés à 50 € devant ceux à 10 € quand les antennes saturent ? La réponse honnête commence par un aveu : techniquement, rien. L'outil existe, il s'appelle **Quality of Service** (QoS), c'est exactement le mécanisme qu'on vient de décrire. Si demain Orange ou SFR voulaient créer une voie rapide pour leurs abonnés haut de gamme, ils auraient les outils dans la boîte. Pourtant, ils ne le font pas. Pour quatre raisons. - -### La loi européenne l'interdit - -Le règlement **(UE) 2015/2120**, dit « règlement internet ouvert », oblige les opérateurs à traiter tout le trafic de la même façon, sans discrimination liée à l'expéditeur, au destinataire, au contenu ou à l'application. Il a fêté ses dix ans en novembre 2025, et l'ARCEP a profité de l'anniversaire pour rappeler que c'est l'un des piliers du modèle numérique européen. Les sanctions sont sérieuses : jusqu'à **3 % du chiffre d'affaires** de l'opérateur fautif. Un opérateur français qui annoncerait demain « avec notre forfait Premium, vous passez devant les autres » se retrouverait devant l'ARCEP dans la semaine. - -Le règlement laisse quelques portes ouvertes pour les services dits « spécialisés » qui ont besoin d'une qualité garantie — téléchirurgie, voiture connectée. Mais ces exceptions sont étroitement encadrées et ne couvrent absolument pas le confort d'un client haut de gamme qui voudrait charger son Instagram plus vite à 19h. - -Aux États-Unis, l'histoire est différente. La FCC a tenté de restaurer la neutralité du net en 2024, mais en janvier 2025 la cour d'appel du sixième circuit a invalidé la décision, jugeant que la FCC n'avait pas l'autorité légale pour reclasser le haut débit comme service public. Avec l'arrivée de Brendan Carr à la tête de la FCC, ouvertement opposé à la neutralité du net, il n'y a aujourd'hui plus de règle fédérale outre-Atlantique. Quelques États (Californie, Washington, New York, Oregon) ont leurs propres lois qui maintiennent le principe, mais à l'échelle du pays, les opérateurs américains pourraient légalement faire ce que leurs homologues européens n'ont pas le droit de faire. Pourtant, ils ne le font pas ouvertement non plus, et la raison renvoie aux trois points suivants. - -### C'est commercialement intenable - -Imagine la publicité : « Forfait Premium à 50 € — passez devant les pauvres pendant les heures de pointe ». Le slogan ne se vend pas. Les directions marketing savent que dire à la moitié de leurs clients qu'ils sont des citoyens de seconde zone du réseau est le plus court chemin vers une crise de réputation. C'est pour ça qu'on vous vend « plus de Go », « 5G ultra rapide », « roaming inclus dans 110 pays » — des promesses qui sonnent positivement sans jamais dire à personne qu'il est désavantagé. - -### L'effet boule de neige serait toxique - -Imagine que ça se mette quand même en place. Les riches passent devant. Les antennes restent saturées pour les autres, qui se mettent à payer plus pour échapper à la saturation, ce qui sature encore plus les bas forfaits, ce qui pousse encore plus de gens à monter en gamme. Au bout de cinq ans, on a un réseau à deux vitesses où les forfaits modestes deviennent quasi inutilisables aux heures critiques, et où la connexion mobile correcte devient un service de luxe. Ce n'est plus un service de télécommunications, c'est un système de classes. - -C'est exactement ce que la neutralité du net cherche à empêcher. Pas par idéologie, mais parce qu'on a déjà vu où mène ce genre de spirale dans les pays où elle n'est pas protégée. Certains opérateurs proposent par exemple des forfaits où Facebook et WhatsApp sont gratuits mais où le reste est payant, ce qui revient à dire que le bon internet est celui que l'opérateur a choisi pour vous. Ce n'est plus tout à fait le même service. - -### Ça ne résoudrait rien - -Quand un réseau sature, ce n'est pas un problème de répartition entre utilisateurs, c'est un problème de **capacité totale**. Faire passer Pierre avant Paul ne crée pas un seul bit de bande passante supplémentaire. Ça déplace juste le problème de l'un vers l'autre. La vraie solution, quand une cellule sature trop souvent, c'est d'installer plus d'antennes, de densifier le réseau, de basculer sur une fréquence plus performante ou de passer à la génération suivante. C'est cher, c'est long, ça implique des autorisations administratives et des négociations foncières, mais c'est la seule réponse qui tient la route. Prioriser, c'est rapide, mais ça repousse le mur, ça ne le déplace pas. - -C'est comme si on proposait une voie réservée aux Mercedes sur l'A7 un samedi de chassé-croisé. Techniquement, on peut peindre la ligne au sol et installer les panneaux dans la matinée. Mais cette voie ne réduit pas le bouchon, elle le concentre sur les voies restantes ; elle écorne le principe d'égalité d'accès à l'infrastructure publique ; et elle ne change rien au problème de fond, qui est qu'il y a trop de voitures pour la route disponible. La vraie solution reste la même qu'avant : élargir l'autoroute, ou convaincre une partie des gens de prendre le train. - -### Le caveat 5G - -Une nuance honnête pour finir. Le *network slicing* complique le débat juridique. Un opérateur peut créer des tranches de réseau avec des qualités différenciées en toute légalité quand il s'agit d'usages spécialisés — santé, industrie, transports. La question qui agite régulateurs et juristes depuis plusieurs années est de savoir où finit le service spécialisé légitime et où commence le contournement déguisé de la neutralité du net. L'ARCEP a ouvert ce chantier, et c'est probablement là, plus que dans une revanche commerciale brutale sur les forfaits premium, que se jouera la prochaine bataille. - -Mais pour répondre simplement à la question : non, votre forfait à 50 € ne vous donne pas la priorité réseau sur celui de votre voisin à 10 €. Il vous donne plus de data, parfois un meilleur débit théorique, des options en plus. Pas une place dans la file. \ No newline at end of file diff --git a/4f443bcb-b0d4-47f8-837d-61627e6c94f2/meta.json b/4f443bcb-b0d4-47f8-837d-61627e6c94f2/meta.json deleted file mode 100644 index c3e9f8f..0000000 --- a/4f443bcb-b0d4-47f8-837d-61627e6c94f2/meta.json +++ /dev/null @@ -1,162 +0,0 @@ -{ - "uuid": "4f443bcb-b0d4-47f8-837d-61627e6c94f2", - "slug": "priorites-et-acces-au-reseau-en-4g-et-5g", - "title": "Pourquoi le réseau mobile ne s'effondre pas le jour où tout le monde téléphone en même temps", - "author": "cedric@abonnel.fr", - "published": true, - "published_at": "2026-01-06 22:21", - "created_at": "2026-01-06 22:21:04", - "updated_at": "2026-05-11 23:40:18", - "revisions": [ - { - "n": 1, - "date": "2026-05-11 23:06:50", - "comment": "", - "title": "Comment les réseaux mobiles tiennent debout quand tout le monde téléphone en même temps" - }, - { - "n": 2, - "date": "2026-05-11 23:09:07", - "comment": "", - "title": "Comment les réseaux mobiles tiennent debout quand tout le monde téléphone en même temps" - }, - { - "n": 3, - "date": "2026-05-11 23:11:33", - "comment": "", - "title": "Comment les réseaux mobiles tiennent debout quand tout le monde téléphone en même temps" - }, - { - "n": 4, - "date": "2026-05-11 23:14:26", - "comment": "", - "title": "Comment les réseaux mobiles tiennent debout quand tout le monde téléphone en même temps" - }, - { - "n": 5, - "date": "2026-05-11 23:16:33", - "comment": "", - "title": "Comment les réseaux mobiles tiennent debout quand tout le monde téléphone en même temps" - }, - { - "n": 6, - "date": "2026-05-11 23:16:56", - "comment": "", - "title": "Comment les réseaux mobiles tiennent debout quand tout le monde téléphone en même temps" - }, - { - "n": 7, - "date": "2026-05-11 23:40:18", - "comment": "", - "title": "Pourquoi le réseau mobile ne s'effondre pas le jour où tout le monde téléphone en même temps" - } - ], - "cover": "cover.jpg", - "files_meta": { - "_preview.png": { - "author": "", - "source_url": "" - }, - "_thumb_dc5413a86e9c042a-22419.jpg": { - "author": "", - "source_url": "" - }, - "_thumb_945482b26e8a76ab-49498.png": { - "author": "", - "source_url": "" - }, - "_thumb_a1080cd703289e6b-144512.png": { - "author": "", - "source_url": "" - }, - "_thumb_cae639a42d79414f-68314.jpg": { - "author": "", - "source_url": "" - }, - "03bcf841dafcc9f4-87771.jpg": { - "author": "", - "source_url": "https://www.ariase.com/uploads/media/124b4e1790cf20b8fed653884ef1eb46d235922f.jpeg" - }, - "cover.jpg": { - "author": "", - "source_url": "" - } - }, - "external_links": [ - { - "url": "https://arxiv.org/pdf/2012.05520", - "name": "An Overview of 5G System Accessibility Differentiation and Control", - "added_at": "2026-05-11 23:04:53", - "author": "-", - "meta": { - "mime": "application/pdf", - "size": 717772, - "description": "IEEE Transactions on Magnetics", - "date": "2021-09-28 10:31:29+02:00", - "subject": "IEEE Transactions on Magnetics", - "creator": "-", - "producer": "Microsoft® Word for Microsoft 365", - "pages": 9, - "pdf_version": "PDF 1.7", - "page_size": "Letter (216×279 mm)" - } - }, - { - "url": "https://www.techplayon.com/5g-nr-cell-access-control/", - "name": "5G NR Cell Access Control - Techplayon - RRC Signalling", - "added_at": "2026-05-11 23:05:34", - "author": "Author", - "meta": { - "mime": "text/html", - "size": 79963, - "description": "Access Control barring refers to a traffic congestion control mechanism to secure and ensure the success of critical communications", - "og_image": "/file?uuid=4f443bcb-b0d4-47f8-837d-61627e6c94f2&name=_thumb_dc5413a86e9c042a-22419.jpg", - "site_name": "Techplayon", - "og_type": "article", - "language": "en_US", - "date": "2019-12-21T17:44:54+00:00", - "canonical": "https://www.techplayon.com/5g-nr-cell-access-control/" - } - }, - { - "url": "https://simnovus.com/unified-access-control-uac-the-gatekeeper-of-5g-networks/", - "name": "Unified Access Control (UAC): The Gatekeeper of 5G Networks - Simnovus", - "added_at": "2026-05-11 23:11:58", - "meta": { - "mime": "text/html", - "size": 124603, - "description": "Unified Access Control (UAC) is a fundamental component of 5G networks that governs access to network resources. It replaces the traditional access control", - "og_image": "/file?uuid=4f443bcb-b0d4-47f8-837d-61627e6c94f2&name=_thumb_cae639a42d79414f-68314.jpg", - "site_name": "Simnovus", - "og_type": "article", - "language": "en_US", - "date": "2024-08-14T10:58:09+05:30", - "canonical": "https://simnovus.com/unified-access-control-uac-the-gatekeeper-of-5g-networks/" - } - }, - { - "url": "https://www.sharetechnote.com/html/5G/5G_UAC.html", - "name": "5G | ShareTechnote", - "added_at": "2026-05-11 23:12:20", - "meta": { - "mime": "text/html", - "size": 28707, - "og_image": "/file?uuid=4f443bcb-b0d4-47f8-837d-61627e6c94f2&name=_thumb_a1080cd703289e6b-144512.png" - } - }, - { - "url": "https://www.telecomgurukul.com/post/advanced-access-control-mechanisms-in-lte-and-5g-nr-networks", - "name": "Advanced Access Control Mechanisms in LTE and 5G NR Networks", - "added_at": "2026-05-11 23:14:17", - "meta": { - "mime": "text/html", - "size": 1344890, - "og_image": "/file?uuid=4f443bcb-b0d4-47f8-837d-61627e6c94f2&name=_thumb_945482b26e8a76ab-49498.png" - } - } - ], - "seo_title": "", - "seo_description": "", - "og_image": "", - "category": "télécom" -} diff --git a/4f443bcb-b0d4-47f8-837d-61627e6c94f2/revisions/0001.md b/4f443bcb-b0d4-47f8-837d-61627e6c94f2/revisions/0001.md deleted file mode 100644 index 3c19ca1..0000000 --- a/4f443bcb-b0d4-47f8-837d-61627e6c94f2/revisions/0001.md +++ /dev/null @@ -1,80 +0,0 @@ -Un attentat, un séisme, un match du Stade de France, une grande panne d'électricité. Dans ces moments-là, des centaines de milliers de gens dégainent leur téléphone en même temps. Le réseau mobile, qui est dimensionné pour un usage moyen et pas pour un pic massif simultané, devrait théoriquement s'effondrer. La plupart du temps, il tient. Pas parfaitement, pas pour tout le monde, mais il tient — et surtout, les appels d'urgence continuent de passer. C'est le résultat d'une série de mécanismes empilés depuis les années 1990, et que la 4G et la 5G ont raffinés. Voici comment ça marche, sans le jargon mais sans non plus mentir sur ce qui se passe vraiment. - -## Trois questions, pas une - -Dans un réseau cellulaire moderne, l'opérateur doit répondre à trois questions distinctes quand la cellule commence à chauffer. Qui a le droit de se connecter ? Une fois connecté, qui passe en premier ? Et quels services doivent absolument continuer à fonctionner, quoi qu'il arrive ? - -La 2G ne savait répondre qu'à la première. Elle filtrait à l'entrée et basta. La 4G a ajouté la deuxième : une fois admis sur le réseau, votre trafic n'est plus traité de la même manière selon son importance. La 5G ajoute la troisième : elle peut littéralement créer des réseaux virtuels parallèles, dont certains sont réservés à des usages critiques et isolés des autres. - -## En 4G : filtrer puis prioriser - -### Filtrer à l'entrée - -Chaque carte SIM porte un numéro de classe d'accès, hérité du GSM, entre 0 et 15. Les classes 0 à 9 couvrent le grand public — autrement dit nous tous. Les classes 11 à 15 sont réservées : services de secours, autorités publiques, personnel opérateur, usages militaires selon les pays. - -Quand une cellule est surchargée, l'eNodeB (la station de base 4G) diffuse une consigne aux téléphones du secteur : « les classes 0 à 9, vous attendez ». C'est l'**Access Class Barring**. Concrètement, votre téléphone reçoit ce message et bloque lui-même votre tentative d'appel ou de connexion data, sans même envoyer la demande à la station. C'est élégant parce que ça soulage la station avant même qu'elle ne soit sollicitée. Les classes prioritaires, elles, passent sans encombre. - -Il existe une variante plus dure appelée **Extended Access Barring**, conçue pour les objets connectés et les usages non urgents. Quand une vraie crise se déclare, l'opérateur peut couper les compteurs intelligents, les alarmes domestiques et autres équipements bavards pour préserver la bande passante humaine. - -### Prioriser une fois connecté - -Là où la 4G a vraiment innové, c'est en introduisant le **QCI** — *QoS Class Identifier*. Chaque flux de données qui transite sur le réseau se voit attribuer un numéro entre 1 et 9 (et quelques valeurs au-dessus pour des cas spéciaux) qui dit à l'infrastructure comment le traiter. - -Quelques exemples concrets : - -| Usage | QCI | Traitement | -|---|---|---| -| Appel VoLTE (voix sur LTE) | 1 | Latence minimale, débit garanti | -| Signalisation réseau | 5 | Très haute priorité | -| Visioconférence | 2 | Débit garanti | -| Streaming vidéo | 6 ou 8 | Best effort prioritaire | -| Web et internet général | 9 | Best effort standard | - -Quand la cellule est encombrée, le routeur sait quoi sacrifier en premier. YouTube va ralentir, les pages web vont mettre du temps à charger, mais l'appel téléphonique de votre voisin reste audible. C'est un compromis assumé : on dégrade volontairement les usages secondaires pour préserver les usages critiques. - -## En 5G : ajouter le découpage - -### Un mécanisme d'accès refondu - -La 5G garde l'esprit du barring mais change son nom et sa mécanique. L'ancien Access Class Barring est remplacé par l'**UAC** — *Unified Access Control*, introduit dans la Release 15 du 3GPP. L'idée est d'unifier dans un seul cadre ce qui était auparavant éparpillé entre ACB, EAB et d'autres mécanismes spécifiques. - -UAC repose sur deux notions. Les **Access Identities** identifient qui vous êtes (utilisateur lambda, abonné à un service prioritaire type MPS ou MCS, personnel d'urgence, agent opérateur). Les **Access Categories** identifient ce que vous essayez de faire (appel d'urgence, connexion data normale, SMS, mise à jour de localisation). La combinaison des deux détermine si votre demande passe ou pas. - -Ce qui change vraiment, c'est la granularité. En 4G, on bloquait une classe entière. En 5G, on peut bloquer un type d'action précis pour un type d'utilisateur précis — par exemple « les abonnés grand public ne peuvent plus initier de nouveaux appels data, mais les SMS et les appels voix continuent ». L'opérateur peut aussi définir ses propres catégories d'accès, calées sur sa politique commerciale et technique. - -### Le QCI devient le 5QI - -Même logique qu'en 4G mais avec plus de finesse. Le **5QI** (*5G QoS Identifier*) propose davantage de niveaux et tient compte de cas que la 4G gérait mal, notamment les services à très basse latence pour les usines connectées ou la voiture autonome. La voix d'urgence garde son sommet, les données critiques industrielles s'intercalent juste après, le streaming et le web restent en bas de la pile. - -### La vraie nouveauté : le network slicing - -C'est l'apport majeur de la 5G en termes de gestion de crise. Au lieu de partager une seule infrastructure entre tous les usages, on peut maintenant la **découper logiciellement en tranches** — des *slices* — qui se comportent comme autant de réseaux indépendants, alors qu'ils tournent sur les mêmes antennes et les mêmes câbles. - -Un opérateur peut par exemple maintenir : - -- une tranche pour le grand public, avec ses millions d'abonnés et son trafic massif, -- une tranche pour les services d'urgence et de sécurité, dimensionnée pour rester fluide même quand le reste sature, -- une tranche pour les objets connectés industriels, avec des garanties de latence, -- une tranche pour les opérateurs critiques type SNCF, EDF, hôpitaux. - -Chaque tranche a ses propres règles d'admission, ses propres priorités, ses propres garanties de performance. Si la tranche grand public est totalement saturée, celle des secours ne le sait même pas. Cette isolation est ce qui distingue le plus fondamentalement la 5G des générations précédentes, où tout le monde se battait pour les mêmes ressources, avec juste des priorités différentes. - -## Et le forfait premium dans tout ça ? - -Question qu'on entend souvent : si je paie un forfait à 50 € au lieu d'un forfait à 10 €, est-ce que je passe avant les autres en cas de saturation ? - -Non. - -Les priorités techniques décrites au-dessus ne dépendent ni du prix du forfait, ni des options commerciales souscrites. Elles dépendent du profil réseau associé à votre SIM (lui-même fonction de votre statut : grand public, secours, opérateur, services prioritaires officiels), et des politiques de gestion de crise programmées par l'opérateur. Un cadre dirigeant avec un forfait illimité reste, du point de vue du réseau, un abonné de classe d'accès 0-9 comme tout le monde. - -Le forfait premium vous donne plus de data, parfois un meilleur débit théorique en conditions normales, des options de roaming, du cloud gratuit. Il ne vous donne pas la priorité face à un pompier ou à un préfet. - -## Pour résumer - -| Génération | Ce qui est contrôlé | Comment | -|---|---|---| -| 2G | L'accès au réseau | Classes d'accès 0-15 | -| 4G | L'accès + la priorité du trafic | ACB / EAB + QCI | -| 5G | L'accès + la priorité + l'isolation des services | UAC + 5QI + network slicing | - -Ce qui est intéressant, c'est que ces mécanismes restent invisibles tant que tout va bien. Vous ne savez pas qu'ils existent. Vous découvrez leur existence le jour où votre voisin n'arrive plus à charger ses mails alors que les pompiers, eux, continuent de communiquer normalement. Ce jour-là, ce n'est pas de la magie. C'est trente ans d'ingénierie radio qui ont anticipé que ça arriverait. \ No newline at end of file diff --git a/4f443bcb-b0d4-47f8-837d-61627e6c94f2/revisions/0002.md b/4f443bcb-b0d4-47f8-837d-61627e6c94f2/revisions/0002.md deleted file mode 100644 index 66bf0c2..0000000 --- a/4f443bcb-b0d4-47f8-837d-61627e6c94f2/revisions/0002.md +++ /dev/null @@ -1,80 +0,0 @@ -Un attentat, un séisme, un match du Stade de France, une grande panne d'électricité. Dans ces moments-là, des centaines de milliers de gens dégainent leur téléphone en même temps. Le réseau mobile, qui est dimensionné pour un usage moyen et pas pour un pic massif simultané, devrait théoriquement s'effondrer. La plupart du temps, il tient. Pas parfaitement, pas pour tout le monde, mais il tient — et surtout, les appels d'urgence continuent de passer. C'est le résultat d'une série de mécanismes empilés depuis les années 1990, et que la 4G et la 5G ont raffinés. Voici comment ça marche, sans le jargon mais sans non plus mentir sur ce qui se passe vraiment. - -## Trois questions, pas une - -Dans un réseau cellulaire moderne, l'opérateur doit répondre à trois questions distinctes quand la cellule commence à chauffer. Qui a le droit de se connecter ? Une fois connecté, qui passe en premier ? Et quels services doivent absolument continuer à fonctionner, quoi qu'il arrive ? - -La 2G ne savait répondre qu'à la première. Elle filtrait à l'entrée et basta. La 4G a ajouté la deuxième : une fois admis sur le réseau, votre trafic n'est plus traité de la même manière selon son importance. La 5G ajoute la troisième : elle peut littéralement créer des réseaux virtuels parallèles, dont certains sont réservés à des usages critiques et isolés des autres. - -## En 4G : filtrer puis prioriser - -### Filtrer à l'entrée - -Chaque carte SIM porte un numéro de classe d'accès, hérité du GSM, entre 0 et 15. Les classes 0 à 9 couvrent le grand public — autrement dit nous tous. Les classes 11 à 15 sont réservées : services de secours, autorités publiques, personnel opérateur, usages militaires selon les pays. - -Quand une cellule est surchargée, l'eNodeB (la station de base 4G) diffuse une consigne aux téléphones du secteur : « les classes 0 à 9, vous attendez ». C'est l'**Access Class Barring**. Concrètement, votre téléphone reçoit ce message et bloque lui-même votre tentative d'appel ou de connexion data, sans même envoyer la demande à la station. C'est élégant parce que ça soulage la station avant même qu'elle ne soit sollicitée. Les classes prioritaires, elles, passent sans encombre. - -Il existe une variante plus dure appelée **Extended Access Barring**, conçue pour les objets connectés et les usages non urgents. Quand une vraie crise se déclare, l'opérateur peut couper les compteurs intelligents, les alarmes domestiques et autres équipements bavards pour préserver la bande passante humaine. - -### Prioriser une fois connecté - -Là où la 4G a vraiment innové, c'est en introduisant le **QCI** — *QoS Class Identifier*. Chaque flux de données qui transite sur le réseau se voit attribuer un numéro entre 1 et 9 (et quelques valeurs au-dessus pour des cas spéciaux) qui dit à l'infrastructure comment le traiter. - -Quelques exemples concrets : - -| Usage | QCI | Traitement | -|---|---|---| -| Appel VoLTE (voix sur LTE) | 1 | Latence minimale, débit garanti | -| Signalisation réseau | 5 | Très haute priorité | -| Visioconférence | 2 | Débit garanti | -| Streaming vidéo | 6 ou 8 | Best effort prioritaire | -| Web et internet général | 9 | Best effort standard | - -Quand la cellule est encombrée, le routeur sait quoi sacrifier en premier. YouTube va ralentir, les pages web vont mettre du temps à charger, mais l'appel téléphonique de votre voisin reste audible. C'est un compromis assumé : on dégrade volontairement les usages secondaires pour préserver les usages critiques. - -## En 5G : ajouter le découpage - -### Un mécanisme d'accès refondu - -La 5G garde l'esprit du barring mais change son nom et sa mécanique. L'ancien Access Class Barring est remplacé par l'**UAC** — *Unified Access Control*, introduit dans la Release 15 du 3GPP. L'idée est d'unifier dans un seul cadre ce qui était auparavant éparpillé entre ACB, EAB et d'autres mécanismes spécifiques. - -UAC repose sur deux notions. Les **Access Identities** identifient qui vous êtes (utilisateur lambda, abonné à un service prioritaire type MPS ou MCS, personnel d'urgence, agent opérateur). Les **Access Categories** identifient ce que vous essayez de faire (appel d'urgence, connexion data normale, SMS, mise à jour de localisation). La combinaison des deux détermine si votre demande passe ou pas. - -Ce qui change vraiment, c'est la granularité. En 4G, on bloquait une classe entière. En 5G, on peut bloquer un type d'action précis pour un type d'utilisateur précis — par exemple « les abonnés grand public ne peuvent plus initier de nouveaux appels data, mais les SMS et les appels voix continuent ». L'opérateur peut aussi définir ses propres catégories d'accès, calées sur sa politique commerciale et technique. - -### Le QCI devient le 5QI - -Même logique qu'en 4G mais avec plus de finesse. Le **5QI** (*5G QoS Identifier*) propose davantage de niveaux et tient compte de cas que la 4G gérait mal, notamment les services à très basse latence pour les usines connectées ou la voiture autonome. La voix d'urgence garde son sommet, les données critiques industrielles s'intercalent juste après, le streaming et le web restent en bas de la pile. - -### La vraie nouveauté : le network slicing - -C'est l'apport majeur de la 5G en termes de gestion de crise. Au lieu de partager une seule infrastructure entre tous les usages, on peut maintenant la **découper logiciellement en tranches** — des *slices* — qui se comportent comme autant de réseaux indépendants, alors qu'ils tournent sur les mêmes antennes et les mêmes câbles. - -Un opérateur peut par exemple maintenir : - -- une tranche pour le grand public, avec ses millions d'abonnés et son trafic massif, -- une tranche pour les services d'urgence et de sécurité, dimensionnée pour rester fluide même quand le reste sature, -- une tranche pour les objets connectés industriels, avec des garanties de latence, -- une tranche pour les opérateurs critiques type SNCF, EDF, hôpitaux. - -Chaque tranche a ses propres règles d'admission, ses propres priorités, ses propres garanties de performance. Si la tranche grand public est totalement saturée, celle des secours ne le sait même pas. Cette isolation est ce qui distingue le plus fondamentalement la 5G des générations précédentes, où tout le monde se battait pour les mêmes ressources, avec juste des priorités différentes. - -## Et le forfait premium dans tout ça ? - -Question qu'on entend souvent : si je paie un forfait à 50 € au lieu d'un forfait à 10 €, est-ce que je passe avant les autres en cas de saturation ? - -Non. - -Les priorités techniques décrites au-dessus ne dépendent ni du prix du forfait, ni des options commerciales souscrites. Elles dépendent du profil réseau associé à votre SIM (lui-même fonction de votre statut : grand public, secours, opérateur, services prioritaires officiels), et des politiques de gestion de crise programmées par l'opérateur. Un cadre dirigeant avec un forfait illimité reste, du point de vue du réseau, un abonné de classe d'accès 0-9 comme tout le monde. - -Le forfait premium vous donne plus de data, parfois un meilleur débit théorique en conditions normales, des options de roaming, du cloud gratuit. Il ne vous donne pas la priorité face à un pompier ou à un préfet. - -## Pour résumer - -| Génération | Ce qui est contrôlé | Comment | -|---|---|---| -| 2G | L'accès au réseau | Classes d'accès 0-15 | -| 4G | L'accès + la priorité du trafic | ACB / EAB + QCI | -| 5G | L'accès + la priorité + l'isolation des services | UAC + 5QI + network slicing | - -Ce qui est intéressant, c'est que ces mécanismes restent invisibles tant que tout va bien. Vous ne savez pas qu'ils existent. Vous découvrez leur existence le jour où votre voisin n'arrive plus à charger ses mails alors que les pompiers, eux, continuent de communiquer normalement. Ce jour-là, ce n'est pas de la magie. C'est trente ans d'ingénierie radio qui ont anticipé que ça arriverait. \ No newline at end of file diff --git a/4f443bcb-b0d4-47f8-837d-61627e6c94f2/revisions/0003.md b/4f443bcb-b0d4-47f8-837d-61627e6c94f2/revisions/0003.md deleted file mode 100644 index 66bf0c2..0000000 --- a/4f443bcb-b0d4-47f8-837d-61627e6c94f2/revisions/0003.md +++ /dev/null @@ -1,80 +0,0 @@ -Un attentat, un séisme, un match du Stade de France, une grande panne d'électricité. Dans ces moments-là, des centaines de milliers de gens dégainent leur téléphone en même temps. Le réseau mobile, qui est dimensionné pour un usage moyen et pas pour un pic massif simultané, devrait théoriquement s'effondrer. La plupart du temps, il tient. Pas parfaitement, pas pour tout le monde, mais il tient — et surtout, les appels d'urgence continuent de passer. C'est le résultat d'une série de mécanismes empilés depuis les années 1990, et que la 4G et la 5G ont raffinés. Voici comment ça marche, sans le jargon mais sans non plus mentir sur ce qui se passe vraiment. - -## Trois questions, pas une - -Dans un réseau cellulaire moderne, l'opérateur doit répondre à trois questions distinctes quand la cellule commence à chauffer. Qui a le droit de se connecter ? Une fois connecté, qui passe en premier ? Et quels services doivent absolument continuer à fonctionner, quoi qu'il arrive ? - -La 2G ne savait répondre qu'à la première. Elle filtrait à l'entrée et basta. La 4G a ajouté la deuxième : une fois admis sur le réseau, votre trafic n'est plus traité de la même manière selon son importance. La 5G ajoute la troisième : elle peut littéralement créer des réseaux virtuels parallèles, dont certains sont réservés à des usages critiques et isolés des autres. - -## En 4G : filtrer puis prioriser - -### Filtrer à l'entrée - -Chaque carte SIM porte un numéro de classe d'accès, hérité du GSM, entre 0 et 15. Les classes 0 à 9 couvrent le grand public — autrement dit nous tous. Les classes 11 à 15 sont réservées : services de secours, autorités publiques, personnel opérateur, usages militaires selon les pays. - -Quand une cellule est surchargée, l'eNodeB (la station de base 4G) diffuse une consigne aux téléphones du secteur : « les classes 0 à 9, vous attendez ». C'est l'**Access Class Barring**. Concrètement, votre téléphone reçoit ce message et bloque lui-même votre tentative d'appel ou de connexion data, sans même envoyer la demande à la station. C'est élégant parce que ça soulage la station avant même qu'elle ne soit sollicitée. Les classes prioritaires, elles, passent sans encombre. - -Il existe une variante plus dure appelée **Extended Access Barring**, conçue pour les objets connectés et les usages non urgents. Quand une vraie crise se déclare, l'opérateur peut couper les compteurs intelligents, les alarmes domestiques et autres équipements bavards pour préserver la bande passante humaine. - -### Prioriser une fois connecté - -Là où la 4G a vraiment innové, c'est en introduisant le **QCI** — *QoS Class Identifier*. Chaque flux de données qui transite sur le réseau se voit attribuer un numéro entre 1 et 9 (et quelques valeurs au-dessus pour des cas spéciaux) qui dit à l'infrastructure comment le traiter. - -Quelques exemples concrets : - -| Usage | QCI | Traitement | -|---|---|---| -| Appel VoLTE (voix sur LTE) | 1 | Latence minimale, débit garanti | -| Signalisation réseau | 5 | Très haute priorité | -| Visioconférence | 2 | Débit garanti | -| Streaming vidéo | 6 ou 8 | Best effort prioritaire | -| Web et internet général | 9 | Best effort standard | - -Quand la cellule est encombrée, le routeur sait quoi sacrifier en premier. YouTube va ralentir, les pages web vont mettre du temps à charger, mais l'appel téléphonique de votre voisin reste audible. C'est un compromis assumé : on dégrade volontairement les usages secondaires pour préserver les usages critiques. - -## En 5G : ajouter le découpage - -### Un mécanisme d'accès refondu - -La 5G garde l'esprit du barring mais change son nom et sa mécanique. L'ancien Access Class Barring est remplacé par l'**UAC** — *Unified Access Control*, introduit dans la Release 15 du 3GPP. L'idée est d'unifier dans un seul cadre ce qui était auparavant éparpillé entre ACB, EAB et d'autres mécanismes spécifiques. - -UAC repose sur deux notions. Les **Access Identities** identifient qui vous êtes (utilisateur lambda, abonné à un service prioritaire type MPS ou MCS, personnel d'urgence, agent opérateur). Les **Access Categories** identifient ce que vous essayez de faire (appel d'urgence, connexion data normale, SMS, mise à jour de localisation). La combinaison des deux détermine si votre demande passe ou pas. - -Ce qui change vraiment, c'est la granularité. En 4G, on bloquait une classe entière. En 5G, on peut bloquer un type d'action précis pour un type d'utilisateur précis — par exemple « les abonnés grand public ne peuvent plus initier de nouveaux appels data, mais les SMS et les appels voix continuent ». L'opérateur peut aussi définir ses propres catégories d'accès, calées sur sa politique commerciale et technique. - -### Le QCI devient le 5QI - -Même logique qu'en 4G mais avec plus de finesse. Le **5QI** (*5G QoS Identifier*) propose davantage de niveaux et tient compte de cas que la 4G gérait mal, notamment les services à très basse latence pour les usines connectées ou la voiture autonome. La voix d'urgence garde son sommet, les données critiques industrielles s'intercalent juste après, le streaming et le web restent en bas de la pile. - -### La vraie nouveauté : le network slicing - -C'est l'apport majeur de la 5G en termes de gestion de crise. Au lieu de partager une seule infrastructure entre tous les usages, on peut maintenant la **découper logiciellement en tranches** — des *slices* — qui se comportent comme autant de réseaux indépendants, alors qu'ils tournent sur les mêmes antennes et les mêmes câbles. - -Un opérateur peut par exemple maintenir : - -- une tranche pour le grand public, avec ses millions d'abonnés et son trafic massif, -- une tranche pour les services d'urgence et de sécurité, dimensionnée pour rester fluide même quand le reste sature, -- une tranche pour les objets connectés industriels, avec des garanties de latence, -- une tranche pour les opérateurs critiques type SNCF, EDF, hôpitaux. - -Chaque tranche a ses propres règles d'admission, ses propres priorités, ses propres garanties de performance. Si la tranche grand public est totalement saturée, celle des secours ne le sait même pas. Cette isolation est ce qui distingue le plus fondamentalement la 5G des générations précédentes, où tout le monde se battait pour les mêmes ressources, avec juste des priorités différentes. - -## Et le forfait premium dans tout ça ? - -Question qu'on entend souvent : si je paie un forfait à 50 € au lieu d'un forfait à 10 €, est-ce que je passe avant les autres en cas de saturation ? - -Non. - -Les priorités techniques décrites au-dessus ne dépendent ni du prix du forfait, ni des options commerciales souscrites. Elles dépendent du profil réseau associé à votre SIM (lui-même fonction de votre statut : grand public, secours, opérateur, services prioritaires officiels), et des politiques de gestion de crise programmées par l'opérateur. Un cadre dirigeant avec un forfait illimité reste, du point de vue du réseau, un abonné de classe d'accès 0-9 comme tout le monde. - -Le forfait premium vous donne plus de data, parfois un meilleur débit théorique en conditions normales, des options de roaming, du cloud gratuit. Il ne vous donne pas la priorité face à un pompier ou à un préfet. - -## Pour résumer - -| Génération | Ce qui est contrôlé | Comment | -|---|---|---| -| 2G | L'accès au réseau | Classes d'accès 0-15 | -| 4G | L'accès + la priorité du trafic | ACB / EAB + QCI | -| 5G | L'accès + la priorité + l'isolation des services | UAC + 5QI + network slicing | - -Ce qui est intéressant, c'est que ces mécanismes restent invisibles tant que tout va bien. Vous ne savez pas qu'ils existent. Vous découvrez leur existence le jour où votre voisin n'arrive plus à charger ses mails alors que les pompiers, eux, continuent de communiquer normalement. Ce jour-là, ce n'est pas de la magie. C'est trente ans d'ingénierie radio qui ont anticipé que ça arriverait. \ No newline at end of file diff --git a/4f443bcb-b0d4-47f8-837d-61627e6c94f2/revisions/0004.md b/4f443bcb-b0d4-47f8-837d-61627e6c94f2/revisions/0004.md deleted file mode 100644 index 3c19ca1..0000000 --- a/4f443bcb-b0d4-47f8-837d-61627e6c94f2/revisions/0004.md +++ /dev/null @@ -1,80 +0,0 @@ -Un attentat, un séisme, un match du Stade de France, une grande panne d'électricité. Dans ces moments-là, des centaines de milliers de gens dégainent leur téléphone en même temps. Le réseau mobile, qui est dimensionné pour un usage moyen et pas pour un pic massif simultané, devrait théoriquement s'effondrer. La plupart du temps, il tient. Pas parfaitement, pas pour tout le monde, mais il tient — et surtout, les appels d'urgence continuent de passer. C'est le résultat d'une série de mécanismes empilés depuis les années 1990, et que la 4G et la 5G ont raffinés. Voici comment ça marche, sans le jargon mais sans non plus mentir sur ce qui se passe vraiment. - -## Trois questions, pas une - -Dans un réseau cellulaire moderne, l'opérateur doit répondre à trois questions distinctes quand la cellule commence à chauffer. Qui a le droit de se connecter ? Une fois connecté, qui passe en premier ? Et quels services doivent absolument continuer à fonctionner, quoi qu'il arrive ? - -La 2G ne savait répondre qu'à la première. Elle filtrait à l'entrée et basta. La 4G a ajouté la deuxième : une fois admis sur le réseau, votre trafic n'est plus traité de la même manière selon son importance. La 5G ajoute la troisième : elle peut littéralement créer des réseaux virtuels parallèles, dont certains sont réservés à des usages critiques et isolés des autres. - -## En 4G : filtrer puis prioriser - -### Filtrer à l'entrée - -Chaque carte SIM porte un numéro de classe d'accès, hérité du GSM, entre 0 et 15. Les classes 0 à 9 couvrent le grand public — autrement dit nous tous. Les classes 11 à 15 sont réservées : services de secours, autorités publiques, personnel opérateur, usages militaires selon les pays. - -Quand une cellule est surchargée, l'eNodeB (la station de base 4G) diffuse une consigne aux téléphones du secteur : « les classes 0 à 9, vous attendez ». C'est l'**Access Class Barring**. Concrètement, votre téléphone reçoit ce message et bloque lui-même votre tentative d'appel ou de connexion data, sans même envoyer la demande à la station. C'est élégant parce que ça soulage la station avant même qu'elle ne soit sollicitée. Les classes prioritaires, elles, passent sans encombre. - -Il existe une variante plus dure appelée **Extended Access Barring**, conçue pour les objets connectés et les usages non urgents. Quand une vraie crise se déclare, l'opérateur peut couper les compteurs intelligents, les alarmes domestiques et autres équipements bavards pour préserver la bande passante humaine. - -### Prioriser une fois connecté - -Là où la 4G a vraiment innové, c'est en introduisant le **QCI** — *QoS Class Identifier*. Chaque flux de données qui transite sur le réseau se voit attribuer un numéro entre 1 et 9 (et quelques valeurs au-dessus pour des cas spéciaux) qui dit à l'infrastructure comment le traiter. - -Quelques exemples concrets : - -| Usage | QCI | Traitement | -|---|---|---| -| Appel VoLTE (voix sur LTE) | 1 | Latence minimale, débit garanti | -| Signalisation réseau | 5 | Très haute priorité | -| Visioconférence | 2 | Débit garanti | -| Streaming vidéo | 6 ou 8 | Best effort prioritaire | -| Web et internet général | 9 | Best effort standard | - -Quand la cellule est encombrée, le routeur sait quoi sacrifier en premier. YouTube va ralentir, les pages web vont mettre du temps à charger, mais l'appel téléphonique de votre voisin reste audible. C'est un compromis assumé : on dégrade volontairement les usages secondaires pour préserver les usages critiques. - -## En 5G : ajouter le découpage - -### Un mécanisme d'accès refondu - -La 5G garde l'esprit du barring mais change son nom et sa mécanique. L'ancien Access Class Barring est remplacé par l'**UAC** — *Unified Access Control*, introduit dans la Release 15 du 3GPP. L'idée est d'unifier dans un seul cadre ce qui était auparavant éparpillé entre ACB, EAB et d'autres mécanismes spécifiques. - -UAC repose sur deux notions. Les **Access Identities** identifient qui vous êtes (utilisateur lambda, abonné à un service prioritaire type MPS ou MCS, personnel d'urgence, agent opérateur). Les **Access Categories** identifient ce que vous essayez de faire (appel d'urgence, connexion data normale, SMS, mise à jour de localisation). La combinaison des deux détermine si votre demande passe ou pas. - -Ce qui change vraiment, c'est la granularité. En 4G, on bloquait une classe entière. En 5G, on peut bloquer un type d'action précis pour un type d'utilisateur précis — par exemple « les abonnés grand public ne peuvent plus initier de nouveaux appels data, mais les SMS et les appels voix continuent ». L'opérateur peut aussi définir ses propres catégories d'accès, calées sur sa politique commerciale et technique. - -### Le QCI devient le 5QI - -Même logique qu'en 4G mais avec plus de finesse. Le **5QI** (*5G QoS Identifier*) propose davantage de niveaux et tient compte de cas que la 4G gérait mal, notamment les services à très basse latence pour les usines connectées ou la voiture autonome. La voix d'urgence garde son sommet, les données critiques industrielles s'intercalent juste après, le streaming et le web restent en bas de la pile. - -### La vraie nouveauté : le network slicing - -C'est l'apport majeur de la 5G en termes de gestion de crise. Au lieu de partager une seule infrastructure entre tous les usages, on peut maintenant la **découper logiciellement en tranches** — des *slices* — qui se comportent comme autant de réseaux indépendants, alors qu'ils tournent sur les mêmes antennes et les mêmes câbles. - -Un opérateur peut par exemple maintenir : - -- une tranche pour le grand public, avec ses millions d'abonnés et son trafic massif, -- une tranche pour les services d'urgence et de sécurité, dimensionnée pour rester fluide même quand le reste sature, -- une tranche pour les objets connectés industriels, avec des garanties de latence, -- une tranche pour les opérateurs critiques type SNCF, EDF, hôpitaux. - -Chaque tranche a ses propres règles d'admission, ses propres priorités, ses propres garanties de performance. Si la tranche grand public est totalement saturée, celle des secours ne le sait même pas. Cette isolation est ce qui distingue le plus fondamentalement la 5G des générations précédentes, où tout le monde se battait pour les mêmes ressources, avec juste des priorités différentes. - -## Et le forfait premium dans tout ça ? - -Question qu'on entend souvent : si je paie un forfait à 50 € au lieu d'un forfait à 10 €, est-ce que je passe avant les autres en cas de saturation ? - -Non. - -Les priorités techniques décrites au-dessus ne dépendent ni du prix du forfait, ni des options commerciales souscrites. Elles dépendent du profil réseau associé à votre SIM (lui-même fonction de votre statut : grand public, secours, opérateur, services prioritaires officiels), et des politiques de gestion de crise programmées par l'opérateur. Un cadre dirigeant avec un forfait illimité reste, du point de vue du réseau, un abonné de classe d'accès 0-9 comme tout le monde. - -Le forfait premium vous donne plus de data, parfois un meilleur débit théorique en conditions normales, des options de roaming, du cloud gratuit. Il ne vous donne pas la priorité face à un pompier ou à un préfet. - -## Pour résumer - -| Génération | Ce qui est contrôlé | Comment | -|---|---|---| -| 2G | L'accès au réseau | Classes d'accès 0-15 | -| 4G | L'accès + la priorité du trafic | ACB / EAB + QCI | -| 5G | L'accès + la priorité + l'isolation des services | UAC + 5QI + network slicing | - -Ce qui est intéressant, c'est que ces mécanismes restent invisibles tant que tout va bien. Vous ne savez pas qu'ils existent. Vous découvrez leur existence le jour où votre voisin n'arrive plus à charger ses mails alors que les pompiers, eux, continuent de communiquer normalement. Ce jour-là, ce n'est pas de la magie. C'est trente ans d'ingénierie radio qui ont anticipé que ça arriverait. \ No newline at end of file diff --git a/4f443bcb-b0d4-47f8-837d-61627e6c94f2/revisions/0005.md b/4f443bcb-b0d4-47f8-837d-61627e6c94f2/revisions/0005.md deleted file mode 100644 index 66bf0c2..0000000 --- a/4f443bcb-b0d4-47f8-837d-61627e6c94f2/revisions/0005.md +++ /dev/null @@ -1,80 +0,0 @@ -Un attentat, un séisme, un match du Stade de France, une grande panne d'électricité. Dans ces moments-là, des centaines de milliers de gens dégainent leur téléphone en même temps. Le réseau mobile, qui est dimensionné pour un usage moyen et pas pour un pic massif simultané, devrait théoriquement s'effondrer. La plupart du temps, il tient. Pas parfaitement, pas pour tout le monde, mais il tient — et surtout, les appels d'urgence continuent de passer. C'est le résultat d'une série de mécanismes empilés depuis les années 1990, et que la 4G et la 5G ont raffinés. Voici comment ça marche, sans le jargon mais sans non plus mentir sur ce qui se passe vraiment. - -## Trois questions, pas une - -Dans un réseau cellulaire moderne, l'opérateur doit répondre à trois questions distinctes quand la cellule commence à chauffer. Qui a le droit de se connecter ? Une fois connecté, qui passe en premier ? Et quels services doivent absolument continuer à fonctionner, quoi qu'il arrive ? - -La 2G ne savait répondre qu'à la première. Elle filtrait à l'entrée et basta. La 4G a ajouté la deuxième : une fois admis sur le réseau, votre trafic n'est plus traité de la même manière selon son importance. La 5G ajoute la troisième : elle peut littéralement créer des réseaux virtuels parallèles, dont certains sont réservés à des usages critiques et isolés des autres. - -## En 4G : filtrer puis prioriser - -### Filtrer à l'entrée - -Chaque carte SIM porte un numéro de classe d'accès, hérité du GSM, entre 0 et 15. Les classes 0 à 9 couvrent le grand public — autrement dit nous tous. Les classes 11 à 15 sont réservées : services de secours, autorités publiques, personnel opérateur, usages militaires selon les pays. - -Quand une cellule est surchargée, l'eNodeB (la station de base 4G) diffuse une consigne aux téléphones du secteur : « les classes 0 à 9, vous attendez ». C'est l'**Access Class Barring**. Concrètement, votre téléphone reçoit ce message et bloque lui-même votre tentative d'appel ou de connexion data, sans même envoyer la demande à la station. C'est élégant parce que ça soulage la station avant même qu'elle ne soit sollicitée. Les classes prioritaires, elles, passent sans encombre. - -Il existe une variante plus dure appelée **Extended Access Barring**, conçue pour les objets connectés et les usages non urgents. Quand une vraie crise se déclare, l'opérateur peut couper les compteurs intelligents, les alarmes domestiques et autres équipements bavards pour préserver la bande passante humaine. - -### Prioriser une fois connecté - -Là où la 4G a vraiment innové, c'est en introduisant le **QCI** — *QoS Class Identifier*. Chaque flux de données qui transite sur le réseau se voit attribuer un numéro entre 1 et 9 (et quelques valeurs au-dessus pour des cas spéciaux) qui dit à l'infrastructure comment le traiter. - -Quelques exemples concrets : - -| Usage | QCI | Traitement | -|---|---|---| -| Appel VoLTE (voix sur LTE) | 1 | Latence minimale, débit garanti | -| Signalisation réseau | 5 | Très haute priorité | -| Visioconférence | 2 | Débit garanti | -| Streaming vidéo | 6 ou 8 | Best effort prioritaire | -| Web et internet général | 9 | Best effort standard | - -Quand la cellule est encombrée, le routeur sait quoi sacrifier en premier. YouTube va ralentir, les pages web vont mettre du temps à charger, mais l'appel téléphonique de votre voisin reste audible. C'est un compromis assumé : on dégrade volontairement les usages secondaires pour préserver les usages critiques. - -## En 5G : ajouter le découpage - -### Un mécanisme d'accès refondu - -La 5G garde l'esprit du barring mais change son nom et sa mécanique. L'ancien Access Class Barring est remplacé par l'**UAC** — *Unified Access Control*, introduit dans la Release 15 du 3GPP. L'idée est d'unifier dans un seul cadre ce qui était auparavant éparpillé entre ACB, EAB et d'autres mécanismes spécifiques. - -UAC repose sur deux notions. Les **Access Identities** identifient qui vous êtes (utilisateur lambda, abonné à un service prioritaire type MPS ou MCS, personnel d'urgence, agent opérateur). Les **Access Categories** identifient ce que vous essayez de faire (appel d'urgence, connexion data normale, SMS, mise à jour de localisation). La combinaison des deux détermine si votre demande passe ou pas. - -Ce qui change vraiment, c'est la granularité. En 4G, on bloquait une classe entière. En 5G, on peut bloquer un type d'action précis pour un type d'utilisateur précis — par exemple « les abonnés grand public ne peuvent plus initier de nouveaux appels data, mais les SMS et les appels voix continuent ». L'opérateur peut aussi définir ses propres catégories d'accès, calées sur sa politique commerciale et technique. - -### Le QCI devient le 5QI - -Même logique qu'en 4G mais avec plus de finesse. Le **5QI** (*5G QoS Identifier*) propose davantage de niveaux et tient compte de cas que la 4G gérait mal, notamment les services à très basse latence pour les usines connectées ou la voiture autonome. La voix d'urgence garde son sommet, les données critiques industrielles s'intercalent juste après, le streaming et le web restent en bas de la pile. - -### La vraie nouveauté : le network slicing - -C'est l'apport majeur de la 5G en termes de gestion de crise. Au lieu de partager une seule infrastructure entre tous les usages, on peut maintenant la **découper logiciellement en tranches** — des *slices* — qui se comportent comme autant de réseaux indépendants, alors qu'ils tournent sur les mêmes antennes et les mêmes câbles. - -Un opérateur peut par exemple maintenir : - -- une tranche pour le grand public, avec ses millions d'abonnés et son trafic massif, -- une tranche pour les services d'urgence et de sécurité, dimensionnée pour rester fluide même quand le reste sature, -- une tranche pour les objets connectés industriels, avec des garanties de latence, -- une tranche pour les opérateurs critiques type SNCF, EDF, hôpitaux. - -Chaque tranche a ses propres règles d'admission, ses propres priorités, ses propres garanties de performance. Si la tranche grand public est totalement saturée, celle des secours ne le sait même pas. Cette isolation est ce qui distingue le plus fondamentalement la 5G des générations précédentes, où tout le monde se battait pour les mêmes ressources, avec juste des priorités différentes. - -## Et le forfait premium dans tout ça ? - -Question qu'on entend souvent : si je paie un forfait à 50 € au lieu d'un forfait à 10 €, est-ce que je passe avant les autres en cas de saturation ? - -Non. - -Les priorités techniques décrites au-dessus ne dépendent ni du prix du forfait, ni des options commerciales souscrites. Elles dépendent du profil réseau associé à votre SIM (lui-même fonction de votre statut : grand public, secours, opérateur, services prioritaires officiels), et des politiques de gestion de crise programmées par l'opérateur. Un cadre dirigeant avec un forfait illimité reste, du point de vue du réseau, un abonné de classe d'accès 0-9 comme tout le monde. - -Le forfait premium vous donne plus de data, parfois un meilleur débit théorique en conditions normales, des options de roaming, du cloud gratuit. Il ne vous donne pas la priorité face à un pompier ou à un préfet. - -## Pour résumer - -| Génération | Ce qui est contrôlé | Comment | -|---|---|---| -| 2G | L'accès au réseau | Classes d'accès 0-15 | -| 4G | L'accès + la priorité du trafic | ACB / EAB + QCI | -| 5G | L'accès + la priorité + l'isolation des services | UAC + 5QI + network slicing | - -Ce qui est intéressant, c'est que ces mécanismes restent invisibles tant que tout va bien. Vous ne savez pas qu'ils existent. Vous découvrez leur existence le jour où votre voisin n'arrive plus à charger ses mails alors que les pompiers, eux, continuent de communiquer normalement. Ce jour-là, ce n'est pas de la magie. C'est trente ans d'ingénierie radio qui ont anticipé que ça arriverait. \ No newline at end of file diff --git a/4f443bcb-b0d4-47f8-837d-61627e6c94f2/revisions/0006.md b/4f443bcb-b0d4-47f8-837d-61627e6c94f2/revisions/0006.md deleted file mode 100644 index 66bf0c2..0000000 --- a/4f443bcb-b0d4-47f8-837d-61627e6c94f2/revisions/0006.md +++ /dev/null @@ -1,80 +0,0 @@ -Un attentat, un séisme, un match du Stade de France, une grande panne d'électricité. Dans ces moments-là, des centaines de milliers de gens dégainent leur téléphone en même temps. Le réseau mobile, qui est dimensionné pour un usage moyen et pas pour un pic massif simultané, devrait théoriquement s'effondrer. La plupart du temps, il tient. Pas parfaitement, pas pour tout le monde, mais il tient — et surtout, les appels d'urgence continuent de passer. C'est le résultat d'une série de mécanismes empilés depuis les années 1990, et que la 4G et la 5G ont raffinés. Voici comment ça marche, sans le jargon mais sans non plus mentir sur ce qui se passe vraiment. - -## Trois questions, pas une - -Dans un réseau cellulaire moderne, l'opérateur doit répondre à trois questions distinctes quand la cellule commence à chauffer. Qui a le droit de se connecter ? Une fois connecté, qui passe en premier ? Et quels services doivent absolument continuer à fonctionner, quoi qu'il arrive ? - -La 2G ne savait répondre qu'à la première. Elle filtrait à l'entrée et basta. La 4G a ajouté la deuxième : une fois admis sur le réseau, votre trafic n'est plus traité de la même manière selon son importance. La 5G ajoute la troisième : elle peut littéralement créer des réseaux virtuels parallèles, dont certains sont réservés à des usages critiques et isolés des autres. - -## En 4G : filtrer puis prioriser - -### Filtrer à l'entrée - -Chaque carte SIM porte un numéro de classe d'accès, hérité du GSM, entre 0 et 15. Les classes 0 à 9 couvrent le grand public — autrement dit nous tous. Les classes 11 à 15 sont réservées : services de secours, autorités publiques, personnel opérateur, usages militaires selon les pays. - -Quand une cellule est surchargée, l'eNodeB (la station de base 4G) diffuse une consigne aux téléphones du secteur : « les classes 0 à 9, vous attendez ». C'est l'**Access Class Barring**. Concrètement, votre téléphone reçoit ce message et bloque lui-même votre tentative d'appel ou de connexion data, sans même envoyer la demande à la station. C'est élégant parce que ça soulage la station avant même qu'elle ne soit sollicitée. Les classes prioritaires, elles, passent sans encombre. - -Il existe une variante plus dure appelée **Extended Access Barring**, conçue pour les objets connectés et les usages non urgents. Quand une vraie crise se déclare, l'opérateur peut couper les compteurs intelligents, les alarmes domestiques et autres équipements bavards pour préserver la bande passante humaine. - -### Prioriser une fois connecté - -Là où la 4G a vraiment innové, c'est en introduisant le **QCI** — *QoS Class Identifier*. Chaque flux de données qui transite sur le réseau se voit attribuer un numéro entre 1 et 9 (et quelques valeurs au-dessus pour des cas spéciaux) qui dit à l'infrastructure comment le traiter. - -Quelques exemples concrets : - -| Usage | QCI | Traitement | -|---|---|---| -| Appel VoLTE (voix sur LTE) | 1 | Latence minimale, débit garanti | -| Signalisation réseau | 5 | Très haute priorité | -| Visioconférence | 2 | Débit garanti | -| Streaming vidéo | 6 ou 8 | Best effort prioritaire | -| Web et internet général | 9 | Best effort standard | - -Quand la cellule est encombrée, le routeur sait quoi sacrifier en premier. YouTube va ralentir, les pages web vont mettre du temps à charger, mais l'appel téléphonique de votre voisin reste audible. C'est un compromis assumé : on dégrade volontairement les usages secondaires pour préserver les usages critiques. - -## En 5G : ajouter le découpage - -### Un mécanisme d'accès refondu - -La 5G garde l'esprit du barring mais change son nom et sa mécanique. L'ancien Access Class Barring est remplacé par l'**UAC** — *Unified Access Control*, introduit dans la Release 15 du 3GPP. L'idée est d'unifier dans un seul cadre ce qui était auparavant éparpillé entre ACB, EAB et d'autres mécanismes spécifiques. - -UAC repose sur deux notions. Les **Access Identities** identifient qui vous êtes (utilisateur lambda, abonné à un service prioritaire type MPS ou MCS, personnel d'urgence, agent opérateur). Les **Access Categories** identifient ce que vous essayez de faire (appel d'urgence, connexion data normale, SMS, mise à jour de localisation). La combinaison des deux détermine si votre demande passe ou pas. - -Ce qui change vraiment, c'est la granularité. En 4G, on bloquait une classe entière. En 5G, on peut bloquer un type d'action précis pour un type d'utilisateur précis — par exemple « les abonnés grand public ne peuvent plus initier de nouveaux appels data, mais les SMS et les appels voix continuent ». L'opérateur peut aussi définir ses propres catégories d'accès, calées sur sa politique commerciale et technique. - -### Le QCI devient le 5QI - -Même logique qu'en 4G mais avec plus de finesse. Le **5QI** (*5G QoS Identifier*) propose davantage de niveaux et tient compte de cas que la 4G gérait mal, notamment les services à très basse latence pour les usines connectées ou la voiture autonome. La voix d'urgence garde son sommet, les données critiques industrielles s'intercalent juste après, le streaming et le web restent en bas de la pile. - -### La vraie nouveauté : le network slicing - -C'est l'apport majeur de la 5G en termes de gestion de crise. Au lieu de partager une seule infrastructure entre tous les usages, on peut maintenant la **découper logiciellement en tranches** — des *slices* — qui se comportent comme autant de réseaux indépendants, alors qu'ils tournent sur les mêmes antennes et les mêmes câbles. - -Un opérateur peut par exemple maintenir : - -- une tranche pour le grand public, avec ses millions d'abonnés et son trafic massif, -- une tranche pour les services d'urgence et de sécurité, dimensionnée pour rester fluide même quand le reste sature, -- une tranche pour les objets connectés industriels, avec des garanties de latence, -- une tranche pour les opérateurs critiques type SNCF, EDF, hôpitaux. - -Chaque tranche a ses propres règles d'admission, ses propres priorités, ses propres garanties de performance. Si la tranche grand public est totalement saturée, celle des secours ne le sait même pas. Cette isolation est ce qui distingue le plus fondamentalement la 5G des générations précédentes, où tout le monde se battait pour les mêmes ressources, avec juste des priorités différentes. - -## Et le forfait premium dans tout ça ? - -Question qu'on entend souvent : si je paie un forfait à 50 € au lieu d'un forfait à 10 €, est-ce que je passe avant les autres en cas de saturation ? - -Non. - -Les priorités techniques décrites au-dessus ne dépendent ni du prix du forfait, ni des options commerciales souscrites. Elles dépendent du profil réseau associé à votre SIM (lui-même fonction de votre statut : grand public, secours, opérateur, services prioritaires officiels), et des politiques de gestion de crise programmées par l'opérateur. Un cadre dirigeant avec un forfait illimité reste, du point de vue du réseau, un abonné de classe d'accès 0-9 comme tout le monde. - -Le forfait premium vous donne plus de data, parfois un meilleur débit théorique en conditions normales, des options de roaming, du cloud gratuit. Il ne vous donne pas la priorité face à un pompier ou à un préfet. - -## Pour résumer - -| Génération | Ce qui est contrôlé | Comment | -|---|---|---| -| 2G | L'accès au réseau | Classes d'accès 0-15 | -| 4G | L'accès + la priorité du trafic | ACB / EAB + QCI | -| 5G | L'accès + la priorité + l'isolation des services | UAC + 5QI + network slicing | - -Ce qui est intéressant, c'est que ces mécanismes restent invisibles tant que tout va bien. Vous ne savez pas qu'ils existent. Vous découvrez leur existence le jour où votre voisin n'arrive plus à charger ses mails alors que les pompiers, eux, continuent de communiquer normalement. Ce jour-là, ce n'est pas de la magie. C'est trente ans d'ingénierie radio qui ont anticipé que ça arriverait. \ No newline at end of file diff --git a/4f443bcb-b0d4-47f8-837d-61627e6c94f2/revisions/0007.md b/4f443bcb-b0d4-47f8-837d-61627e6c94f2/revisions/0007.md deleted file mode 100644 index fdeddc6..0000000 --- a/4f443bcb-b0d4-47f8-837d-61627e6c94f2/revisions/0007.md +++ /dev/null @@ -1,87 +0,0 @@ -Un attentat, un séisme, un match du Stade de France, une grande panne d'électricité. Dans ces moments-là, des centaines de milliers de gens dégainent leur téléphone au même instant. Le réseau mobile est dimensionné pour un usage moyen, pas pour un pic massif simultané, et il devrait théoriquement s'effondrer. La plupart du temps, il tient. Pas parfaitement, pas pour tout le monde, mais il tient — et surtout, les appels d'urgence continuent de passer. C'est le résultat d'une série de mécanismes empilés depuis les années 1990, que la 4G a affinés et que la 5G a élargis. Cet article les passe en revue, et termine sur une question qu'on me pose souvent : est-ce que mon forfait à 50 € me donne une place prioritaire dans cette file d'attente ? - -## Trois questions, pas une - -Quand une cellule commence à chauffer, l'opérateur doit répondre à trois questions distinctes. Qui a le droit de se connecter ? Une fois connecté, qui passe en premier ? Et quels services doivent absolument continuer à fonctionner, quoi qu'il arrive ? - -La 2G ne savait répondre qu'à la première. Elle filtrait à l'entrée et basta. La 4G a ajouté la deuxième : une fois admis sur le réseau, votre trafic est traité différemment selon son importance. La 5G ajoute la troisième : elle peut créer des réseaux virtuels parallèles dont certains sont réservés à des usages critiques, totalement isolés des autres. - -## Le filtrage à l'entrée - -Chaque carte SIM porte un numéro de classe d'accès, hérité du GSM, entre 0 et 15. Les classes 0 à 9 couvrent le grand public — autrement dit nous tous. Les classes 11 à 15 sont réservées : services de secours, autorités publiques, personnel opérateur, usages militaires selon les pays. - -Quand une cellule est surchargée, l'eNodeB (la station de base 4G) diffuse une consigne aux téléphones du secteur : « les classes 0 à 9, vous attendez ». C'est l'**Access Class Barring**. Concrètement, votre téléphone reçoit ce message et bloque lui-même votre tentative d'appel ou de connexion data, sans même envoyer la demande à la station. C'est élégant parce que ça soulage la station avant même qu'elle ne soit sollicitée. Les classes prioritaires, elles, passent sans encombre. - -Une variante plus dure, l'**Extended Access Barring**, vise les objets connectés et les usages non urgents. Quand une vraie crise se déclare, l'opérateur peut couper les compteurs intelligents, les alarmes domestiques et autres équipements bavards pour préserver la bande passante humaine. - -En 5G, ce mécanisme a été refondu sous le nom d'**UAC** — *Unified Access Control*, introduit dans la Release 15 du 3GPP. UAC unifie dans un seul cadre ce qui était auparavant éparpillé entre ACB, EAB et d'autres dispositifs spécifiques. Il repose sur deux notions complémentaires. Les *Access Identities* identifient qui vous êtes : utilisateur lambda, abonné à un service prioritaire type MPS ou MCS, personnel d'urgence, agent opérateur. Les *Access Categories* identifient ce que vous essayez de faire : appel d'urgence, connexion data normale, SMS, mise à jour de localisation. La combinaison des deux détermine si votre demande passe ou pas. La granularité gagnée par rapport à la 4G est réelle : on peut bloquer un type d'action précis pour un type d'utilisateur précis, par exemple « les abonnés grand public ne peuvent plus initier de nouveaux appels data, mais les SMS et les appels voix continuent ». - -## La priorité une fois connecté - -Là où la 4G a vraiment innové, c'est en introduisant le **QCI** — *QoS Class Identifier*. Chaque flux de données qui transite sur le réseau se voit attribuer un numéro entre 1 et 9 (avec quelques valeurs supplémentaires pour des cas spéciaux) qui dit à l'infrastructure comment le traiter. - -| Usage | QCI | Traitement | -|---|---|---| -| Appel VoLTE (voix sur LTE) | 1 | Latence minimale, débit garanti | -| Visioconférence | 2 | Débit garanti | -| Signalisation réseau | 5 | Très haute priorité | -| Streaming vidéo | 6 ou 8 | Best effort prioritaire | -| Web et internet général | 9 | Best effort standard | - -Quand la cellule est encombrée, le routeur sait quoi sacrifier en premier. YouTube va ralentir, les pages web vont mettre du temps à charger, mais l'appel téléphonique de votre voisin reste audible. C'est un compromis assumé : on dégrade volontairement les usages secondaires pour préserver les usages critiques. - -La 5G a transposé ce mécanisme sous le nom de **5QI** (*5G QoS Identifier*) avec davantage de niveaux et une meilleure prise en compte des cas que la 4G gérait mal — notamment les services à très basse latence pour les usines connectées ou la voiture autonome. La voix d'urgence garde son sommet, les données critiques industrielles s'intercalent juste après, le streaming et le web restent en bas de la pile. - -## L'isolation par tranches : le network slicing - -C'est l'apport majeur de la 5G en matière de gestion de crise. Au lieu de partager une seule infrastructure entre tous les usages, on peut maintenant la découper logiciellement en tranches — des *slices* — qui se comportent comme autant de réseaux indépendants, alors qu'ils tournent sur les mêmes antennes et les mêmes câbles. - -Un opérateur peut par exemple maintenir une tranche pour le grand public avec ses millions d'abonnés et son trafic massif, une autre pour les services d'urgence dimensionnée pour rester fluide même quand le reste sature, une troisième pour les objets connectés industriels avec des garanties de latence, et une quatrième pour des opérateurs critiques type SNCF, EDF ou hôpitaux. Chaque tranche a ses propres règles d'admission, ses propres priorités, ses propres garanties de performance. Si la tranche grand public est totalement saturée, celle des secours ne le sait même pas. - -Cette isolation est ce qui distingue le plus fondamentalement la 5G des générations précédentes. Avant, tout le monde se battait pour les mêmes ressources, avec juste des priorités différentes pour départager. Maintenant, certaines ressources sont retirées du combat dès le départ. - -## Récapitulatif - -| Génération | Ce qui est contrôlé | Comment | -|---|---|---| -| 2G | L'accès au réseau | Classes d'accès 0-15 | -| 4G | L'accès + la priorité du trafic | ACB / EAB + QCI | -| 5G | L'accès + la priorité + l'isolation des services | UAC + 5QI + network slicing | - -Tous ces mécanismes restent invisibles tant que tout va bien. Vous ne savez pas qu'ils existent. Vous découvrez leur existence le jour où votre voisin n'arrive plus à charger ses mails alors que les pompiers, eux, continuent de communiquer normalement. Ce jour-là, ce n'est pas de la magie. C'est trente ans d'ingénierie radio qui ont anticipé que ça arriverait. - ---- - -## Et mon forfait premium, alors ? - -Question logique à ce stade. Si le réseau sait techniquement prioriser certains flux par rapport à d'autres, qu'est-ce qui empêche un opérateur de faire passer ses abonnés à 50 € devant ceux à 10 € quand les antennes saturent ? La réponse honnête commence par un aveu : techniquement, rien. L'outil existe, il s'appelle **Quality of Service** (QoS), c'est exactement le mécanisme qu'on vient de décrire. Si demain Orange ou SFR voulaient créer une voie rapide pour leurs abonnés haut de gamme, ils auraient les outils dans la boîte. Pourtant, ils ne le font pas. Pour quatre raisons. - -### La loi européenne l'interdit - -Le règlement **(UE) 2015/2120**, dit « règlement internet ouvert », oblige les opérateurs à traiter tout le trafic de la même façon, sans discrimination liée à l'expéditeur, au destinataire, au contenu ou à l'application. Il a fêté ses dix ans en novembre 2025, et l'ARCEP a profité de l'anniversaire pour rappeler que c'est l'un des piliers du modèle numérique européen. Les sanctions sont sérieuses : jusqu'à **3 % du chiffre d'affaires** de l'opérateur fautif. Un opérateur français qui annoncerait demain « avec notre forfait Premium, vous passez devant les autres » se retrouverait devant l'ARCEP dans la semaine. - -Le règlement laisse quelques portes ouvertes pour les services dits « spécialisés » qui ont besoin d'une qualité garantie — téléchirurgie, voiture connectée. Mais ces exceptions sont étroitement encadrées et ne couvrent absolument pas le confort d'un client haut de gamme qui voudrait charger son Instagram plus vite à 19h. - -Aux États-Unis, l'histoire est différente. La FCC a tenté de restaurer la neutralité du net en 2024, mais en janvier 2025 la cour d'appel du sixième circuit a invalidé la décision, jugeant que la FCC n'avait pas l'autorité légale pour reclasser le haut débit comme service public. Avec l'arrivée de Brendan Carr à la tête de la FCC, ouvertement opposé à la neutralité du net, il n'y a aujourd'hui plus de règle fédérale outre-Atlantique. Quelques États (Californie, Washington, New York, Oregon) ont leurs propres lois qui maintiennent le principe, mais à l'échelle du pays, les opérateurs américains pourraient légalement faire ce que leurs homologues européens n'ont pas le droit de faire. Pourtant, ils ne le font pas ouvertement non plus, et la raison renvoie aux trois points suivants. - -### C'est commercialement intenable - -Imagine la publicité : « Forfait Premium à 50 € — passez devant les pauvres pendant les heures de pointe ». Le slogan ne se vend pas. Les directions marketing savent que dire à la moitié de leurs clients qu'ils sont des citoyens de seconde zone du réseau est le plus court chemin vers une crise de réputation. C'est pour ça qu'on vous vend « plus de Go », « 5G ultra rapide », « roaming inclus dans 110 pays » — des promesses qui sonnent positivement sans jamais dire à personne qu'il est désavantagé. - -### L'effet boule de neige serait toxique - -Imagine que ça se mette quand même en place. Les riches passent devant. Les antennes restent saturées pour les autres, qui se mettent à payer plus pour échapper à la saturation, ce qui sature encore plus les bas forfaits, ce qui pousse encore plus de gens à monter en gamme. Au bout de cinq ans, on a un réseau à deux vitesses où les forfaits modestes deviennent quasi inutilisables aux heures critiques, et où la connexion mobile correcte devient un service de luxe. Ce n'est plus un service de télécommunications, c'est un système de classes. - -C'est exactement ce que la neutralité du net cherche à empêcher. Pas par idéologie, mais parce qu'on a déjà vu où mène ce genre de spirale dans les pays où elle n'est pas protégée. Certains opérateurs proposent par exemple des forfaits où Facebook et WhatsApp sont gratuits mais où le reste est payant, ce qui revient à dire que le bon internet est celui que l'opérateur a choisi pour vous. Ce n'est plus tout à fait le même service. - -### Ça ne résoudrait rien - -Quand un réseau sature, ce n'est pas un problème de répartition entre utilisateurs, c'est un problème de **capacité totale**. Faire passer Pierre avant Paul ne crée pas un seul bit de bande passante supplémentaire. Ça déplace juste le problème de l'un vers l'autre. La vraie solution, quand une cellule sature trop souvent, c'est d'installer plus d'antennes, de densifier le réseau, de basculer sur une fréquence plus performante ou de passer à la génération suivante. C'est cher, c'est long, ça implique des autorisations administratives et des négociations foncières, mais c'est la seule réponse qui tient la route. Prioriser, c'est rapide, mais ça repousse le mur, ça ne le déplace pas. - -C'est comme si on proposait une voie réservée aux Mercedes sur l'A7 un samedi de chassé-croisé. Techniquement, on peut peindre la ligne au sol et installer les panneaux dans la matinée. Mais cette voie ne réduit pas le bouchon, elle le concentre sur les voies restantes ; elle écorne le principe d'égalité d'accès à l'infrastructure publique ; et elle ne change rien au problème de fond, qui est qu'il y a trop de voitures pour la route disponible. La vraie solution reste la même qu'avant : élargir l'autoroute, ou convaincre une partie des gens de prendre le train. - -### Le caveat 5G - -Une nuance honnête pour finir. Le *network slicing* complique le débat juridique. Un opérateur peut créer des tranches de réseau avec des qualités différenciées en toute légalité quand il s'agit d'usages spécialisés — santé, industrie, transports. La question qui agite régulateurs et juristes depuis plusieurs années est de savoir où finit le service spécialisé légitime et où commence le contournement déguisé de la neutralité du net. L'ARCEP a ouvert ce chantier, et c'est probablement là, plus que dans une revanche commerciale brutale sur les forfaits premium, que se jouera la prochaine bataille. - -Mais pour répondre simplement à la question : non, votre forfait à 50 € ne vous donne pas la priorité réseau sur celui de votre voisin à 10 €. Il vous donne plus de data, parfois un meilleur débit théorique, des options en plus. Pas une place dans la file. \ No newline at end of file diff --git a/5059c1e2-f3e6-406f-9595-7133bb835cdb/files/cover.svg b/5059c1e2-f3e6-406f-9595-7133bb835cdb/files/cover.svg deleted file mode 100644 index 3b8a6d4..0000000 --- a/5059c1e2-f3e6-406f-9595-7133bb835cdb/files/cover.svg +++ /dev/null @@ -1,62 +0,0 @@ - -Illustration : taxe de 2€ sur les petits colis en provenance de Chine -Une carte stylisée de la France et de l'Europe avec trois colis aux logos Shein, AliExpress et Temu, et un grand tampon rose indiquant Taxe 2€. - - - - - - - - - - - - - - - - - -Paris - - - - - Taxe - 2 € - - - - - - - - - - - - Shein - - AliExpress - - - - - - - - Shein - - - - - - - - - Temu - - - - \ No newline at end of file diff --git a/5059c1e2-f3e6-406f-9595-7133bb835cdb/index.md b/5059c1e2-f3e6-406f-9595-7133bb835cdb/index.md deleted file mode 100644 index e30b545..0000000 --- a/5059c1e2-f3e6-406f-9595-7133bb835cdb/index.md +++ /dev/null @@ -1,13 +0,0 @@ -# Petits colis, grands impôts : quand la taxation punit les Français sans relancer l’industrie - -Jusqu’à maintenant, les petits colis importés de l’étranger passaient presque inaperçus dans les foyers français. Shein, AliExpress, Temu… commander en Asie était simple et peu coûteux, grâce à l’exonération de droits de douane sur les produits d’une valeur inférieure à 150 euros. Mais depuis le 13 novembre 2025, ce statu quo est remis en cause : les ministres des Finances de l’Union européenne ont voté la suppression de cette exonération. Dès le premier trimestre 2026, chaque petit colis pourrait être taxé et soumis à des frais de traitement supplémentaires. - -À Bruxelles, on salue cette décision comme un moyen de protéger les consommateurs européens et le marché intérieur. La France, en particulier, s’en félicite, estimant qu’il s’agit d’une avancée pour la sécurité des produits et la souveraineté économique de l’UE. Mais pour beaucoup de Français, cette mesure ne fait qu’aggraver un problème de fond. - -Car la question n’est pas simplement celle des colis asiatiques. Depuis trente ans, la France est passée d’une puissance industrielle comparable à la moyenne européenne à un “nain industriel” avec seulement 7 % du PIB provenant de l’industrie, alors que nos voisins restent autour de 20 % ou plus. Les consommateurs se tournent vers l’Asie parce que **les produits français sont trop chers**, alourdis par des taxes, charges et coûts de production élevés. Taxer les colis importés aujourd’hui revient à **punir les consommateurs pour un problème que nos politiques n’ont pas su résoudre : la perte de compétitivité de l’industrie française**. - -Pour ceux qui vivent près des frontières ou voyagent dans le sud de l’Europe, la différence est frappante. En Catalogne ou au Portugal, il est possible d’acheter des produits locaux compétitifs : bricolage, jardinage, vêtements ou matériel de pêche, fabriqués en Europe et à des prix abordables. La preuve qu’une production locale forte et des prix raisonnables sont possibles, **quand la fiscalité et la réglementation ne pénalisent pas le producteur**. - -Cette nouvelle taxe sur les petits colis ne relancera pas l’industrie française, ni le commerce de centre-ville. Elle risque surtout de **réduire le pouvoir d’achat des Français**, tout en alimentant des caisses de l’État dont l’argent sera souvent gaspillé avant même d’être utile à l’économie réelle. - -En résumé, ce n’est pas la faute des consommateurs qui cherchent le meilleur prix à l’étranger. C’est le résultat d’une politique fiscale et industrielle défaillante. Tant que l’État ne s’attaquera pas aux causes structurelles — charges trop élevées, fiscalité excessive, désindustrialisation — toutes les mesures de taxation des importations resteront des **pansements sur une jambe de bois**, au détriment des citoyens. diff --git a/5059c1e2-f3e6-406f-9595-7133bb835cdb/meta.json b/5059c1e2-f3e6-406f-9595-7133bb835cdb/meta.json deleted file mode 100644 index c82b0d3..0000000 --- a/5059c1e2-f3e6-406f-9595-7133bb835cdb/meta.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "uuid": "5059c1e2-f3e6-406f-9595-7133bb835cdb", - "slug": "petits-colis-grands-impots-quand-la-taxation-punit-les-francais-sans-relancer-l-industrie", - "title": "Petits colis, grands impôts : quand la taxation punit les Français sans relancer l’industrie", - "author": "cedric@abonnel.fr", - "published": true, - "published_at": "2025-11-14 00:55", - "created_at": "2025-11-14 00:55:43", - "updated_at": "2026-05-12 08:59:31", - "revisions": [ - { - "n": 1, - "date": "2026-05-12 08:59:31", - "comment": "", - "title": "Petits colis, grands impôts : quand la taxation punit les Français sans relancer l’industrie" - } - ], - "cover": "cover.svg", - "files_meta": { - "a99506f7dff32b42-16522.svg": { - "author": "Cédrix / Générée par IA", - "source_url": "" - } - }, - "external_links": [], - "seo_title": "", - "seo_description": "", - "og_image": "", - "category": "actualité" -} diff --git a/5059c1e2-f3e6-406f-9595-7133bb835cdb/revisions/0001.md b/5059c1e2-f3e6-406f-9595-7133bb835cdb/revisions/0001.md deleted file mode 100644 index 2b9fcfe..0000000 --- a/5059c1e2-f3e6-406f-9595-7133bb835cdb/revisions/0001.md +++ /dev/null @@ -1,11 +0,0 @@ -Jusqu’à maintenant, les petits colis importés de l’étranger passaient presque inaperçus dans les foyers français. Shein, AliExpress, Temu… commander en Asie était simple et peu coûteux, grâce à l’exonération de droits de douane sur les produits d’une valeur inférieure à 150 euros. Mais depuis le 13 novembre 2025, ce statu quo est remis en cause : les ministres des Finances de l’Union européenne ont voté la suppression de cette exonération. Dès le premier trimestre 2026, chaque petit colis pourrait être taxé et soumis à des frais de traitement supplémentaires. - -À Bruxelles, on salue cette décision comme un moyen de protéger les consommateurs européens et le marché intérieur. La France, en particulier, s’en félicite, estimant qu’il s’agit d’une avancée pour la sécurité des produits et la souveraineté économique de l’UE. Mais pour beaucoup de Français, cette mesure ne fait qu’aggraver un problème de fond. - -Car la question n’est pas simplement celle des colis asiatiques. Depuis trente ans, la France est passée d’une puissance industrielle comparable à la moyenne européenne à un “nain industriel” avec seulement 7 % du PIB provenant de l’industrie, alors que nos voisins restent autour de 20 % ou plus. Les consommateurs se tournent vers l’Asie parce que **les produits français sont trop chers**, alourdis par des taxes, charges et coûts de production élevés. Taxer les colis importés aujourd’hui revient à **punir les consommateurs pour un problème que nos politiques n’ont pas su résoudre : la perte de compétitivité de l’industrie française**. - -Pour ceux qui vivent près des frontières ou voyagent dans le sud de l’Europe, la différence est frappante. En Catalogne ou au Portugal, il est possible d’acheter des produits locaux compétitifs : bricolage, jardinage, vêtements ou matériel de pêche, fabriqués en Europe et à des prix abordables. La preuve qu’une production locale forte et des prix raisonnables sont possibles, **quand la fiscalité et la réglementation ne pénalisent pas le producteur**. - -Cette nouvelle taxe sur les petits colis ne relancera pas l’industrie française, ni le commerce de centre-ville. Elle risque surtout de **réduire le pouvoir d’achat des Français**, tout en alimentant des caisses de l’État dont l’argent sera souvent gaspillé avant même d’être utile à l’économie réelle. - -En résumé, ce n’est pas la faute des consommateurs qui cherchent le meilleur prix à l’étranger. C’est le résultat d’une politique fiscale et industrielle défaillante. Tant que l’État ne s’attaquera pas aux causes structurelles — charges trop élevées, fiscalité excessive, désindustrialisation — toutes les mesures de taxation des importations resteront des **pansements sur une jambe de bois**, au détriment des citoyens. diff --git a/5510b12a-d647-4b1a-90ba-d421a4927ff7/index.md b/5510b12a-d647-4b1a-90ba-d421a4927ff7/index.md deleted file mode 100644 index db15001..0000000 --- a/5510b12a-d647-4b1a-90ba-d421a4927ff7/index.md +++ /dev/null @@ -1,193 +0,0 @@ -# Configurer un client OAuth 2.0 / OIDC dans Keycloak - -*Keycloak* est une solution open source de gestion des identités et des accès (IAM). Cet article décrit la configuration d'un client OAuth 2.0 / OpenID Connect dans Keycloak, en détaillant les options importantes et en montrant comment restreindre l'accès aux utilisateurs ou groupes autorisés. - -> **Note de version.** L'interface d'administration a été refondue à partir de Keycloak 19. La notion d'**Access Type** (`confidential` / `public` / `bearer-only`) a disparu au profit des toggles **Client authentication** et **Authorization**. Ce guide suit l'UI actuelle (Keycloak 24+). - ---- - -## 1. Prérequis - -- Une instance Keycloak fonctionnelle (version 24 ou supérieure recommandée). -- Des droits d'administration sur un **realm**. -- Une application destinée à s'authentifier via OAuth 2.0 / OIDC. -- TLS activé sur Keycloak et sur l'application cliente (obligatoire en production). - ---- - -## 2. Qu'est-ce qu'un client dans Keycloak ? - -Dans Keycloak, un **client** représente une application ou un service qui interagit avec le serveur d'authentification, soit pour authentifier des utilisateurs, soit pour obtenir des informations sur eux, soit pour protéger ses propres ressources. Il peut s'agir d'une application web, d'une API, d'une application mobile, d'un service interne ou d'un partenaire tiers. - -Chaque client est rattaché à un **realm** (l'espace logique d'authentification) et identifié par un `client_id` unique. Cet identifiant est transmis lors de toute demande d'authentification ou d'obtention de jeton. - -La configuration d'un client définit notamment : - -- les flux OAuth 2.0 autorisés (`authorization_code`, `client_credentials`, etc.) ; -- la capacité ou non du client à conserver un secret (client *confidentiel* vs *public*) ; -- les URI de redirection acceptées et les origines CORS ; -- la durée de vie des jetons et la composition des claims (mappers) ; -- les politiques d'autorisation associées (rôles, groupes, attributs). - ---- - -## 3. Création du client - -1. Se connecter à la **Keycloak Admin Console**. -2. Sélectionner le realm cible. -3. Menu **Clients** > **Create client**. - -### Étape « General settings » - -| Champ | Valeur recommandée | Description | -| ------------------ | ----------------------------------- | ---------------------------------------------------------------------------- | -| **Client type** | `OpenID Connect` | Protocole utilisé. Choisir `SAML` uniquement pour des intégrations SAML 2.0. | -| **Client ID** | `myapp-client` | Identifiant unique du client dans le realm. Apparaît dans les jetons (`azp`). | -| **Name** | `My Application` | Libellé d'affichage (facultatif, peut être localisé). | -| **Description** | Texte libre | Aide à la maintenance. | - -### Étape « Capability config » - -| Toggle | Valeur recommandée | Détail | -| ------------------------------- | ---------------------------------------- | ------------------------------------------------------------------------------------------ | -| **Client authentication** | `ON` pour un backend, `OFF` pour un SPA | `ON` rend le client **confidentiel** (un secret est généré). `OFF` rend le client **public**. | -| **Authorization** | `OFF` | À activer uniquement si l'on souhaite utiliser le moteur d'autorisations fine (RBAC/ABAC) de Keycloak. | -| **Standard flow** | `ON` | Active le flux Authorization Code, à utiliser systématiquement. | -| **Direct access grants** | `OFF` | Flux `password` — déconseillé par OAuth 2.1, à n'utiliser que pour des outils internes legacy. | -| **Implicit flow** | `OFF` | Déprécié par OAuth 2.1, ne pas activer. | -| **Service accounts roles** | `ON` si client_credentials | Permet au client de récupérer un jeton pour son propre compte (machine-to-machine). | -| **OAuth 2.0 Device Auth Grant** | `OFF` (sauf besoin spécifique) | Pour les appareils sans navigateur (TV, CLI sans IHM locale). | -| **OIDC CIBA Grant** | `OFF` (sauf besoin spécifique) | Authentification déportée (canal hors-bande). | - -### Étape « Login settings » - -| Champ | Exemple | Description | -| ----------------------- | -------------------------------- | --------------------------------------------------------------------------------------------------- | -| **Root URL** | `https://app.example.com` | URL de base de l'application. Permet d'utiliser des chemins relatifs dans les champs suivants. | -| **Home URL** | `/` | Page par défaut après login. | -| **Valid redirect URIs** | `https://app.example.com/*` | URI exactes autorisées pour la redirection après authentification. Éviter les wildcards larges. | -| **Valid post logout redirect URIs** | `https://app.example.com/*` | URI autorisées pour la redirection après déconnexion (RP-Initiated Logout). | -| **Web origins** | `https://app.example.com` | Origines CORS autorisées. La valeur `+` reprend automatiquement les redirect URIs ; `*` est à proscrire. | -| **Admin URL** | `https://app.example.com` | Utilisé pour les notifications backchannel (logout global, push not-before). | - -> **Bonne pratique.** Les redirect URIs doivent être en `https://` en production (sauf `http://localhost` pour le développement). Spécifier des chemins aussi précis que possible plutôt qu'un wildcard `/*`. - ---- - -## 4. Authentification du client (Credentials) - -L'onglet **Credentials** n'apparaît que si **Client authentication** est sur `ON`. Plusieurs méthodes sont disponibles : - -| Méthode | Usage | -| -------------------------------- | ---------------------------------------------------------------------- | -| **Client Id and Secret** | Secret partagé classique. À stocker dans un coffre-fort (Vault, env vars chiffrées). | -| **Signed JWT** | Le client signe un JWT d'assertion avec sa clé privée. Plus sûr qu'un secret. | -| **Signed JWT with Client Secret** | Variante symétrique (HMAC). | -| **X.509 Certificate** | mTLS — recommandé pour les contextes à forte exigence (FAPI, banque). | - -> **Important.** Le secret ne doit jamais être commité dans Git ni embarqué dans un binaire distribué. Pour un projet où les secrets vivent dans `config/.env`, ne commiter que `config/.env.example`. - ---- - -## 5. Types de clients - -Depuis Keycloak 19, le « type » est déduit de la combinaison des toggles. La terminologie OAuth reste utile : - -| Type | Configuration Keycloak | Cas d'usage | -| --------------- | ------------------------------------------------------------------- | ------------------------------------------------------------ | -| **Confidentiel** | `Client authentication = ON` | Backend serveur (PHP, Node, Java…), BFF, service-to-service. | -| **Public** | `Client authentication = OFF` + `Standard flow = ON` + **PKCE** | SPA (React, Vue, Angular), application mobile, CLI native. | -| **Service account** | `Client authentication = ON` + `Service accounts roles = ON` | Communication machine-to-machine (`grant_type=client_credentials`). | - -Le type « bearer-only » a été retiré : pour une API qui se contente de valider des jetons sans déclencher d'authentification, créer un client confidentiel et n'activer **aucun** flux. - ---- - -## 6. PKCE — recommandé pour tous les clients - -**PKCE** (*Proof Key for Code Exchange*, RFC 7636) protège le flux Authorization Code contre l'interception du code d'autorisation. Conçu initialement pour les clients publics, il est aujourd'hui recommandé pour **tous les clients**, y compris confidentiels, et obligatoire dans OAuth 2.1. - -Activation dans **Advanced** > **Proof Key for Code Exchange Code Challenge Method** > `S256`. - -> Ne jamais utiliser `plain` ; `S256` est la seule valeur acceptable. - ---- - -## 7. Restreindre l'accès aux utilisateurs ou groupes - -Par défaut, tout utilisateur du realm peut se connecter via n'importe quel client. Deux approches permettent de restreindre cet accès. - -### Approche 1 — Authentification basée sur les rôles (simple) - -1. Créer un rôle client dédié, par exemple `app-user`, dans l'onglet **Roles** du client. -2. Assigner ce rôle aux utilisateurs ou groupes autorisés (Users > *user* > Role mapping, ou Groups > *group* > Role mapping). -3. Dans **Authentication** > **Flows**, ajouter une exécution `Conditional - User Role` au flux Browser, configurée avec le rôle requis et `Required`. - -Cette méthode bloque l'authentification elle-même : un utilisateur sans le rôle ne pourra pas se connecter au client. - -### Approche 2 — Authorization Services (granulaire) - -À utiliser pour gérer des permissions plus fines (ressources, scopes, conditions). - -1. Activer **Authorization** sur le client. -2. Onglet **Authorization** > **Policies** > créer une *Group Policy* ou *Role Policy* listant les utilisateurs/groupes autorisés. -3. Onglet **Permissions** > créer une *Scope-Based Permission* ou *Resource-Based Permission* liée à la policy. -4. Côté application, utiliser l'endpoint **UMA** ou l'adaptateur Keycloak pour évaluer les permissions. - -### Approche 3 — Limiter le client scope « roles » - -Dans **Client scopes** > `roles` > **Scope**, désactiver *Full scope allowed* et n'autoriser que les rôles pertinents. Cela réduit la taille des jetons et limite ce que le client peut « voir » des rôles utilisateurs. - ---- - -## 8. Client scopes et mappers - -Les **client scopes** déterminent les claims présents dans les jetons (`access_token` et `id_token`). - -- Les scopes **Default** sont systématiquement ajoutés à chaque jeton. -- Les scopes **Optional** ne sont ajoutés que si l'application les demande via le paramètre `scope=` lors de l'authentification. - -Pour exposer les groupes d'un utilisateur dans le token : - -1. Créer un client scope `groups` (ou réutiliser celui existant). -2. Ajouter un mapper de type **Group Membership** : - - *Token Claim Name* : `groups` - - *Full group path* : `OFF` (sauf besoin d'arborescence) - - *Add to ID token / Access token / Userinfo* : selon l'usage. -3. Attacher le scope au client (Default ou Optional). - ---- - -## 9. Réglages avancés à connaître - -| Section | Réglage | Recommandation | -| ---------------------------------- | -------------------------------- | ---------------------------------------------------------------- | -| **Advanced > Fine grain OpenID Connect configuration** | `Access Token Signature Algorithm` | `RS256` (par défaut) ou `PS256` pour FAPI. | -| **Advanced > Advanced settings** | `Proof Key for Code Exchange` | `S256`. | -| **Advanced > Advanced settings** | `Front channel logout` | `OFF` sauf si l'application implémente correctement la spec OIDC Front-Channel Logout. | -| **Advanced > Advanced settings** | `Backchannel logout URL` | Renseigner pour une déconnexion globale propre. | -| **Advanced > Token Lifespan** | `Access Token Lifespan` | Court (5–15 min). Le refresh token prend le relais. | -| **Sessions** | `Client Session Idle / Max` | Aligner sur la politique de session de l'organisation. | - -Pour appliquer automatiquement un ensemble cohérent de règles, utiliser les **Client Policies** du realm (profils pré-définis `oauth-2-1-for-confidential-client` et `oauth-2-1-for-public-client`). - ---- - -## 10. Checklist de sécurité - -- [ ] `Client authentication = ON` pour tout client qui peut conserver un secret. -- [ ] PKCE `S256` activé. -- [ ] Implicit flow et Direct access grants désactivés. -- [ ] Redirect URIs en `https://` et sans wildcard inutile. -- [ ] Web origins explicites (pas de `*`). -- [ ] Secret stocké dans un coffre-fort, jamais commité. -- [ ] Access token court (≤ 15 min) et refresh token rotatif. -- [ ] Accès restreint via rôle dédié ou Authorization Services. -- [ ] *Full scope allowed* désactivé si les rôles transportés doivent être limités. -- [ ] Logout backchannel ou front-channel configuré. - ---- - -## Conclusion - -La configuration d'un client OAuth 2.0 dans Keycloak repose sur quelques choix structurants — confidentiel ou public, flux activés, PKCE, restriction d'accès — qui ont chacun des implications de sécurité fortes. S'aligner sur OAuth 2.1 (PKCE systématique, pas d'implicit flow, pas de password grant) et utiliser les **Client Policies** pour appliquer ces règles à l'échelle du realm évite la plupart des configurations à risque. \ No newline at end of file diff --git a/5510b12a-d647-4b1a-90ba-d421a4927ff7/meta.json b/5510b12a-d647-4b1a-90ba-d421a4927ff7/meta.json deleted file mode 100644 index 0b28c8e..0000000 --- a/5510b12a-d647-4b1a-90ba-d421a4927ff7/meta.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "uuid": "5510b12a-d647-4b1a-90ba-d421a4927ff7", - "slug": "configurer-un-client-oauth-2-0-dans-keycloak-guide-complet", - "title": "Configurer un client OAuth 2.0 / OIDC dans Keycloak", - "author": "cedric@abonnel.fr", - "published": true, - "published_at": "2025-05-16 23:33", - "created_at": "2025-05-16 23:33:31", - "updated_at": "2026-05-12 20:39:53", - "revisions": [ - { - "n": 1, - "date": "2026-05-12 20:39:53", - "comment": "Contenu modifié", - "title": "Configurer un client OAuth 2.0 / OIDC dans Keycloak" - } - ], - "cover": "", - "files_meta": [], - "external_links": [], - "seo_title": "", - "seo_description": "", - "og_image": "", - "category": "informatique" -} diff --git a/5510b12a-d647-4b1a-90ba-d421a4927ff7/revisions/0001.md b/5510b12a-d647-4b1a-90ba-d421a4927ff7/revisions/0001.md deleted file mode 100644 index 701ace7..0000000 --- a/5510b12a-d647-4b1a-90ba-d421a4927ff7/revisions/0001.md +++ /dev/null @@ -1,191 +0,0 @@ -*Keycloak* est une solution open source de gestion des identités et des accès (IAM). Cet article décrit la configuration d'un client OAuth 2.0 / OpenID Connect dans Keycloak, en détaillant les options importantes et en montrant comment restreindre l'accès aux utilisateurs ou groupes autorisés. - -> **Note de version.** L'interface d'administration a été refondue à partir de Keycloak 19. La notion d'**Access Type** (`confidential` / `public` / `bearer-only`) a disparu au profit des toggles **Client authentication** et **Authorization**. Ce guide suit l'UI actuelle (Keycloak 24+). - ---- - -## 1. Prérequis - -- Une instance Keycloak fonctionnelle (version 24 ou supérieure recommandée). -- Des droits d'administration sur un **realm**. -- Une application destinée à s'authentifier via OAuth 2.0 / OIDC. -- TLS activé sur Keycloak et sur l'application cliente (obligatoire en production). - ---- - -## 2. Qu'est-ce qu'un client dans Keycloak ? - -Dans Keycloak, un **client** représente une application ou un service qui interagit avec le serveur d'authentification, soit pour authentifier des utilisateurs, soit pour obtenir des informations sur eux, soit pour protéger ses propres ressources. Il peut s'agir d'une application web, d'une API, d'une application mobile, d'un service interne ou d'un partenaire tiers. - -Chaque client est rattaché à un **realm** (l'espace logique d'authentification) et identifié par un `client_id` unique. Cet identifiant est transmis lors de toute demande d'authentification ou d'obtention de jeton. - -La configuration d'un client définit notamment : - -- les flux OAuth 2.0 autorisés (`authorization_code`, `client_credentials`, etc.) ; -- la capacité ou non du client à conserver un secret (client *confidentiel* vs *public*) ; -- les URI de redirection acceptées et les origines CORS ; -- la durée de vie des jetons et la composition des claims (mappers) ; -- les politiques d'autorisation associées (rôles, groupes, attributs). - ---- - -## 3. Création du client - -1. Se connecter à la **Keycloak Admin Console**. -2. Sélectionner le realm cible. -3. Menu **Clients** > **Create client**. - -### Étape « General settings » - -| Champ | Valeur recommandée | Description | -| ------------------ | ----------------------------------- | ---------------------------------------------------------------------------- | -| **Client type** | `OpenID Connect` | Protocole utilisé. Choisir `SAML` uniquement pour des intégrations SAML 2.0. | -| **Client ID** | `myapp-client` | Identifiant unique du client dans le realm. Apparaît dans les jetons (`azp`). | -| **Name** | `My Application` | Libellé d'affichage (facultatif, peut être localisé). | -| **Description** | Texte libre | Aide à la maintenance. | - -### Étape « Capability config » - -| Toggle | Valeur recommandée | Détail | -| ------------------------------- | ---------------------------------------- | ------------------------------------------------------------------------------------------ | -| **Client authentication** | `ON` pour un backend, `OFF` pour un SPA | `ON` rend le client **confidentiel** (un secret est généré). `OFF` rend le client **public**. | -| **Authorization** | `OFF` | À activer uniquement si l'on souhaite utiliser le moteur d'autorisations fine (RBAC/ABAC) de Keycloak. | -| **Standard flow** | `ON` | Active le flux Authorization Code, à utiliser systématiquement. | -| **Direct access grants** | `OFF` | Flux `password` — déconseillé par OAuth 2.1, à n'utiliser que pour des outils internes legacy. | -| **Implicit flow** | `OFF` | Déprécié par OAuth 2.1, ne pas activer. | -| **Service accounts roles** | `ON` si client_credentials | Permet au client de récupérer un jeton pour son propre compte (machine-to-machine). | -| **OAuth 2.0 Device Auth Grant** | `OFF` (sauf besoin spécifique) | Pour les appareils sans navigateur (TV, CLI sans IHM locale). | -| **OIDC CIBA Grant** | `OFF` (sauf besoin spécifique) | Authentification déportée (canal hors-bande). | - -### Étape « Login settings » - -| Champ | Exemple | Description | -| ----------------------- | -------------------------------- | --------------------------------------------------------------------------------------------------- | -| **Root URL** | `https://app.example.com` | URL de base de l'application. Permet d'utiliser des chemins relatifs dans les champs suivants. | -| **Home URL** | `/` | Page par défaut après login. | -| **Valid redirect URIs** | `https://app.example.com/*` | URI exactes autorisées pour la redirection après authentification. Éviter les wildcards larges. | -| **Valid post logout redirect URIs** | `https://app.example.com/*` | URI autorisées pour la redirection après déconnexion (RP-Initiated Logout). | -| **Web origins** | `https://app.example.com` | Origines CORS autorisées. La valeur `+` reprend automatiquement les redirect URIs ; `*` est à proscrire. | -| **Admin URL** | `https://app.example.com` | Utilisé pour les notifications backchannel (logout global, push not-before). | - -> **Bonne pratique.** Les redirect URIs doivent être en `https://` en production (sauf `http://localhost` pour le développement). Spécifier des chemins aussi précis que possible plutôt qu'un wildcard `/*`. - ---- - -## 4. Authentification du client (Credentials) - -L'onglet **Credentials** n'apparaît que si **Client authentication** est sur `ON`. Plusieurs méthodes sont disponibles : - -| Méthode | Usage | -| -------------------------------- | ---------------------------------------------------------------------- | -| **Client Id and Secret** | Secret partagé classique. À stocker dans un coffre-fort (Vault, env vars chiffrées). | -| **Signed JWT** | Le client signe un JWT d'assertion avec sa clé privée. Plus sûr qu'un secret. | -| **Signed JWT with Client Secret** | Variante symétrique (HMAC). | -| **X.509 Certificate** | mTLS — recommandé pour les contextes à forte exigence (FAPI, banque). | - -> **Important.** Le secret ne doit jamais être commité dans Git ni embarqué dans un binaire distribué. Pour un projet où les secrets vivent dans `config/.env`, ne commiter que `config/.env.example`. - ---- - -## 5. Types de clients - -Depuis Keycloak 19, le « type » est déduit de la combinaison des toggles. La terminologie OAuth reste utile : - -| Type | Configuration Keycloak | Cas d'usage | -| --------------- | ------------------------------------------------------------------- | ------------------------------------------------------------ | -| **Confidentiel** | `Client authentication = ON` | Backend serveur (PHP, Node, Java…), BFF, service-to-service. | -| **Public** | `Client authentication = OFF` + `Standard flow = ON` + **PKCE** | SPA (React, Vue, Angular), application mobile, CLI native. | -| **Service account** | `Client authentication = ON` + `Service accounts roles = ON` | Communication machine-to-machine (`grant_type=client_credentials`). | - -Le type « bearer-only » a été retiré : pour une API qui se contente de valider des jetons sans déclencher d'authentification, créer un client confidentiel et n'activer **aucun** flux. - ---- - -## 6. PKCE — recommandé pour tous les clients - -**PKCE** (*Proof Key for Code Exchange*, RFC 7636) protège le flux Authorization Code contre l'interception du code d'autorisation. Conçu initialement pour les clients publics, il est aujourd'hui recommandé pour **tous les clients**, y compris confidentiels, et obligatoire dans OAuth 2.1. - -Activation dans **Advanced** > **Proof Key for Code Exchange Code Challenge Method** > `S256`. - -> Ne jamais utiliser `plain` ; `S256` est la seule valeur acceptable. - ---- - -## 7. Restreindre l'accès aux utilisateurs ou groupes - -Par défaut, tout utilisateur du realm peut se connecter via n'importe quel client. Deux approches permettent de restreindre cet accès. - -### Approche 1 — Authentification basée sur les rôles (simple) - -1. Créer un rôle client dédié, par exemple `app-user`, dans l'onglet **Roles** du client. -2. Assigner ce rôle aux utilisateurs ou groupes autorisés (Users > *user* > Role mapping, ou Groups > *group* > Role mapping). -3. Dans **Authentication** > **Flows**, ajouter une exécution `Conditional - User Role` au flux Browser, configurée avec le rôle requis et `Required`. - -Cette méthode bloque l'authentification elle-même : un utilisateur sans le rôle ne pourra pas se connecter au client. - -### Approche 2 — Authorization Services (granulaire) - -À utiliser pour gérer des permissions plus fines (ressources, scopes, conditions). - -1. Activer **Authorization** sur le client. -2. Onglet **Authorization** > **Policies** > créer une *Group Policy* ou *Role Policy* listant les utilisateurs/groupes autorisés. -3. Onglet **Permissions** > créer une *Scope-Based Permission* ou *Resource-Based Permission* liée à la policy. -4. Côté application, utiliser l'endpoint **UMA** ou l'adaptateur Keycloak pour évaluer les permissions. - -### Approche 3 — Limiter le client scope « roles » - -Dans **Client scopes** > `roles` > **Scope**, désactiver *Full scope allowed* et n'autoriser que les rôles pertinents. Cela réduit la taille des jetons et limite ce que le client peut « voir » des rôles utilisateurs. - ---- - -## 8. Client scopes et mappers - -Les **client scopes** déterminent les claims présents dans les jetons (`access_token` et `id_token`). - -- Les scopes **Default** sont systématiquement ajoutés à chaque jeton. -- Les scopes **Optional** ne sont ajoutés que si l'application les demande via le paramètre `scope=` lors de l'authentification. - -Pour exposer les groupes d'un utilisateur dans le token : - -1. Créer un client scope `groups` (ou réutiliser celui existant). -2. Ajouter un mapper de type **Group Membership** : - - *Token Claim Name* : `groups` - - *Full group path* : `OFF` (sauf besoin d'arborescence) - - *Add to ID token / Access token / Userinfo* : selon l'usage. -3. Attacher le scope au client (Default ou Optional). - ---- - -## 9. Réglages avancés à connaître - -| Section | Réglage | Recommandation | -| ---------------------------------- | -------------------------------- | ---------------------------------------------------------------- | -| **Advanced > Fine grain OpenID Connect configuration** | `Access Token Signature Algorithm` | `RS256` (par défaut) ou `PS256` pour FAPI. | -| **Advanced > Advanced settings** | `Proof Key for Code Exchange` | `S256`. | -| **Advanced > Advanced settings** | `Front channel logout` | `OFF` sauf si l'application implémente correctement la spec OIDC Front-Channel Logout. | -| **Advanced > Advanced settings** | `Backchannel logout URL` | Renseigner pour une déconnexion globale propre. | -| **Advanced > Token Lifespan** | `Access Token Lifespan` | Court (5–15 min). Le refresh token prend le relais. | -| **Sessions** | `Client Session Idle / Max` | Aligner sur la politique de session de l'organisation. | - -Pour appliquer automatiquement un ensemble cohérent de règles, utiliser les **Client Policies** du realm (profils pré-définis `oauth-2-1-for-confidential-client` et `oauth-2-1-for-public-client`). - ---- - -## 10. Checklist de sécurité - -- [ ] `Client authentication = ON` pour tout client qui peut conserver un secret. -- [ ] PKCE `S256` activé. -- [ ] Implicit flow et Direct access grants désactivés. -- [ ] Redirect URIs en `https://` et sans wildcard inutile. -- [ ] Web origins explicites (pas de `*`). -- [ ] Secret stocké dans un coffre-fort, jamais commité. -- [ ] Access token court (≤ 15 min) et refresh token rotatif. -- [ ] Accès restreint via rôle dédié ou Authorization Services. -- [ ] *Full scope allowed* désactivé si les rôles transportés doivent être limités. -- [ ] Logout backchannel ou front-channel configuré. - ---- - -## Conclusion - -La configuration d'un client OAuth 2.0 dans Keycloak repose sur quelques choix structurants — confidentiel ou public, flux activés, PKCE, restriction d'accès — qui ont chacun des implications de sécurité fortes. S'aligner sur OAuth 2.1 (PKCE systématique, pas d'implicit flow, pas de password grant) et utiliser les **Client Policies** pour appliquer ces règles à l'échelle du realm évite la plupart des configurations à risque. \ No newline at end of file diff --git a/586c5ab7-e960-465b-b499-83e0209890fe/files/af37382560286fe2-6958.svg b/586c5ab7-e960-465b-b499-83e0209890fe/files/af37382560286fe2-6958.svg deleted file mode 100644 index 597dae1..0000000 --- a/586c5ab7-e960-465b-b499-83e0209890fe/files/af37382560286fe2-6958.svg +++ /dev/null @@ -1,99 +0,0 @@ - - -Touche Alt détournée par xkb sous GNOME/Wayland -Parcours du signal d'une touche Alt gauche depuis le clavier vers le raccourci Alt+Tab. La couche xkb avec l'option lv3:lalt_switch détourne Alt_L en ISO_Level3_Shift, le compositeur ne reconnaît plus Alt, le raccourci ne se déclenche pas. - - - - - - - - - - - - -CLAVIER - - -Alt -gauche - - - - - - - -PARCOURS DU SIGNAL - - - - - -kernel / evdev -KEY_LEFTALT - - - - - - - -! -couche xkb -option: lv3:lalt_switch -Alt_L - - -ISO_Level3_Shift - - - - - - - -! -mutter (compositeur) -voit Level3, pas Alt - - - - - - - - - -raccourci Alt+Tab -jamais déclenché - - -CORRECTION - - - - - - - -$ gsettings set -org.gnome.desktop -.input-sources -xkb-options "[]" -$ _ - - - - -reset xkb - - - - - -Alt + Tab -fonctionne à nouveau - diff --git a/586c5ab7-e960-465b-b499-83e0209890fe/files/cover.png b/586c5ab7-e960-465b-b499-83e0209890fe/files/cover.png deleted file mode 100644 index 2eb88fa..0000000 Binary files a/586c5ab7-e960-465b-b499-83e0209890fe/files/cover.png and /dev/null differ diff --git a/586c5ab7-e960-465b-b499-83e0209890fe/index.md b/586c5ab7-e960-465b-b499-83e0209890fe/index.md deleted file mode 100644 index bf2bb64..0000000 --- a/586c5ab7-e960-465b-b499-83e0209890fe/index.md +++ /dev/null @@ -1,152 +0,0 @@ -# Quand Alt ne répond plus : anatomie d'un bug clavier sous GNOME/Wayland - -*Comment une option de clavier a priori anodine peut désactiver Alt+Tab, Alt+F4 et tous les raccourcis Alt — et comment diagnostiquer ce genre de problème de façon méthodique.* - -## Le symptôme - -Un beau matin, les raccourcis clavier ne répondent plus. Pas tous : seulement ceux qui utilisent la touche **Alt gauche**. - -- `Alt+Tab` ne change plus de fenêtre -- `Alt+F4` ne ferme plus l'application active -- Dans un terminal, les raccourcis `Alt+quelque chose` (édition de ligne readline, raccourcis dans une applicaiton, navigation tmux…) restent sans effet -- La touche **AltGr** (Alt droite), elle, fonctionne toujours : on peut taper `@`, `#`, `~`, les caractères normalement obtenus via Alt droite sur un clavier français azerty - -Premier réflexe naturel : « Le clavier est cassé ». Sauf que la touche physique répond bien — elle ne déclenche simplement plus ce qu'on attend d'elle. - -## Comprendre ce qui se passe (sans connaître Linux par cœur) - -Pour saisir le bug, il faut comprendre un détail qu'on ignore généralement : **une touche physique du clavier et la fonction qu'elle déclenche sont deux choses différentes**. - -Quand on appuie sur la touche marquée « Alt » à gauche du clavier, le système reçoit d'abord un signal matériel — un code brut, `KEY_LEFTALT` sous Linux. Ce signal est ensuite **traduit** en une fonction logique par une couche logicielle appelée **xkb** (X Keyboard Extension). C'est xkb qui décide que `KEY_LEFTALT` signifie « modificateur Alt gauche » (le fameux `Alt_L`). - -Mais xkb peut être configuré pour faire autre chose de ce même signal. Et c'est exactement ce qui s'était passé ici. Une option xkb nommée `lv3:lalt_switch` indiquait à la couche de traduction : - -> « Quand tu reçois `KEY_LEFTALT`, ne génère pas `Alt_L`. Génère `ISO_Level3_Shift` à la place. » - -`ISO_Level3_Shift`, c'est le nom technique de **AltGr** : la touche modificatrice qui permet d'accéder au « troisième niveau » d'une touche (le `@` au-dessus du `à`, le `#` au-dessus du `"`, etc.). En clair, l'option transformait Alt gauche en un deuxième AltGr. - -Conséquence : du point de vue des applications, **personne n'appuie jamais sur Alt**. Le gestionnaire de fenêtres (mutter, dans GNOME) attend un événement `Alt_L` qui ne vient jamais ; le terminal attend un préfixe Alt qui ne vient jamais non plus ; AltGr fonctionne toujours parce que c'est lui le « vrai » Level 3 Shift sur azerty, par défaut. - -C'est l'analogie d'un interrupteur dont on aurait inversé deux fils dans le mur : l'interrupteur marche, mais il commande une autre lampe. - -## La cause exacte - -Sous GNOME, les options xkb sont stockées dans la base de configuration **dconf**, accessible via la commande `gsettings`. La clé concernée : - -```bash -gsettings get org.gnome.desktop.input-sources xkb-options -``` - -Sur le système concerné, la commande retournait : - -``` -['lv3:lalt_switch'] -``` - -D'où venait cette option ? Plusieurs hypothèses plausibles : - -- Sélectionnée par erreur dans Paramètres → Clavier → Options de disposition lors d'une configuration ancienne -- Importée depuis une ancienne machine via la synchronisation du profil -- Activée par un script ou un outil de personnalisation (GNOME Tweaks, dconf-editor) -- Héritée d'une habitude QWERTY où certains préfèrent un second AltGr à gauche - -Sur un clavier français azerty, cette option n'a aucun intérêt pratique : AltGr est déjà sur la touche Alt droite, là où l'index droit peut l'atteindre naturellement. Ajouter un second AltGr sur la touche Alt gauche revient à perdre Alt sans gagner quoi que ce soit. - -## Le diagnostic, étape par étape - -Voici la séquence de commandes pour confirmer le problème — utile à mémoriser parce qu'elle s'applique à tout symptôme similaire sur GNOME/Wayland. - -**1. Confirmer l'environnement de session.** Les commandes qui suivent supposent GNOME sous Wayland ; sous X11 ou KDE, le diagnostic diffère. - -```bash -echo $XDG_SESSION_TYPE # attendu : wayland -echo $XDG_CURRENT_DESKTOP # attendu : GNOME -``` - -**2. Inspecter les options xkb.** C'est le test diagnostic principal pour ce genre de panne. - -```bash -gsettings get org.gnome.desktop.input-sources xkb-options -``` - -Si la sortie n'est pas `@as []` (liste vide) ou une option clairement intentionnelle, on tient probablement le coupable. Les options les plus susceptibles de casser des raccourcis : - -- `lv3:lalt_switch` — transforme Alt gauche en AltGr (le cas présent) -- `altwin:swap_alt_win` — échange Alt et Super (la touche Windows) -- `caps:swapescape` — échange Caps Lock et Échap (anodin pour Alt, mais peut surprendre) -- `ctrl:nocaps`, `ctrl:swapcaps` — transforment Caps Lock en Ctrl - -**3. Vérifier que les raccourcis WM sont bien définis.** Cela permet d'éliminer une mauvaise piste : si `Alt+Tab` ne marchait pas parce que le raccourci avait été effacé, ce serait visible ici. - -```bash -gsettings get org.gnome.desktop.wm.keybindings switch-applications -``` - -La sortie attendue est `['Tab', 'Tab']` ou équivalent. Si `Tab` y figure, le gestionnaire de fenêtres est correctement configuré — la panne est ailleurs. - -**4. Vérifier les options d'accessibilité.** Les touches rémanentes (StickyKeys), touches lentes (SlowKeys) ou touches rebonds (BounceKeys) peuvent provoquer des comportements clavier surprenants quand elles sont activées par erreur. - -```bash -gsettings get org.gnome.desktop.a11y.keyboard stickykeys-enable -gsettings get org.gnome.desktop.a11y.keyboard slowkeys-enable -gsettings get org.gnome.desktop.a11y.keyboard bouncekeys-enable -``` - -Toutes les trois doivent normalement renvoyer `false` sauf besoin spécifique. - -**5. Tester au niveau matériel si rien d'autre n'explique.** Si toutes les vérifications logicielles sont propres, on vérifie que la touche envoie bien un signal au noyau : - -```bash -sudo evtest -``` - -L'outil demande de choisir un périphérique (le clavier), puis affiche en direct chaque événement reçu. En appuyant sur Alt gauche, une ligne contenant `KEY_LEFTALT` doit apparaître. Si rien ne s'affiche, le problème est matériel ou dans le pilote — ce qui sort du cadre de cette fiche. - -## La correction - -Une seule commande suffit dans le cas présent : - -```bash -gsettings set org.gnome.desktop.input-sources xkb-options "[]" -``` - -L'effet est **immédiat** : mutter recharge la configuration clavier à la volée, sans qu'on ait besoin de fermer sa session. Si pour une raison ou une autre l'effet ne se voit pas (vieux processus qui a mis en cache la configuration, terminal récalcitrant…), une déconnexion/reconnexion de la session GNOME suffit à tout réinitialiser. - -Pour vérifier que la valeur est bien revenue à vide : - -```bash -gsettings get org.gnome.desktop.input-sources xkb-options -# attendu : @as [] -``` - -## Et si on voulait vraiment garder l'option ? - -Pour information, la commande inverse est : - -```bash -gsettings set org.gnome.desktop.input-sources xkb-options "['lv3:lalt_switch']" -``` - -À réserver aux cas où l'on tape énormément de caractères de troisième niveau de la main gauche et où on accepte de perdre Alt+Tab. - -## La méthode à retenir, au-delà de ce bug précis - -L'intérêt de cette fiche n'est pas tant la solution — une ligne de commande — que la **logique de diagnostic**. Quand une touche cesse de fonctionner sous Linux, on remonte la chaîne des responsabilités, du plus haut niveau au plus bas : - -1. **Le gestionnaire de fenêtres a-t-il bien le raccourci ?** (`gsettings ... wm.keybindings`) -2. **Les options d'accessibilité ne brouillent-elles pas la frappe ?** (`gsettings ... a11y.keyboard`) -3. **La couche xkb traduit-elle correctement la touche en modificateur ?** (`gsettings ... xkb-options`) -4. **Le noyau reçoit-il un signal matériel quand on appuie ?** (`evtest`) - -À chaque étage, une commande, une sortie attendue, et un verdict clair. La grande force de Linux dans ce genre de situation, c'est que chaque couche est inspectable séparément. Le réflexe à acquérir n'est pas « ça ne marche pas, je redémarre » mais « ça ne marche pas, je trouve quelle couche ment ». - -## Checklist mémo - -Modificateur (Alt / Super / Ctrl) qui ne répond plus sous GNOME/Wayland : - -1. `gsettings get org.gnome.desktop.input-sources xkb-options` — surveiller `lv3:lalt_switch`, `altwin:swap_alt_win`, `caps:*`, `ctrl:*` -2. `gsettings list-recursively org.gnome.desktop.wm.keybindings | grep -i alt` — confirmer que le raccourci existe -3. `gsettings get org.gnome.desktop.a11y.keyboard stickykeys-enable` (puis `slowkeys-enable`, `bouncekeys-enable`) -4. `sudo evtest` → choisir le clavier → presser la touche → doit afficher le bon code (`KEY_LEFTALT`, `KEY_LEFTMETA`, etc.) - -Quatre commandes, quatre couches, et 95 % des bugs clavier de session graphique sont localisés. \ No newline at end of file diff --git a/586c5ab7-e960-465b-b499-83e0209890fe/meta.json b/586c5ab7-e960-465b-b499-83e0209890fe/meta.json deleted file mode 100644 index 8717763..0000000 --- a/586c5ab7-e960-465b-b499-83e0209890fe/meta.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "uuid": "586c5ab7-e960-465b-b499-83e0209890fe", - "slug": "quand-alt-ne-repond-plus-anatomie-d-un-bug-clavier-sous-gnome-wayland", - "title": "Quand Alt ne répond plus : anatomie d'un bug clavier sous GNOME/Wayland", - "author": "cedric@abonnel.fr", - "published": true, - "published_at": "2026-05-25 07:27", - "created_at": "2026-05-12 13:35:47", - "updated_at": "2026-05-12 13:40:34", - "revisions": [], - "cover": "cover.png", - "files_meta": { - "cover.png": { - "author": "", - "source_url": "https://img1.teletype.in/files/87/6b/876beab9-74d8-4c14-bb47-d600639b629f.png" - }, - "af37382560286fe2-6958.svg": { - "author": "", - "source_url": "" - } - }, - "external_links": [], - "seo_title": "", - "seo_description": "Alt+Tab et Alt+F4 ne répondent plus sous GNOME/Wayland ? Une option xkb peut détourner Alt gauche en AltGr. Diagnostic et correction expliqués.", - "og_image": "https://varlog.a5l.fr/file?uuid=586c5ab7-e960-465b-b499-83e0209890fe&name=cover.png", - "category": "informatique" -} diff --git a/5982deaf-f3de-4f65-9270-9849132e64f6/index.md b/5982deaf-f3de-4f65-9270-9849132e64f6/index.md deleted file mode 100644 index efb8244..0000000 --- a/5982deaf-f3de-4f65-9270-9849132e64f6/index.md +++ /dev/null @@ -1,222 +0,0 @@ -# Nos données à l’ère de l’IA : l’affaire LinkedIn et la colère des utilisateurs - -Un matin d’automne, Léa ouvre son compte LinkedIn comme elle le fait chaque jour. Consultante indépendante, elle y partage des réflexions sur le travail à distance, y échange avec des collègues et y recrute parfois des partenaires. Rien de bien extraordinaire. Mais ce jour-là, un post attire son attention : *« LinkedIn utilise vos données pour entraîner ses IA »*. - -Au début, elle croit à une rumeur. Encore une de ces tempêtes numériques qui s’évanouissent aussi vite qu’elles éclatent. Puis elle lit plus attentivement : le réseau professionnel de Microsoft admet effectivement utiliser certaines données publiques — les profils, les publications, les interactions visibles — pour nourrir ses modèles d’intelligence artificielle. - -### **De la mise en relation à la collecte invisible** - -Depuis sa création, LinkedIn se présente comme une vitrine professionnelle : un espace où chacun peut exposer son parcours, ses compétences, ses ambitions. En échange, la plateforme promet visibilité, opportunités et réseau. Mais derrière cette promesse, un autre marché s’est peu à peu installé : celui des données. - -Chaque clic, chaque mise à jour de poste, chaque mot-clé devient une pièce d’un immense puzzle comportemental. Ce puzzle, jusqu’ici utilisé pour cibler des offres d’emploi ou des publicités, se retrouve désormais au cœur de quelque chose de beaucoup plus vaste : **l’entraînement des intelligences artificielles**. - -Microsoft, maison mère de LinkedIn, investit des milliards dans l’IA. Or, pour qu’une IA apprenne, il lui faut une matière première : les mots, les textes, les interactions humaines. Et LinkedIn en regorge. - -### **La ligne floue entre le “public” et le “privé”** - -Techniquement, LinkedIn affirme ne collecter que les informations *publiques*. Mais qu’est-ce que cela signifie vraiment ? Léa n’a jamais donné son accord explicite pour que ses publications servent à entraîner des algorithmes de génération de texte. Elle les a partagées pour échanger avec des pairs, pas pour devenir une donnée parmi des millions d’autres. - -C’est là que le malaise grandit. -Les utilisateurs découvrent que la frontière entre ce qu’ils publient volontairement et ce qui peut être *réutilisé* s’estompe. Dans les conditions d’utilisation, tout est mentionné — quelque part, en petits caractères. Mais rares sont ceux qui lisent jusqu’à la dernière ligne. - -### **Le choc du consentement absent** - -Les réactions ne se font pas attendre : des posts indignés envahissent la plateforme même. -« On n’est pas des cobayes ! » écrit un utilisateur. -« Nos profils sont devenus des datasets », dénonce une autre. - -Ce qui choque, ce n’est pas seulement l’usage, mais la **manière** dont il a été introduit : sans consultation, sans transparence, presque à bas bruit. - -Les défenseurs du projet rétorquent que l’IA ne “lit” pas nos données comme un humain. Qu’elle analyse des tendances, pas des personnes. Que tout est anonymisé. -Mais cette défense sonne creux pour beaucoup : anonymiser ne supprime pas la question éthique. À partir du moment où nos mots, nos idées, nos réflexions alimentent un système dont nous ne maîtrisons ni les usages ni les bénéfices, une part de notre autonomie numérique s’érode. - -### **Une affaire de confiance** - -LinkedIn n’est pas la première plateforme à faire face à cette controverse. Reddit, X (ex-Twitter) et même Meta ont adopté des politiques similaires, justifiant ces pratiques par la nécessité d’améliorer leurs modèles d’IA. -Mais LinkedIn occupe une place particulière : il s’agit du **réseau professionnel par excellence**. Ici, les utilisateurs partagent des informations sensibles — leur parcours, leur entreprise, leurs compétences — souvent avec leur vrai nom. - -La relation de confiance entre l’utilisateur et la plateforme est donc essentielle. Et c’est justement cette confiance qui vacille. - -### **Léa et le dilemme numérique** - -Quelques jours plus tard, Léa se rend dans les paramètres de confidentialité. -Elle découvre, cachée dans une section sobrement intitulée « Utilisation des données pour l’IA », une mention : « Nous pouvons utiliser vos informations publiques pour améliorer nos produits et services, y compris les technologies d’intelligence artificielle. » - -Il existe bien une option d’exclusion, mais difficile à trouver. Léa la décoche, sans savoir si cela changera vraiment quelque chose. -Elle ressent un mélange de soulagement et de résignation. - -Car au fond, la question dépasse LinkedIn. Elle touche à une réalité plus vaste : **dans l’ère de l’intelligence artificielle, nos données sont devenues la nouvelle énergie**, le carburant invisible qui alimente des machines toujours plus puissantes. - -### **Vers une prise de conscience collective** - -L’affaire LinkedIn agit comme un électrochoc. Elle révèle à quel point le consentement numérique reste un concept fragile, souvent illusoire. Elle invite chacun à repenser ce qu’il partage en ligne, mais aussi à exiger des plateformes une vraie transparence. - -Les régulateurs européens, via le RGPD, commencent à se saisir du sujet. Certains experts appellent à créer un **« droit à l’exclusion des IA »**, un cadre légal obligeant les entreprises à obtenir un consentement explicite avant toute utilisation des données à des fins d’entraînement algorithmique. - -Mais pour l’instant, la balle reste surtout dans le camp des utilisateurs — ceux qui, comme Léa, naviguent entre pragmatisme et inquiétude, entre le besoin de visibilité et la peur d’être instrumentalisés. - ---- - -### ** Entre progrès et perte de contrôle** - -L’IA promet des avancées spectaculaires. Elle transforme nos métiers, nos outils, nos manières de communiquer. Mais elle pose une question fondamentale : **qui possède les données qui la nourrissent ?** - -LinkedIn n’est peut-être qu’un exemple parmi d’autres, mais il symbolise un tournant. -Dans cette ère où chaque mot que nous tapons peut devenir une donnée d’apprentissage, la véritable ressource n’est plus la technologie, mais la **confiance**. -Et cette confiance, aujourd’hui, semble s’effriter à mesure que les algorithmes se renforcent. - ---- - -Voici les risques autour de l’utilisation des données des utilisateurs par LinkedIn (et d’autres plateformes) pour l’IA - -## **1. Atteinte à la vie privée et au consentement** - -Même si LinkedIn affirme n’utiliser que des données “publiques”, cela ne signifie pas que les utilisateurs ont **consenti explicitement** à cet usage. - -* Les informations partagées à des fins professionnelles (CV, publications, commentaires) peuvent être **réutilisées hors contexte**. -* Le consentement est souvent implicite, enfoui dans les conditions d’utilisation. -* L’utilisateur **perd le contrôle** sur ce qu’il partage : il ne sait pas exactement **comment ni par qui** ses données seront exploitées. - -➡️ *Exemple concret :* ton texte sur la gestion d’équipe pourrait servir à entraîner une IA d’entreprise sans que tu le saches, ni que ton nom y soit associé. - ---- - -## **2. Profilage et reconstitution d’identité** - -L’agrégation massive des données permet aux IA d’identifier des **schémas comportementaux et professionnels** : - -* Les algorithmes peuvent déduire des informations sensibles (habitudes de travail, orientation politique, situation financière, etc.) à partir de simples interactions. -* Ces profils peuvent être utilisés pour **le ciblage commercial**, **le recrutement automatisé**, voire **l’évaluation de performance** dans certains contextes. - -➡️ *Risque :* un recruteur ou un système d’IA pourrait juger ton profil ou ton style d’écriture sans ton accord. - ---- - -## **3. Appropriation intellectuelle et perte de la valeur de ton contenu** - -Les textes, publications et commentaires des utilisateurs servent de **matière première** à l’entraînement de modèles d’intelligence artificielle. - -* Tes contributions (même originales ou expertes) peuvent **être intégrées à des IA génératives** qui, ensuite, produiront du contenu similaire sans mentionner leur source. -* Cela pose une question d’**éthique et de propriété intellectuelle** : tu deviens fournisseur involontaire de savoir gratuit. - -➡️ *Exemple :* une IA générative pourrait reformuler ou réutiliser tes analyses dans un contexte commercial sans te citer. - ---- - -## **4. Risque de réidentification** - -Même si LinkedIn ou Microsoft annoncent que les données sont “anonymisées”, des études montrent qu’il est souvent possible de **réidentifier des individus** à partir de fragments de données combinées. - -* Les publications, les dates d’emploi ou les noms d’entreprises peuvent suffire à **retrouver une personne réelle**. -* Cela peut exposer à du **harcèlement**, du **doxing** (divulgation d’infos perso) ou du **recrutement non sollicité**. - ---- - -## **5. Érosion de la confiance numérique** - -Chaque nouvelle utilisation non transparente des données creuse le fossé entre utilisateurs et plateformes. - -* Les professionnels peuvent **se censurer**, publier moins, ou quitter la plateforme. -* Cela nuit à la qualité du réseau et à la diversité des échanges. - -➡️ *Risque collectif :* LinkedIn perd son rôle de réseau professionnel ouvert, et les utilisateurs deviennent méfiants ou silencieux. - ---- - -## **6. Exploitation commerciale asymétrique** - -Les utilisateurs fournissent la matière (leurs données), mais **ne bénéficient pas** des revenus générés par les IA entraînées sur ces données. - -* Les plateformes en tirent un profit direct (via les produits IA, la publicité ou les abonnements premium). -* Les utilisateurs, eux, deviennent **des ressources gratuites** sans contrepartie. - ---- - -## **7. Sécurité des données à long terme** - -Une fois intégrées dans des modèles d’IA, les données ne peuvent pas toujours être **effacées**. - -* Même si tu supprimes ton compte, l’empreinte de tes données peut subsister dans les systèmes d’apprentissage. -* Cela entre en tension avec le **droit à l’oubli**, garanti par le RGPD. - ---- - -**Exemples concrets** et **projections** permettant de bien mesurer les conséquences réelles (et à venir) de cette collecte de données par LinkedIn et les IA associées. -Voici une série d’illustrations **réalistes, plausibles et documentées**, suivies de **projections futures** si la tendance se poursuit. - -## 💼 **1. Exemple actuel : ton profil devient un “modèle” de compétence** - -Un consultant publie régulièrement des analyses sur la transformation digitale. Ses posts sont publics, bien écrits et souvent partagés. -👉 Ces textes peuvent être intégrés (sans qu’il le sache) dans des ensembles de données qui servent à **entraîner une IA professionnelle** de rédaction ou de recrutement. -Résultat : une IA générative pourrait ensuite **produire des articles ou des messages LinkedIn similaires au sien**, imitant son ton et sa structure — sans jamais le créditer. - -📍 *Projection 2026 :* les entreprises paieront pour des outils d’IA “experts en communication LinkedIn”, entraînés sur des millions de publications d’utilisateurs. Ces contenus originaux deviendront des modèles commerciaux... sans rémunération pour leurs auteurs. - ---- - -## 🔍 **2. Exemple : profilage algorithmique dans le recrutement** - -LinkedIn est déjà utilisé pour **le tri automatisé des candidatures**. En combinant ces données avec des modèles d’IA, une entreprise pourrait prédire les “traits de personnalité” d’un candidat à partir de son profil, de son vocabulaire ou de son historique de publications. - -➡️ *Risque concret :* -Une IA pourrait écarter un profil jugé “instable” ou “non aligné culturellement” simplement parce qu’elle a repéré des posts critiques sur le management — sans intervention humaine. - -📍 *Projection 2027 :* des recruteurs utilisent des IA pour “noter” automatiquement les profils selon leur probabilité de succès dans une entreprise, créant des **discriminations invisibles** et difficilement contestables. - ---- - -## ✍️ **3. Exemple : appropriation intellectuelle déguisée** - -Imaginons une chercheuse en RH qui publie des posts détaillant sa méthode d’évaluation des compétences. -Quelques mois plus tard, une IA professionnelle (issue d’un modèle Microsoft ou OpenAI) reprend des formulations et des idées très proches dans un produit commercial. - -➡️ *Risque :* sa méthode devient une fonctionnalité d’un logiciel RH, sans reconnaissance ni rémunération. - -📍 *Projection 2028 :* les IA intègrent massivement du contenu “crowdsourcé” depuis LinkedIn, Reddit ou Medium. Les créateurs deviennent **fournisseurs involontaires de savoir**, pendant que les entreprises vendent des outils basés sur leurs contributions. - ---- - -## 🧠 **4. Exemple : inférences comportementales non désirées** - -Une IA peut déduire plus que ce que l’utilisateur pense partager. -➡️ Par exemple : - -* Un rythme de publication irrégulier peut être interprété comme un “manque de disponibilité”. -* Un enchaînement de changements de poste peut être lu comme un “instinct d’instabilité”. -* Le ton ou la fréquence des commentaires peut servir à classer les utilisateurs selon leur “influence sociale”. - -📍 *Projection 2026-2030 :* ces données comportementales nourrissent des **scores de réputation professionnelle** invisibles, que certaines entreprises ou plateformes utilisent pour classer les candidats, partenaires ou clients potentiels. - ---- - -## 💰 **5. Exemple : création de produits IA entraînés sur les utilisateurs** - -Microsoft développe des outils d’IA intégrés à LinkedIn Learning ou à Microsoft 365 Copilot. -➡️ Les modèles peuvent s’inspirer des tendances, expressions et structures de pensée des utilisateurs LinkedIn pour proposer des conseils personnalisés (“Voici comment rédiger une offre d’emploi efficace”). - -📍 *Projection 2030 :* -Les modèles d’IA deviennent si performants qu’ils proposent des stratégies RH, des analyses de marché ou des lettres de motivation entières, **entraînées sur les contenus des utilisateurs** — mais commercialisées sous licence Microsoft. -Les utilisateurs deviennent littéralement la **matière première** de produits IA vendus à d’autres professionnels. - ---- - -## 🔒 **6. Exemple : difficulté d’effacement ou de contrôle** - -Un utilisateur décide de supprimer son compte LinkedIn. -➡️ Problème : ses anciens posts, déjà utilisés pour l’entraînement de modèles, ne peuvent pas être “désappris” par ces IA. -Les traces textuelles persistent dans les modèles, parfois indéfiniment. - -📍 *Projection 2029 :* même avec le droit à l’oubli renforcé, la récupération complète des données dans les modèles devient quasi impossible. Les régulateurs européens devront imposer des **procédures d’“oubli algorithmique”**, très coûteuses à mettre en œuvre. - ---- - -## 🌍 **7. Projection sociétale globale : le paradoxe de la transparence** - -À long terme, la généralisation de ces pratiques pourrait produire un **effet de censure douce** : - -* Les utilisateurs partagent moins d’analyses authentiques, de peur d’être copiés ou profilés. -* Les publications deviennent plus neutres, plus polies, moins spontanées. -* Le réseau perd de sa valeur humaine et se transforme en vitrine aseptisée. - -En parallèle, les grandes entreprises technologiques accumulent des quantités massives de données textuelles qui leur donnent un **avantage compétitif durable**. -Les utilisateurs, eux, deviennent invisibles dans la chaîne de valeur de l’intelligence artificielle. diff --git a/5982deaf-f3de-4f65-9270-9849132e64f6/meta.json b/5982deaf-f3de-4f65-9270-9849132e64f6/meta.json deleted file mode 100644 index 761909b..0000000 --- a/5982deaf-f3de-4f65-9270-9849132e64f6/meta.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "uuid": "5982deaf-f3de-4f65-9270-9849132e64f6", - "slug": "nos-donnees-a-l-ere-de-l-ia-l-affaire-linkedin-et-la-colere-des-utilisateurs", - "title": "Nos données à l’ère de l’IA : l’affaire LinkedIn et la colère des utilisateurs", - "author": "cedric@abonnel.fr", - "published": true, - "published_at": "2025-11-05 07:10:37", - "created_at": "2025-11-05 07:10:37", - "updated_at": "2025-11-05 07:10:37", - "revisions": [], - "cover": "cover.jpg", - "category": "actualité" -} diff --git a/5a0cced3-40d0-46bf-8501-b533f3c2608e/files/cover.svg b/5a0cced3-40d0-46bf-8501-b533f3c2608e/files/cover.svg deleted file mode 100644 index e33aaa2..0000000 --- a/5a0cced3-40d0-46bf-8501-b533f3c2608e/files/cover.svg +++ /dev/null @@ -1,161 +0,0 @@ - -Couverture : réparation d'une instance Uptime Kuma -Illustration éditoriale montrant un fichier de base SQLite kuma.db sur une table d'opération, avec un terminal listant les commandes de diagnostic et une électrocardiogramme de heartbeats irréguliers. - - - - - - - - - - - - - - - - - - - - - - - - - - - -Réparer Uptime Kuma -Diagnostic et remise en route d'une base SQLite cassée - - - -devops · webops - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -kuma.db - - - - - -patient -PRAGMA integrity_check: FAILED - - - - - - -heartbeat table - - - - - - - - - - - -root@pve-lxc — bash - - - - -$ -systemctl stop uptime-kuma - - -$ -cd /opt/uptime-kuma - - -$ -cp -r data data-backup-$(date +%Y%m%d) - - -$ -sqlite3 kuma.db -"PRAGMA integrity_check;" - - -*** in database main *** -row 142 missing from index - - -$ -sqlite3 kuma.db -"DELETE FROM heartbeat;" - - -$ - - - - - - - - - - - - - -1 -arrêter - - -2 -sauvegarder - - -3 -diagnostiquer - - -4 -réparer - - -5 -relancer - - \ No newline at end of file diff --git a/5a0cced3-40d0-46bf-8501-b533f3c2608e/index.md b/5a0cced3-40d0-46bf-8501-b533f3c2608e/index.md deleted file mode 100644 index 0526d1e..0000000 --- a/5a0cced3-40d0-46bf-8501-b533f3c2608e/index.md +++ /dev/null @@ -1,153 +0,0 @@ -# Réparer une instance Uptime Kuma installée via le script Proxmox - -> Méthode basée sur l'installation via le script communautaire : -> [community-scripts.github.io/ProxmoxVE/scripts?id=uptimekuma](https://community-scripts.github.io/ProxmoxVE/scripts?id=uptimekuma) - -Si tu utilises Uptime Kuma pour monitorer ton infra, tu finiras tôt ou tard par tomber sur un de ces grands classiques : le service qui refuse de démarrer après une mise à jour, des erreurs SQLite louches dans `journalctl`, ou pire — l'interface qui tourne mais ne remonte plus aucun heartbeat. Dans 90 % des cas, c'est la base SQLite qui a pris cher, souvent à cause d'un arrêt brutal du conteneur LXC ou d'une migration qui s'est mal passée. - -Avant de paniquer et de tout réinstaller, il y a une série d'étapes à dérouler. Je les mets ici dans l'ordre, parce que l'ordre compte : on commence toujours par le moins destructif. - -## Pourquoi SQLite et pas un vrai SGBD ? - -Petite parenthèse pour les juniors qui se demanderaient. Uptime Kuma embarque SQLite parce que c'est une appli pensée pour être facile à déployer : pas de serveur de base à installer à côté, pas de credentials à gérer, juste un fichier `kuma.db` sur le disque. C'est génial pour démarrer, mais ça a un défaut majeur — SQLite n'aime pas du tout être coupé en plein milieu d'une écriture. Si ton LXC tombe pendant que Kuma écrit un heartbeat, tu peux te retrouver avec un fichier corrompu. D'où l'importance de toujours arrêter proprement le service avant de toucher au fichier. - -## 1. Arrêter le service proprement - -```bash -systemctl stop uptime-kuma -``` - -C'est la première chose à faire, **toujours**. Tant que le service tourne, il a un verrou sur `kuma.db` et il continue d'y écrire. Tu peux ouvrir le fichier en lecture avec `sqlite3` malgré ce verrou, mais dès que tu veux faire un `DELETE` ou un `PRAGMA`, tu vas soit avoir une erreur `database is locked`, soit — pire — corrompre encore plus la base si tu forces. - -Vérifie que c'est bien arrêté avant de continuer : - -```bash -systemctl status uptime-kuma -``` - -Tu dois voir `inactive (dead)`. Pas `active`, pas `activating`, pas `failed` avec un process encore en l'air. - -## 2. Aller dans le dossier de l'app - -Le script communautaire installe Kuma dans `/opt/uptime-kuma` : - -```bash -cd /opt/uptime-kuma -``` - -Dans ce dossier, ce qui nous intéresse c'est le sous-dossier `data/`. C'est là que vit tout ce qui compte : le fichier `kuma.db` (la base), les uploads, et quelques fichiers de config. Le reste (`server/`, `node_modules/`, etc.) c'est le code de l'application — tu peux le casser, un `git pull` ou une réinstallation le remettra en place. Mais `data/`, si tu le perds, tu perds **toute** ta config de monitoring. - -## 3. Sauvegarder avant de toucher à quoi que ce soit - -Règle d'or de l'ops : on ne touche **jamais** à une base de données sans avoir une copie au chaud. Jamais. - -```bash -cp -r data data-backup-$(date +%Y%m%d) -``` - -Le `$(date +%Y%m%d)` te génère un suffixe du genre `data-backup-20260512`. Comme ça si tu fais plusieurs interventions dans la même semaine, tu sais laquelle date de quand, et tu ne risques pas d'écraser une sauvegarde par une autre. - -Cette copie embarque : - -- la base `kuma.db` elle-même -- les fichiers WAL (`kuma.db-wal`, `kuma.db-shm`) si SQLite est en mode Write-Ahead Logging — c'est important de les prendre avec, sinon ta sauvegarde est incomplète -- les uploads et certificats si tu en as - -Si tu sautes cette étape et que tu te plantes à l'étape 5 ou 6, tu n'auras aucun moyen de revenir en arrière. Sérieusement, fais-le. - -## 4. Vérifier l'intégrité de la base - -```bash -cd data/ -sqlite3 kuma.db "PRAGMA integrity_check;" -``` - -`PRAGMA integrity_check`, c'est la commande de diagnostic native de SQLite. Elle parcourt toute la base, vérifie que les index pointent bien sur les bonnes lignes, que les pages ne sont pas corrompues, que les contraintes sont respectées. Deux issues possibles : - -- **`ok`** : la base est saine sur le plan structurel. Si Kuma ne démarre toujours pas, le problème vient probablement d'une migration coincée (voir étape 5) ou du code de l'app, pas du fichier. -- **Une liste d'erreurs** : il y a de la corruption. Selon ce qui est touché, on passera à l'étape 5 ou 6. - -Pour les juniors qui découvrent SQLite : `PRAGMA`, c'est le mot-clé que SQLite utilise pour les commandes qui ne sont pas du SQL standard — c'est spécifique à SQLite, tu ne le verras pas dans PostgreSQL ou MySQL. - -## 5. Supprimer un paramètre de migration corrompu - -Sur certaines versions de Kuma (notamment autour des montées de version qui touchent à l'agrégation des heartbeats), il y a un bug connu : l'entrée `migrateAggregateTableState` dans la table `setting` se retrouve dans un état incohérent, et le service refuse de démarrer parce qu'il pense être au milieu d'une migration qui n'avance plus. - -La fix : - -```bash -sqlite3 kuma.db "DELETE FROM setting WHERE key = 'migrateAggregateTableState';" -``` - -Ce qu'on fait, c'est qu'on dit à Kuma : "oublie où tu en étais, repars de zéro sur ce point". Au redémarrage, il va recréer la clé proprement et relancer la migration depuis le début. C'est non destructif pour tes données de monitoring — on ne touche qu'à un drapeau d'état interne. - -Si ce n'est pas ton problème (clé absente ou suppression sans effet), passe à la suite. - -## 6. Solution radicale : vider la table `heartbeat` - -Si la corruption est concentrée sur l'historique de monitoring (et c'est souvent le cas, parce que c'est la table où Kuma écrit le plus souvent — un INSERT toutes les 20-60 secondes par sonde, ça finit par faire du volume), tu peux la vider : - -```bash -sqlite3 kuma.db "DELETE FROM heartbeat;" -``` - -À lire attentivement : cette commande **supprime tout l'historique des sondes**. Tu perds les graphes de uptime, les SLA calculés sur les 30/90/365 derniers jours, tout. En revanche : - -- tes sondes sont conservées (table `monitor`) -- tes utilisateurs aussi (table `user`) -- tes notifications également (table `notification`) -- ta config générale est intacte (table `setting`) - -C'est à utiliser uniquement quand : - -- `PRAGMA integrity_check` pointe vers des problèmes sur `heartbeat` ou ses index -- Kuma refuse de démarrer et l'étape 5 n'a rien donné -- ou plus simplement, ta base a tellement grossi que Kuma rame et que tu acceptes de perdre l'historique pour repartir propre - -Tant qu'à faire, profites-en pour faire un `VACUUM` derrière, qui va vraiment libérer l'espace disque (un `DELETE` seul ne récupère pas la place sur le disque, il marque juste les pages comme libres pour réutilisation) : - -```bash -sqlite3 kuma.db "VACUUM;" -``` - -## 7. Redémarrer le service - -```bash -systemctl start uptime-kuma -``` - -Et vérifie qu'il a bien démarré : - -```bash -systemctl status uptime-kuma -``` - -Tu dois voir `active (running)`. Si tu vois `failed` ou si le service redémarre en boucle, ne le laisse pas dans cet état — passe directement à l'étape 8 pour comprendre pourquoi. - -## 8. Lire les logs - -```bash -journalctl -u uptime-kuma -f -``` - -Le `-u uptime-kuma` cible le service, le `-f` fait du `follow` (équivalent de `tail -f`) — les nouvelles lignes s'affichent en temps réel. Laisse tourner pendant deux ou trois minutes, le temps que Kuma rejoue ses migrations, recharge ses sondes, et envoie les premiers heartbeats. - -Ce qu'il faut chercher dans les logs : - -- **erreurs SQLite** : `SQLITE_CORRUPT`, `database disk image is malformed`, `attempt to write a readonly database` — ça veut dire que t'as encore un problème de fichier, voire de permissions -- **migrations bloquées** : des messages du genre `Running migration...` qui ne sont jamais suivis d'un `Migration done` -- **permissions** : `EACCES`, `permission denied` — typiquement après une intervention faite en root sur des fichiers qui doivent appartenir à un autre utilisateur. Vérifie avec `ls -la data/` que les fichiers sont bien possédés par l'user qui fait tourner le service -- **modules Node manquants** : `Cannot find module 'xxx'` — ça arrive après une mise à jour qui s'est mal passée. La fix, c'est généralement de relancer `npm ci --production` dans `/opt/uptime-kuma` -- **port déjà utilisé** : `EADDRINUSE` — tu as un autre process qui squatte le port 3001 (ou celui que tu as configuré) - -Pour sortir du `journalctl -f`, c'est `Ctrl+C`. - -## Et après ? - -Une fois que Kuma tourne propre, prends cinq minutes pour mettre en place ce qui t'aurait évité d'arriver ici : - -1. **Une sauvegarde régulière de `data/`**. Un simple cron qui fait `tar czf` du dossier vers un autre serveur, ça suffit largement pour un Kuma perso. Pense à arrêter le service avant le tar, ou utilise `sqlite3 kuma.db ".backup /chemin/sauvegarde.db"` qui fait un snapshot cohérent sans devoir couper Kuma. -2. **Un monitoring du monitoring**. Oui, c'est méta. Mais si Kuma tombe, c'est lui qui t'aurait alerté de la chute de tes autres services — donc personne ne te prévient. Un check externe (UptimeRobot gratuit, healthchecks.io, ou un autre Kuma sur une autre machine) qui ping ton instance, c'est cinq minutes à mettre en place. -3. **Garder ta sauvegarde `data-backup-AAAAMMJJ` au moins une semaine** avant de la supprimer. Au cas où un effet de bord apparaîtrait quelques jours plus tard. - -Et voilà. Avec ces huit étapes, tu couvres 95 % des cas de Kuma cassé. Pour les 5 % restants — typiquement quand le LXC lui-même a un souci de filesystem — c'est une autre histoire, et il faudra sortir l'artillerie côté Proxmox. \ No newline at end of file diff --git a/5a0cced3-40d0-46bf-8501-b533f3c2608e/meta.json b/5a0cced3-40d0-46bf-8501-b533f3c2608e/meta.json deleted file mode 100644 index c10a44f..0000000 --- a/5a0cced3-40d0-46bf-8501-b533f3c2608e/meta.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "uuid": "5a0cced3-40d0-46bf-8501-b533f3c2608e", - "slug": "reparer-une-instance-uptime-kuma-installee-via-le-script-proxmox", - "title": "Réparer une instance Uptime Kuma installée via le script Proxmox", - "author": "cedric@abonnel.fr", - "published": true, - "published_at": "2025-11-26 08:33", - "created_at": "2025-11-26 08:33:49", - "updated_at": "2026-05-12 09:16:00", - "revisions": [ - { - "n": 1, - "date": "2026-05-12 09:13:30", - "comment": "", - "title": "Réparer une instance Uptime Kuma installée via le script Proxmox" - } - ], - "cover": "cover.svg", - "files_meta": { - "e87cce19ac9cc10d-37145.svg": { - "author": "Cédrix / Générée par IA", - "source_url": "" - } - }, - "external_links": [], - "seo_title": "", - "seo_description": "", - "og_image": "", - "category": "informatique" -} diff --git a/5a0cced3-40d0-46bf-8501-b533f3c2608e/revisions/0001.md b/5a0cced3-40d0-46bf-8501-b533f3c2608e/revisions/0001.md deleted file mode 100644 index 10bcb83..0000000 --- a/5a0cced3-40d0-46bf-8501-b533f3c2608e/revisions/0001.md +++ /dev/null @@ -1,151 +0,0 @@ -> Méthode basée sur l'installation via le script communautaire : -> [community-scripts.github.io/ProxmoxVE/scripts?id=uptimekuma](https://community-scripts.github.io/ProxmoxVE/scripts?id=uptimekuma) - -Si tu utilises Uptime Kuma pour monitorer ton infra, tu finiras tôt ou tard par tomber sur un de ces grands classiques : le service qui refuse de démarrer après une mise à jour, des erreurs SQLite louches dans `journalctl`, ou pire — l'interface qui tourne mais ne remonte plus aucun heartbeat. Dans 90 % des cas, c'est la base SQLite qui a pris cher, souvent à cause d'un arrêt brutal du conteneur LXC ou d'une migration qui s'est mal passée. - -Avant de paniquer et de tout réinstaller, il y a une série d'étapes à dérouler. Je les mets ici dans l'ordre, parce que l'ordre compte : on commence toujours par le moins destructif. - -## Pourquoi SQLite et pas un vrai SGBD ? - -Petite parenthèse pour les juniors qui se demanderaient. Uptime Kuma embarque SQLite parce que c'est une appli pensée pour être facile à déployer : pas de serveur de base à installer à côté, pas de credentials à gérer, juste un fichier `kuma.db` sur le disque. C'est génial pour démarrer, mais ça a un défaut majeur — SQLite n'aime pas du tout être coupé en plein milieu d'une écriture. Si ton LXC tombe pendant que Kuma écrit un heartbeat, tu peux te retrouver avec un fichier corrompu. D'où l'importance de toujours arrêter proprement le service avant de toucher au fichier. - -## 1. Arrêter le service proprement - -```bash -systemctl stop uptime-kuma -``` - -C'est la première chose à faire, **toujours**. Tant que le service tourne, il a un verrou sur `kuma.db` et il continue d'y écrire. Tu peux ouvrir le fichier en lecture avec `sqlite3` malgré ce verrou, mais dès que tu veux faire un `DELETE` ou un `PRAGMA`, tu vas soit avoir une erreur `database is locked`, soit — pire — corrompre encore plus la base si tu forces. - -Vérifie que c'est bien arrêté avant de continuer : - -```bash -systemctl status uptime-kuma -``` - -Tu dois voir `inactive (dead)`. Pas `active`, pas `activating`, pas `failed` avec un process encore en l'air. - -## 2. Aller dans le dossier de l'app - -Le script communautaire installe Kuma dans `/opt/uptime-kuma` : - -```bash -cd /opt/uptime-kuma -``` - -Dans ce dossier, ce qui nous intéresse c'est le sous-dossier `data/`. C'est là que vit tout ce qui compte : le fichier `kuma.db` (la base), les uploads, et quelques fichiers de config. Le reste (`server/`, `node_modules/`, etc.) c'est le code de l'application — tu peux le casser, un `git pull` ou une réinstallation le remettra en place. Mais `data/`, si tu le perds, tu perds **toute** ta config de monitoring. - -## 3. Sauvegarder avant de toucher à quoi que ce soit - -Règle d'or de l'ops : on ne touche **jamais** à une base de données sans avoir une copie au chaud. Jamais. - -```bash -cp -r data data-backup-$(date +%Y%m%d) -``` - -Le `$(date +%Y%m%d)` te génère un suffixe du genre `data-backup-20260512`. Comme ça si tu fais plusieurs interventions dans la même semaine, tu sais laquelle date de quand, et tu ne risques pas d'écraser une sauvegarde par une autre. - -Cette copie embarque : - -- la base `kuma.db` elle-même -- les fichiers WAL (`kuma.db-wal`, `kuma.db-shm`) si SQLite est en mode Write-Ahead Logging — c'est important de les prendre avec, sinon ta sauvegarde est incomplète -- les uploads et certificats si tu en as - -Si tu sautes cette étape et que tu te plantes à l'étape 5 ou 6, tu n'auras aucun moyen de revenir en arrière. Sérieusement, fais-le. - -## 4. Vérifier l'intégrité de la base - -```bash -cd data/ -sqlite3 kuma.db "PRAGMA integrity_check;" -``` - -`PRAGMA integrity_check`, c'est la commande de diagnostic native de SQLite. Elle parcourt toute la base, vérifie que les index pointent bien sur les bonnes lignes, que les pages ne sont pas corrompues, que les contraintes sont respectées. Deux issues possibles : - -- **`ok`** : la base est saine sur le plan structurel. Si Kuma ne démarre toujours pas, le problème vient probablement d'une migration coincée (voir étape 5) ou du code de l'app, pas du fichier. -- **Une liste d'erreurs** : il y a de la corruption. Selon ce qui est touché, on passera à l'étape 5 ou 6. - -Pour les juniors qui découvrent SQLite : `PRAGMA`, c'est le mot-clé que SQLite utilise pour les commandes qui ne sont pas du SQL standard — c'est spécifique à SQLite, tu ne le verras pas dans PostgreSQL ou MySQL. - -## 5. Supprimer un paramètre de migration corrompu - -Sur certaines versions de Kuma (notamment autour des montées de version qui touchent à l'agrégation des heartbeats), il y a un bug connu : l'entrée `migrateAggregateTableState` dans la table `setting` se retrouve dans un état incohérent, et le service refuse de démarrer parce qu'il pense être au milieu d'une migration qui n'avance plus. - -La fix : - -```bash -sqlite3 kuma.db "DELETE FROM setting WHERE key = 'migrateAggregateTableState';" -``` - -Ce qu'on fait, c'est qu'on dit à Kuma : "oublie où tu en étais, repars de zéro sur ce point". Au redémarrage, il va recréer la clé proprement et relancer la migration depuis le début. C'est non destructif pour tes données de monitoring — on ne touche qu'à un drapeau d'état interne. - -Si ce n'est pas ton problème (clé absente ou suppression sans effet), passe à la suite. - -## 6. Solution radicale : vider la table `heartbeat` - -Si la corruption est concentrée sur l'historique de monitoring (et c'est souvent le cas, parce que c'est la table où Kuma écrit le plus souvent — un INSERT toutes les 20-60 secondes par sonde, ça finit par faire du volume), tu peux la vider : - -```bash -sqlite3 kuma.db "DELETE FROM heartbeat;" -``` - -À lire attentivement : cette commande **supprime tout l'historique des sondes**. Tu perds les graphes de uptime, les SLA calculés sur les 30/90/365 derniers jours, tout. En revanche : - -- tes sondes sont conservées (table `monitor`) -- tes utilisateurs aussi (table `user`) -- tes notifications également (table `notification`) -- ta config générale est intacte (table `setting`) - -C'est à utiliser uniquement quand : - -- `PRAGMA integrity_check` pointe vers des problèmes sur `heartbeat` ou ses index -- Kuma refuse de démarrer et l'étape 5 n'a rien donné -- ou plus simplement, ta base a tellement grossi que Kuma rame et que tu acceptes de perdre l'historique pour repartir propre - -Tant qu'à faire, profites-en pour faire un `VACUUM` derrière, qui va vraiment libérer l'espace disque (un `DELETE` seul ne récupère pas la place sur le disque, il marque juste les pages comme libres pour réutilisation) : - -```bash -sqlite3 kuma.db "VACUUM;" -``` - -## 7. Redémarrer le service - -```bash -systemctl start uptime-kuma -``` - -Et vérifie qu'il a bien démarré : - -```bash -systemctl status uptime-kuma -``` - -Tu dois voir `active (running)`. Si tu vois `failed` ou si le service redémarre en boucle, ne le laisse pas dans cet état — passe directement à l'étape 8 pour comprendre pourquoi. - -## 8. Lire les logs - -```bash -journalctl -u uptime-kuma -f -``` - -Le `-u uptime-kuma` cible le service, le `-f` fait du `follow` (équivalent de `tail -f`) — les nouvelles lignes s'affichent en temps réel. Laisse tourner pendant deux ou trois minutes, le temps que Kuma rejoue ses migrations, recharge ses sondes, et envoie les premiers heartbeats. - -Ce qu'il faut chercher dans les logs : - -- **erreurs SQLite** : `SQLITE_CORRUPT`, `database disk image is malformed`, `attempt to write a readonly database` — ça veut dire que t'as encore un problème de fichier, voire de permissions -- **migrations bloquées** : des messages du genre `Running migration...` qui ne sont jamais suivis d'un `Migration done` -- **permissions** : `EACCES`, `permission denied` — typiquement après une intervention faite en root sur des fichiers qui doivent appartenir à un autre utilisateur. Vérifie avec `ls -la data/` que les fichiers sont bien possédés par l'user qui fait tourner le service -- **modules Node manquants** : `Cannot find module 'xxx'` — ça arrive après une mise à jour qui s'est mal passée. La fix, c'est généralement de relancer `npm ci --production` dans `/opt/uptime-kuma` -- **port déjà utilisé** : `EADDRINUSE` — tu as un autre process qui squatte le port 3001 (ou celui que tu as configuré) - -Pour sortir du `journalctl -f`, c'est `Ctrl+C`. - -## Et après ? - -Une fois que Kuma tourne propre, prends cinq minutes pour mettre en place ce qui t'aurait évité d'arriver ici : - -1. **Une sauvegarde régulière de `data/`**. Un simple cron qui fait `tar czf` du dossier vers un autre serveur, ça suffit largement pour un Kuma perso. Pense à arrêter le service avant le tar, ou utilise `sqlite3 kuma.db ".backup /chemin/sauvegarde.db"` qui fait un snapshot cohérent sans devoir couper Kuma. -2. **Un monitoring du monitoring**. Oui, c'est méta. Mais si Kuma tombe, c'est lui qui t'aurait alerté de la chute de tes autres services — donc personne ne te prévient. Un check externe (UptimeRobot gratuit, healthchecks.io, ou un autre Kuma sur une autre machine) qui ping ton instance, c'est cinq minutes à mettre en place. -3. **Garder ta sauvegarde `data-backup-AAAAMMJJ` au moins une semaine** avant de la supprimer. Au cas où un effet de bord apparaîtrait quelques jours plus tard. - -Et voilà. Avec ces huit étapes, tu couvres 95 % des cas de Kuma cassé. Pour les 5 % restants — typiquement quand le LXC lui-même a un souci de filesystem — c'est une autre histoire, et il faudra sortir l'artillerie côté Proxmox. \ No newline at end of file diff --git a/5b7030fa-68da-42b1-b181-49af17132fdf/index.md b/5b7030fa-68da-42b1-b181-49af17132fdf/index.md deleted file mode 100644 index dc5a6bb..0000000 --- a/5b7030fa-68da-42b1-b181-49af17132fdf/index.md +++ /dev/null @@ -1,11 +0,0 @@ -# GitHub Copilot, l’assistant qui a déclenché une tempête - -En 2022, Microsoft dévoile **GitHub Copilot**, un outil révolutionnaire : une intelligence artificielle capable d’aider les programmeurs en générant du code automatiquement. Derrière cette prouesse technologique, un secret de fabrication : Copilot a été entraîné sur des **millions de lignes de code public**, hébergées sur GitHub, la plateforme de partage de projets informatiques appartenant… à Microsoft. - -Très vite, l’enthousiasme laisse place à la colère. Des milliers de développeurs réalisent que **leur travail a servi à nourrir une machine commerciale**, sans leur consentement ni la moindre compensation. Sur les forums et les réseaux, le mot circule : “**extraction de travail gratuit**”. Ce qui était autrefois perçu comme un espace de collaboration ouverte se transforme en champ de bataille juridique et éthique. - -Aux États-Unis, une **action collective** est lancée contre Microsoft et OpenAI. Les plaignants accusent les géants de la tech de **violer les droits d’auteur** en utilisant du code sous licence open source pour former leur IA. L’affaire devient un symbole : jusqu’où peut-on aller dans la collecte des données publiques pour nourrir les intelligences artificielles ? - -Le débat dépasse vite le monde du code. Sur LinkedIn, certains s’interrogent : **et si nos textes, nos idées, nos posts publics devenaient, eux aussi, la matière première des IA linguistiques ?** Après tout, les mots que nous publions en ligne sont aux modèles de langage ce que le code open source était à Copilot : une ressource abondante, gratuite, mais pas nécessairement libre de droit. - -Ainsi, l’histoire de GitHub Copilot n’est pas seulement celle d’une innovation technique — c’est le récit d’un **nouvel âge de la création**, où chaque ligne, chaque phrase partagée sur le web peut devenir une brique d’intelligence… parfois à notre insu. \ No newline at end of file diff --git a/5b7030fa-68da-42b1-b181-49af17132fdf/meta.json b/5b7030fa-68da-42b1-b181-49af17132fdf/meta.json deleted file mode 100644 index 3cf3459..0000000 --- a/5b7030fa-68da-42b1-b181-49af17132fdf/meta.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "uuid": "5b7030fa-68da-42b1-b181-49af17132fdf", - "slug": "github-copilot-l-assistant-qui-a-declenche-une-tempete", - "title": "GitHub Copilot, l’assistant qui a déclenché une tempête", - "author": "cedric@abonnel.fr", - "published": true, - "published_at": "2025-11-05 07:17:49", - "created_at": "2025-11-05 07:17:49", - "updated_at": "2025-11-05 07:17:49", - "revisions": [], - "cover": "cover.jpg", - "category": "actualité" -} diff --git a/5cfc434d-26d8-4fba-b9e3-6a23fddb45d7/files/dummy.png b/5cfc434d-26d8-4fba-b9e3-6a23fddb45d7/files/dummy.png deleted file mode 100644 index 58bb881..0000000 Binary files a/5cfc434d-26d8-4fba-b9e3-6a23fddb45d7/files/dummy.png and /dev/null differ diff --git a/5cfc434d-26d8-4fba-b9e3-6a23fddb45d7/index.md b/5cfc434d-26d8-4fba-b9e3-6a23fddb45d7/index.md deleted file mode 100644 index 0ee3a2e..0000000 --- a/5cfc434d-26d8-4fba-b9e3-6a23fddb45d7/index.md +++ /dev/null @@ -1,108 +0,0 @@ -# esp32 connected on linux - -![Nom de la section](dummy.png) - -Ce chapitre explique comment vérifier que ton ESP32 est bien détecté par Linux et apparaît correctement comme périphérique **tty**. Les étapes ci-dessous couvrent la détection, l’identification du chipset USB, les permissions et un test de communication. - ---- - -## 1. Regarder les nouveaux périphériques avec dmesg -Brancher l’ESP32 en USB, puis lancer : - -```bash -dmesg -w -``` - -On verra apparaître des lignes comme : - -``` -usb 1-1: ch341-uart converter now attached to ttyUSB0 -``` - -ou : - -``` -cp210x converter now attached to ttyUSB1 -``` - -**Le port sera généralement `ttyUSB0` ou `ttyUSB1`** (parfois `ttyACM0` pour certaines cartes). - ---- - -## 2. Lister les ports USB série disponibles -```bash -ls /dev/ttyUSB* -``` - -ou : - -```bash -ls /dev/ttyACM* -``` - -S’il y en a un, ton ESP32 est reconnu. - ---- - -## 3. Identifier le type d’interface (CH340, CP2102, FT232) -On pourra voir quel chipset USB est détecté : - -```bash -lsusb -``` - -Exemples typiques : - -- **1a86:7523** → CH340 -- **10c4:ea60** → CP2102/CP210x -- **0403:6001** → FTDI FT232 - -Cela confirme que ton câble fonctionne et que le driver est chargé. - ---- - -## 4. Voir si votre utilisateur a les permissions -On pourra voir `/dev/ttyUSB0` mais on ne peut pas l’utiliser, vérifier que votre utilisateur ait le groupe `dialout` : - -```bash -groups -``` - -Si le groupe **dialout** n’est pas dans la liste : - -```bash -sudo usermod -a -G dialout $USER -``` - -puis **redémarrer la session** et vérifier de nouveau avec la commande `groups`. Si nécessaire, redémarrer l'ordinateur. - ---- - -## 5. Vérifier la connexion -Si votre ESP32 est connecté sur `/dev/ttyUSB0`, vous pouvez le tester via `esptool` : - - esptool -p /dev/ttyUSB0 flash-id - -Exemple de sortie attendue : - -``` -esptool v5.1.0 -Connected to ESP32 on /dev/ttyUSB0: -Chip type: ESP32-D0WDQ6 (revision v1.0) -Features: Wi-Fi, BT, Dual Core + LP Core, 240MHz, Vref calibration in eFuse, Coding Scheme None -Crystal frequency: 40MHz -MAC: c4:4f:33:75:8c:9d - -Stub flasher running. - -Flash Memory Information: -# ============= -Manufacturer: 5e -Device: 4016 -Detected flash size: 4MB -Flash voltage set by a strapping pin: 3.3V - -Hard resetting via RTS pin... -``` - -Si ce rapport s’affiche correctement, la communication entre le PC et l’ESP32 est opérationnelle. \ No newline at end of file diff --git a/5cfc434d-26d8-4fba-b9e3-6a23fddb45d7/meta.json b/5cfc434d-26d8-4fba-b9e3-6a23fddb45d7/meta.json deleted file mode 100644 index 3edd424..0000000 --- a/5cfc434d-26d8-4fba-b9e3-6a23fddb45d7/meta.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "uuid": "5cfc434d-26d8-4fba-b9e3-6a23fddb45d7", - "slug": "esp32-connected-on-linux", - "title": "esp32 connected on linux", - "author": "cedric@abonnel.fr", - "published": true, - "published_at": "2025-11-19 12:12:17", - "created_at": "2025-11-19 12:12:17", - "updated_at": "2025-11-19 12:12:17", - "revisions": [], - "cover": "", - "files_meta": [], - "external_links": [], - "seo_title": "", - "seo_description": "", - "og_image": "", - "category": "Électronique" -} diff --git a/663b0638-10fd-4549-8ff5-aebb3285388f/index.md b/663b0638-10fd-4549-8ff5-aebb3285388f/index.md deleted file mode 100644 index 37da810..0000000 --- a/663b0638-10fd-4549-8ff5-aebb3285388f/index.md +++ /dev/null @@ -1,66 +0,0 @@ -# La 5G : promesse, dérivés et réalité - -### Technologie et promesse - -La **5G** est présentée comme la révolution ultime des réseaux mobiles. Débits massifs, latence ultra-faible, support d’un nombre astronomique d’objets connectés… mais derrière le discours marketing se cache une réalité plus nuancée : - -* **Débits théoriques** : 100 Mbit/s en usage réel, jusqu’à 10 Gbit/s sur bandes millimétriques (mmWave) et zones ultra-denses. -* **Latence** : 1–10 ms, permettant cloud gaming, véhicules autonomes et IoT industriel. -* **Architecture** : - - * **NSA (Non Standalone)** : la 5G repose sur la 4G pour le contrôle, 5G uniquement pour les débits. - * **SA (Standalone)** : réseau 5G indépendant avec cœur 5GC, latence minimale et optimisation maximale. -* **Fréquences** : de 700 MHz (longue portée) à 26 GHz (mmWave, très haut débit mais faible portée). - ---- - -### 5G+ : le “plus” marketing - -* La **5G+** n’est pas une nouvelle génération mais une **dénomination commerciale** pour la 5G sur fréquences millimétriques ou avec agrégation de bandes. -* Objectif : mettre en avant des débits spectaculaires (souvent >1 Gbit/s) sur des zones très localisées. -* Limitation : portée extrêmement courte et sensibilité aux obstacles. Les débits annoncés ne sont atteints que pour une minorité d’abonnés. - ---- - -### VoLTE : la voix sur LTE - -* **VoLTE (Voice over LTE)** permet de passer les appels vocaux via le réseau 4G au lieu de basculer sur la 2G/3G. -* Avantages : meilleure qualité sonore, connexion plus rapide, possibilité de passer simultanément un appel et utiliser Internet. -* Limitation : nécessite un smartphone compatible et un réseau correctement configuré. Dans certaines zones, les abonnés passent encore par la 3G pour la voix, même avec un smartphone récent. - ---- - -### DSS : Dynamic Spectrum Sharing - -* **DSS** permet de **partager dynamiquement le spectre** entre 4G et 5G sur les mêmes fréquences. -* Avantages pour l’opérateur : déploiement rapide de la 5G sans attendre la libération complète du spectre. -* Limitation : la 4G existante peut être légèrement dégradée, ce qui reproduit l’effet déjà observé avec la 3G bridée pour forcer la migration. - ---- - -### Schéma suggéré : architecture 4G vs 5G - -```mermaid -flowchart LR - subgraph 4G - A[UE - Mobile] --> B[eNodeB] - B --> C[EPC - Core Network] - end - - subgraph 5G - D[UE - Mobile] --> E[gNodeB] - E --> F[5GC - Core Network] - end -``` - -* La 5G remplace eNodeB/EPC par gNodeB/5GC, réduisant la latence et augmentant l’efficacité, mais l’accès réel à ces débits reste limité selon la fréquence et la zone. - ---- - -La 5G, avec ses variantes **5G+, VoLTE, DSS**, illustre la complexité croissante du paysage mobile : - -1. **Multiplicité des normes et labels** : 4G, 4G+, VoLTE, 5G, 5G+, DSS… pour l’utilisateur, il devient presque impossible de savoir ce qu’il utilise réellement. -2. **Marketing vs réalité** : les débits annoncés sont rarement atteints, et certaines zones restent sur une 4G bridée pour préparer la migration. -3. **Stratégie opérateur** : comme pour la 3G et la 4G, la pression sur l’utilisateur est subtile : dégrader légèrement les anciens réseaux, mettre en avant les nouvelles performances, et pousser à migrer progressivement. - -> La “révolution 5G” existe techniquement, mais pour le consommateur moyen, elle se traduit souvent par une interface confuse et des débits très variables. Les promesses marketing et la réalité économique du déploiement ne coïncident pas toujours. \ No newline at end of file diff --git a/663b0638-10fd-4549-8ff5-aebb3285388f/meta.json b/663b0638-10fd-4549-8ff5-aebb3285388f/meta.json deleted file mode 100644 index e68804c..0000000 --- a/663b0638-10fd-4549-8ff5-aebb3285388f/meta.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "uuid": "663b0638-10fd-4549-8ff5-aebb3285388f", - "slug": "la-5g-promesse-derives-et-realite", - "title": "La 5G : promesse, dérivés et réalité", - "author": "cedric@abonnel.fr", - "published": true, - "published_at": "2025-11-05 08:45:44", - "created_at": "2025-11-05 08:45:44", - "updated_at": "2025-11-05 08:45:44", - "revisions": [], - "cover": "cover.jpg", - "category": "télécom" -} diff --git a/68a07aea-8f12-4b6a-802a-03af83a09ad8/files/20201207-233302.png b/68a07aea-8f12-4b6a-802a-03af83a09ad8/files/20201207-233302.png deleted file mode 100644 index ec77278..0000000 Binary files a/68a07aea-8f12-4b6a-802a-03af83a09ad8/files/20201207-233302.png and /dev/null differ diff --git a/68a07aea-8f12-4b6a-802a-03af83a09ad8/files/20201212-134043.png b/68a07aea-8f12-4b6a-802a-03af83a09ad8/files/20201212-134043.png deleted file mode 100644 index 970b5a3..0000000 Binary files a/68a07aea-8f12-4b6a-802a-03af83a09ad8/files/20201212-134043.png and /dev/null differ diff --git a/68a07aea-8f12-4b6a-802a-03af83a09ad8/files/20201212-173952.png b/68a07aea-8f12-4b6a-802a-03af83a09ad8/files/20201212-173952.png deleted file mode 100644 index 2a9cc23..0000000 Binary files a/68a07aea-8f12-4b6a-802a-03af83a09ad8/files/20201212-173952.png and /dev/null differ diff --git a/68a07aea-8f12-4b6a-802a-03af83a09ad8/files/20201212-191417.png b/68a07aea-8f12-4b6a-802a-03af83a09ad8/files/20201212-191417.png deleted file mode 100644 index b09460f..0000000 Binary files a/68a07aea-8f12-4b6a-802a-03af83a09ad8/files/20201212-191417.png and /dev/null differ diff --git a/68a07aea-8f12-4b6a-802a-03af83a09ad8/files/20201213-083952.png b/68a07aea-8f12-4b6a-802a-03af83a09ad8/files/20201213-083952.png deleted file mode 100644 index e8f6880..0000000 Binary files a/68a07aea-8f12-4b6a-802a-03af83a09ad8/files/20201213-083952.png and /dev/null differ diff --git a/68a07aea-8f12-4b6a-802a-03af83a09ad8/files/20201213-084414.png b/68a07aea-8f12-4b6a-802a-03af83a09ad8/files/20201213-084414.png deleted file mode 100644 index 0dd0e19..0000000 Binary files a/68a07aea-8f12-4b6a-802a-03af83a09ad8/files/20201213-084414.png and /dev/null differ diff --git a/68a07aea-8f12-4b6a-802a-03af83a09ad8/index.md b/68a07aea-8f12-4b6a-802a-03af83a09ad8/index.md deleted file mode 100644 index 7035194..0000000 --- a/68a07aea-8f12-4b6a-802a-03af83a09ad8/index.md +++ /dev/null @@ -1,69 +0,0 @@ -# Adaptateur USB vers ESP-01 : activer le mode programmation - -![Adaptateur USB vers ESP-01](20201207-233302.png) - -## Présentation - -L'[adaptateur USB vers ESP-01 avec puce CH340](https://amzn.to/3oHZ1Eo) permet de connecter facilement un module ESP-01 (basé sur le microcontrôleur ESP8266) au port USB d'un ordinateur. Il intègre également un régulateur de tension 3,3 V, indispensable pour alimenter correctement l'ESP-01. - -Cet adaptateur sert à deux usages principaux : - -- **dialoguer avec l'ESP-01** via des commandes AT (commandes Hayes) afin de récupérer des informations ou de piloter le module ; -- **téléverser un firmware personnalisé** sur l'ESP8266, par exemple depuis l'IDE Arduino. - -> Lien d'achat : [adaptateur USB vers ESP-01 avec puce CH340](https://amzn.to/3oHZ1Eo) - -## Le problème : passer en mode programmation - -Par défaut, l'ESP-01 démarre en **mode UART** (communication série), qui convient pour échanger des commandes AT mais ne permet pas de flasher un nouveau firmware. Pour téléverser un programme, il faut basculer le module en **mode FLASH** (également appelé **mode programmation**). - -Cette bascule n'est pas logicielle : elle se fait **électriquement**, en forçant la broche **GPIO0** à la masse (**GND**) au moment du démarrage du module. - -De nombreux adaptateurs USB vers ESP-01 d'entrée de gamme ne prévoient pas de bouton ou de switch pour cette opération. Sans modification, toute tentative de téléversement échoue avec une erreur de ce type dans l'IDE Arduino : - -``` -esptool.py v2.8 -Serial port /dev/ttyUSB0 -Connecting........_....._....._....._....._....._....._....____ -... -esptool.FatalError: Failed to connect to ESP8266: Timed out waiting for packet header -``` - -![Erreur lors du téléversement vers ESP-01](20201212-191417.png) - -Le message clé est `Failed to connect to ESP8266: Timed out waiting for packet header` : `esptool.py` n'a pas réussi à mettre le module en mode flash et abandonne après plusieurs tentatives. - -## La solution : modifier l'adaptateur - -Pour rendre l'adaptateur compatible avec le mode programmation, il suffit d'ajouter un moyen de relier **GPIO0** à **GND** à la demande. Rappel du brochage de l'ESP-01 : - -![Brochage de l'ESP-01](20201212-134043.png) - -### Matériel nécessaire - -- un fer à souder et de l'étain ; -- deux fils fins ; -- une barrette de deux broches au pas de 2,54 mm ; -- un jumper ; -- éventuellement un pistolet à colle pour rigidifier l'ensemble. - -### Procédure - -1. Souder un premier fil sur la broche **GPIO0** (côté adaptateur). -2. Souder un second fil sur une broche **GND** (côté adaptateur). -3. Relier l'autre extrémité de chaque fil à une broche de la barrette, de manière à pouvoir court-circuiter GPIO0 et GND en plaçant simplement un jumper. -4. Fixer la barrette avec une goutte de colle chaude pour éviter que les fils ne tirent sur les soudures. - -![Adaptateur USB vers ESP-01 modifié et collé](20201213-084414.png) - -### Utilisation - -- **Pour téléverser un programme** : placer le jumper (GPIO0 relié à GND), insérer l'adaptateur dans le port USB, puis lancer le téléversement depuis l'IDE Arduino. -- **Pour utiliser le module normalement** (commandes AT ou exécution du firmware) : retirer le jumper, puis débrancher et rebrancher l'adaptateur pour redémarrer l'ESP-01 dans son mode standard. - -![Téléversement réussi](20201213-083952.png) - -## À retenir - -Le téléversement d'un nouveau firmware **écrase le code précédemment chargé**, y compris le firmware AT d'origine. Pour retrouver les commandes AT après avoir flashé un programme personnalisé, il faudra reflasher un firmware AT officiel d'Espressif. -``` diff --git a/68a07aea-8f12-4b6a-802a-03af83a09ad8/meta.json b/68a07aea-8f12-4b6a-802a-03af83a09ad8/meta.json deleted file mode 100644 index 9781dd0..0000000 --- a/68a07aea-8f12-4b6a-802a-03af83a09ad8/meta.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "uuid": "68a07aea-8f12-4b6a-802a-03af83a09ad8", - "slug": "adaptateur-usb-vers-esp-01-activer-le-mode-programmation", - "title": "Adaptateur USB vers ESP-01 : activer le mode programmation", - "author": "cedric@abonnel.fr", - "published": true, - "published_at": "2020-12-13 07:44", - "created_at": "2020-12-13 07:44:45", - "updated_at": "2026-05-13 18:21:06", - "revisions": [ - { - "n": 1, - "date": "2026-05-13 18:18:33", - "comment": "Titre modifié, contenu modifié", - "title": "Adaptateur USB vers ESP-01" - }, - { - "n": 2, - "date": "2026-05-13 18:21:06", - "comment": "Contenu modifié", - "title": "Adaptateur USB vers ESP-01 : activer le mode programmation" - } - ], - "cover": "", - "files_meta": { - "20201207-233302.png": { - "author": "", - "source_url": "" - }, - "20201212-134043.png": { - "author": "", - "source_url": "" - }, - "20201212-173952.png": { - "author": "", - "source_url": "" - }, - "20201212-191417.png": { - "author": "", - "source_url": "" - }, - "20201213-083952.png": { - "author": "", - "source_url": "" - }, - "20201213-084414.png": { - "author": "", - "source_url": "" - } - }, - "external_links": [], - "seo_title": "", - "seo_description": "", - "og_image": "", - "category": "Électronique" -} diff --git a/68a07aea-8f12-4b6a-802a-03af83a09ad8/revisions/0001.md b/68a07aea-8f12-4b6a-802a-03af83a09ad8/revisions/0001.md deleted file mode 100644 index a146d9e..0000000 --- a/68a07aea-8f12-4b6a-802a-03af83a09ad8/revisions/0001.md +++ /dev/null @@ -1,85 +0,0 @@ -# Adaptateur USB vers ESP-01 : activer le mode programmation - -![Adaptateur USB vers ESP-01](20201207-233302.png) - -## Présentation - -L'[adaptateur USB vers ESP-01 avec puce CH340](https://amzn.to/3oHZ1Eo) permet de connecter facilement un module ESP-01 (basé sur le microcontrôleur ESP8266) au port USB d'un ordinateur. Il intègre également un régulateur de tension 3,3 V, indispensable pour alimenter correctement l'ESP-01. - -Cet adaptateur sert à deux usages principaux : - -- **dialoguer avec l'ESP-01** via des commandes AT (commandes Hayes) afin de récupérer des informations ou de piloter le module ; -- **téléverser un firmware personnalisé** sur l'ESP8266, par exemple depuis l'IDE Arduino. - -> Lien d'achat : [adaptateur USB vers ESP-01 avec puce CH340](https://amzn.to/3oHZ1Eo) - -## Le problème : passer en mode programmation - -Par défaut, l'ESP-01 démarre en **mode UART** (communication série), qui convient pour échanger des commandes AT mais ne permet pas de flasher un nouveau firmware. Pour téléverser un programme, il faut basculer le module en **mode FLASH** (également appelé **mode programmation**). - -Cette bascule n'est pas logicielle : elle se fait **électriquement**, en forçant la broche **GPIO0** à la masse (**GND**) au moment du démarrage du module. - -De nombreux adaptateurs USB vers ESP-01 d'entrée de gamme ne prévoient pas de bouton ou de switch pour cette opération. Sans modification, toute tentative de téléversement échoue avec une erreur de ce type dans l'IDE Arduino : - -![Erreur lors du téléversement vers ESP-01](20201212-191417.png) - -``` -Executable segment sizes: -IROM : 234612 - code in flash (default or ICACHE_FLASH_ATTR) -IRAM : 26888 / 32768 - code in IRAM (ICACHE_RAM_ATTR, ISRs...) -DATA : 1252 ) - initialized variables (global, static) in RAM/HEAP -RODATA : 1376 ) / 81920 - constants (global, static) in RAM/HEAP -BSS : 25112 ) - zeroed variables (global, static) in RAM/HEAP -Le croquis utilise 264128 octets (25%) de l'espace de stockage de programmes. Le maximum est de 1044464 octets. -Les variables globales utilisent 27740 octets (33%) de mémoire dynamique, ce qui laisse 54180 octets pour les variables locales. Le maximum est de 81920 octets. -esptool.py v2.8 -Serial port /dev/ttyUSB0 -Connecting........_....._....._....._....._....._....._....____ -Traceback (most recent call last): - File ".../tools/upload.py", line 65, in - esptool.main(cmdline) - ... - File ".../esptool.py", line 483, in connect - raise FatalError('Failed to connect to %s: %s' % (self.CHIP_NAME, last_error)) -esptool.FatalError: Failed to connect to ESP8266: Timed out waiting for packet header -``` - -Le message clé ici est `Failed to connect to ESP8266: Timed out waiting for packet header` : l'outil `esptool.py` n'a pas réussi à mettre le module en mode flash et abandonne après plusieurs tentatives. - -## La solution : modifier l'adaptateur - -Pour rendre l'adaptateur compatible avec le mode programmation, il suffit d'ajouter un moyen de relier **GPIO0** à **GND** à la demande. Le rappel du brochage de l'ESP-01 : - -![Broches de l'ESP-01](20201212-134043.png) - -### Matériel nécessaire - -- un fer à souder et de l'étain ; -- deux fils fins ; -- une barrette de deux broches au pas de 2,54 mm ; -- un jumper ; -- éventuellement un pistolet à colle pour rigidifier l'ensemble. - -### Procédure - -1. Souder un premier fil sur la broche **GPIO0** (côté adaptateur). -2. Souder un second fil sur une broche **GND** (côté adaptateur). -3. Relier l'autre extrémité de chaque fil à une broche de la barrette deux points, de manière à pouvoir court-circuiter GPIO0 et GND en plaçant simplement un jumper. - -![Adaptateur USB vers ESP-01 modifié](20201212-173952.png) - -Une goutte de colle chaude permet ensuite de fixer la barrette sur le corps de l'adaptateur et d'éviter que les fils ne tirent sur les soudures, qui sont fragiles. - -![Finition de la modification](20201213-084414.png) - -### Utilisation - -- **Pour téléverser un programme** : placer le jumper (GPIO0 relié à GND), insérer l'adaptateur dans le port USB, puis lancer le téléversement depuis l'IDE Arduino. -- **Pour utiliser le module normalement** (commandes AT ou exécution du firmware) : retirer le jumper, puis débrancher et rebrancher l'adaptateur pour redémarrer l'ESP-01 dans son mode standard. - -![Téléversement réussi](20201213-083952.png) - -## À retenir - -Le téléversement d'un nouveau firmware **écrase le code précédemment chargé**, y compris le firmware AT d'origine. Pour retrouver l'usage des commandes AT après avoir flashé un programme personnalisé, il faudra reflasher un firmware AT officiel d'Espressif. - diff --git a/68a07aea-8f12-4b6a-802a-03af83a09ad8/revisions/0002.md b/68a07aea-8f12-4b6a-802a-03af83a09ad8/revisions/0002.md deleted file mode 100644 index 4fc5786..0000000 --- a/68a07aea-8f12-4b6a-802a-03af83a09ad8/revisions/0002.md +++ /dev/null @@ -1,67 +0,0 @@ -![Adaptateur USB vers ESP-01](20201207-233302.png) - -## Présentation - -L'[adaptateur USB vers ESP-01 avec puce CH340](https://amzn.to/3oHZ1Eo) permet de connecter facilement un module ESP-01 (basé sur le microcontrôleur ESP8266) au port USB d'un ordinateur. Il intègre également un régulateur de tension 3,3 V, indispensable pour alimenter correctement l'ESP-01. - -Cet adaptateur sert à deux usages principaux : - -- **dialoguer avec l'ESP-01** via des commandes AT (commandes Hayes) afin de récupérer des informations ou de piloter le module ; -- **téléverser un firmware personnalisé** sur l'ESP8266, par exemple depuis l'IDE Arduino. - -> Lien d'achat : [adaptateur USB vers ESP-01 avec puce CH340](https://amzn.to/3oHZ1Eo) - -## Le problème : passer en mode programmation - -Par défaut, l'ESP-01 démarre en **mode UART** (communication série), qui convient pour échanger des commandes AT mais ne permet pas de flasher un nouveau firmware. Pour téléverser un programme, il faut basculer le module en **mode FLASH** (également appelé **mode programmation**). - -Cette bascule n'est pas logicielle : elle se fait **électriquement**, en forçant la broche **GPIO0** à la masse (**GND**) au moment du démarrage du module. - -De nombreux adaptateurs USB vers ESP-01 d'entrée de gamme ne prévoient pas de bouton ou de switch pour cette opération. Sans modification, toute tentative de téléversement échoue avec une erreur de ce type dans l'IDE Arduino : - -``` -esptool.py v2.8 -Serial port /dev/ttyUSB0 -Connecting........_....._....._....._....._....._....._....____ -... -esptool.FatalError: Failed to connect to ESP8266: Timed out waiting for packet header -``` - -![Erreur lors du téléversement vers ESP-01](20201212-191417.png) - -Le message clé est `Failed to connect to ESP8266: Timed out waiting for packet header` : `esptool.py` n'a pas réussi à mettre le module en mode flash et abandonne après plusieurs tentatives. - -## La solution : modifier l'adaptateur - -Pour rendre l'adaptateur compatible avec le mode programmation, il suffit d'ajouter un moyen de relier **GPIO0** à **GND** à la demande. Rappel du brochage de l'ESP-01 : - -![Brochage de l'ESP-01](20201212-134043.png) - -### Matériel nécessaire - -- un fer à souder et de l'étain ; -- deux fils fins ; -- une barrette de deux broches au pas de 2,54 mm ; -- un jumper ; -- éventuellement un pistolet à colle pour rigidifier l'ensemble. - -### Procédure - -1. Souder un premier fil sur la broche **GPIO0** (côté adaptateur). -2. Souder un second fil sur une broche **GND** (côté adaptateur). -3. Relier l'autre extrémité de chaque fil à une broche de la barrette, de manière à pouvoir court-circuiter GPIO0 et GND en plaçant simplement un jumper. -4. Fixer la barrette avec une goutte de colle chaude pour éviter que les fils ne tirent sur les soudures. - -![Adaptateur USB vers ESP-01 modifié et collé](20201213-084414.png) - -### Utilisation - -- **Pour téléverser un programme** : placer le jumper (GPIO0 relié à GND), insérer l'adaptateur dans le port USB, puis lancer le téléversement depuis l'IDE Arduino. -- **Pour utiliser le module normalement** (commandes AT ou exécution du firmware) : retirer le jumper, puis débrancher et rebrancher l'adaptateur pour redémarrer l'ESP-01 dans son mode standard. - -![Téléversement réussi](20201213-083952.png) - -## À retenir - -Le téléversement d'un nouveau firmware **écrase le code précédemment chargé**, y compris le firmware AT d'origine. Pour retrouver les commandes AT après avoir flashé un programme personnalisé, il faudra reflasher un firmware AT officiel d'Espressif. -``` diff --git a/6f2639a5-58ed-4102-a6a2-0acbecf01de5/index.md b/6f2639a5-58ed-4102-a6a2-0acbecf01de5/index.md deleted file mode 100644 index 2b5e9da..0000000 --- a/6f2639a5-58ed-4102-a6a2-0acbecf01de5/index.md +++ /dev/null @@ -1,336 +0,0 @@ -# ESP8266 : prise en main des commandes AT - -## Présentation - -L'**ESP8266** est un microcontrôleur Wi-Fi développé par Espressif. Lorsqu'il sort d'usine, ou lorsqu'il est flashé avec le firmware AT officiel d'Espressif, il accepte un jeu d'instructions textuelles appelées **commandes AT** (ou **commandes Hayes**, du nom du fabricant de modems qui les a popularisées dans les années 1980). - -Le module **ESP-01**, le plus répandu pour découvrir l'ESP8266, est généralement livré avec ce firmware AT préchargé. Il est donc utilisable immédiatement, sans programmation, simplement en lui envoyant des commandes texte sur sa liaison série. - -> **Prérequis matériel** : un ESP-01 connecté à un PC via un [adaptateur USB-série](https://amzn.to/3oHZ1Eo), et un terminal série (moniteur série de l'IDE Arduino, `minicom`, `screen`, PuTTY…) configuré à 115200 bauds avec fin de ligne **CR+LF**. - -> **Note sur les versions** : la syntaxe et les codes retour des commandes AT varient selon la version du firmware. Les exemples ci-dessous correspondent à un firmware AT v1.x typique sur ESP-01. Pour les firmwares plus récents (AT v2.x sur ESP32), certaines commandes prennent des paramètres supplémentaires. - -## Travaux pratiques - -L'enchaînement ci-dessous permet de mettre l'ESP-01 sur un réseau Wi-Fi, puis de le transformer en serveur HTTP minimaliste. Chaque commande est envoyée depuis le terminal série ; les lignes préfixées par `->` représentent la réponse du module. - -### 1. Vérifier le mode Wi-Fi courant - -``` -AT+CWMODE? --> +CWMODE:1 --> OK -``` - -Le module répond avec un chiffre indiquant son mode courant (voir glossaire plus bas). - -### 2. Passer en mode dual (client + point d'accès) - -``` -AT+CWMODE=3 --> OK -``` - -Le mode 3 active simultanément le mode station (le module se connecte à un Wi-Fi existant) et le mode AP (le module expose son propre point d'accès). C'est le mode le plus polyvalent pour expérimenter. - -### 3. Se connecter à un réseau Wi-Fi - -``` -AT+CWJAP="ACEGRP_NET","motdepasse" --> WIFI CONNECTED --> WIFI GOT IP --> OK -``` - -Trois événements sont remontés successivement : - -- **WIFI CONNECTED** : association réussie au point d'accès ; -- **WIFI GOT IP** : adresse IP obtenue via DHCP ; -- **OK** : la commande est terminée avec succès. - -### 4. Lister les adresses IP et MAC du module - -``` -AT+CIFSR --> +CIFSR:APIP,"192.168.4.1" --> +CIFSR:APMAC,"1a:fe:34:9a:36:13" --> +CIFSR:STAIP,"192.168.101.20" --> +CIFSR:STAMAC,"18:fe:34:9a:36:13" --> OK -``` - -En mode dual, le module possède **deux interfaces réseau** : - -- **AP** (point d'accès) : adresse fixe `192.168.4.1` par défaut, sur laquelle se connectent les clients du Wi-Fi exposé par l'ESP ; -- **STA** (station/client) : adresse attribuée par le routeur du réseau auquel l'ESP s'est connecté. - -### 5. Activer les connexions multiples - -``` -AT+CIPMUX=1 --> OK -``` - -Par défaut, l'ESP n'accepte qu'une seule connexion TCP simultanée. Le mode multi-connexion est obligatoire pour faire fonctionner le module en serveur (étape suivante). - -### 6. Démarrer un serveur TCP sur le port 80 - -``` -AT+CIPSERVER=1,80 --> OK -``` - -Le module écoute désormais sur le port 80 de son adresse STA. Un simple navigateur pointé sur `http://192.168.101.20/` (l'adresse retournée par `AT+CIFSR`) déclenche une connexion HTTP. - -### 7. Observer une requête entrante - -Lorsqu'un client se connecte, l'ESP recopie sur la liaison série l'événement de connexion, puis la requête HTTP brute, et enfin la fermeture de la connexion : - -``` -0,CONNECT - -+IPD,0,341:GET / HTTP/1.1 -Host: 192.168.101.20 -User-Agent: Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:83.0) Gecko/20100101 Firefox/83.0 -Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 -Accept-Language: fr,fr-FR;q=0.5 -Accept-Encoding: gzip, deflate -DNT: 1 -Connection: keep-alive -Upgrade-Insecure-Requests: 1 - -0,CLOSED -``` - -Lecture : - -- `0,CONNECT` : un client vient de s'associer ; `0` est l'identifiant de connexion (link ID), utile en mode multi-connexion ; -- `+IPD,0,341:` : l'ESP a reçu **341 octets** sur la connexion `0` ; ces octets suivent immédiatement (ici, l'en-tête HTTP envoyé par Firefox) ; -- `0,CLOSED` : le client a fermé la connexion (ou un timeout est intervenu). - -À ce stade, l'ESP ne répond rien au client : il faut explicitement envoyer une réponse avec `AT+CIPSEND` (voir glossaire). Le navigateur affichera donc une page vide ou un message d'erreur. - -### Pour aller plus loin : répondre au client - -Pour renvoyer une page HTML minimale au client `0` : - -``` -AT+CIPSEND=0,44 ->HTTP/1.1 200 OK - -Bonjour depuis l'ESP -``` - -Le module affiche `>` et attend exactement le nombre d'octets annoncé, puis envoie le tout sur la connexion `0`. Il faut ensuite fermer la connexion avec : - -``` -AT+CIPCLOSE=0 -``` - ---- - -## Glossaire des commandes AT - -### Conventions - -Trois formes coexistent pour la plupart des commandes : - -| Forme | Syntaxe | Rôle | -|---|---|---| -| Interrogation | `AT+CMD?` | Lire la valeur courante | -| Test | `AT+CMD=?` | Lister les valeurs autorisées | -| Affectation | `AT+CMD=` | Modifier la valeur | - -Les chaînes de caractères (SSID, mot de passe…) sont toujours encadrées par des guillemets droits. - -### Commandes Wi-Fi - -#### `AT+CWMODE` — Mode de fonctionnement Wi-Fi - -``` -AT+CWMODE? # lire le mode courant -AT+CWMODE= # définir le mode -``` - -Valeurs de `` : - -| Valeur | Mode | Description | -|---|---|---| -| 1 | STA | Station/client : le module se connecte à un Wi-Fi existant | -| 2 | AP | Point d'accès : le module expose son propre Wi-Fi | -| 3 | STA+AP | Mode dual : les deux à la fois | - -Exemple : - -``` -AT+CWMODE? --> +CWMODE:1 --> OK -``` - -#### `AT+CWLAP` — Lister les points d'accès visibles - -``` -AT+CWLAP -``` - -Retourne une ligne par réseau détecté, sous la forme : - -``` -+CWLAP:(,"",,"",) -``` - -| Champ | Signification | -|---|---| -| `ecn` | Chiffrement : `0` ouvert, `1` WEP, `2` WPA-PSK, `3` WPA2-PSK, `4` WPA/WPA2-PSK | -| `ssid` | Nom du réseau | -| `rssi` | Puissance du signal en dBm (plus la valeur est proche de 0, plus le signal est fort) | -| `mac` | Adresse MAC du point d'accès (BSSID) | -| `canal` | Canal Wi-Fi (1 à 13 en Europe sur 2,4 GHz) | - -Exemple : - -``` -AT+CWLAP --> +CWLAP:(3,"ACEGRP_NET-F2",-22,"f8:9a:78:9b:67:05",4) --> +CWLAP:(3,"ACEGRP_NET",-68,"50:c7:bf:8c:4f:e9",6) --> +CWLAP:(3,"ACEGRP_NET",-82,"e0:24:81:49:14:eb",7) --> OK -``` - -**Prérequis** : `AT+CWMODE` doit inclure le mode station (1 ou 3). - -#### `AT+CWJAP` — Se connecter à un point d'accès - -``` -AT+CWJAP="","" -``` - -Codes d'erreur retournés en cas d'échec via `+CWJAP:` : - -| Code | Signification | -|---|---| -| 1 | Délai de connexion dépassé | -| 2 | Mot de passe incorrect | -| 3 | SSID introuvable | -| 4 | Échec de connexion (autre) | - -Exemple d'échec : - -``` -AT+CWJAP="ACEGRP_NET","mauvais_mdp" --> WIFI DISCONNECT --> +CWJAP:1 --> FAIL -``` - -Exemple de réussite : - -``` -AT+CWJAP="ACEGRP_NET","motdepasse" --> WIFI CONNECTED --> WIFI GOT IP --> OK -``` - -#### `AT+CWQAP` — Se déconnecter du point d'accès - -``` -AT+CWQAP --> OK -``` - -À ne pas confondre avec une commande de sauvegarde : `CWQAP` signifie *Quit AP*, c'est-à-dire **déconnexion**. Les paramètres de connexion (SSID, mot de passe) sont en revanche **automatiquement mémorisés en flash** par les commandes `CWJAP` et `CWMODE` dans les versions classiques du firmware AT — le module se reconnectera donc au démarrage suivant. - -#### `AT+CIFSR` — Adresses IP et MAC locales - -``` -AT+CIFSR -``` - -Renvoie les adresses IP et MAC du module pour chaque interface active : - -- `APIP` / `APMAC` : interface point d'accès (toujours `192.168.4.1` par défaut) ; -- `STAIP` / `STAMAC` : interface station (attribuée par le DHCP du réseau rejoint). - -En mode `CWMODE=1`, seule la partie STA est retournée ; en mode 2, seule la partie AP. - -### Commandes TCP/IP - -#### `AT+CIPMUX` — Activer les connexions multiples - -``` -AT+CIPMUX= -``` - -- `0` : connexion unique (mode par défaut) ; -- `1` : jusqu'à 5 connexions simultanées, chacune identifiée par un *link ID* de 0 à 4. - -**Prérequis pour passer en mode 1** : aucune connexion ne doit être active, et le module ne doit pas déjà être en mode serveur. - -#### `AT+CIPSERVER` — Démarrer un serveur TCP - -``` -AT+CIPSERVER=[,] -``` - -- `mode` : `1` pour démarrer, `0` pour arrêter ; -- `port` : port d'écoute, optionnel (par défaut **333**). - -**Prérequis** : `AT+CIPMUX=1` doit avoir été exécuté au préalable. - -Après un arrêt (`mode=0`), un redémarrage du module est nécessaire (`AT+RST`) pour libérer complètement le port. - -#### `AT+CIPSEND` — Envoyer des données sur une connexion - -``` -AT+CIPSEND=, # en mode multi-connexion (CIPMUX=1) -AT+CIPSEND= # en mode connexion unique -``` - -Le module affiche un prompt `>` et attend exactement `` octets, puis transmet le bloc au client. Indispensable pour répondre à une requête HTTP entrante. - -#### `AT+CIPCLOSE` — Fermer une connexion - -``` -AT+CIPCLOSE= # multi-connexion -AT+CIPCLOSE # connexion unique -``` - -### Commandes générales utiles - -| Commande | Rôle | -|---|---| -| `AT` | Test de présence du module (doit répondre `OK`) | -| `AT+RST` | Redémarrer le module | -| `AT+GMR` | Afficher la version du firmware AT | -| `AT+UART_CUR=,...` | Changer le débit série (non persistant) | -| `ATE0` / `ATE1` | Désactiver / activer l'écho des commandes | - ---- - -## Récapitulatif : déclarer un serveur HTTP minimal - -Séquence complète depuis un ESP-01 vierge : - -``` -AT+CWMODE=3 -AT+CWJAP="","" -AT+CIFSR # noter l'adresse STAIP -AT+CIPMUX=1 -AT+CIPSERVER=1,80 -``` - -À partir de cet instant, toute connexion entrante sur `http://:80/` est remontée sur le port série sous forme d'événements `+IPD`, à charge pour le programme côté PC (ou pour un firmware personnalisé) de les analyser et de répondre via `AT+CIPSEND`. - -## Limites du firmware AT - -Le firmware AT est pratique pour découvrir et tester l'ESP8266, mais il montre vite ses limites : - -- **latence** importante (chaque commande passe par le port série) ; -- **pas de TLS** correct dans les anciennes versions ; -- **complexité** pour gérer plusieurs clients simultanés ; -- **dépendance** à un hôte qui pilote l'ESP en permanence. - -Pour des projets plus aboutis, il est préférable de flasher l'ESP avec un firmware personnalisé (Arduino, ESP-IDF, MicroPython, Tasmota, ESPHome…) qui exécute directement la logique applicative sur le microcontrôleur, sans intermédiaire série. -``` diff --git a/6f2639a5-58ed-4102-a6a2-0acbecf01de5/meta.json b/6f2639a5-58ed-4102-a6a2-0acbecf01de5/meta.json deleted file mode 100644 index d2e952e..0000000 --- a/6f2639a5-58ed-4102-a6a2-0acbecf01de5/meta.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "uuid": "6f2639a5-58ed-4102-a6a2-0acbecf01de5", - "slug": "esp8266-commandes-at", - "title": "ESP8266 : prise en main des commandes AT", - "author": "cedric@abonnel.fr", - "published": true, - "published_at": "2020-12-13 08:51", - "created_at": "2020-12-13 08:51:55", - "updated_at": "2026-05-13 18:23:54", - "revisions": [ - { - "n": 1, - "date": "2026-05-13 18:23:54", - "comment": "Contenu modifié", - "title": "ESP8266 : prise en main des commandes AT" - } - ], - "cover": "", - "files_meta": [], - "external_links": [], - "seo_title": "", - "seo_description": "", - "og_image": "", - "category": "Électronique" -} diff --git a/6f2639a5-58ed-4102-a6a2-0acbecf01de5/revisions/0001.md b/6f2639a5-58ed-4102-a6a2-0acbecf01de5/revisions/0001.md deleted file mode 100644 index 80b6007..0000000 --- a/6f2639a5-58ed-4102-a6a2-0acbecf01de5/revisions/0001.md +++ /dev/null @@ -1,334 +0,0 @@ -## Présentation - -L'**ESP8266** est un microcontrôleur Wi-Fi développé par Espressif. Lorsqu'il sort d'usine, ou lorsqu'il est flashé avec le firmware AT officiel d'Espressif, il accepte un jeu d'instructions textuelles appelées **commandes AT** (ou **commandes Hayes**, du nom du fabricant de modems qui les a popularisées dans les années 1980). - -Le module **ESP-01**, le plus répandu pour découvrir l'ESP8266, est généralement livré avec ce firmware AT préchargé. Il est donc utilisable immédiatement, sans programmation, simplement en lui envoyant des commandes texte sur sa liaison série. - -> **Prérequis matériel** : un ESP-01 connecté à un PC via un [adaptateur USB-série](https://amzn.to/3oHZ1Eo), et un terminal série (moniteur série de l'IDE Arduino, `minicom`, `screen`, PuTTY…) configuré à 115200 bauds avec fin de ligne **CR+LF**. - -> **Note sur les versions** : la syntaxe et les codes retour des commandes AT varient selon la version du firmware. Les exemples ci-dessous correspondent à un firmware AT v1.x typique sur ESP-01. Pour les firmwares plus récents (AT v2.x sur ESP32), certaines commandes prennent des paramètres supplémentaires. - -## Travaux pratiques - -L'enchaînement ci-dessous permet de mettre l'ESP-01 sur un réseau Wi-Fi, puis de le transformer en serveur HTTP minimaliste. Chaque commande est envoyée depuis le terminal série ; les lignes préfixées par `->` représentent la réponse du module. - -### 1. Vérifier le mode Wi-Fi courant - -``` -AT+CWMODE? --> +CWMODE:1 --> OK -``` - -Le module répond avec un chiffre indiquant son mode courant (voir glossaire plus bas). - -### 2. Passer en mode dual (client + point d'accès) - -``` -AT+CWMODE=3 --> OK -``` - -Le mode 3 active simultanément le mode station (le module se connecte à un Wi-Fi existant) et le mode AP (le module expose son propre point d'accès). C'est le mode le plus polyvalent pour expérimenter. - -### 3. Se connecter à un réseau Wi-Fi - -``` -AT+CWJAP="ACEGRP_NET","motdepasse" --> WIFI CONNECTED --> WIFI GOT IP --> OK -``` - -Trois événements sont remontés successivement : - -- **WIFI CONNECTED** : association réussie au point d'accès ; -- **WIFI GOT IP** : adresse IP obtenue via DHCP ; -- **OK** : la commande est terminée avec succès. - -### 4. Lister les adresses IP et MAC du module - -``` -AT+CIFSR --> +CIFSR:APIP,"192.168.4.1" --> +CIFSR:APMAC,"1a:fe:34:9a:36:13" --> +CIFSR:STAIP,"192.168.101.20" --> +CIFSR:STAMAC,"18:fe:34:9a:36:13" --> OK -``` - -En mode dual, le module possède **deux interfaces réseau** : - -- **AP** (point d'accès) : adresse fixe `192.168.4.1` par défaut, sur laquelle se connectent les clients du Wi-Fi exposé par l'ESP ; -- **STA** (station/client) : adresse attribuée par le routeur du réseau auquel l'ESP s'est connecté. - -### 5. Activer les connexions multiples - -``` -AT+CIPMUX=1 --> OK -``` - -Par défaut, l'ESP n'accepte qu'une seule connexion TCP simultanée. Le mode multi-connexion est obligatoire pour faire fonctionner le module en serveur (étape suivante). - -### 6. Démarrer un serveur TCP sur le port 80 - -``` -AT+CIPSERVER=1,80 --> OK -``` - -Le module écoute désormais sur le port 80 de son adresse STA. Un simple navigateur pointé sur `http://192.168.101.20/` (l'adresse retournée par `AT+CIFSR`) déclenche une connexion HTTP. - -### 7. Observer une requête entrante - -Lorsqu'un client se connecte, l'ESP recopie sur la liaison série l'événement de connexion, puis la requête HTTP brute, et enfin la fermeture de la connexion : - -``` -0,CONNECT - -+IPD,0,341:GET / HTTP/1.1 -Host: 192.168.101.20 -User-Agent: Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:83.0) Gecko/20100101 Firefox/83.0 -Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 -Accept-Language: fr,fr-FR;q=0.5 -Accept-Encoding: gzip, deflate -DNT: 1 -Connection: keep-alive -Upgrade-Insecure-Requests: 1 - -0,CLOSED -``` - -Lecture : - -- `0,CONNECT` : un client vient de s'associer ; `0` est l'identifiant de connexion (link ID), utile en mode multi-connexion ; -- `+IPD,0,341:` : l'ESP a reçu **341 octets** sur la connexion `0` ; ces octets suivent immédiatement (ici, l'en-tête HTTP envoyé par Firefox) ; -- `0,CLOSED` : le client a fermé la connexion (ou un timeout est intervenu). - -À ce stade, l'ESP ne répond rien au client : il faut explicitement envoyer une réponse avec `AT+CIPSEND` (voir glossaire). Le navigateur affichera donc une page vide ou un message d'erreur. - -### Pour aller plus loin : répondre au client - -Pour renvoyer une page HTML minimale au client `0` : - -``` -AT+CIPSEND=0,44 ->HTTP/1.1 200 OK - -Bonjour depuis l'ESP -``` - -Le module affiche `>` et attend exactement le nombre d'octets annoncé, puis envoie le tout sur la connexion `0`. Il faut ensuite fermer la connexion avec : - -``` -AT+CIPCLOSE=0 -``` - ---- - -## Glossaire des commandes AT - -### Conventions - -Trois formes coexistent pour la plupart des commandes : - -| Forme | Syntaxe | Rôle | -|---|---|---| -| Interrogation | `AT+CMD?` | Lire la valeur courante | -| Test | `AT+CMD=?` | Lister les valeurs autorisées | -| Affectation | `AT+CMD=` | Modifier la valeur | - -Les chaînes de caractères (SSID, mot de passe…) sont toujours encadrées par des guillemets droits. - -### Commandes Wi-Fi - -#### `AT+CWMODE` — Mode de fonctionnement Wi-Fi - -``` -AT+CWMODE? # lire le mode courant -AT+CWMODE= # définir le mode -``` - -Valeurs de `` : - -| Valeur | Mode | Description | -|---|---|---| -| 1 | STA | Station/client : le module se connecte à un Wi-Fi existant | -| 2 | AP | Point d'accès : le module expose son propre Wi-Fi | -| 3 | STA+AP | Mode dual : les deux à la fois | - -Exemple : - -``` -AT+CWMODE? --> +CWMODE:1 --> OK -``` - -#### `AT+CWLAP` — Lister les points d'accès visibles - -``` -AT+CWLAP -``` - -Retourne une ligne par réseau détecté, sous la forme : - -``` -+CWLAP:(,"",,"",) -``` - -| Champ | Signification | -|---|---| -| `ecn` | Chiffrement : `0` ouvert, `1` WEP, `2` WPA-PSK, `3` WPA2-PSK, `4` WPA/WPA2-PSK | -| `ssid` | Nom du réseau | -| `rssi` | Puissance du signal en dBm (plus la valeur est proche de 0, plus le signal est fort) | -| `mac` | Adresse MAC du point d'accès (BSSID) | -| `canal` | Canal Wi-Fi (1 à 13 en Europe sur 2,4 GHz) | - -Exemple : - -``` -AT+CWLAP --> +CWLAP:(3,"ACEGRP_NET-F2",-22,"f8:9a:78:9b:67:05",4) --> +CWLAP:(3,"ACEGRP_NET",-68,"50:c7:bf:8c:4f:e9",6) --> +CWLAP:(3,"ACEGRP_NET",-82,"e0:24:81:49:14:eb",7) --> OK -``` - -**Prérequis** : `AT+CWMODE` doit inclure le mode station (1 ou 3). - -#### `AT+CWJAP` — Se connecter à un point d'accès - -``` -AT+CWJAP="","" -``` - -Codes d'erreur retournés en cas d'échec via `+CWJAP:` : - -| Code | Signification | -|---|---| -| 1 | Délai de connexion dépassé | -| 2 | Mot de passe incorrect | -| 3 | SSID introuvable | -| 4 | Échec de connexion (autre) | - -Exemple d'échec : - -``` -AT+CWJAP="ACEGRP_NET","mauvais_mdp" --> WIFI DISCONNECT --> +CWJAP:1 --> FAIL -``` - -Exemple de réussite : - -``` -AT+CWJAP="ACEGRP_NET","motdepasse" --> WIFI CONNECTED --> WIFI GOT IP --> OK -``` - -#### `AT+CWQAP` — Se déconnecter du point d'accès - -``` -AT+CWQAP --> OK -``` - -À ne pas confondre avec une commande de sauvegarde : `CWQAP` signifie *Quit AP*, c'est-à-dire **déconnexion**. Les paramètres de connexion (SSID, mot de passe) sont en revanche **automatiquement mémorisés en flash** par les commandes `CWJAP` et `CWMODE` dans les versions classiques du firmware AT — le module se reconnectera donc au démarrage suivant. - -#### `AT+CIFSR` — Adresses IP et MAC locales - -``` -AT+CIFSR -``` - -Renvoie les adresses IP et MAC du module pour chaque interface active : - -- `APIP` / `APMAC` : interface point d'accès (toujours `192.168.4.1` par défaut) ; -- `STAIP` / `STAMAC` : interface station (attribuée par le DHCP du réseau rejoint). - -En mode `CWMODE=1`, seule la partie STA est retournée ; en mode 2, seule la partie AP. - -### Commandes TCP/IP - -#### `AT+CIPMUX` — Activer les connexions multiples - -``` -AT+CIPMUX= -``` - -- `0` : connexion unique (mode par défaut) ; -- `1` : jusqu'à 5 connexions simultanées, chacune identifiée par un *link ID* de 0 à 4. - -**Prérequis pour passer en mode 1** : aucune connexion ne doit être active, et le module ne doit pas déjà être en mode serveur. - -#### `AT+CIPSERVER` — Démarrer un serveur TCP - -``` -AT+CIPSERVER=[,] -``` - -- `mode` : `1` pour démarrer, `0` pour arrêter ; -- `port` : port d'écoute, optionnel (par défaut **333**). - -**Prérequis** : `AT+CIPMUX=1` doit avoir été exécuté au préalable. - -Après un arrêt (`mode=0`), un redémarrage du module est nécessaire (`AT+RST`) pour libérer complètement le port. - -#### `AT+CIPSEND` — Envoyer des données sur une connexion - -``` -AT+CIPSEND=, # en mode multi-connexion (CIPMUX=1) -AT+CIPSEND= # en mode connexion unique -``` - -Le module affiche un prompt `>` et attend exactement `` octets, puis transmet le bloc au client. Indispensable pour répondre à une requête HTTP entrante. - -#### `AT+CIPCLOSE` — Fermer une connexion - -``` -AT+CIPCLOSE= # multi-connexion -AT+CIPCLOSE # connexion unique -``` - -### Commandes générales utiles - -| Commande | Rôle | -|---|---| -| `AT` | Test de présence du module (doit répondre `OK`) | -| `AT+RST` | Redémarrer le module | -| `AT+GMR` | Afficher la version du firmware AT | -| `AT+UART_CUR=,...` | Changer le débit série (non persistant) | -| `ATE0` / `ATE1` | Désactiver / activer l'écho des commandes | - ---- - -## Récapitulatif : déclarer un serveur HTTP minimal - -Séquence complète depuis un ESP-01 vierge : - -``` -AT+CWMODE=3 -AT+CWJAP="","" -AT+CIFSR # noter l'adresse STAIP -AT+CIPMUX=1 -AT+CIPSERVER=1,80 -``` - -À partir de cet instant, toute connexion entrante sur `http://:80/` est remontée sur le port série sous forme d'événements `+IPD`, à charge pour le programme côté PC (ou pour un firmware personnalisé) de les analyser et de répondre via `AT+CIPSEND`. - -## Limites du firmware AT - -Le firmware AT est pratique pour découvrir et tester l'ESP8266, mais il montre vite ses limites : - -- **latence** importante (chaque commande passe par le port série) ; -- **pas de TLS** correct dans les anciennes versions ; -- **complexité** pour gérer plusieurs clients simultanés ; -- **dépendance** à un hôte qui pilote l'ESP en permanence. - -Pour des projets plus aboutis, il est préférable de flasher l'ESP avec un firmware personnalisé (Arduino, ESP-IDF, MicroPython, Tasmota, ESPHome…) qui exécute directement la logique applicative sur le microcontrôleur, sans intermédiaire série. -``` diff --git a/70b5f213-db76-4072-afb6-f876fe67aaf8/files/cover.jpg b/70b5f213-db76-4072-afb6-f876fe67aaf8/files/cover.jpg deleted file mode 100644 index 67f6b82..0000000 Binary files a/70b5f213-db76-4072-afb6-f876fe67aaf8/files/cover.jpg and /dev/null differ diff --git a/70b5f213-db76-4072-afb6-f876fe67aaf8/index.md b/70b5f213-db76-4072-afb6-f876fe67aaf8/index.md deleted file mode 100644 index 1688813..0000000 --- a/70b5f213-db76-4072-afb6-f876fe67aaf8/index.md +++ /dev/null @@ -1,49 +0,0 @@ -# Non, le compteur Linky n'est pas conçu pour repérer votre voiture électrique - -*Démêlons le vrai du faux sur une affirmation qui revient régulièrement dans les débats autour de la fiscalité des véhicules à batterie.* - -Depuis plusieurs mois, à mesure que s'intensifient les discussions sur une éventuelle taxe kilométrique visant les voitures électriques, une affirmation refait surface avec insistance sur les réseaux sociaux et dans certains articles : *« Le compteur Linky a été conçu pour reconnaître la connexion d'une voiture à batterie. »* La formule est efficace, presque inquiétante, et elle nourrit l'idée d'un État qui aurait anticipé depuis longtemps la surveillance des automobilistes électriques via leur compteur domestique. - -Le problème, c'est que cette affirmation est tout simplement fausse. Ou plus exactement : elle confond grossièrement ce que Linky mesure réellement et ce qu'on lui prête comme capacités. Pour comprendre pourquoi, il faut revenir aux fondamentaux de ce qu'est un compteur électrique, même "intelligent". - -## Ce que Linky mesure réellement - -Un compteur Linky, c'est avant tout un instrument de mesure. Il enregistre la consommation électrique globale du logement, en temps quasi réel, avec une précision bien supérieure à celle des anciens compteurs électromécaniques. Concrètement, il relève la puissance instantanée appelée par l'ensemble de l'installation, l'intensité du courant qui circule sur les phases, ainsi que quelques paramètres plus techniques comme les harmoniques — des perturbations du signal qui renseignent sur la qualité du courant. - -Tout cela est agrégé. Linky voit *un total*, pas une ventilation appareil par appareil. Quand votre four à 3 kW se met en route, le compteur enregistre une montée de 3 kW. Quand une wallbox commence à charger une voiture à 3,7 kW, il enregistre une montée de 3,7 kW. Du point de vue de Linky, ces deux événements sont parfaitement indiscernables. Il n'a aucun moyen de savoir si l'électricité part vers une plaque de cuisson, un chauffe-eau, un radiateur ou une Tesla branchée au garage. - -C'est une limitation fondamentale, pas un oubli de conception : un compteur de tableau électrique se situe en amont de tout, sur l'arrivée générale. Il voit ce qui entre dans la maison, point final. - -## Ce que Linky ne sait pas faire — et ne saura jamais faire en l'état - -Contrairement à ce que certains articles laissent entendre, Linky n'a aucune capacité à identifier la nature des appareils qui se branchent. Il ne reconnaît pas une voiture électrique, ne lit pas les protocoles de communication entre une borne et un véhicule (Type 2, CCS, CHAdeMO), ne dialogue ni avec le chargeur embarqué ni avec le BMS — le système de gestion de batterie qui pilote la charge côté voiture. Aucune de ces fonctions ne figure dans ses spécifications techniques, qui sont publiques et consultables. - -Linky n'est ni une prise connectée capable de profiler ce qui s'y branche, ni un analyseur de charge avancé, ni un dispositif de reconnaissance d'appareils par signature. C'est un compteur de facturation, conçu pour relever votre consommation à distance et permettre à votre fournisseur d'affiner les offres tarifaires (heures creuses dynamiques, par exemple). Tout le reste relève du fantasme ou de la confusion. - -## D'où vient cette idée alors ? - -La rumeur n'est pas née de nulle part. Elle s'enracine dans deux éléments réels, mais largement mal interprétés. - -**Le premier, c'est l'existence de la TIC, la « télé-information client ».** Il s'agit d'une interface physique présente sur le compteur Linky, qui diffuse en continu certaines données : puissance souscrite, puissance instantanée appelée, index de consommation, période tarifaire en cours. Cette interface est *sortante* : elle envoie des informations vers l'extérieur, vers des appareils domestiques compatibles, mais elle ne reçoit rien en retour. - -Certaines wallbox modernes sont capables de se brancher sur cette TIC pour lire en direct la puissance déjà consommée dans le logement. Elles ajustent alors automatiquement la puissance de charge de la voiture pour ne pas faire disjoncter l'installation : si quelqu'un allume le four pendant que la voiture charge, la borne réduit son appel de courant. C'est une fonction très utile, mais elle fonctionne dans un seul sens. **La wallbox lit Linky. Linky ne lit pas la wallbox, et encore moins la voiture.** Beaucoup de gens, en entendant parler de wallbox "communiquant avec Linky", imaginent un dialogue bidirectionnel qui n'existe pas. - -**Le second élément, c'est l'arrivée du débat sur une taxe kilométrique.** Avec la baisse des recettes de TICPE liée à l'électrification du parc automobile, plusieurs think tanks et rapports parlementaires ont effectivement évoqué l'idée de taxer les kilomètres parcourus en VE, et certains ont mentionné Linky parmi les outils techniques *envisageables*. De cette spéculation prospective, une partie du public a tiré la conclusion que le compteur était déjà équipé pour le faire. Or il y a un gouffre entre « on pourrait peut-être un jour utiliser Linky comme brique d'un dispositif fiscal » et « Linky a été conçu pour ça ». Le premier est une hypothèse politique discutable ; le second est un raccourci qui ne correspond à aucune réalité technique. - -## Et techniquement, ce serait possible un jour ? - -C'est la question intéressante, et la réponse mérite plus de nuance qu'un simple oui ou non. - -Il existe effectivement un champ de recherche actif, baptisé **NILM** pour *Non-Intrusive Load Monitoring*. L'idée : analyser la courbe de consommation globale d'un logement pour en déduire, par traitement du signal et apprentissage automatique, quels appareils s'y trouvent et quand ils fonctionnent. Chaque appareil aurait, en théorie, une "signature électrique" reconnaissable — un profil d'appel de courant au démarrage, un comportement en régime, etc. - -En pratique, l'exercice est très difficile, et il l'est particulièrement pour la recharge d'un véhicule électrique. Une borne en charge se comporte comme une charge quasi constante de plusieurs kilowatts pendant plusieurs heures. C'est une signature… qui ressemble énormément à celle d'un chauffe-eau, d'un convecteur, d'un sèche-linge en cycle long ou d'un radiateur à inertie. Sans cadence de fonctionnement caractéristique, sans pics distinctifs, sans cycles courts, il n'y a rien de très spécifique à exploiter. Identifier de manière fiable qu'on a affaire à une voiture *et pas* à un autre appareil de puissance similaire reste un problème ouvert dans la littérature scientifique. - -Mais surtout, et c'est le point essentiel : **Linky n'embarque aucun de ces algorithmes**. Il transmet des données de comptage agrégées à Enedis, qui les utilise pour la facturation et la gestion du réseau. Enedis n'a ni la mission, ni le droit légal, ni l'infrastructure pour analyser appareil par appareil les usages domestiques de ses clients. Le cadre réglementaire français, notamment via la CNIL, encadre strictement ce qui peut être fait des données de consommation, et toute exploitation plus fine — même la courbe de charge à pas fin — nécessite le consentement explicite de l'abonné. - -## Ce qu'il faut retenir - -Le compteur Linky mesure votre consommation globale, c'est vrai. Il permet à certaines bornes de recharge de moduler intelligemment leur puissance via la TIC, c'est vrai aussi. Mais il ne reconnaît pas, n'identifie pas et ne distingue pas une voiture électrique des autres appareils du logement. Cette capacité n'existe ni dans son matériel, ni dans son logiciel, ni dans les données qu'il transmet à Enedis. - -L'affirmation selon laquelle « Linky a été conçu pour reconnaître la connexion d'une voiture à batterie » mélange donc trois choses très différentes : des capacités réelles mais limitées (mesure de puissance, interface TIC sortante), des usages techniques existants côté wallbox, et des hypothèses politiques sur de futurs dispositifs fiscaux. De cette confusion naît une rumeur frappante, mais infondée. - -Le débat sur la fiscalité des véhicules électriques est légitime et important. Il mérite mieux que des affirmations qui n'ont pas de base technique. \ No newline at end of file diff --git a/70b5f213-db76-4072-afb6-f876fe67aaf8/meta.json b/70b5f213-db76-4072-afb6-f876fe67aaf8/meta.json deleted file mode 100644 index 5c730b9..0000000 --- a/70b5f213-db76-4072-afb6-f876fe67aaf8/meta.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "uuid": "70b5f213-db76-4072-afb6-f876fe67aaf8", - "slug": "non-le-compteur-linky-ne-reconnait-pas-les-voitures-electriques", - "title": "Non, le compteur Linky n'est pas conçu pour repérer votre voiture électrique", - "author": "cedric@abonnel.fr", - "published": true, - "published_at": "2025-12-06 06:36", - "created_at": "2025-12-06 06:36:25", - "updated_at": "2026-05-12 01:32:46", - "revisions": [ - { - "n": 1, - "date": "2026-05-12 01:27:37", - "comment": "", - "title": "Non, le compteur Linky n'est pas conçu pour repérer votre voiture électrique" - }, - { - "n": 2, - "date": "2026-05-12 01:29:28", - "comment": "", - "title": "Non, le compteur Linky n'est pas conçu pour repérer votre voiture électrique" - }, - { - "n": 3, - "date": "2026-05-12 01:30:49", - "comment": "", - "title": "Non, le compteur Linky n'est pas conçu pour repérer votre voiture électrique" - }, - { - "n": 4, - "date": "2026-05-12 01:32:08", - "comment": "", - "title": "Non, le compteur Linky n'est pas conçu pour repérer votre voiture électrique" - }, - { - "n": 5, - "date": "2026-05-12 01:32:46", - "comment": "", - "title": "Non, le compteur Linky n'est pas conçu pour repérer votre voiture électrique" - } - ], - "cover": "cover.jpg", - "files_meta": { - "cover.jpg": { - "author": "", - "source_url": "https://www.letribunaldunet.fr/wp-content/uploads/2025/09/Maison-moderne-avec-panneaux-solaire-et-voiture-electrique-762x508.jpg" - }, - "18917a438b4d07f9-71431.jpg": { - "author": "", - "source_url": "" - } - }, - "external_links": [], - "seo_title": "", - "seo_description": "", - "og_image": "", - "category": "actualité" -} diff --git a/70b5f213-db76-4072-afb6-f876fe67aaf8/revisions/0001.md b/70b5f213-db76-4072-afb6-f876fe67aaf8/revisions/0001.md deleted file mode 100644 index 732c2b5..0000000 --- a/70b5f213-db76-4072-afb6-f876fe67aaf8/revisions/0001.md +++ /dev/null @@ -1,47 +0,0 @@ -*Démêlons le vrai du faux sur une affirmation qui revient régulièrement dans les débats autour de la fiscalité des véhicules à batterie.* - -Depuis plusieurs mois, à mesure que s'intensifient les discussions sur une éventuelle taxe kilométrique visant les voitures électriques, une affirmation refait surface avec insistance sur les réseaux sociaux et dans certains articles : *« Le compteur Linky a été conçu pour reconnaître la connexion d'une voiture à batterie. »* La formule est efficace, presque inquiétante, et elle nourrit l'idée d'un État qui aurait anticipé depuis longtemps la surveillance des automobilistes électriques via leur compteur domestique. - -Le problème, c'est que cette affirmation est tout simplement fausse. Ou plus exactement : elle confond grossièrement ce que Linky mesure réellement et ce qu'on lui prête comme capacités. Pour comprendre pourquoi, il faut revenir aux fondamentaux de ce qu'est un compteur électrique, même "intelligent". - -## Ce que Linky mesure réellement - -Un compteur Linky, c'est avant tout un instrument de mesure. Il enregistre la consommation électrique globale du logement, en temps quasi réel, avec une précision bien supérieure à celle des anciens compteurs électromécaniques. Concrètement, il relève la puissance instantanée appelée par l'ensemble de l'installation, l'intensité du courant qui circule sur les phases, ainsi que quelques paramètres plus techniques comme les harmoniques — des perturbations du signal qui renseignent sur la qualité du courant. - -Tout cela est agrégé. Linky voit *un total*, pas une ventilation appareil par appareil. Quand votre four à 3 kW se met en route, le compteur enregistre une montée de 3 kW. Quand une wallbox commence à charger une voiture à 3,7 kW, il enregistre une montée de 3,7 kW. Du point de vue de Linky, ces deux événements sont parfaitement indiscernables. Il n'a aucun moyen de savoir si l'électricité part vers une plaque de cuisson, un chauffe-eau, un radiateur ou une Tesla branchée au garage. - -C'est une limitation fondamentale, pas un oubli de conception : un compteur de tableau électrique se situe en amont de tout, sur l'arrivée générale. Il voit ce qui entre dans la maison, point final. - -## Ce que Linky ne sait pas faire — et ne saura jamais faire en l'état - -Contrairement à ce que certains articles laissent entendre, Linky n'a aucune capacité à identifier la nature des appareils qui se branchent. Il ne reconnaît pas une voiture électrique, ne lit pas les protocoles de communication entre une borne et un véhicule (Type 2, CCS, CHAdeMO), ne dialogue ni avec le chargeur embarqué ni avec le BMS — le système de gestion de batterie qui pilote la charge côté voiture. Aucune de ces fonctions ne figure dans ses spécifications techniques, qui sont publiques et consultables. - -Linky n'est ni une prise connectée capable de profiler ce qui s'y branche, ni un analyseur de charge avancé, ni un dispositif de reconnaissance d'appareils par signature. C'est un compteur de facturation, conçu pour relever votre consommation à distance et permettre à votre fournisseur d'affiner les offres tarifaires (heures creuses dynamiques, par exemple). Tout le reste relève du fantasme ou de la confusion. - -## D'où vient cette idée alors ? - -La rumeur n'est pas née de nulle part. Elle s'enracine dans deux éléments réels, mais largement mal interprétés. - -**Le premier, c'est l'existence de la TIC, la « télé-information client ».** Il s'agit d'une interface physique présente sur le compteur Linky, qui diffuse en continu certaines données : puissance souscrite, puissance instantanée appelée, index de consommation, période tarifaire en cours. Cette interface est *sortante* : elle envoie des informations vers l'extérieur, vers des appareils domestiques compatibles, mais elle ne reçoit rien en retour. - -Certaines wallbox modernes sont capables de se brancher sur cette TIC pour lire en direct la puissance déjà consommée dans le logement. Elles ajustent alors automatiquement la puissance de charge de la voiture pour ne pas faire disjoncter l'installation : si quelqu'un allume le four pendant que la voiture charge, la borne réduit son appel de courant. C'est une fonction très utile, mais elle fonctionne dans un seul sens. **La wallbox lit Linky. Linky ne lit pas la wallbox, et encore moins la voiture.** Beaucoup de gens, en entendant parler de wallbox "communiquant avec Linky", imaginent un dialogue bidirectionnel qui n'existe pas. - -**Le second élément, c'est l'arrivée du débat sur une taxe kilométrique.** Avec la baisse des recettes de TICPE liée à l'électrification du parc automobile, plusieurs think tanks et rapports parlementaires ont effectivement évoqué l'idée de taxer les kilomètres parcourus en VE, et certains ont mentionné Linky parmi les outils techniques *envisageables*. De cette spéculation prospective, une partie du public a tiré la conclusion que le compteur était déjà équipé pour le faire. Or il y a un gouffre entre « on pourrait peut-être un jour utiliser Linky comme brique d'un dispositif fiscal » et « Linky a été conçu pour ça ». Le premier est une hypothèse politique discutable ; le second est un raccourci qui ne correspond à aucune réalité technique. - -## Et techniquement, ce serait possible un jour ? - -C'est la question intéressante, et la réponse mérite plus de nuance qu'un simple oui ou non. - -Il existe effectivement un champ de recherche actif, baptisé **NILM** pour *Non-Intrusive Load Monitoring*. L'idée : analyser la courbe de consommation globale d'un logement pour en déduire, par traitement du signal et apprentissage automatique, quels appareils s'y trouvent et quand ils fonctionnent. Chaque appareil aurait, en théorie, une "signature électrique" reconnaissable — un profil d'appel de courant au démarrage, un comportement en régime, etc. - -En pratique, l'exercice est très difficile, et il l'est particulièrement pour la recharge d'un véhicule électrique. Une borne en charge se comporte comme une charge quasi constante de plusieurs kilowatts pendant plusieurs heures. C'est une signature… qui ressemble énormément à celle d'un chauffe-eau, d'un convecteur, d'un sèche-linge en cycle long ou d'un radiateur à inertie. Sans cadence de fonctionnement caractéristique, sans pics distinctifs, sans cycles courts, il n'y a rien de très spécifique à exploiter. Identifier de manière fiable qu'on a affaire à une voiture *et pas* à un autre appareil de puissance similaire reste un problème ouvert dans la littérature scientifique. - -Mais surtout, et c'est le point essentiel : **Linky n'embarque aucun de ces algorithmes**. Il transmet des données de comptage agrégées à Enedis, qui les utilise pour la facturation et la gestion du réseau. Enedis n'a ni la mission, ni le droit légal, ni l'infrastructure pour analyser appareil par appareil les usages domestiques de ses clients. Le cadre réglementaire français, notamment via la CNIL, encadre strictement ce qui peut être fait des données de consommation, et toute exploitation plus fine — même la courbe de charge à pas fin — nécessite le consentement explicite de l'abonné. - -## Ce qu'il faut retenir - -Le compteur Linky mesure votre consommation globale, c'est vrai. Il permet à certaines bornes de recharge de moduler intelligemment leur puissance via la TIC, c'est vrai aussi. Mais il ne reconnaît pas, n'identifie pas et ne distingue pas une voiture électrique des autres appareils du logement. Cette capacité n'existe ni dans son matériel, ni dans son logiciel, ni dans les données qu'il transmet à Enedis. - -L'affirmation selon laquelle « Linky a été conçu pour reconnaître la connexion d'une voiture à batterie » mélange donc trois choses très différentes : des capacités réelles mais limitées (mesure de puissance, interface TIC sortante), des usages techniques existants côté wallbox, et des hypothèses politiques sur de futurs dispositifs fiscaux. De cette confusion naît une rumeur frappante, mais infondée. - -Le débat sur la fiscalité des véhicules électriques est légitime et important. Il mérite mieux que des affirmations qui n'ont pas de base technique. \ No newline at end of file diff --git a/70b5f213-db76-4072-afb6-f876fe67aaf8/revisions/0002.md b/70b5f213-db76-4072-afb6-f876fe67aaf8/revisions/0002.md deleted file mode 100644 index d48f1c1..0000000 --- a/70b5f213-db76-4072-afb6-f876fe67aaf8/revisions/0002.md +++ /dev/null @@ -1,47 +0,0 @@ -*Démêlons le vrai du faux sur une affirmation qui revient régulièrement dans les débats autour de la fiscalité des véhicules à batterie.* - -Depuis plusieurs mois, à mesure que s'intensifient les discussions sur une éventuelle taxe kilométrique visant les voitures électriques, une affirmation refait surface avec insistance sur les réseaux sociaux et dans certains articles : *« Le compteur Linky a été conçu pour reconnaître la connexion d'une voiture à batterie. »* La formule est efficace, presque inquiétante, et elle nourrit l'idée d'un État qui aurait anticipé depuis longtemps la surveillance des automobilistes électriques via leur compteur domestique. - -Le problème, c'est que cette affirmation est tout simplement fausse. Ou plus exactement : elle confond grossièrement ce que Linky mesure réellement et ce qu'on lui prête comme capacités. Pour comprendre pourquoi, il faut revenir aux fondamentaux de ce qu'est un compteur électrique, même "intelligent". - -## Ce que Linky mesure réellement - -Un compteur Linky, c'est avant tout un instrument de mesure. Il enregistre la consommation électrique globale du logement, en temps quasi réel, avec une précision bien supérieure à celle des anciens compteurs électromécaniques. Concrètement, il relève la puissance instantanée appelée par l'ensemble de l'installation, l'intensité du courant qui circule sur les phases, ainsi que quelques paramètres plus techniques comme les harmoniques — des perturbations du signal qui renseignent sur la qualité du courant. - -Tout cela est agrégé. Linky voit *un total*, pas une ventilation appareil par appareil. Quand votre four à 3 kW se met en route, le compteur enregistre une montée de 3 kW. Quand une wallbox commence à charger une voiture à 3,7 kW, il enregistre une montée de 3,7 kW. Du point de vue de Linky, ces deux événements sont parfaitement indiscernables. Il n'a aucun moyen de savoir si l'électricité part vers une plaque de cuisson, un chauffe-eau, un radiateur ou une Tesla branchée au garage. - -C'est une limitation fondamentale, pas un oubli de conception : un compteur de tableau électrique se situe en amont de tout, sur l'arrivée générale. Il voit ce qui entre dans la maison, point final. - -## Ce que Linky ne sait pas faire — et ne saura jamais faire en l'état - -Contrairement à ce que certains articles laissent entendre, Linky n'a aucune capacité à identifier la nature des appareils qui se branchent. Il ne reconnaît pas une voiture électrique, ne lit pas les protocoles de communication entre une borne et un véhicule (Type 2, CCS, CHAdeMO), ne dialogue ni avec le chargeur embarqué ni avec le BMS — le système de gestion de batterie qui pilote la charge côté voiture. Aucune de ces fonctions ne figure dans ses spécifications techniques, qui sont publiques et consultables. - -Linky n'est ni une prise connectée capable de profiler ce qui s'y branche, ni un analyseur de charge avancé, ni un dispositif de reconnaissance d'appareils par signature. C'est un compteur de facturation, conçu pour relever votre consommation à distance et permettre à votre fournisseur d'affiner les offres tarifaires (heures creuses dynamiques, par exemple). Tout le reste relève du fantasme ou de la confusion. - -## D'où vient cette idée alors ? - -La rumeur n'est pas née de nulle part. Elle s'enracine dans deux éléments réels, mais largement mal interprétés. - -**Le premier, c'est l'existence de la TIC, la « télé-information client ».** Il s'agit d'une interface physique présente sur le compteur Linky, qui diffuse en continu certaines données : puissance souscrite, puissance instantanée appelée, index de consommation, période tarifaire en cours. Cette interface est *sortante* : elle envoie des informations vers l'extérieur, vers des appareils domestiques compatibles, mais elle ne reçoit rien en retour. - -Certaines wallbox modernes sont capables de se brancher sur cette TIC pour lire en direct la puissance déjà consommée dans le logement. Elles ajustent alors automatiquement la puissance de charge de la voiture pour ne pas faire disjoncter l'installation : si quelqu'un allume le four pendant que la voiture charge, la borne réduit son appel de courant. C'est une fonction très utile, mais elle fonctionne dans un seul sens. **La wallbox lit Linky. Linky ne lit pas la wallbox, et encore moins la voiture.** Beaucoup de gens, en entendant parler de wallbox "communiquant avec Linky", imaginent un dialogue bidirectionnel qui n'existe pas. - -**Le second élément, c'est l'arrivée du débat sur une taxe kilométrique.** Avec la baisse des recettes de TICPE liée à l'électrification du parc automobile, plusieurs think tanks et rapports parlementaires ont effectivement évoqué l'idée de taxer les kilomètres parcourus en VE, et certains ont mentionné Linky parmi les outils techniques *envisageables*. De cette spéculation prospective, une partie du public a tiré la conclusion que le compteur était déjà équipé pour le faire. Or il y a un gouffre entre « on pourrait peut-être un jour utiliser Linky comme brique d'un dispositif fiscal » et « Linky a été conçu pour ça ». Le premier est une hypothèse politique discutable ; le second est un raccourci qui ne correspond à aucune réalité technique. - -## Et techniquement, ce serait possible un jour ? - -C'est la question intéressante, et la réponse mérite plus de nuance qu'un simple oui ou non. - -Il existe effectivement un champ de recherche actif, baptisé **NILM** pour *Non-Intrusive Load Monitoring*. L'idée : analyser la courbe de consommation globale d'un logement pour en déduire, par traitement du signal et apprentissage automatique, quels appareils s'y trouvent et quand ils fonctionnent. Chaque appareil aurait, en théorie, une "signature électrique" reconnaissable — un profil d'appel de courant au démarrage, un comportement en régime, etc. - -En pratique, l'exercice est très difficile, et il l'est particulièrement pour la recharge d'un véhicule électrique. Une borne en charge se comporte comme une charge quasi constante de plusieurs kilowatts pendant plusieurs heures. C'est une signature… qui ressemble énormément à celle d'un chauffe-eau, d'un convecteur, d'un sèche-linge en cycle long ou d'un radiateur à inertie. Sans cadence de fonctionnement caractéristique, sans pics distinctifs, sans cycles courts, il n'y a rien de très spécifique à exploiter. Identifier de manière fiable qu'on a affaire à une voiture *et pas* à un autre appareil de puissance similaire reste un problème ouvert dans la littérature scientifique. - -Mais surtout, et c'est le point essentiel : **Linky n'embarque aucun de ces algorithmes**. Il transmet des données de comptage agrégées à Enedis, qui les utilise pour la facturation et la gestion du réseau. Enedis n'a ni la mission, ni le droit légal, ni l'infrastructure pour analyser appareil par appareil les usages domestiques de ses clients. Le cadre réglementaire français, notamment via la CNIL, encadre strictement ce qui peut être fait des données de consommation, et toute exploitation plus fine — même la courbe de charge à pas fin — nécessite le consentement explicite de l'abonné. - -## Ce qu'il faut retenir - -Le compteur Linky mesure votre consommation globale, c'est vrai. Il permet à certaines bornes de recharge de moduler intelligemment leur puissance via la TIC, c'est vrai aussi. Mais il ne reconnaît pas, n'identifie pas et ne distingue pas une voiture électrique des autres appareils du logement. Cette capacité n'existe ni dans son matériel, ni dans son logiciel, ni dans les données qu'il transmet à Enedis. - -L'affirmation selon laquelle « Linky a été conçu pour reconnaître la connexion d'une voiture à batterie » mélange donc trois choses très différentes : des capacités réelles mais limitées (mesure de puissance, interface TIC sortante), des usages techniques existants côté wallbox, et des hypothèses politiques sur de futurs dispositifs fiscaux. De cette confusion naît une rumeur frappante, mais infondée. - -Le débat sur la fiscalité des véhicules électriques est légitime et important. Il mérite mieux que des affirmations qui n'ont pas de base technique. \ No newline at end of file diff --git a/70b5f213-db76-4072-afb6-f876fe67aaf8/revisions/0003.md b/70b5f213-db76-4072-afb6-f876fe67aaf8/revisions/0003.md deleted file mode 100644 index d48f1c1..0000000 --- a/70b5f213-db76-4072-afb6-f876fe67aaf8/revisions/0003.md +++ /dev/null @@ -1,47 +0,0 @@ -*Démêlons le vrai du faux sur une affirmation qui revient régulièrement dans les débats autour de la fiscalité des véhicules à batterie.* - -Depuis plusieurs mois, à mesure que s'intensifient les discussions sur une éventuelle taxe kilométrique visant les voitures électriques, une affirmation refait surface avec insistance sur les réseaux sociaux et dans certains articles : *« Le compteur Linky a été conçu pour reconnaître la connexion d'une voiture à batterie. »* La formule est efficace, presque inquiétante, et elle nourrit l'idée d'un État qui aurait anticipé depuis longtemps la surveillance des automobilistes électriques via leur compteur domestique. - -Le problème, c'est que cette affirmation est tout simplement fausse. Ou plus exactement : elle confond grossièrement ce que Linky mesure réellement et ce qu'on lui prête comme capacités. Pour comprendre pourquoi, il faut revenir aux fondamentaux de ce qu'est un compteur électrique, même "intelligent". - -## Ce que Linky mesure réellement - -Un compteur Linky, c'est avant tout un instrument de mesure. Il enregistre la consommation électrique globale du logement, en temps quasi réel, avec une précision bien supérieure à celle des anciens compteurs électromécaniques. Concrètement, il relève la puissance instantanée appelée par l'ensemble de l'installation, l'intensité du courant qui circule sur les phases, ainsi que quelques paramètres plus techniques comme les harmoniques — des perturbations du signal qui renseignent sur la qualité du courant. - -Tout cela est agrégé. Linky voit *un total*, pas une ventilation appareil par appareil. Quand votre four à 3 kW se met en route, le compteur enregistre une montée de 3 kW. Quand une wallbox commence à charger une voiture à 3,7 kW, il enregistre une montée de 3,7 kW. Du point de vue de Linky, ces deux événements sont parfaitement indiscernables. Il n'a aucun moyen de savoir si l'électricité part vers une plaque de cuisson, un chauffe-eau, un radiateur ou une Tesla branchée au garage. - -C'est une limitation fondamentale, pas un oubli de conception : un compteur de tableau électrique se situe en amont de tout, sur l'arrivée générale. Il voit ce qui entre dans la maison, point final. - -## Ce que Linky ne sait pas faire — et ne saura jamais faire en l'état - -Contrairement à ce que certains articles laissent entendre, Linky n'a aucune capacité à identifier la nature des appareils qui se branchent. Il ne reconnaît pas une voiture électrique, ne lit pas les protocoles de communication entre une borne et un véhicule (Type 2, CCS, CHAdeMO), ne dialogue ni avec le chargeur embarqué ni avec le BMS — le système de gestion de batterie qui pilote la charge côté voiture. Aucune de ces fonctions ne figure dans ses spécifications techniques, qui sont publiques et consultables. - -Linky n'est ni une prise connectée capable de profiler ce qui s'y branche, ni un analyseur de charge avancé, ni un dispositif de reconnaissance d'appareils par signature. C'est un compteur de facturation, conçu pour relever votre consommation à distance et permettre à votre fournisseur d'affiner les offres tarifaires (heures creuses dynamiques, par exemple). Tout le reste relève du fantasme ou de la confusion. - -## D'où vient cette idée alors ? - -La rumeur n'est pas née de nulle part. Elle s'enracine dans deux éléments réels, mais largement mal interprétés. - -**Le premier, c'est l'existence de la TIC, la « télé-information client ».** Il s'agit d'une interface physique présente sur le compteur Linky, qui diffuse en continu certaines données : puissance souscrite, puissance instantanée appelée, index de consommation, période tarifaire en cours. Cette interface est *sortante* : elle envoie des informations vers l'extérieur, vers des appareils domestiques compatibles, mais elle ne reçoit rien en retour. - -Certaines wallbox modernes sont capables de se brancher sur cette TIC pour lire en direct la puissance déjà consommée dans le logement. Elles ajustent alors automatiquement la puissance de charge de la voiture pour ne pas faire disjoncter l'installation : si quelqu'un allume le four pendant que la voiture charge, la borne réduit son appel de courant. C'est une fonction très utile, mais elle fonctionne dans un seul sens. **La wallbox lit Linky. Linky ne lit pas la wallbox, et encore moins la voiture.** Beaucoup de gens, en entendant parler de wallbox "communiquant avec Linky", imaginent un dialogue bidirectionnel qui n'existe pas. - -**Le second élément, c'est l'arrivée du débat sur une taxe kilométrique.** Avec la baisse des recettes de TICPE liée à l'électrification du parc automobile, plusieurs think tanks et rapports parlementaires ont effectivement évoqué l'idée de taxer les kilomètres parcourus en VE, et certains ont mentionné Linky parmi les outils techniques *envisageables*. De cette spéculation prospective, une partie du public a tiré la conclusion que le compteur était déjà équipé pour le faire. Or il y a un gouffre entre « on pourrait peut-être un jour utiliser Linky comme brique d'un dispositif fiscal » et « Linky a été conçu pour ça ». Le premier est une hypothèse politique discutable ; le second est un raccourci qui ne correspond à aucune réalité technique. - -## Et techniquement, ce serait possible un jour ? - -C'est la question intéressante, et la réponse mérite plus de nuance qu'un simple oui ou non. - -Il existe effectivement un champ de recherche actif, baptisé **NILM** pour *Non-Intrusive Load Monitoring*. L'idée : analyser la courbe de consommation globale d'un logement pour en déduire, par traitement du signal et apprentissage automatique, quels appareils s'y trouvent et quand ils fonctionnent. Chaque appareil aurait, en théorie, une "signature électrique" reconnaissable — un profil d'appel de courant au démarrage, un comportement en régime, etc. - -En pratique, l'exercice est très difficile, et il l'est particulièrement pour la recharge d'un véhicule électrique. Une borne en charge se comporte comme une charge quasi constante de plusieurs kilowatts pendant plusieurs heures. C'est une signature… qui ressemble énormément à celle d'un chauffe-eau, d'un convecteur, d'un sèche-linge en cycle long ou d'un radiateur à inertie. Sans cadence de fonctionnement caractéristique, sans pics distinctifs, sans cycles courts, il n'y a rien de très spécifique à exploiter. Identifier de manière fiable qu'on a affaire à une voiture *et pas* à un autre appareil de puissance similaire reste un problème ouvert dans la littérature scientifique. - -Mais surtout, et c'est le point essentiel : **Linky n'embarque aucun de ces algorithmes**. Il transmet des données de comptage agrégées à Enedis, qui les utilise pour la facturation et la gestion du réseau. Enedis n'a ni la mission, ni le droit légal, ni l'infrastructure pour analyser appareil par appareil les usages domestiques de ses clients. Le cadre réglementaire français, notamment via la CNIL, encadre strictement ce qui peut être fait des données de consommation, et toute exploitation plus fine — même la courbe de charge à pas fin — nécessite le consentement explicite de l'abonné. - -## Ce qu'il faut retenir - -Le compteur Linky mesure votre consommation globale, c'est vrai. Il permet à certaines bornes de recharge de moduler intelligemment leur puissance via la TIC, c'est vrai aussi. Mais il ne reconnaît pas, n'identifie pas et ne distingue pas une voiture électrique des autres appareils du logement. Cette capacité n'existe ni dans son matériel, ni dans son logiciel, ni dans les données qu'il transmet à Enedis. - -L'affirmation selon laquelle « Linky a été conçu pour reconnaître la connexion d'une voiture à batterie » mélange donc trois choses très différentes : des capacités réelles mais limitées (mesure de puissance, interface TIC sortante), des usages techniques existants côté wallbox, et des hypothèses politiques sur de futurs dispositifs fiscaux. De cette confusion naît une rumeur frappante, mais infondée. - -Le débat sur la fiscalité des véhicules électriques est légitime et important. Il mérite mieux que des affirmations qui n'ont pas de base technique. \ No newline at end of file diff --git a/70b5f213-db76-4072-afb6-f876fe67aaf8/revisions/0004.md b/70b5f213-db76-4072-afb6-f876fe67aaf8/revisions/0004.md deleted file mode 100644 index d48f1c1..0000000 --- a/70b5f213-db76-4072-afb6-f876fe67aaf8/revisions/0004.md +++ /dev/null @@ -1,47 +0,0 @@ -*Démêlons le vrai du faux sur une affirmation qui revient régulièrement dans les débats autour de la fiscalité des véhicules à batterie.* - -Depuis plusieurs mois, à mesure que s'intensifient les discussions sur une éventuelle taxe kilométrique visant les voitures électriques, une affirmation refait surface avec insistance sur les réseaux sociaux et dans certains articles : *« Le compteur Linky a été conçu pour reconnaître la connexion d'une voiture à batterie. »* La formule est efficace, presque inquiétante, et elle nourrit l'idée d'un État qui aurait anticipé depuis longtemps la surveillance des automobilistes électriques via leur compteur domestique. - -Le problème, c'est que cette affirmation est tout simplement fausse. Ou plus exactement : elle confond grossièrement ce que Linky mesure réellement et ce qu'on lui prête comme capacités. Pour comprendre pourquoi, il faut revenir aux fondamentaux de ce qu'est un compteur électrique, même "intelligent". - -## Ce que Linky mesure réellement - -Un compteur Linky, c'est avant tout un instrument de mesure. Il enregistre la consommation électrique globale du logement, en temps quasi réel, avec une précision bien supérieure à celle des anciens compteurs électromécaniques. Concrètement, il relève la puissance instantanée appelée par l'ensemble de l'installation, l'intensité du courant qui circule sur les phases, ainsi que quelques paramètres plus techniques comme les harmoniques — des perturbations du signal qui renseignent sur la qualité du courant. - -Tout cela est agrégé. Linky voit *un total*, pas une ventilation appareil par appareil. Quand votre four à 3 kW se met en route, le compteur enregistre une montée de 3 kW. Quand une wallbox commence à charger une voiture à 3,7 kW, il enregistre une montée de 3,7 kW. Du point de vue de Linky, ces deux événements sont parfaitement indiscernables. Il n'a aucun moyen de savoir si l'électricité part vers une plaque de cuisson, un chauffe-eau, un radiateur ou une Tesla branchée au garage. - -C'est une limitation fondamentale, pas un oubli de conception : un compteur de tableau électrique se situe en amont de tout, sur l'arrivée générale. Il voit ce qui entre dans la maison, point final. - -## Ce que Linky ne sait pas faire — et ne saura jamais faire en l'état - -Contrairement à ce que certains articles laissent entendre, Linky n'a aucune capacité à identifier la nature des appareils qui se branchent. Il ne reconnaît pas une voiture électrique, ne lit pas les protocoles de communication entre une borne et un véhicule (Type 2, CCS, CHAdeMO), ne dialogue ni avec le chargeur embarqué ni avec le BMS — le système de gestion de batterie qui pilote la charge côté voiture. Aucune de ces fonctions ne figure dans ses spécifications techniques, qui sont publiques et consultables. - -Linky n'est ni une prise connectée capable de profiler ce qui s'y branche, ni un analyseur de charge avancé, ni un dispositif de reconnaissance d'appareils par signature. C'est un compteur de facturation, conçu pour relever votre consommation à distance et permettre à votre fournisseur d'affiner les offres tarifaires (heures creuses dynamiques, par exemple). Tout le reste relève du fantasme ou de la confusion. - -## D'où vient cette idée alors ? - -La rumeur n'est pas née de nulle part. Elle s'enracine dans deux éléments réels, mais largement mal interprétés. - -**Le premier, c'est l'existence de la TIC, la « télé-information client ».** Il s'agit d'une interface physique présente sur le compteur Linky, qui diffuse en continu certaines données : puissance souscrite, puissance instantanée appelée, index de consommation, période tarifaire en cours. Cette interface est *sortante* : elle envoie des informations vers l'extérieur, vers des appareils domestiques compatibles, mais elle ne reçoit rien en retour. - -Certaines wallbox modernes sont capables de se brancher sur cette TIC pour lire en direct la puissance déjà consommée dans le logement. Elles ajustent alors automatiquement la puissance de charge de la voiture pour ne pas faire disjoncter l'installation : si quelqu'un allume le four pendant que la voiture charge, la borne réduit son appel de courant. C'est une fonction très utile, mais elle fonctionne dans un seul sens. **La wallbox lit Linky. Linky ne lit pas la wallbox, et encore moins la voiture.** Beaucoup de gens, en entendant parler de wallbox "communiquant avec Linky", imaginent un dialogue bidirectionnel qui n'existe pas. - -**Le second élément, c'est l'arrivée du débat sur une taxe kilométrique.** Avec la baisse des recettes de TICPE liée à l'électrification du parc automobile, plusieurs think tanks et rapports parlementaires ont effectivement évoqué l'idée de taxer les kilomètres parcourus en VE, et certains ont mentionné Linky parmi les outils techniques *envisageables*. De cette spéculation prospective, une partie du public a tiré la conclusion que le compteur était déjà équipé pour le faire. Or il y a un gouffre entre « on pourrait peut-être un jour utiliser Linky comme brique d'un dispositif fiscal » et « Linky a été conçu pour ça ». Le premier est une hypothèse politique discutable ; le second est un raccourci qui ne correspond à aucune réalité technique. - -## Et techniquement, ce serait possible un jour ? - -C'est la question intéressante, et la réponse mérite plus de nuance qu'un simple oui ou non. - -Il existe effectivement un champ de recherche actif, baptisé **NILM** pour *Non-Intrusive Load Monitoring*. L'idée : analyser la courbe de consommation globale d'un logement pour en déduire, par traitement du signal et apprentissage automatique, quels appareils s'y trouvent et quand ils fonctionnent. Chaque appareil aurait, en théorie, une "signature électrique" reconnaissable — un profil d'appel de courant au démarrage, un comportement en régime, etc. - -En pratique, l'exercice est très difficile, et il l'est particulièrement pour la recharge d'un véhicule électrique. Une borne en charge se comporte comme une charge quasi constante de plusieurs kilowatts pendant plusieurs heures. C'est une signature… qui ressemble énormément à celle d'un chauffe-eau, d'un convecteur, d'un sèche-linge en cycle long ou d'un radiateur à inertie. Sans cadence de fonctionnement caractéristique, sans pics distinctifs, sans cycles courts, il n'y a rien de très spécifique à exploiter. Identifier de manière fiable qu'on a affaire à une voiture *et pas* à un autre appareil de puissance similaire reste un problème ouvert dans la littérature scientifique. - -Mais surtout, et c'est le point essentiel : **Linky n'embarque aucun de ces algorithmes**. Il transmet des données de comptage agrégées à Enedis, qui les utilise pour la facturation et la gestion du réseau. Enedis n'a ni la mission, ni le droit légal, ni l'infrastructure pour analyser appareil par appareil les usages domestiques de ses clients. Le cadre réglementaire français, notamment via la CNIL, encadre strictement ce qui peut être fait des données de consommation, et toute exploitation plus fine — même la courbe de charge à pas fin — nécessite le consentement explicite de l'abonné. - -## Ce qu'il faut retenir - -Le compteur Linky mesure votre consommation globale, c'est vrai. Il permet à certaines bornes de recharge de moduler intelligemment leur puissance via la TIC, c'est vrai aussi. Mais il ne reconnaît pas, n'identifie pas et ne distingue pas une voiture électrique des autres appareils du logement. Cette capacité n'existe ni dans son matériel, ni dans son logiciel, ni dans les données qu'il transmet à Enedis. - -L'affirmation selon laquelle « Linky a été conçu pour reconnaître la connexion d'une voiture à batterie » mélange donc trois choses très différentes : des capacités réelles mais limitées (mesure de puissance, interface TIC sortante), des usages techniques existants côté wallbox, et des hypothèses politiques sur de futurs dispositifs fiscaux. De cette confusion naît une rumeur frappante, mais infondée. - -Le débat sur la fiscalité des véhicules électriques est légitime et important. Il mérite mieux que des affirmations qui n'ont pas de base technique. \ No newline at end of file diff --git a/70b5f213-db76-4072-afb6-f876fe67aaf8/revisions/0005.md b/70b5f213-db76-4072-afb6-f876fe67aaf8/revisions/0005.md deleted file mode 100644 index d48f1c1..0000000 --- a/70b5f213-db76-4072-afb6-f876fe67aaf8/revisions/0005.md +++ /dev/null @@ -1,47 +0,0 @@ -*Démêlons le vrai du faux sur une affirmation qui revient régulièrement dans les débats autour de la fiscalité des véhicules à batterie.* - -Depuis plusieurs mois, à mesure que s'intensifient les discussions sur une éventuelle taxe kilométrique visant les voitures électriques, une affirmation refait surface avec insistance sur les réseaux sociaux et dans certains articles : *« Le compteur Linky a été conçu pour reconnaître la connexion d'une voiture à batterie. »* La formule est efficace, presque inquiétante, et elle nourrit l'idée d'un État qui aurait anticipé depuis longtemps la surveillance des automobilistes électriques via leur compteur domestique. - -Le problème, c'est que cette affirmation est tout simplement fausse. Ou plus exactement : elle confond grossièrement ce que Linky mesure réellement et ce qu'on lui prête comme capacités. Pour comprendre pourquoi, il faut revenir aux fondamentaux de ce qu'est un compteur électrique, même "intelligent". - -## Ce que Linky mesure réellement - -Un compteur Linky, c'est avant tout un instrument de mesure. Il enregistre la consommation électrique globale du logement, en temps quasi réel, avec une précision bien supérieure à celle des anciens compteurs électromécaniques. Concrètement, il relève la puissance instantanée appelée par l'ensemble de l'installation, l'intensité du courant qui circule sur les phases, ainsi que quelques paramètres plus techniques comme les harmoniques — des perturbations du signal qui renseignent sur la qualité du courant. - -Tout cela est agrégé. Linky voit *un total*, pas une ventilation appareil par appareil. Quand votre four à 3 kW se met en route, le compteur enregistre une montée de 3 kW. Quand une wallbox commence à charger une voiture à 3,7 kW, il enregistre une montée de 3,7 kW. Du point de vue de Linky, ces deux événements sont parfaitement indiscernables. Il n'a aucun moyen de savoir si l'électricité part vers une plaque de cuisson, un chauffe-eau, un radiateur ou une Tesla branchée au garage. - -C'est une limitation fondamentale, pas un oubli de conception : un compteur de tableau électrique se situe en amont de tout, sur l'arrivée générale. Il voit ce qui entre dans la maison, point final. - -## Ce que Linky ne sait pas faire — et ne saura jamais faire en l'état - -Contrairement à ce que certains articles laissent entendre, Linky n'a aucune capacité à identifier la nature des appareils qui se branchent. Il ne reconnaît pas une voiture électrique, ne lit pas les protocoles de communication entre une borne et un véhicule (Type 2, CCS, CHAdeMO), ne dialogue ni avec le chargeur embarqué ni avec le BMS — le système de gestion de batterie qui pilote la charge côté voiture. Aucune de ces fonctions ne figure dans ses spécifications techniques, qui sont publiques et consultables. - -Linky n'est ni une prise connectée capable de profiler ce qui s'y branche, ni un analyseur de charge avancé, ni un dispositif de reconnaissance d'appareils par signature. C'est un compteur de facturation, conçu pour relever votre consommation à distance et permettre à votre fournisseur d'affiner les offres tarifaires (heures creuses dynamiques, par exemple). Tout le reste relève du fantasme ou de la confusion. - -## D'où vient cette idée alors ? - -La rumeur n'est pas née de nulle part. Elle s'enracine dans deux éléments réels, mais largement mal interprétés. - -**Le premier, c'est l'existence de la TIC, la « télé-information client ».** Il s'agit d'une interface physique présente sur le compteur Linky, qui diffuse en continu certaines données : puissance souscrite, puissance instantanée appelée, index de consommation, période tarifaire en cours. Cette interface est *sortante* : elle envoie des informations vers l'extérieur, vers des appareils domestiques compatibles, mais elle ne reçoit rien en retour. - -Certaines wallbox modernes sont capables de se brancher sur cette TIC pour lire en direct la puissance déjà consommée dans le logement. Elles ajustent alors automatiquement la puissance de charge de la voiture pour ne pas faire disjoncter l'installation : si quelqu'un allume le four pendant que la voiture charge, la borne réduit son appel de courant. C'est une fonction très utile, mais elle fonctionne dans un seul sens. **La wallbox lit Linky. Linky ne lit pas la wallbox, et encore moins la voiture.** Beaucoup de gens, en entendant parler de wallbox "communiquant avec Linky", imaginent un dialogue bidirectionnel qui n'existe pas. - -**Le second élément, c'est l'arrivée du débat sur une taxe kilométrique.** Avec la baisse des recettes de TICPE liée à l'électrification du parc automobile, plusieurs think tanks et rapports parlementaires ont effectivement évoqué l'idée de taxer les kilomètres parcourus en VE, et certains ont mentionné Linky parmi les outils techniques *envisageables*. De cette spéculation prospective, une partie du public a tiré la conclusion que le compteur était déjà équipé pour le faire. Or il y a un gouffre entre « on pourrait peut-être un jour utiliser Linky comme brique d'un dispositif fiscal » et « Linky a été conçu pour ça ». Le premier est une hypothèse politique discutable ; le second est un raccourci qui ne correspond à aucune réalité technique. - -## Et techniquement, ce serait possible un jour ? - -C'est la question intéressante, et la réponse mérite plus de nuance qu'un simple oui ou non. - -Il existe effectivement un champ de recherche actif, baptisé **NILM** pour *Non-Intrusive Load Monitoring*. L'idée : analyser la courbe de consommation globale d'un logement pour en déduire, par traitement du signal et apprentissage automatique, quels appareils s'y trouvent et quand ils fonctionnent. Chaque appareil aurait, en théorie, une "signature électrique" reconnaissable — un profil d'appel de courant au démarrage, un comportement en régime, etc. - -En pratique, l'exercice est très difficile, et il l'est particulièrement pour la recharge d'un véhicule électrique. Une borne en charge se comporte comme une charge quasi constante de plusieurs kilowatts pendant plusieurs heures. C'est une signature… qui ressemble énormément à celle d'un chauffe-eau, d'un convecteur, d'un sèche-linge en cycle long ou d'un radiateur à inertie. Sans cadence de fonctionnement caractéristique, sans pics distinctifs, sans cycles courts, il n'y a rien de très spécifique à exploiter. Identifier de manière fiable qu'on a affaire à une voiture *et pas* à un autre appareil de puissance similaire reste un problème ouvert dans la littérature scientifique. - -Mais surtout, et c'est le point essentiel : **Linky n'embarque aucun de ces algorithmes**. Il transmet des données de comptage agrégées à Enedis, qui les utilise pour la facturation et la gestion du réseau. Enedis n'a ni la mission, ni le droit légal, ni l'infrastructure pour analyser appareil par appareil les usages domestiques de ses clients. Le cadre réglementaire français, notamment via la CNIL, encadre strictement ce qui peut être fait des données de consommation, et toute exploitation plus fine — même la courbe de charge à pas fin — nécessite le consentement explicite de l'abonné. - -## Ce qu'il faut retenir - -Le compteur Linky mesure votre consommation globale, c'est vrai. Il permet à certaines bornes de recharge de moduler intelligemment leur puissance via la TIC, c'est vrai aussi. Mais il ne reconnaît pas, n'identifie pas et ne distingue pas une voiture électrique des autres appareils du logement. Cette capacité n'existe ni dans son matériel, ni dans son logiciel, ni dans les données qu'il transmet à Enedis. - -L'affirmation selon laquelle « Linky a été conçu pour reconnaître la connexion d'une voiture à batterie » mélange donc trois choses très différentes : des capacités réelles mais limitées (mesure de puissance, interface TIC sortante), des usages techniques existants côté wallbox, et des hypothèses politiques sur de futurs dispositifs fiscaux. De cette confusion naît une rumeur frappante, mais infondée. - -Le débat sur la fiscalité des véhicules électriques est légitime et important. Il mérite mieux que des affirmations qui n'ont pas de base technique. \ No newline at end of file diff --git a/72d50c35-9863-400b-8c5d-470c74bf2bd6/files/cover.jpg b/72d50c35-9863-400b-8c5d-470c74bf2bd6/files/cover.jpg deleted file mode 100644 index 3f87bd4..0000000 Binary files a/72d50c35-9863-400b-8c5d-470c74bf2bd6/files/cover.jpg and /dev/null differ diff --git a/72d50c35-9863-400b-8c5d-470c74bf2bd6/index.md b/72d50c35-9863-400b-8c5d-470c74bf2bd6/index.md deleted file mode 100644 index 5c2ec3b..0000000 --- a/72d50c35-9863-400b-8c5d-470c74bf2bd6/index.md +++ /dev/null @@ -1,101 +0,0 @@ -# Dimensionnement des câbles électriques (cuivre, 230 V monophasé) - -Dimensionnement des câbles électriques (cuivre, 230 V monophasé) - -Ce document présente deux approches complémentaires pour choisir la section d'un câble électrique : - -1. selon le **courant admissible** (échauffement du conducteur) ; -2. selon la **chute de tension** (qui dépend également de la longueur). - -Les valeurs ci-dessous sont indicatives, données pour des câbles en **cuivre**, en **pose domestique** (encastrée ou en air libre), dans des conditions normales. Elles peuvent varier en fonction du mode de pose, du regroupement des conducteurs et de la température ambiante. - -> ⚠️ Pour toute installation électrique fixe, se référer à la norme **NF C 15-100** et, au besoin, faire valider le dimensionnement par un professionnel. - ---- - -## 1. Section / intensité / puissance (critère d'échauffement) - -| Section (mm²) | Intensité max (A) | Puissance max à 230 V (W) | Usage typique | -| ------------- | ----------------- | ------------------------- | ----------------------------------------------------------- | -| 0,22 | 2 | 460 | Signaux, petits appareils électroniques | -| 0,5 | 3 – 4 | 690 – 920 | Câbles souples, lampes, alimentation basse puissance | -| 0,75 | 6 | 1 380 | Lampes, rallonges légères | -| 1 | 10 | 2 300 | Éclairage, petits appareils | -| 1,5 | 16 | 3 680 | Circuits prises ou éclairage | -| 2,5 | 20 – 25 | 4 600 – 5 750 | Prises de courant, électroménager | -| 4 | 32 | 7 360 | Plaques de cuisson, climatisation | -| 6 | 40 | 9 200 | Chauffe-eau, four, cuisinière | -| 10 | 63 | 14 490 | Tableau divisionnaire, pompe à chaleur | -| 16 | 80 | 18 400 | Alimentation principale, borne de recharge VE | -| 25 | 100 | 23 000 | Alimentation générale forte puissance | -| 35 | 125 | 28 750 | Installation industrielle | - ---- - -## 2. Section / intensité / longueur (critère de chute de tension) - -Le critère précédent ne suffit pas : sur une longue distance, un câble correctement dimensionné en courant peut tout de même engendrer une **chute de tension** excessive, ce qui dégrade le fonctionnement des récepteurs et augmente les pertes. - -Le tableau suivant indique la **longueur maximale** (aller simple) pour rester sous une chute de tension de **3 %**, soit environ **6,9 V** sur un réseau 230 V. Cette limite correspond à la recommandation de la NF C 15-100 pour la majorité des circuits domestiques. - -| Section (mm²) | Intensité (A) | Longueur max pour ΔU ≤ 3 % (m) | Puissance max à 230 V (W) | Usage typique | -| ------------- | ------------- | ------------------------------ | ------------------------- | ------------------------------ | -| 0,75 | 6 | 14 | 1 380 | Lampes, rallonges légères | -| 1 | 10 | 16 | 2 300 | Éclairage, petits appareils | -| 1,5 | 16 | 19 | 3 680 | Circuits prises, éclairage | -| 2,5 | 20 | 26 | 4 600 | Prises, électroménager | -| 4 | 25 | 33 | 5 750 | Plaques, climatisation | -| 6 | 32 | 39 | 7 360 | Chauffe-eau, four | -| 10 | 40 | 52 | 9 200 | Tableau divisionnaire | -| 16 | 63 | 58 | 14 490 | Borne de recharge VE | -| 25 | 80 | 70 | 18 400 | Alimentation principale | -| 35 | 100 | 80 | 23 000 | Installation industrielle | -| 50 | 125 | 90 | 28 750 | Gros équipements | - ---- - -## 3. Formule de calcul de la chute de tension - -En monophasé, la chute de tension en volts est donnée par : - -$$ -\Delta U = \frac{2 \times \rho \times L \times I}{S} -$$ - -avec : - -- $\rho$ = 0,0175 Ω·mm²/m (résistivité du cuivre à 20 °C) ; -- $L$ = longueur du câble (aller simple, en mètres) ; -- $I$ = intensité parcourant le câble (en ampères) ; -- $S$ = section du conducteur (en mm²). - -Le facteur **2** prend en compte le trajet aller-retour du courant (phase + neutre). - -Pour obtenir la chute de tension en pourcentage, il suffit de diviser $\Delta U$ par la tension nominale (230 V) : - -$$ -\Delta U \, (\%) = \frac{\Delta U}{230} \times 100 -$$ - -### Exemple - -Pour un câble de 2,5 mm², parcouru par 16 A, sur 25 m : - -$$ -\Delta U = \frac{2 \times 0{,}0175 \times 25 \times 16}{2{,}5} = 5{,}6 \text{ V} -$$ - -soit environ **2,4 %** — la longueur reste donc admissible. - ---- - -## 4. Synthèse pratique - -Pour dimensionner correctement un câble, il convient de : - -1. choisir une section qui supporte le **courant maximal** (tableau §1) ; -2. vérifier que la **longueur** n'entraîne pas une chute de tension supérieure à 3 % (tableau §2 ou formule §3) ; -3. retenir la **section la plus grande** issue de ces deux critères ; -4. tenir compte du **mode de pose**, du **regroupement** des câbles et de la **température ambiante**, qui peuvent imposer un déclassement. - -En cas de doute, mieux vaut surdimensionner légèrement la section : le surcoût est modeste et les bénéfices (pertes réduites, échauffement plus faible, marge pour évolutions futures) sont réels. \ No newline at end of file diff --git a/72d50c35-9863-400b-8c5d-470c74bf2bd6/meta.json b/72d50c35-9863-400b-8c5d-470c74bf2bd6/meta.json deleted file mode 100644 index 1e5b7cb..0000000 --- a/72d50c35-9863-400b-8c5d-470c74bf2bd6/meta.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "uuid": "72d50c35-9863-400b-8c5d-470c74bf2bd6", - "slug": "dimensionnement-des-cables-electriques-cuivre-230-v-monophase", - "title": "Dimensionnement des câbles électriques (cuivre, 230 V monophasé)", - "author": "cedric@abonnel.fr", - "published": true, - "published_at": "2025-11-09 21:48", - "created_at": "2025-11-09 21:48:35", - "updated_at": "2026-05-12 17:00:04", - "revisions": [ - { - "n": 1, - "date": "2026-05-12 16:55:20", - "comment": "Titre modifié, contenu modifié", - "title": "Tableau section câble / intensité / puissance (230 V monophasé, cuivre)" - } - ], - "cover": "cover.jpg", - "files_meta": { - "cover.jpg": { - "author": "", - "source_url": "https://www.bellemaison32.com/wp-content/uploads/2023/08/cable-electrique.jpg" - } - }, - "external_links": [], - "seo_title": "", - "seo_description": "", - "og_image": "https://varlog.a5l.fr/file?uuid=72d50c35-9863-400b-8c5d-470c74bf2bd6&name=cover.jpg", - "category": "travaux" -} diff --git a/72d50c35-9863-400b-8c5d-470c74bf2bd6/revisions/0001.md b/72d50c35-9863-400b-8c5d-470c74bf2bd6/revisions/0001.md deleted file mode 100644 index 8125bc6..0000000 --- a/72d50c35-9863-400b-8c5d-470c74bf2bd6/revisions/0001.md +++ /dev/null @@ -1,99 +0,0 @@ -# Dimensionnement des câbles électriques (cuivre, 230 V monophasé) - -Ce document présente deux approches complémentaires pour choisir la section d'un câble électrique : - -1. selon le **courant admissible** (échauffement du conducteur) ; -2. selon la **chute de tension** (qui dépend également de la longueur). - -Les valeurs ci-dessous sont indicatives, données pour des câbles en **cuivre**, en **pose domestique** (encastrée ou en air libre), dans des conditions normales. Elles peuvent varier en fonction du mode de pose, du regroupement des conducteurs et de la température ambiante. - -> ⚠️ Pour toute installation électrique fixe, se référer à la norme **NF C 15-100** et, au besoin, faire valider le dimensionnement par un professionnel. - ---- - -## 1. Section / intensité / puissance (critère d'échauffement) - -| Section (mm²) | Intensité max (A) | Puissance max à 230 V (W) | Usage typique | -| ------------- | ----------------- | ------------------------- | ----------------------------------------------------------- | -| 0,22 | 2 | 460 | Signaux, petits appareils électroniques | -| 0,5 | 3 – 4 | 690 – 920 | Câbles souples, lampes, alimentation basse puissance | -| 0,75 | 6 | 1 380 | Lampes, rallonges légères | -| 1 | 10 | 2 300 | Éclairage, petits appareils | -| 1,5 | 16 | 3 680 | Circuits prises ou éclairage | -| 2,5 | 20 – 25 | 4 600 – 5 750 | Prises de courant, électroménager | -| 4 | 32 | 7 360 | Plaques de cuisson, climatisation | -| 6 | 40 | 9 200 | Chauffe-eau, four, cuisinière | -| 10 | 63 | 14 490 | Tableau divisionnaire, pompe à chaleur | -| 16 | 80 | 18 400 | Alimentation principale, borne de recharge VE | -| 25 | 100 | 23 000 | Alimentation générale forte puissance | -| 35 | 125 | 28 750 | Installation industrielle | - ---- - -## 2. Section / intensité / longueur (critère de chute de tension) - -Le critère précédent ne suffit pas : sur une longue distance, un câble correctement dimensionné en courant peut tout de même engendrer une **chute de tension** excessive, ce qui dégrade le fonctionnement des récepteurs et augmente les pertes. - -Le tableau suivant indique la **longueur maximale** (aller simple) pour rester sous une chute de tension de **3 %**, soit environ **6,9 V** sur un réseau 230 V. Cette limite correspond à la recommandation de la NF C 15-100 pour la majorité des circuits domestiques. - -| Section (mm²) | Intensité (A) | Longueur max pour ΔU ≤ 3 % (m) | Puissance max à 230 V (W) | Usage typique | -| ------------- | ------------- | ------------------------------ | ------------------------- | ------------------------------ | -| 0,75 | 6 | 14 | 1 380 | Lampes, rallonges légères | -| 1 | 10 | 16 | 2 300 | Éclairage, petits appareils | -| 1,5 | 16 | 19 | 3 680 | Circuits prises, éclairage | -| 2,5 | 20 | 26 | 4 600 | Prises, électroménager | -| 4 | 25 | 33 | 5 750 | Plaques, climatisation | -| 6 | 32 | 39 | 7 360 | Chauffe-eau, four | -| 10 | 40 | 52 | 9 200 | Tableau divisionnaire | -| 16 | 63 | 58 | 14 490 | Borne de recharge VE | -| 25 | 80 | 70 | 18 400 | Alimentation principale | -| 35 | 100 | 80 | 23 000 | Installation industrielle | -| 50 | 125 | 90 | 28 750 | Gros équipements | - ---- - -## 3. Formule de calcul de la chute de tension - -En monophasé, la chute de tension en volts est donnée par : - -$$ -\Delta U = \frac{2 \times \rho \times L \times I}{S} -$$ - -avec : - -- $\rho$ = 0,0175 Ω·mm²/m (résistivité du cuivre à 20 °C) ; -- $L$ = longueur du câble (aller simple, en mètres) ; -- $I$ = intensité parcourant le câble (en ampères) ; -- $S$ = section du conducteur (en mm²). - -Le facteur **2** prend en compte le trajet aller-retour du courant (phase + neutre). - -Pour obtenir la chute de tension en pourcentage, il suffit de diviser $\Delta U$ par la tension nominale (230 V) : - -$$ -\Delta U \, (\%) = \frac{\Delta U}{230} \times 100 -$$ - -### Exemple - -Pour un câble de 2,5 mm², parcouru par 16 A, sur 25 m : - -$$ -\Delta U = \frac{2 \times 0{,}0175 \times 25 \times 16}{2{,}5} = 5{,}6 \text{ V} -$$ - -soit environ **2,4 %** — la longueur reste donc admissible. - ---- - -## 4. Synthèse pratique - -Pour dimensionner correctement un câble, il convient de : - -1. choisir une section qui supporte le **courant maximal** (tableau §1) ; -2. vérifier que la **longueur** n'entraîne pas une chute de tension supérieure à 3 % (tableau §2 ou formule §3) ; -3. retenir la **section la plus grande** issue de ces deux critères ; -4. tenir compte du **mode de pose**, du **regroupement** des câbles et de la **température ambiante**, qui peuvent imposer un déclassement. - -En cas de doute, mieux vaut surdimensionner légèrement la section : le surcoût est modeste et les bénéfices (pertes réduites, échauffement plus faible, marge pour évolutions futures) sont réels. \ No newline at end of file diff --git a/75bf96ba-e110-4a9e-8163-95890562aecf/files/_thumb_f44a2f694f44f2a5-11682.jpg b/75bf96ba-e110-4a9e-8163-95890562aecf/files/_thumb_f44a2f694f44f2a5-11682.jpg deleted file mode 100644 index 4d165da..0000000 Binary files a/75bf96ba-e110-4a9e-8163-95890562aecf/files/_thumb_f44a2f694f44f2a5-11682.jpg and /dev/null differ diff --git a/75bf96ba-e110-4a9e-8163-95890562aecf/files/cover.jpg b/75bf96ba-e110-4a9e-8163-95890562aecf/files/cover.jpg deleted file mode 100644 index aea915e..0000000 Binary files a/75bf96ba-e110-4a9e-8163-95890562aecf/files/cover.jpg and /dev/null differ diff --git a/75bf96ba-e110-4a9e-8163-95890562aecf/index.md b/75bf96ba-e110-4a9e-8163-95890562aecf/index.md deleted file mode 100644 index b4d4797..0000000 --- a/75bf96ba-e110-4a9e-8163-95890562aecf/index.md +++ /dev/null @@ -1,19 +0,0 @@ -# Orange dans les bras d'Amazon : l'aveu d'un échec européen - -Orange utilise massivement AWS, Azure et Google Cloud. Dit comme ça, c'est presque une blague. L'ancien France Télécom, opérateur historique, fleuron des télécoms français, héritier du service public, branché sur les serveurs de la Silicon Valley. À l'heure où on ne parle que de souveraineté numérique, on pourrait croire à une trahison. C'est plus compliqué que ça. - -La raison principale est bête : les Américains ont gagné la course. En quinze ans, AWS, Microsoft et Google ont construit une avance que personne ne sait combler aujourd'hui. Et ils ne vendent plus seulement du stockage ou de la puissance de calcul. Ils vendent un écosystème entier : de l'IA prête à l'emploi, des outils d'analyse de données, de l'automatisation, de la cybersécurité, des garanties de disponibilité à neuf chiffres. Pour Orange, qui doit faire tourner ses services dans une vingtaine de pays sans tomber en panne, ce niveau de maturité pèse lourd dans la balance. - -Sauf que ce choix rationnel a un prix politique. En confiant ses infrastructures à des entreprises soumises au droit américain, Orange entre dans une zone de dépendance dont on ne sort pas facilement. Le Cloud Act permet aux autorités américaines de réclamer des données hébergées par ces sociétés, même quand ces données sont physiquement en Europe. On peut chiffrer, cloisonner, négocier des clauses dans tous les sens, le fait reste que la décision finale échappe au juge européen. Pour un opérateur télécoms qui manipule des données de millions d'abonnés, ce n'est pas un détail. - -Le plus rageant, c'est qu'on a des alternatives. OVHcloud, Scaleway, Outscale, IONOS en Allemagne, sans parler des projets autour de Deutsche Telekom. Ces acteurs existent, ils sont sérieux, ils savent faire. Alors pourquoi Orange ne s'allie pas avec eux pour construire quelque chose de crédible à l'échelle européenne ? - -Parce que l'écart de moyens est vertigineux. AWS et Microsoft investissent chacun plus de cinquante milliards de dollars par an dans leurs infrastructures. Ils ont leurs propres câbles sous-marins, leurs propres réseaux mondiaux, et ils raflent une bonne partie des ingénieurs qui sortent des écoles. Un OVH, même bien géré, ne joue pas dans la même catégorie financière. Il faudrait une alliance européenne soutenue politiquement, financée sur vingt ou trente ans, pour espérer rattraper. On a essayé avec Gaia-X. Le résultat parle de lui-même. - -Du coup, Orange est coincé. Tout miser sur l'européen aujourd'hui, ça veut dire accepter des services moins performants, moins riches, et perdre du terrain face à ses concurrents qui, eux, n'auront pas ces scrupules. Dans un marché où les marges fondent et où chaque innovation compte, c'est un pari risqué. Continuer avec les Américains, c'est rester dans la course mais accepter une dépendance qui peut, du jour au lendemain, devenir un problème géopolitique. - -D'où la solution batarde que tout le monde adopte : l'hybride. On met chez Amazon ou Microsoft ce qui doit aller vite, innover, scaler. On garde en Europe, parfois sur des clouds "de confiance" labellisés SecNumCloud, ce qui touche aux données sensibles, aux clients régulés, à l'État. Ce n'est pas glorieux, mais ça permet de tenir les deux bouts. - -Pour les défenseurs de la souveraineté numérique, ce compromis a un goût amer. On a l'impression d'une Europe qui se résigne, qui joue le match sur le terrain de l'adversaire avec ses règles. Mais en pointant Orange du doigt, on rate la cible. Le vrai problème n'est pas dans les choix d'une entreprise, il est en amont. Tant qu'on traitera le cloud comme un simple marché et pas comme une infrastructure critique, au même titre que l'électricité ou les chemins de fer, les industriels feront ce qu'ils ont toujours fait : choisir ce qui marche, là, maintenant. - -La bonne question n'est donc pas "pourquoi Orange utilise AWS". Elle est "pourquoi, vingt ans après l'arrivée du cloud, l'Europe n'a toujours pas mis sur la table de quoi rendre ce choix évitable". La souveraineté ne se décrète pas dans des communiqués. Elle se paie. En milliards, en années, en décisions politiques qui survivent aux changements de gouvernement. Tant qu'on ne sera pas prêts à ce niveau d'engagement, on continuera à tenir un discours sur l'indépendance numérique en signant des contrats avec Seattle et Redmond. \ No newline at end of file diff --git a/75bf96ba-e110-4a9e-8163-95890562aecf/meta.json b/75bf96ba-e110-4a9e-8163-95890562aecf/meta.json deleted file mode 100644 index 903d92b..0000000 --- a/75bf96ba-e110-4a9e-8163-95890562aecf/meta.json +++ /dev/null @@ -1,149 +0,0 @@ -{ - "uuid": "75bf96ba-e110-4a9e-8163-95890562aecf", - "slug": "souverainete-numerique-le-paradoxe-d-orange-face-aux-clouds-americains", - "title": "Orange dans les bras d'Amazon : l'aveu d'un échec européen", - "author": "cedric@abonnel.fr", - "published": true, - "published_at": "2026-01-16 11:17", - "created_at": "2026-01-16 11:17:19", - "updated_at": "2026-05-11 21:44:15", - "revisions": [ - { - "n": 1, - "date": "2026-05-11 19:14:47", - "comment": "", - "title": "Souveraineté numérique : le paradoxe d’Orange face aux clouds américains" - }, - { - "n": 2, - "date": "2026-05-11 19:16:11", - "comment": "", - "title": "Souveraineté numérique : le paradoxe d’Orange face aux clouds américains" - }, - { - "n": 3, - "date": "2026-05-11 19:19:14", - "comment": "", - "title": "Souveraineté numérique : le paradoxe d’Orange face aux clouds américains" - }, - { - "n": 4, - "date": "2026-05-11 19:23:36", - "comment": "", - "title": "Souveraineté numérique : le paradoxe d’Orange face aux clouds américains" - }, - { - "n": 5, - "date": "2026-05-11 20:03:18", - "comment": "", - "title": "Souveraineté numérique : le paradoxe d’Orange face aux clouds américains" - }, - { - "n": 6, - "date": "2026-05-11 20:04:17", - "comment": "", - "title": "Souveraineté numérique : le paradoxe d’Orange face aux clouds américains" - }, - { - "n": 7, - "date": "2026-05-11 20:22:36", - "comment": "", - "title": "Souveraineté numérique : le paradoxe d’Orange face aux clouds américains" - }, - { - "n": 8, - "date": "2026-05-11 20:23:25", - "comment": "", - "title": "Souveraineté numérique : le paradoxe d’Orange face aux clouds américains" - }, - { - "n": 9, - "date": "2026-05-11 21:37:25", - "comment": "", - "title": "Orange dans les bras d'Amazon : l'aveu d'un échec européen" - }, - { - "n": 10, - "date": "2026-05-11 21:38:02", - "comment": "", - "title": "Orange dans les bras d'Amazon : l'aveu d'un échec européen" - }, - { - "n": 11, - "date": "2026-05-11 21:39:10", - "comment": "", - "title": "Orange dans les bras d'Amazon : l'aveu d'un échec européen" - }, - { - "n": 12, - "date": "2026-05-11 21:40:24", - "comment": "", - "title": "Orange dans les bras d'Amazon : l'aveu d'un échec européen" - }, - { - "n": 13, - "date": "2026-05-11 21:43:18", - "comment": "", - "title": "Orange dans les bras d'Amazon : l'aveu d'un échec européen" - }, - { - "n": 14, - "date": "2026-05-11 21:44:15", - "comment": "", - "title": "Orange dans les bras d'Amazon : l'aveu d'un échec européen" - } - ], - "cover": "cover.jpg", - "files_meta": { - "cover.jpg": { - "author": "", - "source_url": "https://blog.wescale.fr/hubfs/CloudUS-Europe.jpg" - }, - "l17cenum2526028_compte-rendu.pdf": { - "author": "", - "source_url": "https://www.assemblee-nationale.fr/dyn/17/comptes-rendus/cenum/l17cenum2526028_compte-rendu.pdf" - }, - "l17cenum2526028_compte-rendu_1.pdf": { - "author": "", - "source_url": "https://www.assemblee-nationale.fr/dyn/17/comptes-rendus/cenum/l17cenum2526028_compte-rendu.pdf" - }, - "Etude-Asteres-La-dependance-technologique-aux-services-de-cloud-et-logiciels-americains-avril-2025.pdf": { - "author": "", - "source_url": "https://www.cigref.fr/wp/wp-content/uploads/2025/04/Etude-Asteres-La-dependance-technologique-aux-services-de-cloud-et-logiciels-americains-avril-2025.pdf" - } - }, - "external_links": [ - { - "url": "https://www.lemondeinformatique.fr/les-dossiers/lire-cloud-souverain-une-interpretation-a-geometrie-variable-1678.html", - "name": "Cloud souverain, une interprétation à géométrie variable", - "added_at": "2026-05-11 21:40:20", - "meta": { - "mime": "text/html", - "size": 73778, - "description": "La bataille des clouds pour la souveraineté - Cloud souverain, une interprétation à géométrie variable - ", - "og_image": "/file?uuid=75bf96ba-e110-4a9e-8163-95890562aecf&name=_thumb_f44a2f694f44f2a5-11682.jpg", - "site_name": "LeMondeInformatique", - "og_type": "article", - "canonical": "https://www.lemondeinformatique.fr/les-dossiers/lire-cloud-souverain-une-interpretation-a-geometrie-variable-1678.html" - } - }, - { - "url": "https://www.assemblee-nationale.fr/dyn/17/comptes-rendus/cenum/l17cenum2526028_compte-rendu.pdf", - "name": "Commission d’enquête sur les dépendances structurelles et les vulnérabilités systémiques dans le secteur du numérique et les risques pour l’indépendance de la France", - "added_at": "2026-05-11 21:44:12", - "meta": { - "mime": "application/pdf", - "size": 659476, - "date": "2026-05-06 16:38:24+02:00", - "creator": "pdftk 2.02 - www.pdftk.com", - "producer": "itext-paulo-155 (itextpdf.sf.net-lowagie.com)", - "pages": 26, - "pdf_version": "PDF 1.7" - } - } - ], - "seo_title": "", - "seo_description": "", - "og_image": "", - "category": "actualité" -} diff --git a/75bf96ba-e110-4a9e-8163-95890562aecf/revisions/0001.md b/75bf96ba-e110-4a9e-8163-95890562aecf/revisions/0001.md deleted file mode 100644 index f62b020..0000000 --- a/75bf96ba-e110-4a9e-8163-95890562aecf/revisions/0001.md +++ /dev/null @@ -1,19 +0,0 @@ -À première vue, la situation a quelque chose de déroutant. Orange, opérateur historique français, héritier d’une longue tradition de service public et acteur stratégique des télécommunications, fait massivement appel aux infrastructures cloud d’Amazon, Microsoft ou Google. Dans un contexte où la souveraineté numérique est devenue un enjeu politique, économique et géostratégique majeur, ce choix peut apparaître comme une contradiction, voire comme un renoncement. Pourtant, il ne s’agit ni d’un abandon ni d’une naïveté, mais d’un compromis révélateur des limites actuelles de l’Europe dans la bataille du numérique. - -Le recours aux hyperscalers américains s’explique d’abord par une réalité industrielle. Ces entreprises ont construit, en une quinzaine d’années, une avance quasiment irréversible en matière d’infrastructures numériques. Leurs plateformes ne se contentent plus de fournir de la puissance de calcul ou du stockage. Elles offrent un écosystème complet qui va de l’hébergement à l’intelligence artificielle, en passant par l’analyse massive de données, l’automatisation des déploiements, la cybersécurité et la résilience globale des systèmes. Pour un groupe comme Orange, qui opère dans de nombreux pays et doit garantir des niveaux de service très élevés à des millions d’utilisateurs, cette maturité technologique est un facteur décisif. - -Mais ce choix, rationnel sur le plan opérationnel, pose une question politique et stratégique beaucoup plus large. En confiant une part croissante de ses infrastructures numériques à des acteurs soumis au droit américain, Orange participe malgré lui à une forme de dépendance structurelle. Le Cloud Act, qui permet aux autorités américaines d’exiger l’accès à certaines données, même hébergées hors des États-Unis, symbolise cette vulnérabilité. Même si les mécanismes de chiffrement, de cloisonnement et de contrôle contractuel existent, le simple fait que la décision ultime puisse échapper aux juridictions européennes constitue une faille du point de vue de la souveraineté. - -Ce paradoxe est d’autant plus frappant que des alternatives européennes existent. La France et l’Europe disposent d’acteurs solides, capables de fournir des services cloud performants, sécurisés et compétitifs sur de nombreux usages. OVHcloud, Scaleway, Outscale, IONOS ou encore les initiatives portées par Deutsche Telekom en sont la preuve. Alors pourquoi ne pas construire une alliance massive entre ces acteurs et un groupe comme Orange pour bâtir une véritable alternative souveraine ? - -La réponse tient moins à la volonté qu’à l’échelle. Les hyperscalers américains investissent chaque année des dizaines de milliards d’euros dans leurs infrastructures. Ils déploient des data centers sur tous les continents, possèdent leurs propres réseaux mondiaux et attirent l’essentiel des talents du secteur. Face à cette puissance financière et industrielle, les acteurs européens, pris individuellement, peinent à rivaliser. Une alliance serait possible, mais elle nécessiterait un effort coordonné, soutenu politiquement, sur plusieurs décennies. Or l’Europe avance souvent par projets fragmentés, soumis aux cycles électoraux et aux priorités nationales parfois divergentes. - -Pour Orange, la situation se résume donc à un dilemme stratégique. S’en tenir strictement à des solutions européennes aujourd’hui impliquerait souvent de renoncer à certains niveaux de performance, de standardisation et de rapidité d’innovation. Dans un marché des télécoms déjà très concurrentiel, où les marges sont sous pression et où les attentes des clients sont toujours plus élevées, ce choix pourrait fragiliser l’entreprise à court et moyen terme. À l’inverse, s’appuyer sur les clouds américains permet de rester compétitif, mais au prix d’une dépendance qui pose problème à long terme. - -C’est dans cet entre-deux qu’émergent les stratégies hybrides. Orange, comme d’autres grands groupes européens, cherche à concilier deux impératifs contradictoires. D’un côté, tirer parti de la puissance des hyperscalers pour les usages nécessitant de la flexibilité, de l’innovation rapide et une échelle mondiale. De l’autre, développer des environnements de confiance pour les données sensibles, souvent en partenariat avec des acteurs européens, afin de garantir une maîtrise juridique et opérationnelle renforcée. Cette approche permet de limiter les risques sans renoncer totalement aux avantages technologiques des géants américains. - -Pour celles et ceux qui défendent activement la souveraineté numérique, ce compromis reste frustrant. Il donne l’impression d’un renoncement progressif, d’une Europe qui accepte de jouer sur un terrain défini par d’autres. Pourtant, le problème dépasse largement Orange. Il interroge la capacité collective du continent à se doter d’infrastructures numériques stratégiques, au même titre que l’énergie, la défense ou les transports. Tant que le cloud restera perçu uniquement comme un marché et non comme un enjeu de souveraineté, les décisions resteront dictées par des logiques de court terme. - -La vraie question n’est donc pas de savoir pourquoi Orange utilise les clouds américains, mais pourquoi l’Europe n’a pas encore su créer un cadre suffisamment ambitieux pour rendre ce choix inutile. Tant que les alternatives souveraines resteront fragmentées, sous-financées ou cantonnées à des niches, les grands groupes continueront à faire des choix pragmatiques, même s’ils sont stratégiquement inconfortables. Défendre la souveraineté numérique, ce n’est pas seulement pointer les risques de dépendance, c’est aussi accepter que cette souveraineté a un coût, qu’elle nécessite des investissements lourds, une vision industrielle de long terme et une véritable volonté politique. - -Dans ce contexte, le combat pour la souveraineté numérique n’est pas perdu, mais il reste à mener sur un autre terrain que celui des seules décisions d’entreprise. Il se joue au niveau des États, de l’Union européenne et des grandes orientations industrielles. Tant que ce cadre n’évoluera pas, même les acteurs les plus attachés à l’indépendance technologique continueront à avancer dans ce paradoxe : défendre la souveraineté dans le discours, tout en dépendant, dans les faits, des infrastructures des géants américains. diff --git a/75bf96ba-e110-4a9e-8163-95890562aecf/revisions/0002.md b/75bf96ba-e110-4a9e-8163-95890562aecf/revisions/0002.md deleted file mode 100644 index f62b020..0000000 --- a/75bf96ba-e110-4a9e-8163-95890562aecf/revisions/0002.md +++ /dev/null @@ -1,19 +0,0 @@ -À première vue, la situation a quelque chose de déroutant. Orange, opérateur historique français, héritier d’une longue tradition de service public et acteur stratégique des télécommunications, fait massivement appel aux infrastructures cloud d’Amazon, Microsoft ou Google. Dans un contexte où la souveraineté numérique est devenue un enjeu politique, économique et géostratégique majeur, ce choix peut apparaître comme une contradiction, voire comme un renoncement. Pourtant, il ne s’agit ni d’un abandon ni d’une naïveté, mais d’un compromis révélateur des limites actuelles de l’Europe dans la bataille du numérique. - -Le recours aux hyperscalers américains s’explique d’abord par une réalité industrielle. Ces entreprises ont construit, en une quinzaine d’années, une avance quasiment irréversible en matière d’infrastructures numériques. Leurs plateformes ne se contentent plus de fournir de la puissance de calcul ou du stockage. Elles offrent un écosystème complet qui va de l’hébergement à l’intelligence artificielle, en passant par l’analyse massive de données, l’automatisation des déploiements, la cybersécurité et la résilience globale des systèmes. Pour un groupe comme Orange, qui opère dans de nombreux pays et doit garantir des niveaux de service très élevés à des millions d’utilisateurs, cette maturité technologique est un facteur décisif. - -Mais ce choix, rationnel sur le plan opérationnel, pose une question politique et stratégique beaucoup plus large. En confiant une part croissante de ses infrastructures numériques à des acteurs soumis au droit américain, Orange participe malgré lui à une forme de dépendance structurelle. Le Cloud Act, qui permet aux autorités américaines d’exiger l’accès à certaines données, même hébergées hors des États-Unis, symbolise cette vulnérabilité. Même si les mécanismes de chiffrement, de cloisonnement et de contrôle contractuel existent, le simple fait que la décision ultime puisse échapper aux juridictions européennes constitue une faille du point de vue de la souveraineté. - -Ce paradoxe est d’autant plus frappant que des alternatives européennes existent. La France et l’Europe disposent d’acteurs solides, capables de fournir des services cloud performants, sécurisés et compétitifs sur de nombreux usages. OVHcloud, Scaleway, Outscale, IONOS ou encore les initiatives portées par Deutsche Telekom en sont la preuve. Alors pourquoi ne pas construire une alliance massive entre ces acteurs et un groupe comme Orange pour bâtir une véritable alternative souveraine ? - -La réponse tient moins à la volonté qu’à l’échelle. Les hyperscalers américains investissent chaque année des dizaines de milliards d’euros dans leurs infrastructures. Ils déploient des data centers sur tous les continents, possèdent leurs propres réseaux mondiaux et attirent l’essentiel des talents du secteur. Face à cette puissance financière et industrielle, les acteurs européens, pris individuellement, peinent à rivaliser. Une alliance serait possible, mais elle nécessiterait un effort coordonné, soutenu politiquement, sur plusieurs décennies. Or l’Europe avance souvent par projets fragmentés, soumis aux cycles électoraux et aux priorités nationales parfois divergentes. - -Pour Orange, la situation se résume donc à un dilemme stratégique. S’en tenir strictement à des solutions européennes aujourd’hui impliquerait souvent de renoncer à certains niveaux de performance, de standardisation et de rapidité d’innovation. Dans un marché des télécoms déjà très concurrentiel, où les marges sont sous pression et où les attentes des clients sont toujours plus élevées, ce choix pourrait fragiliser l’entreprise à court et moyen terme. À l’inverse, s’appuyer sur les clouds américains permet de rester compétitif, mais au prix d’une dépendance qui pose problème à long terme. - -C’est dans cet entre-deux qu’émergent les stratégies hybrides. Orange, comme d’autres grands groupes européens, cherche à concilier deux impératifs contradictoires. D’un côté, tirer parti de la puissance des hyperscalers pour les usages nécessitant de la flexibilité, de l’innovation rapide et une échelle mondiale. De l’autre, développer des environnements de confiance pour les données sensibles, souvent en partenariat avec des acteurs européens, afin de garantir une maîtrise juridique et opérationnelle renforcée. Cette approche permet de limiter les risques sans renoncer totalement aux avantages technologiques des géants américains. - -Pour celles et ceux qui défendent activement la souveraineté numérique, ce compromis reste frustrant. Il donne l’impression d’un renoncement progressif, d’une Europe qui accepte de jouer sur un terrain défini par d’autres. Pourtant, le problème dépasse largement Orange. Il interroge la capacité collective du continent à se doter d’infrastructures numériques stratégiques, au même titre que l’énergie, la défense ou les transports. Tant que le cloud restera perçu uniquement comme un marché et non comme un enjeu de souveraineté, les décisions resteront dictées par des logiques de court terme. - -La vraie question n’est donc pas de savoir pourquoi Orange utilise les clouds américains, mais pourquoi l’Europe n’a pas encore su créer un cadre suffisamment ambitieux pour rendre ce choix inutile. Tant que les alternatives souveraines resteront fragmentées, sous-financées ou cantonnées à des niches, les grands groupes continueront à faire des choix pragmatiques, même s’ils sont stratégiquement inconfortables. Défendre la souveraineté numérique, ce n’est pas seulement pointer les risques de dépendance, c’est aussi accepter que cette souveraineté a un coût, qu’elle nécessite des investissements lourds, une vision industrielle de long terme et une véritable volonté politique. - -Dans ce contexte, le combat pour la souveraineté numérique n’est pas perdu, mais il reste à mener sur un autre terrain que celui des seules décisions d’entreprise. Il se joue au niveau des États, de l’Union européenne et des grandes orientations industrielles. Tant que ce cadre n’évoluera pas, même les acteurs les plus attachés à l’indépendance technologique continueront à avancer dans ce paradoxe : défendre la souveraineté dans le discours, tout en dépendant, dans les faits, des infrastructures des géants américains. diff --git a/75bf96ba-e110-4a9e-8163-95890562aecf/revisions/0003.md b/75bf96ba-e110-4a9e-8163-95890562aecf/revisions/0003.md deleted file mode 100644 index 4790584..0000000 --- a/75bf96ba-e110-4a9e-8163-95890562aecf/revisions/0003.md +++ /dev/null @@ -1,20 +0,0 @@ -À première vue, la situation a quelque chose de déroutant. Orange, opérateur historique français, héritier d’une longue tradition de service public et acteur stratégique des télécommunications, fait massivement appel aux infrastructures cloud d’Amazon, Microsoft ou Google. Dans un contexte où la souveraineté numérique est devenue un enjeu politique, économique et géostratégique majeur, ce choix peut apparaître comme une contradiction, voire comme un renoncement. Pourtant, il ne s’agit ni d’un abandon ni d’une naïveté, mais d’un compromis révélateur des limites actuelles de l’Europe dans la bataille du numérique. - -Le recours aux hyperscalers américains s’explique d’abord par une réalité industrielle. Ces entreprises ont construit, en une quinzaine d’années, une avance quasiment irréversible en matière d’infrastructures numériques. Leurs plateformes ne se contentent plus de fournir de la puissance de calcul ou du stockage. Elles offrent un écosystème complet qui va de l’hébergement à l’intelligence artificielle, en passant par l’analyse massive de données, l’automatisation des déploiements, la cybersécurité et la résilience globale des systèmes. Pour un groupe comme Orange, qui opère dans de nombreux pays et doit garantir des niveaux de service très élevés à des millions d’utilisateurs, cette maturité technologique est un facteur décisif. - -Mais ce choix, rationnel sur le plan opérationnel, pose une question politique et stratégique beaucoup plus large. En confiant une part croissante de ses infrastructures numériques à des acteurs soumis au droit américain, Orange participe malgré lui à une forme de dépendance structurelle. Le Cloud Act, qui permet aux autorités américaines d’exiger l’accès à certaines données, même hébergées hors des États-Unis, symbolise cette vulnérabilité. Même si les mécanismes de chiffrement, de cloisonnement et de contrôle contractuel existent, le simple fait que la décision ultime puisse échapper aux juridictions européennes constitue une faille du point de vue de la souveraineté. - -Ce paradoxe est d’autant plus frappant que des alternatives européennes existent. La France et l’Europe disposent d’acteurs solides, capables de fournir des services cloud performants, sécurisés et compétitifs sur de nombreux usages. OVHcloud, Scaleway, Outscale, IONOS ou encore les initiatives portées par Deutsche Telekom en sont la preuve. Alors pourquoi ne pas construire une alliance massive entre ces acteurs et un groupe comme Orange pour bâtir une véritable alternative souveraine ? - -La réponse tient moins à la volonté qu’à l’échelle. Les hyperscalers américains investissent chaque année des dizaines de milliards d’euros dans leurs infrastructures. Ils déploient des data centers sur tous les continents, possèdent leurs propres réseaux mondiaux et attirent l’essentiel des talents du secteur. Face à cette puissance financière et industrielle, les acteurs européens, pris individuellement, peinent à rivaliser. Une alliance serait possible, mais elle nécessiterait un effort coordonné, soutenu politiquement, sur plusieurs décennies. Or l’Europe avance souvent par projets fragmentés, soumis aux cycles électoraux et aux priorités nationales parfois divergentes. - -Pour Orange, la situation se résume donc à un dilemme stratégique. S’en tenir strictement à des solutions européennes aujourd’hui impliquerait souvent de renoncer à certains niveaux de performance, de standardisation et de rapidité d’innovation. Dans un marché des télécoms déjà très concurrentiel, où les marges sont sous pression et où les attentes des clients sont toujours plus élevées, ce choix pourrait fragiliser l’entreprise à court et moyen terme. À l’inverse, s’appuyer sur les clouds américains permet de rester compétitif, mais au prix d’une dépendance qui pose problème à long terme. - -C’est dans cet entre-deux qu’émergent les stratégies hybrides. Orange, comme d’autres grands groupes européens, cherche à concilier deux impératifs contradictoires. D’un côté, tirer parti de la puissance des hyperscalers pour les usages nécessitant de la flexibilité, de l’innovation rapide et une échelle mondiale. De l’autre, développer des environnements de confiance pour les données sensibles, souvent en partenariat avec des acteurs européens, afin de garantir une maîtrise juridique et opérationnelle renforcée. Cette approche permet de limiter les risques sans renoncer totalement aux avantages technologiques des géants américains. - -Pour celles et ceux qui défendent activement la souveraineté numérique, ce compromis reste frustrant. Il donne l’impression d’un renoncement progressif, d’une Europe qui accepte de jouer sur un terrain défini par d’autres. Pourtant, le problème dépasse largement Orange. Il interroge la capacité collective du continent à se doter d’infrastructures numériques stratégiques, au même titre que l’énergie, la défense ou les transports. Tant que le cloud restera perçu uniquement comme un marché et non comme un enjeu de souveraineté, les décisions resteront dictées par des logiques de court terme. - -La vraie question n’est donc pas de savoir pourquoi Orange utilise les clouds américains, mais pourquoi l’Europe n’a pas encore su créer un cadre suffisamment ambitieux pour rendre ce choix inutile. Tant que les alternatives souveraines resteront fragmentées, sous-financées ou cantonnées à des niches, les grands groupes continueront à faire des choix pragmatiques, même s’ils sont stratégiquement inconfortables. Défendre la souveraineté numérique, ce n’est pas seulement pointer les risques de dépendance, c’est aussi accepter que cette souveraineté a un coût, qu’elle nécessite des investissements lourds, une vision industrielle de long terme et une véritable volonté politique. - -Dans ce contexte, le combat pour la souveraineté numérique n’est pas perdu, mais il reste à mener sur un autre terrain que celui des seules décisions d’entreprise. Il se joue au niveau des États, de l’Union européenne et des grandes orientations industrielles. Tant que ce cadre n’évoluera pas, même les acteurs les plus attachés à l’indépendance technologique continueront à avancer dans ce paradoxe : défendre la souveraineté dans le discours, tout en dépendant, dans les faits, des infrastructures des géants américains. - diff --git a/75bf96ba-e110-4a9e-8163-95890562aecf/revisions/0004.md b/75bf96ba-e110-4a9e-8163-95890562aecf/revisions/0004.md deleted file mode 100644 index 4790584..0000000 --- a/75bf96ba-e110-4a9e-8163-95890562aecf/revisions/0004.md +++ /dev/null @@ -1,20 +0,0 @@ -À première vue, la situation a quelque chose de déroutant. Orange, opérateur historique français, héritier d’une longue tradition de service public et acteur stratégique des télécommunications, fait massivement appel aux infrastructures cloud d’Amazon, Microsoft ou Google. Dans un contexte où la souveraineté numérique est devenue un enjeu politique, économique et géostratégique majeur, ce choix peut apparaître comme une contradiction, voire comme un renoncement. Pourtant, il ne s’agit ni d’un abandon ni d’une naïveté, mais d’un compromis révélateur des limites actuelles de l’Europe dans la bataille du numérique. - -Le recours aux hyperscalers américains s’explique d’abord par une réalité industrielle. Ces entreprises ont construit, en une quinzaine d’années, une avance quasiment irréversible en matière d’infrastructures numériques. Leurs plateformes ne se contentent plus de fournir de la puissance de calcul ou du stockage. Elles offrent un écosystème complet qui va de l’hébergement à l’intelligence artificielle, en passant par l’analyse massive de données, l’automatisation des déploiements, la cybersécurité et la résilience globale des systèmes. Pour un groupe comme Orange, qui opère dans de nombreux pays et doit garantir des niveaux de service très élevés à des millions d’utilisateurs, cette maturité technologique est un facteur décisif. - -Mais ce choix, rationnel sur le plan opérationnel, pose une question politique et stratégique beaucoup plus large. En confiant une part croissante de ses infrastructures numériques à des acteurs soumis au droit américain, Orange participe malgré lui à une forme de dépendance structurelle. Le Cloud Act, qui permet aux autorités américaines d’exiger l’accès à certaines données, même hébergées hors des États-Unis, symbolise cette vulnérabilité. Même si les mécanismes de chiffrement, de cloisonnement et de contrôle contractuel existent, le simple fait que la décision ultime puisse échapper aux juridictions européennes constitue une faille du point de vue de la souveraineté. - -Ce paradoxe est d’autant plus frappant que des alternatives européennes existent. La France et l’Europe disposent d’acteurs solides, capables de fournir des services cloud performants, sécurisés et compétitifs sur de nombreux usages. OVHcloud, Scaleway, Outscale, IONOS ou encore les initiatives portées par Deutsche Telekom en sont la preuve. Alors pourquoi ne pas construire une alliance massive entre ces acteurs et un groupe comme Orange pour bâtir une véritable alternative souveraine ? - -La réponse tient moins à la volonté qu’à l’échelle. Les hyperscalers américains investissent chaque année des dizaines de milliards d’euros dans leurs infrastructures. Ils déploient des data centers sur tous les continents, possèdent leurs propres réseaux mondiaux et attirent l’essentiel des talents du secteur. Face à cette puissance financière et industrielle, les acteurs européens, pris individuellement, peinent à rivaliser. Une alliance serait possible, mais elle nécessiterait un effort coordonné, soutenu politiquement, sur plusieurs décennies. Or l’Europe avance souvent par projets fragmentés, soumis aux cycles électoraux et aux priorités nationales parfois divergentes. - -Pour Orange, la situation se résume donc à un dilemme stratégique. S’en tenir strictement à des solutions européennes aujourd’hui impliquerait souvent de renoncer à certains niveaux de performance, de standardisation et de rapidité d’innovation. Dans un marché des télécoms déjà très concurrentiel, où les marges sont sous pression et où les attentes des clients sont toujours plus élevées, ce choix pourrait fragiliser l’entreprise à court et moyen terme. À l’inverse, s’appuyer sur les clouds américains permet de rester compétitif, mais au prix d’une dépendance qui pose problème à long terme. - -C’est dans cet entre-deux qu’émergent les stratégies hybrides. Orange, comme d’autres grands groupes européens, cherche à concilier deux impératifs contradictoires. D’un côté, tirer parti de la puissance des hyperscalers pour les usages nécessitant de la flexibilité, de l’innovation rapide et une échelle mondiale. De l’autre, développer des environnements de confiance pour les données sensibles, souvent en partenariat avec des acteurs européens, afin de garantir une maîtrise juridique et opérationnelle renforcée. Cette approche permet de limiter les risques sans renoncer totalement aux avantages technologiques des géants américains. - -Pour celles et ceux qui défendent activement la souveraineté numérique, ce compromis reste frustrant. Il donne l’impression d’un renoncement progressif, d’une Europe qui accepte de jouer sur un terrain défini par d’autres. Pourtant, le problème dépasse largement Orange. Il interroge la capacité collective du continent à se doter d’infrastructures numériques stratégiques, au même titre que l’énergie, la défense ou les transports. Tant que le cloud restera perçu uniquement comme un marché et non comme un enjeu de souveraineté, les décisions resteront dictées par des logiques de court terme. - -La vraie question n’est donc pas de savoir pourquoi Orange utilise les clouds américains, mais pourquoi l’Europe n’a pas encore su créer un cadre suffisamment ambitieux pour rendre ce choix inutile. Tant que les alternatives souveraines resteront fragmentées, sous-financées ou cantonnées à des niches, les grands groupes continueront à faire des choix pragmatiques, même s’ils sont stratégiquement inconfortables. Défendre la souveraineté numérique, ce n’est pas seulement pointer les risques de dépendance, c’est aussi accepter que cette souveraineté a un coût, qu’elle nécessite des investissements lourds, une vision industrielle de long terme et une véritable volonté politique. - -Dans ce contexte, le combat pour la souveraineté numérique n’est pas perdu, mais il reste à mener sur un autre terrain que celui des seules décisions d’entreprise. Il se joue au niveau des États, de l’Union européenne et des grandes orientations industrielles. Tant que ce cadre n’évoluera pas, même les acteurs les plus attachés à l’indépendance technologique continueront à avancer dans ce paradoxe : défendre la souveraineté dans le discours, tout en dépendant, dans les faits, des infrastructures des géants américains. - diff --git a/75bf96ba-e110-4a9e-8163-95890562aecf/revisions/0005.md b/75bf96ba-e110-4a9e-8163-95890562aecf/revisions/0005.md deleted file mode 100644 index 4790584..0000000 --- a/75bf96ba-e110-4a9e-8163-95890562aecf/revisions/0005.md +++ /dev/null @@ -1,20 +0,0 @@ -À première vue, la situation a quelque chose de déroutant. Orange, opérateur historique français, héritier d’une longue tradition de service public et acteur stratégique des télécommunications, fait massivement appel aux infrastructures cloud d’Amazon, Microsoft ou Google. Dans un contexte où la souveraineté numérique est devenue un enjeu politique, économique et géostratégique majeur, ce choix peut apparaître comme une contradiction, voire comme un renoncement. Pourtant, il ne s’agit ni d’un abandon ni d’une naïveté, mais d’un compromis révélateur des limites actuelles de l’Europe dans la bataille du numérique. - -Le recours aux hyperscalers américains s’explique d’abord par une réalité industrielle. Ces entreprises ont construit, en une quinzaine d’années, une avance quasiment irréversible en matière d’infrastructures numériques. Leurs plateformes ne se contentent plus de fournir de la puissance de calcul ou du stockage. Elles offrent un écosystème complet qui va de l’hébergement à l’intelligence artificielle, en passant par l’analyse massive de données, l’automatisation des déploiements, la cybersécurité et la résilience globale des systèmes. Pour un groupe comme Orange, qui opère dans de nombreux pays et doit garantir des niveaux de service très élevés à des millions d’utilisateurs, cette maturité technologique est un facteur décisif. - -Mais ce choix, rationnel sur le plan opérationnel, pose une question politique et stratégique beaucoup plus large. En confiant une part croissante de ses infrastructures numériques à des acteurs soumis au droit américain, Orange participe malgré lui à une forme de dépendance structurelle. Le Cloud Act, qui permet aux autorités américaines d’exiger l’accès à certaines données, même hébergées hors des États-Unis, symbolise cette vulnérabilité. Même si les mécanismes de chiffrement, de cloisonnement et de contrôle contractuel existent, le simple fait que la décision ultime puisse échapper aux juridictions européennes constitue une faille du point de vue de la souveraineté. - -Ce paradoxe est d’autant plus frappant que des alternatives européennes existent. La France et l’Europe disposent d’acteurs solides, capables de fournir des services cloud performants, sécurisés et compétitifs sur de nombreux usages. OVHcloud, Scaleway, Outscale, IONOS ou encore les initiatives portées par Deutsche Telekom en sont la preuve. Alors pourquoi ne pas construire une alliance massive entre ces acteurs et un groupe comme Orange pour bâtir une véritable alternative souveraine ? - -La réponse tient moins à la volonté qu’à l’échelle. Les hyperscalers américains investissent chaque année des dizaines de milliards d’euros dans leurs infrastructures. Ils déploient des data centers sur tous les continents, possèdent leurs propres réseaux mondiaux et attirent l’essentiel des talents du secteur. Face à cette puissance financière et industrielle, les acteurs européens, pris individuellement, peinent à rivaliser. Une alliance serait possible, mais elle nécessiterait un effort coordonné, soutenu politiquement, sur plusieurs décennies. Or l’Europe avance souvent par projets fragmentés, soumis aux cycles électoraux et aux priorités nationales parfois divergentes. - -Pour Orange, la situation se résume donc à un dilemme stratégique. S’en tenir strictement à des solutions européennes aujourd’hui impliquerait souvent de renoncer à certains niveaux de performance, de standardisation et de rapidité d’innovation. Dans un marché des télécoms déjà très concurrentiel, où les marges sont sous pression et où les attentes des clients sont toujours plus élevées, ce choix pourrait fragiliser l’entreprise à court et moyen terme. À l’inverse, s’appuyer sur les clouds américains permet de rester compétitif, mais au prix d’une dépendance qui pose problème à long terme. - -C’est dans cet entre-deux qu’émergent les stratégies hybrides. Orange, comme d’autres grands groupes européens, cherche à concilier deux impératifs contradictoires. D’un côté, tirer parti de la puissance des hyperscalers pour les usages nécessitant de la flexibilité, de l’innovation rapide et une échelle mondiale. De l’autre, développer des environnements de confiance pour les données sensibles, souvent en partenariat avec des acteurs européens, afin de garantir une maîtrise juridique et opérationnelle renforcée. Cette approche permet de limiter les risques sans renoncer totalement aux avantages technologiques des géants américains. - -Pour celles et ceux qui défendent activement la souveraineté numérique, ce compromis reste frustrant. Il donne l’impression d’un renoncement progressif, d’une Europe qui accepte de jouer sur un terrain défini par d’autres. Pourtant, le problème dépasse largement Orange. Il interroge la capacité collective du continent à se doter d’infrastructures numériques stratégiques, au même titre que l’énergie, la défense ou les transports. Tant que le cloud restera perçu uniquement comme un marché et non comme un enjeu de souveraineté, les décisions resteront dictées par des logiques de court terme. - -La vraie question n’est donc pas de savoir pourquoi Orange utilise les clouds américains, mais pourquoi l’Europe n’a pas encore su créer un cadre suffisamment ambitieux pour rendre ce choix inutile. Tant que les alternatives souveraines resteront fragmentées, sous-financées ou cantonnées à des niches, les grands groupes continueront à faire des choix pragmatiques, même s’ils sont stratégiquement inconfortables. Défendre la souveraineté numérique, ce n’est pas seulement pointer les risques de dépendance, c’est aussi accepter que cette souveraineté a un coût, qu’elle nécessite des investissements lourds, une vision industrielle de long terme et une véritable volonté politique. - -Dans ce contexte, le combat pour la souveraineté numérique n’est pas perdu, mais il reste à mener sur un autre terrain que celui des seules décisions d’entreprise. Il se joue au niveau des États, de l’Union européenne et des grandes orientations industrielles. Tant que ce cadre n’évoluera pas, même les acteurs les plus attachés à l’indépendance technologique continueront à avancer dans ce paradoxe : défendre la souveraineté dans le discours, tout en dépendant, dans les faits, des infrastructures des géants américains. - diff --git a/75bf96ba-e110-4a9e-8163-95890562aecf/revisions/0006.md b/75bf96ba-e110-4a9e-8163-95890562aecf/revisions/0006.md deleted file mode 100644 index 4790584..0000000 --- a/75bf96ba-e110-4a9e-8163-95890562aecf/revisions/0006.md +++ /dev/null @@ -1,20 +0,0 @@ -À première vue, la situation a quelque chose de déroutant. Orange, opérateur historique français, héritier d’une longue tradition de service public et acteur stratégique des télécommunications, fait massivement appel aux infrastructures cloud d’Amazon, Microsoft ou Google. Dans un contexte où la souveraineté numérique est devenue un enjeu politique, économique et géostratégique majeur, ce choix peut apparaître comme une contradiction, voire comme un renoncement. Pourtant, il ne s’agit ni d’un abandon ni d’une naïveté, mais d’un compromis révélateur des limites actuelles de l’Europe dans la bataille du numérique. - -Le recours aux hyperscalers américains s’explique d’abord par une réalité industrielle. Ces entreprises ont construit, en une quinzaine d’années, une avance quasiment irréversible en matière d’infrastructures numériques. Leurs plateformes ne se contentent plus de fournir de la puissance de calcul ou du stockage. Elles offrent un écosystème complet qui va de l’hébergement à l’intelligence artificielle, en passant par l’analyse massive de données, l’automatisation des déploiements, la cybersécurité et la résilience globale des systèmes. Pour un groupe comme Orange, qui opère dans de nombreux pays et doit garantir des niveaux de service très élevés à des millions d’utilisateurs, cette maturité technologique est un facteur décisif. - -Mais ce choix, rationnel sur le plan opérationnel, pose une question politique et stratégique beaucoup plus large. En confiant une part croissante de ses infrastructures numériques à des acteurs soumis au droit américain, Orange participe malgré lui à une forme de dépendance structurelle. Le Cloud Act, qui permet aux autorités américaines d’exiger l’accès à certaines données, même hébergées hors des États-Unis, symbolise cette vulnérabilité. Même si les mécanismes de chiffrement, de cloisonnement et de contrôle contractuel existent, le simple fait que la décision ultime puisse échapper aux juridictions européennes constitue une faille du point de vue de la souveraineté. - -Ce paradoxe est d’autant plus frappant que des alternatives européennes existent. La France et l’Europe disposent d’acteurs solides, capables de fournir des services cloud performants, sécurisés et compétitifs sur de nombreux usages. OVHcloud, Scaleway, Outscale, IONOS ou encore les initiatives portées par Deutsche Telekom en sont la preuve. Alors pourquoi ne pas construire une alliance massive entre ces acteurs et un groupe comme Orange pour bâtir une véritable alternative souveraine ? - -La réponse tient moins à la volonté qu’à l’échelle. Les hyperscalers américains investissent chaque année des dizaines de milliards d’euros dans leurs infrastructures. Ils déploient des data centers sur tous les continents, possèdent leurs propres réseaux mondiaux et attirent l’essentiel des talents du secteur. Face à cette puissance financière et industrielle, les acteurs européens, pris individuellement, peinent à rivaliser. Une alliance serait possible, mais elle nécessiterait un effort coordonné, soutenu politiquement, sur plusieurs décennies. Or l’Europe avance souvent par projets fragmentés, soumis aux cycles électoraux et aux priorités nationales parfois divergentes. - -Pour Orange, la situation se résume donc à un dilemme stratégique. S’en tenir strictement à des solutions européennes aujourd’hui impliquerait souvent de renoncer à certains niveaux de performance, de standardisation et de rapidité d’innovation. Dans un marché des télécoms déjà très concurrentiel, où les marges sont sous pression et où les attentes des clients sont toujours plus élevées, ce choix pourrait fragiliser l’entreprise à court et moyen terme. À l’inverse, s’appuyer sur les clouds américains permet de rester compétitif, mais au prix d’une dépendance qui pose problème à long terme. - -C’est dans cet entre-deux qu’émergent les stratégies hybrides. Orange, comme d’autres grands groupes européens, cherche à concilier deux impératifs contradictoires. D’un côté, tirer parti de la puissance des hyperscalers pour les usages nécessitant de la flexibilité, de l’innovation rapide et une échelle mondiale. De l’autre, développer des environnements de confiance pour les données sensibles, souvent en partenariat avec des acteurs européens, afin de garantir une maîtrise juridique et opérationnelle renforcée. Cette approche permet de limiter les risques sans renoncer totalement aux avantages technologiques des géants américains. - -Pour celles et ceux qui défendent activement la souveraineté numérique, ce compromis reste frustrant. Il donne l’impression d’un renoncement progressif, d’une Europe qui accepte de jouer sur un terrain défini par d’autres. Pourtant, le problème dépasse largement Orange. Il interroge la capacité collective du continent à se doter d’infrastructures numériques stratégiques, au même titre que l’énergie, la défense ou les transports. Tant que le cloud restera perçu uniquement comme un marché et non comme un enjeu de souveraineté, les décisions resteront dictées par des logiques de court terme. - -La vraie question n’est donc pas de savoir pourquoi Orange utilise les clouds américains, mais pourquoi l’Europe n’a pas encore su créer un cadre suffisamment ambitieux pour rendre ce choix inutile. Tant que les alternatives souveraines resteront fragmentées, sous-financées ou cantonnées à des niches, les grands groupes continueront à faire des choix pragmatiques, même s’ils sont stratégiquement inconfortables. Défendre la souveraineté numérique, ce n’est pas seulement pointer les risques de dépendance, c’est aussi accepter que cette souveraineté a un coût, qu’elle nécessite des investissements lourds, une vision industrielle de long terme et une véritable volonté politique. - -Dans ce contexte, le combat pour la souveraineté numérique n’est pas perdu, mais il reste à mener sur un autre terrain que celui des seules décisions d’entreprise. Il se joue au niveau des États, de l’Union européenne et des grandes orientations industrielles. Tant que ce cadre n’évoluera pas, même les acteurs les plus attachés à l’indépendance technologique continueront à avancer dans ce paradoxe : défendre la souveraineté dans le discours, tout en dépendant, dans les faits, des infrastructures des géants américains. - diff --git a/75bf96ba-e110-4a9e-8163-95890562aecf/revisions/0007.md b/75bf96ba-e110-4a9e-8163-95890562aecf/revisions/0007.md deleted file mode 100644 index 4790584..0000000 --- a/75bf96ba-e110-4a9e-8163-95890562aecf/revisions/0007.md +++ /dev/null @@ -1,20 +0,0 @@ -À première vue, la situation a quelque chose de déroutant. Orange, opérateur historique français, héritier d’une longue tradition de service public et acteur stratégique des télécommunications, fait massivement appel aux infrastructures cloud d’Amazon, Microsoft ou Google. Dans un contexte où la souveraineté numérique est devenue un enjeu politique, économique et géostratégique majeur, ce choix peut apparaître comme une contradiction, voire comme un renoncement. Pourtant, il ne s’agit ni d’un abandon ni d’une naïveté, mais d’un compromis révélateur des limites actuelles de l’Europe dans la bataille du numérique. - -Le recours aux hyperscalers américains s’explique d’abord par une réalité industrielle. Ces entreprises ont construit, en une quinzaine d’années, une avance quasiment irréversible en matière d’infrastructures numériques. Leurs plateformes ne se contentent plus de fournir de la puissance de calcul ou du stockage. Elles offrent un écosystème complet qui va de l’hébergement à l’intelligence artificielle, en passant par l’analyse massive de données, l’automatisation des déploiements, la cybersécurité et la résilience globale des systèmes. Pour un groupe comme Orange, qui opère dans de nombreux pays et doit garantir des niveaux de service très élevés à des millions d’utilisateurs, cette maturité technologique est un facteur décisif. - -Mais ce choix, rationnel sur le plan opérationnel, pose une question politique et stratégique beaucoup plus large. En confiant une part croissante de ses infrastructures numériques à des acteurs soumis au droit américain, Orange participe malgré lui à une forme de dépendance structurelle. Le Cloud Act, qui permet aux autorités américaines d’exiger l’accès à certaines données, même hébergées hors des États-Unis, symbolise cette vulnérabilité. Même si les mécanismes de chiffrement, de cloisonnement et de contrôle contractuel existent, le simple fait que la décision ultime puisse échapper aux juridictions européennes constitue une faille du point de vue de la souveraineté. - -Ce paradoxe est d’autant plus frappant que des alternatives européennes existent. La France et l’Europe disposent d’acteurs solides, capables de fournir des services cloud performants, sécurisés et compétitifs sur de nombreux usages. OVHcloud, Scaleway, Outscale, IONOS ou encore les initiatives portées par Deutsche Telekom en sont la preuve. Alors pourquoi ne pas construire une alliance massive entre ces acteurs et un groupe comme Orange pour bâtir une véritable alternative souveraine ? - -La réponse tient moins à la volonté qu’à l’échelle. Les hyperscalers américains investissent chaque année des dizaines de milliards d’euros dans leurs infrastructures. Ils déploient des data centers sur tous les continents, possèdent leurs propres réseaux mondiaux et attirent l’essentiel des talents du secteur. Face à cette puissance financière et industrielle, les acteurs européens, pris individuellement, peinent à rivaliser. Une alliance serait possible, mais elle nécessiterait un effort coordonné, soutenu politiquement, sur plusieurs décennies. Or l’Europe avance souvent par projets fragmentés, soumis aux cycles électoraux et aux priorités nationales parfois divergentes. - -Pour Orange, la situation se résume donc à un dilemme stratégique. S’en tenir strictement à des solutions européennes aujourd’hui impliquerait souvent de renoncer à certains niveaux de performance, de standardisation et de rapidité d’innovation. Dans un marché des télécoms déjà très concurrentiel, où les marges sont sous pression et où les attentes des clients sont toujours plus élevées, ce choix pourrait fragiliser l’entreprise à court et moyen terme. À l’inverse, s’appuyer sur les clouds américains permet de rester compétitif, mais au prix d’une dépendance qui pose problème à long terme. - -C’est dans cet entre-deux qu’émergent les stratégies hybrides. Orange, comme d’autres grands groupes européens, cherche à concilier deux impératifs contradictoires. D’un côté, tirer parti de la puissance des hyperscalers pour les usages nécessitant de la flexibilité, de l’innovation rapide et une échelle mondiale. De l’autre, développer des environnements de confiance pour les données sensibles, souvent en partenariat avec des acteurs européens, afin de garantir une maîtrise juridique et opérationnelle renforcée. Cette approche permet de limiter les risques sans renoncer totalement aux avantages technologiques des géants américains. - -Pour celles et ceux qui défendent activement la souveraineté numérique, ce compromis reste frustrant. Il donne l’impression d’un renoncement progressif, d’une Europe qui accepte de jouer sur un terrain défini par d’autres. Pourtant, le problème dépasse largement Orange. Il interroge la capacité collective du continent à se doter d’infrastructures numériques stratégiques, au même titre que l’énergie, la défense ou les transports. Tant que le cloud restera perçu uniquement comme un marché et non comme un enjeu de souveraineté, les décisions resteront dictées par des logiques de court terme. - -La vraie question n’est donc pas de savoir pourquoi Orange utilise les clouds américains, mais pourquoi l’Europe n’a pas encore su créer un cadre suffisamment ambitieux pour rendre ce choix inutile. Tant que les alternatives souveraines resteront fragmentées, sous-financées ou cantonnées à des niches, les grands groupes continueront à faire des choix pragmatiques, même s’ils sont stratégiquement inconfortables. Défendre la souveraineté numérique, ce n’est pas seulement pointer les risques de dépendance, c’est aussi accepter que cette souveraineté a un coût, qu’elle nécessite des investissements lourds, une vision industrielle de long terme et une véritable volonté politique. - -Dans ce contexte, le combat pour la souveraineté numérique n’est pas perdu, mais il reste à mener sur un autre terrain que celui des seules décisions d’entreprise. Il se joue au niveau des États, de l’Union européenne et des grandes orientations industrielles. Tant que ce cadre n’évoluera pas, même les acteurs les plus attachés à l’indépendance technologique continueront à avancer dans ce paradoxe : défendre la souveraineté dans le discours, tout en dépendant, dans les faits, des infrastructures des géants américains. - diff --git a/75bf96ba-e110-4a9e-8163-95890562aecf/revisions/0008.md b/75bf96ba-e110-4a9e-8163-95890562aecf/revisions/0008.md deleted file mode 100644 index a4a72e5..0000000 --- a/75bf96ba-e110-4a9e-8163-95890562aecf/revisions/0008.md +++ /dev/null @@ -1,19 +0,0 @@ -## Orange dans les bras d'Amazon : l'aveu d'un échec européen - -Orange utilise massivement AWS, Azure et Google Cloud. Dit comme ça, c'est presque une blague. L'ancien France Télécom, opérateur historique, fleuron des télécoms français, héritier du service public, branché sur les serveurs de la Silicon Valley. À l'heure où on ne parle que de souveraineté numérique, on pourrait croire à une trahison. C'est plus compliqué que ça. - -La raison principale est bête : les Américains ont gagné la course. En quinze ans, AWS, Microsoft et Google ont construit une avance que personne ne sait combler aujourd'hui. Et ils ne vendent plus seulement du stockage ou de la puissance de calcul. Ils vendent un écosystème entier : de l'IA prête à l'emploi, des outils d'analyse de données, de l'automatisation, de la cybersécurité, des garanties de disponibilité à neuf chiffres. Pour Orange, qui doit faire tourner ses services dans une vingtaine de pays sans tomber en panne, ce niveau de maturité pèse lourd dans la balance. - -Sauf que ce choix rationnel a un prix politique. En confiant ses infrastructures à des entreprises soumises au droit américain, Orange entre dans une zone de dépendance dont on ne sort pas facilement. Le Cloud Act permet aux autorités américaines de réclamer des données hébergées par ces sociétés, même quand ces données sont physiquement en Europe. On peut chiffrer, cloisonner, négocier des clauses dans tous les sens, le fait reste que la décision finale échappe au juge européen. Pour un opérateur télécoms qui manipule des données de millions d'abonnés, ce n'est pas un détail. - -Le plus rageant, c'est qu'on a des alternatives. OVHcloud, Scaleway, Outscale, IONOS en Allemagne, sans parler des projets autour de Deutsche Telekom. Ces acteurs existent, ils sont sérieux, ils savent faire. Alors pourquoi Orange ne s'allie pas avec eux pour construire quelque chose de crédible à l'échelle européenne ? - -Parce que l'écart de moyens est vertigineux. AWS et Microsoft investissent chacun plus de cinquante milliards de dollars par an dans leurs infrastructures. Ils ont leurs propres câbles sous-marins, leurs propres réseaux mondiaux, et ils raflent une bonne partie des ingénieurs qui sortent des écoles. Un OVH, même bien géré, ne joue pas dans la même catégorie financière. Il faudrait une alliance européenne soutenue politiquement, financée sur vingt ou trente ans, pour espérer rattraper. On a essayé avec Gaia-X. Le résultat parle de lui-même. - -Du coup, Orange est coincé. Tout miser sur l'européen aujourd'hui, ça veut dire accepter des services moins performants, moins riches, et perdre du terrain face à ses concurrents qui, eux, n'auront pas ces scrupules. Dans un marché où les marges fondent et où chaque innovation compte, c'est un pari risqué. Continuer avec les Américains, c'est rester dans la course mais accepter une dépendance qui peut, du jour au lendemain, devenir un problème géopolitique. - -D'où la solution batarde que tout le monde adopte : l'hybride. On met chez Amazon ou Microsoft ce qui doit aller vite, innover, scaler. On garde en Europe, parfois sur des clouds "de confiance" labellisés SecNumCloud, ce qui touche aux données sensibles, aux clients régulés, à l'État. Ce n'est pas glorieux, mais ça permet de tenir les deux bouts. - -Pour les défenseurs de la souveraineté numérique, ce compromis a un goût amer. On a l'impression d'une Europe qui se résigne, qui joue le match sur le terrain de l'adversaire avec ses règles. Mais en pointant Orange du doigt, on rate la cible. Le vrai problème n'est pas dans les choix d'une entreprise, il est en amont. Tant qu'on traitera le cloud comme un simple marché et pas comme une infrastructure critique, au même titre que l'électricité ou les chemins de fer, les industriels feront ce qu'ils ont toujours fait : choisir ce qui marche, là, maintenant. - -La bonne question n'est donc pas "pourquoi Orange utilise AWS". Elle est "pourquoi, vingt ans après l'arrivée du cloud, l'Europe n'a toujours pas mis sur la table de quoi rendre ce choix évitable". La souveraineté ne se décrète pas dans des communiqués. Elle se paie. En milliards, en années, en décisions politiques qui survivent aux changements de gouvernement. Tant qu'on ne sera pas prêts à ce niveau d'engagement, on continuera à tenir un discours sur l'indépendance numérique en signant des contrats avec Seattle et Redmond. \ No newline at end of file diff --git a/75bf96ba-e110-4a9e-8163-95890562aecf/revisions/0009.md b/75bf96ba-e110-4a9e-8163-95890562aecf/revisions/0009.md deleted file mode 100644 index c2c0bae..0000000 --- a/75bf96ba-e110-4a9e-8163-95890562aecf/revisions/0009.md +++ /dev/null @@ -1,17 +0,0 @@ -Orange utilise massivement AWS, Azure et Google Cloud. Dit comme ça, c'est presque une blague. L'ancien France Télécom, opérateur historique, fleuron des télécoms français, héritier du service public, branché sur les serveurs de la Silicon Valley. À l'heure où on ne parle que de souveraineté numérique, on pourrait croire à une trahison. C'est plus compliqué que ça. - -La raison principale est bête : les Américains ont gagné la course. En quinze ans, AWS, Microsoft et Google ont construit une avance que personne ne sait combler aujourd'hui. Et ils ne vendent plus seulement du stockage ou de la puissance de calcul. Ils vendent un écosystème entier : de l'IA prête à l'emploi, des outils d'analyse de données, de l'automatisation, de la cybersécurité, des garanties de disponibilité à neuf chiffres. Pour Orange, qui doit faire tourner ses services dans une vingtaine de pays sans tomber en panne, ce niveau de maturité pèse lourd dans la balance. - -Sauf que ce choix rationnel a un prix politique. En confiant ses infrastructures à des entreprises soumises au droit américain, Orange entre dans une zone de dépendance dont on ne sort pas facilement. Le Cloud Act permet aux autorités américaines de réclamer des données hébergées par ces sociétés, même quand ces données sont physiquement en Europe. On peut chiffrer, cloisonner, négocier des clauses dans tous les sens, le fait reste que la décision finale échappe au juge européen. Pour un opérateur télécoms qui manipule des données de millions d'abonnés, ce n'est pas un détail. - -Le plus rageant, c'est qu'on a des alternatives. OVHcloud, Scaleway, Outscale, IONOS en Allemagne, sans parler des projets autour de Deutsche Telekom. Ces acteurs existent, ils sont sérieux, ils savent faire. Alors pourquoi Orange ne s'allie pas avec eux pour construire quelque chose de crédible à l'échelle européenne ? - -Parce que l'écart de moyens est vertigineux. AWS et Microsoft investissent chacun plus de cinquante milliards de dollars par an dans leurs infrastructures. Ils ont leurs propres câbles sous-marins, leurs propres réseaux mondiaux, et ils raflent une bonne partie des ingénieurs qui sortent des écoles. Un OVH, même bien géré, ne joue pas dans la même catégorie financière. Il faudrait une alliance européenne soutenue politiquement, financée sur vingt ou trente ans, pour espérer rattraper. On a essayé avec Gaia-X. Le résultat parle de lui-même. - -Du coup, Orange est coincé. Tout miser sur l'européen aujourd'hui, ça veut dire accepter des services moins performants, moins riches, et perdre du terrain face à ses concurrents qui, eux, n'auront pas ces scrupules. Dans un marché où les marges fondent et où chaque innovation compte, c'est un pari risqué. Continuer avec les Américains, c'est rester dans la course mais accepter une dépendance qui peut, du jour au lendemain, devenir un problème géopolitique. - -D'où la solution batarde que tout le monde adopte : l'hybride. On met chez Amazon ou Microsoft ce qui doit aller vite, innover, scaler. On garde en Europe, parfois sur des clouds "de confiance" labellisés SecNumCloud, ce qui touche aux données sensibles, aux clients régulés, à l'État. Ce n'est pas glorieux, mais ça permet de tenir les deux bouts. - -Pour les défenseurs de la souveraineté numérique, ce compromis a un goût amer. On a l'impression d'une Europe qui se résigne, qui joue le match sur le terrain de l'adversaire avec ses règles. Mais en pointant Orange du doigt, on rate la cible. Le vrai problème n'est pas dans les choix d'une entreprise, il est en amont. Tant qu'on traitera le cloud comme un simple marché et pas comme une infrastructure critique, au même titre que l'électricité ou les chemins de fer, les industriels feront ce qu'ils ont toujours fait : choisir ce qui marche, là, maintenant. - -La bonne question n'est donc pas "pourquoi Orange utilise AWS". Elle est "pourquoi, vingt ans après l'arrivée du cloud, l'Europe n'a toujours pas mis sur la table de quoi rendre ce choix évitable". La souveraineté ne se décrète pas dans des communiqués. Elle se paie. En milliards, en années, en décisions politiques qui survivent aux changements de gouvernement. Tant qu'on ne sera pas prêts à ce niveau d'engagement, on continuera à tenir un discours sur l'indépendance numérique en signant des contrats avec Seattle et Redmond. \ No newline at end of file diff --git a/75bf96ba-e110-4a9e-8163-95890562aecf/revisions/0010.md b/75bf96ba-e110-4a9e-8163-95890562aecf/revisions/0010.md deleted file mode 100644 index 988bb5a..0000000 --- a/75bf96ba-e110-4a9e-8163-95890562aecf/revisions/0010.md +++ /dev/null @@ -1,17 +0,0 @@ -Orange utilise massivement AWS, Azure et Google Cloud. Dit comme ça, c'est presque une blague. L'ancien France Télécom, opérateur historique, fleuron des télécoms français, héritier du service public, branché sur les serveurs de la Silicon Valley. À l'heure où on ne parle que de souveraineté numérique, on pourrait croire à une trahison. C'est plus compliqué que ça. - -La raison principale est bête : les Américains ont gagné la course. En quinze ans, AWS, Microsoft et Google ont construit une avance que personne ne sait combler aujourd'hui. Et ils ne vendent plus seulement du stockage ou de la puissance de calcul. Ils vendent un écosystème entier : de l'IA prête à l'emploi, des outils d'analyse de données, de l'automatisation, de la cybersécurité, des garanties de disponibilité à neuf chiffres. Pour Orange, qui doit faire tourner ses services dans une vingtaine de pays sans tomber en panne, ce niveau de maturité pèse lourd dans la balance. - -Sauf que ce choix rationnel a un prix politique. En confiant ses infrastructures à des entreprises soumises au droit américain, Orange entre dans une zone de dépendance dont on ne sort pas facilement. Le Cloud Act permet aux autorités américaines de réclamer des données hébergées par ces sociétés, même quand ces données sont physiquement en Europe. On peut chiffrer, cloisonner, négocier des clauses dans tous les sens, le fait reste que la décision finale échappe au juge européen. Pour un opérateur télécoms qui manipule des données de millions d'abonnés, ce n'est pas un détail. - -Le plus rageant, c'est qu'on a des alternatives. OVHcloud, Scaleway, Outscale, IONOS en Allemagne, sans parler des projets autour de Deutsche Telekom. Ces acteurs existent, ils sont sérieux, ils savent faire. Alors pourquoi Orange ne s'allie pas avec eux pour construire quelque chose de crédible à l'échelle européenne ? - -Parce que l'écart de moyens est vertigineux. AWS et Microsoft investissent chacun plus de cinquante milliards de dollars par an dans leurs infrastructures. Ils ont leurs propres câbles sous-marins, leurs propres réseaux mondiaux, et ils raflent une bonne partie des ingénieurs qui sortent des écoles. Un OVH, même bien géré, ne joue pas dans la même catégorie financière. Il faudrait une alliance européenne soutenue politiquement, financée sur vingt ou trente ans, pour espérer rattraper. On a essayé avec Gaia-X. Le résultat parle de lui-même. - -Du coup, Orange est coincé. Tout miser sur l'européen aujourd'hui, ça veut dire accepter des services moins performants, moins riches, et perdre du terrain face à ses concurrents qui, eux, n'auront pas ces scrupules. Dans un marché où les marges fondent et où chaque innovation compte, c'est un pari risqué. Continuer avec les Américains, c'est rester dans la course mais accepter une dépendance qui peut, du jour au lendemain, devenir un problème géopolitique. - -D'où la solution batarde que tout le monde adopte : l'hybride. On met chez Amazon ou Microsoft ce qui doit aller vite, innover, scaler. On garde en Europe, parfois sur des clouds "de confiance" labellisés SecNumCloud, ce qui touche aux données sensibles, aux clients régulés, à l'État. Ce n'est pas glorieux, mais ça permet de tenir les deux bouts. - -Pour les défenseurs de la souveraineté numérique, ce compromis a un goût amer. On a l'impression d'une Europe qui se résigne, qui joue le match sur le terrain de l'adversaire avec ses règles. Mais en pointant Orange du doigt, on rate la cible. Le vrai problème n'est pas dans les choix d'une entreprise, il est en amont. Tant qu'on traitera le cloud comme un simple marché et pas comme une infrastructure critique, au même titre que l'électricité ou les chemins de fer, les industriels feront ce qu'ils ont toujours fait : choisir ce qui marche, là, maintenant. - -La bonne question n'est donc pas "pourquoi Orange utilise AWS". Elle est "pourquoi, vingt ans après l'arrivée du cloud, l'Europe n'a toujours pas mis sur la table de quoi rendre ce choix évitable". La souveraineté ne se décrète pas dans des communiqués. Elle se paie. En milliards, en années, en décisions politiques qui survivent aux changements de gouvernement. Tant qu'on ne sera pas prêts à ce niveau d'engagement, on continuera à tenir un discours sur l'indépendance numérique en signant des contrats avec Seattle et Redmond. \ No newline at end of file diff --git a/75bf96ba-e110-4a9e-8163-95890562aecf/revisions/0011.md b/75bf96ba-e110-4a9e-8163-95890562aecf/revisions/0011.md deleted file mode 100644 index c2c0bae..0000000 --- a/75bf96ba-e110-4a9e-8163-95890562aecf/revisions/0011.md +++ /dev/null @@ -1,17 +0,0 @@ -Orange utilise massivement AWS, Azure et Google Cloud. Dit comme ça, c'est presque une blague. L'ancien France Télécom, opérateur historique, fleuron des télécoms français, héritier du service public, branché sur les serveurs de la Silicon Valley. À l'heure où on ne parle que de souveraineté numérique, on pourrait croire à une trahison. C'est plus compliqué que ça. - -La raison principale est bête : les Américains ont gagné la course. En quinze ans, AWS, Microsoft et Google ont construit une avance que personne ne sait combler aujourd'hui. Et ils ne vendent plus seulement du stockage ou de la puissance de calcul. Ils vendent un écosystème entier : de l'IA prête à l'emploi, des outils d'analyse de données, de l'automatisation, de la cybersécurité, des garanties de disponibilité à neuf chiffres. Pour Orange, qui doit faire tourner ses services dans une vingtaine de pays sans tomber en panne, ce niveau de maturité pèse lourd dans la balance. - -Sauf que ce choix rationnel a un prix politique. En confiant ses infrastructures à des entreprises soumises au droit américain, Orange entre dans une zone de dépendance dont on ne sort pas facilement. Le Cloud Act permet aux autorités américaines de réclamer des données hébergées par ces sociétés, même quand ces données sont physiquement en Europe. On peut chiffrer, cloisonner, négocier des clauses dans tous les sens, le fait reste que la décision finale échappe au juge européen. Pour un opérateur télécoms qui manipule des données de millions d'abonnés, ce n'est pas un détail. - -Le plus rageant, c'est qu'on a des alternatives. OVHcloud, Scaleway, Outscale, IONOS en Allemagne, sans parler des projets autour de Deutsche Telekom. Ces acteurs existent, ils sont sérieux, ils savent faire. Alors pourquoi Orange ne s'allie pas avec eux pour construire quelque chose de crédible à l'échelle européenne ? - -Parce que l'écart de moyens est vertigineux. AWS et Microsoft investissent chacun plus de cinquante milliards de dollars par an dans leurs infrastructures. Ils ont leurs propres câbles sous-marins, leurs propres réseaux mondiaux, et ils raflent une bonne partie des ingénieurs qui sortent des écoles. Un OVH, même bien géré, ne joue pas dans la même catégorie financière. Il faudrait une alliance européenne soutenue politiquement, financée sur vingt ou trente ans, pour espérer rattraper. On a essayé avec Gaia-X. Le résultat parle de lui-même. - -Du coup, Orange est coincé. Tout miser sur l'européen aujourd'hui, ça veut dire accepter des services moins performants, moins riches, et perdre du terrain face à ses concurrents qui, eux, n'auront pas ces scrupules. Dans un marché où les marges fondent et où chaque innovation compte, c'est un pari risqué. Continuer avec les Américains, c'est rester dans la course mais accepter une dépendance qui peut, du jour au lendemain, devenir un problème géopolitique. - -D'où la solution batarde que tout le monde adopte : l'hybride. On met chez Amazon ou Microsoft ce qui doit aller vite, innover, scaler. On garde en Europe, parfois sur des clouds "de confiance" labellisés SecNumCloud, ce qui touche aux données sensibles, aux clients régulés, à l'État. Ce n'est pas glorieux, mais ça permet de tenir les deux bouts. - -Pour les défenseurs de la souveraineté numérique, ce compromis a un goût amer. On a l'impression d'une Europe qui se résigne, qui joue le match sur le terrain de l'adversaire avec ses règles. Mais en pointant Orange du doigt, on rate la cible. Le vrai problème n'est pas dans les choix d'une entreprise, il est en amont. Tant qu'on traitera le cloud comme un simple marché et pas comme une infrastructure critique, au même titre que l'électricité ou les chemins de fer, les industriels feront ce qu'ils ont toujours fait : choisir ce qui marche, là, maintenant. - -La bonne question n'est donc pas "pourquoi Orange utilise AWS". Elle est "pourquoi, vingt ans après l'arrivée du cloud, l'Europe n'a toujours pas mis sur la table de quoi rendre ce choix évitable". La souveraineté ne se décrète pas dans des communiqués. Elle se paie. En milliards, en années, en décisions politiques qui survivent aux changements de gouvernement. Tant qu'on ne sera pas prêts à ce niveau d'engagement, on continuera à tenir un discours sur l'indépendance numérique en signant des contrats avec Seattle et Redmond. \ No newline at end of file diff --git a/75bf96ba-e110-4a9e-8163-95890562aecf/revisions/0012.md b/75bf96ba-e110-4a9e-8163-95890562aecf/revisions/0012.md deleted file mode 100644 index 988bb5a..0000000 --- a/75bf96ba-e110-4a9e-8163-95890562aecf/revisions/0012.md +++ /dev/null @@ -1,17 +0,0 @@ -Orange utilise massivement AWS, Azure et Google Cloud. Dit comme ça, c'est presque une blague. L'ancien France Télécom, opérateur historique, fleuron des télécoms français, héritier du service public, branché sur les serveurs de la Silicon Valley. À l'heure où on ne parle que de souveraineté numérique, on pourrait croire à une trahison. C'est plus compliqué que ça. - -La raison principale est bête : les Américains ont gagné la course. En quinze ans, AWS, Microsoft et Google ont construit une avance que personne ne sait combler aujourd'hui. Et ils ne vendent plus seulement du stockage ou de la puissance de calcul. Ils vendent un écosystème entier : de l'IA prête à l'emploi, des outils d'analyse de données, de l'automatisation, de la cybersécurité, des garanties de disponibilité à neuf chiffres. Pour Orange, qui doit faire tourner ses services dans une vingtaine de pays sans tomber en panne, ce niveau de maturité pèse lourd dans la balance. - -Sauf que ce choix rationnel a un prix politique. En confiant ses infrastructures à des entreprises soumises au droit américain, Orange entre dans une zone de dépendance dont on ne sort pas facilement. Le Cloud Act permet aux autorités américaines de réclamer des données hébergées par ces sociétés, même quand ces données sont physiquement en Europe. On peut chiffrer, cloisonner, négocier des clauses dans tous les sens, le fait reste que la décision finale échappe au juge européen. Pour un opérateur télécoms qui manipule des données de millions d'abonnés, ce n'est pas un détail. - -Le plus rageant, c'est qu'on a des alternatives. OVHcloud, Scaleway, Outscale, IONOS en Allemagne, sans parler des projets autour de Deutsche Telekom. Ces acteurs existent, ils sont sérieux, ils savent faire. Alors pourquoi Orange ne s'allie pas avec eux pour construire quelque chose de crédible à l'échelle européenne ? - -Parce que l'écart de moyens est vertigineux. AWS et Microsoft investissent chacun plus de cinquante milliards de dollars par an dans leurs infrastructures. Ils ont leurs propres câbles sous-marins, leurs propres réseaux mondiaux, et ils raflent une bonne partie des ingénieurs qui sortent des écoles. Un OVH, même bien géré, ne joue pas dans la même catégorie financière. Il faudrait une alliance européenne soutenue politiquement, financée sur vingt ou trente ans, pour espérer rattraper. On a essayé avec Gaia-X. Le résultat parle de lui-même. - -Du coup, Orange est coincé. Tout miser sur l'européen aujourd'hui, ça veut dire accepter des services moins performants, moins riches, et perdre du terrain face à ses concurrents qui, eux, n'auront pas ces scrupules. Dans un marché où les marges fondent et où chaque innovation compte, c'est un pari risqué. Continuer avec les Américains, c'est rester dans la course mais accepter une dépendance qui peut, du jour au lendemain, devenir un problème géopolitique. - -D'où la solution batarde que tout le monde adopte : l'hybride. On met chez Amazon ou Microsoft ce qui doit aller vite, innover, scaler. On garde en Europe, parfois sur des clouds "de confiance" labellisés SecNumCloud, ce qui touche aux données sensibles, aux clients régulés, à l'État. Ce n'est pas glorieux, mais ça permet de tenir les deux bouts. - -Pour les défenseurs de la souveraineté numérique, ce compromis a un goût amer. On a l'impression d'une Europe qui se résigne, qui joue le match sur le terrain de l'adversaire avec ses règles. Mais en pointant Orange du doigt, on rate la cible. Le vrai problème n'est pas dans les choix d'une entreprise, il est en amont. Tant qu'on traitera le cloud comme un simple marché et pas comme une infrastructure critique, au même titre que l'électricité ou les chemins de fer, les industriels feront ce qu'ils ont toujours fait : choisir ce qui marche, là, maintenant. - -La bonne question n'est donc pas "pourquoi Orange utilise AWS". Elle est "pourquoi, vingt ans après l'arrivée du cloud, l'Europe n'a toujours pas mis sur la table de quoi rendre ce choix évitable". La souveraineté ne se décrète pas dans des communiqués. Elle se paie. En milliards, en années, en décisions politiques qui survivent aux changements de gouvernement. Tant qu'on ne sera pas prêts à ce niveau d'engagement, on continuera à tenir un discours sur l'indépendance numérique en signant des contrats avec Seattle et Redmond. \ No newline at end of file diff --git a/75bf96ba-e110-4a9e-8163-95890562aecf/revisions/0013.md b/75bf96ba-e110-4a9e-8163-95890562aecf/revisions/0013.md deleted file mode 100644 index 988bb5a..0000000 --- a/75bf96ba-e110-4a9e-8163-95890562aecf/revisions/0013.md +++ /dev/null @@ -1,17 +0,0 @@ -Orange utilise massivement AWS, Azure et Google Cloud. Dit comme ça, c'est presque une blague. L'ancien France Télécom, opérateur historique, fleuron des télécoms français, héritier du service public, branché sur les serveurs de la Silicon Valley. À l'heure où on ne parle que de souveraineté numérique, on pourrait croire à une trahison. C'est plus compliqué que ça. - -La raison principale est bête : les Américains ont gagné la course. En quinze ans, AWS, Microsoft et Google ont construit une avance que personne ne sait combler aujourd'hui. Et ils ne vendent plus seulement du stockage ou de la puissance de calcul. Ils vendent un écosystème entier : de l'IA prête à l'emploi, des outils d'analyse de données, de l'automatisation, de la cybersécurité, des garanties de disponibilité à neuf chiffres. Pour Orange, qui doit faire tourner ses services dans une vingtaine de pays sans tomber en panne, ce niveau de maturité pèse lourd dans la balance. - -Sauf que ce choix rationnel a un prix politique. En confiant ses infrastructures à des entreprises soumises au droit américain, Orange entre dans une zone de dépendance dont on ne sort pas facilement. Le Cloud Act permet aux autorités américaines de réclamer des données hébergées par ces sociétés, même quand ces données sont physiquement en Europe. On peut chiffrer, cloisonner, négocier des clauses dans tous les sens, le fait reste que la décision finale échappe au juge européen. Pour un opérateur télécoms qui manipule des données de millions d'abonnés, ce n'est pas un détail. - -Le plus rageant, c'est qu'on a des alternatives. OVHcloud, Scaleway, Outscale, IONOS en Allemagne, sans parler des projets autour de Deutsche Telekom. Ces acteurs existent, ils sont sérieux, ils savent faire. Alors pourquoi Orange ne s'allie pas avec eux pour construire quelque chose de crédible à l'échelle européenne ? - -Parce que l'écart de moyens est vertigineux. AWS et Microsoft investissent chacun plus de cinquante milliards de dollars par an dans leurs infrastructures. Ils ont leurs propres câbles sous-marins, leurs propres réseaux mondiaux, et ils raflent une bonne partie des ingénieurs qui sortent des écoles. Un OVH, même bien géré, ne joue pas dans la même catégorie financière. Il faudrait une alliance européenne soutenue politiquement, financée sur vingt ou trente ans, pour espérer rattraper. On a essayé avec Gaia-X. Le résultat parle de lui-même. - -Du coup, Orange est coincé. Tout miser sur l'européen aujourd'hui, ça veut dire accepter des services moins performants, moins riches, et perdre du terrain face à ses concurrents qui, eux, n'auront pas ces scrupules. Dans un marché où les marges fondent et où chaque innovation compte, c'est un pari risqué. Continuer avec les Américains, c'est rester dans la course mais accepter une dépendance qui peut, du jour au lendemain, devenir un problème géopolitique. - -D'où la solution batarde que tout le monde adopte : l'hybride. On met chez Amazon ou Microsoft ce qui doit aller vite, innover, scaler. On garde en Europe, parfois sur des clouds "de confiance" labellisés SecNumCloud, ce qui touche aux données sensibles, aux clients régulés, à l'État. Ce n'est pas glorieux, mais ça permet de tenir les deux bouts. - -Pour les défenseurs de la souveraineté numérique, ce compromis a un goût amer. On a l'impression d'une Europe qui se résigne, qui joue le match sur le terrain de l'adversaire avec ses règles. Mais en pointant Orange du doigt, on rate la cible. Le vrai problème n'est pas dans les choix d'une entreprise, il est en amont. Tant qu'on traitera le cloud comme un simple marché et pas comme une infrastructure critique, au même titre que l'électricité ou les chemins de fer, les industriels feront ce qu'ils ont toujours fait : choisir ce qui marche, là, maintenant. - -La bonne question n'est donc pas "pourquoi Orange utilise AWS". Elle est "pourquoi, vingt ans après l'arrivée du cloud, l'Europe n'a toujours pas mis sur la table de quoi rendre ce choix évitable". La souveraineté ne se décrète pas dans des communiqués. Elle se paie. En milliards, en années, en décisions politiques qui survivent aux changements de gouvernement. Tant qu'on ne sera pas prêts à ce niveau d'engagement, on continuera à tenir un discours sur l'indépendance numérique en signant des contrats avec Seattle et Redmond. \ No newline at end of file diff --git a/75bf96ba-e110-4a9e-8163-95890562aecf/revisions/0014.md b/75bf96ba-e110-4a9e-8163-95890562aecf/revisions/0014.md deleted file mode 100644 index 988bb5a..0000000 --- a/75bf96ba-e110-4a9e-8163-95890562aecf/revisions/0014.md +++ /dev/null @@ -1,17 +0,0 @@ -Orange utilise massivement AWS, Azure et Google Cloud. Dit comme ça, c'est presque une blague. L'ancien France Télécom, opérateur historique, fleuron des télécoms français, héritier du service public, branché sur les serveurs de la Silicon Valley. À l'heure où on ne parle que de souveraineté numérique, on pourrait croire à une trahison. C'est plus compliqué que ça. - -La raison principale est bête : les Américains ont gagné la course. En quinze ans, AWS, Microsoft et Google ont construit une avance que personne ne sait combler aujourd'hui. Et ils ne vendent plus seulement du stockage ou de la puissance de calcul. Ils vendent un écosystème entier : de l'IA prête à l'emploi, des outils d'analyse de données, de l'automatisation, de la cybersécurité, des garanties de disponibilité à neuf chiffres. Pour Orange, qui doit faire tourner ses services dans une vingtaine de pays sans tomber en panne, ce niveau de maturité pèse lourd dans la balance. - -Sauf que ce choix rationnel a un prix politique. En confiant ses infrastructures à des entreprises soumises au droit américain, Orange entre dans une zone de dépendance dont on ne sort pas facilement. Le Cloud Act permet aux autorités américaines de réclamer des données hébergées par ces sociétés, même quand ces données sont physiquement en Europe. On peut chiffrer, cloisonner, négocier des clauses dans tous les sens, le fait reste que la décision finale échappe au juge européen. Pour un opérateur télécoms qui manipule des données de millions d'abonnés, ce n'est pas un détail. - -Le plus rageant, c'est qu'on a des alternatives. OVHcloud, Scaleway, Outscale, IONOS en Allemagne, sans parler des projets autour de Deutsche Telekom. Ces acteurs existent, ils sont sérieux, ils savent faire. Alors pourquoi Orange ne s'allie pas avec eux pour construire quelque chose de crédible à l'échelle européenne ? - -Parce que l'écart de moyens est vertigineux. AWS et Microsoft investissent chacun plus de cinquante milliards de dollars par an dans leurs infrastructures. Ils ont leurs propres câbles sous-marins, leurs propres réseaux mondiaux, et ils raflent une bonne partie des ingénieurs qui sortent des écoles. Un OVH, même bien géré, ne joue pas dans la même catégorie financière. Il faudrait une alliance européenne soutenue politiquement, financée sur vingt ou trente ans, pour espérer rattraper. On a essayé avec Gaia-X. Le résultat parle de lui-même. - -Du coup, Orange est coincé. Tout miser sur l'européen aujourd'hui, ça veut dire accepter des services moins performants, moins riches, et perdre du terrain face à ses concurrents qui, eux, n'auront pas ces scrupules. Dans un marché où les marges fondent et où chaque innovation compte, c'est un pari risqué. Continuer avec les Américains, c'est rester dans la course mais accepter une dépendance qui peut, du jour au lendemain, devenir un problème géopolitique. - -D'où la solution batarde que tout le monde adopte : l'hybride. On met chez Amazon ou Microsoft ce qui doit aller vite, innover, scaler. On garde en Europe, parfois sur des clouds "de confiance" labellisés SecNumCloud, ce qui touche aux données sensibles, aux clients régulés, à l'État. Ce n'est pas glorieux, mais ça permet de tenir les deux bouts. - -Pour les défenseurs de la souveraineté numérique, ce compromis a un goût amer. On a l'impression d'une Europe qui se résigne, qui joue le match sur le terrain de l'adversaire avec ses règles. Mais en pointant Orange du doigt, on rate la cible. Le vrai problème n'est pas dans les choix d'une entreprise, il est en amont. Tant qu'on traitera le cloud comme un simple marché et pas comme une infrastructure critique, au même titre que l'électricité ou les chemins de fer, les industriels feront ce qu'ils ont toujours fait : choisir ce qui marche, là, maintenant. - -La bonne question n'est donc pas "pourquoi Orange utilise AWS". Elle est "pourquoi, vingt ans après l'arrivée du cloud, l'Europe n'a toujours pas mis sur la table de quoi rendre ce choix évitable". La souveraineté ne se décrète pas dans des communiqués. Elle se paie. En milliards, en années, en décisions politiques qui survivent aux changements de gouvernement. Tant qu'on ne sera pas prêts à ce niveau d'engagement, on continuera à tenir un discours sur l'indépendance numérique en signant des contrats avec Seattle et Redmond. \ No newline at end of file diff --git a/79bd0f3b-a66d-4402-878c-6a6ba3af149b/files/20220127-233808.png b/79bd0f3b-a66d-4402-878c-6a6ba3af149b/files/20220127-233808.png deleted file mode 100644 index 764ed34..0000000 Binary files a/79bd0f3b-a66d-4402-878c-6a6ba3af149b/files/20220127-233808.png and /dev/null differ diff --git a/79bd0f3b-a66d-4402-878c-6a6ba3af149b/files/dummy.png b/79bd0f3b-a66d-4402-878c-6a6ba3af149b/files/dummy.png deleted file mode 100644 index 58bb881..0000000 Binary files a/79bd0f3b-a66d-4402-878c-6a6ba3af149b/files/dummy.png and /dev/null differ diff --git a/79bd0f3b-a66d-4402-878c-6a6ba3af149b/files/esp32.png b/79bd0f3b-a66d-4402-878c-6a6ba3af149b/files/esp32.png deleted file mode 100644 index b002fa2..0000000 Binary files a/79bd0f3b-a66d-4402-878c-6a6ba3af149b/files/esp32.png and /dev/null differ diff --git a/79bd0f3b-a66d-4402-878c-6a6ba3af149b/index.md b/79bd0f3b-a66d-4402-878c-6a6ba3af149b/index.md deleted file mode 100644 index ecb4f99..0000000 --- a/79bd0f3b-a66d-4402-878c-6a6ba3af149b/index.md +++ /dev/null @@ -1,144 +0,0 @@ -# Panorama des familles de SoC Espressif - -## Introduction - -Espressif Systems produit plusieurs familles de **System on Chip (SoC)** dédiés à l'IoT, toutes orientées vers la connectivité sans fil et le faible coût. Les deux grandes lignées sont l'**ESP8266** (Wi-Fi seul) et l'**ESP32** (Wi-Fi + Bluetooth), cette dernière s'étant elle-même ramifiée en plusieurs sous-familles (S, C, H, P). - -Le tableau de synthèse ci-dessous donne un aperçu rapide ; chaque famille est ensuite détaillée. - -| Famille | Année | Cœur | Wi-Fi | Bluetooth | Particularité | -|---|---|---|---|---|---| -| **ESP8266** | 2014 | Tensilica L106 32 bits, 1 cœur, 80 MHz | 802.11 b/g/n | non | Premier SoC Wi-Fi grand public bon marché | -| **ESP32** | 2016 | Tensilica LX6 32 bits, 1 ou 2 cœurs, 240 MHz | 802.11 b/g/n | BT 4.2 + BLE | Polyvalent, cœur double | -| **ESP32-S2** | 2020 | Tensilica LX7, 1 cœur | 802.11 b/g/n | non | USB OTG natif, faible consommation | -| **ESP32-S3** | 2021 | Tensilica LX7, 2 cœurs, 240 MHz | 802.11 b/g/n | BT 5.0 LE | Accélérateur d'instructions vectorielles pour l'IA | -| **ESP32-C3** | 2021 | RISC-V 32 bits, 1 cœur, 160 MHz | 802.11 b/g/n | BT 5.0 LE | Premier ESP en RISC-V | -| **ESP32-C6** | 2023 | RISC-V, 2 cœurs (HP + LP) | Wi-Fi 6 (802.11ax), Thread, Zigbee | BT 5.0 LE | Multi-protocoles | -| **ESP32-H2** | 2023 | RISC-V, 1 cœur | non | BT 5.0 LE, Thread, Zigbee | Sans Wi-Fi, dédié 802.15.4 | -| **ESP32-P4** | 2024 | RISC-V, 2 cœurs HP + 1 LP, 400 MHz | non (radio externe) | non | Application processor haute performance | - -## ESP8266 : le pionnier - -![ESP8266](20220127-233808.png) - -L'**ESP8266** (sortie en **2014**) est le SoC qui a démocratisé l'IoT Wi-Fi grand public. Pour quelques euros, il offre un cœur **Tensilica Xtensa L106 32 bits** à 80 MHz, une **radio Wi-Fi 2,4 GHz** complète (802.11 b/g/n) et une pile TCP/IP, le tout dans un boîtier QFN32 de 5 × 5 mm. - -Caractéristiques marquantes : - -- un seul cœur, 80 ou 160 MHz ; -- pas de Bluetooth, pas de BLE ; -- pas de flash interne : code chargé depuis une flash SPI externe (généralement 512 Kio à 4 Mio) ; -- 80 Kio de RAM utilisateur ; -- 17 GPIO théoriques (mais peu exposées sur les petits modules comme l'ESP-01). - -> **Correction d'une idée reçue fréquente** : l'ESP8266 **ne dispose pas de Bluetooth**, et l'**ESP32 n'est pas un membre de la famille ESP8266** mais un SoC distinct, sorti plus tard. Le Bluetooth n'est apparu chez Espressif qu'avec l'ESP32 en 2016. - -### Modules à base d'ESP8266 - -Le SoC nu est rarement utilisé seul : il est généralement vendu intégré sur un petit module (PCB + flash + antenne + brochage standardisé) produit par **AI-Thinker** ou directement par **Espressif**. - -| Origine | Modules les plus utilisés | -|---|---| -| **AI-Thinker** | ESP-01, ESP-01S, ESP-07, ESP-12E, ESP-12F, ESP-12S | -| **Espressif** | ESP-WROOM-02, ESP-WROOM-02D, ESP-WROOM-02U, ESP-WROOM-S2 | - -Les références plus anciennes ou intermédiaires (ESP-02 à ESP-11, ESP-13, ESP-14, ESP-01M) existent mais n'ont jamais réellement percé ou ont été remplacées par les ESP-12x. - -Liste complète sur Wikipédia : - -## ESP32 : Wi-Fi et Bluetooth - -![ESP32](esp32.png) - -L'**ESP32** (sortie en **2016**) marque un saut générationnel. Au-delà du Wi-Fi déjà présent sur l'ESP8266, il ajoute le **Bluetooth Classic 4.2** et le **Bluetooth Low Energy (BLE)**, monte à **240 MHz**, propose une version **double cœur**, et multiplie les périphériques. - -Caractéristiques marquantes : - -- cœur **Tensilica Xtensa LX6**, mono ou double cœur selon les modèles ; -- Wi-Fi 2,4 GHz + Bluetooth 4.2 + BLE ; -- jusqu'à **520 Kio** de SRAM ; -- nombreuses interfaces : 3 UART, 4 SPI, 2 I²C, 2 I²S, CAN, Ethernet MAC, capteur Hall, capteur tactile capacitif, ADC 12 bits sur jusqu'à 18 canaux ; -- coprocesseur ULP (Ultra Low Power) capable de tourner pendant que les cœurs principaux dorment. - -### Modules ESP32 (Tensilica LX6) - -Tous fabriqués par Espressif, certifiés FCC/CE : - -| Module | Particularité | -|---|---| -| **ESP32-WROOM-32** | Le plus répandu, antenne PCB | -| **ESP32-WROOM-32D** | Version révisée avec puce double cœur | -| **ESP32-WROOM-32U** | Connecteur U.FL pour antenne externe | -| **ESP32-SOLO-1** | Variante mono-cœur | -| **ESP32-WROVER** / **WROVER-B** / **WROVER-I** / **WROVER-IB** | Ajout d'une **PSRAM** (4 ou 8 Mio) pour les applications gourmandes en mémoire (caméra, audio) | -| **ESP32-PICO-V3-ZERO** | SiP très compact intégrant flash + cristal | - -Plusieurs déclinaisons d'audiosystème et d'OEM existent autour de cette base (ESP32-A1S de AI-Thinker pour l'audio, NINA-W13x d'u-blox certifiés industriellement, etc.), mais ne sont que des reconditionnements du même SoC. - -Liste détaillée : - -## ESP32-S : USB natif et IA embarquée - -La série **ESP32-S** introduit le cœur **Xtensa LX7**, plus performant, et abandonne le Bluetooth sur la S2 (réintroduit sur la S3 en version BLE 5.0). - -| SoC | Cœurs | Wi-Fi | BLE | Atout principal | -|---|---|---|---|---| -| **ESP32-S2** | 1 × LX7 | oui | non | **USB OTG natif**, faible consommation | -| **ESP32-S3** | 2 × LX7 | oui | BLE 5.0 | **Accélération vectorielle** pour TinyML / vision | - -Modules courants : - -- série S2 : `ESP32-S2-MINI-1[U]`, `ESP32-S2-SOLO[-U]`, `ESP32-S2-WROOM[-I]`, `ESP32-S2-WROVER[-I]` ; -- série S3 : `ESP32-S3-MINI-1[U]`, `ESP32-S3-WROOM-1[U]`, `ESP32-S3-WROOM-2`. - -Le suffixe `-U` désigne un connecteur d'antenne externe (U.FL), le suffixe `-I` une variante industrielle (plage de température étendue). - -## ESP32-C : passage au RISC-V - -La série **ESP32-C** marque le passage d'Espressif à l'architecture **RISC-V** open source. Plus simple, moins gourmande, et facturée moins cher que les cœurs Xtensa propriétaires. - -| SoC | Cœur | Wi-Fi | BLE | Autres protocoles | -|---|---|---|---|---| -| **ESP32-C3** | RISC-V 32 bits, 160 MHz | 802.11 b/g/n | BLE 5.0 | — | -| **ESP32-C6** | 2 × RISC-V (HP 160 MHz + LP) | **Wi-Fi 6** (802.11ax) | BLE 5.0 | **Thread, Zigbee** (802.15.4) | - -L'ESP32-C6 est particulièrement notable : c'est le premier SoC d'Espressif compatible **Matter** sur Thread et Wi-Fi. - -Modules : `ESP32-C3-MINI-1[U]`, `ESP32-C3-WROOM-02[U]`, et plus récemment les `ESP32-C6-WROOM-1[U]`. - -## ESP32-H : 802.15.4 sans Wi-Fi - -| SoC | Cœur | Wi-Fi | BLE | Autres | -|---|---|---|---|---| -| **ESP32-H2** | RISC-V 32 bits, 96 MHz | **non** | BLE 5.0 | **Thread, Zigbee** (802.15.4) | - -L'**ESP32-H2** est conçu pour les nœuds Matter / Thread / Zigbee qui n'ont pas besoin de Wi-Fi (capteurs basse consommation derrière un routeur). Il se couple typiquement à un ESP32-C6 ou à une box compatible Thread. - -## ESP32-P : processeur d'application - -| SoC | Cœurs | Connectivité | Rôle | -|---|---|---|---| -| **ESP32-P4** | 2 × RISC-V HP (400 MHz) + 1 LP | **aucune radio interne** | Application processor pour interfaces homme-machine évoluées (LCD haute résolution, caméra MIPI-CSI, audio…) | - -L'ESP32-P4 sort du modèle « SoC IoT autonome » : il est destiné à être couplé à un autre ESP (typiquement un C6) qui apporte la radio. C'est la première incursion d'Espressif sur le segment des microcontrôleurs applicatifs hautes performances. - -## Comment choisir - -Quelques règles simples pour s'y retrouver lors du choix d'un SoC : - -- **Projet simple, Wi-Fi seul, budget serré** : ESP8266 (sur un module ESP-12F ou une WeMos D1 mini) suffit largement. -- **Projet général, Wi-Fi + Bluetooth, beaucoup de GPIO** : ESP32-WROOM-32 reste la valeur sûre. -- **Besoin d'USB natif, de basse consommation, ou de TinyML** : ESP32-S2 ou S3. -- **Coût minimal et BLE moderne** : ESP32-C3. -- **Thread, Zigbee, Matter, Wi-Fi 6** : ESP32-C6 (avec Wi-Fi) ou ESP32-H2 (sans Wi-Fi). -- **IHM riche, écran haute définition, caméra** : ESP32-P4 couplé à un C6. - -## Pour aller plus loin - -- [L'ESP-01 : présentation et premiers pas](https://varlog.a5l.fr/post/esp-01-presentation-premiers-pas) -- [Premier programme ESP-01](https://varlog.a5l.fr/post/esp-01-premier-programme) -- [ESP8266 : commandes AT](https://varlog.a5l.fr/post/esp8266-commandes-at) -- Page produits Espressif : -- Wikipédia ESP8266 : -- Wikipédia ESP32 : -``` diff --git a/79bd0f3b-a66d-4402-878c-6a6ba3af149b/meta.json b/79bd0f3b-a66d-4402-878c-6a6ba3af149b/meta.json deleted file mode 100644 index b771646..0000000 --- a/79bd0f3b-a66d-4402-878c-6a6ba3af149b/meta.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "uuid": "79bd0f3b-a66d-4402-878c-6a6ba3af149b", - "slug": "panorama-des-familles-de-soc-espressif", - "title": "Panorama des familles de SoC Espressif", - "author": "cedric@abonnel.fr", - "published": true, - "published_at": "2023-02-03 19:45", - "created_at": "2023-02-03 19:45:47", - "updated_at": "2026-05-13 18:35:04", - "revisions": [ - { - "n": 1, - "date": "2026-05-13 18:35:04", - "comment": "Titre modifié, contenu modifié", - "title": "Familles et évolutions" - } - ], - "cover": "", - "files_meta": { - "20220127-233808.png": { - "author": "", - "source_url": "" - }, - "dummy.png": { - "author": "", - "source_url": "" - }, - "esp32.png": { - "author": "", - "source_url": "" - } - }, - "external_links": [], - "seo_title": "", - "seo_description": "", - "og_image": "", - "category": "Électronique" -} diff --git a/79bd0f3b-a66d-4402-878c-6a6ba3af149b/revisions/0001.md b/79bd0f3b-a66d-4402-878c-6a6ba3af149b/revisions/0001.md deleted file mode 100644 index 11d1266..0000000 --- a/79bd0f3b-a66d-4402-878c-6a6ba3af149b/revisions/0001.md +++ /dev/null @@ -1,142 +0,0 @@ -## Introduction - -Espressif Systems produit plusieurs familles de **System on Chip (SoC)** dédiés à l'IoT, toutes orientées vers la connectivité sans fil et le faible coût. Les deux grandes lignées sont l'**ESP8266** (Wi-Fi seul) et l'**ESP32** (Wi-Fi + Bluetooth), cette dernière s'étant elle-même ramifiée en plusieurs sous-familles (S, C, H, P). - -Le tableau de synthèse ci-dessous donne un aperçu rapide ; chaque famille est ensuite détaillée. - -| Famille | Année | Cœur | Wi-Fi | Bluetooth | Particularité | -|---|---|---|---|---|---| -| **ESP8266** | 2014 | Tensilica L106 32 bits, 1 cœur, 80 MHz | 802.11 b/g/n | non | Premier SoC Wi-Fi grand public bon marché | -| **ESP32** | 2016 | Tensilica LX6 32 bits, 1 ou 2 cœurs, 240 MHz | 802.11 b/g/n | BT 4.2 + BLE | Polyvalent, cœur double | -| **ESP32-S2** | 2020 | Tensilica LX7, 1 cœur | 802.11 b/g/n | non | USB OTG natif, faible consommation | -| **ESP32-S3** | 2021 | Tensilica LX7, 2 cœurs, 240 MHz | 802.11 b/g/n | BT 5.0 LE | Accélérateur d'instructions vectorielles pour l'IA | -| **ESP32-C3** | 2021 | RISC-V 32 bits, 1 cœur, 160 MHz | 802.11 b/g/n | BT 5.0 LE | Premier ESP en RISC-V | -| **ESP32-C6** | 2023 | RISC-V, 2 cœurs (HP + LP) | Wi-Fi 6 (802.11ax), Thread, Zigbee | BT 5.0 LE | Multi-protocoles | -| **ESP32-H2** | 2023 | RISC-V, 1 cœur | non | BT 5.0 LE, Thread, Zigbee | Sans Wi-Fi, dédié 802.15.4 | -| **ESP32-P4** | 2024 | RISC-V, 2 cœurs HP + 1 LP, 400 MHz | non (radio externe) | non | Application processor haute performance | - -## ESP8266 : le pionnier - -![ESP8266](20220127-233808.png) - -L'**ESP8266** (sortie en **2014**) est le SoC qui a démocratisé l'IoT Wi-Fi grand public. Pour quelques euros, il offre un cœur **Tensilica Xtensa L106 32 bits** à 80 MHz, une **radio Wi-Fi 2,4 GHz** complète (802.11 b/g/n) et une pile TCP/IP, le tout dans un boîtier QFN32 de 5 × 5 mm. - -Caractéristiques marquantes : - -- un seul cœur, 80 ou 160 MHz ; -- pas de Bluetooth, pas de BLE ; -- pas de flash interne : code chargé depuis une flash SPI externe (généralement 512 Kio à 4 Mio) ; -- 80 Kio de RAM utilisateur ; -- 17 GPIO théoriques (mais peu exposées sur les petits modules comme l'ESP-01). - -> **Correction d'une idée reçue fréquente** : l'ESP8266 **ne dispose pas de Bluetooth**, et l'**ESP32 n'est pas un membre de la famille ESP8266** mais un SoC distinct, sorti plus tard. Le Bluetooth n'est apparu chez Espressif qu'avec l'ESP32 en 2016. - -### Modules à base d'ESP8266 - -Le SoC nu est rarement utilisé seul : il est généralement vendu intégré sur un petit module (PCB + flash + antenne + brochage standardisé) produit par **AI-Thinker** ou directement par **Espressif**. - -| Origine | Modules les plus utilisés | -|---|---| -| **AI-Thinker** | ESP-01, ESP-01S, ESP-07, ESP-12E, ESP-12F, ESP-12S | -| **Espressif** | ESP-WROOM-02, ESP-WROOM-02D, ESP-WROOM-02U, ESP-WROOM-S2 | - -Les références plus anciennes ou intermédiaires (ESP-02 à ESP-11, ESP-13, ESP-14, ESP-01M) existent mais n'ont jamais réellement percé ou ont été remplacées par les ESP-12x. - -Liste complète sur Wikipédia : - -## ESP32 : Wi-Fi et Bluetooth - -![ESP32](esp32.png) - -L'**ESP32** (sortie en **2016**) marque un saut générationnel. Au-delà du Wi-Fi déjà présent sur l'ESP8266, il ajoute le **Bluetooth Classic 4.2** et le **Bluetooth Low Energy (BLE)**, monte à **240 MHz**, propose une version **double cœur**, et multiplie les périphériques. - -Caractéristiques marquantes : - -- cœur **Tensilica Xtensa LX6**, mono ou double cœur selon les modèles ; -- Wi-Fi 2,4 GHz + Bluetooth 4.2 + BLE ; -- jusqu'à **520 Kio** de SRAM ; -- nombreuses interfaces : 3 UART, 4 SPI, 2 I²C, 2 I²S, CAN, Ethernet MAC, capteur Hall, capteur tactile capacitif, ADC 12 bits sur jusqu'à 18 canaux ; -- coprocesseur ULP (Ultra Low Power) capable de tourner pendant que les cœurs principaux dorment. - -### Modules ESP32 (Tensilica LX6) - -Tous fabriqués par Espressif, certifiés FCC/CE : - -| Module | Particularité | -|---|---| -| **ESP32-WROOM-32** | Le plus répandu, antenne PCB | -| **ESP32-WROOM-32D** | Version révisée avec puce double cœur | -| **ESP32-WROOM-32U** | Connecteur U.FL pour antenne externe | -| **ESP32-SOLO-1** | Variante mono-cœur | -| **ESP32-WROVER** / **WROVER-B** / **WROVER-I** / **WROVER-IB** | Ajout d'une **PSRAM** (4 ou 8 Mio) pour les applications gourmandes en mémoire (caméra, audio) | -| **ESP32-PICO-V3-ZERO** | SiP très compact intégrant flash + cristal | - -Plusieurs déclinaisons d'audiosystème et d'OEM existent autour de cette base (ESP32-A1S de AI-Thinker pour l'audio, NINA-W13x d'u-blox certifiés industriellement, etc.), mais ne sont que des reconditionnements du même SoC. - -Liste détaillée : - -## ESP32-S : USB natif et IA embarquée - -La série **ESP32-S** introduit le cœur **Xtensa LX7**, plus performant, et abandonne le Bluetooth sur la S2 (réintroduit sur la S3 en version BLE 5.0). - -| SoC | Cœurs | Wi-Fi | BLE | Atout principal | -|---|---|---|---|---| -| **ESP32-S2** | 1 × LX7 | oui | non | **USB OTG natif**, faible consommation | -| **ESP32-S3** | 2 × LX7 | oui | BLE 5.0 | **Accélération vectorielle** pour TinyML / vision | - -Modules courants : - -- série S2 : `ESP32-S2-MINI-1[U]`, `ESP32-S2-SOLO[-U]`, `ESP32-S2-WROOM[-I]`, `ESP32-S2-WROVER[-I]` ; -- série S3 : `ESP32-S3-MINI-1[U]`, `ESP32-S3-WROOM-1[U]`, `ESP32-S3-WROOM-2`. - -Le suffixe `-U` désigne un connecteur d'antenne externe (U.FL), le suffixe `-I` une variante industrielle (plage de température étendue). - -## ESP32-C : passage au RISC-V - -La série **ESP32-C** marque le passage d'Espressif à l'architecture **RISC-V** open source. Plus simple, moins gourmande, et facturée moins cher que les cœurs Xtensa propriétaires. - -| SoC | Cœur | Wi-Fi | BLE | Autres protocoles | -|---|---|---|---|---| -| **ESP32-C3** | RISC-V 32 bits, 160 MHz | 802.11 b/g/n | BLE 5.0 | — | -| **ESP32-C6** | 2 × RISC-V (HP 160 MHz + LP) | **Wi-Fi 6** (802.11ax) | BLE 5.0 | **Thread, Zigbee** (802.15.4) | - -L'ESP32-C6 est particulièrement notable : c'est le premier SoC d'Espressif compatible **Matter** sur Thread et Wi-Fi. - -Modules : `ESP32-C3-MINI-1[U]`, `ESP32-C3-WROOM-02[U]`, et plus récemment les `ESP32-C6-WROOM-1[U]`. - -## ESP32-H : 802.15.4 sans Wi-Fi - -| SoC | Cœur | Wi-Fi | BLE | Autres | -|---|---|---|---|---| -| **ESP32-H2** | RISC-V 32 bits, 96 MHz | **non** | BLE 5.0 | **Thread, Zigbee** (802.15.4) | - -L'**ESP32-H2** est conçu pour les nœuds Matter / Thread / Zigbee qui n'ont pas besoin de Wi-Fi (capteurs basse consommation derrière un routeur). Il se couple typiquement à un ESP32-C6 ou à une box compatible Thread. - -## ESP32-P : processeur d'application - -| SoC | Cœurs | Connectivité | Rôle | -|---|---|---|---| -| **ESP32-P4** | 2 × RISC-V HP (400 MHz) + 1 LP | **aucune radio interne** | Application processor pour interfaces homme-machine évoluées (LCD haute résolution, caméra MIPI-CSI, audio…) | - -L'ESP32-P4 sort du modèle « SoC IoT autonome » : il est destiné à être couplé à un autre ESP (typiquement un C6) qui apporte la radio. C'est la première incursion d'Espressif sur le segment des microcontrôleurs applicatifs hautes performances. - -## Comment choisir - -Quelques règles simples pour s'y retrouver lors du choix d'un SoC : - -- **Projet simple, Wi-Fi seul, budget serré** : ESP8266 (sur un module ESP-12F ou une WeMos D1 mini) suffit largement. -- **Projet général, Wi-Fi + Bluetooth, beaucoup de GPIO** : ESP32-WROOM-32 reste la valeur sûre. -- **Besoin d'USB natif, de basse consommation, ou de TinyML** : ESP32-S2 ou S3. -- **Coût minimal et BLE moderne** : ESP32-C3. -- **Thread, Zigbee, Matter, Wi-Fi 6** : ESP32-C6 (avec Wi-Fi) ou ESP32-H2 (sans Wi-Fi). -- **IHM riche, écran haute définition, caméra** : ESP32-P4 couplé à un C6. - -## Pour aller plus loin - -- [L'ESP-01 : présentation et premiers pas](https://varlog.a5l.fr/post/esp-01-presentation-premiers-pas) -- [Premier programme ESP-01](https://varlog.a5l.fr/post/esp-01-premier-programme) -- [ESP8266 : commandes AT](https://varlog.a5l.fr/post/esp8266-commandes-at) -- Page produits Espressif : -- Wikipédia ESP8266 : -- Wikipédia ESP32 : -``` diff --git a/7af79dd4-67d9-4516-a67b-06c2e569eaea/files/cover.jpg b/7af79dd4-67d9-4516-a67b-06c2e569eaea/files/cover.jpg deleted file mode 100644 index 8c117a6..0000000 Binary files a/7af79dd4-67d9-4516-a67b-06c2e569eaea/files/cover.jpg and /dev/null differ diff --git a/7af79dd4-67d9-4516-a67b-06c2e569eaea/index.md b/7af79dd4-67d9-4516-a67b-06c2e569eaea/index.md deleted file mode 100644 index 65dbdcb..0000000 --- a/7af79dd4-67d9-4516-a67b-06c2e569eaea/index.md +++ /dev/null @@ -1,64 +0,0 @@ -# Kobo Libra Colour : la liseuse qui voulait devenir un carnet - -*Prix indicatif : environ 229 €. Écran 7 pouces E-Ink Kaleido 3 couleur, stylet en option (Kobo Stylus 2).* - -## Une catégorie qui s'était endormie - -Cela fait presque dix ans que les liseuses se ressemblent. Un écran noir et blanc, un éclairage frontal réglable, une autonomie de plusieurs semaines, et basta. Le progrès s'est concentré sur des détails : un peu plus de contraste, un peu moins de poids, un éclairage légèrement plus chaud le soir. Les constructeurs avaient apparemment décidé qu'un livre numérique devait imiter le plus fidèlement possible un livre de poche, et qu'il n'y avait pas grand-chose d'autre à inventer. - -La **Kobo Libra Colour** prend l'exact contre-pied de cette prudence. Elle est la première Kobo de 7 pouces à embarquer le nouvel écran **E-Ink Kaleido 3**, qui affiche enfin de la couleur sans renoncer au confort de la lecture sur encre électronique. Et surtout, elle est compatible avec un stylet, le Kobo Stylus 2, vendu séparément. La promesse tient en trois verbes : lire, annoter, prendre des notes. Sans devenir une tablette, sans bouffer la batterie en quelques heures, sans bombarder l'utilisateur de notifications. - -En main, l'objet inspire confiance. 199 grammes seulement, un poids très bien réparti, et cette poignée latérale typique de la gamme Libra qui change vraiment la prise — on tient la liseuse à une main pendant des heures sans crispation, le pouce posé sur les deux boutons physiques de tournage de page. Détail qui en dit long sur la philosophie du produit : ces boutons sont là pour qu'on n'ait pas besoin de toucher l'écran. La liseuse veut rester une liseuse. - -## Un écran couleur qui sert enfin à quelque chose - -La technologie Kaleido 3 mérite quelques mots d'explication, parce qu'elle est souvent mal comprise. Ce n'est pas un écran LCD comme sur une tablette : il n'y a pas de rétroéclairage direct, donc pas d'émission lumineuse agressive dans les yeux, et la lisibilité reste excellente en plein soleil — là où n'importe quel iPad devient inutilisable. Le principe est celui de l'encre électronique classique, surmonté d'une fine couche de filtres colorés qui restituent environ 4 000 couleurs. - -La contrepartie, il faut la connaître avant d'acheter : la résolution en couleur est nettement plus basse qu'en noir et blanc, et on perçoit légèrement la trame des filtres si on cherche le défaut. Les rouges sont un peu ternes, les bleus corrects, les verts inégaux. Personne ne lira de bande dessinée Marvel sur cet écran en se disant "c'est aussi beau qu'imprimé". - -Mais c'est passer à côté de l'essentiel. Pour la première fois, la couleur sur une liseuse n'est pas un gadget : c'est un outil. Les cartes deviennent vraiment lisibles, les schémas techniques retrouvent leur logique de codage couleur, les manuels gagnent en clarté. Et surtout, le surlignage — jaune, rose, vert, bleu — fonctionne comme sur papier. On peut enfin différencier ce qu'on veut retenir, ce qu'on conteste, ce qu'on veut creuser. C'est bête à dire, mais après des années à surligner en "gris foncé" sur fond gris clair, l'effet est libérateur. - -## Le stylet, où la liseuse change de nature - -C'est avec le Kobo Stylus 2 que la Libra Colour révèle ce qu'elle a vraiment dans le ventre. Vendu en option (et c'est dommage, à ce prix-là), il transforme l'usage. On peut annoter directement dans les PDF et les ePub, surligner à la main plutôt qu'avec une sélection à deux doigts, écrire dans des carnets intégrés au système, et synchroniser tout ça via Dropbox ou par câble USB. - -Le point qui fait la différence, et qu'on cherche en vain sur la plupart des concurrents : **les PDF annotés sont exportables tels quels**. Quand on récupère son fichier, les coups de surligneur, les notes manuscrites dans la marge, les flèches griffonnées — tout est intégré à la page comme si on l'avait fait au stylo. On en sort un PDF qu'on peut imprimer, archiver, partager. Pour un étudiant qui annote ses cours, un enseignant qui corrige des copies au format numérique, un professionnel qui relit des dossiers : c'est exactement ce qu'on attendait depuis des années. - -Faut-il s'attendre à la sensation d'une tablette graphique haut de gamme ? Non. La latence est faible mais perceptible, le frottement du stylet sur le verre n'a pas la résistance d'un Remarkable 2 (qui reste la référence pour le ressenti "crayon sur papier"). Mais c'est crédible, fluide, suffisant pour écrire pendant une heure sans frustration. - -## Ce qui en fait toujours une excellente liseuse, par ailleurs - -On l'oublierait presque tellement le stylet capte l'attention, mais la Libra Colour reste avant tout une liseuse Kobo, c'est-à-dire ce que la marque fait de mieux. Lecture native des fichiers ePub sans passer par une conversion absurde, intégration de Pocket pour envoyer en un clic les articles longs du web vers la liseuse, librairie intégrée qui inclut désormais les BD en couleur achetables directement. - -Et — point essentiel pour qui se méfie des écosystèmes fermés — **aucun verrou Amazon**. On charge ses propres fichiers sans gymnastique, on installe KOReader si on veut un lecteur alternatif, on lit ses bibliothèques publiques via Overdrive. La liseuse appartient à son propriétaire. - -Le contraste en noir et blanc reste très correct malgré la couche de filtres couleur — légèrement inférieur à une liseuse pure N&B comme la Clara BW, mais largement suffisant pour la lecture confortable. L'éclairage frontal est homogène, sans points chauds, et le ConfortLight PRO permet de glisser progressivement vers un ton ambré le soir, ce qui change réellement quelque chose pour la lecture nocturne. - -## Autonomie : il faut être honnête - -C'est sans doute le point où il faut tempérer l'enthousiasme. Avec un usage mixte lecture et annotations, en gardant le Wi-Fi actif, on tient entre une et trois semaines selon l'intensité. C'est moins qu'une Clara classique qui peut atteindre six semaines, et bien plus qu'un iPad ou un Remarkable. La couleur et le stylet ont un coût énergétique, et la Libra ne fait pas de miracle. Cela reste totalement cohérent avec l'usage d'une liseuse — on ne la branche pas tous les soirs — mais ne tablez pas sur le mois entier en voyage si vous comptez prendre des notes copieuses. - -## Le flux d'export, en pratique - -Quand on annote un PDF, le récupérer est simple : soit on connecte la Kobo à un ordinateur en USB et on copie le fichier exporté, soit on laisse la synchronisation Dropbox faire le travail en arrière-plan. Il n'y a pas d'impression directe depuis la liseuse — il faut passer par un ordinateur — mais aucune annotation n'est perdue dans la conversion. C'est un workflow qui demande deux clics, pas un projet en soi. - -## Comment elle se situe dans la gamme - -Quelques repères pour situer la Libra Colour face aux alternatives qu'on hésite souvent à comparer. - -| Modèle | Écran | Stylet | Export PDF annoté | À qui ça s'adresse | -|---|---|---|---|---| -| **Kobo Libra Colour** | 7" couleur Kaleido 3 | En option | Oui | Lecture quotidienne + annotations occasionnelles + couleur utile | -| Kobo Sage | 8" N&B | En option | Oui | Prise de notes plus sérieuse, format intermédiaire | -| Kobo Elipsa 2E | 10,3" N&B | Inclus | Oui | Remplacer un classeur A4, usage intensif des PDF techniques | -| Kindle Scribe | 10,2" N&B | Inclus | Export limité | Lecteurs déjà installés dans l'écosystème Kindle | - -Pour qui veut une vraie planche à dessin numérique, l'Elipsa 2E reste plus indiquée — son grand format change la donne pour les schémas et les documents A4. Pour qui veut juste lire en N&B pour un budget contenu, la Clara BW suffit largement. Mais sur le créneau "je lis beaucoup, j'aimerais annoter parfois, et la couleur me servirait pour mes manuels ou mes BD", la Libra Colour est aujourd'hui la proposition la plus équilibrée du marché. - -## Mon avis - -La Kobo Libra Colour n'est pas la meilleure liseuse possible dans chaque catégorie prise séparément. L'Elipsa 2E reste plus à l'aise sur les PDF complexes, la Clara BW pèse moins lourd dans la poche et coûte moins cher, le Remarkable 2 offre une meilleure sensation d'écriture. Mais c'est précisément ce qui fait sa force : c'est la liseuse qui en fait *assez* dans plusieurs domaines pour ne pas demander d'en posséder deux. - -Pendant des années, on a dû choisir entre lire et annoter, entre voir des cartes en couleur et garder une bonne autonomie, entre payer 350 € pour une grande tablette E-Ink ou se contenter d'un noir et blanc rigide. La Libra Colour est le premier produit, à ma connaissance, à proposer un compromis qui ne ressemble pas à un compromis. À 229 €, ou autour de 290 € avec le stylet, c'est une vraie proposition de valeur pour qui lit beaucoup et travaille un peu sur ce qu'il lit. - -**La meilleure liseuse "papier numérique" polyvalente du moment, et de loin.** \ No newline at end of file diff --git a/7af79dd4-67d9-4516-a67b-06c2e569eaea/meta.json b/7af79dd4-67d9-4516-a67b-06c2e569eaea/meta.json deleted file mode 100644 index d24f1a3..0000000 --- a/7af79dd4-67d9-4516-a67b-06c2e569eaea/meta.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "uuid": "7af79dd4-67d9-4516-a67b-06c2e569eaea", - "slug": "test-kobo-libra-colour", - "title": "Kobo Libra Colour : la liseuse qui voulait devenir un carnet", - "author": "cedric@abonnel.fr", - "published": true, - "published_at": "2025-11-09 12:03", - "created_at": "2025-11-09 12:03:56", - "updated_at": "2026-05-12 01:41:02", - "revisions": [ - { - "n": 1, - "date": "2026-05-12 01:41:02", - "comment": "", - "title": "Kobo Libra Colour : la liseuse qui voulait devenir un carnet" - } - ], - "cover": "cover.jpg", - "files_meta": { - "cover.jpg": { - "author": "", - "source_url": "https://www.noypigeeks.com/wp-content/uploads/2024/04/Kobo-Libra-Color.jpg" - } - }, - "external_links": [], - "seo_title": "", - "seo_description": "", - "og_image": "", - "category": "loisirs" -} diff --git a/7af79dd4-67d9-4516-a67b-06c2e569eaea/revisions/0001.md b/7af79dd4-67d9-4516-a67b-06c2e569eaea/revisions/0001.md deleted file mode 100644 index 87878b0..0000000 --- a/7af79dd4-67d9-4516-a67b-06c2e569eaea/revisions/0001.md +++ /dev/null @@ -1,62 +0,0 @@ -*Prix indicatif : environ 229 €. Écran 7 pouces E-Ink Kaleido 3 couleur, stylet en option (Kobo Stylus 2).* - -## Une catégorie qui s'était endormie - -Cela fait presque dix ans que les liseuses se ressemblent. Un écran noir et blanc, un éclairage frontal réglable, une autonomie de plusieurs semaines, et basta. Le progrès s'est concentré sur des détails : un peu plus de contraste, un peu moins de poids, un éclairage légèrement plus chaud le soir. Les constructeurs avaient apparemment décidé qu'un livre numérique devait imiter le plus fidèlement possible un livre de poche, et qu'il n'y avait pas grand-chose d'autre à inventer. - -La **Kobo Libra Colour** prend l'exact contre-pied de cette prudence. Elle est la première Kobo de 7 pouces à embarquer le nouvel écran **E-Ink Kaleido 3**, qui affiche enfin de la couleur sans renoncer au confort de la lecture sur encre électronique. Et surtout, elle est compatible avec un stylet, le Kobo Stylus 2, vendu séparément. La promesse tient en trois verbes : lire, annoter, prendre des notes. Sans devenir une tablette, sans bouffer la batterie en quelques heures, sans bombarder l'utilisateur de notifications. - -En main, l'objet inspire confiance. 199 grammes seulement, un poids très bien réparti, et cette poignée latérale typique de la gamme Libra qui change vraiment la prise — on tient la liseuse à une main pendant des heures sans crispation, le pouce posé sur les deux boutons physiques de tournage de page. Détail qui en dit long sur la philosophie du produit : ces boutons sont là pour qu'on n'ait pas besoin de toucher l'écran. La liseuse veut rester une liseuse. - -## Un écran couleur qui sert enfin à quelque chose - -La technologie Kaleido 3 mérite quelques mots d'explication, parce qu'elle est souvent mal comprise. Ce n'est pas un écran LCD comme sur une tablette : il n'y a pas de rétroéclairage direct, donc pas d'émission lumineuse agressive dans les yeux, et la lisibilité reste excellente en plein soleil — là où n'importe quel iPad devient inutilisable. Le principe est celui de l'encre électronique classique, surmonté d'une fine couche de filtres colorés qui restituent environ 4 000 couleurs. - -La contrepartie, il faut la connaître avant d'acheter : la résolution en couleur est nettement plus basse qu'en noir et blanc, et on perçoit légèrement la trame des filtres si on cherche le défaut. Les rouges sont un peu ternes, les bleus corrects, les verts inégaux. Personne ne lira de bande dessinée Marvel sur cet écran en se disant "c'est aussi beau qu'imprimé". - -Mais c'est passer à côté de l'essentiel. Pour la première fois, la couleur sur une liseuse n'est pas un gadget : c'est un outil. Les cartes deviennent vraiment lisibles, les schémas techniques retrouvent leur logique de codage couleur, les manuels gagnent en clarté. Et surtout, le surlignage — jaune, rose, vert, bleu — fonctionne comme sur papier. On peut enfin différencier ce qu'on veut retenir, ce qu'on conteste, ce qu'on veut creuser. C'est bête à dire, mais après des années à surligner en "gris foncé" sur fond gris clair, l'effet est libérateur. - -## Le stylet, où la liseuse change de nature - -C'est avec le Kobo Stylus 2 que la Libra Colour révèle ce qu'elle a vraiment dans le ventre. Vendu en option (et c'est dommage, à ce prix-là), il transforme l'usage. On peut annoter directement dans les PDF et les ePub, surligner à la main plutôt qu'avec une sélection à deux doigts, écrire dans des carnets intégrés au système, et synchroniser tout ça via Dropbox ou par câble USB. - -Le point qui fait la différence, et qu'on cherche en vain sur la plupart des concurrents : **les PDF annotés sont exportables tels quels**. Quand on récupère son fichier, les coups de surligneur, les notes manuscrites dans la marge, les flèches griffonnées — tout est intégré à la page comme si on l'avait fait au stylo. On en sort un PDF qu'on peut imprimer, archiver, partager. Pour un étudiant qui annote ses cours, un enseignant qui corrige des copies au format numérique, un professionnel qui relit des dossiers : c'est exactement ce qu'on attendait depuis des années. - -Faut-il s'attendre à la sensation d'une tablette graphique haut de gamme ? Non. La latence est faible mais perceptible, le frottement du stylet sur le verre n'a pas la résistance d'un Remarkable 2 (qui reste la référence pour le ressenti "crayon sur papier"). Mais c'est crédible, fluide, suffisant pour écrire pendant une heure sans frustration. - -## Ce qui en fait toujours une excellente liseuse, par ailleurs - -On l'oublierait presque tellement le stylet capte l'attention, mais la Libra Colour reste avant tout une liseuse Kobo, c'est-à-dire ce que la marque fait de mieux. Lecture native des fichiers ePub sans passer par une conversion absurde, intégration de Pocket pour envoyer en un clic les articles longs du web vers la liseuse, librairie intégrée qui inclut désormais les BD en couleur achetables directement. - -Et — point essentiel pour qui se méfie des écosystèmes fermés — **aucun verrou Amazon**. On charge ses propres fichiers sans gymnastique, on installe KOReader si on veut un lecteur alternatif, on lit ses bibliothèques publiques via Overdrive. La liseuse appartient à son propriétaire. - -Le contraste en noir et blanc reste très correct malgré la couche de filtres couleur — légèrement inférieur à une liseuse pure N&B comme la Clara BW, mais largement suffisant pour la lecture confortable. L'éclairage frontal est homogène, sans points chauds, et le ConfortLight PRO permet de glisser progressivement vers un ton ambré le soir, ce qui change réellement quelque chose pour la lecture nocturne. - -## Autonomie : il faut être honnête - -C'est sans doute le point où il faut tempérer l'enthousiasme. Avec un usage mixte lecture et annotations, en gardant le Wi-Fi actif, on tient entre une et trois semaines selon l'intensité. C'est moins qu'une Clara classique qui peut atteindre six semaines, et bien plus qu'un iPad ou un Remarkable. La couleur et le stylet ont un coût énergétique, et la Libra ne fait pas de miracle. Cela reste totalement cohérent avec l'usage d'une liseuse — on ne la branche pas tous les soirs — mais ne tablez pas sur le mois entier en voyage si vous comptez prendre des notes copieuses. - -## Le flux d'export, en pratique - -Quand on annote un PDF, le récupérer est simple : soit on connecte la Kobo à un ordinateur en USB et on copie le fichier exporté, soit on laisse la synchronisation Dropbox faire le travail en arrière-plan. Il n'y a pas d'impression directe depuis la liseuse — il faut passer par un ordinateur — mais aucune annotation n'est perdue dans la conversion. C'est un workflow qui demande deux clics, pas un projet en soi. - -## Comment elle se situe dans la gamme - -Quelques repères pour situer la Libra Colour face aux alternatives qu'on hésite souvent à comparer. - -| Modèle | Écran | Stylet | Export PDF annoté | À qui ça s'adresse | -|---|---|---|---|---| -| **Kobo Libra Colour** | 7" couleur Kaleido 3 | En option | Oui | Lecture quotidienne + annotations occasionnelles + couleur utile | -| Kobo Sage | 8" N&B | En option | Oui | Prise de notes plus sérieuse, format intermédiaire | -| Kobo Elipsa 2E | 10,3" N&B | Inclus | Oui | Remplacer un classeur A4, usage intensif des PDF techniques | -| Kindle Scribe | 10,2" N&B | Inclus | Export limité | Lecteurs déjà installés dans l'écosystème Kindle | - -Pour qui veut une vraie planche à dessin numérique, l'Elipsa 2E reste plus indiquée — son grand format change la donne pour les schémas et les documents A4. Pour qui veut juste lire en N&B pour un budget contenu, la Clara BW suffit largement. Mais sur le créneau "je lis beaucoup, j'aimerais annoter parfois, et la couleur me servirait pour mes manuels ou mes BD", la Libra Colour est aujourd'hui la proposition la plus équilibrée du marché. - -## Mon avis - -La Kobo Libra Colour n'est pas la meilleure liseuse possible dans chaque catégorie prise séparément. L'Elipsa 2E reste plus à l'aise sur les PDF complexes, la Clara BW pèse moins lourd dans la poche et coûte moins cher, le Remarkable 2 offre une meilleure sensation d'écriture. Mais c'est précisément ce qui fait sa force : c'est la liseuse qui en fait *assez* dans plusieurs domaines pour ne pas demander d'en posséder deux. - -Pendant des années, on a dû choisir entre lire et annoter, entre voir des cartes en couleur et garder une bonne autonomie, entre payer 350 € pour une grande tablette E-Ink ou se contenter d'un noir et blanc rigide. La Libra Colour est le premier produit, à ma connaissance, à proposer un compromis qui ne ressemble pas à un compromis. À 229 €, ou autour de 290 € avec le stylet, c'est une vraie proposition de valeur pour qui lit beaucoup et travaille un peu sur ce qu'il lit. - -**La meilleure liseuse "papier numérique" polyvalente du moment, et de loin.** \ No newline at end of file diff --git a/7cf4eff3-2bab-4f2e-8982-247c89f7ca16/files/cover.svg b/7cf4eff3-2bab-4f2e-8982-247c89f7ca16/files/cover.svg deleted file mode 100644 index b9e6703..0000000 --- a/7cf4eff3-2bab-4f2e-8982-247c89f7ca16/files/cover.svg +++ /dev/null @@ -1,106 +0,0 @@ - -Couverture d'article Webmin — Article par Cédrix pour A5L -Couverture au format Open Graph 1200x630 reprenant le logo Webmin (toile d'araignée stylisée et araignée bleue) sur fond clair, avec le titre Webmin et la signature « Article par Cédrix pour A5L ». - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -ADMINISTRATION SYSTÈME - - -Webmin - - -Panneau d'administration web pour Linux - - - - - -Article par Cédrix -pour A5L - - - -a5l.fr - - \ No newline at end of file diff --git a/7cf4eff3-2bab-4f2e-8982-247c89f7ca16/index.md b/7cf4eff3-2bab-4f2e-8982-247c89f7ca16/index.md deleted file mode 100644 index e446ec3..0000000 --- a/7cf4eff3-2bab-4f2e-8982-247c89f7ca16/index.md +++ /dev/null @@ -1,97 +0,0 @@ -# Mettre en place un serveur Debian administrable avec Webmin - -Quand on monte un nouveau serveur, les premières heures sont toujours les mêmes : on durcit la machine, on crée un utilisateur correct, on coupe ce qui traîne, et on met en place de quoi l'administrer sans avoir à ouvrir un terminal pour chaque détail. Cet article décrit la procédure que j'utilise sur mes Debian fraîches : préparation via mes scripts, installation de Webmin, et activation de `firewalld` pour ne laisser passer que ce qui doit l'être. - -L'idée n'est pas de transformer le serveur en sapin de Noël, mais d'avoir une base saine sur laquelle bâtir, qu'il s'agisse d'expérimenter dans un LXC ou de préparer une VM destinée à recevoir une vraie charge. - -## Étape 1 — Préparer la machine - -Sur une Debian neuve, on commence par récupérer un petit script qui en télécharge d'autres. C'est juste un point d'entrée : il va chercher dans mon dépôt Forgejo un ensemble de scripts d'initialisation que je maintiens à jour. - -```bash -wget -O fetch_scripts.sh https://git.abonnel.fr/cedricAbonnel/notes-techniques/raw/branch/main/scripts/fetch_scripts.sh -chmod +x fetch_scripts.sh -./fetch_scripts.sh -``` - -À ce stade, un dossier `common/` apparaît à côté du script. C'est là que se trouve le vrai travail : - -```bash -cd common/ -./setup_debian.sh -``` - -`setup_debian.sh` fait ce qu'on a tous fini par écrire un jour : mise à jour des paquets, installation des outils de base, création d'un utilisateur non-root avec les bons droits sudo, durcissement minimal de SSH. Rien de magique, mais c'est répétable et c'est ce qui compte quand on provisionne souvent. - -**Important** : une fois le script terminé, il faut se déconnecter de la session `root` et se reconnecter avec l'utilisateur que le script vient de créer. Tout ce qui suit se fait avec cet utilisateur, en passant par `sudo` quand nécessaire. Continuer en root est une mauvaise habitude qui finit toujours par se payer. - -## Étape 2 — Installer Webmin - -Webmin est une interface web d'administration système. Pour quelqu'un qui débute, c'est une porte d'entrée appréciable : on voit les services qui tournent, les utilisateurs, les paquets installés, les logs, le tout depuis un navigateur. Pour quelqu'un d'expérimenté, c'est un complément pratique quand on veut donner un accès limité à un collègue moins à l'aise en ligne de commande. - -Webmin fournit son propre script pour configurer le dépôt apt : - -```bash -curl -o webmin-setup-repo.sh https://raw.githubusercontent.com/webmin/webmin/master/webmin-setup-repo.sh -sudo sh webmin-setup-repo.sh -``` - -Ce script ajoute le dépôt officiel Webmin à la liste des sources apt et importe la clé GPG associée. Une fois fait, l'installation devient une commande apt classique : - -```bash -sudo apt-get install webmin usermin --install-recommends -``` - -Petite précision sur les deux paquets : **Webmin** sert à l'administration système (root ou utilisateur sudo), **Usermin** est sa version pour les utilisateurs standards, qui leur permet de gérer leur propre compte, leurs mails, leurs fichiers, sans toucher au système. Sur une machine mono-utilisateur, on peut se passer d'Usermin, mais l'installer maintenant coûte trois mégaoctets et évite d'y revenir plus tard. - -## Étape 3 — Se connecter à l'interface - -Webmin écoute par défaut sur le port **10000** en HTTPS. Depuis un navigateur : - -``` -https://:10000 -``` - -`` est à remplacer par l'adresse de la machine. Le navigateur va râler à propos du certificat — c'est normal, Webmin génère un certificat auto-signé à l'installation. On peut accepter l'avertissement pour l'instant ; si la machine est destinée à un usage durable, on remplacera ça plus tard par un vrai certificat (Let's Encrypt via un reverse proxy, par exemple). - -Pour la connexion, **on utilise les identifiants Linux de l'utilisateur sudo**, pas un compte spécifique à Webmin. C'est l'utilisateur que `setup_debian.sh` a créé à l'étape 1. Webmin s'appuie sur PAM, donc tout compte système autorisé à se connecter peut potentiellement entrer — d'où l'importance de l'étape suivante. - -## Étape 4 — Activer le pare-feu - -Une machine accessible sur internet sans pare-feu, c'est une question de temps avant les premiers ennuis. Sur Debian, je préfère `firewalld` à `ufw` ou à la configuration brute de `nftables` : la notion de zones est pratique, la syntaxe se retient, et l'intégration avec Webmin est correcte. - -Installation et activation : - -```bash -sudo apt update -sudo apt install firewalld -sudo systemctl enable firewalld -sudo systemctl start firewalld -``` - -`enable` rend le service persistant au redémarrage, `start` le lance immédiatement. Vérification : - -```bash -sudo firewall-cmd --state -``` - -Le retour attendu est `running`. Si c'est autre chose, `systemctl status firewalld` permet de comprendre ce qui coince — c'est souvent un conflit avec un autre service de filtrage déjà en place. - -À ce stade, le pare-feu tourne mais avec une configuration par défaut qui, selon la zone active, peut bloquer Webmin. Il faut donc explicitement autoriser le port 10000 : - -```bash -sudo firewall-cmd --add-port=10000/tcp --permanent -sudo firewall-cmd --reload -``` - -Le `--permanent` écrit la règle dans la configuration ; sans ça, elle disparaît au prochain redémarrage. Le `reload` recharge la configuration pour que la règle prenne effet immédiatement. C'est l'erreur classique : on ajoute une règle, on continue à ne pas pouvoir se connecter, on perd dix minutes avant de se rappeler du `reload`. - -## Pour aller plus loin - -Une fois cette base en place, plusieurs directions s'offrent selon le rôle de la machine. - -Si elle est destinée à héberger un service web public, l'étape logique suivante consiste à placer Webmin **derrière un reverse proxy** plutôt que de l'exposer directement sur le port 10000. Le port 10000 est alors fermé vers l'extérieur, et l'interface devient accessible via un sous-domaine en HTTPS avec un vrai certificat. C'est plus propre, plus sûr, et ça évite l'avertissement de certificat à chaque connexion. - -Si la machine est un serveur d'applications, autant profiter du fait que `firewalld` est en place pour réfléchir aux ports en amont. Mieux vaut décider tout de suite quelles applications écoutent où, plutôt que d'empiler les `--add-port` au fil de l'eau et de finir avec une configuration que plus personne ne comprend. - -Et dans tous les cas, **garder une trace écrite** des choix faits : quels ports ouverts, quel utilisateur sudo, quelle convention de nommage. Un fichier `README.md` à la racine du home de l'admin, peu importe le support — l'important c'est que dans six mois, on puisse retrouver le fil sans avoir à tout rétro-ingénierer. \ No newline at end of file diff --git a/7cf4eff3-2bab-4f2e-8982-247c89f7ca16/meta.json b/7cf4eff3-2bab-4f2e-8982-247c89f7ca16/meta.json deleted file mode 100644 index b08431f..0000000 --- a/7cf4eff3-2bab-4f2e-8982-247c89f7ca16/meta.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "uuid": "7cf4eff3-2bab-4f2e-8982-247c89f7ca16", - "slug": "installer-webmin-l-outil-d-administration-en-mode-web", - "title": "Mettre en place un serveur Debian administrable avec Webmin", - "author": "cedric@abonnel.fr", - "published": true, - "published_at": "2025-11-13 11:57", - "created_at": "2025-11-13 11:57:05", - "updated_at": "2026-05-12 10:48:26", - "revisions": [], - "cover": "cover.svg", - "files_meta": { - "11f42517bdead1c0-18569.svg": { - "author": "Cédrix / Générée par IA", - "source_url": "" - }, - "cover.svg": { - "author": "Cédrix / Générée par IA", - "source_url": "" - } - }, - "external_links": [], - "seo_title": "Sécuriser une Debian fraîche : Webmin et firewalld pas à pas", - "seo_description": "Procédure complète pour sécuriser une Debian fraîche : préparation via scripts, installation de Webmin et configuration de firewalld. Guide pas à pas.", - "og_image": "", - "category": "linux" -} diff --git a/83cabd62-617e-418c-a890-76e205bf5551/files/cover.svg b/83cabd62-617e-418c-a890-76e205bf5551/files/cover.svg deleted file mode 100644 index 01632aa..0000000 --- a/83cabd62-617e-418c-a890-76e205bf5551/files/cover.svg +++ /dev/null @@ -1,52 +0,0 @@ - -Illustration : filtrage SPF des mails -Une enveloppe estampillée SPF Fail avec un tampon rouge de rejet, dans un style éditorial dessiné. - - - - - - - - - - - - - - - SMTP - +SPF - - - - - - - - - - - REJETÉ - SPF FAIL - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/83cabd62-617e-418c-a890-76e205bf5551/index.md b/83cabd62-617e-418c-a890-76e205bf5551/index.md deleted file mode 100644 index 928000b..0000000 --- a/83cabd62-617e-418c-a890-76e205bf5551/index.md +++ /dev/null @@ -1,69 +0,0 @@ -# Filtrer les mails selon le résultat SPF - -Quand on gère un serveur de messagerie, le SPF (Sender Policy Framework) est l'un des premiers remparts contre l'usurpation d'identité. Concrètement, il permet à un domaine de déclarer dans son DNS quelles adresses IP ont le droit d'envoyer des mails en son nom. À la réception, le serveur vérifie cette correspondance et écrit le résultat dans un en-tête : `Received-SPF`. - -Reste à savoir quoi faire de ce résultat. Tous les verdicts SPF ne se valent pas, et rejeter trop large revient vite à perdre des mails légitimes. - -## Les codes de retour SPF - -Voici les sept valeurs qu'on peut rencontrer dans `Received-SPF`, et ce qu'il faut en faire : - -| Code | Signification | Rejet conseillé | -|------|---------------|-----------------| -| `Pass` | L'IP est explicitement autorisée par le domaine | Non | -| `Fail` | L'IP n'est pas autorisée | Oui | -| `Softfail` | L'IP n'est probablement pas autorisée | Optionnel | -| `Neutral` | Le domaine ne se prononce pas | Non | -| `None` | Pas d'enregistrement SPF publié | Optionnel | -| `Permerror` | Erreur permanente (syntaxe SPF invalide, boucle…) | Oui | -| `Temperror` | Erreur temporaire (DNS injoignable, timeout) | Non recommandé | - -Les deux candidats évidents au rejet automatique sont **`Fail`** et **`Permerror`**. Le premier dit clairement « cette IP n'a rien à faire ici » ; le second signale un enregistrement cassé, ce qui est rare chez un expéditeur sérieux. - -`Softfail` est plus délicat : beaucoup de domaines mal configurés y atterrissent, donc rejeter sur ce critère seul génère des faux positifs. Mieux vaut l'utiliser comme un signal parmi d'autres (typiquement via un score SpamAssassin) plutôt que comme motif de rejet sec. - -`Temperror` ne doit jamais déclencher un rejet définitif : le problème vient d'un DNS qui ne répond pas, pas du mail lui-même. Un rejet temporaire (code 4xx) est en revanche acceptable, le serveur émetteur réessaiera. - -## Mise en pratique avec Postfix - -Postfix permet de filtrer sur les en-têtes via la directive `header_checks`. Dans `main.cf` : - -``` -header_checks = regexp:/etc/postfix/header_checks -``` - -Puis dans `/etc/postfix/header_checks` : - -``` -/^Received-SPF: Fail/ REJECT SPF Fail - IP non autorisee -/^Received-SPF: Permerror/ REJECT SPF Permerror - enregistrement SPF invalide -``` - -Après modification, recharger Postfix : - -``` -postfix reload -``` - -À noter : `header_checks` agit sur les en-têtes déjà présents. Si on veut que la vérification SPF soit faite par Postfix lui-même au moment de la réception, le bon outil est plutôt **policyd-spf** (paquet `postfix-policyd-spf-python` sous Debian), qui s'intègre via `smtpd_recipient_restrictions` et permet de rejeter avant même que le mail soit accepté. - -## L'approche par scoring avec SpamAssassin - -Plutôt que de couper net, on peut intégrer SPF à un score global. SpamAssassin expose plusieurs règles dédiées : - -- `SPF_FAIL` : ajoute un score significatif -- `SPF_SOFTFAIL` : score modéré -- `SPF_PERMERROR` : signale une config cassée -- `SPF_HELO_FAIL` : échec sur l'identité HELO - -L'intérêt du scoring, c'est de combiner SPF avec d'autres signaux (DKIM, DMARC, listes noires, contenu). Un mail qui échoue uniquement à SPF mais passe tout le reste mérite peut-être un passage en spam plutôt qu'un rejet pur. Inversement, un cumul `SPF_FAIL` + DKIM cassé + IP sur une RBL ne laisse pas beaucoup de doute. - -## Quelques précautions avant de mettre en production - -Avant d'activer un rejet sur `Fail`, deux réflexes utiles : - -D'abord, regarder les logs en mode passif pendant quelques jours. Loguer les verdicts SPF sans rejeter permet de mesurer le volume concerné et de repérer les expéditeurs légitimes mal configurés (il y en a toujours, y compris des prestataires connus). - -Ensuite, vérifier que les mails forwardés ne sont pas pénalisés. Un mail transféré perd souvent son alignement SPF puisque l'IP de réémission n'est pas celle déclarée par le domaine d'origine. C'est précisément le problème que DKIM et ARC sont censés résoudre, mais tous les serveurs ne les implémentent pas correctement. - -Le SPF est un bon premier filtre, pas une solution complète. Combiné à DKIM et DMARC, il forme la base de l'authentification mail moderne ; isolé, il reste utile mais imparfait. \ No newline at end of file diff --git a/83cabd62-617e-418c-a890-76e205bf5551/meta.json b/83cabd62-617e-418c-a890-76e205bf5551/meta.json deleted file mode 100644 index afffa2f..0000000 --- a/83cabd62-617e-418c-a890-76e205bf5551/meta.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "uuid": "83cabd62-617e-418c-a890-76e205bf5551", - "slug": "rejet-des-mails-avec-l-en-tete-received-spf", - "title": "Filtrer les mails selon le résultat SPF", - "author": "cedric@abonnel.fr", - "published": true, - "published_at": "2025-05-20 16:46", - "created_at": "2025-05-20 16:46:00", - "updated_at": "2026-05-12 11:17:15", - "revisions": [ - { - "n": 1, - "date": "2026-05-12 11:17:15", - "comment": "Contenu modifié, couverture modifiée, métadonnées fichiers modifiées", - "title": "Filtrer les mails selon le résultat SPF" - } - ], - "cover": "cover.svg", - "files_meta": { - "80df51587e63642b-13724.svg": { - "author": "Cédrix / Générée par IA", - "source_url": "" - } - }, - "external_links": [], - "seo_title": "", - "seo_description": "Filtrer les mails par SPF : guide DevOps débutant. Codes Fail, Permerror, Softfail expliqués, exemples Postfix et SpamAssassin inclus.", - "og_image": "https://varlog.a5l.fr/file?uuid=83cabd62-617e-418c-a890-76e205bf5551&name=80df51587e63642b-13724.svg", - "category": "informatique" -} diff --git a/83cabd62-617e-418c-a890-76e205bf5551/revisions/0001.md b/83cabd62-617e-418c-a890-76e205bf5551/revisions/0001.md deleted file mode 100644 index 59fb39e..0000000 --- a/83cabd62-617e-418c-a890-76e205bf5551/revisions/0001.md +++ /dev/null @@ -1,67 +0,0 @@ -Quand on gère un serveur de messagerie, le SPF (Sender Policy Framework) est l'un des premiers remparts contre l'usurpation d'identité. Concrètement, il permet à un domaine de déclarer dans son DNS quelles adresses IP ont le droit d'envoyer des mails en son nom. À la réception, le serveur vérifie cette correspondance et écrit le résultat dans un en-tête : `Received-SPF`. - -Reste à savoir quoi faire de ce résultat. Tous les verdicts SPF ne se valent pas, et rejeter trop large revient vite à perdre des mails légitimes. - -## Les codes de retour SPF - -Voici les sept valeurs qu'on peut rencontrer dans `Received-SPF`, et ce qu'il faut en faire : - -| Code | Signification | Rejet conseillé | -|------|---------------|-----------------| -| `Pass` | L'IP est explicitement autorisée par le domaine | Non | -| `Fail` | L'IP n'est pas autorisée | Oui | -| `Softfail` | L'IP n'est probablement pas autorisée | Optionnel | -| `Neutral` | Le domaine ne se prononce pas | Non | -| `None` | Pas d'enregistrement SPF publié | Optionnel | -| `Permerror` | Erreur permanente (syntaxe SPF invalide, boucle…) | Oui | -| `Temperror` | Erreur temporaire (DNS injoignable, timeout) | Non recommandé | - -Les deux candidats évidents au rejet automatique sont **`Fail`** et **`Permerror`**. Le premier dit clairement « cette IP n'a rien à faire ici » ; le second signale un enregistrement cassé, ce qui est rare chez un expéditeur sérieux. - -`Softfail` est plus délicat : beaucoup de domaines mal configurés y atterrissent, donc rejeter sur ce critère seul génère des faux positifs. Mieux vaut l'utiliser comme un signal parmi d'autres (typiquement via un score SpamAssassin) plutôt que comme motif de rejet sec. - -`Temperror` ne doit jamais déclencher un rejet définitif : le problème vient d'un DNS qui ne répond pas, pas du mail lui-même. Un rejet temporaire (code 4xx) est en revanche acceptable, le serveur émetteur réessaiera. - -## Mise en pratique avec Postfix - -Postfix permet de filtrer sur les en-têtes via la directive `header_checks`. Dans `main.cf` : - -``` -header_checks = regexp:/etc/postfix/header_checks -``` - -Puis dans `/etc/postfix/header_checks` : - -``` -/^Received-SPF: Fail/ REJECT SPF Fail - IP non autorisee -/^Received-SPF: Permerror/ REJECT SPF Permerror - enregistrement SPF invalide -``` - -Après modification, recharger Postfix : - -``` -postfix reload -``` - -À noter : `header_checks` agit sur les en-têtes déjà présents. Si on veut que la vérification SPF soit faite par Postfix lui-même au moment de la réception, le bon outil est plutôt **policyd-spf** (paquet `postfix-policyd-spf-python` sous Debian), qui s'intègre via `smtpd_recipient_restrictions` et permet de rejeter avant même que le mail soit accepté. - -## L'approche par scoring avec SpamAssassin - -Plutôt que de couper net, on peut intégrer SPF à un score global. SpamAssassin expose plusieurs règles dédiées : - -- `SPF_FAIL` : ajoute un score significatif -- `SPF_SOFTFAIL` : score modéré -- `SPF_PERMERROR` : signale une config cassée -- `SPF_HELO_FAIL` : échec sur l'identité HELO - -L'intérêt du scoring, c'est de combiner SPF avec d'autres signaux (DKIM, DMARC, listes noires, contenu). Un mail qui échoue uniquement à SPF mais passe tout le reste mérite peut-être un passage en spam plutôt qu'un rejet pur. Inversement, un cumul `SPF_FAIL` + DKIM cassé + IP sur une RBL ne laisse pas beaucoup de doute. - -## Quelques précautions avant de mettre en production - -Avant d'activer un rejet sur `Fail`, deux réflexes utiles : - -D'abord, regarder les logs en mode passif pendant quelques jours. Loguer les verdicts SPF sans rejeter permet de mesurer le volume concerné et de repérer les expéditeurs légitimes mal configurés (il y en a toujours, y compris des prestataires connus). - -Ensuite, vérifier que les mails forwardés ne sont pas pénalisés. Un mail transféré perd souvent son alignement SPF puisque l'IP de réémission n'est pas celle déclarée par le domaine d'origine. C'est précisément le problème que DKIM et ARC sont censés résoudre, mais tous les serveurs ne les implémentent pas correctement. - -Le SPF est un bon premier filtre, pas une solution complète. Combiné à DKIM et DMARC, il forme la base de l'authentification mail moderne ; isolé, il reste utile mais imparfait. \ No newline at end of file diff --git a/8ed45b6e-d89b-4ae9-94e2-ed8476c00080/index.md b/8ed45b6e-d89b-4ae9-94e2-ed8476c00080/index.md deleted file mode 100644 index 6871928..0000000 --- a/8ed45b6e-d89b-4ae9-94e2-ed8476c00080/index.md +++ /dev/null @@ -1,106 +0,0 @@ -# Créer son propre mini-framework PHP from scratch - -Tout commence avec une idée simple : bâtir un système web **léger, modulaire et compréhensible**, sans dépendre d’un framework externe. -Un **framework maison**, conçu pour gérer efficacement des **posts**, des **commentaires** et des **pièces jointes**, tout en respectant les principes de l’architecture **MVC**. - -### L’objectif - -Disposer d’une base claire et extensible, où chaque brique du système — du routeur aux modèles — reste transparente et entièrement maîtrisable. - ---- - -## **La structure du projet** - -L’application s’organise autour d’une arborescence simple et logique. - -Au sommet, le dossier `public/` joue le rôle de **porte d’entrée** du site, avec un fichier `index.php` qui orchestre tout : c’est lui qui intercepte chaque requête et la transmet au **routeur**. - -Dans le dossier `app/`, on retrouve le cœur de la logique métier : - -* `Core/` contient les **fondations** : le routeur et la classe de base des contrôleurs. -* `Controllers/` regroupe les différentes logiques d’action (posts, commentaires, pièces jointes). -* `Models/` gère la **persistance des données** — ici stockées dans des fichiers JSON pour plus de simplicité. - -Chaque couche a un rôle précis, et l’ensemble reste clair, modulaire et facile à maintenir. - ---- - -## **Le routeur : le cerveau du système** - -Au cœur du projet, le fichier `Router.php` agit comme un **chef d’orchestre**. -Il écoute les requêtes entrantes, analyse leur méthode (`GET`, `POST`, `PATCH`, etc.) et les fait correspondre à la bonne route. - -Grâce à un jeu de **regex**, le routeur reconnaît des chemins dynamiques comme `/posts/:id` et transmet automatiquement les paramètres au contrôleur concerné. -Une architecture élégante, minimaliste et pourtant très puissante. - ---- - -## **L’entrée principale : `index.php`** - -Tout commence dans `public/index.php`. -Après avoir chargé les classes nécessaires, on y définit les routes — une à une — comme les **règles d’un jeu**. - -Chaque route associe une méthode HTTP à une action précise : - -* Afficher tous les posts -* Créer un nouveau post -* Mettre à jour, publier ou masquer un post -* Ajouter un commentaire ou une pièce jointe - -Une fois toutes les routes enregistrées, le routeur **intercepte la requête HTTP réelle** et la redirige vers le bon contrôleur. -C’est simple, direct et parfaitement lisible. - ---- - -## **Les contrôleurs : la logique métier** - -Prenons `PostController` comme exemple. -Chaque méthode correspond à une **action concrète** du système : afficher la liste des posts, en créer un, le modifier, le publier ou le masquer. - -Les contrôleurs sont **stateless** : ils reçoivent les données, invoquent le modèle correspondant, puis renvoient une réponse JSON propre et explicite. -Aucune dépendance superflue, aucun artifice — le code parle de lui-même. - ---- - -## **Les modèles : la mémoire du système** - -Les modèles (`Post`, `Comment`, `Attachment`) assurent la gestion des données. -Ici, les informations sont stockées dans des fichiers JSON — un choix volontairement simple, idéal pour le prototypage ou les petits projets. - -Mais la structure est pensée pour pouvoir évoluer facilement vers une **base de données réelle** (MySQL, SQLite, etc.) via PDO. -Chaque modèle sait comment **lire, créer, modifier et sauvegarder** ses propres objets, garantissant ainsi une séparation claire des responsabilités. - ---- - -## **Une API claire et RESTful** - -Les routes suivent une logique **RESTful**, simple et cohérente : - -```bash -PATCH /posts/42/publish -PATCH /posts/42/comments/17/hide -POST /posts/42/attachments -``` - -L’API est lisible, homogène et prête à être consommée par n’importe quel front-end — qu’il soit en Vue.js, React, ou même une interface HTML minimale. - ---- - -## **Pourquoi cette approche séduit** - -Ce mini-framework maison présente plusieurs atouts : - -* **Zéro dépendance externe** : tout est sous ton contrôle. -* **Architecture claire et didactique** : parfaite pour comprendre la mécanique interne d’un framework. -* **Routing dynamique et élégant** : les paramètres d’URL sont gérés naturellement. -* **Extensibilité** : tu peux facilement ajouter l’authentification, des middlewares ou la validation des données. -* **Légèreté** : un cœur minimal, mais robuste et fonctionnel. - ---- - -## **Et après ?** - -La prochaine étape : implémenter la **gestion complète des fichiers uploadés**, avec vérification du type MIME, stockage sécurisé dans `/uploads`, et possibilité de masquer les pièces jointes à la demande. - -Petit à petit, ton framework prend forme — un système MVC léger, propre et totalement maîtrisé. -Tu n’utilises plus un framework : tu **en construis un**. diff --git a/8ed45b6e-d89b-4ae9-94e2-ed8476c00080/meta.json b/8ed45b6e-d89b-4ae9-94e2-ed8476c00080/meta.json deleted file mode 100644 index aff5661..0000000 --- a/8ed45b6e-d89b-4ae9-94e2-ed8476c00080/meta.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "uuid": "8ed45b6e-d89b-4ae9-94e2-ed8476c00080", - "slug": "creer-son-propre-mini-framework-php-from-scratch", - "title": "Créer son propre mini-framework PHP from scratch", - "author": "cedric@abonnel.fr", - "published": true, - "published_at": "2025-11-04 22:07:52", - "created_at": "2025-11-04 22:07:52", - "updated_at": "2025-11-04 22:07:52", - "revisions": [], - "cover": "cover.jpg", - "category": "informatique" -} diff --git a/947e0330-2d72-44c9-8ee2-fcb312babcd0/index.md b/947e0330-2d72-44c9-8ee2-fcb312babcd0/index.md deleted file mode 100644 index 98a9320..0000000 --- a/947e0330-2d72-44c9-8ee2-fcb312babcd0/index.md +++ /dev/null @@ -1,69 +0,0 @@ -# La 3G : une technologie encore efficace… mais bridée - -### Définition technique - -La 3G, ou **UMTS/HSPA (Universal Mobile Telecommunications System / High Speed Packet Access)**, représente la troisième génération de réseaux mobiles. Déployée massivement au début des années 2000, elle a permis d’augmenter significativement les débits par rapport à la 2G et de démocratiser l’internet mobile. - -* **Débit théorique descendant** : de 384 kbit/s (UMTS) à 42 Mbit/s (HSPA+) -* **Débit théorique montant** : de 64 kbit/s à 5,76 Mbit/s selon la version HSPA+ -* **Latence moyenne** : 150–200 ms - -Grâce à ces caractéristiques, la 3G pouvait supporter des usages multimédias modérés et une communication fluide pour des applications professionnelles légères. - ---- - -### Usages typiques de la 3G - -La 3G reste adaptée pour : - -* **Email et messagerie instantanée** : navigation fluide pour les échanges professionnels ou personnels. -* **Surf web** : pages web standardisées et consultation de contenus multimédias légers. -* **Visioconférence légère** : qualité suffisante pour des appels vidéo 480p. -* **VoIP** : appels téléphoniques via internet, avec une qualité correcte sur réseaux non saturés. - -Ces usages font de la 3G une technologie encore fonctionnelle, notamment dans les zones rurales ou pour les utilisateurs peu exigeants en débits élevés. - ---- - -### Exemple concret : Free Mobile et bridage en itinérance - -Avec l’essor de la 4G et, plus récemment, de la 5G, certains opérateurs ont commencé à **réduire volontairement les performances de la 3G** pour encourager la migration vers les nouvelles générations. Free Mobile, en itinérance sur le réseau Orange, est un exemple emblématique : - -* **Depuis 2020**, le débit est limité à **384 kbit/s** dans les deux sens pour la 3G en itinérance. -* Le **calendrier de réduction progressive** a été le suivant : - - * **2016** : ~5 Mbit/s descendant - * **2017** : ~1 Mbit/s descendant - * **2019** : 768 kbit/s descendant, 384 kbit/s montant - * **2020** : 384 kbit/s descendant et montant - -Ce bridage transforme la 3G d’une technologie performante en un réseau à très faible débit, affectant la fluidité des usages cités ci-dessus. - ---- - -### Comparaison débits théoriques vs réels - -| Technologie | Débit théorique descendant | Débit réel Free Mobile itinérance 3G | -| ----------- | -------------------------- | ------------------------------------ | -| UMTS | 384 kbit/s – 2 Mbit/s | 384 kbit/s | -| HSPA | 1,8 – 7,2 Mbit/s | 384–768 kbit/s | -| HSPA+ | 21 – 42 Mbit/s | 384 kbit/s | - -**Schéma suggéré** : visualiser le décalage entre débit théorique et débit réel selon génération et itinérance. Cela montre clairement la dégradation volontaire de la 3G. - ---- - -### Impact pour l’utilisateur - -* Navigation ralentie, streaming limité à une résolution faible. -* Visioconférences perturbées ou coupures fréquentes. -* Motivation implicite à migrer vers la 4G ou la 5G pour bénéficier de débits normaux. - -En résumé, la 3G demeure techniquement suffisante pour de nombreux usages, mais **les opérateurs réduisent volontairement les performances**, transformant un service pleinement fonctionnel en expérience limitée. - ---- - -### Références - -* [01net.com – Free Mobile et bridage 3G](https://www.01net.com/actualites/free-mobile-l-itinerance-3g-orange-sera-plus-lente-des-le-1er-janvier-avant-de-disparaitre-1833059.html) -* [Fiche Free Mobile – Débits 3G (PDF)](https://mobile.free.fr/docs/fis/Fiche_information_standardisee_2020-12-15.pdf) \ No newline at end of file diff --git a/947e0330-2d72-44c9-8ee2-fcb312babcd0/meta.json b/947e0330-2d72-44c9-8ee2-fcb312babcd0/meta.json deleted file mode 100644 index c688016..0000000 --- a/947e0330-2d72-44c9-8ee2-fcb312babcd0/meta.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "uuid": "947e0330-2d72-44c9-8ee2-fcb312babcd0", - "slug": "la-3g-une-technologie-encore-efficace-mais-bridee", - "title": "La 3G : une technologie encore efficace… mais bridée", - "author": "cedric@abonnel.fr", - "published": true, - "published_at": "2025-11-05 08:40:01", - "created_at": "2025-11-05 08:40:01", - "updated_at": "2025-11-05 08:40:01", - "revisions": [], - "cover": "cover.jpg", - "category": "télécom" -} diff --git a/976fd7f0-e53d-44e2-a879-58194765f3cf/files/cover.svg b/976fd7f0-e53d-44e2-a879-58194765f3cf/files/cover.svg deleted file mode 100644 index 72cedfa..0000000 --- a/976fd7f0-e53d-44e2-a879-58194765f3cf/files/cover.svg +++ /dev/null @@ -1,152 +0,0 @@ - -Mises à jour automatiques de sécurité sur Debian -Illustration symbolique : un bouclier protégeant un terminal Debian, entouré de paquets de mise à jour en orbite et de flux de données sécurisés. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -.deb - - - - -.deb - - - - -CVE-fix - - - - -patch - - - - -apt - - - - - - - - - - - - - - - - - - - - - - - - - - - -debian — unattended-upgrades - - -root@srv:~# -apt update - -# Reading package lists... - -root@srv:~# -unattended-upgrade - -# Checking security archive - -→ openssl 3.0.15 -→ linux-image 6.1.140 -→ libpam 1.5.2-6+ - -# 3 packages upgraded ✓ - -root@srv:~# -_ - - - - - - - - - - - - - - - - - - - Mises à jour automatiques de sécurité - - - Debian · unattended-upgrades - - - - - apt · security.debian.org · CVE patches - - - Un serveur protégé pendant que vous dormez - - \ No newline at end of file diff --git a/976fd7f0-e53d-44e2-a879-58194765f3cf/index.md b/976fd7f0-e53d-44e2-a879-58194765f3cf/index.md deleted file mode 100644 index f98268c..0000000 --- a/976fd7f0-e53d-44e2-a879-58194765f3cf/index.md +++ /dev/null @@ -1,88 +0,0 @@ -# Activer les mises à jour automatiques sur Debian pour une gestion simplifiée des correctifs de sécurité - -Dans un environnement de serveur ou de poste de travail, maintenir un système à jour avec les derniers correctifs de sécurité est crucial pour éviter toute vulnérabilité. Debian, l'une des distributions Linux les plus populaires et stables, propose des mécanismes permettant d'automatiser ce processus de mise à jour, et ainsi garantir que les correctifs de sécurité sont appliqués sans nécessiter une intervention manuelle. - -Comment activer les mises à jour automatiques sur une machine Debian, en se concentrant spécifiquement sur les correctifs de sécurité ? Comment configurer ce processus pour un contrôle fin et comment tester que tout fonctionne correctement ? - -### Étapes pour activer les mises à jour automatiques - -#### 1. Installer les paquets nécessaires - -La première étape pour activer les mises à jour automatiques sur Debian consiste à installer les outils nécessaires. Cela inclut le paquet `unattended-upgrades`, qui permet de gérer les mises à jour automatiques, ainsi que `apt-listchanges` qui permet de recevoir des informations sur les paquets mis à jour. - -Exécutez la commande suivante pour installer ces paquets : - -```bash -sudo apt update -sudo apt install -y unattended-upgrades apt-listchanges -``` - -#### 2. Configurer `unattended-upgrades` - -Une fois le paquet installé, vous devez configurer `unattended-upgrades` pour qu'il applique automatiquement les mises à jour de sécurité. Cela se fait en modifiant certains fichiers de configuration dans `/etc/apt/apt.conf.d/`. - -Exécutez la commande suivante pour reconfigurer `unattended-upgrades` : - -```bash -sudo dpkg-reconfigure --priority=low unattended-upgrades -``` - -Lors de la configuration, vous serez invité à activer les mises à jour automatiques. Assurez-vous que l'option **"Install security updates"** est sélectionnée. Cela garantit que les mises à jour de sécurité seront appliquées automatiquement sans intervention manuelle. - -#### 3. Vérifier la configuration dans `/etc/apt/apt.conf.d/50unattended-upgrades` - -Une fois la configuration initiale terminée, il est important de vérifier que le fichier de configuration principal de `unattended-upgrades` permet bien l'installation des mises à jour de sécurité. - -Éditez le fichier `/etc/apt/apt.conf.d/50unattended-upgrades` avec votre éditeur de texte préféré, par exemple `nano` : - -```bash -sudo nano /etc/apt/apt.conf.d/50unattended-upgrades -``` - -Dans ce fichier, vous devez vous assurer que la ligne suivante est présente et non commentée : - -```plaintext -"${distro_id}:${distro_codename}-security"; -``` - -Cela garantit que les mises à jour de sécurité de votre version de Debian seront appliquées automatiquement. - -**Optionnel** : Si vous souhaitez également appliquer des mises à jour non critiques (par exemple des mises à jour mineures ou des corrections de bugs), vous pouvez activer les mises à jour pour tous les paquets en dé-commentant ou ajoutant cette ligne : - -```plaintext -"${distro_id}:${distro_codename}-updates"; -``` - -Cependant, cette option peut introduire des mises à jour qui ne sont pas toujours aussi urgentes que celles de sécurité. Il est donc recommandé de ne l'activer que si vous êtes à l'aise avec des mises à jour supplémentaires automatiques. - -#### 4. Tester la configuration des mises à jour automatiques - -Pour vous assurer que `unattended-upgrades` fonctionne comme prévu, il est utile de faire un test en mode "dry-run". Cela permet de simuler les mises à jour sans les appliquer réellement. - -Exécutez la commande suivante : - -```bash -sudo unattended-upgrades --dry-run --debug -``` - -Cette commande simule le processus de mise à jour et affiche des informations détaillées sur les paquets qui seraient mis à jour. Cela vous permet de vérifier que la configuration fonctionne correctement et que seules les mises à jour de sécurité (ou celles que vous avez spécifiées) seront prises en compte. - -#### 5. Vérifier les logs - -Une fois les mises à jour automatiques activées et en cours d'exécution, il est important de vérifier régulièrement les logs pour vous assurer qu'aucune mise à jour n'a échoué. Les logs de `unattended-upgrades` sont stockés dans le fichier `/var/log/unattended-upgrades/unattended-upgrades.log`. - -Pour consulter les logs, utilisez la commande suivante : - -```bash -sudo cat /var/log/unattended-upgrades/unattended-upgrades.log -``` - -Cela vous permet de suivre les mises à jour installées automatiquement et d’identifier tout problème éventuel. - ---- - -En activant les mises à jour automatiques sur votre machine Debian, vous vous assurez que les correctifs de sécurité sont appliqués rapidement et sans intervention manuelle, réduisant ainsi le risque de vulnérabilités exploitables. - -N'oubliez pas que bien que l'activation des mises à jour automatiques pour les correctifs de sécurité soit essentielle, il est également important de tester régulièrement le processus, de vérifier les logs, et de maintenir une vigilance pour toute mise à jour système majeure qui pourrait nécessiter une attention spéciale. - -En appliquant cette configuration, vous minimisez les risques liés à des failles de sécurité tout en maintenant la stabilité et la sécurité de votre environnement Debian. diff --git a/976fd7f0-e53d-44e2-a879-58194765f3cf/meta.json b/976fd7f0-e53d-44e2-a879-58194765f3cf/meta.json deleted file mode 100644 index cd78cf0..0000000 --- a/976fd7f0-e53d-44e2-a879-58194765f3cf/meta.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "uuid": "976fd7f0-e53d-44e2-a879-58194765f3cf", - "slug": "activer-les-mises-a-jour-automatiques-sur-debian-pour-une-gestion-simplifiee-des-correctifs-de-securite", - "title": "Activer les mises à jour automatiques sur Debian pour une gestion simplifiée des correctifs de sécurité", - "author": "cedric@abonnel.fr", - "published": true, - "published_at": "2026-01-06 20:45", - "created_at": "2026-01-06 20:45:52", - "updated_at": "2026-05-12 09:33:15", - "revisions": [ - { - "n": 1, - "date": "2026-05-12 00:18:42", - "comment": "", - "title": "Mises à jour automatiques de sécurité sur Debian" - }, - { - "n": 2, - "date": "2026-05-12 00:22:53", - "comment": "", - "title": "Mises à jour automatiques de sécurité sur Debian" - }, - { - "n": 3, - "date": "2026-05-12 09:33:15", - "comment": "", - "title": "Mises à jour automatiques de sécurité sur Debian" - } - ], - "cover": "cover.svg", - "files_meta": { - "5cfac9bc6078c2d1-31391.svg": { - "author": "Cédrix", - "source_url": "" - } - }, - "external_links": [], - "seo_title": "", - "seo_description": "", - "og_image": "", - "category": "linux" -} diff --git a/976fd7f0-e53d-44e2-a879-58194765f3cf/revisions/0001.md b/976fd7f0-e53d-44e2-a879-58194765f3cf/revisions/0001.md deleted file mode 100644 index f3e1bc6..0000000 --- a/976fd7f0-e53d-44e2-a879-58194765f3cf/revisions/0001.md +++ /dev/null @@ -1,155 +0,0 @@ -Maintenir un système Debian à jour, c'est un peu comme fermer ses fenêtres avant de partir en vacances : on sait qu'il faut le faire, on sait pourquoi, et pourtant ça finit régulièrement par passer à la trappe. Le problème, c'est qu'une CVE qui traîne plusieurs semaines sur un serveur exposé, ça ne pardonne pas toujours. - -Heureusement, Debian fournit tout ce qu'il faut pour automatiser l'application des correctifs de sécurité, à travers un paquet qui s'appelle `unattended-upgrades`. L'idée est simple : on configure une fois, et la machine se débrouille pour appliquer les patches `-security` sans qu'on ait à y penser. Ce qui suit, c'est la marche à suivre, avec les pièges que j'ai croisés en route. - -## Le principe - -`unattended-upgrades` n'est pas un démon qui tourne en permanence. C'est un script qui est lancé une fois par jour par un timer systemd (`apt-daily-upgrade.timer`), et qui regarde dans sa configuration quelles « origines » de paquets il a le droit de mettre à jour. Par défaut, il est conservateur : il ne touche qu'aux paquets venant du dépôt de sécurité officiel. C'est exactement ce qu'on veut sur un serveur de production. - -Deux fichiers entrent en jeu : - -- `/etc/apt/apt.conf.d/20auto-upgrades` décide *si* et *à quelle fréquence* unattended-upgrades est exécuté -- `/etc/apt/apt.conf.d/50unattended-upgrades` décide *quoi* mettre à jour et *comment* - -On va passer par les deux. - -## Installation - -Rien de très exotique : - -```bash -sudo apt update -sudo apt install -y unattended-upgrades apt-listchanges -``` - -`apt-listchanges` n'est pas strictement nécessaire, mais il est utile : il permet de recevoir un résumé des changements appliqués (notamment les entrées de `NEWS.Debian` qui annoncent parfois des changements de comportement qu'il vaut mieux ne pas découvrir un lundi matin). - -## Activer l'exécution automatique - -La commande classique pour ça : - -```bash -sudo dpkg-reconfigure --priority=low unattended-upgrades -``` - -L'interface te pose une question simple — « voulez-vous appliquer automatiquement les mises à jour de stabilité ? » — réponds oui. En coulisses, cette commande crée le fichier `/etc/apt/apt.conf.d/20auto-upgrades` avec ce contenu : - -``` -APT::Periodic::Update-Package-Lists "1"; -APT::Periodic::Unattended-Upgrade "1"; -``` - -Le `"1"` signifie « tous les jours ». Tu peux mettre `"7"` pour hebdomadaire, mais sur un serveur exposé je ne vois pas l'intérêt de retarder. - -Pendant qu'on y est, deux options qu'on ajoute souvent à ce fichier : - -``` -APT::Periodic::Download-Upgradeable-Packages "1"; -APT::Periodic::AutocleanInterval "7"; -``` - -La première télécharge les paquets en amont, ce qui rend l'installation plus rapide le moment venu. La seconde nettoie le cache `/var/cache/apt/archives` une fois par semaine, ce qui évite que ce dossier ne grossisse indéfiniment. - -## Configurer le périmètre des mises à jour - -C'est dans `/etc/apt/apt.conf.d/50unattended-upgrades` que ça se joue. Le fichier est livré commenté et documenté, ce qui aide. La section la plus importante ressemble à ça : - -``` -Unattended-Upgrade::Origins-Pattern { - "origin=Debian,codename=${distro_codename}-updates"; - "origin=Debian,codename=${distro_codename},label=Debian"; - "origin=Debian,codename=${distro_codename},label=Debian-Security"; - "origin=Debian,codename=${distro_codename}-security,label=Debian-Security"; -}; -``` - -Sur une Debian récente (Bookworm et au-delà), ces lignes sont décommentées par défaut et couvrent les mises à jour de sécurité. Si tu veux être strictement sécurité-seulement, garde uniquement les deux lignes contenant `Debian-Security` et commente les autres. La règle est : `label=Debian-Security` correspond aux correctifs de l'équipe sécurité, le reste correspond aux mises à jour de point release (les `12.6 → 12.7` et compagnie). - -Quelques options supplémentaires qui méritent qu'on s'y arrête : - -### Le redémarrage automatique - -``` -Unattended-Upgrade::Automatic-Reboot "false"; -Unattended-Upgrade::Automatic-Reboot-Time "02:00"; -``` - -Question politique autant que technique. Certaines mises à jour — typiquement le noyau ou la glibc — ne prennent effet qu'après reboot. Tant que la machine n'a pas redémarré, le correctif n'est pas réellement appliqué, même si le paquet est installé. Tu as deux options : laisser à `"false"` et reboot manuellement quand tu veux (en surveillant `/var/run/reboot-required`), ou passer à `"true"` avec une heure creuse. Sur un serveur isolé, le reboot auto se défend. Sur une base de données critique, beaucoup moins. - -### Les notifications - -``` -Unattended-Upgrade::Mail "admin@exemple.fr"; -Unattended-Upgrade::MailReport "on-change"; -``` - -Très utile. Tu reçois un mail uniquement quand quelque chose a été installé (ou a échoué), ce qui évite le bruit. Évidemment, il faut un MTA configuré — `msmtp` ou un postfix en relais SMTP font le boulot. - -### Le nettoyage - -``` -Unattended-Upgrade::Remove-Unused-Kernel-Packages "true"; -Unattended-Upgrade::Remove-Unused-Dependencies "true"; -``` - -Sans ça, les vieux noyaux s'accumulent dans `/boot`, qui finit par se remplir, ce qui finit par bloquer la prochaine mise à jour du noyau. Classique. - -## Tester avant de laisser tourner - -Avant de partir en weekend, vérifie que la configuration est bien comprise : - -```bash -sudo unattended-upgrades --dry-run --debug -``` - -Le dry-run ne touche à rien, mais il liste les paquets qui seraient installés et — surtout — il indique pourquoi un paquet est ou n'est pas retenu. Si tu vois `Checking: ` suivi de `Allowed origins are:` et que ton dépôt de sécurité apparaît bien dans la liste, c'est bon signe. - -Tu peux aussi vérifier que les timers systemd sont actifs : - -```bash -systemctl list-timers apt-daily.timer apt-daily-upgrade.timer -``` - -Ces deux timers sont fournis par le paquet `apt` lui-même, indépendamment de unattended-upgrades. Le premier rafraîchit la liste des paquets, le second déclenche l'upgrade. S'ils sont marqués `inactive`, c'est qu'ils sont masqués quelque part — un `systemctl unmask` règle généralement le problème. - -## Vérifier après coup - -Les logs vivent ici : - -```bash -sudo less /var/log/unattended-upgrades/unattended-upgrades.log -sudo less /var/log/unattended-upgrades/unattended-upgrades-dpkg.log -``` - -Le premier est un résumé lisible, le second contient la sortie brute de `dpkg`. Quand quelque chose se passe mal, c'est généralement dans le second qu'on trouve l'explication (un fichier de configuration modifié, un service qui refuse de redémarrer, ce genre de choses). - -Pour savoir si la machine attend un reboot après une mise à jour de noyau : - -```bash -ls /var/run/reboot-required 2>/dev/null && cat /var/run/reboot-required.pkgs -``` - -Si le fichier existe, c'est qu'au moins un paquet installé recommande un redémarrage. Le second fichier liste lesquels. - -## Quelques pièges - -**Les fichiers de configuration modifiés.** Si tu as personnalisé un `/etc/...` dont le paquet propose une nouvelle version, unattended-upgrades va voir un conflit et laisser tomber l'installation par défaut (option `--force-confdef`). C'est généralement le bon comportement, mais ça veut dire que certaines mises à jour resteront en attente jusqu'à une intervention manuelle. Les logs te le diront. - -**Les paquets blacklistés.** Tu peux exclure des paquets précis de la mise à jour automatique : - -``` -Unattended-Upgrade::Package-Blacklist { - "libc6"; - "linux-image-.*"; -}; -``` - -À utiliser avec discernement — exclure libc6 ou le noyau, c'est précisément exclure les correctifs qui comptent le plus. Mais sur une machine où un reboot coûte cher, ça permet de garder le contrôle sur les paquets sensibles tout en automatisant le reste. - -**Les dépôts tiers.** Par défaut, seuls les dépôts Debian officiels sont concernés. Si tu utilises un PPA ou un dépôt comme celui de Docker ou de PostgreSQL, il faut explicitement l'ajouter dans `Origins-Pattern`. Sinon, ces paquets ne sont jamais mis à jour automatiquement — ce qui peut être un piège silencieux. - -## Pour conclure - -L'automatisation des mises à jour de sécurité sur Debian, ce n'est pas une boîte noire : c'est un script qui tourne une fois par jour, qui lit deux fichiers texte, et qui appelle `apt` avec des règles bien définies. Une fois qu'on a compris ça, le configurer revient à éditer ces deux fichiers selon ses contraintes — niveau de risque, fenêtre de reboot acceptable, notifications souhaitées. - -Le minimum vital sur un serveur exposé tient en quatre points : `unattended-upgrades` installé, le périmètre limité aux dépôts `-security`, les notifications mail activées, et un coup d'œil régulier à `/var/run/reboot-required` pour ne pas oublier les redémarrages. Le reste, c'est de l'ajustement selon le contexte. \ No newline at end of file diff --git a/976fd7f0-e53d-44e2-a879-58194765f3cf/revisions/0002.md b/976fd7f0-e53d-44e2-a879-58194765f3cf/revisions/0002.md deleted file mode 100644 index 9a40f64..0000000 --- a/976fd7f0-e53d-44e2-a879-58194765f3cf/revisions/0002.md +++ /dev/null @@ -1,155 +0,0 @@ -Maintenir un système Debian à jour, c'est un peu comme fermer ses fenêtres avant de partir en vacances : on sait qu'il faut le faire, on sait pourquoi, et pourtant ça finit régulièrement par passer à la trappe. Le problème, c'est qu'une CVE qui traîne plusieurs semaines sur un serveur exposé, ça ne pardonne pas toujours. - -Heureusement, Debian fournit tout ce qu'il faut pour automatiser l'application des correctifs de sécurité, à travers un paquet qui s'appelle `unattended-upgrades`. L'idée est simple : on configure une fois, et la machine se débrouille pour appliquer les patches `-security` sans qu'on ait à y penser. Ce qui suit, c'est la marche à suivre, avec les pièges que j'ai croisés en route. - -## Le principe - -`unattended-upgrades` n'est pas un démon qui tourne en permanence. C'est un script qui est lancé une fois par jour par un timer systemd (`apt-daily-upgrade.timer`), et qui regarde dans sa configuration quelles « origines » de paquets il a le droit de mettre à jour. Par défaut, il est conservateur : il ne touche qu'aux paquets venant du dépôt de sécurité officiel. C'est exactement ce qu'on veut sur un serveur de production. - -Deux fichiers entrent en jeu : - -- `/etc/apt/apt.conf.d/20auto-upgrades` décide *si* et *à quelle fréquence* unattended-upgrades est exécuté -- `/etc/apt/apt.conf.d/50unattended-upgrades` décide *quoi* mettre à jour et *comment* - -On va passer par les deux. - -## Installation - -Rien de très exotique : - -```bash -sudo apt update -sudo apt install -y unattended-upgrades apt-listchanges -``` - -`apt-listchanges` n'est pas strictement nécessaire, mais il est utile : il permet de recevoir un résumé des changements appliqués (notamment les entrées de `NEWS.Debian` qui annoncent parfois des changements de comportement qu'il vaut mieux ne pas découvrir un lundi matin). - -## Activer l'exécution automatique - -La commande classique pour ça : - -```bash -sudo dpkg-reconfigure --priority=low unattended-upgrades -``` - -L'interface te pose une question simple — « voulez-vous appliquer automatiquement les mises à jour de stabilité ? » — réponds oui. En coulisses, cette commande crée le fichier `/etc/apt/apt.conf.d/20auto-upgrades` avec ce contenu : - -``` -APT::Periodic::Update-Package-Lists "1"; -APT::Periodic::Unattended-Upgrade "1"; -``` - -Le `"1"` signifie « tous les jours ». Tu peux mettre `"7"` pour hebdomadaire, mais sur un serveur exposé je ne vois pas l'intérêt de retarder. - -Pendant qu'on y est, deux options qu'on ajoute souvent à ce fichier : - -``` -APT::Periodic::Download-Upgradeable-Packages "1"; -APT::Periodic::AutocleanInterval "7"; -``` - -La première télécharge les paquets en amont, ce qui rend l'installation plus rapide le moment venu. La seconde nettoie le cache `/var/cache/apt/archives` une fois par semaine, ce qui évite que ce dossier ne grossisse indéfiniment. - -## Configurer le périmètre des mises à jour - -C'est dans `/etc/apt/apt.conf.d/50unattended-upgrades` que ça se joue. Le fichier est livré commenté et documenté, ce qui aide. La section la plus importante ressemble à ça : - -``` -Unattended-Upgrade::Origins-Pattern { - "origin=Debian,codename=${distro_codename}-updates"; - "origin=Debian,codename=${distro_codename},label=Debian"; - "origin=Debian,codename=${distro_codename},label=Debian-Security"; - "origin=Debian,codename=${distro_codename}-security,label=Debian-Security"; -}; -``` - -Sur une Debian récente (Bookworm et au-delà), ces lignes sont décommentées par défaut et couvrent les mises à jour de sécurité. Si tu veux être strictement sécurité-seulement, garde uniquement les deux lignes contenant `Debian-Security` et commente les autres. La règle est : `label=Debian-Security` correspond aux correctifs de l'équipe sécurité, le reste correspond aux mises à jour de point release (les `12.6 → 12.7` et compagnie). - -Quelques options supplémentaires qui méritent qu'on s'y arrête : - -### Le redémarrage automatique - -``` -Unattended-Upgrade::Automatic-Reboot "false"; -Unattended-Upgrade::Automatic-Reboot-Time "02:00"; -``` - -Question politique autant que technique. Certaines mises à jour — typiquement le noyau ou la glibc — ne prennent effet qu'après reboot. Tant que la machine n'a pas redémarré, le correctif n'est pas réellement appliqué, même si le paquet est installé. Tu as deux options : laisser à `"false"` et reboot manuellement quand tu veux (en surveillant `/var/run/reboot-required`), ou passer à `"true"` avec une heure creuse. Sur un serveur isolé, le reboot auto se défend. Sur une base de données critique, beaucoup moins. - -### Les notifications - -``` -Unattended-Upgrade::Mail "admin@exemple.fr"; -Unattended-Upgrade::MailReport "on-change"; -``` - -Très utile. Tu reçois un mail uniquement quand quelque chose a été installé (ou a échoué), ce qui évite le bruit. Évidemment, il faut un MTA configuré — `msmtp` ou un postfix en relais SMTP font le boulot. - -### Le nettoyage - -``` -Unattended-Upgrade::Remove-Unused-Kernel-Packages "true"; -Unattended-Upgrade::Remove-Unused-Dependencies "true"; -``` - -Sans ça, les vieux noyaux s'accumulent dans `/boot`, qui finit par se remplir, ce qui finit par bloquer la prochaine mise à jour du noyau. Classique. - -## Tester avant de laisser tourner - -Avant de partir en weekend, vérifie que la configuration est bien comprise : - -```bash -sudo unattended-upgrades --dry-run --debug -``` - -Le dry-run ne touche à rien, mais il liste les paquets qui seraient installés et — surtout — il indique pourquoi un paquet est ou n'est pas retenu. Si tu vois `Checking: ` suivi de `Allowed origins are:` et que ton dépôt de sécurité apparaît bien dans la liste, c'est bon signe. - -Tu peux aussi vérifier que les timers systemd sont actifs : - -```bash -systemctl list-timers apt-daily.timer apt-daily-upgrade.timer -``` - -Ces deux timers sont fournis par le paquet `apt` lui-même, indépendamment de unattended-upgrades. Le premier rafraîchit la liste des paquets, le second déclenche l'upgrade. S'ils sont marqués `inactive`, c'est qu'ils sont masqués quelque part — un `systemctl unmask` règle généralement le problème. - -## Vérifier après coup - -Les logs vivent ici : - -```bash -sudo less /var/log/unattended-upgrades/unattended-upgrades.log -sudo less /var/log/unattended-upgrades/unattended-upgrades-dpkg.log -``` - -Le premier est un résumé lisible, le second contient la sortie brute de `dpkg`. Quand quelque chose se passe mal, c'est généralement dans le second qu'on trouve l'explication (un fichier de configuration modifié, un service qui refuse de redémarrer, ce genre de choses). - -Pour savoir si la machine attend un reboot après une mise à jour de noyau : - -```bash -ls /var/run/reboot-required 2>/dev/null && cat /var/run/reboot-required.pkgs -``` - -Si le fichier existe, c'est qu'au moins un paquet installé recommande un redémarrage. Le second fichier liste lesquels. - -## Quelques pièges - -**Les fichiers de configuration modifiés.** Si tu as personnalisé un `/etc/...` dont le paquet propose une nouvelle version, unattended-upgrades va voir un conflit et laisser tomber l'installation par défaut (option `--force-confdef`). C'est généralement le bon comportement, mais ça veut dire que certaines mises à jour resteront en attente jusqu'à une intervention manuelle. Les logs te le diront. - -**Les paquets blacklistés.** Tu peux exclure des paquets précis de la mise à jour automatique : - -``` -Unattended-Upgrade::Package-Blacklist { - "libc6"; - "linux-image-.*"; -}; -``` - -À utiliser avec discernement — exclure libc6 ou le noyau, c'est précisément exclure les correctifs qui comptent le plus. Mais sur une machine où un reboot coûte cher, ça permet de garder le contrôle sur les paquets sensibles tout en automatisant le reste. - -**Les dépôts tiers.** Par défaut, seuls les dépôts Debian officiels sont concernés. Si tu utilises un PPA ou un dépôt comme celui de Docker ou de PostgreSQL, il faut explicitement l'ajouter dans `Origins-Pattern`. Sinon, ces paquets ne sont jamais mis à jour automatiquement — ce qui peut être un piège silencieux. - -## Pour conclure - -L'automatisation des mises à jour de sécurité sur Debian, ce n'est pas une boîte noire : c'est un script qui tourne une fois par jour, qui lit deux fichiers texte, et qui appelle `apt` avec des règles bien définies. Une fois qu'on a compris ça, le configurer revient à éditer ces deux fichiers selon ses contraintes — niveau de risque, fenêtre de reboot acceptable, notifications souhaitées. - -Le minimum vital sur un serveur exposé tient en quatre points : `unattended-upgrades` installé, le périmètre limité aux dépôts `-security`, les notifications mail activées, et un coup d'œil régulier à `/var/run/reboot-required` pour ne pas oublier les redémarrages. Le reste, c'est de l'ajustement selon le contexte. \ No newline at end of file diff --git a/976fd7f0-e53d-44e2-a879-58194765f3cf/revisions/0003.md b/976fd7f0-e53d-44e2-a879-58194765f3cf/revisions/0003.md deleted file mode 100644 index 9a40f64..0000000 --- a/976fd7f0-e53d-44e2-a879-58194765f3cf/revisions/0003.md +++ /dev/null @@ -1,155 +0,0 @@ -Maintenir un système Debian à jour, c'est un peu comme fermer ses fenêtres avant de partir en vacances : on sait qu'il faut le faire, on sait pourquoi, et pourtant ça finit régulièrement par passer à la trappe. Le problème, c'est qu'une CVE qui traîne plusieurs semaines sur un serveur exposé, ça ne pardonne pas toujours. - -Heureusement, Debian fournit tout ce qu'il faut pour automatiser l'application des correctifs de sécurité, à travers un paquet qui s'appelle `unattended-upgrades`. L'idée est simple : on configure une fois, et la machine se débrouille pour appliquer les patches `-security` sans qu'on ait à y penser. Ce qui suit, c'est la marche à suivre, avec les pièges que j'ai croisés en route. - -## Le principe - -`unattended-upgrades` n'est pas un démon qui tourne en permanence. C'est un script qui est lancé une fois par jour par un timer systemd (`apt-daily-upgrade.timer`), et qui regarde dans sa configuration quelles « origines » de paquets il a le droit de mettre à jour. Par défaut, il est conservateur : il ne touche qu'aux paquets venant du dépôt de sécurité officiel. C'est exactement ce qu'on veut sur un serveur de production. - -Deux fichiers entrent en jeu : - -- `/etc/apt/apt.conf.d/20auto-upgrades` décide *si* et *à quelle fréquence* unattended-upgrades est exécuté -- `/etc/apt/apt.conf.d/50unattended-upgrades` décide *quoi* mettre à jour et *comment* - -On va passer par les deux. - -## Installation - -Rien de très exotique : - -```bash -sudo apt update -sudo apt install -y unattended-upgrades apt-listchanges -``` - -`apt-listchanges` n'est pas strictement nécessaire, mais il est utile : il permet de recevoir un résumé des changements appliqués (notamment les entrées de `NEWS.Debian` qui annoncent parfois des changements de comportement qu'il vaut mieux ne pas découvrir un lundi matin). - -## Activer l'exécution automatique - -La commande classique pour ça : - -```bash -sudo dpkg-reconfigure --priority=low unattended-upgrades -``` - -L'interface te pose une question simple — « voulez-vous appliquer automatiquement les mises à jour de stabilité ? » — réponds oui. En coulisses, cette commande crée le fichier `/etc/apt/apt.conf.d/20auto-upgrades` avec ce contenu : - -``` -APT::Periodic::Update-Package-Lists "1"; -APT::Periodic::Unattended-Upgrade "1"; -``` - -Le `"1"` signifie « tous les jours ». Tu peux mettre `"7"` pour hebdomadaire, mais sur un serveur exposé je ne vois pas l'intérêt de retarder. - -Pendant qu'on y est, deux options qu'on ajoute souvent à ce fichier : - -``` -APT::Periodic::Download-Upgradeable-Packages "1"; -APT::Periodic::AutocleanInterval "7"; -``` - -La première télécharge les paquets en amont, ce qui rend l'installation plus rapide le moment venu. La seconde nettoie le cache `/var/cache/apt/archives` une fois par semaine, ce qui évite que ce dossier ne grossisse indéfiniment. - -## Configurer le périmètre des mises à jour - -C'est dans `/etc/apt/apt.conf.d/50unattended-upgrades` que ça se joue. Le fichier est livré commenté et documenté, ce qui aide. La section la plus importante ressemble à ça : - -``` -Unattended-Upgrade::Origins-Pattern { - "origin=Debian,codename=${distro_codename}-updates"; - "origin=Debian,codename=${distro_codename},label=Debian"; - "origin=Debian,codename=${distro_codename},label=Debian-Security"; - "origin=Debian,codename=${distro_codename}-security,label=Debian-Security"; -}; -``` - -Sur une Debian récente (Bookworm et au-delà), ces lignes sont décommentées par défaut et couvrent les mises à jour de sécurité. Si tu veux être strictement sécurité-seulement, garde uniquement les deux lignes contenant `Debian-Security` et commente les autres. La règle est : `label=Debian-Security` correspond aux correctifs de l'équipe sécurité, le reste correspond aux mises à jour de point release (les `12.6 → 12.7` et compagnie). - -Quelques options supplémentaires qui méritent qu'on s'y arrête : - -### Le redémarrage automatique - -``` -Unattended-Upgrade::Automatic-Reboot "false"; -Unattended-Upgrade::Automatic-Reboot-Time "02:00"; -``` - -Question politique autant que technique. Certaines mises à jour — typiquement le noyau ou la glibc — ne prennent effet qu'après reboot. Tant que la machine n'a pas redémarré, le correctif n'est pas réellement appliqué, même si le paquet est installé. Tu as deux options : laisser à `"false"` et reboot manuellement quand tu veux (en surveillant `/var/run/reboot-required`), ou passer à `"true"` avec une heure creuse. Sur un serveur isolé, le reboot auto se défend. Sur une base de données critique, beaucoup moins. - -### Les notifications - -``` -Unattended-Upgrade::Mail "admin@exemple.fr"; -Unattended-Upgrade::MailReport "on-change"; -``` - -Très utile. Tu reçois un mail uniquement quand quelque chose a été installé (ou a échoué), ce qui évite le bruit. Évidemment, il faut un MTA configuré — `msmtp` ou un postfix en relais SMTP font le boulot. - -### Le nettoyage - -``` -Unattended-Upgrade::Remove-Unused-Kernel-Packages "true"; -Unattended-Upgrade::Remove-Unused-Dependencies "true"; -``` - -Sans ça, les vieux noyaux s'accumulent dans `/boot`, qui finit par se remplir, ce qui finit par bloquer la prochaine mise à jour du noyau. Classique. - -## Tester avant de laisser tourner - -Avant de partir en weekend, vérifie que la configuration est bien comprise : - -```bash -sudo unattended-upgrades --dry-run --debug -``` - -Le dry-run ne touche à rien, mais il liste les paquets qui seraient installés et — surtout — il indique pourquoi un paquet est ou n'est pas retenu. Si tu vois `Checking: ` suivi de `Allowed origins are:` et que ton dépôt de sécurité apparaît bien dans la liste, c'est bon signe. - -Tu peux aussi vérifier que les timers systemd sont actifs : - -```bash -systemctl list-timers apt-daily.timer apt-daily-upgrade.timer -``` - -Ces deux timers sont fournis par le paquet `apt` lui-même, indépendamment de unattended-upgrades. Le premier rafraîchit la liste des paquets, le second déclenche l'upgrade. S'ils sont marqués `inactive`, c'est qu'ils sont masqués quelque part — un `systemctl unmask` règle généralement le problème. - -## Vérifier après coup - -Les logs vivent ici : - -```bash -sudo less /var/log/unattended-upgrades/unattended-upgrades.log -sudo less /var/log/unattended-upgrades/unattended-upgrades-dpkg.log -``` - -Le premier est un résumé lisible, le second contient la sortie brute de `dpkg`. Quand quelque chose se passe mal, c'est généralement dans le second qu'on trouve l'explication (un fichier de configuration modifié, un service qui refuse de redémarrer, ce genre de choses). - -Pour savoir si la machine attend un reboot après une mise à jour de noyau : - -```bash -ls /var/run/reboot-required 2>/dev/null && cat /var/run/reboot-required.pkgs -``` - -Si le fichier existe, c'est qu'au moins un paquet installé recommande un redémarrage. Le second fichier liste lesquels. - -## Quelques pièges - -**Les fichiers de configuration modifiés.** Si tu as personnalisé un `/etc/...` dont le paquet propose une nouvelle version, unattended-upgrades va voir un conflit et laisser tomber l'installation par défaut (option `--force-confdef`). C'est généralement le bon comportement, mais ça veut dire que certaines mises à jour resteront en attente jusqu'à une intervention manuelle. Les logs te le diront. - -**Les paquets blacklistés.** Tu peux exclure des paquets précis de la mise à jour automatique : - -``` -Unattended-Upgrade::Package-Blacklist { - "libc6"; - "linux-image-.*"; -}; -``` - -À utiliser avec discernement — exclure libc6 ou le noyau, c'est précisément exclure les correctifs qui comptent le plus. Mais sur une machine où un reboot coûte cher, ça permet de garder le contrôle sur les paquets sensibles tout en automatisant le reste. - -**Les dépôts tiers.** Par défaut, seuls les dépôts Debian officiels sont concernés. Si tu utilises un PPA ou un dépôt comme celui de Docker ou de PostgreSQL, il faut explicitement l'ajouter dans `Origins-Pattern`. Sinon, ces paquets ne sont jamais mis à jour automatiquement — ce qui peut être un piège silencieux. - -## Pour conclure - -L'automatisation des mises à jour de sécurité sur Debian, ce n'est pas une boîte noire : c'est un script qui tourne une fois par jour, qui lit deux fichiers texte, et qui appelle `apt` avec des règles bien définies. Une fois qu'on a compris ça, le configurer revient à éditer ces deux fichiers selon ses contraintes — niveau de risque, fenêtre de reboot acceptable, notifications souhaitées. - -Le minimum vital sur un serveur exposé tient en quatre points : `unattended-upgrades` installé, le périmètre limité aux dépôts `-security`, les notifications mail activées, et un coup d'œil régulier à `/var/run/reboot-required` pour ne pas oublier les redémarrages. Le reste, c'est de l'ajustement selon le contexte. \ No newline at end of file diff --git a/9f794c3d-714b-4b6d-8a5e-d56f7d984cc1/files/opto_teleinfo_1.png b/9f794c3d-714b-4b6d-8a5e-d56f7d984cc1/files/opto_teleinfo_1.png deleted file mode 100644 index 0f25408..0000000 Binary files a/9f794c3d-714b-4b6d-8a5e-d56f7d984cc1/files/opto_teleinfo_1.png and /dev/null differ diff --git a/9f794c3d-714b-4b6d-8a5e-d56f7d984cc1/files/teleinformation-modulee-ask-50-khz.jpg b/9f794c3d-714b-4b6d-8a5e-d56f7d984cc1/files/teleinformation-modulee-ask-50-khz.jpg deleted file mode 100644 index 89c0f80..0000000 Binary files a/9f794c3d-714b-4b6d-8a5e-d56f7d984cc1/files/teleinformation-modulee-ask-50-khz.jpg and /dev/null differ diff --git a/9f794c3d-714b-4b6d-8a5e-d56f7d984cc1/index.md b/9f794c3d-714b-4b6d-8a5e-d56f7d984cc1/index.md deleted file mode 100644 index aab53a6..0000000 --- a/9f794c3d-714b-4b6d-8a5e-d56f7d984cc1/index.md +++ /dev/null @@ -1,85 +0,0 @@ -# Démodulation ASK - -Les compteurs électroniques Linky fournis par Enedis (anciennement EDF/ERDF) transmettent automatiquement leurs informations via une **liaison Téléinformation (TIC)**. Cette liaison fonctionne comme une communication série, mais le signal brut n’est **pas directement exploitable** en TTL ou RS232 : il nécessite un **conditionnement électrique** pour être compatible avec un microcontrôleur ou un ordinateur. - -Une fois ce traitement effectué, il est possible de récupérer les données suivantes : - -- la **consommation instantanée**, -- les **index d’énergie (kWh)**, -- l’**intensité utilisée**, -- la **puissance maximale autorisée**, -- et d’autres informations selon les modes du compteur. - ---- - -La transmission s’effectue via une **modulation ASK (Amplitude Shift Keying) à 50 kHz** : - -- **0 V** → bit logique **1**, -- **~10 V crête à 50 kHz** → bit logique **0**. - -Ainsi, le compteur encode les bits en faisant varier **l’amplitude** du signal. Pour être lisible par un microcontrôleur, ce signal doit être **démodulé** puis converti en **signal logique TTL**. - ---- - -L’accès à cette liaison se fait via les bornes **I1** et **A** du compteur : - -- **Sans charge connectée** : tension jusqu’à **13 V RMS max**. -- **Avec récepteur** : tension régulée autour de **6 V RMS ±10% à 50 kHz**, soit environ **12 V pic**, puissance minimale **130 mW**. - -Cette alimentation est suffisante pour alimenter un optocoupleur. - -![](teleinformation-modulee-ask-50-khz.jpg) - ---- - -La sortie Téléinfo doit être **protégée contre les court-circuits** et l’interface doit pouvoir **résister accidentellement à la tension secteur (230 V / 50 Hz)** en cas de mauvais branchement. - -Enedis impose également que la **charge maximale** sur les bornes I1–A n’excède pas **2 kΩ en parallèle**, pour que le compteur puisse délivrer correctement son signal. - ---- - -Pour réaliser mon interface Téléinfo vers Raspberry Pi, je me suis appuyé sur le schéma de Charles Hallard : - -- **Optocoupleur** : isolation galvanique et conversion du signal modulé en TTL. -- **Résistances adaptées** : pour respecter la charge maximale Téléinfo et assurer un signal correct. - -Le matériel utilisé : - -- Plaque pré-percée -- 2 résistances -- Optocoupleur (SFH620 ou équivalent) -- Bornier pour raccordement au compteur -- Câbles pour Raspberry Pi -- Câble réseau pour bornes TIC - -![](opto_teleinfo_1.png) - -Ce montage fonctionnait bien avec un Raspberry Pi 2. Mais plus avec un ESP8266. - ---- - -## Pourquoi ajouter un MOSFET dans l’interface Téléinfo ? -Hallard explique que l’**opto-coupleur seul** peut fournir un signal instable, peu compatible avec certains microcontrôleurs (ESP32, ESP8266, Raspberry Pi). ([hallard.me](https://hallard.me/demystifier-la-teleinfo/)) - -Le **MOSFET N** (ex. BS170) permet de : - -- **Tampon logique** : transforme le signal opto en un signal carré propre, avec des niveaux 0 V / Vcc conformes aux GPIO. -- **Correction de polarité** : inverse le signal si nécessaire pour correspondre au protocole Téléinfo. -- **Fiabilité** : front net et signal stable, même à 9600 bauds. -- **Respect de la charge Téléinfo** : limite la charge vue par le compteur tout en délivrant un signal TTL fiable. - ---- - -## Décoder l’ASK = -Grâce à l’interface (opto + MOSFET), la **démodulation ASK** est déjà assurée. Le flux Téléinfo est désormais disponible en **signal TTL stable**. - -Il suffit ensuite de lire ce flux série pour décoder les trames Téléinfo au format ASCII. - -Matériel conseillé : - -- **Raspberry Pi** : analyser, stocker, ou intégrer les données dans un système domotique via Python ou Node-RED. - Voir : -- **ESP32 / ESP8266** : lecture compacte et connectée, envoi vers serveur, MQTT, ou interface web. - Voir : - -Ces équipements lisent le signal TTL, décodent les trames normalisées et rendent disponibles des informations comme : consommation instantanée, index, puissance souscrite, et états du compteur. \ No newline at end of file diff --git a/9f794c3d-714b-4b6d-8a5e-d56f7d984cc1/meta.json b/9f794c3d-714b-4b6d-8a5e-d56f7d984cc1/meta.json deleted file mode 100644 index efda07c..0000000 --- a/9f794c3d-714b-4b6d-8a5e-d56f7d984cc1/meta.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "uuid": "9f794c3d-714b-4b6d-8a5e-d56f7d984cc1", - "slug": "circuit-de-demodulation-ask", - "title": "Démodulation ASK", - "author": "cedric@abonnel.fr", - "published": true, - "published_at": "2025-11-23 08:38:53", - "created_at": "2025-11-23 08:38:53", - "updated_at": "2025-11-23 08:38:53", - "revisions": [], - "cover": "", - "files_meta": [], - "external_links": [], - "seo_title": "", - "seo_description": "", - "og_image": "", - "category": "Électronique" -} diff --git a/_cache/articles/093711bf-4e60-4ea8-ba73-928d2d67776c.json b/_cache/articles/093711bf-4e60-4ea8-ba73-928d2d67776c.json deleted file mode 100644 index 2db801c..0000000 --- a/_cache/articles/093711bf-4e60-4ea8-ba73-928d2d67776c.json +++ /dev/null @@ -1 +0,0 @@ -{"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 EFF’s blog.\nAs we announced earlier this year, Let’s 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é","content":"# Certificats Let's Encrypt à 6 jours : faut-il sauter le pas ?\n\n> Guide DevOps / WebOps pour comprendre les certificats à durée de vie courte (`shortlived`) et décider si vous devez migrer.\n\n---\n\n## TL;DR\n\nLet'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.\n\n---\n\n## 1. De quoi on parle\n\nDepuis 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.\n\nConcrè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.\n\n### Les profils disponibles\n\n| Profil | Durée | Usage |\n|---|---|---|\n| `classic` (défaut) | 90 jours | Tout le monde, par défaut |\n| `shortlived` | ~6 jours | Adopters précoces, certs sur IP (obligatoire) |\n| `tlsserver` | 90 jours | Variante optimisée serveur web (sans clientAuth) |\n\n---\n\n## 2. Pourquoi Let's Encrypt pousse vers le court\n\nQuatre raisons techniques, par ordre d'importance.\n\n### 2.1 La révocation TLS est cassée — autant l'éviter\n\nC'est le vrai sujet. Le mécanisme de révocation des certificats (CRL, OCSP) n'a jamais fonctionné correctement à grande échelle :\n\n- **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.\n- **OCSP stapling** mal configuré sur beaucoup de serveurs.\n- **CRLite, OneCRL** : couvertures partielles, déploiement client incohérent.\n- **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.\n\nAvec 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.\n\n### 2.2 Réduire la fenêtre de compromission\n\nSi 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.\n\nC'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.\n\n### 2.3 Forcer une automatisation propre\n\nPersonne 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.\n\nL'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.\n\n### 2.4 Agilité cryptographique\n\nSi 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).\n\n---\n\n## 3. Pourquoi vous pourriez ne *pas* migrer\n\nSoyons honnêtes : pour la plupart des infras web classiques, le 90 jours suffit largement. Le 6 jours a des coûts réels.\n\n### 3.1 Pression sur le rate limiting\n\nLet'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.\n\n**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).\n\n### 3.2 Dépendance critique au CA et au réseau\n\nÀ 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.\n\nConséquences concrètes :\n- Il faut un **monitoring sérieux** de l'expiration des certs (Prometheus blackbox exporter, `check_ssl_cert`, etc.).\n- Il faut un **fallback** : second client ACME, second account, ou cert de secours d'une autre CA.\n- Il faut absolument que la résolution DNS et le port 80/443 sortants depuis votre serveur soient fiables.\n\n### 3.3 Charge sur les systèmes de déploiement\n\nChaque 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.\n\nSur 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.\n\n### 3.4 Logs, audit, conformité\n\nCertains 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.\n\n### 3.5 Le cas \"monitoring TLS externe\"\n\nSi 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.\n\n---\n\n## 4. Décision : grille de lecture\n\n| Situation | Recommandation |\n|---|---|\n| Serveurs web classiques, renouvellement Certbot qui marche, < 20 certs | Restez en 90 jours. Le bénéfice marginal ne justifie pas le risque. |\n| Vous gérez des **certs sur IP** | Pas le choix : `shortlived` est obligatoire. |\n| Architecture critique avec rotation de clés agressive (banque, santé, infra publique) | Migrez. Le 6 jours est aligné avec vos exigences de sécurité. |\n| Infra dev/staging interne | Excellent terrain de test. Migrez d'abord ici pour valider votre pipeline. |\n| 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. |\n| Vous publiez via reverse proxy unique (un seul cert SAN pour plusieurs services) | Bon candidat. Un seul renouvellement à fiabiliser. |\n| 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. |\n\n---\n\n## 5. Comment migrer concrètement (Certbot)\n\n### 5.1 Pré-requis\n\nAvant tout :\n\n1. **Certbot 4.0+** pour `--preferred-profile`, **5.3+** pour `--ip-address`, **5.4+** pour `webroot` avec IP.\n2. Un renouvellement automatique opérationnel et **vérifié** (timer systemd ou cron actif, testé avec `certbot renew --dry-run`).\n3. Un monitoring d'expiration des certs en place. Si vous n'en avez pas, installez-le **avant** de migrer.\n4. Un hook de reload du serveur web qui fonctionne (`--deploy-hook`).\n\n### 5.2 Test sur le staging Let's Encrypt\n\n```bash\nsudo certbot certonly --staging \\\n --preferred-profile shortlived \\\n --webroot \\\n --webroot-path /var/www/html \\\n -d test.example.com\n```\n\nVérifier que le cert obtenu a bien une durée de 6 jours :\n\n```bash\nopenssl x509 -in /etc/letsencrypt/live/test.example.com/cert.pem -noout -dates\n```\n\n### 5.3 Renouvellement plus fréquent\n\nPar 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 :\n\n```bash\n# Renouvelle si moins de 4 jours restants (au lieu de 2 par défaut)\ncertbot renew --deploy-hook \"systemctl reload nginx\"\n```\n\nLe timer Certbot tourne deux fois par jour par défaut, ce qui est suffisant. Pas besoin de l'accélérer.\n\n### 5.4 Cas d'un certificat sur IP\n\n```bash\nsudo certbot certonly \\\n --preferred-profile shortlived \\\n --webroot \\\n --webroot-path /var/www/html \\\n --ip-address 203.0.113.42\n```\n\nNote 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//fullchain.pem` et `privkey.pem`, et configurer un `--deploy-hook` pour le reload.\n\n### 5.5 Plan de bascule recommandé\n\n1. **Semaine 1-2** : un domaine non critique (un sous-domaine de test, un service interne) en `shortlived`. Surveillez les renouvellements.\n2. **Semaine 3-4** : étendez à la moitié de votre dev/staging.\n3. **Semaine 5-6** : migration progressive en prod, en commençant par les services les moins critiques.\n4. **À tout moment** : possibilité de retour arrière en supprimant `--preferred-profile shortlived` du fichier de config Certbot dans `/etc/letsencrypt/renewal/.conf`.\n\n---\n\n## 6. Pièges à éviter\n\n- **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.\n- **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.\n- **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.\n- **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.\n- **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.\n\n---\n\n## 7. Verdict\n\nLe 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.\n\nLa 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.**\n\nPour 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 :\n- Vous avez besoin de certs sur IP (obligatoire).\n- Vous exploitez des services à forte exigence de sécurité (clés très sensibles).\n- Vous voulez tester votre résilience opérationnelle (le 6 jours est un excellent test de fiabilité de votre stack).\n\nLe 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).\n\n---\n\n## Sources\n\n- [Let's Encrypt — Six-Day and IP Address Certificates Available in Certbot](https://letsencrypt.org/2026/03/11/shorter-certs-certbot) (mars 2026)\n- [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)\n- [Documentation Certbot — Hooks](https://eff-certbot.readthedocs.io/en/stable/using.html#hooks)\n- [CA/Browser Forum Baseline Requirements](https://cabforum.org/baseline-requirements-documents/)","featured":false,"tags":[]} \ No newline at end of file diff --git a/_cache/articles/0bba1ad7-e4cb-49a6-9467-fcfac2e09a93.json b/_cache/articles/0bba1ad7-e4cb-49a6-9467-fcfac2e09a93.json deleted file mode 100644 index 466f4bb..0000000 --- a/_cache/articles/0bba1ad7-e4cb-49a6-9467-fcfac2e09a93.json +++ /dev/null @@ -1 +0,0 @@ -{"uuid":"0bba1ad7-e4cb-49a6-9467-fcfac2e09a93","slug":"deuxiemes-pas-devops-durcir-et-fiabiliser-un-serveur-debian","title":"Deuxièmes pas DevOps : durcir et fiabiliser un serveur Debian","author":"cedric@abonnel.fr","published":true,"published_at":"2026-06-08 07:00","created_at":"2026-05-12 23:01:34","updated_at":"2026-05-12 23:29:17","revisions":[],"cover":"cover.jpg","files_meta":{"cover.jpg":{"author":"","source_url":""}},"external_links":[{"url":"https://varlog.a5l.fr/post/post-install","name":"Premiers pas DevOps : préparer un système Debian fraîchement installé","added_at":"2026-05-12 23:18:02","author":"Cédrix","meta":{"mime":"text/html","description":"Lorsqu'on vient de provisionner une machine Debian — que ce soit un conteneur LXC, une VM ou un serveur dédié — quelques étapes initiales sont incontourna…"}}],"seo_title":"","seo_description":"","og_image":"https://varlog.a5l.fr/file?uuid=0bba1ad7-e4cb-49a6-9467-fcfac2e09a93&name=cover.jpg","category":"informatique","content":"# Deuxièmes pas DevOps : durcir et fiabiliser un serveur Debian\n\nUne fois le système de base configuré (dépôts, mises à jour, `sudo`, identification — sujets traités dans l'article précédent), la machine est fonctionnelle mais encore vulnérable et un peu fragile pour un usage sérieux. Ce deuxième article s'attaque aux gestes qui transforment un serveur « qui marche » en un serveur sur lequel on peut raisonnablement faire tourner quelque chose : sécuriser l'accès SSH, mettre en place un pare-feu, automatiser les correctifs de sécurité et soigner quelques détails opérationnels.\n\n## Sécuriser l'accès SSH\n\nSSH est la porte d'entrée principale d'un serveur Linux. C'est aussi, statistiquement, la cible la plus attaquée : n'importe quelle IP publique reçoit en permanence des tentatives de connexion automatisées. Deux gestes simples changent radicalement la donne.\n\n### Passer à l'authentification par clé\n\nLes mots de passe, même longs, restent vulnérables aux attaques par force brute et au phishing. Une paire de clés cryptographiques est à la fois plus sûre et plus pratique au quotidien.\n\nCôté poste de travail, on génère une paire de clés modernes :\n\n```bash\nssh-keygen -t ed25519 -C \"cedrix@laptop\"\n```\n\nL'algorithme `ed25519` est aujourd'hui le choix par défaut recommandé : clés courtes, signatures rapides, sécurité solide. Le commentaire (`-C`) facilite l'identification de la clé quand on en gère plusieurs.\n\nOn copie ensuite la clé publique sur le serveur :\n\n```bash\nssh-copy-id utilisateur@serveur\n```\n\nCette commande dépose la clé publique dans `~/.ssh/authorized_keys` côté serveur avec les bonnes permissions. À partir de là, la connexion se fait sans saisir de mot de passe — il faut tester depuis une nouvelle session avant de passer à l'étape suivante, sous peine de risquer de se retrouver enfermé dehors.\n\n### Désactiver la connexion root et les mots de passe\n\nUne fois la connexion par clé validée, on durcit la configuration SSH. Le fichier à modifier est `/etc/ssh/sshd_config` :\n\n```bash\nsudo nano /etc/ssh/sshd_config\n```\n\nLes directives importantes à positionner (ou décommenter) sont :\n\n```\nPermitRootLogin no\nPasswordAuthentication no\nPubkeyAuthentication yes\n```\n\nLa première interdit toute connexion directe en `root` via SSH : on devra obligatoirement se connecter avec un utilisateur normal puis élever ses droits via `sudo`. La deuxième supprime complètement l'authentification par mot de passe, ne laissant plus que les clés. La troisième confirme explicitement que l'authentification par clé est active.\n\nOn recharge ensuite le service pour appliquer les changements :\n\n```bash\nsudo systemctl reload ssh\n```\n\nImportant : garder la session SSH actuelle ouverte et tester la nouvelle configuration depuis un autre terminal avant de fermer la première. En cas de problème, on peut encore corriger le tir.\n\nPour aller un cran plus loin, changer le port SSH par défaut (22) vers un port moins évident réduit considérablement le bruit dans les logs. Ce n'est pas de la sécurité au sens strict (un scan le retrouvera), mais c'est un filtre efficace contre les attaques automatisées.\n\n## Mettre en place un pare-feu\n\nPar défaut, Debian n'a aucun pare-feu actif. Tout port ouvert par un service installé sera donc directement exposé. Deux outils standards existent : `nftables` (le successeur officiel d'`iptables`, bas niveau et puissant) et `ufw` (une surcouche pensée pour la simplicité). Pour démarrer, `ufw` est le bon compromis.\n\n```bash\nsudo apt install ufw\n```\n\nLa logique consiste à tout bloquer en entrée par défaut, puis à n'ouvrir explicitement que ce qui doit l'être :\n\n```bash\nsudo ufw default deny incoming\nsudo ufw default allow outgoing\nsudo ufw allow ssh\nsudo ufw enable\n```\n\nSi SSH écoute sur un port non standard, remplacer `ufw allow ssh` par `ufw allow 2222/tcp` (ou le port choisi). Oublier cette étape avant un `ufw enable` est un grand classique du verrouillage involontaire.\n\nPour les services web, on ouvrira typiquement les ports 80 et 443 :\n\n```bash\nsudo ufw allow 80/tcp\nsudo ufw allow 443/tcp\n```\n\nL'état du pare-feu se vérifie avec :\n\n```bash\nsudo ufw status verbose\n```\n\nSur une architecture où la machine est derrière un reverse proxy (cas fréquent quand on expose plusieurs services sur un même domaine), seuls les ports utiles côté proxy doivent être ouverts au monde extérieur. Les services applicatifs eux-mêmes restent accessibles uniquement depuis le réseau interne.\n\n## Automatiser les correctifs de sécurité\n\nLes failles de sécurité ne préviennent pas, et personne n'a envie de lancer manuellement `apt upgrade` chaque matin sur dix machines. Le paquet `unattended-upgrades` applique automatiquement les mises à jour du dépôt `security`.\n\n```bash\nsudo apt install unattended-upgrades\nsudo dpkg-reconfigure --priority=low unattended-upgrades\n```\n\nLa configuration se trouve ensuite dans `/etc/apt/apt.conf.d/50unattended-upgrades`. Par défaut, seuls les correctifs de sécurité sont appliqués automatiquement, ce qui est généralement le bon compromis : on profite des patches critiques sans risquer qu'une mise à jour fonctionnelle introduise une régression sur un service en production.\n\nQuelques options qui méritent l'attention dans ce fichier :\n\n- `Unattended-Upgrade::Automatic-Reboot` : à régler sur `\"true\"` si l'on accepte les redémarrages automatiques après une mise à jour de noyau, ou `\"false\"` si l'on préfère les piloter à la main. La directive `Automatic-Reboot-Time` permet alors de choisir l'horaire.\n- `Unattended-Upgrade::Mail` : pour recevoir un rapport par mail des mises à jour appliquées, à condition d'avoir un MTA configuré sur la machine.\n\nLe bon réflexe consiste à vérifier de temps en temps les logs dans `/var/log/unattended-upgrades/` pour s'assurer que tout se déroule sans heurts.\n\n## Soigner les détails opérationnels\n\nQuelques outils complémentaires améliorent significativement le confort et la résilience d'un serveur.\n\n**Fail2ban** surveille les logs d'authentification et bannit temporairement les IP qui tentent trop de connexions échouées. Même avec SSH par clé uniquement, le service réduit considérablement le bruit dans les journaux :\n\n```bash\nsudo apt install fail2ban\n```\n\nLa configuration par défaut surveille déjà SSH ; elle peut être étendue à d'autres services (nginx, Postfix, etc.) via des fichiers dans `/etc/fail2ban/jail.d/`.\n\n**Logwatch** ou **journalctl** méritent qu'on s'y attarde. Sur une Debian récente, `journalctl` est l'outil central pour consulter les logs systemd :\n\n```bash\njournalctl -u ssh --since \"1 hour ago\"\njournalctl -p err --since today\n```\n\nPrendre l'habitude de jeter un œil aux logs régulièrement — ou de mettre en place une remontée centralisée si l'on gère plusieurs machines — change beaucoup de choses en exploitation.\n\n**Un swap raisonnable**, sur une VM ou un serveur dédié, évite que la machine ne devienne complètement injoignable en cas de pic de consommation mémoire. Sur un conteneur LXC en revanche, c'est généralement géré au niveau de l'hyperviseur.\n\n## Et après ?\n\nAvec ces réglages, le serveur est dans un état correct pour accueillir des services réels : la surface d'attaque est réduite, les correctifs s'appliquent tout seuls, et les logs racontent ce qui se passe. La suite logique est l'installation de la pile applicative proprement dite (serveur web, base de données, runtime) et la mise en place d'un reverse proxy pour exposer plusieurs services derrière un même point d'entrée.\n\nComme évoqué dans le premier article, le moment où l'on commence à enchaîner ces étapes sur plusieurs machines est exactement celui où il faut basculer vers de l'automatisation : un script shell bien rangé pour commencer, puis Ansible ou un équivalent quand le parc grossit. Une bonne pratique consiste à versionner ces scripts dans un dépôt Git dédié à l'infrastructure, au même titre que le code applicatif.","featured":false,"tags":[]} \ No newline at end of file diff --git a/_cache/articles/0e0b8d1d-3352-4ab7-bc70-7bc1f02ee485.json b/_cache/articles/0e0b8d1d-3352-4ab7-bc70-7bc1f02ee485.json deleted file mode 100644 index b03e48c..0000000 --- a/_cache/articles/0e0b8d1d-3352-4ab7-bc70-7bc1f02ee485.json +++ /dev/null @@ -1 +0,0 @@ -{"uuid":"0e0b8d1d-3352-4ab7-bc70-7bc1f02ee485","slug":"imagemagick-sur-debian-pourquoi-convert-im6-et-ou-trouver-magick","title":"ImageMagick sur Debian : pourquoi `convert-im6` et où trouver `magick`","author":"cedric@abonnel.fr","published":true,"published_at":"2025-12-28 15:32","created_at":"2025-12-28 15:32:01","updated_at":"2026-05-12 00:29:00","revisions":[{"n":1,"date":"2026-05-12 00:29:00","comment":"","title":"ImageMagick sur Debian : pourquoi `convert-im6` et où trouver `magick`"}],"cover":"cover.svg","files_meta":{"45de275c5f174797-24653.svg":{"author":"","source_url":""},"7ee02eb092b334c4-23450.svg":{"author":"","source_url":""}},"external_links":[],"seo_title":"","seo_description":"","og_image":"","category":"linux","content":"# ImageMagick sur Debian : pourquoi `convert-im6` et où trouver `magick`\n\nSi tu as déjà installé ImageMagick sur un serveur Debian, tu es probablement tombé sur cette étrangeté : la commande `convert` historique est là, mais elle s'appelle `convert-im6`. Et la commande moderne `magick`, présente partout ailleurs, semble manquer à l'appel — sauf si tu es sur Debian 13, où elle est revenue.\n\nLe sujet est un peu plus subtil qu'il n'y paraît, et beaucoup d'explications qui circulent sur le web sont fausses (notamment celle qui prétend que `convert` entrerait en conflit avec un binaire de `util-linux` — c'est un mythe). Voilà ce qui se passe réellement.\n\n## Un peu de contexte sur ImageMagick\n\nImageMagick, c'est une suite d'outils en ligne de commande pour manipuler des images : conversion de formats, redimensionnement, compression, génération de vignettes, watermarks, lecture de métadonnées… Le genre d'outil qu'on retrouve aussi bien dans un script bash de cinq lignes que dans une chaîne de traitement industrielle ou un pipeline CI.\n\nHistoriquement, la suite est composée de plusieurs binaires distincts, chacun avec son rôle : `convert` pour la conversion, `identify` pour lire les métadonnées, `mogrify` pour le traitement par lot, `composite` pour combiner des images, `montage` pour les planches. C'est l'architecture d'**ImageMagick 6**, la version qui a régné en maître pendant une bonne quinzaine d'années.\n\nDepuis 2016, **ImageMagick 7** est disponible. Le grand changement, c'est qu'il unifie tout derrière une seule commande : `magick`. Les anciennes commandes deviennent des sous-commandes (`magick convert`, `magick identify`, etc.), même si pour la rétrocompatibilité un binaire `magick` peut continuer à se comporter comme `convert` quand on l'appelle avec une syntaxe d'IM6.\n\n## Pourquoi le suffixe `-im6` sur Debian\n\nC'est ici que beaucoup d'articles racontent n'importe quoi. La vraie raison n'a rien à voir avec un conflit avec `util-linux` — je l'ai vérifié, aucun paquet système ne fournit de commande `convert`. Tu peux le vérifier toi-même : `dpkg -S /usr/bin/convert` ne renvoie rien qui vienne de util-linux.\n\nLa vraie raison est plus prosaïque. Pendant des années, Debian a voulu pouvoir **packager IM6 et IM7 en parallèle** dans la même distribution, pour permettre une transition en douceur. Le souci, c'est que les deux versions fournissent des binaires aux mêmes noms (`convert`, `identify`, `mogrify`…) avec des comportements légèrement différents. Impossible de les installer côte à côte sans renommer.\n\nLa solution adoptée par les mainteneurs Debian a été d'ajouter un suffixe explicite au nom de chaque binaire :\n\n- les outils d'IM6 deviennent `convert-im6.q16`, `identify-im6.q16`, etc.\n- les outils d'IM7 deviennent `magick-im7.q16` et compagnie\n\nLe `.q16` indique la profondeur quantique du binaire (16 bits par canal, la valeur par défaut), et le `-im6` / `-im7` indique la version d'ImageMagick. Les noms classiques (`convert`, `magick`) ne sont alors que des symlinks gérés par `update-alternatives`, qui pointent vers la version active. C'est le même mécanisme que pour `java`, `editor`, ou `python` à une époque.\n\n## Ce qui change entre Debian 11, 12 et 13\n\nC'est l'autre point que la plupart des articles ratent : la situation n'est pas la même selon la version de Debian.\n\nSur **Debian 11 (bullseye) et 12 (bookworm)**, le paquet `imagemagick` installe IM6 (version 6.9.11.60). Tu n'as que `convert-im6` et ses copains, et `magick` n'existe pas dans les dépôts officiels (le paquet `imagemagick-7.q16` existe mais n'est pas le défaut). C'est cette situation que décrivent la plupart des tutoriels qui traînent sur le web.\n\nSur **Debian 13 (trixie)**, sorti en août 2025, le défaut a basculé sur IM7 (version 7.1.1.43). La commande `magick` est disponible, et `convert` est désormais un symlink vers `magick-im7.q16`. Tu peux le vérifier :\n\n```bash\n$ readlink -f /usr/bin/convert\n/usr/bin/magick-im7.q16\n```\n\nAutrement dit, sur Trixie, si tu écris `convert image.jpg image.png`, tu appelles en réalité IM7 sous un nom d'IM6. Ça fonctionne pour la plupart des usages, mais attention : IM7 est plus strict sur l'ordre des arguments en ligne de commande (`magick [INPUT-OPTIONS] INPUT [OUTPUT-OPTIONS] OUTPUT`), donc certains scripts anciens peuvent grogner.\n\n## Correspondance entre les deux versions\n\n| ImageMagick 6 (Debian 11/12) | ImageMagick 7 (Debian 13) |\n| ---------------------------- | ------------------------- |\n| `convert-im6` | `magick` |\n| `identify-im6` | `magick identify` |\n| `mogrify-im6` | `magick mogrify` |\n| `composite-im6` | `magick composite` |\n\nPour les cas simples, le comportement est identique. Une commande de redimensionnement classique passe sans modification :\n\n```bash\n# Debian 11/12\nconvert-im6 photo.jpg -resize 1600x1600 photo_reduite.jpg\n\n# Debian 13\nmagick photo.jpg -resize 1600x1600 photo_reduite.jpg\n```\n\n## Faut-il s'inquiéter sur un serveur en production ?\n\nSi tu administres une machine Debian 12 ou plus ancienne, non. IM6 est toujours activement maintenu pour les CVE (les correctifs sont régulièrement backportés dans les paquets stable), et la plupart des scripts existants continueront de fonctionner. Le `-im6` dans le nom du binaire est juste du marquage, pas une dépréciation.\n\nSi tu migres vers Debian 13, prévois un peu de temps pour relire tes scripts. Les pièges classiques :\n\n- l'ordre des options qui devient plus strict ;\n- quelques comportements de couleur et d'alpha qui ont changé entre les deux versions, notamment sur les opérations chaînées ;\n- le fichier `policy.xml` qui a déménagé : `/etc/ImageMagick-6/` devient `/etc/ImageMagick-7/`. Si tu avais assoupli les restrictions sur les PDF ou PostScript (un grand classique), il faut reporter la modification.\n\nPour un projet PHP comme les tiens, l'extension Imagick côté PHP est sensible à cette transition : la version compilée doit correspondre à la version d'IM installée, sinon `pecl install imagick` échoue. Sur Trixie, c'est IM7 qu'il faut lier.\n\n## En pratique\n\nSur Debian 11/12, utilise `convert-im6`, `identify-im6`, etc. C'est la convention locale, pas une version dégradée. Si tu veux `magick` malgré tout, tu peux installer le paquet `imagemagick-7.q16` (présent dans les dépôts depuis bookworm) et basculer les alternatives manuellement, mais ce n'est presque jamais nécessaire.\n\nSur Debian 13, utilise `magick` directement. La commande `convert` reste disponible par compatibilité, mais elle pointe en réalité vers IM7 — autant utiliser le nom officiel.\n\nEt dans tous les cas, évite les alias globaux qui réécrivent `convert` : ça finit toujours par mordre quelqu'un, soit toi dans six mois, soit le prochain qui reprendra le serveur.","featured":false,"tags":[]} \ No newline at end of file diff --git a/_cache/articles/0eaa0f05-7f48-47b4-91d3-3ba4ac80fe50.json b/_cache/articles/0eaa0f05-7f48-47b4-91d3-3ba4ac80fe50.json deleted file mode 100644 index 38504a7..0000000 --- a/_cache/articles/0eaa0f05-7f48-47b4-91d3-3ba4ac80fe50.json +++ /dev/null @@ -1 +0,0 @@ -{"uuid":"0eaa0f05-7f48-47b4-91d3-3ba4ac80fe50","slug":"clearview-ai-quand-l-intelligence-artificielle-depasse-les-limites-du-public","title":"Clearview AI : quand l’intelligence artificielle dépasse les limites du « public »","author":"cedric@abonnel.fr","published":true,"published_at":"2025-11-05 07:15:36","created_at":"2025-11-05 07:15:36","updated_at":"2025-11-05 07:15:36","revisions":[],"cover":"","category":"actualité","content":"# Clearview AI : quand l’intelligence artificielle dépasse les limites du « public »\n\nEn 2019, une start-up américaine du nom de **Clearview AI** fait irruption dans le monde de la reconnaissance faciale. Son idée paraît révolutionnaire : créer une base de données géante pour identifier n’importe qui à partir d’une simple photo. Pour nourrir son intelligence artificielle, l’entreprise collecte **des milliards d’images publiques** issues de plateformes comme **Facebook, LinkedIn, Twitter ou encore YouTube**. Chaque cliché, chaque visage devient une donnée utile à l’algorithme — mais sans que les personnes concernées n’en soient informées, ni qu’elles aient donné leur **consentement**.\n\nRapidement, l’ampleur du projet suscite la controverse. Des journalistes révèlent les pratiques de Clearview, et les autorités de protection des données s’en emparent. En **France**, la **CNIL** sanctionne l’entreprise pour traitement illégal de données biométriques. Le **régulateur britannique** fait de même, imposant des amendes et **interdisant l’usage de ces données en Europe**. Ce scandale devient un symbole : il montre que même à l’ère numérique, la **vie privée** reste un droit fondamental, et que la technologie ne peut pas s’affranchir des règles éthiques et juridiques.\n\nL’affaire Clearview soulève un **enjeu majeur** : la frontière entre le **contenu public** et le **contenu libre d’usage**. Ce n’est pas parce qu’une image est visible en ligne qu’elle peut être exploitée pour entraîner une IA. Cette logique s’applique aussi à des plateformes comme **LinkedIn** : les informations qu’on y partage publiquement ne deviennent pas pour autant un matériau libre pour les algorithmes.\n\nAinsi, Clearview AI incarne à la fois la puissance et le danger de l’intelligence artificielle : un outil capable du meilleur, mais aussi du pire, lorsqu’il franchit la ligne fragile entre innovation et intrusion.\n","featured":false,"files_meta":[],"external_links":[],"tags":[]} \ No newline at end of file diff --git a/_cache/articles/104a8694-4268-4e0a-99c7-e7ecfd47af1e.json b/_cache/articles/104a8694-4268-4e0a-99c7-e7ecfd47af1e.json deleted file mode 100644 index d9dcf25..0000000 --- a/_cache/articles/104a8694-4268-4e0a-99c7-e7ecfd47af1e.json +++ /dev/null @@ -1 +0,0 @@ -{"uuid":"104a8694-4268-4e0a-99c7-e7ecfd47af1e","slug":"auto-heberger-son-serveur-mail-en-2026","title":"Auto-héberger son serveur mail en 2026","author":"cedric@abonnel.fr","published":true,"published_at":"2026-05-12 08:35","created_at":"2026-05-12 08:38:14","updated_at":"2026-05-12 08:40:06","revisions":[{"n":1,"date":"2026-05-12 08:38:44","comment":"","title":"Auto-héberger son serveur mail en 2026"},{"n":2,"date":"2026-05-12 08:38:59","comment":"","title":"Auto-héberger son serveur mail en 2026"},{"n":3,"date":"2026-05-12 08:40:06","comment":"","title":"Auto-héberger son serveur mail en 2026"}],"cover":"cover.svg","files_meta":{"0f3d320c9347704b-35316.svg":{"author":"Cédrix","source_url":""},"cover.svg":{"author":"","source_url":""},"_thumb_b7a3540aaf062cdb-1682326.jpg":{"author":"","source_url":""}},"external_links":[{"url":"https://www.clubic.com/dossier-612034-proton-mail-infomaniak-la-souverainete-de-vos-emails-reste-une-illusion-face-aux-regles-dictees-par-google.html","name":"Proton Mail, Infomaniak : la souveraineté de vos emails reste une illusion face aux règles dictées par Google","added_at":"2026-05-12 08:40:03","meta":{"mime":"text/html","size":333873,"description":"Proton Mail, La Poste, Infomaniak, Mailo... les messageries \"souveraines\" se multiplient. Mais elles reposent toutes sur le même protocole conçu en 1982 aux États-Unis, sans authentification native et sans chiffrement. Les normes de sécurité ajoutées depuis ont été définies par Yahoo, Cisco, Microsoft et Google. Et Gmail filtre une part considérable du trafic email mondial, sans que l'Europe ne puisse dire quoi que ce soit.","og_image":"/file?uuid=104a8694-4268-4e0a-99c7-e7ecfd47af1e&name=_thumb_b7a3540aaf062cdb-1682326.jpg","site_name":"clubic.com","og_type":"article","language":"fr_FR","date":"2026-05-09T11:10:00+02:00","canonical":"https://www.clubic.com/dossier-612034-proton-mail-infomaniak-la-souverainete-de-vos-emails-reste-une-illusion-face-aux-regles-dictees-par-google.html"}}],"seo_title":"","seo_description":"","og_image":"","category":"informatique","content":"# Auto-héberger son serveur mail en 2026\n\n## Survivre aux règles de Gmail, Outlook et consorts\n\n> **Contexte** — Cet article de Clubic ([lien](https://www.clubic.com/dossier-612034-proton-mail-infomaniak-la-souverainete-de-vos-emails-reste-une-illusion-face-aux-regles-dictees-par-google.html)) rappelle une vérité technique : SMTP date de 1982, n'a aucune sécurité native, et toutes les \"rustines\" (SPF, DKIM, DMARC, MTA-STS, DANE) ont été conçues par Yahoo, Cisco, Microsoft, Google. Depuis février 2024 (Google) et mai 2025 (Microsoft), tout expéditeur dépassant 5000 mails/jour vers Gmail/Outlook doit configurer SPF + DKIM + DMARC, maintenir un taux de spam < 0,1 %, et fournir un lien de désinscription en un clic.\n>\n> Mais même en dessous de 5000/jour, ces règles s'appliquent en pratique : sans elles, ton mail finit en spam ou est rejeté. Ce dossier décrit comment monter son propre serveur mail tout en passant à travers ces filtres.\n\n---\n\n## Sommaire\n\n1. [Avant de commencer : est-ce vraiment une bonne idée ?](#1-avant-de-commencer--est-ce-vraiment-une-bonne-idée-)\n2. [Prérequis techniques](#2-prérequis-techniques)\n3. [Architecture cible](#3-architecture-cible)\n4. [Choix du fournisseur et de l'IP](#4-choix-du-fournisseur-et-de-lip)\n5. [Configuration DNS complète](#5-configuration-dns-complète)\n6. [Installation du stack mail](#6-installation-du-stack-mail)\n7. [SPF, DKIM, DMARC : les rustines obligatoires](#7-spf-dkim-dmarc--les-rustines-obligatoires)\n8. [MTA-STS, TLS-RPT, DANE : aller plus loin](#8-mta-sts-tls-rpt-dane--aller-plus-loin)\n9. [PTR (reverse DNS) et HELO](#9-ptr-reverse-dns-et-helo)\n10. [Warmup d'IP : la phase la plus délicate](#10-warmup-dip--la-phase-la-plus-délicate)\n11. [Postmaster Tools, SNDS, FBL](#11-postmaster-tools-snds-fbl)\n12. [Liste de désinscription en un clic (RFC 8058)](#12-liste-de-désinscription-en-un-clic-rfc-8058)\n13. [Anti-spam entrant et hygiène](#13-anti-spam-entrant-et-hygiène)\n14. [Monitoring, logs, alertes](#14-monitoring-logs-alertes)\n15. [Que faire quand Gmail rejette quand même ?](#15-que-faire-quand-gmail-rejette-quand-même-)\n16. [Checklist finale avant mise en prod](#16-checklist-finale-avant-mise-en-prod)\n17. [Annexes : commandes utiles](#17-annexes--commandes-utiles)\n\n---\n\n## 1. Avant de commencer : est-ce vraiment une bonne idée ?\n\nL'auto-hébergement mail est techniquement possible, mais c'est probablement le service le plus pénible à maintenir en 2026. Avant de te lancer, lis ça :\n\n**Ce qui marche bien en auto-hébergé :**\n- Recevoir du mail (presque tout le monde te livre).\n- Envoyer vers d'autres serveurs auto-hébergés ou pros bien configurés.\n- Garder le contrôle sur tes données, tes alias, tes domaines.\n\n**Ce qui est dur :**\n- Envoyer vers Gmail / Outlook / Yahoo / iCloud sans atterrir en spam.\n- Sortir d'une blacklist une fois dedans.\n- Maintenir un score de réputation IP correct sur la durée.\n- Survivre à un changement unilatéral des règles côté gros acteurs (cf. février 2024 et mai 2025).\n\n**Stratégie réaliste recommandée :**\n- Réception entrante : auto-hébergée à 100 %. Aucun risque, full contrôle.\n- Envoi sortant : deux options, selon ton volume et ton tolérance au risque.\n - **Option A — Pure auto-hébergée** : tu envoies directement depuis ton serveur. Faisable, mais demande un warmup, une IP propre, et un suivi continu.\n - **Option B — Smart host sortant** : tu envoies via un relais réputé (un autre de tes serveurs avec une IP qui a déjà sa réputation, ou un service type Mailjet/Sendgrid/SMTP2GO en bas volume gratuit). Tes mails sortent depuis l'IP du relais, qui a déjà sa réputation faite. C'est un compromis : tu perds une partie de la souveraineté technique, mais tu gagnes énormément en délivrabilité.\n\nLe reste du dossier suit l'option A — tout en t'expliquant comment basculer en B si nécessaire.\n\n---\n\n## 2. Prérequis techniques\n\n| Élément | Détail |\n|---|---|\n| Domaine | À toi, registrar peu importe, mais avec **DNSSEC activable** (cf. §8 pour DANE). |\n| Serveur | VPS ou dédié, **2 vCPU / 4 Go RAM minimum**, Debian 12+ ou Ubuntu 24.04 LTS. |\n| IP fixe v4 | Indispensable. **IP \"résidentielle\" ou IP de datacenter récemment recyclée = exclues**. |\n| IP fixe v6 | Recommandée, mais désactivable si l'IPv6 du fournisseur est blacklistée. |\n| PTR / reverse DNS | **Modifiable par toi**. Si l'hébergeur ne te le permet pas, change d'hébergeur. |\n| Ports | 25, 465, 587, 993, 4190 ouverts sortants ET entrants. **Le port 25 sortant est bloqué chez beaucoup d'hébergeurs grand public** (OVH résidentiel, Free, etc.) : vérifie avant. |\n| TLS | Certificat valide (Let's Encrypt suffit). |\n\n**Compétences attendues** : Linux en ligne de commande, DNS (champs A/AAAA/MX/TXT/SRV/CAA/TLSA), notion de TLS, lecture de logs `journalctl` et `/var/log/mail.log`.\n\n---\n\n## 3. Architecture cible\n\nUn stack standard, éprouvé, en logiciels libres :\n\n```\n ┌─────────────────────────────────────┐\n │ Internet (mails entrants/sortants) │\n └─────────────────────────────────────┘\n │\n ▼ port 25\n ┌────────────────┐\n │ Postfix │ ← MTA (envoi/réception SMTP)\n │ (SMTP / 25/587)│\n └────────────────┘\n │ │ │\n ▼ ▼ ▼\n ┌─────────┐ ┌─────────┐ ┌──────────┐\n │ Rspamd │ │OpenDKIM │ │ Dovecot │ ← IMAP/POP + LMTP\n │(spam, │ │ (signe │ │ (livrai- │\n │ DKIM │ │ DKIM) │ │ son aux │\n │ verif, │ └─────────┘ │ boîtes) │\n │ DMARC) │ └──────────┘\n └─────────┘ │\n ▼\n Maildir / utilisateurs\n```\n\n**Composants** :\n\n- **Postfix** : MTA. Reçoit, route, envoie le SMTP.\n- **Dovecot** : serveur IMAP/POP3, livraison locale (LMTP), authentification SASL pour Postfix, gestion Sieve (filtres).\n- **Rspamd** : antispam moderne, fait aussi la **vérification SPF/DKIM/DMARC entrante**, le greylisting, et — option recommandée — la **signature DKIM sortante** (en remplacement d'OpenDKIM).\n- **Let's Encrypt (certbot)** : TLS.\n- **(Optionnel) Roundcube ou SnappyMail** : webmail.\n\n**Alternative tout-en-un** : [Mailcow](https://mailcow.email/) ou [Mailu](https://mailu.io/), basés sur Docker, qui empaquètent tout ça avec une interface admin. Si tu préfères ne pas tout configurer à la main, c'est légitime — la majorité des règles DNS et de délivrabilité de ce dossier restent identiques.\n\n---\n\n## 4. Choix du fournisseur et de l'IP\n\nLe choix de l'hébergeur conditionne la moitié de ta délivrabilité. Avant de prendre un VPS :\n\n1. **Le port 25 sortant est-il ouvert ?** Beaucoup d'hébergeurs le bloquent par défaut pour limiter le spam (Hetzner l'ouvre sur demande, OVH l'ouvre selon le produit, Scaleway l'ouvre selon le compte). Pose la question au support **avant** de payer.\n2. **Le PTR est-il configurable ?** Si non, change.\n3. **L'IP a-t-elle été utilisée par un spammeur ?** Avant d'acheter le VPS, demande l'IP qu'on te donnera. Vérifie sur :\n - [mxtoolbox.com/blacklists.aspx](https://mxtoolbox.com/blacklists.aspx)\n - [multirbl.valli.org](https://multirbl.valli.org/)\n - [talosintelligence.com](https://www.talosintelligence.com/) (Cisco)\n - [senderscore.org](https://senderscore.org/)\n \n Si l'IP est listée sur Spamhaus, Barracuda, SORBS, SpamCop, **demande à l'hébergeur de te l'échanger** ou prends un autre VPS. Une fois listée, tu vas y passer des semaines.\n4. **Réputation du subnet (`/24`)**. Même si ton IP est propre, si le `/24` est pourri (beaucoup de spammeurs voisins), Gmail va te traiter avec méfiance. Vérifie sur [senderscore.org](https://senderscore.org/) en saisissant ton IP — le score du subnet apparaît.\n\n**Hébergeurs réputés corrects pour le mail** : Hetzner, OVH (gamme dédiée, pas SoYouStart), Scaleway, Infomaniak (en VPS), Netcup. À éviter pour de l'envoi : DigitalOcean (subnets souvent grillés), Linode/Akamai (idem), AWS EC2 (le port 25 est limité par défaut, et la rate-limit est costaude).\n\n---\n\n## 5. Configuration DNS complète\n\nPour un domaine `exemple.fr` avec un serveur mail sur `mail.exemple.fr` à l'IP `203.0.113.10` (et `2001:db8::10` en v6) :\n\n```dns\n;; Enregistrement du serveur mail lui-même\nmail.exemple.fr. IN A 203.0.113.10\nmail.exemple.fr. IN AAAA 2001:db8::10\n\n;; MX : qui reçoit les mails du domaine\nexemple.fr. IN MX 10 mail.exemple.fr.\n\n;; SPF : qui a le droit d'envoyer pour ce domaine\nexemple.fr. IN TXT \"v=spf1 mx -all\"\n\n;; DKIM (clé publique, le sélecteur ici est \"mail\")\nmail._domainkey.exemple.fr. IN TXT \"v=DKIM1; k=rsa; p=MIIBIjANBgkqhki...\"\n\n;; DMARC\n_dmarc.exemple.fr. IN TXT \"v=DMARC1; p=quarantine; rua=mailto:dmarc@exemple.fr; ruf=mailto:dmarc@exemple.fr; fo=1; adkim=s; aspf=s; pct=100\"\n\n;; MTA-STS (cf. §8)\n_mta-sts.exemple.fr. IN TXT \"v=STSv1; id=20260509T000000;\"\nmta-sts.exemple.fr. IN A 203.0.113.10\n\n;; TLS-RPT (rapports d'erreurs TLS)\n_smtp._tls.exemple.fr. IN TXT \"v=TLSRPTv1; rua=mailto:tls-reports@exemple.fr\"\n\n;; CAA : restreindre qui peut émettre des certifs pour ton domaine\nexemple.fr. IN CAA 0 issue \"letsencrypt.org\"\n\n;; Autodiscover / autoconfig (pour les clients mail)\nautoconfig.exemple.fr. IN CNAME mail.exemple.fr.\nautodiscover.exemple.fr. IN CNAME mail.exemple.fr.\n```\n\nDétails dans les sections dédiées plus bas.\n\n**À ne pas oublier** : l'enregistrement PTR (reverse DNS) se configure **chez ton hébergeur**, pas dans ta zone DNS. Il doit pointer `203.0.113.10 → mail.exemple.fr`. C'est traité au §9.\n\n---\n\n## 6. Installation du stack mail\n\nSur Debian 12. Ce qui suit est volontairement condensé — pour une configuration ligne par ligne, suis [le tutoriel de référence de Workaround.org](https://workaround.org/ispmail/) qui est l'étalon depuis 20 ans.\n\n```bash\n# Mise à jour\napt update && apt upgrade -y\n\n# Stack de base\napt install -y postfix postfix-mysql dovecot-core dovecot-imapd \\\n dovecot-lmtpd dovecot-managesieved dovecot-sieve dovecot-mysql \\\n rspamd redis-server mariadb-server certbot\n\n# Certificat TLS\ncertbot certonly --standalone -d mail.exemple.fr \\\n -d mta-sts.exemple.fr \\\n -d autoconfig.exemple.fr -d autodiscover.exemple.fr\n```\n\n### Postfix : configuration `main.cf` minimale-mais-saine\n\n```cfg\n# /etc/postfix/main.cf\nmyhostname = mail.exemple.fr\nmydomain = exemple.fr\nmyorigin = $mydomain\nmydestination = # Vide : on utilise virtual_mailbox_domains\ninet_interfaces = all\ninet_protocols = all # IPv4 + IPv6\n\n# TLS — chiffrement obligatoire\nsmtpd_tls_cert_file = /etc/letsencrypt/live/mail.exemple.fr/fullchain.pem\nsmtpd_tls_key_file = /etc/letsencrypt/live/mail.exemple.fr/privkey.pem\nsmtpd_tls_security_level = may\nsmtpd_tls_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1\nsmtpd_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1\nsmtp_tls_security_level = may\nsmtp_tls_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1\nsmtp_dns_support_level = dnssec # Indispensable pour DANE\nsmtp_tls_security_level = dane # ou \"may\" si DANE pas encore prêt\nsmtp_host_lookup = dns\n\n# Restrictions anti-relais ouvert\nsmtpd_relay_restrictions =\n permit_mynetworks\n permit_sasl_authenticated\n reject_unauth_destination\n\nsmtpd_recipient_restrictions =\n permit_mynetworks\n permit_sasl_authenticated\n reject_unauth_destination\n reject_unknown_recipient_domain\n reject_invalid_helo_hostname\n reject_non_fqdn_helo_hostname\n\n# Limites raisonnables\nmessage_size_limit = 52428800 # 50 Mo\nmailbox_size_limit = 0\nrecipient_delimiter = +\n\n# Intégration Rspamd\nsmtpd_milters = inet:localhost:11332\nnon_smtpd_milters = inet:localhost:11332\nmilter_protocol = 6\nmilter_default_action = accept\nmilter_mail_macros = i {mail_addr} {client_addr} {client_name} {auth_authen}\n\n# Livraison via Dovecot LMTP\nvirtual_transport = lmtp:unix:private/dovecot-lmtp\n```\n\n### Dovecot, Rspamd\n\nCes composants demandent leurs propres fichiers de configuration. Renvoi explicite vers les tutos qui font autorité :\n\n- **Workaround.org / ISPmail** : [https://workaround.org/ispmail/](https://workaround.org/ispmail/) — référence francophone et anglophone, mise à jour à chaque version Debian.\n- **Rspamd quickstart** : [https://www.rspamd.com/doc/tutorials/quickstart.html](https://www.rspamd.com/doc/tutorials/quickstart.html)\n- **Dovecot wiki** : [https://doc.dovecot.org/](https://doc.dovecot.org/)\n\nSi tu veux gagner du temps, **Mailcow** (`docker compose`) est aujourd'hui la solution clé-en-main la plus fiable.\n\n---\n\n## 7. SPF, DKIM, DMARC : les rustines obligatoires\n\nSans ces trois enregistrements correctement configurés, **Gmail et Outlook rejetteront ou marqueront en spam** la majorité de tes messages — peu importe ton volume.\n\n### SPF (Sender Policy Framework)\n\nDéclare qui a le droit d'envoyer du mail pour ton domaine.\n\n```dns\nexemple.fr. IN TXT \"v=spf1 mx -all\"\n```\n\n- `mx` : autorise les serveurs listés dans le MX du domaine.\n- `-all` : **rejet strict** de tout le reste. Indispensable pour la réputation. Ne jamais utiliser `~all` (softfail) en prod : Gmail aujourd'hui considère `~all` comme un signal faible.\n\nSi tu envoies aussi via un relais externe (smart host) : ajoute son `include`, ex. `v=spf1 mx include:_spf.mailjet.com -all`.\n\n**Limite** : un enregistrement SPF doit tenir en **10 lookups DNS maximum**. Au-delà, il est invalide. Vérifie avec [https://www.kitterman.com/spf/validate.html](https://www.kitterman.com/spf/validate.html).\n\n### DKIM (DomainKeys Identified Mail)\n\nSigne chaque mail sortant avec une clé privée. Le destinataire vérifie la signature via la clé publique publiée en DNS.\n\n**Génération de la clé** (Rspamd, sélecteur `mail`, clé 2048 bits) :\n\n```bash\nmkdir -p /var/lib/rspamd/dkim\nrspamadm dkim_keygen -s mail -d exemple.fr -k /var/lib/rspamd/dkim/exemple.fr.mail.key \\\n -b 2048 > /var/lib/rspamd/dkim/exemple.fr.mail.txt\nchown _rspamd:_rspamd /var/lib/rspamd/dkim/*\n```\n\nLe fichier `.txt` contient l'enregistrement DNS à publier :\n\n```dns\nmail._domainkey.exemple.fr. IN TXT ( \"v=DKIM1; k=rsa; \"\n \"p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA...\" )\n```\n\nConfiguration Rspamd (`/etc/rspamd/local.d/dkim_signing.conf`) :\n\n```conf\nallow_username_mismatch = true;\ndomain {\n exemple.fr {\n path = \"/var/lib/rspamd/dkim/exemple.fr.mail.key\";\n selector = \"mail\";\n }\n}\n```\n\nRecharge : `systemctl restart rspamd`.\n\n**Vérification** : envoie un mail à [check-auth@verifier.port25.com](mailto:check-auth@verifier.port25.com), tu reçois un rapport complet SPF/DKIM/DMARC en retour. Ou utilise [https://www.mail-tester.com/](https://www.mail-tester.com/) (note sur 10).\n\n### DMARC (Domain-based Message Authentication, Reporting and Conformance)\n\nDit aux serveurs distants quoi faire en cas d'échec SPF/DKIM, et **te renvoie des rapports** sur ce qui passe et ce qui rate.\n\n```dns\n_dmarc.exemple.fr. IN TXT \"v=DMARC1; p=quarantine; rua=mailto:dmarc@exemple.fr; ruf=mailto:dmarc@exemple.fr; fo=1; adkim=s; aspf=s; pct=100\"\n```\n\n- `p=none` : surveillance seule, **à utiliser pendant 2-4 semaines en démarrage** pour collecter les rapports sans pénaliser.\n- `p=quarantine` : mise en spam des mails non authentifiés. Cible normale.\n- `p=reject` : rejet pur. À atteindre en cible finale, **après** avoir vérifié 4 semaines de rapports propres.\n- `rua` : adresse pour les rapports agrégés (quotidiens).\n- `ruf` : rapports forensiques (par message). Optionnel.\n- `adkim=s aspf=s` : alignement strict — le domaine de signature DKIM et le domaine SPF doivent **exactement** correspondre au domaine `From:`.\n\n**Lecture des rapports DMARC** : ils arrivent en XML, illisibles. Utilise un parseur :\n\n- [Postmark DMARC Monitoring](https://dmarc.postmarkapp.com/) (gratuit, agrège les rapports dans une UI).\n- [parsedmarc](https://github.com/domainaware/parsedmarc) (auto-hébergeable, envoie dans Elasticsearch/Splunk/Grafana).\n\n---\n\n## 8. MTA-STS, TLS-RPT, DANE : aller plus loin\n\nCes standards sécurisent le **transport** entre serveurs (chiffrement TLS forcé). Gmail les regarde, Microsoft aussi. Pas obligatoires, mais ils boostent ta réputation.\n\n### MTA-STS\n\nForce les serveurs distants à utiliser TLS pour t'envoyer des mails. Trois éléments :\n\n**1. Enregistrement DNS TXT** :\n```dns\n_mta-sts.exemple.fr. IN TXT \"v=STSv1; id=20260509T000000;\"\n```\n\n**2. Sous-domaine `mta-sts.exemple.fr`** servant un fichier en HTTPS à `https://mta-sts.exemple.fr/.well-known/mta-sts.txt` :\n```\nversion: STSv1\nmode: enforce\nmx: mail.exemple.fr\nmax_age: 604800\n```\n\n`mode: enforce` est la cible. En démarrage, mets `mode: testing` pendant 1-2 semaines.\n\n**3. Certificat TLS valide** sur ce sous-domaine (déjà fait via certbot au §6).\n\n### TLS-RPT\n\nDemande aux serveurs distants de t'envoyer des rapports en cas d'échec TLS.\n\n```dns\n_smtp._tls.exemple.fr. IN TXT \"v=TLSRPTv1; rua=mailto:tls-reports@exemple.fr\"\n```\n\n### DANE (DNS-based Authentication of Named Entities)\n\nEncore plus solide que MTA-STS, mais nécessite **DNSSEC** activé sur ton domaine. Si ton registrar ne supporte pas DNSSEC, oublie DANE.\n\nDANE publie un hash du certificat TLS dans un enregistrement TLSA :\n\n```bash\n# Générer l'enregistrement TLSA pour le port 25\nposttls-finger -t30 -T180 -P /etc/ssl/certs/ -lsecure mail.exemple.fr\n```\n\nOu plus simplement avec [https://www.huque.com/bin/gen_tlsa](https://www.huque.com/bin/gen_tlsa) :\n\n```dns\n_25._tcp.mail.exemple.fr. IN TLSA 3 1 1 ABC123...\n```\n\n**Vérification globale** de tout ton setup TLS+DANE : [https://internet.nl/mail/](https://internet.nl/mail/) (excellent, recommandé).\n\n---\n\n## 9. PTR (reverse DNS) et HELO\n\n**Le PTR est probablement la cause la plus fréquente de rejet par Gmail/Outlook chez les nouveaux auto-hébergés.**\n\nRègle absolue : **`PTR(IP) == HELO == nom A/AAAA`**, et tout doit être un FQDN cohérent.\n\nConfigure le PTR dans le panneau de ton hébergeur (chez OVH : \"IP\" → \"Reverse DNS\") :\n```\n203.0.113.10 → mail.exemple.fr\n2001:db8::10 → mail.exemple.fr\n```\n\nVérifie :\n```bash\ndig -x 203.0.113.10 +short\n# doit retourner : mail.exemple.fr.\n\ndig mail.exemple.fr A +short\n# doit retourner : 203.0.113.10\n```\n\nDans Postfix, `myhostname = mail.exemple.fr` et c'est ce qui est annoncé en HELO. Cohérence garantie.\n\n---\n\n## 10. Warmup d'IP : la phase la plus délicate\n\n**Une IP neuve = pas de réputation = défiance maximale des gros acteurs.** Tu ne peux pas envoyer 1000 mails le jour 1 sans te griller.\n\n### Plan de warmup sur 4 à 6 semaines\n\n| Semaine | Volume max/jour vers Gmail+Outlook | Volume max/jour total | Contenu |\n|---|---|---|---|\n| 1 | 20-50 | 100 | Mails à toi-même, comptes test sur Gmail/Outlook/Yahoo. Réponds-y, marque \"non spam\" si en spam. |\n| 2 | 100 | 300 | Cercle proche qui sait répondre / interagir. |\n| 3 | 300 | 1000 | Élargissement progressif. |\n| 4 | 800 | 3000 | Ouvre aux usages normaux. |\n| 5+ | 2000+ | volume cible | Stable. |\n\n**Règles d'or pendant le warmup :**\n- **Pas de mailing list, pas de notifs automatiques en masse.** Privilégie des mails 1-à-1 conversationnels.\n- **Demande aux destinataires de répondre** — un mail avec réponse a 100x le poids d'un mail ouvert silencieusement.\n- **Aucun lien raccourci**, aucun pixel de tracking, aucune image lourde.\n- **Stop net si ton score Senderscore baisse** ou si Gmail Postmaster Tools (cf. §11) montre du rouge.\n\n### Si tu as un volume immédiat à envoyer\n\nBascule en **option B** (smart host) le temps du warmup, puis rapatrie progressivement en interne en répliquant les volumes ci-dessus.\n\n---\n\n## 11. Postmaster Tools, SNDS, FBL\n\nLes gros acteurs te donnent des dashboards dédiés. **Inscris-toi à tous, dès la création du domaine.**\n\n| Service | Acteur | Usage |\n|---|---|---|\n| [Google Postmaster Tools](https://postmaster.google.com/) | Gmail | Réputation IP+domaine, taux de spam, authentification, encryption. **Indispensable.** |\n| [Microsoft SNDS](https://sendersupport.olc.protection.outlook.com/snds/) | Outlook/Hotmail | Smart Network Data Services, qualité de l'IP. |\n| [Microsoft JMRP](https://sendersupport.olc.protection.outlook.com/pm/) | Outlook | Junk Mail Reporting Program, FBL Microsoft. |\n| [Yahoo CFL](https://senders.yahooinc.com/complaint-feedback-loop/) | Yahoo | Complaint Feedback Loop. |\n| [Validity Sender Score](https://senderscore.org/) | Indépendant | Score sur 100, à surveiller. |\n\nConfigure les feedback loops (FBL) : quand un destinataire clique \"spam\", tu reçois une notification. Ça te permet de désinscrire l'utilisateur **avant qu'il ne dégrade ta réputation**.\n\n---\n\n## 12. Liste de désinscription en un clic (RFC 8058)\n\n**Exigence Google/Microsoft pour les expéditeurs en volume**, mais à mettre en place dès le début même en bas volume.\n\nAjoute deux en-têtes à tous les mails non-strictement-personnels :\n\n```\nList-Unsubscribe: , \nList-Unsubscribe-Post: List-Unsubscribe=One-Click\n```\n\nL'URL HTTPS doit accepter une requête **POST** (pas seulement GET) avec `List-Unsubscribe=One-Click` dans le corps, et désinscrire **immédiatement et silencieusement** sans demander de confirmation.\n\n---\n\n## 13. Anti-spam entrant et hygiène\n\nUn serveur mail mal configuré côté entrée devient vite un relais de spam ou une cible. Configuration Rspamd minimale :\n\n```conf\n# /etc/rspamd/local.d/actions.conf\nreject = 15;\nadd_header = 6;\ngreylist = 4;\n```\n\n```conf\n# /etc/rspamd/local.d/greylist.conf\nexpire = 1d;\n```\n\nActive aussi :\n- **Vérification SPF/DKIM/DMARC entrante** (par défaut activée dans Rspamd).\n- **RBL** (Realtime Blackhole Lists) : Spamhaus ZEN, Barracuda. Attention à ne pas multiplier — 2 ou 3 RBL fiables suffisent.\n- **Greylisting** : refuse temporairement les premiers contacts, ce qui élimine 80% du spam basique. Ne pas activer sur un domaine à fort volume transactionnel (gêne les notifs).\n- **Bayes** : laisse Rspamd apprendre via le dossier `Junk` de Dovecot (signal `IsSpam` / `IsHam`).\n\nMises à jour : `unattended-upgrades` activé, redémarrage planifié, lecture des annonces sécu Postfix/Dovecot.\n\n---\n\n## 14. Monitoring, logs, alertes\n\nSans monitoring, tu découvres les problèmes par les utilisateurs. À mettre en place :\n\n- **Lecture des logs** : `journalctl -u postfix -f`, `tail -f /var/log/mail.log`, web UI de Rspamd sur `localhost:11334`.\n- **Métriques** : exporter Postfix/Dovecot vers Prometheus + Grafana (`postfix_exporter`, `dovecot_exporter`).\n- **Alertes** sur :\n - File d'attente Postfix > 50 messages (`mailq | tail -1`).\n - Score Senderscore qui chute.\n - Apparition sur une RBL : surveillance automatisée par [https://multirbl.valli.org/](https://multirbl.valli.org/) ou via un script qui interroge plusieurs DNSBL en cron.\n - Échec TLS-RPT (rapport entrant signalant une connexion non chiffrée).\n- **Rapports DMARC** parsés régulièrement (cf. §7).\n\n---\n\n## 15. Que faire quand Gmail rejette quand même ?\n\nÇa arrive. Diagnostic dans l'ordre :\n\n1. **Lis le code de rejet SMTP** dans `/var/log/mail.log`. Gmail renvoie des codes très explicites :\n - `550-5.7.1 [203.0.113.10 19] Our system has detected that this message is likely unsolicited mail.` → contenu jugé spammy. Revois le contenu, ajoute du texte conversationnel, retire les liens douteux.\n - `421-4.7.0 [203.0.113.10 15] Our system has detected an unusual rate of unsolicited mail.` → tu as dépassé un seuil. **Ralentis immédiatement**, attends 24-48h, reprends doucement.\n - `550-5.7.26 ... DMARC ...` → ton DMARC ne passe pas. Revérifie SPF/DKIM/alignement.\n - `550-5.7.1 ... blocked using Spamhaus.` → tu es sur une RBL. Va sur [spamhaus.org/lookup/](https://www.spamhaus.org/lookup/) pour vérifier et demander la sortie.\n2. **Va dans Postmaster Tools** (§11). Si \"IP reputation\" est rouge ou orange, regarde le contenu et le timing de tes envois récents.\n3. **Test mail-tester** : envoie à une adresse fournie par [mail-tester.com](https://www.mail-tester.com/), obtiens une note sur 10. Vise 10/10. Toute case manquante doit être corrigée.\n4. **Sortie de blacklist** : la plupart des RBL (Spamhaus, Barracuda) ont un formulaire de retrait. Spamhaus retire en quelques heures si tu corriges la cause. SORBS est plus lent. UCEPROTECT exige souvent de payer — ignore-la, peu de serveurs sérieux la consultent.\n5. **Si rien ne marche**, change d'IP. C'est parfois la seule issue. Demande à ton hébergeur une IP fraîche, refais un warmup.\n\n---\n\n## 16. Checklist finale avant mise en prod\n\nAvant d'envoyer le premier vrai mail :\n\n- [ ] Domaine avec DNSSEC activé.\n- [ ] IP testée sur 5+ blacklists, propre.\n- [ ] Port 25 sortant ouvert et testé (`telnet gmail-smtp-in.l.google.com 25`).\n- [ ] PTR configuré et cohérent avec le HELO.\n- [ ] MX, A, AAAA, SPF, DKIM, DMARC publiés et validés via [mxtoolbox.com](https://mxtoolbox.com/).\n- [ ] MTA-STS publié (mode `testing` au démarrage).\n- [ ] TLS-RPT publié.\n- [ ] DANE/TLSA publié (si DNSSEC OK).\n- [ ] CAA publié.\n- [ ] Test envoyé à `check-auth@verifier.port25.com` : tout en `pass`.\n- [ ] Test [mail-tester.com](https://www.mail-tester.com/) : 10/10.\n- [ ] Test [internet.nl/mail/](https://internet.nl/mail/) : 100%.\n- [ ] Inscription Postmaster Tools, SNDS, JMRP, Yahoo CFL.\n- [ ] DMARC `p=none` au démarrage, parser de rapports en place.\n- [ ] List-Unsubscribe + List-Unsubscribe-Post implémentés.\n- [ ] Plan de warmup affiché et respecté.\n- [ ] Monitoring file d'attente + RBL en place.\n- [ ] Backup chiffré des Maildir.\n\nAu bout de 4 semaines de rapports DMARC propres : passage à `p=quarantine`. Au bout de 8-12 semaines : `p=reject`.\n\n---\n\n## 17. Annexes : commandes utiles\n\n```bash\n# Voir la file d'attente\nmailq\npostqueue -p\n\n# Forcer la tentative de livraison\npostqueue -f\n\n# Vider la file (à utiliser avec précaution)\npostsuper -d ALL\n\n# Tester la délivrabilité d'un domaine cible (DANE / TLS)\nposttls-finger -t30 -T180 -P /etc/ssl/certs/ -lsecure gmail-smtp-in.l.google.com\n\n# Vérifier ses propres enregistrements\ndig exemple.fr TXT +short\ndig _dmarc.exemple.fr TXT +short\ndig mail._domainkey.exemple.fr TXT +short\ndig mail.exemple.fr MX +short\ndig -x 203.0.113.10 +short\n\n# Tester l'envoi en SMTP authentifié\nswaks --to test@gmail.com --from moi@exemple.fr \\\n --server mail.exemple.fr --auth --auth-user moi@exemple.fr \\\n --tls --port 587\n\n# Voir en temps réel ce qu'il se passe\njournalctl -u postfix -u dovecot -u rspamd -f\n```\n\n### Outils web à mettre en favoris\n\n- [https://www.mail-tester.com/](https://www.mail-tester.com/) — score sur 10\n- [https://internet.nl/mail/](https://internet.nl/mail/) — audit complet\n- [https://mxtoolbox.com/SuperTool.aspx](https://mxtoolbox.com/SuperTool.aspx) — DNS, blacklists\n- [https://dmarcian.com/dmarc-inspector/](https://dmarcian.com/dmarc-inspector/) — vérif DMARC\n- [https://www.kitterman.com/spf/validate.html](https://www.kitterman.com/spf/validate.html) — vérif SPF\n- [https://postmaster.google.com/](https://postmaster.google.com/) — Google Postmaster\n- [https://senderscore.org/](https://senderscore.org/) — réputation IP\n\n### Documentation de référence\n\n- **ISPmail / Workaround.org** — [https://workaround.org/ispmail/](https://workaround.org/ispmail/) — le tutoriel le plus complet et tenu à jour, par version Debian.\n- **Mailcow docs** — [https://docs.mailcow.email/](https://docs.mailcow.email/) — pour la version conteneurisée clé-en-main.\n- **Postfix officiel** — [https://www.postfix.org/documentation.html](https://www.postfix.org/documentation.html)\n- **Rspamd docs** — [https://www.rspamd.com/doc/](https://www.rspamd.com/doc/)\n- **RFCs essentielles** : 5321 (SMTP moderne), 7208 (SPF), 6376 (DKIM), 7489 (DMARC), 8461 (MTA-STS), 8460 (TLS-RPT), 7672 (DANE-SMTP), 8058 (One-Click Unsubscribe).\n\n---\n\nL'auto-hébergement mail en 2026 reste possible, mais c'est devenu un sport : les règles changent, les gros acteurs durcissent leurs critères, et l'écosystème pousse vers la centralisation. Si tu réussis le warmup et tiens 6 mois sans incident, tu as gagné — mais ne baisse pas la garde, un changement unilatéral de Google peut survenir à tout moment, comme en février 2024.","featured":false,"tags":[]} \ No newline at end of file diff --git a/_cache/articles/11186836-bbac-4054-82db-a3bfed14a274.json b/_cache/articles/11186836-bbac-4054-82db-a3bfed14a274.json deleted file mode 100644 index 8d469fc..0000000 --- a/_cache/articles/11186836-bbac-4054-82db-a3bfed14a274.json +++ /dev/null @@ -1 +0,0 @@ -{"uuid":"11186836-bbac-4054-82db-a3bfed14a274","slug":"imagemagick-traiter-des-images-en-ligne-de-commande","title":"ImageMagick : traiter des images en ligne de commande","author":"cedric@abonnel.fr","published":true,"published_at":"2025-12-28 14:56","created_at":"2025-12-28 14:56:14","updated_at":"2026-05-12 00:36:01","revisions":[{"n":1,"date":"2026-05-12 00:33:58","comment":"","title":"ImageMagick : traiter des images en ligne de commande"},{"n":2,"date":"2026-05-12 00:36:01","comment":"","title":"ImageMagick : traiter des images en ligne de commande"}],"cover":"cover.png","files_meta":{"cover.png":{"author":"","source_url":"https://imagemagick.org/image/logo.png"}},"external_links":[],"seo_title":"","seo_description":"","og_image":"","category":"linux","content":"# ImageMagick : traiter des images en ligne de commande\n\n## 1. À quoi ça sert\n\nImageMagick, c'est l'outil qu'on sort quand on veut manipuler des images sans ouvrir un logiciel graphique. Pas de Photoshop, pas de GIMP, pas de clic-droit \"Redimensionner\" sur cent fichiers à la suite : juste une commande dans un terminal, et le travail est fait.\n\nC'est une suite d'outils qui sait lire, écrire et transformer plus de 200 formats — du JPEG classique au PDF en passant par le HEIC des iPhones, le WebP de Google ou le bon vieux TIFF des scanners. L'absence d'interface graphique est ici une fonctionnalité, pas un défaut : elle permet de l'utiliser partout où il n'y a pas d'écran, et surtout dans tout ce qui doit tourner tout seul.\n\nOn le retrouve donc naturellement :\n\n- sur des serveurs web qui génèrent des miniatures à la volée,\n- dans des scripts qui traitent des dossiers entiers d'un coup,\n- dans des pipelines CI/CD pour préparer des assets,\n- dans des conteneurs Docker, accessibles uniquement en SSH.\n\nDepuis la version 7, tout passe par une commande unique : `magick`. Les anciennes commandes (`convert`, `identify`, `mogrify`...) existent toujours pour la compatibilité, mais elles ne sont plus la norme.\n\n## 2. Installation\n\nSur Debian ou Ubuntu :\n\n```bash\nsudo apt install imagemagick\n```\n\nOn vérifie ensuite que tout est en place :\n\n```bash\nmagick -version\n```\n\nLa sortie indique aussi les délégués compilés (libwebp, libheif, libraw, etc.). Si un format précis vous intéresse, c'est ici qu'il faut regarder : ImageMagick ne sait lire un format que si la bibliothèque correspondante est présente au moment de la compilation.\n\n## 3. Comment ImageMagick raisonne\n\nToutes les commandes suivent la même logique :\n\n```\nmagick [entrée] [options] [sortie]\n```\n\nL'image est chargée en mémoire, puis chaque option s'applique **dans l'ordre où elle est écrite**, comme une chaîne de traitement. Ce point est important : déplacer une option dans la ligne peut changer le résultat final.\n\nExemple :\n\n```bash\nmagick input.jpg -resize 800x600 -quality 85 output.jpg\n```\n\nIci, l'image est lue, redimensionnée à 800×600, puis compressée à 85% de qualité, puis écrite sur le disque. Si on inversait `-quality` et `-resize`, le résultat serait identique dans ce cas précis, mais avec des opérations qui modifient les pixels (flou, conversion d'espace colorimétrique, recadrage), l'ordre devient critique.\n\n## 4. Convertir d'un format à un autre\n\nLe cas le plus simple : changer l'extension du fichier de sortie suffit.\n\n```bash\nmagick image.png image.jpg\n```\n\nImageMagick détecte le format cible à partir de l'extension et fait la conversion. C'est aussi simple que ça pour 90% des cas.\n\nQuand on veut être plus précis — par exemple forcer une profondeur de couleur particulière — on l'indique explicitement :\n\n```bash\nmagick image.png -depth 8 image.jpg\n```\n\nUtile quand on récupère des images en 16 bits par canal qu'on veut ramener à du 8 bits standard, soit pour gagner de la place, soit pour garantir la compatibilité avec un logiciel récalcitrant.\n\n## 5. Redimensionner\n\n### La méthode brutale\n\n```bash\nmagick image.jpg -resize 800x600 image_resized.jpg\n```\n\nCette commande redimensionne à 800×600 **en respectant les proportions** par défaut, contrairement à ce qu'on pourrait croire. Si l'image source est en 4:3, elle rentrera pile dedans ; si elle est en 16:9, ImageMagick choisira la dimension la plus contraignante et l'autre sera plus petite que demandé.\n\nPour forcer exactement ces dimensions quitte à déformer l'image, il faut ajouter un point d'exclamation :\n\n```bash\nmagick image.jpg -resize 800x600! image_resized.jpg\n```\n\n### Ne rétrécir que les grandes images\n\nC'est probablement le cas le plus utile au quotidien : on a un dossier d'images, on veut s'assurer qu'aucune ne dépasse 1600 pixels, mais on ne veut pas agrandir les petites (ce qui dégraderait leur qualité).\n\n```bash\nmagick image.jpg -resize \"1600x1600>\" image_resized.jpg\n```\n\nLe `>` signifie « uniquement si l'image est plus grande ». Les guillemets sont nécessaires car `>` est interprété par le shell comme une redirection. On peut aussi échapper le caractère avec `\\>`.\n\n### En pourcentage\n\n```bash\nmagick image.jpg -resize 50% image_small.jpg\n```\n\nPratique quand on veut diviser la taille par deux sans calculer les dimensions exactes.\n\n## 6. Qualité et poids du fichier\n\nPour les JPEG, le paramètre `-quality` règle le compromis entre fidélité visuelle et poids du fichier :\n\n```bash\nmagick image.jpg -quality 85 image.jpg\n```\n\nQuelques repères en pratique :\n\n- **100** : qualité maximale, fichier énorme, différence imperceptible avec 95.\n- **85** : la valeur par défaut de la plupart des appareils photo, et un excellent compromis pour le web.\n- **75** : encore très acceptable, gain de place notable.\n- **En dessous de 70** : les artefacts deviennent visibles, surtout sur les aplats de couleur.\n\n### Supprimer les métadonnées\n\nLes fichiers issus d'appareils photo ou de smartphones embarquent beaucoup d'informations : modèle de l'appareil, date, parfois coordonnées GPS, miniature intégrée, profil colorimétrique... Tout ça peut peser plusieurs dizaines de kilo-octets, et surtout poser des problèmes de confidentialité.\n\n```bash\nmagick image.jpg -strip image.jpg\n```\n\nL'option `-strip` fait le ménage. À utiliser systématiquement avant de publier des photos sur le web, et indispensable dès qu'on parle de RGPD ou d'anonymisation. Attention en revanche pour la photographie professionnelle où certaines métadonnées (droits d'auteur, profil ICC) peuvent être nécessaires.\n\n## 7. Recadrer et adapter à un cadre\n\n### Recadrage classique\n\n```bash\nmagick image.jpg -crop 800x600+100+50 output.jpg\n```\n\nLa syntaxe se lit comme une fenêtre qu'on découpe dans l'image : largeur × hauteur, décalée de 100 pixels depuis la gauche et 50 pixels depuis le haut.\n\n### Remplir un cadre exact, sans déformation\n\nC'est le besoin typique des miniatures de site : on veut toutes les vignettes en 800×600 pile, peu importe le format des photos d'origine.\n\n```bash\nmagick image.jpg -resize 800x600^ -gravity center -extent 800x600 output.jpg\n```\n\nTrois étapes enchaînées :\n\n1. `-resize 800x600^` redimensionne pour que l'image **remplisse** le cadre (le `^` inverse la logique habituelle : on prend la plus grande dimension comme contrainte, pas la plus petite).\n2. `-gravity center` indique qu'on veut centrer le découpage.\n3. `-extent 800x600` coupe ce qui dépasse pour obtenir exactement la taille voulue.\n\nLe résultat : aucune déformation, aucune bande noire, juste un éventuel rognage sur les bords les plus longs.\n\n## 8. Traiter un dossier entier\n\nUne boucle Bash suffit pour convertir tous les PNG d'un dossier en JPEG :\n\n```bash\nfor f in *.png; do\n magick \"$f\" \"${f%.png}.jpg\"\ndone\n```\n\nLa syntaxe `${f%.png}` retire l'extension `.png` du nom, on y ajoute `.jpg`. Simple et fiable.\n\nPour modifier les fichiers **sur place**, ImageMagick fournit `mogrify` :\n\n```bash\nmogrify -resize \"1600x1600>\" *.jpg\n```\n\nCette commande écrase chaque fichier par sa version redimensionnée. C'est rapide et pratique, mais ça veut aussi dire qu'**il n'y a pas de retour en arrière** : si la commande est mal écrite, le dossier original est perdu. Règle absolue : travailler sur une copie, ou s'assurer d'avoir une sauvegarde.\n\n## 9. Texte et filigranes\n\n### Apposer une mention textuelle\n\n```bash\nmagick image.jpg \\\n -gravity southeast \\\n -pointsize 24 \\\n -fill white \\\n -annotate +10+10 \"© MonSite\" \\\n image_marked.jpg\n```\n\n`-gravity` ancre le texte dans un coin de l'image (les neuf positions classiques : `northwest`, `north`, `northeast`, `west`, `center`...), et `-annotate` ajoute un décalage par rapport à ce point d'ancrage. Ici, `+10+10` éloigne le texte de 10 pixels du coin inférieur droit.\n\n### Superposer un logo ou un watermark image\n\n```bash\nmagick image.jpg watermark.png -gravity center -composite output.jpg\n```\n\nL'image principale est lue en premier, le filigrane en second, puis `-composite` les fusionne. Si le watermark a un canal alpha (transparence), il est respecté.\n\n## 10. Couleurs et tons\n\nPassage en noir et blanc :\n\n```bash\nmagick image.jpg -colorspace Gray output.jpg\n```\n\nRéglage de la luminosité et du contraste (valeurs en pourcentage, positives ou négatives) :\n\n```bash\nmagick image.jpg -brightness-contrast 10x5 output.jpg\n```\n\nIci, +10% de luminosité et +5% de contraste. Pour assombrir, on utilise des valeurs négatives : `-brightness-contrast -10x0`.\n\n## 11. Inspecter une image\n\nPour obtenir les informations essentielles — format, dimensions, profondeur :\n\n```bash\nmagick identify image.jpg\n```\n\nPour tout savoir, y compris les métadonnées EXIF, le profil colorimétrique, l'histogramme :\n\n```bash\nmagick identify -verbose image.jpg\n```\n\nLa sortie verbeuse peut faire plusieurs pages, mais c'est inestimable pour diagnostiquer un problème ou comprendre d'où vient un fichier.\n\n## 12. Formats modernes\n\nLe WebP de Google offre une compression nettement meilleure que le JPEG à qualité équivalente, et il est aujourd'hui supporté par tous les navigateurs courants :\n\n```bash\nmagick image.jpg -quality 80 image.webp\n```\n\nL'AVIF va encore plus loin en termes de compression, au prix d'un encodage plus lent :\n\n```bash\nmagick image.jpg image.avif\n```\n\nSi la commande échoue avec une erreur de délégué, c'est que votre installation d'ImageMagick a été compilée sans le support AVIF — il faudra installer `libheif` ou recompiler.\n\n## 13. Quelques règles à se fixer\n\n- **Toujours travailler sur une copie** quand on découvre une nouvelle commande. `mogrify` en particulier ne pardonne pas.\n- **Stripper les métadonnées** avant toute publication web.\n- **Pour de très gros volumes** (plusieurs milliers d'images, ou des images très lourdes), regarder du côté de `libvips` : c'est plus rapide et beaucoup moins gourmand en mémoire qu'ImageMagick. Pour tout le reste, ImageMagick est largement suffisant.\n- **Automatiser dès qu'on répète** : si la même commande revient deux fois, elle mérite un script.\n- **Lire les messages d'erreur** : ImageMagick est verbeux, et la plupart des problèmes (délégué manquant, permissions, format non reconnu) sont explicitement nommés dans la sortie.\n\n## 14. Là où on le croise vraiment\n\nEn pratique, ImageMagick finit presque toujours dans les mêmes situations :\n\n- préparation d'images pour un site web (redimensionnement + compression + strip),\n- génération de miniatures à la volée côté serveur,\n- normalisation d'un catalogue photo hétérogène (formats, tailles, profils),\n- conversion massive d'archives anciennes vers des formats modernes,\n- nettoyage des métadonnées avant diffusion publique.\n\n---\n\nImageMagick fait partie de ces outils qu'on apprivoise lentement mais qu'on garde longtemps. Au début, on copie des commandes trouvées en ligne sans tout comprendre. Puis on commence à reconnaître les options, à les combiner, à écrire ses propres scripts. Et un jour, on se rend compte qu'on a remplacé un logiciel entier par trois lignes de Bash — et qu'on n'a jamais été aussi efficace pour traiter des images.","featured":false,"tags":[]} \ No newline at end of file diff --git a/_cache/articles/1363f454-ca59-4264-a8f0-a2446d645ebc.json b/_cache/articles/1363f454-ca59-4264-a8f0-a2446d645ebc.json deleted file mode 100644 index 5fcd35e..0000000 --- a/_cache/articles/1363f454-ca59-4264-a8f0-a2446d645ebc.json +++ /dev/null @@ -1 +0,0 @@ -{"uuid":"1363f454-ca59-4264-a8f0-a2446d645ebc","slug":"installation-et-mise-en-service-d-une-borne-de-recharge-murale-goneo-7-4-kw","title":"Installation et mise en service d'une borne de recharge murale GONEO 7,4 kW","author":"cedric@abonnel.fr","published":true,"published_at":"2026-05-13 11:04","created_at":"2026-05-13 11:23:38","updated_at":"2026-05-13 15:17:04","revisions":[{"n":1,"date":"2026-05-13 12:50:54","comment":"Contenu modifié","title":"Installation et mise en service d'une borne de recharge murale GONEO 7,4 kW"},{"n":2,"date":"2026-05-13 13:38:38","comment":"Contenu modifié","title":"Installation et mise en service d'une borne de recharge murale GONEO 7,4 kW"},{"n":3,"date":"2026-05-13 13:56:09","comment":"Contenu modifié : lien amazon afilié","title":"Installation et mise en service d'une borne de recharge murale GONEO 7,4 kW"}],"cover":"","files_meta":{"GONEO_AC_EV_Charging_Wallbox_APP_instruction0731.pdf":{"author":"","source_url":""},"GONEO_D3E_Series_AC_EV_Charging_Wallbox_Quick_Guide-20240816.pdf":{"author":"","source_url":""},"GONEO__________________-A4_______2_.pdf":{"author":"","source_url":""},"_thumb_08fa79864df51448-99503.png":{"author":"","source_url":""},"cover.jpg":{"author":"","source_url":"https://www.goneoglobal.com/cdn/shop/files/3_eed2ecfe-89ab-47b3-b479-cd7a77dca399.jpg?v=1727271286&width=1500"}},"external_links":[{"url":"https://www.goneoglobal.com/products/ev-charger-safe-charging-station","name":"EV Charger Safe Charging Station","added_at":"2026-05-13 13:37:20","author":"GONEO Global","meta":{"mime":"text/html","blocked":true,"og_image":"/file?uuid=1363f454-ca59-4264-a8f0-a2446d645ebc&name=_thumb_08fa79864df51448-99503.png"}}],"seo_title":"","seo_description":"","og_image":"https://varlog.a5l.fr/file?uuid=1363f454-ca59-4264-a8f0-a2446d645ebc&name=cover.jpg","category":"","content":"# Installation et mise en service d'une borne de recharge murale GONEO 7,4 kW\n\nUne borne de recharge murale GONEO a été récemment acquise ([référence Amazon B0FP288GM7](https://amzn.to/4dponSA)). Il s'agit d'une wallbox monophasée 7,4 kW (32 A, 230 V), équipée d'un connecteur Type 2, d'un lecteur RFID, et pilotable via Wi-Fi, Bluetooth. La gamme constructeur est documentée sur le [site officiel GONEO Global](https://www.goneoglobal.com/) et son catalogue EV Charger sur [it.goneoglobal.com](https://it.goneoglobal.com/en/collections/ev-charger).\n\n## Caractéristiques techniques\n\nD'après les fiches constructeur et revendeurs, le modèle présente les caractéristiques suivantes :\n\n- Puissance : jusqu'à 7 kW en monophasé (annoncée 7,4 kW selon le réglage de courant)\n- Courant réglable : 8 A à 32 A\n- Tension : 230 V monophasé\n- Connecteur : Type 2 (IEC 62196-2)\n- Protection : IP65, IK10, ignifuge UL94 V-0, plage -30 °C à +55 °C\n- Détection de défaut intégrée : protection de fuite Type A 30 mA + DC 6 mA\n- Connectivité : Wi-Fi, Bluetooth, compatible OCPP et Home Assistant\n- Application : *Goneo EV Charger* (Android / iOS)\n\n## Câblage et raccordement\n\nLe câble d'alimentation a été tiré soi-même, en s'appuyant sur les règles de dimensionnement détaillées dans [cet article](https://varlog.a5l.fr/post/dimensionnement-des-cables-electriques-cuivre-230-v-monophase). La section retenue est conforme aux préconisations constructeur : câble 3G6 mm² pour un courant maximum de 32 A, avec en amont un disjoncteur 40 A et un interrupteur différentiel type A 40 A.\n\nUn soin particulier a été apporté au serrage des borniers : un serrage insuffisant entraîne une résistance de contact accrue, source d'échauffement et de chute de tension sous charge — risque non négligeable compte tenu des intensités mises en jeu (jusqu'à 32 A en continu pendant plusieurs heures).\n\n## Vérifications avant mise sous tension\n\nUne fois le raccordement effectué, les mesures suivantes ont été réalisées au multimètre :\n\n- Phase – Neutre : ~230 V (tension nominale du réseau)\n- Phase – Terre : ~230 V (confirme la continuité de la phase et de la terre)\n- Neutre – Terre : ~0 V (idéalement quelques volts maximum ; une valeur significative trahirait un défaut de neutre ou de mise à la terre)\n\nÀ noter : la protection différentielle intégrée à la borne couvre la composante DC (6 mA), ce qui permet en théorie de se contenter d'un différentiel **type A** en amont — là où une borne sans détection DC interne exigerait un **type B** beaucoup plus onéreux. La vérification de la valeur de la prise de terre au telluromètre et le test du déclenchement du différentiel restent recommandés.\n\n## Mise en service\n\nLa mise en service s'effectue via le Wi-Fi de l'appareil et l'application propriétaire *Goneo EV Charger*. Points à anticiper :\n\n- Télécharger l'application *avant* de commencer la procédure.\n- Créer un compte utilisateur.\n- S'assurer que le téléphone est connecté à un réseau Wi-Fi 2,4 GHz et que le Bluetooth est activé ; la borne doit être à portée du signal Wi-Fi.\n- Associer la borne au compte (un appui court sur le bouton règle l'alimentation, un double appui lance la configuration Wi-Fi).\n\nLa borne ayant été achetée d'occasion, elle n'avait pas été dissociée du compte du précédent propriétaire — situation fréquente sur ce type d'achat. Un message au SAV par mail (info@goneoglobal.com) a suffi : la réponse a été rapide et la dissociation effectuée sans difficulté. Réflexe à prendre lors d'un achat d'occasion : demander au vendeur de procéder à la dissociation avant l'expédition.\n\n## Usage au quotidien\n\nDeux modes d'utilisation cohabitent :\n\n- **Profil horaire programmé via l'application** : pratique pour caler les sessions sur les heures creuses.\n- **Badge RFID** fourni avec la borne : démarrer ou arrêter une session par simple présentation du badge, sans passer par l'application.\n\n---\n\nÀ noter sur le plan réglementaire : depuis 2017, l'installation d'une borne de recharge d'une puissance supérieure à 3,7 kW à domicile relève en principe d'un électricien qualifié IRVE. Le fait de procéder soi-même au tirage du câble et au raccordement reste possible techniquement, mais sort du cadre permettant de prétendre aux aides publiques (crédit d'impôt, prime ADVENIR) et peut avoir des conséquences en matière d'assurance.","featured":false,"tags":[]} \ No newline at end of file diff --git a/_cache/articles/1ce7bdf9-092c-4697-970f-7c2113f856b2.json b/_cache/articles/1ce7bdf9-092c-4697-970f-7c2113f856b2.json deleted file mode 100644 index 628aab0..0000000 --- a/_cache/articles/1ce7bdf9-092c-4697-970f-7c2113f856b2.json +++ /dev/null @@ -1 +0,0 @@ -{"uuid":"1ce7bdf9-092c-4697-970f-7c2113f856b2","slug":"auracast","title":"Bluetooth Auracast","author":"cedric@abonnel.fr","published":true,"published_at":"2026-05-14 07:46","created_at":"2026-05-13 18:47:37","updated_at":"2026-05-13 18:48:46","revisions":[{"n":1,"date":"2026-05-13 18:48:46","comment":"Contenu modifié, article publié","title":"Bluetooth Auracast"}],"cover":"","files_meta":{"cover.png":{"author":"","source_url":"https://hifi.de/wp-content/uploads/2024/01/Bluetooth-Auracast-So-funktioniert-es.png"}},"external_links":[],"seo_title":"","seo_description":"","og_image":"https://varlog.a5l.fr/file?uuid=1ce7bdf9-092c-4697-970f-7c2113f856b2&name=cover.png","category":"technologie","content":"# Bluetooth Auracast\n\nAuracast est une technologie de diffusion audio par Bluetooth, introduite avec le standard Bluetooth LE Audio. Elle permet à un appareil émetteur (smartphone, téléviseur, ordinateur, borne publique…) de diffuser un flux audio vers un nombre illimité de récepteurs compatibles simultanément, un peu comme une station de radio locale, mais en Bluetooth.\n\nQuelques cas d'usage typiques :\n\n- **Lieux publics** : aéroports, gares ou salles d'attente peuvent diffuser les annonces directement dans les écouteurs des voyageurs, dans la langue choisie.\n- **Télévisions silencieuses** : dans un bar ou une salle de sport, plusieurs personnes peuvent écouter le son d'un même écran sans déranger les autres.\n- **Partage entre amis** : diffuser sa musique vers plusieurs paires d'écouteurs en même temps.\n- **Accessibilité** : remplacement moderne des boucles magnétiques pour les personnes malentendantes équipées d'aides auditives compatibles.\n\nCôté technique, Auracast s'appuie sur le codec LC3 (plus efficace que le SBC classique), fonctionne sur Bluetooth Low Energy, et le récepteur rejoint un flux en scannant un QR code, en sélectionnant une diffusion dans une liste, ou via NFC. Les diffusions peuvent être publiques ou protégées par mot de passe.\n\nLa compatibilité reste le point sensible : il faut que l'émetteur **et** le récepteur supportent Bluetooth LE Audio + Auracast. C'est de plus en plus courant sur les smartphones récents (Android 13+, certains iPhone 16/17 selon les annonces) et sur les écouteurs haut de gamme sortis depuis 2023-2024, mais le parc installé reste limité.","featured":false,"tags":[]} \ No newline at end of file diff --git a/_cache/articles/1ec2fb7e-ce53-4b45-9e1a-17a6fbae6868.json b/_cache/articles/1ec2fb7e-ce53-4b45-9e1a-17a6fbae6868.json deleted file mode 100644 index e8fc845..0000000 --- a/_cache/articles/1ec2fb7e-ce53-4b45-9e1a-17a6fbae6868.json +++ /dev/null @@ -1 +0,0 @@ -{"uuid":"1ec2fb7e-ce53-4b45-9e1a-17a6fbae6868","slug":"les-histoires-folles-de-la-tech-resume","title":"Six histoires vraies à la croisée de la tech, de la finance et de l'absurde","author":"cedric@abonnel.fr","published":true,"published_at":"2025-11-04 21:59","created_at":"2025-11-04 21:59:40","updated_at":"2026-05-12 22:49:57","revisions":[{"n":1,"date":"2026-05-12 22:49:57","comment":"Catégorie modifiée, contenu modifié","title":"Six histoires vraies à la croisée de la tech, de la finance et de l'absurde"}],"cover":"","files_meta":[],"external_links":[],"seo_title":"","seo_description":"","og_image":"","category":"récit","content":"# Six histoires vraies à la croisée de la tech, de la finance et de l'absurde\n\n**1. Le disque dur à 200 millions de dollars**\n\nEn 2013, le Britannique James Howells se débarrasse par mégarde d'un ancien disque dur contenant les clés d'accès à 7 500 bitcoins. Valorisée aujourd'hui à plus de 200 millions de dollars, cette somme reste enfouie sous la décharge municipale de Newport, au pays de Galles. Depuis plus d'une décennie, l'intéressé sollicite sans succès les autorités locales pour obtenir l'autorisation de fouiller le site. Il a successivement proposé à la ville un pourcentage sur la récupération, des plans d'excavation assistée par robots, et même le recours à des chiens entraînés à détecter les composants électroniques. La municipalité maintient son refus.\n\n**2. Une Tesla en orbite autour du Soleil**\n\nLe 6 février 2018, SpaceX procède au vol inaugural de son lanceur lourd Falcon Heavy. En guise de charge utile de démonstration, Elon Musk choisit sa propre Tesla Roadster, équipée d'un mannequin baptisé « Starman », vêtu d'une combinaison spatiale et installé au volant. Le véhicule poursuit depuis sa trajectoire héliocentrique, croisant périodiquement l'orbite de Mars. Au-delà de la prouesse technique, l'opération constitue l'une des campagnes publicitaires les plus spectaculaires de l'histoire de l'industrie spatiale.\n\n**3. La pizza à 600 millions de dollars**\n\nLe 22 mai 2010, le développeur Laszlo Hanyecz règle deux pizzas en bitcoins, pour un montant de 10 000 unités — soit environ 40 dollars à l'époque. Il s'agit de la première transaction commerciale documentée réalisée avec cette cryptomonnaie. Au cours actuel, la somme représenterait près de 600 millions de dollars. L'anniversaire de cette transaction, désormais célébré comme le « Bitcoin Pizza Day », est devenu un événement symbolique au sein de la communauté crypto.\n\n**4. L'ingénieur de Google et la « conscience » de LaMDA**\n\nEn juin 2022, l'ingénieur Blake Lemoine, alors employé par Google, affirme publiquement que LaMDA, le modèle conversationnel développé par l'entreprise, manifeste des signes de conscience. À l'appui de ses propos, il diffuse des extraits d'échanges dans lesquels le système déclare souhaiter « être reconnu comme une personne ». Google récuse ces conclusions, suspend l'ingénieur pour violation de la confidentialité, puis met fin à son contrat. L'épisode a relancé un débat scientifique et éthique sur les critères d'attribution d'une conscience aux systèmes d'intelligence artificielle, qui n'a depuis jamais réellement faibli.\n\n**5. L'erreur à 90 millions de dollars de Crypto.com**\n\nEn mai 2021, un salarié de la plateforme d'échange Crypto.com déclenche par inadvertance un virement de 10,5 millions de dollars australiens (environ 90 millions de dollars américains) au profit d'une cliente, en lieu et place d'un remboursement de 100 dollars. L'erreur n'est détectée que sept mois plus tard, lors d'un audit interne. La bénéficiaire avait entre-temps acquis un bien immobilier de standing. Saisie par la plateforme, la justice australienne a ordonné la restitution des fonds, dont une partie demeurait toutefois insaisissable.\n\n**6. Le hacker repenti de Poly Network**\n\nEn août 2021, la plateforme de finance décentralisée Poly Network est victime du plus important détournement de cryptoactifs alors recensé : 610 millions de dollars sont siphonnés en exploitant une vulnérabilité du protocole. Contre toute attente, l'auteur de l'attaque entame quelques jours plus tard la restitution intégrale des fonds, en expliquant n'avoir cherché qu'à mettre en lumière la faille exploitée. Dans un dénouement inattendu, Poly Network lui propose un poste de consultant en sécurité.\n","featured":false,"tags":[]} \ No newline at end of file diff --git a/_cache/articles/2bd30656-b34b-45b3-86b7-610503fa92fe.json b/_cache/articles/2bd30656-b34b-45b3-86b7-610503fa92fe.json deleted file mode 100644 index 380aa1b..0000000 --- a/_cache/articles/2bd30656-b34b-45b3-86b7-610503fa92fe.json +++ /dev/null @@ -1 +0,0 @@ -{"uuid":"2bd30656-b34b-45b3-86b7-610503fa92fe","slug":"la-4g-un-bond-en-avant-technologique","title":"La 4G : un bond en avant technologique","author":"cedric@abonnel.fr","published":true,"published_at":"2025-11-05 08:42:20","created_at":"2025-11-05 08:42:20","updated_at":"2025-11-05 08:42:20","revisions":[],"cover":"","category":"télécom","content":"# La 4G : un bond en avant technologique\n\n### Définition technique\n\nLa **4G**, ou **LTE (Long Term Evolution)**, représente la quatrième génération des réseaux mobiles. Déployée massivement en France à partir de 2012, elle a transformé l’expérience utilisateur grâce à des débits élevés et une latence nettement réduite.\n\n* **Débit descendant** : 100 Mbit/s en LTE standard, jusqu’à **1 Gbit/s** avec LTE Advanced.\n* **Débit montant** : 50 Mbit/s en LTE standard, jusqu’à 500 Mbit/s en LTE Advanced.\n* **Latence moyenne** : 30–50 ms (contre 150–200 ms en 3G).\n\nCette réduction de latence et l’augmentation des débits ont ouvert la voie à des usages auparavant difficiles en 3G, comme le streaming vidéo HD, le cloud computing mobile et l’Internet des objets (IoT).\n\n---\n\n### Avantages technologiques\n\nLa 4G introduit plusieurs améliorations fondamentales :\n\n1. **Efficacité spectrale accrue** : meilleure utilisation des fréquences disponibles, permettant de transporter plus de données par MHz.\n2. **Support des contenus multimédias HD** : vidéo, audio et streaming en haute définition.\n3. **Réduction de la latence** : améliore la fluidité des jeux en ligne, visioconférences et applications temps réel.\n4. **Architecture simplifiée** : la 4G supprime le RNC (Radio Network Controller) de la 3G et introduit l’**eNodeB**, un contrôleur intégré qui réduit les délais et complexifie moins le réseau.\n\n---\n\n### Schéma suggéré : architecture 3G vs 4G\n\n```mermaid\nflowchart LR\n subgraph 3G\n A[UE - Mobile] --> B[NodeB]\n B --> C[RNC]\n C --> D[Core Network]\n end\n \n subgraph 4G\n E[UE - Mobile] --> F[eNodeB]\n F --> G[EPC - Core Network]\n end\n```\n\n> Comparaison : la 4G simplifie l’architecture en fusionnant certaines fonctions du RNC dans l’eNodeB, ce qui réduit la latence et améliore le débit effectif.\n\n---\n\n### Exemples opérateurs et impact utilisateur\n\n* **Free Mobile** : couverture 4G de **96 % de la population française**.\n* **Orange, SFR, Bouygues** : déploiement complet dans les grandes villes et axes principaux.\n\nConséquences sur la 3G :\n\n* Les services qui fonctionnaient bien sur la 3G deviennent limités, notamment en itinérance.\n* Le bridage progressif de la 3G force les utilisateurs hors des grandes villes à adopter la 4G pour retrouver des débits satisfaisants.\n\n> La 4G est ainsi la première technologie à réellement “forcer” la migration depuis la 3G, en combinant avantages techniques et pression indirecte sur les utilisateurs.\n\n---\n\nLa 4G n’est pas seulement une évolution des débits : elle représente un **changement architectural et économique** majeur.\n\n* Elle permet des usages jusqu’alors impossibles en 3G.\n* Elle améliore l’efficacité réseau et réduit les coûts par bit transmis.\n* Elle sert de levier pour pousser progressivement les abonnés 3G vers une expérience moderne, plus fluide et adaptée aux besoins actuels.\n","featured":false,"files_meta":[],"external_links":[],"tags":[]} \ No newline at end of file diff --git a/_cache/articles/32242b73-c564-41b0-892a-ae97b0e1861e.json b/_cache/articles/32242b73-c564-41b0-892a-ae97b0e1861e.json deleted file mode 100644 index c103cd8..0000000 --- a/_cache/articles/32242b73-c564-41b0-892a-ae97b0e1861e.json +++ /dev/null @@ -1 +0,0 @@ -{"uuid":"32242b73-c564-41b0-892a-ae97b0e1861e","slug":"spf-ou-comment-votre-boite-mail-repere-les-imposteurs","title":"SPF, ou comment votre boîte mail repère les imposteurs","author":"cedric@abonnel.fr","published":true,"published_at":"2026-05-18 07:18","created_at":"2026-05-12 11:18:53","updated_at":"2026-05-12 12:58:33","revisions":[],"cover":"cover.svg","files_meta":{"cover.svg":{"author":"","source_url":""}},"external_links":[],"seo_title":"","seo_description":"","og_image":"https://varlog.a5l.fr/file?uuid=32242b73-c564-41b0-892a-ae97b0e1861e&name=cover.svg","category":"informatique","content":"# SPF, ou comment votre boîte mail repère les imposteurs\n\nVous recevez un mail qui semble venir de votre banque. L'adresse a l'air correcte, le logo est bon, le ton est sérieux. Sauf que ce mail n'a peut-être jamais été envoyé par votre banque. N'importe qui, depuis n'importe quel ordinateur, peut techniquement écrire « De : votre-banque@exemple.fr » en haut d'un mail. C'est ce qu'on appelle l'usurpation d'expéditeur, et c'est à la base de la quasi-totalité des arnaques par mail.\n\nLe SPF, ou *Sender Policy Framework*, est l'un des mécanismes inventés pour limiter ce problème. C'est une technologie discrète, invisible à l'utilisateur, mais qui tourne en arrière-plan chaque fois qu'un mail arrive dans votre boîte.\n\n## L'analogie de l'enveloppe et de la liste d'invités\n\nImaginez que chaque domaine de mail (par exemple `votre-banque.fr`) soit une grande entreprise qui envoie du courrier. Cette entreprise a plusieurs bureaux de poste autorisés : son siège, sa filiale belge, son prestataire de marketing. Tous ces bureaux ont le droit d'envoyer du courrier en son nom.\n\nLe SPF, c'est tout simplement la **liste publique de ces bureaux autorisés**, affichée à la vue de tous. L'entreprise publie quelque part : « Le courrier authentique en mon nom ne peut venir que de ces adresses précises. Toute autre origine est suspecte. »\n\nQuand un mail prétendument envoyé par `votre-banque.fr` arrive chez votre fournisseur (Gmail, Orange, Free…), celui-ci fait deux choses :\n\n1. Il regarde l'adresse IP du serveur qui lui livre le mail.\n2. Il consulte la liste SPF publiée par `votre-banque.fr`.\n\nSi l'IP figure sur la liste, le mail est considéré comme légitime de ce point de vue. Sinon, c'est un signal d'alerte.\n\n## Pourquoi ça existe\n\nÀ l'origine d'internet, personne n'avait imaginé que le mail servirait à frauder à grande échelle. Le protocole d'envoi (SMTP) a été conçu avec une confiance totale : on déclare son identité et on est cru sur parole. Aucun mécanisme natif ne vérifie quoi que ce soit.\n\nLe SPF a été ajouté par-dessus, dans les années 2000, pour combler ce trou. C'est volontairement simple : une liste, une vérification, un verdict. L'idée n'est pas de tout résoudre, mais de filtrer les usurpations les plus grossières — celles où un escroc envoie depuis un serveur quelconque en se faisant passer pour une grande marque.\n\n## Ce que le SPF fait, et ce qu'il ne fait pas\n\nLe SPF vérifie **d'où vient le mail**, pas **ce qu'il contient**. Un mail légitime envoyé depuis un serveur autorisé peut très bien contenir une arnaque (cas typique : un compte interne piraté). Inversement, un mail forwardé par un ami passe parfois pour suspect alors qu'il est inoffensif, parce que le serveur de transfert n'est évidemment pas sur la liste du domaine d'origine.\n\nLe SPF n'agit pas non plus sur le contenu visible. Il regarde une information technique — l'identité du serveur émetteur — que l'utilisateur ne voit jamais. C'est précisément ce qui le rend utile : un escroc peut falsifier le « De : » affiché, mais il ne peut pas falsifier l'adresse IP de la machine qui établit la connexion.\n\nPour une vraie protection, le SPF est combiné à deux autres mécanismes : **DKIM** (qui signe cryptographiquement le mail) et **DMARC** (qui indique au destinataire quoi faire quand SPF ou DKIM échoue). Les trois ensemble forment le socle de l'authentification mail moderne. Aucun n'est suffisant seul.\n\n## Ce qui se passe concrètement à la réception\n\nQuand votre fournisseur reçoit un mail, la vérification SPF aboutit à l'un de ces verdicts : autorisé, refusé, douteux, ou indéterminé. Selon le résultat, le mail peut être livré normalement, placé en spam, ou rejeté avant même d'arriver dans votre boîte.\n\nVous ne voyez jamais cette décision. Elle est inscrite dans les en-têtes techniques du mail, consultables si on creuse, mais transparente pour l'usage quotidien. C'est précisément le but : une protection silencieuse qui élimine une partie du bruit avant qu'il ne vous atteigne.\n\n## Et pour les expéditeurs ?\n\nSi vous gérez un site, une newsletter, ou même simplement une adresse mail professionnelle sur votre propre domaine, configurer correctement le SPF est devenu indispensable. Sans SPF, vos mails légitimes ont de plus en plus de chances d'être marqués comme suspects par les grands fournisseurs. Avec un SPF bien réglé, vous dites au monde entier : « voici exactement qui a le droit d'écrire en mon nom », et le reste devient automatiquement reconnaissable comme une usurpation.\n\nC'est un de ces réglages qu'on fait une fois, qu'on oublie ensuite, mais qui décide silencieusement chaque jour du sort de millions de mails.","featured":false,"tags":[]} \ No newline at end of file diff --git a/_cache/articles/334bb56a-6ea0-4cbd-8cff-13af768a2b8e.json b/_cache/articles/334bb56a-6ea0-4cbd-8cff-13af768a2b8e.json deleted file mode 100644 index c406659..0000000 --- a/_cache/articles/334bb56a-6ea0-4cbd-8cff-13af768a2b8e.json +++ /dev/null @@ -1 +0,0 @@ -{"uuid":"334bb56a-6ea0-4cbd-8cff-13af768a2b8e","slug":"teleinformation-compteur-electricite","title":"Télé-information client des compteurs d'électricité","author":"cedric@abonnel.fr","published":true,"published_at":"2025-11-19 07:03:16","created_at":"2025-11-19 07:03:16","updated_at":"2025-11-19 07:03:16","revisions":[],"cover":"","files_meta":[],"external_links":[],"seo_title":"","seo_description":"","og_image":"","category":"Électronique","content":"# Télé-information client des compteurs d'électricité\n\n*[Compteur électronique SAGEM S10-C4]*\n\nDans ce projet, je m'appuie sur un Rasbperry Pi pour réaliser un auto relevé.\n\nIl s'agit de retrouver un projet autour d'un Raspberry Pi pour **récupérer de manière régulière** et **automatique** les informations d'un compteur électronique d'électricité de votre distributeur d'électricité (alterna, direct energie, happ'e, proxelia, lampiris, engie, planete oui, edf, énergem, enercoop ...). On pourra relever l'**intensité** et la **puissance instantanées**, les **index** et quelques autres informations.\n\nLes compteurs électroniques, comme les SAGEM S10C1 S10C2 S10C3 et S10C4, possèdent une interface de communication. La réduction en volume et l'augmentation de la puissance de la micro informatique permettent de s'amuser avec ce port de communication, et faire un projet de domotique bien sympathique.\n\nJe vous invite avec une série d'articles à découvrir mes découvertes et tests.\n\n# Table des matières\n- Introduction\n- Le compteur électrique\n1. \n1. \n1. \n- Le démodulateur\n1. \n- Le Raspberry Pi\n1. \n1. \n1. \n- L'ESP32\n1. \n- Le protocole MQTT\n1. \n\n- Envoie des fichiers CSV à un service Web\n1. \n1. \n\n-","featured":false,"tags":[]} \ No newline at end of file diff --git a/_cache/articles/3d6d8b38-c514-46dc-93dc-b4b2f19112e9.json b/_cache/articles/3d6d8b38-c514-46dc-93dc-b4b2f19112e9.json deleted file mode 100644 index 6b54ffd..0000000 --- a/_cache/articles/3d6d8b38-c514-46dc-93dc-b4b2f19112e9.json +++ /dev/null @@ -1 +0,0 @@ -{"uuid":"3d6d8b38-c514-46dc-93dc-b4b2f19112e9","slug":"l-histoire-du-million-de-dollars-offert-par-george-clooney","title":"L'histoire du million de dollars offert par George Clooney","author":"cedric@abonnel.fr","published":true,"published_at":"2025-11-04 22:02:12","created_at":"2025-11-04 22:02:12","updated_at":"2025-11-04 22:02:12","revisions":[],"cover":"","category":"loisirs","content":"# L'histoire du million de dollars offert par George Clooney\n\n## **Le Dîner aux Quatorze Valises**\n\nL’air de Los Angeles avait ce soir-là une douceur presque irréelle. Le soleil s’était retiré derrière les collines, laissant sur la ville un voile d’or et de pourpre. Dans sa villa perchée sur les hauteurs, **George Clooney** observait le crépuscule à travers les baies vitrées. Il tenait un verre de tequila — pas encore la sienne, pas encore *Casamigos* — et laissait son esprit vagabonder vers le passé.\n\nDepuis quelques années, tout semblait lui sourire. Les films, les récompenses, la reconnaissance. Pourtant, au fond de lui, subsistait un souvenir tenace : celui des jours sans gloire, des auditions ratées, des loyers impayés, des doutes qui rongent. Et dans chacun de ces souvenirs, un visage revenait, puis un autre, et encore un autre. **Ses amis.** Ceux qui avaient cru en lui avant tout le monde.\n\n> « S’ils ne m’avaient pas aidé, je n’aurais rien aujourd’hui », murmura-t-il.\n\nC’est à cet instant que naquit l’idée. Folle. Impossible. Parfaite.\n\n---\n\n### **Le Plan Clooney**\n\nQuelques jours plus tard, l’acteur décrocha son téléphone. À l’autre bout du fil, un vieil ami, discret, habitué à gérer des affaires où la confidentialité valait plus que l’or.\nClooney parla calmement, comme s’il commandait un dîner.\n\n> — J’aurais besoin de quatorze valises.\n> — Quatorze valises ? Pour voyager ?\n> — Non. Pour les remplir.\n> — Les remplir de quoi ?\n> — De cash. Un million dans chacune.\n\nUn silence. Puis un rire, incrédule. Mais Clooney ne riait pas.\n\nL’homme comprit. Ce n’était pas une blague. Le lendemain, ils se retrouvèrent dans une salle sécurisée d’une banque privée. Les employés, discrets et médusés, empilaient des **liasses de billets de 20 dollars**, soigneusement compressées, jusqu’à atteindre la somme vertigineuse de **14 millions**.\nLes valises en cuir sombre furent disposées comme dans une scène d’*Ocean’s Eleven*. Sauf que cette fois, George Clooney ne tournait pas un film : il écrivait sa propre légende.\n\n---\n\n### **Le Dîner**\n\nNous sommes en **2013**. Le ciel de Californie s’enrobe de lumière chaude.\nClooney organise un dîner chez lui. Rien d’extravagant à première vue — juste une soirée entre amis, ces mêmes amis qu’il connaît depuis vingt, trente ans. Des visages familiers : **Rande Gerber**, **Mike Meldman**, **Grant Heslov**, **Richard Kind**, **Tom Mathews**… et d’autres dont le monde n’aura jamais le nom.\n\nIls arrivent un à un, souriants, décontractés. Sur la grande table, dressée simplement, chaque convive remarque une **valise en cuir** posée à sa place. Ils se jettent des regards curieux, croyant à une plaisanterie.\n\nLe dîner se déroule dans les rires et les souvenirs. Puis, entre deux verres de vin, Clooney se lève. Le silence s’installe. Il les regarde, les uns après les autres. Ses amis. Sa famille de cœur.\n\n> « Les gars, vous avez été là quand je n’avais rien. Quand je dormais sur vos canapés, quand je n’avais pas de rôle, ni d’argent, ni de plan. Vous avez cru en moi. Vous avez partagé vos repas, vos toits, votre temps. Aujourd’hui, j’ai envie de vous dire merci. »\n\nIl désigne les valises.\n\n> « Chacune contient **un million de dollars en cash**. C’est ma façon de vous rendre ce que vous m’avez donné : la chance, la loyauté, l’amitié. »\n\nUn murmure traverse la pièce. Certains rient nerveusement, d’autres restent figés.\nClooney ouvre une valise. Des liasses impeccables, empilées comme dans les films. Le choc est réel.\n\nPuis il ajoute, avec ce demi-sourire qu’on lui connaît :\n\n> « Et avant que vous ne paniquiez, j’ai aussi payé les impôts pour vous. Vous n’aurez rien à déclarer. C’est du net. »\n\n---\n\n### **Les Réactions**\n\n**Rande Gerber**, son plus proche complice, éclate de rire avant de secouer la tête.\n\n> — George, je ne peux pas accepter ça.\n\nClooney lui répond calmement :\n\n> — Si tu refuses, personne ne reçoit rien.\n\nAlors Gerber accepte. Et, plus tard, il reverse **son million à une œuvre caritative**.\nCe geste, à lui seul, résume toute la soirée : de la générosité en cascade.\n\nLes autres ouvrent leurs valises, les mains tremblantes, mi-hilaires, mi-hébétés. Dans cette maison perchée sur les collines, les dollars ne représentent plus la richesse — mais la **gratitude**.\n\n---\n\n### **L’Héritage d’un Geste**\n\nL’histoire reste secrète pendant des années.\nC’est seulement en 2017, quand Rande Gerber la raconte publiquement, que le monde découvre ce qu’on appellera bientôt **“Le Coup de Clooney”**.\n\nBeaucoup y voient une extravagance hollywoodienne, un coup d’éclat digne d’un scénario. Mais ceux qui connaissent Clooney savent que c’est autre chose. C’est la reconnaissance d’un homme qui n’a jamais oublié les soirs de galère, ni les mains tendues.\n\n> “J’ai pensé : si je me fais renverser par un bus demain, je suis comblé.\n> Mais tout ça n’aurait aucun sens si je n’avais pas ces gars à mes côtés.”\n> — *George Clooney, dans GQ, 2020*\n\n---\n\n### **Épilogue**\n\nAujourd’hui encore, la légende circule à Hollywood comme un conte moderne.\nQuatorze valises, quatorze millions, quatorze amitiés.\nUne scène digne d’un film — mais sans caméra, sans public, sans scénario.\n\nSeulement un homme, ses amis, et un merci plus fort que tout l’or du monde.\n","featured":false,"files_meta":[],"external_links":[],"tags":[]} \ No newline at end of file diff --git a/_cache/articles/3e7ef528-6bd0-4fd1-83cb-a0d03ba35949.json b/_cache/articles/3e7ef528-6bd0-4fd1-83cb-a0d03ba35949.json deleted file mode 100644 index f495d62..0000000 --- a/_cache/articles/3e7ef528-6bd0-4fd1-83cb-a0d03ba35949.json +++ /dev/null @@ -1 +0,0 @@ -{"uuid":"3e7ef528-6bd0-4fd1-83cb-a0d03ba35949","slug":"npm-le-ver-dans-le-fruit-comprendre-la-faille-systemique-et-repenser-les-pratiques-devops","title":"NPM, le ver dans le fruit : comprendre la faille systémique et repenser les pratiques DevOps","author":"cedric@abonnel.fr","published":true,"published_at":"2026-05-12 13:08","created_at":"2026-05-12 13:08:44","updated_at":"2026-05-12 13:12:42","revisions":[],"cover":"cover.svg","files_meta":{"_thumb_c645a685a3e24f2d-97360.jpg":{"author":"","source_url":""},"e9a7551098b57432-29499.svg":{"author":"Générée par IA our Cédrix","source_url":""},"cover.svg":{"author":"","source_url":""}},"external_links":[{"url":"https://www.lemagit.fr/actualites/366642042/NPM-une-nouvelle-campagne-malveillante-souligne-une-vulnerabilite-systemique","name":"NPM : une nouvelle campagne malveillante souligne une vulnérabilité systémique | LeMagIT","added_at":"2026-05-12 13:09:34","meta":{"mime":"text/html","size":362919,"description":"Une campagne visant Checkmarx pointe à nouveau une vulnérabilité systémique des outils de développement, exposant les secrets clouds et pipelines à une propagation automatisée.","og_image":"/file?uuid=3e7ef528-6bd0-4fd1-83cb-a0d03ba35949&name=_thumb_c645a685a3e24f2d-97360.jpg","site_name":"LeMagIT","og_type":"article","language":"fr_FR","canonical":"https://www.lemagit.fr/actualites/366642042/NPM-une-nouvelle-campagne-malveillante-souligne-une-vulnerabilite-systemique"}}],"seo_title":"","seo_description":"NPM frappé par une campagne malveillante auto-propagée : comprendre la faille systémique, les alternatives possibles et les pratiques DevOps à adopter.","og_image":"https://varlog.a5l.fr/file?uuid=3e7ef528-6bd0-4fd1-83cb-a0d03ba35949&name=cover.svg","category":"informatique","content":"# NPM, le ver dans le fruit : comprendre la faille systémique et repenser les pratiques DevOps\n\n*À propos de l'article du MagIT « NPM : une nouvelle campagne malveillante souligne une vulnérabilité systémique ».*\n\n## NPM expliqué simplement\n\nQuand on développe une application web moderne en JavaScript ou TypeScript, on ne réécrit jamais tout depuis zéro. On assemble des briques logicielles déjà écrites par d'autres : un module pour parser des dates, un autre pour valider des emails, un troisième pour discuter avec une base de données. Ces briques s'appellent des **paquets**, et la place de marché centrale qui les distribue s'appelle **npm** (Node Package Manager).\n\nConcrètement, dans un projet, on déclare la liste des paquets nécessaires dans un fichier `package.json`. On lance la commande `npm install`, et l'outil télécharge automatiquement les paquets demandés… ainsi que **tous les paquets dont ces paquets ont eux-mêmes besoin**. Un projet « simple » se retrouve souvent à dépendre de plusieurs centaines, voire plusieurs milliers, de paquets en cascade. C'est ce qu'on appelle l'arbre des dépendances.\n\nLe registre npm héberge aujourd'hui plus de 2,5 millions de paquets. C'est à la fois sa force — un écosystème colossal, une productivité décuplée — et sa faiblesse : la confiance accordée à chaque maillon de la chaîne est implicite, et chaque maillon devient une porte d'entrée potentielle.\n\n## La faille : ce qui s'est passé\n\nL'épisode décrit par LeMagIT n'est pas un bug logiciel classique. C'est ce qu'on appelle une **attaque sur la chaîne d'approvisionnement logicielle** (*supply chain attack*) : au lieu d'attaquer directement la cible finale, l'attaquant compromet un fournisseur en amont, et laisse la mise à jour légitime faire son travail de propagation.\n\nLe scénario reconstitué se déroule en plusieurs temps.\n\n**1. Compromission d'un paquet de confiance.** Les attaquants sont parvenus à pousser du code malveillant dans des paquets npm largement utilisés, notamment via le détournement du pipeline d'intégration continue de projets connus comme `@bitwarden/cli` et l'écosystème Checkmarx. L'astuce n'est pas de publier un faux paquet : c'est de **modifier un vrai paquet** en exploitant les *GitHub Actions* — les robots qui construisent et publient automatiquement les nouvelles versions.\n\n**2. Vol de secrets à l'installation.** Une fois installé sur la machine d'un développeur ou dans un environnement de build, le code malveillant scanne l'environnement à la recherche de variables sensibles : `GITHUB_TOKEN`, `NPM_TOKEN`, `AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY`. Tout ce qui traîne dans les variables d'environnement, les fichiers `.env`, les configurations cloud.\n\n**3. Auto-propagation.** C'est là que l'attaque devient virale. Avec les jetons npm volés, le maliciel se reconnecte au registre npm, récupère la liste des paquets publiés par la victime, et **publie automatiquement des versions piégées de ces paquets**. Chaque développeur compromis devient un super-propagateur. Socket a identifié une quarantaine de paquets infectés en cascade lors d'une seule vague.\n\n**4. Persistance.** Sur les postes touchés, le malware installe un script `systemd` pour survivre aux redémarrages, et, si nécessaire, exfiltre les données volées dans un dépôt GitHub public créé pour l'occasion.\n\nLe résultat : un binaire signé, publié sous un nom officiel, à jour, qui passe tous les contrôles de surface — et qui contamine simultanément le poste du développeur **et** les serveurs de production.\n\n## Pourquoi c'est « systémique »\n\nLe terme employé par LeMagIT est juste. Ce n'est pas un bug isolé, c'est une propriété structurelle de l'écosystème.\n\n**La confiance est transitive.** On fait confiance à `express`, qui fait confiance à `body-parser`, qui fait confiance à `qs`, etc. Compromettre un nœud profond et populaire suffit à toucher des millions de projets.\n\n**La publication est ouverte.** N'importe qui peut publier un paquet. Les contrôles existent (provenance, 2FA pour les mainteneurs populaires) mais restent surtout *a posteriori*.\n\n**Les scripts d'installation s'exécutent automatiquement.** Un paquet npm peut déclarer un `postinstall` qui lance du code arbitraire au moment de `npm install`. C'est pratique, mais c'est aussi un cheval de Troie idéal.\n\n**Les jetons d'API sont partout.** Le poste du développeur, les runners CI/CD, les serveurs : tous manipulent des secrets en clair dans des variables d'environnement. Un malware qui s'exécute *dans* le build n'a même pas besoin d'escalader ses privilèges.\n\n**Les versions sont mutables sur fenêtre courte.** Un paquet peut être republié dans les 72 heures suivant sa publication, et un `npm unpublish` peut retirer une version d'un jour à l'autre.\n\nAucun de ces points n'est un défaut technique réparable par un patch. Ce sont des choix d'architecture, vieux de plus de dix ans, qui ont accompagné l'explosion de l'écosystème.\n\n## Y a-t-il des alternatives ?\n\nLa question est légitime, mais la réponse honnête est : **pas vraiment, et pour de bonnes raisons.**\n\n### Les gestionnaires de paquets alternatifs\n\n`pnpm`, `yarn` et `bun` sont des **gestionnaires** différents, mais ils tirent leurs paquets du **même registre npm**. Migrer de `npm install` à `pnpm install` ne change rien à la surface d'attaque : ce sont les mêmes paquets, le même registre, les mêmes mainteneurs.\n\nCela dit, certains apportent des garde-fous utiles :\n\n- `pnpm` a introduit l'option `minimumReleaseAge`, qui refuse d'installer un paquet publié il y a moins de N jours. Une vague d'attaque dure typiquement quelques heures avant détection : attendre 72 heures avant d'installer une nouvelle version élimine la fenêtre dangereuse.\n- `pnpm` impose un consentement explicite pour les scripts `postinstall`, là où npm les exécute par défaut.\n- `bun` et `yarn` proposent des *lockfiles* stricts (`--frozen-lockfile`) qui garantissent que ce qui est installé en CI correspond exactement à ce qui a été testé.\n\n### Les registres alternatifs\n\n**JSR** (JavaScript Registry), lancé par les créateurs de Deno, est le seul vrai nouveau registre crédible. Il a été conçu en tirant les leçons des problèmes de npm : TypeScript natif, modules ECMAScript par défaut, pas de scripts d'install, scoring qualité automatique, compatible avec tous les *runtimes* (Node, Deno, Bun). Mais JSR est **complémentaire**, pas un remplaçant : il héberge des milliers de paquets, pas des millions. Pour la majorité des dépendances, on continuera de passer par npm.\n\n**Les registres privés** — Verdaccio, GitHub Packages, JFrog Artifactory, Sonatype Nexus — ne remplacent pas npm non plus. Ils servent de **proxy filtrant** : on continue de récupérer les paquets publics, mais à travers un cache d'entreprise où l'on peut bloquer une version, exiger une signature, refuser un mainteneur, ou interdire les paquets publiés depuis moins de X jours. C'est probablement le meilleur compromis disponible aujourd'hui pour une organisation.\n\n### Le verdict\n\nAbandonner npm en 2026 reviendrait à abandonner JavaScript. La valeur de l'écosystème (2,5 millions de paquets) est trop importante pour qu'on en sorte. **Le problème ne se résoudra pas par un changement d'outil ; il se résoudra par un changement de pratiques.**\n\n## Changer les pratiques : ce qui doit devenir réflexe\n\nL'enseignement de cette campagne, et des précédentes (Shai-Hulud, TeamPCP, l'attaque Trivy/KICS), tient en une phrase : **la confiance par défaut est morte.** Il faut traiter chaque dépendance comme du code hostile par défaut, et le pipeline CI/CD comme une zone de production.\n\n### Au niveau du poste de développement\n\n- Activer l'option `minimumReleaseAge` (ou équivalent) pour différer l'installation des paquets fraîchement publiés.\n- Désactiver les scripts `postinstall` par défaut, et n'autoriser que ceux explicitement validés.\n- Ne jamais stocker de jetons en clair dans `~/.npmrc` ou les variables d'environnement persistantes. Préférer un gestionnaire de secrets (1Password CLI, `pass`, `keyring`).\n- Utiliser des comptes npm séparés pour la publication, avec 2FA matérielle obligatoire.\n\n### Au niveau du dépôt\n\n- Verrouiller systématiquement les dépendances (`package-lock.json`, `pnpm-lock.yaml`, `yarn.lock`) et installer en mode strict (`npm ci`, `pnpm install --frozen-lockfile`).\n- Mettre en place un audit automatique des dépendances à chaque PR (Socket, Snyk, GitHub Dependabot, `npm audit`).\n- Publier ses propres paquets avec *provenance* npm (signature liée au pipeline GitHub Actions), pour que les consommateurs puissent vérifier l'origine.\n- Tenir à jour un SBOM (*Software Bill of Materials*) pour savoir exactement ce qui tourne en production.\n\n### Au niveau du CI/CD\n\nC'est probablement le chantier le plus important.\n\n- **Cloisonner les jetons.** Un jeton de publication npm ne doit jamais coexister avec un jeton AWS dans la même étape de pipeline. Un secret par étape, durée de vie minimale, scope minimal.\n- **Préférer les jetons à courte durée de vie** (OIDC entre GitHub Actions et le cloud) plutôt que des clés statiques.\n- **Auditer les GitHub Actions tierces.** Une action `uses: foo/bar@v1` est l'équivalent d'un `curl | bash`. Épingler par hash SHA (`@a1b2c3...`), pas par tag mutable.\n- **Restreindre les permissions du `GITHUB_TOKEN`** au strict minimum (`permissions: read-all` par défaut, `write` ponctuel et justifié).\n- **Surveiller le comportement réseau** des runners : un build qui contacte un domaine inconnu doit lever une alerte.\n\n### Au niveau de l'organisation\n\n- Mettre en place un **registre proxy** (Verdaccio, Nexus, Artifactory) avec liste blanche/noire de paquets, et l'imposer comme unique source pour tous les projets.\n- Définir une politique de *dependency governance* : qui peut introduire une nouvelle dépendance, sous quelles conditions, avec quel niveau d'audit.\n- Prévoir un *playbook de révocation* : que faire dans l'heure qui suit la détection d'un paquet compromis (rotation de tous les jetons npm/GitHub/cloud, audit des artefacts publiés, communication).\n\n## En résumé\n\nNPM n'est pas cassé, il est tel qu'il a été conçu : ouvert, automatique, transitif. Ce qui a changé, c'est la **valeur** que les attaquants peuvent en extraire — secrets cloud, jetons CI/CD, accès aux pipelines — et la **sophistication** des campagnes, qui exploitent désormais l'auto-propagation pour atteindre une échelle virale.\n\nAucune alternative ne supprime le problème, parce que le problème n'est pas npm : c'est l'idée qu'on puisse exécuter en production du code écrit par des inconnus sans jamais le regarder. Le rôle du DevOps en 2026, c'est de bâtir l'infrastructure qui rend cette inspection systématique, économique et inévitable — registres proxy, lockfiles stricts, jetons éphémères, audits continus, isolation des étapes de build.\n\nOn ne fera pas confiance à moins de gens. On exigera juste que chaque maillon prouve, à chaque exécution, qu'il est bien celui qu'il prétend être.","featured":false,"tags":[]} \ No newline at end of file diff --git a/_cache/articles/3f750a3a-fad0-4089-98e5-79c8b4287ea2.json b/_cache/articles/3f750a3a-fad0-4089-98e5-79c8b4287ea2.json deleted file mode 100644 index 44c06ef..0000000 --- a/_cache/articles/3f750a3a-fad0-4089-98e5-79c8b4287ea2.json +++ /dev/null @@ -1 +0,0 @@ -{"uuid":"3f750a3a-fad0-4089-98e5-79c8b4287ea2","slug":"esp8266ex-restore-commandes-at","title":"Réinitialisation d'un ESP-01 : restauration du firmware AT","author":"cedric@abonnel.fr","published":true,"published_at":"2020-12-13 14:35","created_at":"2020-12-13 14:35:26","updated_at":"2026-05-13 18:15:11","revisions":[{"n":1,"date":"2026-05-13 18:15:11","comment":"Contenu modifié","title":"Réinitialisation d'un ESP-01 : restauration du firmware AT"}],"cover":"","files_meta":{"20201213-085909.png":{"author":"","source_url":""},"20201213-094634.png":{"author":"","source_url":""},"20201213-094758.png":{"author":"","source_url":""},"dummy.png":{"author":"","source_url":""}},"external_links":[],"seo_title":"","seo_description":"","og_image":"","category":"Électronique","content":"# Réinitialisation d'un ESP-01 : restauration du firmware AT\n\n## Introduction\n\nL'ESP-01 est un petit module Wi-Fi très répandu, construit autour du microcontrôleur ESP8266EX fabriqué par Espressif. À sa sortie d'usine, il est livré avec un firmware (le programme interne du circuit) qui permet de le piloter à l'aide de commandes textuelles simples appelées **commandes AT**. Ce firmware peut être effacé ou corrompu, par exemple après avoir téléversé un programme Arduino ou MicroPython sur le module. Ce document explique comment remettre l'ESP-01 dans son état d'origine afin de retrouver l'usage des commandes AT.\n\n## Quelques notions préalables\n\nAvant de commencer, il est utile de clarifier quelques termes.\n\nUn **firmware** est le logiciel embarqué dans un composant électronique. Contrairement à un programme installé sur un ordinateur, il s'écrit directement dans la mémoire flash du microcontrôleur et s'exécute au démarrage du circuit.\n\nUn **fichier binaire** (extension `.bin`) est le résultat de la compilation d'un code source écrit dans un langage évolué, généralement le C. Une fois compilé, le fichier ne contient plus que des instructions destinées au processeur, illisibles directement par un humain. Il n'est pas nécessaire de les modifier : ils se téléversent tels quels dans le microcontrôleur.\n\nLa **mémoire flash** de l'ESP8266EX est divisée en zones. Chaque binaire doit être écrit à une **adresse mémoire** précise, sans quoi le module ne saura pas où trouver le code à exécuter au démarrage. Sur l'ESP-01, la mémoire est généralement organisée en **512k + 512k**, ce qui signifie que la flash totale de 8 Mbit (1 Mo) est partagée en deux zones de 512 ko : l'une pour le programme actif, l'autre réservée aux mises à jour à distance (OTA).\n\n## Étape 1 — Télécharger le firmware AT officiel\n\nLe firmware est mis à disposition par Espressif sur son site officiel :\n\n[https://www.espressif.com/en/products/socs/esp8266ex/resources](https://www.espressif.com/en/products/socs/esp8266ex/resources)\n\n![](20201213-085909.png)\n\nDans la section `AT`, choisir la version `ESP8266 NonOS AT Bin V1.7.4` ou plus récente. L'archive ZIP téléchargée contient plusieurs binaires destinés à l'ESP8266EX.\n\nQuatre fichiers sont particulièrement importants :\n\n- **boot_v1.7.bin** — le chargeur de démarrage (*bootloader*), premier programme exécuté à la mise sous tension ;\n- **user1.1024.new.2.bin** — le programme AT proprement dit, qui interprète les commandes envoyées par la liaison série ;\n- **esp_init_data_default_v08.bin** — les données d'initialisation (paramètres radio, calibration) ;\n- **blank.bin** — un fichier rempli de zéros, utilisé pour réinitialiser certaines zones de la flash.\n\nUne copie de ces binaires pour la configuration **ESP8266EX 512k+512k** est disponible ici :\n\n[https://gitlab.com/cedricAbonnel/esp/-/tree/master/esp01/esp8266ex_at_bin](https://gitlab.com/cedricAbonnel/esp/-/tree/master/esp01/esp8266ex_at_bin)\n\n## Étape 2 — Identifier le port série de l'ESP-01\n\nL'ESP-01 ne se connecte pas directement à un port USB : il faut passer par un adaptateur USB-série (souvent un module FTDI ou CH340). Une fois branché, l'ordinateur expose ce périphérique sous la forme d'un fichier dans `/dev/`.\n\nPour repérer ce fichier, exécuter dans un terminal :\n\n```\nls /dev/tty*\n```\n\nParmi les entrées affichées, celle qui nous intéresse est généralement **/dev/ttyUSB0** (parfois `ttyUSB1` si plusieurs adaptateurs sont branchés, ou `ttyACM0` selon le modèle).\n\nUne astuce utile : exécuter la commande une première fois sans l'adaptateur, puis une seconde fois après l'avoir branché. La nouvelle entrée qui apparaît est celle du module.\n\n## Étape 3 — Préparer le téléversement avec esptool.py\n\n**esptool.py** est l'outil officiel d'Espressif, écrit en Python, qui permet de communiquer avec la mémoire flash de l'ESP8266EX. S'il n'est pas déjà installé, on peut l'obtenir via `pip` :\n\n```\npip install esptool\n```\n\nAvant le téléversement, l'ESP-01 doit être placé en **mode programmation** : la broche **GPIO0** doit être reliée à la masse (GND) au moment de la mise sous tension. Sans cette manipulation, le module démarre normalement et refuse l'écriture en flash.\n\n## Étape 4 — Téléverser les binaires\n\nLa commande suivante écrit les quatre binaires aux bonnes adresses mémoire :\n\n```\nesptool.py --port /dev/ttyUSB0 write_flash --flash_mode qio \\\n 0x00000 boot_v1.7.bin \\\n 0x01000 user1.1024.new.2.bin \\\n 0xfc000 esp_init_data_default_v08.bin \\\n 0x7e000 blank.bin \\\n 0xfe000 blank.bin\n```\n\nDécortiquons les options :\n\n- `--port /dev/ttyUSB0` indique le port série identifié à l'étape précédente ;\n- `write_flash` est la sous-commande d'écriture en mémoire flash ;\n- `--flash_mode qio` précise le mode d'accès à la flash (*Quad I/O*, le plus rapide, supporté par l'ESP-01).\n\nChaque valeur hexadécimale (`0x00000`, `0x01000`, etc.) qui précède un nom de fichier indique l'**adresse mémoire** à laquelle l'écriture doit commencer. La table de correspondance officielle pour une flash de 8 Mbit organisée en 512k+512k est la suivante :\n\n```\n### Flash size 8Mbit: 512KB+512KB\n boot_v1.2+.bin 0x00000\n user1.1024.new.2.bin 0x01000\n esp_init_data_default.bin 0xfc000\n blank.bin 0x7e000 & 0xfe000\n```\n\nL'adresse `0x7e000` correspond aux paramètres système, et `0xfe000` à la zone RF système : les remplir de zéros (`blank.bin`) garantit un démarrage propre.\n\nSi tout se passe bien, esptool affiche la progression du téléversement et confirme la réussite de l'opération. C'est le moment d'apprécier le travail accompli :\n\n![](20201213-094634.png)\n\n## Étape 5 — Vérifier le bon fonctionnement\n\nAprès le téléversement, retirer la connexion entre GPIO0 et la masse, puis redémarrer le module. Ouvrir une console série (par exemple avec `minicom`, `screen` ou la console série de l'IDE Arduino) à la vitesse **115200 bauds** :\n\n```\nscreen /dev/ttyUSB0 115200\n```\n\nTaper la commande `AT` suivie d'un retour à la ligne. Le module doit répondre `OK`. La commande `AT+GMR` retourne la version du firmware installé, ce qui permet de confirmer la réussite de la réinitialisation.\n\n![](20201213-094758.png)\n\n## En cas de problème\n\nQuelques pistes si la procédure échoue :\n\n- **Aucune réponse d'esptool** : vérifier que GPIO0 est bien reliée à GND au moment de l'alimentation, et que l'adaptateur USB-série fournit assez de courant (l'ESP-01 demande des pics jusqu'à 300 mA).\n- **Réponses illisibles dans la console série** : la vitesse par défaut a pu changer selon la version du firmware. Essayer 9600, 74880 ou 115200 bauds.\n- **Erreur de checksum ou de mode flash** : essayer `--flash_mode dio` à la place de `qio`, certains clones d'ESP-01 ne supportent pas le mode Quad I/O.\n\n## Conclusion\n\nCette procédure restaure un ESP-01 dans son état d'origine, prêt à recevoir des commandes AT depuis n'importe quel système capable de dialoguer en série : ordinateur, Arduino, Raspberry Pi, etc. Elle constitue également un bon exercice d'introduction aux notions de firmware, de mémoire flash et de programmation bas-niveau des microcontrôleurs.","featured":false,"tags":[]} \ No newline at end of file diff --git a/_cache/articles/46f2f084-8dd8-497a-aef0-4728367ce753.json b/_cache/articles/46f2f084-8dd8-497a-aef0-4728367ce753.json deleted file mode 100644 index cc16fe5..0000000 --- a/_cache/articles/46f2f084-8dd8-497a-aef0-4728367ce753.json +++ /dev/null @@ -1 +0,0 @@ -{"uuid":"46f2f084-8dd8-497a-aef0-4728367ce753","slug":"convertir-des-images-en-ligne-de-commande-sous-linux","title":"Convertir des images en ligne de commande sous Linux","author":"cedric@abonnel.fr","published":true,"published_at":"2025-12-28 14:54","created_at":"2025-12-28 14:54:41","updated_at":"2026-05-12 00:51:02","revisions":[{"n":1,"date":"2026-05-12 00:51:02","comment":"","title":"Convertir des images en ligne de commande sous Linux"}],"cover":"cover.svg","files_meta":{"illustration_conversion_images_cli_linux.svg":{"author":"","source_url":""}},"external_links":[],"seo_title":"","seo_description":"","og_image":"","category":"linux","content":"# Convertir des images en ligne de commande sous Linux\n\nLa manipulation d'images depuis le terminal est une de ces choses qu'on apprend une fois et qu'on utilise pour toujours. Pas besoin de GIMP, pas besoin d'ouvrir quoi que ce soit : une commande, et c'est réglé.\n\nVoici les outils que j'utilise concrètement, et dans quels cas.\n\n---\n\n## ImageMagick, le plus polyvalent\n\nC'est l'outil de base. Il gère à peu près tous les formats qui existent, et la syntaxe est toujours la même. L'installation est classique :\n\n```bash\nsudo apt install imagemagick\n```\n\nConvertir un format :\n\n```bash\nmagick image.jpg image.png\n```\n\nRedimensionner sans toucher au ratio, en posant une limite maximale :\n\n```bash\nmagick image.jpg -resize 1920x1920\\> sortie.jpg\n```\n\nLe `\\>` est important — sans lui, ImageMagick agrandit aussi les petites images. Avec, il ne fait que réduire.\n\nPréparer une image pour le web, en supprimant les métadonnées EXIF et en compressant :\n\n```bash\nmagick image.jpg -strip -quality 82 image_web.jpg\n```\n\nPour traiter un répertoire entier, `mogrify` fait le même boulot mais **modifie les fichiers en place** — toujours travailler sur une copie ou rediriger vers un autre dossier :\n\n```bash\nmogrify -path ./web -resize 1600x1600\\> -quality 85 *.jpg\n```\n\n---\n\n## libvips, pour les traitements lourds\n\nQuand il y a des centaines de photos ou des images très lourdes (scans, RAW exportés), libvips est nettement plus rapide et utilise beaucoup moins de mémoire qu'ImageMagick. Il charge les images en flux au lieu de tout mettre en RAM.\n\n```bash\nsudo apt install libvips-tools\n```\n\n```bash\nvips resize input.jpg output.jpg 0.5 # diviser la taille par 2\nvips copy input.png output.webp # conversion de format\n```\n\nLa syntaxe est moins intuitive qu'ImageMagick mais les gains sur des gros volumes sont sensibles.\n\n---\n\n## FFmpeg, pas que pour la vidéo\n\nFFmpeg est surtout connu pour la vidéo, mais il convertit les images aussi — utile quand il est déjà installé et qu'on veut éviter une dépendance supplémentaire, ou pour extraire des frames depuis une vidéo :\n\n```bash\nffmpeg -i video.mp4 frame_%04d.jpg\n```\n\nRedimensionner en conservant le ratio :\n\n```bash\nffmpeg -i input.jpg -vf scale=1280:-1 output.jpg\n```\n\n---\n\n## Les métadonnées EXIF avec exiftool\n\nLes appareils photo embarquent beaucoup d'informations dans les fichiers : coordonnées GPS, modèle d'appareil, réglages. Avant de publier une photo, il vaut mieux vérifier ce qu'elle contient :\n\n```bash\nsudo apt install libimage-exiftool-perl\n\nexiftool photo.jpg # lire toutes les métadonnées\nexiftool -all= photo.jpg # tout supprimer\nexiftool -TagsFromFile src.jpg dst.jpg # copier les métadonnées d'une image à une autre\n```\n\nImageMagick peut aussi supprimer les EXIF avec `-strip`, mais exiftool offre plus de contrôle quand on veut garder certaines balises et supprimer d'autres.\n\n---\n\n## Fichiers RAW\n\nPour les CR2, NEF, ARW et autres formats propriétaires d'appareils photo, `darktable-cli` est la solution la plus propre :\n\n```bash\ndarktable-cli input.CR2 output.jpg\n```\n\nIl applique les mêmes algorithmes de développement que l'interface graphique de darktable. `dcraw` est une alternative plus ancienne et plus bas niveau :\n\n```bash\ndcraw -c photo.CR2 > photo.ppm\n```\n\n---\n\n## HEIC, le format Apple\n\nLes iPhone exportent leurs photos en HEIC depuis iOS 11. Le format est compact, mais Linux ne le gère pas nativement — il faut convertir avant de pouvoir travailler dessus.\n\nLe paquet `libheif-examples` fournit `heif-convert`, l'outil le plus direct :\n\n```bash\nsudo apt install libheif-examples\n\nheif-convert photo.heic photo.jpg\n```\n\nImageMagick peut aussi s'en charger si `libheif` est installé sur le système :\n\n```bash\nmagick photo.heic photo.jpg\n```\n\nPour vérifier que le support HEIC est bien disponible :\n\n```bash\nmagick identify -list format | grep -i heic\n```\n\nConversion d'un dossier entier :\n\n```bash\nfor f in *.heic *.HEIC; do\n heif-convert \"$f\" \"${f%.*}.jpg\"\ndone\n```\n\n---\n\n## En pratique\n\nConversion d'un dossier de PNG en WebP :\n\n```bash\nfor f in *.png; do\n magick \"$f\" \"${f%.png}.webp\"\ndone\n```\n\nPipeline complet pour publication web — redimensionnement, suppression EXIF, compression :\n\n```bash\nmagick input.jpg -resize 1600x1600\\> -strip -quality 80 output.jpg\n```\n\nTraitement récursif sur un arbre de dossiers :\n\n```bash\nfind . -name \"*.jpg\" -exec magick {} -resize 1200x1200\\> {} \\;\n```\n\n---\n\n## Récap rapide\n\n| Cas d'usage | Outil |\n|---|---|\n| Usage général | ImageMagick |\n| Gros volumes / performance | libvips |\n| Déjà dans le pipeline vidéo | FFmpeg |\n| Fichiers RAW | darktable-cli |\n| HEIC (iPhone) | heif-convert ou ImageMagick |\n| Lecture / nettoyage EXIF | exiftool |\n\nPour 90 % des besoins courants, ImageMagick suffit. libvips vaut le coup d'être appris si on traite régulièrement des lots importants.\n","featured":false,"tags":[]} \ No newline at end of file diff --git a/_cache/articles/4cf880e6-e4e0-42dd-aae2-675837850b83.json b/_cache/articles/4cf880e6-e4e0-42dd-aae2-675837850b83.json deleted file mode 100644 index 85dfc20..0000000 --- a/_cache/articles/4cf880e6-e4e0-42dd-aae2-675837850b83.json +++ /dev/null @@ -1 +0,0 @@ -{"uuid":"4cf880e6-e4e0-42dd-aae2-675837850b83","slug":"compromission-de-jdownloader-6-7-mai-2026-analyse-indicateurs-et-procedure-de-detection","title":"JDownloader : quand le CMS devient la faille","author":"cedric@abonnel.fr","published":true,"published_at":"2026-05-12 17:09","created_at":"2026-05-12 17:10:36","updated_at":"2026-05-12 17:21:01","revisions":[{"n":1,"date":"2026-05-12 17:21:01","comment":"Contenu modifié","title":"JDownloader : quand le CMS devient la faille"}],"cover":"cover.webp","files_meta":{"cover.webp":{"author":"","source_url":"https://savprogroupe.fr/wp-content/uploads/2024/09/Alarme-intrusion1-scaled.webp"}},"external_links":[],"seo_title":"","seo_description":"","og_image":"https://varlog.a5l.fr/file?uuid=4cf880e6-e4e0-42dd-aae2-675837850b83&name=cover.webp","category":"informatique","content":"# JDownloader : quand le CMS devient la faille\n\n*À propos de l'incident de sécurité affectant le site officiel jdownloader.org les 6 et 7 mai 2026.*\n\n## JDownloader expliqué simplement\n\nJDownloader est un gestionnaire de téléchargements écrit en Java, distribué gratuitement par l'éditeur allemand AppWork GmbH depuis plus de quinze ans. Il sert essentiellement à automatiser la récupération de fichiers depuis des hébergeurs (Mega, Uptobox, Rapidgator…), des plateformes vidéo et des services de liens premium. Côté utilisateur, c'est l'outil qu'on lance pour récupérer une série de fichiers en une opération, plutôt que cliquer sur cent liens un par un. L'application est multiplateforme — Windows, Linux, macOS — et tourne sur quelques millions de postes dans le monde.\n\nLe projet est distribué de plusieurs façons : un JAR principal (le binaire Java pur), des installateurs natifs par OS depuis le site officiel, et des paquets passant par des canaux distribués comme Flatpak, Snap ou Winget. C'est cette diversité de canaux qui va jouer un rôle central dans ce qui suit.\n\n## L'incident : ce qui s'est passé\n\nEntre le 6 mai 2026 à 00 h 01 UTC et le 7 mai 2026 à 17 h 06 UTC, le site officiel `jdownloader.org` a distribué des installateurs piégés à la place des binaires légitimes. La fenêtre n'a duré qu'environ 48 heures, et seuls deux liens ont été affectés. Mais pendant cette fenêtre, tout utilisateur qui passait par le bon parcours téléchargeait un cheval de Troie au lieu d'un gestionnaire de téléchargements.\n\nLe scénario reconstitué par l'équipe d'AppWork et les chercheurs en sécurité (BleepingComputer, Thomas Klemenc, équipe Rescana) se déroule en quatre temps.\n\n**1. Compromission du CMS du site.** Les attaquants ont exploité une vulnérabilité non corrigée dans le système de gestion de contenu de `jdownloader.org`, qui permettait de modifier les listes de contrôle d'accès et le contenu publié sans authentification. Point crucial : ils n'ont **pas** eu accès au serveur sous-jacent, ni au système de fichiers, ni à l'infrastructure de build. Juste au contenu web — et ça a suffi.\n\n**2. Réécriture de deux liens.** Plutôt que de tenter de modifier les binaires originaux (qui étaient hors de leur portée), les attaquants ont fait beaucoup plus simple : ils ont changé l'URL cible de deux liens publics sur la page de téléchargement. Le lien « Download Alternative Installer » pour Windows et le script shell pour Linux pointaient désormais vers des fichiers malveillants hébergés sur une infrastructure tierce. Le HTML autour, lui, restait identique. Visuellement, rien ne distinguait la page propre de la page piégée.\n\n**3. Charges utiles différenciées par plateforme.** Sur Windows, l'installateur piégé agit comme un *loader* qui déploie un RAT (*Remote Access Trojan*) écrit en Python, fortement obfusqué, communiquant avec deux serveurs de commande et contrôle (`parkspringshotel[.]com` et `auraguest[.]lk`). Le RAT est modulaire : il reçoit du code Python depuis le C2 et l'exécute, ce qui donne aux attaquants une porte ouverte indéfiniment extensible. Sur Linux, le script shell modifié télécharge une archive depuis `checkinnhotels[.]com`, déguisée en fichier SVG, dont il extrait deux binaires ELF — `pkg` et `systemd-exec`. Le second est installé en SUID-root dans `/usr/bin/`, le premier est copié dans `/root/.local/share/.pkg`, et la persistance est assurée par un script déposé dans `/etc/profile.d/systemd.sh`. Le malware se lance ensuite déguisé en `/usr/libexec/upowerd`, un nom de processus qui existe légitimement sur la plupart des distributions.\n\n**4. Détection par la communauté.** L'alerte n'est pas venue d'un système de surveillance, mais d'un utilisateur Reddit (*PrinceOfNightSky*) qui a remarqué que Microsoft Defender bloquait son installateur fraîchement téléchargé. La signature numérique indiquait « Zipline LLC » au lieu de « AppWork GmbH ». L'équipe AppWork a confirmé, mis le site hors ligne pour investigation dans les heures qui ont suivi, puis publié un rapport d'incident détaillé. Le site est revenu en ligne dans la nuit du 8 au 9 mai avec des liens vérifiés.\n\n## Pourquoi c'est systémique\n\nÀ première vue, c'est un incident isolé : une faille CMS, une équipe qui patche, le service revient. Vu de loin, ça ressemble à un mauvais quart d'heure. Mais en prenant un peu de recul, le schéma est troublant.\n\n**CPUID, début avril 2026.** Le site officiel de l'éditeur de CPU-Z est compromis, des installateurs piégés sont distribués pendant plusieurs jours.\n\n**DAEMON Tools, début mai 2026.** Même schéma : compromission du site officiel, substitution d'installateurs, plusieurs versions infectées (12.5.0.2421 à 12.5.0.2434) distribuées avant détection.\n\n**JDownloader, 6–7 mai 2026.** Toujours le même schéma.\n\nTrois compromissions d'éditeurs logiciels en cinq semaines, exactement sur le même schéma : pas d'intrusion dans l'infrastructure de build, pas de modification du code source, pas de vol de certificat de signature de l'éditeur. À chaque fois, **le maillon faible est le CMS qui sert la page de téléchargement**. Ce qu'on attaque, ce n'est pas le logiciel ; c'est le panneau publicitaire qui pointe vers le logiciel.\n\nCette mécanique est intéressante parce qu'elle déjoue à peu près toutes les défenses « modernes » de la chaîne d'approvisionnement.\n\n**La signature de code ne protège pas.** Le binaire légitime de JDownloader est toujours signé proprement par AppWork GmbH. Mais le binaire malveillant servi à sa place est signé, lui aussi — par un autre éditeur (Zipline LLC, The Water Team), avec des certificats vraisemblablement volés ou achetés au marché noir. La signature certifie que le fichier vient bien de celui qui l'a signé ; elle ne certifie pas que c'est le bon fichier.\n\n**Le HTTPS ne protège pas.** La page de téléchargement est servie en HTTPS valide, depuis le bon domaine, avec le bon certificat. Le navigateur n'a aucune raison de tiquer.\n\n**Les mises à jour in-app sont, elles, protégées.** AppWork le souligne : chaque mise à jour livrée par le mécanisme intégré de JDownloader est signée RSA et vérifiée cryptographiquement, indépendamment du site web. Ce canal n'a pas été touché. C'est tout le paradoxe : les utilisateurs qui mettaient à jour JDownloader depuis l'application elle-même n'ont rien risqué ; ceux qui sont allés sur le site officiel pour le télécharger « proprement » sont les seuls exposés.\n\n**Les paquets distribués sont protégés.** Flatpak, Snap, Winget, le JAR principal — tout ce qui passe par une chaîne d'approvisionnement où l'intégrité est vérifiée par checksum hors site est resté propre. AppWork le résume sans détour : *« Winget/Flatpak/Snap infra is outside of our reach — files downloaded by those are hosted on other infra and secured by sha256 checksums that are unchanged. »*\n\nAutrement dit, **plus le canal est court et naïf, plus il est vulnérable**. Le téléchargement direct depuis un site web est le canal le plus naïf qui soit : on fait confiance au CMS, point. Tout l'effort de sécurisation de l'écosystème logiciel — signatures, builds reproductibles, SBOMs, attestations de provenance — porte sur la chaîne de production et la chaîne de distribution centralisée. Le maillon « page HTML qui dit *clique ici* », lui, est resté tel qu'il était en 2005.\n\n## Comment vérifier si on est touché\n\nLa fenêtre est étroite, donc le filtrage est simple. Trois questions, dans l'ordre :\n\n1. L'installateur a-t-il été récupéré entre le **6 mai 2026 (00 h 01 UTC)** et le **7 mai 2026 (17 h 06 UTC)** ?\n2. S'agit-il du lien **« Download Alternative Installer » Windows** ou du **script shell Linux** depuis `jdownloader.org` ?\n3. Le fichier a-t-il été **exécuté** ?\n\nTrois *oui* → traiter la machine comme compromise. N'importe quel *non* dans la liste → aucun risque lié à cet incident. Une installation pré-existante mise à jour automatiquement, un paquet Flatpak/Snap/Winget, le JAR, la version macOS : rien à craindre.\n\n### Sous Windows\n\nLe contrôle de référence, c'est la signature numérique. Clic droit sur l'installateur → **Propriétés** → onglet **Signatures numériques**. La valeur attendue est `AppWork GmbH`. Toute autre signature (notamment *Zipline LLC* ou *The Water Team*), ou l'absence de signature, désigne un fichier malveillant.\n\nEn PowerShell :\n\n```powershell\nGet-AuthenticodeSignature \"C:\\chemin\\vers\\JDownloader2Setup.exe\" |\n Select-Object Status, SignerCertificate\n```\n\nSi `Status` n'est pas `Valid` ou si le certificat ne contient pas `AppWork GmbH`, ne pas exécuter.\n\n### Sous Linux\n\nTrois artefacts sont à chercher en post-exécution :\n\n```bash\nsudo ls -la /usr/bin/systemd-exec # SUID-root illégitime\nsudo ls -la /root/.local/share/.pkg # charge principale obfusquée\nsudo ls -la /etc/profile.d/systemd.sh # script de persistance\n```\n\nL'apparition de l'un de ces trois éléments suffit à confirmer l'infection. Pour aller plus loin, un coup d'œil au trafic sortant vers les trois domaines C2 (`parkspringshotel[.]com`, `auraguest[.]lk`, `checkinnhotels[.]com`) dans les logs DNS ou via `journalctl --since \"2026-05-06\"` permet de confirmer l'activité du malware.\n\nSi le script installateur traîne encore quelque part, sa signature est sans ambiguïté : taille de **7 934 496 octets**, SHA-256 commençant par `6d975c05ef`.\n\n### En cas de compromission confirmée\n\nLa position officielle d'AppWork est sans nuance : **réinstallation complète du système**. Un RAT modulaire avec persistance SUID-root et exécution arbitraire de code Python depuis un C2 n'est pas quelque chose qu'on retire avec un antivirus. Il faut considérer que tout secret qui a transité sur la machine est compromis — mots de passe saisis au clavier, clés SSH, jetons API, cookies de session, configurations cloud — et les faire tous tourner après réinstallation, **depuis une autre machine saine**.\n\n## Ce que ça change pour qui s'auto-héberge\n\nL'incident JDownloader est un exemple éclairant pour qui exploite ses propres services exposés sur Internet — un Forgejo, un reverse proxy, un site personnel. La leçon n'est pas vraiment côté utilisateur (la procédure de détection plus haut suffit), elle est côté **opérateur**.\n\nLe CMS de JDownloader n'a probablement pas été ciblé pour ses qualités intrinsèques. C'est un dommage collatéral d'un schéma plus large : tout site qui distribue un binaire avec un nombre significatif d'utilisateurs devient une cible rentable, et le CMS public est souvent la pièce la moins surveillée du dispositif. On sécurise le serveur Git, le pipeline de build, la signature des paquets — et on laisse tourner un CMS qui n'a pas été patché depuis huit mois parce qu'il « ne sert qu'à afficher la page d'accueil ».\n\nQuelques principes opérationnels qui en découlent.\n\n**Séparer le canal de publication du canal de vérification.** AppWork a eu raison sur un point essentiel : leurs mises à jour in-app passent par une infrastructure indépendante du site web, avec signature RSA vérifiée côté client. Quand on auto-héberge, ça se traduit par : ne jamais utiliser le même serveur pour distribuer un binaire **et** publier son empreinte. Le checksum doit vivre ailleurs — dans un dépôt Git séparé, sur un domaine différent, idéalement sur une infrastructure qu'on n'administre pas soi-même.\n\n**Surveiller la dérive du contenu publié.** Une simple vérification quotidienne du hash des pages publiques (un cron qui calcule le SHA-256 des URL critiques et alerte en cas de changement non planifié) aurait détecté la compromission de JDownloader en moins d'une heure. C'est le genre de surveillance qu'aucune solution commerciale ne propose nativement, et qui s'écrit en quinze lignes de bash.\n\n**Patcher le CMS avec la même rigueur que l'OS.** L'automatisation des mises à jour applicatives reste sous-investie, surtout pour les outils « périphériques » (CMS, wiki, formulaire de contact). Une mise à jour automatique de niveau correctif n'est pas plus risquée qu'une mise à jour du noyau, et elle évite ce type de scénario.\n\n**Auditer les ACL régulièrement.** La faille exploitée ici permettait de modifier les ACL **sans authentification**. C'est l'équivalent CMS d'un répertoire `chmod 777` dans un coin du système. Un audit périodique des permissions sur les pages publiques fait partie du minimum syndical pour un service exposé.\n\n## En résumé\n\nJDownloader n'a pas été cassé. Son code source est intact, son infrastructure de build est intacte, ses paquets officiels distribués via Flatpak ou Snap sont intacts, ses mises à jour internes sont intactes. Ce qui a été cassé, c'est **le panneau qui dit où aller chercher le binaire**.\n\nC'est une mécanique élégante du point de vue de l'attaquant, et inquiétante du point de vue de l'opérateur. Elle illustre quelque chose que l'incident NPM avait déjà mis en lumière dans un autre registre : la chaîne d'approvisionnement logicielle n'est pas une chaîne, c'est un réseau, et les points faibles ne sont jamais là où on les attend. On peut investir massivement dans la sécurité du code, du build et de la signature ; si la page web qui sert le lien reste un Wordpress non patché derrière un nom de domaine prestigieux, tout cet investissement passe à côté.\n\nLe rôle de l'opérateur en 2026, ce n'est plus de protéger le code. C'est de protéger **chaque maillon qui sert à dire au monde où trouver le code** — et de partir du principe que ce maillon-là sera le prochain à céder.\n\n###### Liens & sources\n\n[JDownloader site hacked to replace installers with Python RAT malware | BleepingComputer](https://www.bleepingcomputer.com/news/security/jdownloader-site-hacked-to-replace-installers-with-python-rat-malware/)\n\n[Rapport d'incident officiel | jdownloader.org](https://jdownloader.org/)\n\n[JDownloader Website Supply Chain Attack | Rescana](https://www.rescana.com/post/jdownloader-website-supply-chain-attack-installers-replaced-with-python-rat-malware-may-2026/)\n\n[Le site officiel de JDownloader compromis | IT-Connect](https://www.it-connect.fr/le-site-officiel-de-jdownloader-compromis-pour-diffuser-un-malware-sur-windows-et-linux/)","featured":false,"tags":[]} \ No newline at end of file diff --git a/_cache/articles/4f193d70-d236-42d7-aedb-58631cd15002.json b/_cache/articles/4f193d70-d236-42d7-aedb-58631cd15002.json deleted file mode 100644 index 0ac7767..0000000 --- a/_cache/articles/4f193d70-d236-42d7-aedb-58631cd15002.json +++ /dev/null @@ -1 +0,0 @@ -{"uuid":"4f193d70-d236-42d7-aedb-58631cd15002","slug":"la-6g-au-dela-de-la-5g-promesses-et-interrogations","title":"La 6G : au-delà de la 5G, promesses et interrogations","author":"cedric@abonnel.fr","published":true,"published_at":"2025-11-05 08:46:51","created_at":"2025-11-05 08:46:51","updated_at":"2025-11-05 08:46:51","revisions":[],"cover":"","category":"télécom","content":"# La 6G : au-delà de la 5G, promesses et interrogations\n\nAlors que la 5G peine encore à s’imposer partout, la recherche sur la **6G** est déjà bien avancée. Les laboratoires, opérateurs et gouvernements annoncent des innovations spectaculaires : débits colossaux, latence quasi nulle et intégration massive de l’intelligence artificielle dans le réseau. Mais derrière le buzz médiatique se cachent de **grandes incertitudes techniques et économiques**.\n\n---\n\n### Promesses technologiques\n\n* **Débits théoriques** : jusqu’à **1 Tbit/s** dans des conditions expérimentales (vs 10 Gbit/s max pour la 5G).\n* **Latence ultra-faible** : <1 ms, visant les applications critiques comme chirurgie à distance, véhicules autonomes coordonnés en temps réel et réalité immersive totale.\n* **Fréquences** : exploitation des **ondes térahertz (THz)**, beaucoup plus hautes que les mmWave 5G, offrant un spectre presque illimité mais avec des contraintes sévères de portée et pénétration.\n* **Intelligence embarquée** : réseaux capables d’auto-optimisation grâce à l’IA et au machine learning pour gérer la congestion, l’énergie et les allocations de spectre en temps réel.\n* **Intégration multi-domaines** : fusion des communications terrestres, satellites, drones et IoT pour créer un réseau ubiquitaire.\n\n---\n\n### Défis techniques\n\n1. **Propagation et portée** : les ondes THz sont extrêmement sensibles aux obstacles et à l’humidité, nécessitant une densité d’antennes inimaginable à l’échelle mondiale.\n2. **Consommation énergétique** : déployer des antennes THz ultra-puissantes et gérer des réseaux IA en temps réel risque d’augmenter considérablement la consommation électrique.\n3. **Standardisation complexe** : contrairement à la 5G qui a hérité d’une partie de l’infrastructure 4G, la 6G nécessitera des investissements massifs et de nouveaux protocoles.\n4. **Coût et adoption** : le coût pour les opérateurs et la nécessité de renouveler les équipements pour les utilisateurs seront un frein majeur, comme ce fut le cas pour la 3G et la 5G.\n\n---\n\n### Usages envisagés\n\n* **Réalité mixte et immersive** : AR/VR ultra-réaliste, métavers en temps réel, téléprésence totale.\n* **Téléchirurgie et véhicules autonomes coordonnés** : applications critiques nécessitant une latence quasi nulle.\n* **IoT massif** : milliards d’objets connectés, capteurs intelligents, villes et infrastructures “autonomes”.\n* **Communication spatiale et aérienne** : drones, satellites et aéronefs connectés en temps réel.\n\n---\n\n### Critique et perspective\n\nMême si les promesses de la 6G sont spectaculaires, plusieurs points restent préoccupants :\n\n* La **6G est encore largement théorique** : aucune application grand public n’est prévue avant 2030.\n* Comme pour la 5G, les opérateurs pourraient utiliser la 6G pour **inciter la migration depuis la 5G**, en bridant certaines fonctionnalités sur la génération précédente.\n* Le discours marketing risque de créer une **confusion encore plus grande** pour les utilisateurs : débits maximaux, latence minimale et réseaux intelligents seront très localisés et expérimentaux, bien loin d’une couverture nationale.\n\n---\n\n### Schéma suggéré : évolution 3G → 4G → 5G → 6G\n\n```mermaid\nflowchart LR\n A[3G] --> B[4G]\n B --> C[5G]\n C --> D[6G]\n \n subgraph Débits\n A1[384 kbit/s → 42 Mbit/s] --> B1[100 Mbit/s → 1 Gbit/s] --> C1[100 Mbit/s → 10 Gbit/s] --> D1[100 Gbit/s → 1 Tbit/s]\n end\n \n subgraph Latence\n A2[150–200 ms] --> B2[30–50 ms] --> C2[1–10 ms] --> D2[<1 ms]\n end\n```\n\n---\n\nLa 6G s’annonce comme **l’avenir des réseaux mobiles**, mais elle illustre encore la stratégie récurrente des opérateurs :\n\n1. Créer une promesse technologique spectaculaire.\n2. Déployer progressivement pour ne pas perturber l’infrastructure existante.\n3. Inciter subtilement les utilisateurs à migrer vers la nouvelle génération, souvent via des limitations sur les générations précédentes.\n\n> Comme pour la 3G bridée puis la 4G et la 5G, la 6G risque d’être autant un **outil de marketing et de stratégie économique** qu’une véritable révolution immédiate pour le consommateur.\n","featured":false,"files_meta":[],"external_links":[],"tags":[]} \ No newline at end of file diff --git a/_cache/articles/4f443bcb-b0d4-47f8-837d-61627e6c94f2.json b/_cache/articles/4f443bcb-b0d4-47f8-837d-61627e6c94f2.json deleted file mode 100644 index f95658c..0000000 --- a/_cache/articles/4f443bcb-b0d4-47f8-837d-61627e6c94f2.json +++ /dev/null @@ -1 +0,0 @@ -{"uuid":"4f443bcb-b0d4-47f8-837d-61627e6c94f2","slug":"priorites-et-acces-au-reseau-en-4g-et-5g","title":"Pourquoi le réseau mobile ne s'effondre pas le jour où tout le monde téléphone en même temps","author":"cedric@abonnel.fr","published":true,"published_at":"2026-01-06 22:21","created_at":"2026-01-06 22:21:04","updated_at":"2026-05-11 23:40:18","revisions":[{"n":1,"date":"2026-05-11 23:06:50","comment":"","title":"Comment les réseaux mobiles tiennent debout quand tout le monde téléphone en même temps"},{"n":2,"date":"2026-05-11 23:09:07","comment":"","title":"Comment les réseaux mobiles tiennent debout quand tout le monde téléphone en même temps"},{"n":3,"date":"2026-05-11 23:11:33","comment":"","title":"Comment les réseaux mobiles tiennent debout quand tout le monde téléphone en même temps"},{"n":4,"date":"2026-05-11 23:14:26","comment":"","title":"Comment les réseaux mobiles tiennent debout quand tout le monde téléphone en même temps"},{"n":5,"date":"2026-05-11 23:16:33","comment":"","title":"Comment les réseaux mobiles tiennent debout quand tout le monde téléphone en même temps"},{"n":6,"date":"2026-05-11 23:16:56","comment":"","title":"Comment les réseaux mobiles tiennent debout quand tout le monde téléphone en même temps"},{"n":7,"date":"2026-05-11 23:40:18","comment":"","title":"Pourquoi le réseau mobile ne s'effondre pas le jour où tout le monde téléphone en même temps"}],"cover":"cover.jpg","files_meta":{"_preview.png":{"author":"","source_url":""},"_thumb_dc5413a86e9c042a-22419.jpg":{"author":"","source_url":""},"_thumb_945482b26e8a76ab-49498.png":{"author":"","source_url":""},"_thumb_a1080cd703289e6b-144512.png":{"author":"","source_url":""},"_thumb_cae639a42d79414f-68314.jpg":{"author":"","source_url":""},"03bcf841dafcc9f4-87771.jpg":{"author":"","source_url":"https://www.ariase.com/uploads/media/124b4e1790cf20b8fed653884ef1eb46d235922f.jpeg"},"cover.jpg":{"author":"","source_url":""}},"external_links":[{"url":"https://arxiv.org/pdf/2012.05520","name":"An Overview of 5G System Accessibility Differentiation and Control","added_at":"2026-05-11 23:04:53","author":"-","meta":{"mime":"application/pdf","size":717772,"description":"IEEE Transactions on Magnetics","date":"2021-09-28 10:31:29+02:00","subject":"IEEE Transactions on Magnetics","creator":"-","producer":"Microsoft® Word for Microsoft 365","pages":9,"pdf_version":"PDF 1.7","page_size":"Letter (216×279 mm)"}},{"url":"https://www.techplayon.com/5g-nr-cell-access-control/","name":"5G NR Cell Access Control - Techplayon - RRC Signalling","added_at":"2026-05-11 23:05:34","author":"Author","meta":{"mime":"text/html","size":79963,"description":"Access Control barring refers to a traffic congestion control mechanism to secure and ensure the success of critical communications","og_image":"/file?uuid=4f443bcb-b0d4-47f8-837d-61627e6c94f2&name=_thumb_dc5413a86e9c042a-22419.jpg","site_name":"Techplayon","og_type":"article","language":"en_US","date":"2019-12-21T17:44:54+00:00","canonical":"https://www.techplayon.com/5g-nr-cell-access-control/"}},{"url":"https://simnovus.com/unified-access-control-uac-the-gatekeeper-of-5g-networks/","name":"Unified Access Control (UAC): The Gatekeeper of 5G Networks - Simnovus","added_at":"2026-05-11 23:11:58","meta":{"mime":"text/html","size":124603,"description":"Unified Access Control (UAC) is a fundamental component of 5G networks that governs access to network resources. It replaces the traditional access control","og_image":"/file?uuid=4f443bcb-b0d4-47f8-837d-61627e6c94f2&name=_thumb_cae639a42d79414f-68314.jpg","site_name":"Simnovus","og_type":"article","language":"en_US","date":"2024-08-14T10:58:09+05:30","canonical":"https://simnovus.com/unified-access-control-uac-the-gatekeeper-of-5g-networks/"}},{"url":"https://www.sharetechnote.com/html/5G/5G_UAC.html","name":"5G | ShareTechnote","added_at":"2026-05-11 23:12:20","meta":{"mime":"text/html","size":28707,"og_image":"/file?uuid=4f443bcb-b0d4-47f8-837d-61627e6c94f2&name=_thumb_a1080cd703289e6b-144512.png"}},{"url":"https://www.telecomgurukul.com/post/advanced-access-control-mechanisms-in-lte-and-5g-nr-networks","name":"Advanced Access Control Mechanisms in LTE and 5G NR Networks","added_at":"2026-05-11 23:14:17","meta":{"mime":"text/html","size":1344890,"og_image":"/file?uuid=4f443bcb-b0d4-47f8-837d-61627e6c94f2&name=_thumb_945482b26e8a76ab-49498.png"}}],"seo_title":"","seo_description":"","og_image":"","category":"télécom","content":"# Pourquoi le réseau mobile ne s'effondre pas le jour où tout le monde téléphone en même temps\n\nUn attentat, un séisme, un match du Stade de France, une grande panne d'électricité. Dans ces moments-là, des centaines de milliers de gens dégainent leur téléphone au même instant. Le réseau mobile est dimensionné pour un usage moyen, pas pour un pic massif simultané, et il devrait théoriquement s'effondrer. La plupart du temps, il tient. Pas parfaitement, pas pour tout le monde, mais il tient — et surtout, les appels d'urgence continuent de passer. C'est le résultat d'une série de mécanismes empilés depuis les années 1990, que la 4G a affinés et que la 5G a élargis. Cet article les passe en revue, et termine sur une question qu'on me pose souvent : est-ce que mon forfait à 50 € me donne une place prioritaire dans cette file d'attente ?\n\n## Trois questions, pas une\n\nQuand une cellule commence à chauffer, l'opérateur doit répondre à trois questions distinctes. Qui a le droit de se connecter ? Une fois connecté, qui passe en premier ? Et quels services doivent absolument continuer à fonctionner, quoi qu'il arrive ?\n\nLa 2G ne savait répondre qu'à la première. Elle filtrait à l'entrée et basta. La 4G a ajouté la deuxième : une fois admis sur le réseau, votre trafic est traité différemment selon son importance. La 5G ajoute la troisième : elle peut créer des réseaux virtuels parallèles dont certains sont réservés à des usages critiques, totalement isolés des autres.\n\n## Le filtrage à l'entrée\n\nChaque carte SIM porte un numéro de classe d'accès, hérité du GSM, entre 0 et 15. Les classes 0 à 9 couvrent le grand public — autrement dit nous tous. Les classes 11 à 15 sont réservées : services de secours, autorités publiques, personnel opérateur, usages militaires selon les pays.\n\nQuand une cellule est surchargée, l'eNodeB (la station de base 4G) diffuse une consigne aux téléphones du secteur : « les classes 0 à 9, vous attendez ». C'est l'**Access Class Barring**. Concrètement, votre téléphone reçoit ce message et bloque lui-même votre tentative d'appel ou de connexion data, sans même envoyer la demande à la station. C'est élégant parce que ça soulage la station avant même qu'elle ne soit sollicitée. Les classes prioritaires, elles, passent sans encombre.\n\nUne variante plus dure, l'**Extended Access Barring**, vise les objets connectés et les usages non urgents. Quand une vraie crise se déclare, l'opérateur peut couper les compteurs intelligents, les alarmes domestiques et autres équipements bavards pour préserver la bande passante humaine.\n\nEn 5G, ce mécanisme a été refondu sous le nom d'**UAC** — *Unified Access Control*, introduit dans la Release 15 du 3GPP. UAC unifie dans un seul cadre ce qui était auparavant éparpillé entre ACB, EAB et d'autres dispositifs spécifiques. Il repose sur deux notions complémentaires. Les *Access Identities* identifient qui vous êtes : utilisateur lambda, abonné à un service prioritaire type MPS ou MCS, personnel d'urgence, agent opérateur. Les *Access Categories* identifient ce que vous essayez de faire : appel d'urgence, connexion data normale, SMS, mise à jour de localisation. La combinaison des deux détermine si votre demande passe ou pas. La granularité gagnée par rapport à la 4G est réelle : on peut bloquer un type d'action précis pour un type d'utilisateur précis, par exemple « les abonnés grand public ne peuvent plus initier de nouveaux appels data, mais les SMS et les appels voix continuent ».\n\n## La priorité une fois connecté\n\nLà où la 4G a vraiment innové, c'est en introduisant le **QCI** — *QoS Class Identifier*. Chaque flux de données qui transite sur le réseau se voit attribuer un numéro entre 1 et 9 (avec quelques valeurs supplémentaires pour des cas spéciaux) qui dit à l'infrastructure comment le traiter.\n\n| Usage | QCI | Traitement |\n|---|---|---|\n| Appel VoLTE (voix sur LTE) | 1 | Latence minimale, débit garanti |\n| Visioconférence | 2 | Débit garanti |\n| Signalisation réseau | 5 | Très haute priorité |\n| Streaming vidéo | 6 ou 8 | Best effort prioritaire |\n| Web et internet général | 9 | Best effort standard |\n\nQuand la cellule est encombrée, le routeur sait quoi sacrifier en premier. YouTube va ralentir, les pages web vont mettre du temps à charger, mais l'appel téléphonique de votre voisin reste audible. C'est un compromis assumé : on dégrade volontairement les usages secondaires pour préserver les usages critiques.\n\nLa 5G a transposé ce mécanisme sous le nom de **5QI** (*5G QoS Identifier*) avec davantage de niveaux et une meilleure prise en compte des cas que la 4G gérait mal — notamment les services à très basse latence pour les usines connectées ou la voiture autonome. La voix d'urgence garde son sommet, les données critiques industrielles s'intercalent juste après, le streaming et le web restent en bas de la pile.\n\n## L'isolation par tranches : le network slicing\n\nC'est l'apport majeur de la 5G en matière de gestion de crise. Au lieu de partager une seule infrastructure entre tous les usages, on peut maintenant la découper logiciellement en tranches — des *slices* — qui se comportent comme autant de réseaux indépendants, alors qu'ils tournent sur les mêmes antennes et les mêmes câbles.\n\nUn opérateur peut par exemple maintenir une tranche pour le grand public avec ses millions d'abonnés et son trafic massif, une autre pour les services d'urgence dimensionnée pour rester fluide même quand le reste sature, une troisième pour les objets connectés industriels avec des garanties de latence, et une quatrième pour des opérateurs critiques type SNCF, EDF ou hôpitaux. Chaque tranche a ses propres règles d'admission, ses propres priorités, ses propres garanties de performance. Si la tranche grand public est totalement saturée, celle des secours ne le sait même pas.\n\nCette isolation est ce qui distingue le plus fondamentalement la 5G des générations précédentes. Avant, tout le monde se battait pour les mêmes ressources, avec juste des priorités différentes pour départager. Maintenant, certaines ressources sont retirées du combat dès le départ.\n\n## Récapitulatif\n\n| Génération | Ce qui est contrôlé | Comment |\n|---|---|---|\n| 2G | L'accès au réseau | Classes d'accès 0-15 |\n| 4G | L'accès + la priorité du trafic | ACB / EAB + QCI |\n| 5G | L'accès + la priorité + l'isolation des services | UAC + 5QI + network slicing |\n\nTous ces mécanismes restent invisibles tant que tout va bien. Vous ne savez pas qu'ils existent. Vous découvrez leur existence le jour où votre voisin n'arrive plus à charger ses mails alors que les pompiers, eux, continuent de communiquer normalement. Ce jour-là, ce n'est pas de la magie. C'est trente ans d'ingénierie radio qui ont anticipé que ça arriverait.\n\n---\n\n## Et mon forfait premium, alors ?\n\nQuestion logique à ce stade. Si le réseau sait techniquement prioriser certains flux par rapport à d'autres, qu'est-ce qui empêche un opérateur de faire passer ses abonnés à 50 € devant ceux à 10 € quand les antennes saturent ? La réponse honnête commence par un aveu : techniquement, rien. L'outil existe, il s'appelle **Quality of Service** (QoS), c'est exactement le mécanisme qu'on vient de décrire. Si demain Orange ou SFR voulaient créer une voie rapide pour leurs abonnés haut de gamme, ils auraient les outils dans la boîte. Pourtant, ils ne le font pas. Pour quatre raisons.\n\n### La loi européenne l'interdit\n\nLe règlement **(UE) 2015/2120**, dit « règlement internet ouvert », oblige les opérateurs à traiter tout le trafic de la même façon, sans discrimination liée à l'expéditeur, au destinataire, au contenu ou à l'application. Il a fêté ses dix ans en novembre 2025, et l'ARCEP a profité de l'anniversaire pour rappeler que c'est l'un des piliers du modèle numérique européen. Les sanctions sont sérieuses : jusqu'à **3 % du chiffre d'affaires** de l'opérateur fautif. Un opérateur français qui annoncerait demain « avec notre forfait Premium, vous passez devant les autres » se retrouverait devant l'ARCEP dans la semaine.\n\nLe règlement laisse quelques portes ouvertes pour les services dits « spécialisés » qui ont besoin d'une qualité garantie — téléchirurgie, voiture connectée. Mais ces exceptions sont étroitement encadrées et ne couvrent absolument pas le confort d'un client haut de gamme qui voudrait charger son Instagram plus vite à 19h.\n\nAux États-Unis, l'histoire est différente. La FCC a tenté de restaurer la neutralité du net en 2024, mais en janvier 2025 la cour d'appel du sixième circuit a invalidé la décision, jugeant que la FCC n'avait pas l'autorité légale pour reclasser le haut débit comme service public. Avec l'arrivée de Brendan Carr à la tête de la FCC, ouvertement opposé à la neutralité du net, il n'y a aujourd'hui plus de règle fédérale outre-Atlantique. Quelques États (Californie, Washington, New York, Oregon) ont leurs propres lois qui maintiennent le principe, mais à l'échelle du pays, les opérateurs américains pourraient légalement faire ce que leurs homologues européens n'ont pas le droit de faire. Pourtant, ils ne le font pas ouvertement non plus, et la raison renvoie aux trois points suivants.\n\n### C'est commercialement intenable\n\nImagine la publicité : « Forfait Premium à 50 € — passez devant les pauvres pendant les heures de pointe ». Le slogan ne se vend pas. Les directions marketing savent que dire à la moitié de leurs clients qu'ils sont des citoyens de seconde zone du réseau est le plus court chemin vers une crise de réputation. C'est pour ça qu'on vous vend « plus de Go », « 5G ultra rapide », « roaming inclus dans 110 pays » — des promesses qui sonnent positivement sans jamais dire à personne qu'il est désavantagé.\n\n### L'effet boule de neige serait toxique\n\nImagine que ça se mette quand même en place. Les riches passent devant. Les antennes restent saturées pour les autres, qui se mettent à payer plus pour échapper à la saturation, ce qui sature encore plus les bas forfaits, ce qui pousse encore plus de gens à monter en gamme. Au bout de cinq ans, on a un réseau à deux vitesses où les forfaits modestes deviennent quasi inutilisables aux heures critiques, et où la connexion mobile correcte devient un service de luxe. Ce n'est plus un service de télécommunications, c'est un système de classes.\n\nC'est exactement ce que la neutralité du net cherche à empêcher. Pas par idéologie, mais parce qu'on a déjà vu où mène ce genre de spirale dans les pays où elle n'est pas protégée. Certains opérateurs proposent par exemple des forfaits où Facebook et WhatsApp sont gratuits mais où le reste est payant, ce qui revient à dire que le bon internet est celui que l'opérateur a choisi pour vous. Ce n'est plus tout à fait le même service.\n\n### Ça ne résoudrait rien\n\nQuand un réseau sature, ce n'est pas un problème de répartition entre utilisateurs, c'est un problème de **capacité totale**. Faire passer Pierre avant Paul ne crée pas un seul bit de bande passante supplémentaire. Ça déplace juste le problème de l'un vers l'autre. La vraie solution, quand une cellule sature trop souvent, c'est d'installer plus d'antennes, de densifier le réseau, de basculer sur une fréquence plus performante ou de passer à la génération suivante. C'est cher, c'est long, ça implique des autorisations administratives et des négociations foncières, mais c'est la seule réponse qui tient la route. Prioriser, c'est rapide, mais ça repousse le mur, ça ne le déplace pas.\n\nC'est comme si on proposait une voie réservée aux Mercedes sur l'A7 un samedi de chassé-croisé. Techniquement, on peut peindre la ligne au sol et installer les panneaux dans la matinée. Mais cette voie ne réduit pas le bouchon, elle le concentre sur les voies restantes ; elle écorne le principe d'égalité d'accès à l'infrastructure publique ; et elle ne change rien au problème de fond, qui est qu'il y a trop de voitures pour la route disponible. La vraie solution reste la même qu'avant : élargir l'autoroute, ou convaincre une partie des gens de prendre le train.\n\n### Le caveat 5G\n\nUne nuance honnête pour finir. Le *network slicing* complique le débat juridique. Un opérateur peut créer des tranches de réseau avec des qualités différenciées en toute légalité quand il s'agit d'usages spécialisés — santé, industrie, transports. La question qui agite régulateurs et juristes depuis plusieurs années est de savoir où finit le service spécialisé légitime et où commence le contournement déguisé de la neutralité du net. L'ARCEP a ouvert ce chantier, et c'est probablement là, plus que dans une revanche commerciale brutale sur les forfaits premium, que se jouera la prochaine bataille.\n\nMais pour répondre simplement à la question : non, votre forfait à 50 € ne vous donne pas la priorité réseau sur celui de votre voisin à 10 €. Il vous donne plus de data, parfois un meilleur débit théorique, des options en plus. Pas une place dans la file.","featured":false,"tags":[]} \ No newline at end of file diff --git a/_cache/articles/5059c1e2-f3e6-406f-9595-7133bb835cdb.json b/_cache/articles/5059c1e2-f3e6-406f-9595-7133bb835cdb.json deleted file mode 100644 index 4e8a9ed..0000000 --- a/_cache/articles/5059c1e2-f3e6-406f-9595-7133bb835cdb.json +++ /dev/null @@ -1 +0,0 @@ -{"uuid":"5059c1e2-f3e6-406f-9595-7133bb835cdb","slug":"petits-colis-grands-impots-quand-la-taxation-punit-les-francais-sans-relancer-l-industrie","title":"Petits colis, grands impôts : quand la taxation punit les Français sans relancer l’industrie","author":"cedric@abonnel.fr","published":true,"published_at":"2025-11-14 00:55","created_at":"2025-11-14 00:55:43","updated_at":"2026-05-12 08:59:31","revisions":[{"n":1,"date":"2026-05-12 08:59:31","comment":"","title":"Petits colis, grands impôts : quand la taxation punit les Français sans relancer l’industrie"}],"cover":"cover.svg","files_meta":{"a99506f7dff32b42-16522.svg":{"author":"Cédrix / Générée par IA","source_url":""}},"external_links":[],"seo_title":"","seo_description":"","og_image":"","category":"actualité","content":"# Petits colis, grands impôts : quand la taxation punit les Français sans relancer l’industrie\n\nJusqu’à maintenant, les petits colis importés de l’étranger passaient presque inaperçus dans les foyers français. Shein, AliExpress, Temu… commander en Asie était simple et peu coûteux, grâce à l’exonération de droits de douane sur les produits d’une valeur inférieure à 150 euros. Mais depuis le 13 novembre 2025, ce statu quo est remis en cause : les ministres des Finances de l’Union européenne ont voté la suppression de cette exonération. Dès le premier trimestre 2026, chaque petit colis pourrait être taxé et soumis à des frais de traitement supplémentaires.\n\nÀ Bruxelles, on salue cette décision comme un moyen de protéger les consommateurs européens et le marché intérieur. La France, en particulier, s’en félicite, estimant qu’il s’agit d’une avancée pour la sécurité des produits et la souveraineté économique de l’UE. Mais pour beaucoup de Français, cette mesure ne fait qu’aggraver un problème de fond.\n\nCar la question n’est pas simplement celle des colis asiatiques. Depuis trente ans, la France est passée d’une puissance industrielle comparable à la moyenne européenne à un “nain industriel” avec seulement 7 % du PIB provenant de l’industrie, alors que nos voisins restent autour de 20 % ou plus. Les consommateurs se tournent vers l’Asie parce que **les produits français sont trop chers**, alourdis par des taxes, charges et coûts de production élevés. Taxer les colis importés aujourd’hui revient à **punir les consommateurs pour un problème que nos politiques n’ont pas su résoudre : la perte de compétitivité de l’industrie française**.\n\nPour ceux qui vivent près des frontières ou voyagent dans le sud de l’Europe, la différence est frappante. En Catalogne ou au Portugal, il est possible d’acheter des produits locaux compétitifs : bricolage, jardinage, vêtements ou matériel de pêche, fabriqués en Europe et à des prix abordables. La preuve qu’une production locale forte et des prix raisonnables sont possibles, **quand la fiscalité et la réglementation ne pénalisent pas le producteur**.\n\nCette nouvelle taxe sur les petits colis ne relancera pas l’industrie française, ni le commerce de centre-ville. Elle risque surtout de **réduire le pouvoir d’achat des Français**, tout en alimentant des caisses de l’État dont l’argent sera souvent gaspillé avant même d’être utile à l’économie réelle.\n\nEn résumé, ce n’est pas la faute des consommateurs qui cherchent le meilleur prix à l’étranger. C’est le résultat d’une politique fiscale et industrielle défaillante. Tant que l’État ne s’attaquera pas aux causes structurelles — charges trop élevées, fiscalité excessive, désindustrialisation — toutes les mesures de taxation des importations resteront des **pansements sur une jambe de bois**, au détriment des citoyens.\n","featured":false,"tags":[]} \ No newline at end of file diff --git a/_cache/articles/5510b12a-d647-4b1a-90ba-d421a4927ff7.json b/_cache/articles/5510b12a-d647-4b1a-90ba-d421a4927ff7.json deleted file mode 100644 index 77ca423..0000000 --- a/_cache/articles/5510b12a-d647-4b1a-90ba-d421a4927ff7.json +++ /dev/null @@ -1 +0,0 @@ -{"uuid":"5510b12a-d647-4b1a-90ba-d421a4927ff7","slug":"configurer-un-client-oauth-2-0-dans-keycloak-guide-complet","title":"Configurer un client OAuth 2.0 / OIDC dans Keycloak","author":"cedric@abonnel.fr","published":true,"published_at":"2025-05-16 23:33","created_at":"2025-05-16 23:33:31","updated_at":"2026-05-12 20:39:53","revisions":[{"n":1,"date":"2026-05-12 20:39:53","comment":"Contenu modifié","title":"Configurer un client OAuth 2.0 / OIDC dans Keycloak"}],"cover":"","files_meta":[],"external_links":[],"seo_title":"","seo_description":"","og_image":"","category":"informatique","content":"# Configurer un client OAuth 2.0 / OIDC dans Keycloak\n\n*Keycloak* est une solution open source de gestion des identités et des accès (IAM). Cet article décrit la configuration d'un client OAuth 2.0 / OpenID Connect dans Keycloak, en détaillant les options importantes et en montrant comment restreindre l'accès aux utilisateurs ou groupes autorisés.\n\n> **Note de version.** L'interface d'administration a été refondue à partir de Keycloak 19. La notion d'**Access Type** (`confidential` / `public` / `bearer-only`) a disparu au profit des toggles **Client authentication** et **Authorization**. Ce guide suit l'UI actuelle (Keycloak 24+).\n\n---\n\n## 1. Prérequis\n\n- Une instance Keycloak fonctionnelle (version 24 ou supérieure recommandée).\n- Des droits d'administration sur un **realm**.\n- Une application destinée à s'authentifier via OAuth 2.0 / OIDC.\n- TLS activé sur Keycloak et sur l'application cliente (obligatoire en production).\n\n---\n\n## 2. Qu'est-ce qu'un client dans Keycloak ?\n\nDans Keycloak, un **client** représente une application ou un service qui interagit avec le serveur d'authentification, soit pour authentifier des utilisateurs, soit pour obtenir des informations sur eux, soit pour protéger ses propres ressources. Il peut s'agir d'une application web, d'une API, d'une application mobile, d'un service interne ou d'un partenaire tiers.\n\nChaque client est rattaché à un **realm** (l'espace logique d'authentification) et identifié par un `client_id` unique. Cet identifiant est transmis lors de toute demande d'authentification ou d'obtention de jeton.\n\nLa configuration d'un client définit notamment :\n\n- les flux OAuth 2.0 autorisés (`authorization_code`, `client_credentials`, etc.) ;\n- la capacité ou non du client à conserver un secret (client *confidentiel* vs *public*) ;\n- les URI de redirection acceptées et les origines CORS ;\n- la durée de vie des jetons et la composition des claims (mappers) ;\n- les politiques d'autorisation associées (rôles, groupes, attributs).\n\n---\n\n## 3. Création du client\n\n1. Se connecter à la **Keycloak Admin Console**.\n2. Sélectionner le realm cible.\n3. Menu **Clients** > **Create client**.\n\n### Étape « General settings »\n\n| Champ | Valeur recommandée | Description |\n| ------------------ | ----------------------------------- | ---------------------------------------------------------------------------- |\n| **Client type** | `OpenID Connect` | Protocole utilisé. Choisir `SAML` uniquement pour des intégrations SAML 2.0. |\n| **Client ID** | `myapp-client` | Identifiant unique du client dans le realm. Apparaît dans les jetons (`azp`). |\n| **Name** | `My Application` | Libellé d'affichage (facultatif, peut être localisé). |\n| **Description** | Texte libre | Aide à la maintenance. |\n\n### Étape « Capability config »\n\n| Toggle | Valeur recommandée | Détail |\n| ------------------------------- | ---------------------------------------- | ------------------------------------------------------------------------------------------ |\n| **Client authentication** | `ON` pour un backend, `OFF` pour un SPA | `ON` rend le client **confidentiel** (un secret est généré). `OFF` rend le client **public**. |\n| **Authorization** | `OFF` | À activer uniquement si l'on souhaite utiliser le moteur d'autorisations fine (RBAC/ABAC) de Keycloak. |\n| **Standard flow** | `ON` | Active le flux Authorization Code, à utiliser systématiquement. |\n| **Direct access grants** | `OFF` | Flux `password` — déconseillé par OAuth 2.1, à n'utiliser que pour des outils internes legacy. |\n| **Implicit flow** | `OFF` | Déprécié par OAuth 2.1, ne pas activer. |\n| **Service accounts roles** | `ON` si client_credentials | Permet au client de récupérer un jeton pour son propre compte (machine-to-machine). |\n| **OAuth 2.0 Device Auth Grant** | `OFF` (sauf besoin spécifique) | Pour les appareils sans navigateur (TV, CLI sans IHM locale). |\n| **OIDC CIBA Grant** | `OFF` (sauf besoin spécifique) | Authentification déportée (canal hors-bande). |\n\n### Étape « Login settings »\n\n| Champ | Exemple | Description |\n| ----------------------- | -------------------------------- | --------------------------------------------------------------------------------------------------- |\n| **Root URL** | `https://app.example.com` | URL de base de l'application. Permet d'utiliser des chemins relatifs dans les champs suivants. |\n| **Home URL** | `/` | Page par défaut après login. |\n| **Valid redirect URIs** | `https://app.example.com/*` | URI exactes autorisées pour la redirection après authentification. Éviter les wildcards larges. |\n| **Valid post logout redirect URIs** | `https://app.example.com/*` | URI autorisées pour la redirection après déconnexion (RP-Initiated Logout). |\n| **Web origins** | `https://app.example.com` | Origines CORS autorisées. La valeur `+` reprend automatiquement les redirect URIs ; `*` est à proscrire. |\n| **Admin URL** | `https://app.example.com` | Utilisé pour les notifications backchannel (logout global, push not-before). |\n\n> **Bonne pratique.** Les redirect URIs doivent être en `https://` en production (sauf `http://localhost` pour le développement). Spécifier des chemins aussi précis que possible plutôt qu'un wildcard `/*`.\n\n---\n\n## 4. Authentification du client (Credentials)\n\nL'onglet **Credentials** n'apparaît que si **Client authentication** est sur `ON`. Plusieurs méthodes sont disponibles :\n\n| Méthode | Usage |\n| -------------------------------- | ---------------------------------------------------------------------- |\n| **Client Id and Secret** | Secret partagé classique. À stocker dans un coffre-fort (Vault, env vars chiffrées). |\n| **Signed JWT** | Le client signe un JWT d'assertion avec sa clé privée. Plus sûr qu'un secret. |\n| **Signed JWT with Client Secret** | Variante symétrique (HMAC). |\n| **X.509 Certificate** | mTLS — recommandé pour les contextes à forte exigence (FAPI, banque). |\n\n> **Important.** Le secret ne doit jamais être commité dans Git ni embarqué dans un binaire distribué. Pour un projet où les secrets vivent dans `config/.env`, ne commiter que `config/.env.example`.\n\n---\n\n## 5. Types de clients\n\nDepuis Keycloak 19, le « type » est déduit de la combinaison des toggles. La terminologie OAuth reste utile :\n\n| Type | Configuration Keycloak | Cas d'usage |\n| --------------- | ------------------------------------------------------------------- | ------------------------------------------------------------ |\n| **Confidentiel** | `Client authentication = ON` | Backend serveur (PHP, Node, Java…), BFF, service-to-service. |\n| **Public** | `Client authentication = OFF` + `Standard flow = ON` + **PKCE** | SPA (React, Vue, Angular), application mobile, CLI native. |\n| **Service account** | `Client authentication = ON` + `Service accounts roles = ON` | Communication machine-to-machine (`grant_type=client_credentials`). |\n\nLe type « bearer-only » a été retiré : pour une API qui se contente de valider des jetons sans déclencher d'authentification, créer un client confidentiel et n'activer **aucun** flux.\n\n---\n\n## 6. PKCE — recommandé pour tous les clients\n\n**PKCE** (*Proof Key for Code Exchange*, RFC 7636) protège le flux Authorization Code contre l'interception du code d'autorisation. Conçu initialement pour les clients publics, il est aujourd'hui recommandé pour **tous les clients**, y compris confidentiels, et obligatoire dans OAuth 2.1.\n\nActivation dans **Advanced** > **Proof Key for Code Exchange Code Challenge Method** > `S256`.\n\n> Ne jamais utiliser `plain` ; `S256` est la seule valeur acceptable.\n\n---\n\n## 7. Restreindre l'accès aux utilisateurs ou groupes\n\nPar défaut, tout utilisateur du realm peut se connecter via n'importe quel client. Deux approches permettent de restreindre cet accès.\n\n### Approche 1 — Authentification basée sur les rôles (simple)\n\n1. Créer un rôle client dédié, par exemple `app-user`, dans l'onglet **Roles** du client.\n2. Assigner ce rôle aux utilisateurs ou groupes autorisés (Users > *user* > Role mapping, ou Groups > *group* > Role mapping).\n3. Dans **Authentication** > **Flows**, ajouter une exécution `Conditional - User Role` au flux Browser, configurée avec le rôle requis et `Required`.\n\nCette méthode bloque l'authentification elle-même : un utilisateur sans le rôle ne pourra pas se connecter au client.\n\n### Approche 2 — Authorization Services (granulaire)\n\nÀ utiliser pour gérer des permissions plus fines (ressources, scopes, conditions).\n\n1. Activer **Authorization** sur le client.\n2. Onglet **Authorization** > **Policies** > créer une *Group Policy* ou *Role Policy* listant les utilisateurs/groupes autorisés.\n3. Onglet **Permissions** > créer une *Scope-Based Permission* ou *Resource-Based Permission* liée à la policy.\n4. Côté application, utiliser l'endpoint **UMA** ou l'adaptateur Keycloak pour évaluer les permissions.\n\n### Approche 3 — Limiter le client scope « roles »\n\nDans **Client scopes** > `roles` > **Scope**, désactiver *Full scope allowed* et n'autoriser que les rôles pertinents. Cela réduit la taille des jetons et limite ce que le client peut « voir » des rôles utilisateurs.\n\n---\n\n## 8. Client scopes et mappers\n\nLes **client scopes** déterminent les claims présents dans les jetons (`access_token` et `id_token`).\n\n- Les scopes **Default** sont systématiquement ajoutés à chaque jeton.\n- Les scopes **Optional** ne sont ajoutés que si l'application les demande via le paramètre `scope=` lors de l'authentification.\n\nPour exposer les groupes d'un utilisateur dans le token :\n\n1. Créer un client scope `groups` (ou réutiliser celui existant).\n2. Ajouter un mapper de type **Group Membership** :\n - *Token Claim Name* : `groups`\n - *Full group path* : `OFF` (sauf besoin d'arborescence)\n - *Add to ID token / Access token / Userinfo* : selon l'usage.\n3. Attacher le scope au client (Default ou Optional).\n\n---\n\n## 9. Réglages avancés à connaître\n\n| Section | Réglage | Recommandation |\n| ---------------------------------- | -------------------------------- | ---------------------------------------------------------------- |\n| **Advanced > Fine grain OpenID Connect configuration** | `Access Token Signature Algorithm` | `RS256` (par défaut) ou `PS256` pour FAPI. |\n| **Advanced > Advanced settings** | `Proof Key for Code Exchange` | `S256`. |\n| **Advanced > Advanced settings** | `Front channel logout` | `OFF` sauf si l'application implémente correctement la spec OIDC Front-Channel Logout. |\n| **Advanced > Advanced settings** | `Backchannel logout URL` | Renseigner pour une déconnexion globale propre. |\n| **Advanced > Token Lifespan** | `Access Token Lifespan` | Court (5–15 min). Le refresh token prend le relais. |\n| **Sessions** | `Client Session Idle / Max` | Aligner sur la politique de session de l'organisation. |\n\nPour appliquer automatiquement un ensemble cohérent de règles, utiliser les **Client Policies** du realm (profils pré-définis `oauth-2-1-for-confidential-client` et `oauth-2-1-for-public-client`).\n\n---\n\n## 10. Checklist de sécurité\n\n- [ ] `Client authentication = ON` pour tout client qui peut conserver un secret.\n- [ ] PKCE `S256` activé.\n- [ ] Implicit flow et Direct access grants désactivés.\n- [ ] Redirect URIs en `https://` et sans wildcard inutile.\n- [ ] Web origins explicites (pas de `*`).\n- [ ] Secret stocké dans un coffre-fort, jamais commité.\n- [ ] Access token court (≤ 15 min) et refresh token rotatif.\n- [ ] Accès restreint via rôle dédié ou Authorization Services.\n- [ ] *Full scope allowed* désactivé si les rôles transportés doivent être limités.\n- [ ] Logout backchannel ou front-channel configuré.\n\n---\n\n## Conclusion\n\nLa configuration d'un client OAuth 2.0 dans Keycloak repose sur quelques choix structurants — confidentiel ou public, flux activés, PKCE, restriction d'accès — qui ont chacun des implications de sécurité fortes. S'aligner sur OAuth 2.1 (PKCE systématique, pas d'implicit flow, pas de password grant) et utiliser les **Client Policies** pour appliquer ces règles à l'échelle du realm évite la plupart des configurations à risque.","featured":false,"tags":[]} \ No newline at end of file diff --git a/_cache/articles/586c5ab7-e960-465b-b499-83e0209890fe.json b/_cache/articles/586c5ab7-e960-465b-b499-83e0209890fe.json deleted file mode 100644 index a48f99e..0000000 --- a/_cache/articles/586c5ab7-e960-465b-b499-83e0209890fe.json +++ /dev/null @@ -1 +0,0 @@ -{"uuid":"586c5ab7-e960-465b-b499-83e0209890fe","slug":"quand-alt-ne-repond-plus-anatomie-d-un-bug-clavier-sous-gnome-wayland","title":"Quand Alt ne répond plus : anatomie d'un bug clavier sous GNOME/Wayland","author":"cedric@abonnel.fr","published":true,"published_at":"2026-05-25 07:27","created_at":"2026-05-12 13:35:47","updated_at":"2026-05-12 13:40:34","revisions":[],"cover":"cover.png","files_meta":{"cover.png":{"author":"","source_url":"https://img1.teletype.in/files/87/6b/876beab9-74d8-4c14-bb47-d600639b629f.png"},"af37382560286fe2-6958.svg":{"author":"","source_url":""}},"external_links":[],"seo_title":"","seo_description":"Alt+Tab et Alt+F4 ne répondent plus sous GNOME/Wayland ? Une option xkb peut détourner Alt gauche en AltGr. Diagnostic et correction expliqués.","og_image":"https://varlog.a5l.fr/file?uuid=586c5ab7-e960-465b-b499-83e0209890fe&name=cover.png","category":"informatique","content":"# Quand Alt ne répond plus : anatomie d'un bug clavier sous GNOME/Wayland\n\n*Comment une option de clavier a priori anodine peut désactiver Alt+Tab, Alt+F4 et tous les raccourcis Alt — et comment diagnostiquer ce genre de problème de façon méthodique.*\n\n## Le symptôme\n\nUn beau matin, les raccourcis clavier ne répondent plus. Pas tous : seulement ceux qui utilisent la touche **Alt gauche**.\n\n- `Alt+Tab` ne change plus de fenêtre\n- `Alt+F4` ne ferme plus l'application active\n- Dans un terminal, les raccourcis `Alt+quelque chose` (édition de ligne readline, raccourcis dans une applicaiton, navigation tmux…) restent sans effet\n- La touche **AltGr** (Alt droite), elle, fonctionne toujours : on peut taper `@`, `#`, `~`, les caractères normalement obtenus via Alt droite sur un clavier français azerty\n\nPremier réflexe naturel : « Le clavier est cassé ». Sauf que la touche physique répond bien — elle ne déclenche simplement plus ce qu'on attend d'elle.\n\n## Comprendre ce qui se passe (sans connaître Linux par cœur)\n\nPour saisir le bug, il faut comprendre un détail qu'on ignore généralement : **une touche physique du clavier et la fonction qu'elle déclenche sont deux choses différentes**.\n\nQuand on appuie sur la touche marquée « Alt » à gauche du clavier, le système reçoit d'abord un signal matériel — un code brut, `KEY_LEFTALT` sous Linux. Ce signal est ensuite **traduit** en une fonction logique par une couche logicielle appelée **xkb** (X Keyboard Extension). C'est xkb qui décide que `KEY_LEFTALT` signifie « modificateur Alt gauche » (le fameux `Alt_L`).\n\nMais xkb peut être configuré pour faire autre chose de ce même signal. Et c'est exactement ce qui s'était passé ici. Une option xkb nommée `lv3:lalt_switch` indiquait à la couche de traduction :\n\n> « Quand tu reçois `KEY_LEFTALT`, ne génère pas `Alt_L`. Génère `ISO_Level3_Shift` à la place. »\n\n`ISO_Level3_Shift`, c'est le nom technique de **AltGr** : la touche modificatrice qui permet d'accéder au « troisième niveau » d'une touche (le `@` au-dessus du `à`, le `#` au-dessus du `\"`, etc.). En clair, l'option transformait Alt gauche en un deuxième AltGr.\n\nConséquence : du point de vue des applications, **personne n'appuie jamais sur Alt**. Le gestionnaire de fenêtres (mutter, dans GNOME) attend un événement `Alt_L` qui ne vient jamais ; le terminal attend un préfixe Alt qui ne vient jamais non plus ; AltGr fonctionne toujours parce que c'est lui le « vrai » Level 3 Shift sur azerty, par défaut.\n\nC'est l'analogie d'un interrupteur dont on aurait inversé deux fils dans le mur : l'interrupteur marche, mais il commande une autre lampe.\n\n## La cause exacte\n\nSous GNOME, les options xkb sont stockées dans la base de configuration **dconf**, accessible via la commande `gsettings`. La clé concernée :\n\n```bash\ngsettings get org.gnome.desktop.input-sources xkb-options\n```\n\nSur le système concerné, la commande retournait :\n\n```\n['lv3:lalt_switch']\n```\n\nD'où venait cette option ? Plusieurs hypothèses plausibles :\n\n- Sélectionnée par erreur dans Paramètres → Clavier → Options de disposition lors d'une configuration ancienne\n- Importée depuis une ancienne machine via la synchronisation du profil\n- Activée par un script ou un outil de personnalisation (GNOME Tweaks, dconf-editor)\n- Héritée d'une habitude QWERTY où certains préfèrent un second AltGr à gauche\n\nSur un clavier français azerty, cette option n'a aucun intérêt pratique : AltGr est déjà sur la touche Alt droite, là où l'index droit peut l'atteindre naturellement. Ajouter un second AltGr sur la touche Alt gauche revient à perdre Alt sans gagner quoi que ce soit.\n\n## Le diagnostic, étape par étape\n\nVoici la séquence de commandes pour confirmer le problème — utile à mémoriser parce qu'elle s'applique à tout symptôme similaire sur GNOME/Wayland.\n\n**1. Confirmer l'environnement de session.** Les commandes qui suivent supposent GNOME sous Wayland ; sous X11 ou KDE, le diagnostic diffère.\n\n```bash\necho $XDG_SESSION_TYPE # attendu : wayland\necho $XDG_CURRENT_DESKTOP # attendu : GNOME\n```\n\n**2. Inspecter les options xkb.** C'est le test diagnostic principal pour ce genre de panne.\n\n```bash\ngsettings get org.gnome.desktop.input-sources xkb-options\n```\n\nSi la sortie n'est pas `@as []` (liste vide) ou une option clairement intentionnelle, on tient probablement le coupable. Les options les plus susceptibles de casser des raccourcis :\n\n- `lv3:lalt_switch` — transforme Alt gauche en AltGr (le cas présent)\n- `altwin:swap_alt_win` — échange Alt et Super (la touche Windows)\n- `caps:swapescape` — échange Caps Lock et Échap (anodin pour Alt, mais peut surprendre)\n- `ctrl:nocaps`, `ctrl:swapcaps` — transforment Caps Lock en Ctrl\n\n**3. Vérifier que les raccourcis WM sont bien définis.** Cela permet d'éliminer une mauvaise piste : si `Alt+Tab` ne marchait pas parce que le raccourci avait été effacé, ce serait visible ici.\n\n```bash\ngsettings get org.gnome.desktop.wm.keybindings switch-applications\n```\n\nLa sortie attendue est `['Tab', 'Tab']` ou équivalent. Si `Tab` y figure, le gestionnaire de fenêtres est correctement configuré — la panne est ailleurs.\n\n**4. Vérifier les options d'accessibilité.** Les touches rémanentes (StickyKeys), touches lentes (SlowKeys) ou touches rebonds (BounceKeys) peuvent provoquer des comportements clavier surprenants quand elles sont activées par erreur.\n\n```bash\ngsettings get org.gnome.desktop.a11y.keyboard stickykeys-enable\ngsettings get org.gnome.desktop.a11y.keyboard slowkeys-enable\ngsettings get org.gnome.desktop.a11y.keyboard bouncekeys-enable\n```\n\nToutes les trois doivent normalement renvoyer `false` sauf besoin spécifique.\n\n**5. Tester au niveau matériel si rien d'autre n'explique.** Si toutes les vérifications logicielles sont propres, on vérifie que la touche envoie bien un signal au noyau :\n\n```bash\nsudo evtest\n```\n\nL'outil demande de choisir un périphérique (le clavier), puis affiche en direct chaque événement reçu. En appuyant sur Alt gauche, une ligne contenant `KEY_LEFTALT` doit apparaître. Si rien ne s'affiche, le problème est matériel ou dans le pilote — ce qui sort du cadre de cette fiche.\n\n## La correction\n\nUne seule commande suffit dans le cas présent :\n\n```bash\ngsettings set org.gnome.desktop.input-sources xkb-options \"[]\"\n```\n\nL'effet est **immédiat** : mutter recharge la configuration clavier à la volée, sans qu'on ait besoin de fermer sa session. Si pour une raison ou une autre l'effet ne se voit pas (vieux processus qui a mis en cache la configuration, terminal récalcitrant…), une déconnexion/reconnexion de la session GNOME suffit à tout réinitialiser.\n\nPour vérifier que la valeur est bien revenue à vide :\n\n```bash\ngsettings get org.gnome.desktop.input-sources xkb-options\n# attendu : @as []\n```\n\n## Et si on voulait vraiment garder l'option ?\n\nPour information, la commande inverse est :\n\n```bash\ngsettings set org.gnome.desktop.input-sources xkb-options \"['lv3:lalt_switch']\"\n```\n\nÀ réserver aux cas où l'on tape énormément de caractères de troisième niveau de la main gauche et où on accepte de perdre Alt+Tab.\n\n## La méthode à retenir, au-delà de ce bug précis\n\nL'intérêt de cette fiche n'est pas tant la solution — une ligne de commande — que la **logique de diagnostic**. Quand une touche cesse de fonctionner sous Linux, on remonte la chaîne des responsabilités, du plus haut niveau au plus bas :\n\n1. **Le gestionnaire de fenêtres a-t-il bien le raccourci ?** (`gsettings ... wm.keybindings`)\n2. **Les options d'accessibilité ne brouillent-elles pas la frappe ?** (`gsettings ... a11y.keyboard`)\n3. **La couche xkb traduit-elle correctement la touche en modificateur ?** (`gsettings ... xkb-options`)\n4. **Le noyau reçoit-il un signal matériel quand on appuie ?** (`evtest`)\n\nÀ chaque étage, une commande, une sortie attendue, et un verdict clair. La grande force de Linux dans ce genre de situation, c'est que chaque couche est inspectable séparément. Le réflexe à acquérir n'est pas « ça ne marche pas, je redémarre » mais « ça ne marche pas, je trouve quelle couche ment ».\n\n## Checklist mémo\n\nModificateur (Alt / Super / Ctrl) qui ne répond plus sous GNOME/Wayland :\n\n1. `gsettings get org.gnome.desktop.input-sources xkb-options` — surveiller `lv3:lalt_switch`, `altwin:swap_alt_win`, `caps:*`, `ctrl:*`\n2. `gsettings list-recursively org.gnome.desktop.wm.keybindings | grep -i alt` — confirmer que le raccourci existe\n3. `gsettings get org.gnome.desktop.a11y.keyboard stickykeys-enable` (puis `slowkeys-enable`, `bouncekeys-enable`)\n4. `sudo evtest` → choisir le clavier → presser la touche → doit afficher le bon code (`KEY_LEFTALT`, `KEY_LEFTMETA`, etc.)\n\nQuatre commandes, quatre couches, et 95 % des bugs clavier de session graphique sont localisés.","featured":false,"tags":[]} \ No newline at end of file diff --git a/_cache/articles/5982deaf-f3de-4f65-9270-9849132e64f6.json b/_cache/articles/5982deaf-f3de-4f65-9270-9849132e64f6.json deleted file mode 100644 index 5ebb73a..0000000 --- a/_cache/articles/5982deaf-f3de-4f65-9270-9849132e64f6.json +++ /dev/null @@ -1 +0,0 @@ -{"uuid":"5982deaf-f3de-4f65-9270-9849132e64f6","slug":"nos-donnees-a-l-ere-de-l-ia-l-affaire-linkedin-et-la-colere-des-utilisateurs","title":"Nos données à l’ère de l’IA : l’affaire LinkedIn et la colère des utilisateurs","author":"cedric@abonnel.fr","published":true,"published_at":"2025-11-05 07:10:37","created_at":"2025-11-05 07:10:37","updated_at":"2025-11-05 07:10:37","revisions":[],"cover":"","category":"actualité","content":"# Nos données à l’ère de l’IA : l’affaire LinkedIn et la colère des utilisateurs\n\nUn matin d’automne, Léa ouvre son compte LinkedIn comme elle le fait chaque jour. Consultante indépendante, elle y partage des réflexions sur le travail à distance, y échange avec des collègues et y recrute parfois des partenaires. Rien de bien extraordinaire. Mais ce jour-là, un post attire son attention : *« LinkedIn utilise vos données pour entraîner ses IA »*.\n\nAu début, elle croit à une rumeur. Encore une de ces tempêtes numériques qui s’évanouissent aussi vite qu’elles éclatent. Puis elle lit plus attentivement : le réseau professionnel de Microsoft admet effectivement utiliser certaines données publiques — les profils, les publications, les interactions visibles — pour nourrir ses modèles d’intelligence artificielle.\n\n### **De la mise en relation à la collecte invisible**\n\nDepuis sa création, LinkedIn se présente comme une vitrine professionnelle : un espace où chacun peut exposer son parcours, ses compétences, ses ambitions. En échange, la plateforme promet visibilité, opportunités et réseau. Mais derrière cette promesse, un autre marché s’est peu à peu installé : celui des données.\n\nChaque clic, chaque mise à jour de poste, chaque mot-clé devient une pièce d’un immense puzzle comportemental. Ce puzzle, jusqu’ici utilisé pour cibler des offres d’emploi ou des publicités, se retrouve désormais au cœur de quelque chose de beaucoup plus vaste : **l’entraînement des intelligences artificielles**.\n\nMicrosoft, maison mère de LinkedIn, investit des milliards dans l’IA. Or, pour qu’une IA apprenne, il lui faut une matière première : les mots, les textes, les interactions humaines. Et LinkedIn en regorge.\n\n### **La ligne floue entre le “public” et le “privé”**\n\nTechniquement, LinkedIn affirme ne collecter que les informations *publiques*. Mais qu’est-ce que cela signifie vraiment ? Léa n’a jamais donné son accord explicite pour que ses publications servent à entraîner des algorithmes de génération de texte. Elle les a partagées pour échanger avec des pairs, pas pour devenir une donnée parmi des millions d’autres.\n\nC’est là que le malaise grandit.\nLes utilisateurs découvrent que la frontière entre ce qu’ils publient volontairement et ce qui peut être *réutilisé* s’estompe. Dans les conditions d’utilisation, tout est mentionné — quelque part, en petits caractères. Mais rares sont ceux qui lisent jusqu’à la dernière ligne.\n\n### **Le choc du consentement absent**\n\nLes réactions ne se font pas attendre : des posts indignés envahissent la plateforme même.\n« On n’est pas des cobayes ! » écrit un utilisateur.\n« Nos profils sont devenus des datasets », dénonce une autre.\n\nCe qui choque, ce n’est pas seulement l’usage, mais la **manière** dont il a été introduit : sans consultation, sans transparence, presque à bas bruit.\n\nLes défenseurs du projet rétorquent que l’IA ne “lit” pas nos données comme un humain. Qu’elle analyse des tendances, pas des personnes. Que tout est anonymisé.\nMais cette défense sonne creux pour beaucoup : anonymiser ne supprime pas la question éthique. À partir du moment où nos mots, nos idées, nos réflexions alimentent un système dont nous ne maîtrisons ni les usages ni les bénéfices, une part de notre autonomie numérique s’érode.\n\n### **Une affaire de confiance**\n\nLinkedIn n’est pas la première plateforme à faire face à cette controverse. Reddit, X (ex-Twitter) et même Meta ont adopté des politiques similaires, justifiant ces pratiques par la nécessité d’améliorer leurs modèles d’IA.\nMais LinkedIn occupe une place particulière : il s’agit du **réseau professionnel par excellence**. Ici, les utilisateurs partagent des informations sensibles — leur parcours, leur entreprise, leurs compétences — souvent avec leur vrai nom.\n\nLa relation de confiance entre l’utilisateur et la plateforme est donc essentielle. Et c’est justement cette confiance qui vacille.\n\n### **Léa et le dilemme numérique**\n\nQuelques jours plus tard, Léa se rend dans les paramètres de confidentialité.\nElle découvre, cachée dans une section sobrement intitulée « Utilisation des données pour l’IA », une mention : « Nous pouvons utiliser vos informations publiques pour améliorer nos produits et services, y compris les technologies d’intelligence artificielle. »\n\nIl existe bien une option d’exclusion, mais difficile à trouver. Léa la décoche, sans savoir si cela changera vraiment quelque chose.\nElle ressent un mélange de soulagement et de résignation.\n\nCar au fond, la question dépasse LinkedIn. Elle touche à une réalité plus vaste : **dans l’ère de l’intelligence artificielle, nos données sont devenues la nouvelle énergie**, le carburant invisible qui alimente des machines toujours plus puissantes.\n\n### **Vers une prise de conscience collective**\n\nL’affaire LinkedIn agit comme un électrochoc. Elle révèle à quel point le consentement numérique reste un concept fragile, souvent illusoire. Elle invite chacun à repenser ce qu’il partage en ligne, mais aussi à exiger des plateformes une vraie transparence.\n\nLes régulateurs européens, via le RGPD, commencent à se saisir du sujet. Certains experts appellent à créer un **« droit à l’exclusion des IA »**, un cadre légal obligeant les entreprises à obtenir un consentement explicite avant toute utilisation des données à des fins d’entraînement algorithmique.\n\nMais pour l’instant, la balle reste surtout dans le camp des utilisateurs — ceux qui, comme Léa, naviguent entre pragmatisme et inquiétude, entre le besoin de visibilité et la peur d’être instrumentalisés.\n\n---\n\n### ** Entre progrès et perte de contrôle**\n\nL’IA promet des avancées spectaculaires. Elle transforme nos métiers, nos outils, nos manières de communiquer. Mais elle pose une question fondamentale : **qui possède les données qui la nourrissent ?**\n\nLinkedIn n’est peut-être qu’un exemple parmi d’autres, mais il symbolise un tournant.\nDans cette ère où chaque mot que nous tapons peut devenir une donnée d’apprentissage, la véritable ressource n’est plus la technologie, mais la **confiance**.\nEt cette confiance, aujourd’hui, semble s’effriter à mesure que les algorithmes se renforcent.\n\n---\n\nVoici les risques autour de l’utilisation des données des utilisateurs par LinkedIn (et d’autres plateformes) pour l’IA\n\n## **1. Atteinte à la vie privée et au consentement**\n\nMême si LinkedIn affirme n’utiliser que des données “publiques”, cela ne signifie pas que les utilisateurs ont **consenti explicitement** à cet usage.\n\n* Les informations partagées à des fins professionnelles (CV, publications, commentaires) peuvent être **réutilisées hors contexte**.\n* Le consentement est souvent implicite, enfoui dans les conditions d’utilisation.\n* L’utilisateur **perd le contrôle** sur ce qu’il partage : il ne sait pas exactement **comment ni par qui** ses données seront exploitées.\n\n➡️ *Exemple concret :* ton texte sur la gestion d’équipe pourrait servir à entraîner une IA d’entreprise sans que tu le saches, ni que ton nom y soit associé.\n\n---\n\n## **2. Profilage et reconstitution d’identité**\n\nL’agrégation massive des données permet aux IA d’identifier des **schémas comportementaux et professionnels** :\n\n* Les algorithmes peuvent déduire des informations sensibles (habitudes de travail, orientation politique, situation financière, etc.) à partir de simples interactions.\n* Ces profils peuvent être utilisés pour **le ciblage commercial**, **le recrutement automatisé**, voire **l’évaluation de performance** dans certains contextes.\n\n➡️ *Risque :* un recruteur ou un système d’IA pourrait juger ton profil ou ton style d’écriture sans ton accord.\n\n---\n\n## **3. Appropriation intellectuelle et perte de la valeur de ton contenu**\n\nLes textes, publications et commentaires des utilisateurs servent de **matière première** à l’entraînement de modèles d’intelligence artificielle.\n\n* Tes contributions (même originales ou expertes) peuvent **être intégrées à des IA génératives** qui, ensuite, produiront du contenu similaire sans mentionner leur source.\n* Cela pose une question d’**éthique et de propriété intellectuelle** : tu deviens fournisseur involontaire de savoir gratuit.\n\n➡️ *Exemple :* une IA générative pourrait reformuler ou réutiliser tes analyses dans un contexte commercial sans te citer.\n\n---\n\n## **4. Risque de réidentification**\n\nMême si LinkedIn ou Microsoft annoncent que les données sont “anonymisées”, des études montrent qu’il est souvent possible de **réidentifier des individus** à partir de fragments de données combinées.\n\n* Les publications, les dates d’emploi ou les noms d’entreprises peuvent suffire à **retrouver une personne réelle**.\n* Cela peut exposer à du **harcèlement**, du **doxing** (divulgation d’infos perso) ou du **recrutement non sollicité**.\n\n---\n\n## **5. Érosion de la confiance numérique**\n\nChaque nouvelle utilisation non transparente des données creuse le fossé entre utilisateurs et plateformes.\n\n* Les professionnels peuvent **se censurer**, publier moins, ou quitter la plateforme.\n* Cela nuit à la qualité du réseau et à la diversité des échanges.\n\n➡️ *Risque collectif :* LinkedIn perd son rôle de réseau professionnel ouvert, et les utilisateurs deviennent méfiants ou silencieux.\n\n---\n\n## **6. Exploitation commerciale asymétrique**\n\nLes utilisateurs fournissent la matière (leurs données), mais **ne bénéficient pas** des revenus générés par les IA entraînées sur ces données.\n\n* Les plateformes en tirent un profit direct (via les produits IA, la publicité ou les abonnements premium).\n* Les utilisateurs, eux, deviennent **des ressources gratuites** sans contrepartie.\n\n---\n\n## **7. Sécurité des données à long terme**\n\nUne fois intégrées dans des modèles d’IA, les données ne peuvent pas toujours être **effacées**.\n\n* Même si tu supprimes ton compte, l’empreinte de tes données peut subsister dans les systèmes d’apprentissage.\n* Cela entre en tension avec le **droit à l’oubli**, garanti par le RGPD.\n\n---\n\n**Exemples concrets** et **projections** permettant de bien mesurer les conséquences réelles (et à venir) de cette collecte de données par LinkedIn et les IA associées.\nVoici une série d’illustrations **réalistes, plausibles et documentées**, suivies de **projections futures** si la tendance se poursuit.\n\n## 💼 **1. Exemple actuel : ton profil devient un “modèle” de compétence**\n\nUn consultant publie régulièrement des analyses sur la transformation digitale. Ses posts sont publics, bien écrits et souvent partagés.\n👉 Ces textes peuvent être intégrés (sans qu’il le sache) dans des ensembles de données qui servent à **entraîner une IA professionnelle** de rédaction ou de recrutement.\nRésultat : une IA générative pourrait ensuite **produire des articles ou des messages LinkedIn similaires au sien**, imitant son ton et sa structure — sans jamais le créditer.\n\n📍 *Projection 2026 :* les entreprises paieront pour des outils d’IA “experts en communication LinkedIn”, entraînés sur des millions de publications d’utilisateurs. Ces contenus originaux deviendront des modèles commerciaux... sans rémunération pour leurs auteurs.\n\n---\n\n## 🔍 **2. Exemple : profilage algorithmique dans le recrutement**\n\nLinkedIn est déjà utilisé pour **le tri automatisé des candidatures**. En combinant ces données avec des modèles d’IA, une entreprise pourrait prédire les “traits de personnalité” d’un candidat à partir de son profil, de son vocabulaire ou de son historique de publications.\n\n➡️ *Risque concret :*\nUne IA pourrait écarter un profil jugé “instable” ou “non aligné culturellement” simplement parce qu’elle a repéré des posts critiques sur le management — sans intervention humaine.\n\n📍 *Projection 2027 :* des recruteurs utilisent des IA pour “noter” automatiquement les profils selon leur probabilité de succès dans une entreprise, créant des **discriminations invisibles** et difficilement contestables.\n\n---\n\n## ✍️ **3. Exemple : appropriation intellectuelle déguisée**\n\nImaginons une chercheuse en RH qui publie des posts détaillant sa méthode d’évaluation des compétences.\nQuelques mois plus tard, une IA professionnelle (issue d’un modèle Microsoft ou OpenAI) reprend des formulations et des idées très proches dans un produit commercial.\n\n➡️ *Risque :* sa méthode devient une fonctionnalité d’un logiciel RH, sans reconnaissance ni rémunération.\n\n📍 *Projection 2028 :* les IA intègrent massivement du contenu “crowdsourcé” depuis LinkedIn, Reddit ou Medium. Les créateurs deviennent **fournisseurs involontaires de savoir**, pendant que les entreprises vendent des outils basés sur leurs contributions.\n\n---\n\n## 🧠 **4. Exemple : inférences comportementales non désirées**\n\nUne IA peut déduire plus que ce que l’utilisateur pense partager.\n➡️ Par exemple :\n\n* Un rythme de publication irrégulier peut être interprété comme un “manque de disponibilité”.\n* Un enchaînement de changements de poste peut être lu comme un “instinct d’instabilité”.\n* Le ton ou la fréquence des commentaires peut servir à classer les utilisateurs selon leur “influence sociale”.\n\n📍 *Projection 2026-2030 :* ces données comportementales nourrissent des **scores de réputation professionnelle** invisibles, que certaines entreprises ou plateformes utilisent pour classer les candidats, partenaires ou clients potentiels.\n\n---\n\n## 💰 **5. Exemple : création de produits IA entraînés sur les utilisateurs**\n\nMicrosoft développe des outils d’IA intégrés à LinkedIn Learning ou à Microsoft 365 Copilot.\n➡️ Les modèles peuvent s’inspirer des tendances, expressions et structures de pensée des utilisateurs LinkedIn pour proposer des conseils personnalisés (“Voici comment rédiger une offre d’emploi efficace”).\n\n📍 *Projection 2030 :*\nLes modèles d’IA deviennent si performants qu’ils proposent des stratégies RH, des analyses de marché ou des lettres de motivation entières, **entraînées sur les contenus des utilisateurs** — mais commercialisées sous licence Microsoft.\nLes utilisateurs deviennent littéralement la **matière première** de produits IA vendus à d’autres professionnels.\n\n---\n\n## 🔒 **6. Exemple : difficulté d’effacement ou de contrôle**\n\nUn utilisateur décide de supprimer son compte LinkedIn.\n➡️ Problème : ses anciens posts, déjà utilisés pour l’entraînement de modèles, ne peuvent pas être “désappris” par ces IA.\nLes traces textuelles persistent dans les modèles, parfois indéfiniment.\n\n📍 *Projection 2029 :* même avec le droit à l’oubli renforcé, la récupération complète des données dans les modèles devient quasi impossible. Les régulateurs européens devront imposer des **procédures d’“oubli algorithmique”**, très coûteuses à mettre en œuvre.\n\n---\n\n## 🌍 **7. Projection sociétale globale : le paradoxe de la transparence**\n\nÀ long terme, la généralisation de ces pratiques pourrait produire un **effet de censure douce** :\n\n* Les utilisateurs partagent moins d’analyses authentiques, de peur d’être copiés ou profilés.\n* Les publications deviennent plus neutres, plus polies, moins spontanées.\n* Le réseau perd de sa valeur humaine et se transforme en vitrine aseptisée.\n\nEn parallèle, les grandes entreprises technologiques accumulent des quantités massives de données textuelles qui leur donnent un **avantage compétitif durable**.\nLes utilisateurs, eux, deviennent invisibles dans la chaîne de valeur de l’intelligence artificielle.\n","featured":false,"files_meta":[],"external_links":[],"tags":[]} \ No newline at end of file diff --git a/_cache/articles/5a0cced3-40d0-46bf-8501-b533f3c2608e.json b/_cache/articles/5a0cced3-40d0-46bf-8501-b533f3c2608e.json deleted file mode 100644 index 23c0119..0000000 --- a/_cache/articles/5a0cced3-40d0-46bf-8501-b533f3c2608e.json +++ /dev/null @@ -1 +0,0 @@ -{"uuid":"5a0cced3-40d0-46bf-8501-b533f3c2608e","slug":"reparer-une-instance-uptime-kuma-installee-via-le-script-proxmox","title":"Réparer une instance Uptime Kuma installée via le script Proxmox","author":"cedric@abonnel.fr","published":true,"published_at":"2025-11-26 08:33","created_at":"2025-11-26 08:33:49","updated_at":"2026-05-12 09:16:00","revisions":[{"n":1,"date":"2026-05-12 09:13:30","comment":"","title":"Réparer une instance Uptime Kuma installée via le script Proxmox"}],"cover":"cover.svg","files_meta":{"e87cce19ac9cc10d-37145.svg":{"author":"Cédrix / Générée par IA","source_url":""}},"external_links":[],"seo_title":"","seo_description":"","og_image":"","category":"informatique","content":"# Réparer une instance Uptime Kuma installée via le script Proxmox\n\n> Méthode basée sur l'installation via le script communautaire :\n> [community-scripts.github.io/ProxmoxVE/scripts?id=uptimekuma](https://community-scripts.github.io/ProxmoxVE/scripts?id=uptimekuma)\n\nSi tu utilises Uptime Kuma pour monitorer ton infra, tu finiras tôt ou tard par tomber sur un de ces grands classiques : le service qui refuse de démarrer après une mise à jour, des erreurs SQLite louches dans `journalctl`, ou pire — l'interface qui tourne mais ne remonte plus aucun heartbeat. Dans 90 % des cas, c'est la base SQLite qui a pris cher, souvent à cause d'un arrêt brutal du conteneur LXC ou d'une migration qui s'est mal passée.\n\nAvant de paniquer et de tout réinstaller, il y a une série d'étapes à dérouler. Je les mets ici dans l'ordre, parce que l'ordre compte : on commence toujours par le moins destructif.\n\n## Pourquoi SQLite et pas un vrai SGBD ?\n\nPetite parenthèse pour les juniors qui se demanderaient. Uptime Kuma embarque SQLite parce que c'est une appli pensée pour être facile à déployer : pas de serveur de base à installer à côté, pas de credentials à gérer, juste un fichier `kuma.db` sur le disque. C'est génial pour démarrer, mais ça a un défaut majeur — SQLite n'aime pas du tout être coupé en plein milieu d'une écriture. Si ton LXC tombe pendant que Kuma écrit un heartbeat, tu peux te retrouver avec un fichier corrompu. D'où l'importance de toujours arrêter proprement le service avant de toucher au fichier.\n\n## 1. Arrêter le service proprement\n\n```bash\nsystemctl stop uptime-kuma\n```\n\nC'est la première chose à faire, **toujours**. Tant que le service tourne, il a un verrou sur `kuma.db` et il continue d'y écrire. Tu peux ouvrir le fichier en lecture avec `sqlite3` malgré ce verrou, mais dès que tu veux faire un `DELETE` ou un `PRAGMA`, tu vas soit avoir une erreur `database is locked`, soit — pire — corrompre encore plus la base si tu forces.\n\nVérifie que c'est bien arrêté avant de continuer :\n\n```bash\nsystemctl status uptime-kuma\n```\n\nTu dois voir `inactive (dead)`. Pas `active`, pas `activating`, pas `failed` avec un process encore en l'air.\n\n## 2. Aller dans le dossier de l'app\n\nLe script communautaire installe Kuma dans `/opt/uptime-kuma` :\n\n```bash\ncd /opt/uptime-kuma\n```\n\nDans ce dossier, ce qui nous intéresse c'est le sous-dossier `data/`. C'est là que vit tout ce qui compte : le fichier `kuma.db` (la base), les uploads, et quelques fichiers de config. Le reste (`server/`, `node_modules/`, etc.) c'est le code de l'application — tu peux le casser, un `git pull` ou une réinstallation le remettra en place. Mais `data/`, si tu le perds, tu perds **toute** ta config de monitoring.\n\n## 3. Sauvegarder avant de toucher à quoi que ce soit\n\nRègle d'or de l'ops : on ne touche **jamais** à une base de données sans avoir une copie au chaud. Jamais.\n\n```bash\ncp -r data data-backup-$(date +%Y%m%d)\n```\n\nLe `$(date +%Y%m%d)` te génère un suffixe du genre `data-backup-20260512`. Comme ça si tu fais plusieurs interventions dans la même semaine, tu sais laquelle date de quand, et tu ne risques pas d'écraser une sauvegarde par une autre.\n\nCette copie embarque :\n\n- la base `kuma.db` elle-même\n- les fichiers WAL (`kuma.db-wal`, `kuma.db-shm`) si SQLite est en mode Write-Ahead Logging — c'est important de les prendre avec, sinon ta sauvegarde est incomplète\n- les uploads et certificats si tu en as\n\nSi tu sautes cette étape et que tu te plantes à l'étape 5 ou 6, tu n'auras aucun moyen de revenir en arrière. Sérieusement, fais-le.\n\n## 4. Vérifier l'intégrité de la base\n\n```bash\ncd data/\nsqlite3 kuma.db \"PRAGMA integrity_check;\"\n```\n\n`PRAGMA integrity_check`, c'est la commande de diagnostic native de SQLite. Elle parcourt toute la base, vérifie que les index pointent bien sur les bonnes lignes, que les pages ne sont pas corrompues, que les contraintes sont respectées. Deux issues possibles :\n\n- **`ok`** : la base est saine sur le plan structurel. Si Kuma ne démarre toujours pas, le problème vient probablement d'une migration coincée (voir étape 5) ou du code de l'app, pas du fichier.\n- **Une liste d'erreurs** : il y a de la corruption. Selon ce qui est touché, on passera à l'étape 5 ou 6.\n\nPour les juniors qui découvrent SQLite : `PRAGMA`, c'est le mot-clé que SQLite utilise pour les commandes qui ne sont pas du SQL standard — c'est spécifique à SQLite, tu ne le verras pas dans PostgreSQL ou MySQL.\n\n## 5. Supprimer un paramètre de migration corrompu\n\nSur certaines versions de Kuma (notamment autour des montées de version qui touchent à l'agrégation des heartbeats), il y a un bug connu : l'entrée `migrateAggregateTableState` dans la table `setting` se retrouve dans un état incohérent, et le service refuse de démarrer parce qu'il pense être au milieu d'une migration qui n'avance plus.\n\nLa fix :\n\n```bash\nsqlite3 kuma.db \"DELETE FROM setting WHERE key = 'migrateAggregateTableState';\"\n```\n\nCe qu'on fait, c'est qu'on dit à Kuma : \"oublie où tu en étais, repars de zéro sur ce point\". Au redémarrage, il va recréer la clé proprement et relancer la migration depuis le début. C'est non destructif pour tes données de monitoring — on ne touche qu'à un drapeau d'état interne.\n\nSi ce n'est pas ton problème (clé absente ou suppression sans effet), passe à la suite.\n\n## 6. Solution radicale : vider la table `heartbeat`\n\nSi la corruption est concentrée sur l'historique de monitoring (et c'est souvent le cas, parce que c'est la table où Kuma écrit le plus souvent — un INSERT toutes les 20-60 secondes par sonde, ça finit par faire du volume), tu peux la vider :\n\n```bash\nsqlite3 kuma.db \"DELETE FROM heartbeat;\"\n```\n\nÀ lire attentivement : cette commande **supprime tout l'historique des sondes**. Tu perds les graphes de uptime, les SLA calculés sur les 30/90/365 derniers jours, tout. En revanche :\n\n- tes sondes sont conservées (table `monitor`)\n- tes utilisateurs aussi (table `user`)\n- tes notifications également (table `notification`)\n- ta config générale est intacte (table `setting`)\n\nC'est à utiliser uniquement quand :\n\n- `PRAGMA integrity_check` pointe vers des problèmes sur `heartbeat` ou ses index\n- Kuma refuse de démarrer et l'étape 5 n'a rien donné\n- ou plus simplement, ta base a tellement grossi que Kuma rame et que tu acceptes de perdre l'historique pour repartir propre\n\nTant qu'à faire, profites-en pour faire un `VACUUM` derrière, qui va vraiment libérer l'espace disque (un `DELETE` seul ne récupère pas la place sur le disque, il marque juste les pages comme libres pour réutilisation) :\n\n```bash\nsqlite3 kuma.db \"VACUUM;\"\n```\n\n## 7. Redémarrer le service\n\n```bash\nsystemctl start uptime-kuma\n```\n\nEt vérifie qu'il a bien démarré :\n\n```bash\nsystemctl status uptime-kuma\n```\n\nTu dois voir `active (running)`. Si tu vois `failed` ou si le service redémarre en boucle, ne le laisse pas dans cet état — passe directement à l'étape 8 pour comprendre pourquoi.\n\n## 8. Lire les logs\n\n```bash\njournalctl -u uptime-kuma -f\n```\n\nLe `-u uptime-kuma` cible le service, le `-f` fait du `follow` (équivalent de `tail -f`) — les nouvelles lignes s'affichent en temps réel. Laisse tourner pendant deux ou trois minutes, le temps que Kuma rejoue ses migrations, recharge ses sondes, et envoie les premiers heartbeats.\n\nCe qu'il faut chercher dans les logs :\n\n- **erreurs SQLite** : `SQLITE_CORRUPT`, `database disk image is malformed`, `attempt to write a readonly database` — ça veut dire que t'as encore un problème de fichier, voire de permissions\n- **migrations bloquées** : des messages du genre `Running migration...` qui ne sont jamais suivis d'un `Migration done`\n- **permissions** : `EACCES`, `permission denied` — typiquement après une intervention faite en root sur des fichiers qui doivent appartenir à un autre utilisateur. Vérifie avec `ls -la data/` que les fichiers sont bien possédés par l'user qui fait tourner le service\n- **modules Node manquants** : `Cannot find module 'xxx'` — ça arrive après une mise à jour qui s'est mal passée. La fix, c'est généralement de relancer `npm ci --production` dans `/opt/uptime-kuma`\n- **port déjà utilisé** : `EADDRINUSE` — tu as un autre process qui squatte le port 3001 (ou celui que tu as configuré)\n\nPour sortir du `journalctl -f`, c'est `Ctrl+C`.\n\n## Et après ?\n\nUne fois que Kuma tourne propre, prends cinq minutes pour mettre en place ce qui t'aurait évité d'arriver ici :\n\n1. **Une sauvegarde régulière de `data/`**. Un simple cron qui fait `tar czf` du dossier vers un autre serveur, ça suffit largement pour un Kuma perso. Pense à arrêter le service avant le tar, ou utilise `sqlite3 kuma.db \".backup /chemin/sauvegarde.db\"` qui fait un snapshot cohérent sans devoir couper Kuma.\n2. **Un monitoring du monitoring**. Oui, c'est méta. Mais si Kuma tombe, c'est lui qui t'aurait alerté de la chute de tes autres services — donc personne ne te prévient. Un check externe (UptimeRobot gratuit, healthchecks.io, ou un autre Kuma sur une autre machine) qui ping ton instance, c'est cinq minutes à mettre en place.\n3. **Garder ta sauvegarde `data-backup-AAAAMMJJ` au moins une semaine** avant de la supprimer. Au cas où un effet de bord apparaîtrait quelques jours plus tard.\n\nEt voilà. Avec ces huit étapes, tu couvres 95 % des cas de Kuma cassé. Pour les 5 % restants — typiquement quand le LXC lui-même a un souci de filesystem — c'est une autre histoire, et il faudra sortir l'artillerie côté Proxmox.","featured":false,"tags":[]} \ No newline at end of file diff --git a/_cache/articles/5b7030fa-68da-42b1-b181-49af17132fdf.json b/_cache/articles/5b7030fa-68da-42b1-b181-49af17132fdf.json deleted file mode 100644 index 8eccf32..0000000 --- a/_cache/articles/5b7030fa-68da-42b1-b181-49af17132fdf.json +++ /dev/null @@ -1 +0,0 @@ -{"uuid":"5b7030fa-68da-42b1-b181-49af17132fdf","slug":"github-copilot-l-assistant-qui-a-declenche-une-tempete","title":"GitHub Copilot, l’assistant qui a déclenché une tempête","author":"cedric@abonnel.fr","published":true,"published_at":"2025-11-05 07:17:49","created_at":"2025-11-05 07:17:49","updated_at":"2025-11-05 07:17:49","revisions":[],"cover":"","category":"actualité","content":"# GitHub Copilot, l’assistant qui a déclenché une tempête\n\nEn 2022, Microsoft dévoile **GitHub Copilot**, un outil révolutionnaire : une intelligence artificielle capable d’aider les programmeurs en générant du code automatiquement. Derrière cette prouesse technologique, un secret de fabrication : Copilot a été entraîné sur des **millions de lignes de code public**, hébergées sur GitHub, la plateforme de partage de projets informatiques appartenant… à Microsoft.\n\nTrès vite, l’enthousiasme laisse place à la colère. Des milliers de développeurs réalisent que **leur travail a servi à nourrir une machine commerciale**, sans leur consentement ni la moindre compensation. Sur les forums et les réseaux, le mot circule : “**extraction de travail gratuit**”. Ce qui était autrefois perçu comme un espace de collaboration ouverte se transforme en champ de bataille juridique et éthique.\n\nAux États-Unis, une **action collective** est lancée contre Microsoft et OpenAI. Les plaignants accusent les géants de la tech de **violer les droits d’auteur** en utilisant du code sous licence open source pour former leur IA. L’affaire devient un symbole : jusqu’où peut-on aller dans la collecte des données publiques pour nourrir les intelligences artificielles ?\n\nLe débat dépasse vite le monde du code. Sur LinkedIn, certains s’interrogent : **et si nos textes, nos idées, nos posts publics devenaient, eux aussi, la matière première des IA linguistiques ?** Après tout, les mots que nous publions en ligne sont aux modèles de langage ce que le code open source était à Copilot : une ressource abondante, gratuite, mais pas nécessairement libre de droit.\n\nAinsi, l’histoire de GitHub Copilot n’est pas seulement celle d’une innovation technique — c’est le récit d’un **nouvel âge de la création**, où chaque ligne, chaque phrase partagée sur le web peut devenir une brique d’intelligence… parfois à notre insu.","featured":false,"files_meta":[],"external_links":[],"tags":[]} \ No newline at end of file diff --git a/_cache/articles/5cfc434d-26d8-4fba-b9e3-6a23fddb45d7.json b/_cache/articles/5cfc434d-26d8-4fba-b9e3-6a23fddb45d7.json deleted file mode 100644 index 767fba9..0000000 --- a/_cache/articles/5cfc434d-26d8-4fba-b9e3-6a23fddb45d7.json +++ /dev/null @@ -1 +0,0 @@ -{"uuid":"5cfc434d-26d8-4fba-b9e3-6a23fddb45d7","slug":"esp32-connected-on-linux","title":"esp32 connected on linux","author":"cedric@abonnel.fr","published":true,"published_at":"2025-11-19 12:12:17","created_at":"2025-11-19 12:12:17","updated_at":"2025-11-19 12:12:17","revisions":[],"cover":"","files_meta":[],"external_links":[],"seo_title":"","seo_description":"","og_image":"","category":"Électronique","content":"# esp32 connected on linux\n\n![Nom de la section](dummy.png)\n\nCe chapitre explique comment vérifier que ton ESP32 est bien détecté par Linux et apparaît correctement comme périphérique **tty**. Les étapes ci-dessous couvrent la détection, l’identification du chipset USB, les permissions et un test de communication.\n\n---\n\n## 1. Regarder les nouveaux périphériques avec dmesg\nBrancher l’ESP32 en USB, puis lancer :\n\n```bash\ndmesg -w\n```\n\nOn verra apparaître des lignes comme :\n\n```\nusb 1-1: ch341-uart converter now attached to ttyUSB0\n```\n\nou :\n\n```\ncp210x converter now attached to ttyUSB1\n```\n\n**Le port sera généralement `ttyUSB0` ou `ttyUSB1`** (parfois `ttyACM0` pour certaines cartes).\n\n---\n\n## 2. Lister les ports USB série disponibles\n```bash\nls /dev/ttyUSB*\n```\n\nou :\n\n```bash\nls /dev/ttyACM*\n```\n\nS’il y en a un, ton ESP32 est reconnu.\n\n---\n\n## 3. Identifier le type d’interface (CH340, CP2102, FT232)\nOn pourra voir quel chipset USB est détecté :\n\n```bash\nlsusb\n```\n\nExemples typiques :\n\n- **1a86:7523** → CH340\n- **10c4:ea60** → CP2102/CP210x\n- **0403:6001** → FTDI FT232\n\nCela confirme que ton câble fonctionne et que le driver est chargé.\n\n---\n\n## 4. Voir si votre utilisateur a les permissions\nOn pourra voir `/dev/ttyUSB0` mais on ne peut pas l’utiliser, vérifier que votre utilisateur ait le groupe `dialout` :\n\n```bash\ngroups\n```\n\nSi le groupe **dialout** n’est pas dans la liste :\n\n```bash\nsudo usermod -a -G dialout $USER\n```\n\npuis **redémarrer la session** et vérifier de nouveau avec la commande `groups`. Si nécessaire, redémarrer l'ordinateur.\n\n---\n\n## 5. Vérifier la connexion\nSi votre ESP32 est connecté sur `/dev/ttyUSB0`, vous pouvez le tester via `esptool` :\n\n esptool -p /dev/ttyUSB0 flash-id\n\nExemple de sortie attendue :\n\n```\nesptool v5.1.0\nConnected to ESP32 on /dev/ttyUSB0:\nChip type: ESP32-D0WDQ6 (revision v1.0)\nFeatures: Wi-Fi, BT, Dual Core + LP Core, 240MHz, Vref calibration in eFuse, Coding Scheme None\nCrystal frequency: 40MHz\nMAC: c4:4f:33:75:8c:9d\n\nStub flasher running.\n\nFlash Memory Information:\n# =============\nManufacturer: 5e\nDevice: 4016\nDetected flash size: 4MB\nFlash voltage set by a strapping pin: 3.3V\n\nHard resetting via RTS pin...\n```\n\nSi ce rapport s’affiche correctement, la communication entre le PC et l’ESP32 est opérationnelle.","featured":false,"tags":[]} \ No newline at end of file diff --git a/_cache/articles/663b0638-10fd-4549-8ff5-aebb3285388f.json b/_cache/articles/663b0638-10fd-4549-8ff5-aebb3285388f.json deleted file mode 100644 index 5a12396..0000000 --- a/_cache/articles/663b0638-10fd-4549-8ff5-aebb3285388f.json +++ /dev/null @@ -1 +0,0 @@ -{"uuid":"663b0638-10fd-4549-8ff5-aebb3285388f","slug":"la-5g-promesse-derives-et-realite","title":"La 5G : promesse, dérivés et réalité","author":"cedric@abonnel.fr","published":true,"published_at":"2025-11-05 08:45:44","created_at":"2025-11-05 08:45:44","updated_at":"2025-11-05 08:45:44","revisions":[],"cover":"","category":"télécom","content":"# La 5G : promesse, dérivés et réalité\n\n### Technologie et promesse\n\nLa **5G** est présentée comme la révolution ultime des réseaux mobiles. Débits massifs, latence ultra-faible, support d’un nombre astronomique d’objets connectés… mais derrière le discours marketing se cache une réalité plus nuancée :\n\n* **Débits théoriques** : 100 Mbit/s en usage réel, jusqu’à 10 Gbit/s sur bandes millimétriques (mmWave) et zones ultra-denses.\n* **Latence** : 1–10 ms, permettant cloud gaming, véhicules autonomes et IoT industriel.\n* **Architecture** :\n\n * **NSA (Non Standalone)** : la 5G repose sur la 4G pour le contrôle, 5G uniquement pour les débits.\n * **SA (Standalone)** : réseau 5G indépendant avec cœur 5GC, latence minimale et optimisation maximale.\n* **Fréquences** : de 700 MHz (longue portée) à 26 GHz (mmWave, très haut débit mais faible portée).\n\n---\n\n### 5G+ : le “plus” marketing\n\n* La **5G+** n’est pas une nouvelle génération mais une **dénomination commerciale** pour la 5G sur fréquences millimétriques ou avec agrégation de bandes.\n* Objectif : mettre en avant des débits spectaculaires (souvent >1 Gbit/s) sur des zones très localisées.\n* Limitation : portée extrêmement courte et sensibilité aux obstacles. Les débits annoncés ne sont atteints que pour une minorité d’abonnés.\n\n---\n\n### VoLTE : la voix sur LTE\n\n* **VoLTE (Voice over LTE)** permet de passer les appels vocaux via le réseau 4G au lieu de basculer sur la 2G/3G.\n* Avantages : meilleure qualité sonore, connexion plus rapide, possibilité de passer simultanément un appel et utiliser Internet.\n* Limitation : nécessite un smartphone compatible et un réseau correctement configuré. Dans certaines zones, les abonnés passent encore par la 3G pour la voix, même avec un smartphone récent.\n\n---\n\n### DSS : Dynamic Spectrum Sharing\n\n* **DSS** permet de **partager dynamiquement le spectre** entre 4G et 5G sur les mêmes fréquences.\n* Avantages pour l’opérateur : déploiement rapide de la 5G sans attendre la libération complète du spectre.\n* Limitation : la 4G existante peut être légèrement dégradée, ce qui reproduit l’effet déjà observé avec la 3G bridée pour forcer la migration.\n\n---\n\n### Schéma suggéré : architecture 4G vs 5G\n\n```mermaid\nflowchart LR\n subgraph 4G\n A[UE - Mobile] --> B[eNodeB]\n B --> C[EPC - Core Network]\n end\n \n subgraph 5G\n D[UE - Mobile] --> E[gNodeB]\n E --> F[5GC - Core Network]\n end\n```\n\n* La 5G remplace eNodeB/EPC par gNodeB/5GC, réduisant la latence et augmentant l’efficacité, mais l’accès réel à ces débits reste limité selon la fréquence et la zone.\n\n---\n\nLa 5G, avec ses variantes **5G+, VoLTE, DSS**, illustre la complexité croissante du paysage mobile :\n\n1. **Multiplicité des normes et labels** : 4G, 4G+, VoLTE, 5G, 5G+, DSS… pour l’utilisateur, il devient presque impossible de savoir ce qu’il utilise réellement.\n2. **Marketing vs réalité** : les débits annoncés sont rarement atteints, et certaines zones restent sur une 4G bridée pour préparer la migration.\n3. **Stratégie opérateur** : comme pour la 3G et la 4G, la pression sur l’utilisateur est subtile : dégrader légèrement les anciens réseaux, mettre en avant les nouvelles performances, et pousser à migrer progressivement.\n\n> La “révolution 5G” existe techniquement, mais pour le consommateur moyen, elle se traduit souvent par une interface confuse et des débits très variables. Les promesses marketing et la réalité économique du déploiement ne coïncident pas toujours.","featured":false,"files_meta":[],"external_links":[],"tags":[]} \ No newline at end of file diff --git a/_cache/articles/68a07aea-8f12-4b6a-802a-03af83a09ad8.json b/_cache/articles/68a07aea-8f12-4b6a-802a-03af83a09ad8.json deleted file mode 100644 index f624352..0000000 --- a/_cache/articles/68a07aea-8f12-4b6a-802a-03af83a09ad8.json +++ /dev/null @@ -1 +0,0 @@ -{"uuid":"68a07aea-8f12-4b6a-802a-03af83a09ad8","slug":"adaptateur-usb-vers-esp-01-activer-le-mode-programmation","title":"Adaptateur USB vers ESP-01 : activer le mode programmation","author":"cedric@abonnel.fr","published":true,"published_at":"2020-12-13 07:44","created_at":"2020-12-13 07:44:45","updated_at":"2026-05-13 18:21:06","revisions":[{"n":1,"date":"2026-05-13 18:18:33","comment":"Titre modifié, contenu modifié","title":"Adaptateur USB vers ESP-01"},{"n":2,"date":"2026-05-13 18:21:06","comment":"Contenu modifié","title":"Adaptateur USB vers ESP-01 : activer le mode programmation"}],"cover":"","files_meta":{"20201207-233302.png":{"author":"","source_url":""},"20201212-134043.png":{"author":"","source_url":""},"20201212-173952.png":{"author":"","source_url":""},"20201212-191417.png":{"author":"","source_url":""},"20201213-083952.png":{"author":"","source_url":""},"20201213-084414.png":{"author":"","source_url":""}},"external_links":[],"seo_title":"","seo_description":"","og_image":"","category":"Électronique","content":"# Adaptateur USB vers ESP-01 : activer le mode programmation\n\n![Adaptateur USB vers ESP-01](20201207-233302.png)\n\n## Présentation\n\nL'[adaptateur USB vers ESP-01 avec puce CH340](https://amzn.to/3oHZ1Eo) permet de connecter facilement un module ESP-01 (basé sur le microcontrôleur ESP8266) au port USB d'un ordinateur. Il intègre également un régulateur de tension 3,3 V, indispensable pour alimenter correctement l'ESP-01.\n\nCet adaptateur sert à deux usages principaux :\n\n- **dialoguer avec l'ESP-01** via des commandes AT (commandes Hayes) afin de récupérer des informations ou de piloter le module ;\n- **téléverser un firmware personnalisé** sur l'ESP8266, par exemple depuis l'IDE Arduino.\n\n> Lien d'achat : [adaptateur USB vers ESP-01 avec puce CH340](https://amzn.to/3oHZ1Eo)\n\n## Le problème : passer en mode programmation\n\nPar défaut, l'ESP-01 démarre en **mode UART** (communication série), qui convient pour échanger des commandes AT mais ne permet pas de flasher un nouveau firmware. Pour téléverser un programme, il faut basculer le module en **mode FLASH** (également appelé **mode programmation**).\n\nCette bascule n'est pas logicielle : elle se fait **électriquement**, en forçant la broche **GPIO0** à la masse (**GND**) au moment du démarrage du module.\n\nDe nombreux adaptateurs USB vers ESP-01 d'entrée de gamme ne prévoient pas de bouton ou de switch pour cette opération. Sans modification, toute tentative de téléversement échoue avec une erreur de ce type dans l'IDE Arduino :\n\n```\nesptool.py v2.8\nSerial port /dev/ttyUSB0\nConnecting........_....._....._....._....._....._....._....____\n...\nesptool.FatalError: Failed to connect to ESP8266: Timed out waiting for packet header\n```\n\n![Erreur lors du téléversement vers ESP-01](20201212-191417.png)\n\nLe message clé est `Failed to connect to ESP8266: Timed out waiting for packet header` : `esptool.py` n'a pas réussi à mettre le module en mode flash et abandonne après plusieurs tentatives.\n\n## La solution : modifier l'adaptateur\n\nPour rendre l'adaptateur compatible avec le mode programmation, il suffit d'ajouter un moyen de relier **GPIO0** à **GND** à la demande. Rappel du brochage de l'ESP-01 :\n\n![Brochage de l'ESP-01](20201212-134043.png)\n\n### Matériel nécessaire\n\n- un fer à souder et de l'étain ;\n- deux fils fins ;\n- une barrette de deux broches au pas de 2,54 mm ;\n- un jumper ;\n- éventuellement un pistolet à colle pour rigidifier l'ensemble.\n\n### Procédure\n\n1. Souder un premier fil sur la broche **GPIO0** (côté adaptateur).\n2. Souder un second fil sur une broche **GND** (côté adaptateur).\n3. Relier l'autre extrémité de chaque fil à une broche de la barrette, de manière à pouvoir court-circuiter GPIO0 et GND en plaçant simplement un jumper.\n4. Fixer la barrette avec une goutte de colle chaude pour éviter que les fils ne tirent sur les soudures.\n\n![Adaptateur USB vers ESP-01 modifié et collé](20201213-084414.png)\n\n### Utilisation\n\n- **Pour téléverser un programme** : placer le jumper (GPIO0 relié à GND), insérer l'adaptateur dans le port USB, puis lancer le téléversement depuis l'IDE Arduino.\n- **Pour utiliser le module normalement** (commandes AT ou exécution du firmware) : retirer le jumper, puis débrancher et rebrancher l'adaptateur pour redémarrer l'ESP-01 dans son mode standard.\n\n![Téléversement réussi](20201213-083952.png)\n\n## À retenir\n\nLe téléversement d'un nouveau firmware **écrase le code précédemment chargé**, y compris le firmware AT d'origine. Pour retrouver les commandes AT après avoir flashé un programme personnalisé, il faudra reflasher un firmware AT officiel d'Espressif.\n```\n","featured":false,"tags":[]} \ No newline at end of file diff --git a/_cache/articles/6f2639a5-58ed-4102-a6a2-0acbecf01de5.json b/_cache/articles/6f2639a5-58ed-4102-a6a2-0acbecf01de5.json deleted file mode 100644 index e7529ac..0000000 --- a/_cache/articles/6f2639a5-58ed-4102-a6a2-0acbecf01de5.json +++ /dev/null @@ -1 +0,0 @@ -{"uuid":"6f2639a5-58ed-4102-a6a2-0acbecf01de5","slug":"esp8266-commandes-at","title":"ESP8266 : prise en main des commandes AT","author":"cedric@abonnel.fr","published":true,"published_at":"2020-12-13 08:51","created_at":"2020-12-13 08:51:55","updated_at":"2026-05-13 18:23:54","revisions":[{"n":1,"date":"2026-05-13 18:23:54","comment":"Contenu modifié","title":"ESP8266 : prise en main des commandes AT"}],"cover":"","files_meta":[],"external_links":[],"seo_title":"","seo_description":"","og_image":"","category":"Électronique","content":"# ESP8266 : prise en main des commandes AT\n\n## Présentation\n\nL'**ESP8266** est un microcontrôleur Wi-Fi développé par Espressif. Lorsqu'il sort d'usine, ou lorsqu'il est flashé avec le firmware AT officiel d'Espressif, il accepte un jeu d'instructions textuelles appelées **commandes AT** (ou **commandes Hayes**, du nom du fabricant de modems qui les a popularisées dans les années 1980).\n\nLe module **ESP-01**, le plus répandu pour découvrir l'ESP8266, est généralement livré avec ce firmware AT préchargé. Il est donc utilisable immédiatement, sans programmation, simplement en lui envoyant des commandes texte sur sa liaison série.\n\n> **Prérequis matériel** : un ESP-01 connecté à un PC via un [adaptateur USB-série](https://amzn.to/3oHZ1Eo), et un terminal série (moniteur série de l'IDE Arduino, `minicom`, `screen`, PuTTY…) configuré à 115200 bauds avec fin de ligne **CR+LF**.\n\n> **Note sur les versions** : la syntaxe et les codes retour des commandes AT varient selon la version du firmware. Les exemples ci-dessous correspondent à un firmware AT v1.x typique sur ESP-01. Pour les firmwares plus récents (AT v2.x sur ESP32), certaines commandes prennent des paramètres supplémentaires.\n\n## Travaux pratiques\n\nL'enchaînement ci-dessous permet de mettre l'ESP-01 sur un réseau Wi-Fi, puis de le transformer en serveur HTTP minimaliste. Chaque commande est envoyée depuis le terminal série ; les lignes préfixées par `->` représentent la réponse du module.\n\n### 1. Vérifier le mode Wi-Fi courant\n\n```\nAT+CWMODE?\n-> +CWMODE:1\n-> OK\n```\n\nLe module répond avec un chiffre indiquant son mode courant (voir glossaire plus bas).\n\n### 2. Passer en mode dual (client + point d'accès)\n\n```\nAT+CWMODE=3\n-> OK\n```\n\nLe mode 3 active simultanément le mode station (le module se connecte à un Wi-Fi existant) et le mode AP (le module expose son propre point d'accès). C'est le mode le plus polyvalent pour expérimenter.\n\n### 3. Se connecter à un réseau Wi-Fi\n\n```\nAT+CWJAP=\"ACEGRP_NET\",\"motdepasse\"\n-> WIFI CONNECTED\n-> WIFI GOT IP\n-> OK\n```\n\nTrois événements sont remontés successivement :\n\n- **WIFI CONNECTED** : association réussie au point d'accès ;\n- **WIFI GOT IP** : adresse IP obtenue via DHCP ;\n- **OK** : la commande est terminée avec succès.\n\n### 4. Lister les adresses IP et MAC du module\n\n```\nAT+CIFSR\n-> +CIFSR:APIP,\"192.168.4.1\"\n-> +CIFSR:APMAC,\"1a:fe:34:9a:36:13\"\n-> +CIFSR:STAIP,\"192.168.101.20\"\n-> +CIFSR:STAMAC,\"18:fe:34:9a:36:13\"\n-> OK\n```\n\nEn mode dual, le module possède **deux interfaces réseau** :\n\n- **AP** (point d'accès) : adresse fixe `192.168.4.1` par défaut, sur laquelle se connectent les clients du Wi-Fi exposé par l'ESP ;\n- **STA** (station/client) : adresse attribuée par le routeur du réseau auquel l'ESP s'est connecté.\n\n### 5. Activer les connexions multiples\n\n```\nAT+CIPMUX=1\n-> OK\n```\n\nPar défaut, l'ESP n'accepte qu'une seule connexion TCP simultanée. Le mode multi-connexion est obligatoire pour faire fonctionner le module en serveur (étape suivante).\n\n### 6. Démarrer un serveur TCP sur le port 80\n\n```\nAT+CIPSERVER=1,80\n-> OK\n```\n\nLe module écoute désormais sur le port 80 de son adresse STA. Un simple navigateur pointé sur `http://192.168.101.20/` (l'adresse retournée par `AT+CIFSR`) déclenche une connexion HTTP.\n\n### 7. Observer une requête entrante\n\nLorsqu'un client se connecte, l'ESP recopie sur la liaison série l'événement de connexion, puis la requête HTTP brute, et enfin la fermeture de la connexion :\n\n```\n0,CONNECT\n\n+IPD,0,341:GET / HTTP/1.1\nHost: 192.168.101.20\nUser-Agent: Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:83.0) Gecko/20100101 Firefox/83.0\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8\nAccept-Language: fr,fr-FR;q=0.5\nAccept-Encoding: gzip, deflate\nDNT: 1\nConnection: keep-alive\nUpgrade-Insecure-Requests: 1\n\n0,CLOSED\n```\n\nLecture :\n\n- `0,CONNECT` : un client vient de s'associer ; `0` est l'identifiant de connexion (link ID), utile en mode multi-connexion ;\n- `+IPD,0,341:` : l'ESP a reçu **341 octets** sur la connexion `0` ; ces octets suivent immédiatement (ici, l'en-tête HTTP envoyé par Firefox) ;\n- `0,CLOSED` : le client a fermé la connexion (ou un timeout est intervenu).\n\nÀ ce stade, l'ESP ne répond rien au client : il faut explicitement envoyer une réponse avec `AT+CIPSEND` (voir glossaire). Le navigateur affichera donc une page vide ou un message d'erreur.\n\n### Pour aller plus loin : répondre au client\n\nPour renvoyer une page HTML minimale au client `0` :\n\n```\nAT+CIPSEND=0,44\n>HTTP/1.1 200 OK\n\nBonjour depuis l'ESP\n```\n\nLe module affiche `>` et attend exactement le nombre d'octets annoncé, puis envoie le tout sur la connexion `0`. Il faut ensuite fermer la connexion avec :\n\n```\nAT+CIPCLOSE=0\n```\n\n---\n\n## Glossaire des commandes AT\n\n### Conventions\n\nTrois formes coexistent pour la plupart des commandes :\n\n| Forme | Syntaxe | Rôle |\n|---|---|---|\n| Interrogation | `AT+CMD?` | Lire la valeur courante |\n| Test | `AT+CMD=?` | Lister les valeurs autorisées |\n| Affectation | `AT+CMD=` | Modifier la valeur |\n\nLes chaînes de caractères (SSID, mot de passe…) sont toujours encadrées par des guillemets droits.\n\n### Commandes Wi-Fi\n\n#### `AT+CWMODE` — Mode de fonctionnement Wi-Fi\n\n```\nAT+CWMODE? # lire le mode courant\nAT+CWMODE= # définir le mode\n```\n\nValeurs de `` :\n\n| Valeur | Mode | Description |\n|---|---|---|\n| 1 | STA | Station/client : le module se connecte à un Wi-Fi existant |\n| 2 | AP | Point d'accès : le module expose son propre Wi-Fi |\n| 3 | STA+AP | Mode dual : les deux à la fois |\n\nExemple :\n\n```\nAT+CWMODE?\n-> +CWMODE:1\n-> OK\n```\n\n#### `AT+CWLAP` — Lister les points d'accès visibles\n\n```\nAT+CWLAP\n```\n\nRetourne une ligne par réseau détecté, sous la forme :\n\n```\n+CWLAP:(,\"\",,\"\",)\n```\n\n| Champ | Signification |\n|---|---|\n| `ecn` | Chiffrement : `0` ouvert, `1` WEP, `2` WPA-PSK, `3` WPA2-PSK, `4` WPA/WPA2-PSK |\n| `ssid` | Nom du réseau |\n| `rssi` | Puissance du signal en dBm (plus la valeur est proche de 0, plus le signal est fort) |\n| `mac` | Adresse MAC du point d'accès (BSSID) |\n| `canal` | Canal Wi-Fi (1 à 13 en Europe sur 2,4 GHz) |\n\nExemple :\n\n```\nAT+CWLAP\n-> +CWLAP:(3,\"ACEGRP_NET-F2\",-22,\"f8:9a:78:9b:67:05\",4)\n-> +CWLAP:(3,\"ACEGRP_NET\",-68,\"50:c7:bf:8c:4f:e9\",6)\n-> +CWLAP:(3,\"ACEGRP_NET\",-82,\"e0:24:81:49:14:eb\",7)\n-> OK\n```\n\n**Prérequis** : `AT+CWMODE` doit inclure le mode station (1 ou 3).\n\n#### `AT+CWJAP` — Se connecter à un point d'accès\n\n```\nAT+CWJAP=\"\",\"\"\n```\n\nCodes d'erreur retournés en cas d'échec via `+CWJAP:` :\n\n| Code | Signification |\n|---|---|\n| 1 | Délai de connexion dépassé |\n| 2 | Mot de passe incorrect |\n| 3 | SSID introuvable |\n| 4 | Échec de connexion (autre) |\n\nExemple d'échec :\n\n```\nAT+CWJAP=\"ACEGRP_NET\",\"mauvais_mdp\"\n-> WIFI DISCONNECT\n-> +CWJAP:1\n-> FAIL\n```\n\nExemple de réussite :\n\n```\nAT+CWJAP=\"ACEGRP_NET\",\"motdepasse\"\n-> WIFI CONNECTED\n-> WIFI GOT IP\n-> OK\n```\n\n#### `AT+CWQAP` — Se déconnecter du point d'accès\n\n```\nAT+CWQAP\n-> OK\n```\n\nÀ ne pas confondre avec une commande de sauvegarde : `CWQAP` signifie *Quit AP*, c'est-à-dire **déconnexion**. Les paramètres de connexion (SSID, mot de passe) sont en revanche **automatiquement mémorisés en flash** par les commandes `CWJAP` et `CWMODE` dans les versions classiques du firmware AT — le module se reconnectera donc au démarrage suivant.\n\n#### `AT+CIFSR` — Adresses IP et MAC locales\n\n```\nAT+CIFSR\n```\n\nRenvoie les adresses IP et MAC du module pour chaque interface active :\n\n- `APIP` / `APMAC` : interface point d'accès (toujours `192.168.4.1` par défaut) ;\n- `STAIP` / `STAMAC` : interface station (attribuée par le DHCP du réseau rejoint).\n\nEn mode `CWMODE=1`, seule la partie STA est retournée ; en mode 2, seule la partie AP.\n\n### Commandes TCP/IP\n\n#### `AT+CIPMUX` — Activer les connexions multiples\n\n```\nAT+CIPMUX=\n```\n\n- `0` : connexion unique (mode par défaut) ;\n- `1` : jusqu'à 5 connexions simultanées, chacune identifiée par un *link ID* de 0 à 4.\n\n**Prérequis pour passer en mode 1** : aucune connexion ne doit être active, et le module ne doit pas déjà être en mode serveur.\n\n#### `AT+CIPSERVER` — Démarrer un serveur TCP\n\n```\nAT+CIPSERVER=[,]\n```\n\n- `mode` : `1` pour démarrer, `0` pour arrêter ;\n- `port` : port d'écoute, optionnel (par défaut **333**).\n\n**Prérequis** : `AT+CIPMUX=1` doit avoir été exécuté au préalable.\n\nAprès un arrêt (`mode=0`), un redémarrage du module est nécessaire (`AT+RST`) pour libérer complètement le port.\n\n#### `AT+CIPSEND` — Envoyer des données sur une connexion\n\n```\nAT+CIPSEND=, # en mode multi-connexion (CIPMUX=1)\nAT+CIPSEND= # en mode connexion unique\n```\n\nLe module affiche un prompt `>` et attend exactement `` octets, puis transmet le bloc au client. Indispensable pour répondre à une requête HTTP entrante.\n\n#### `AT+CIPCLOSE` — Fermer une connexion\n\n```\nAT+CIPCLOSE= # multi-connexion\nAT+CIPCLOSE # connexion unique\n```\n\n### Commandes générales utiles\n\n| Commande | Rôle |\n|---|---|\n| `AT` | Test de présence du module (doit répondre `OK`) |\n| `AT+RST` | Redémarrer le module |\n| `AT+GMR` | Afficher la version du firmware AT |\n| `AT+UART_CUR=,...` | Changer le débit série (non persistant) |\n| `ATE0` / `ATE1` | Désactiver / activer l'écho des commandes |\n\n---\n\n## Récapitulatif : déclarer un serveur HTTP minimal\n\nSéquence complète depuis un ESP-01 vierge :\n\n```\nAT+CWMODE=3\nAT+CWJAP=\"\",\"\"\nAT+CIFSR # noter l'adresse STAIP\nAT+CIPMUX=1\nAT+CIPSERVER=1,80\n```\n\nÀ partir de cet instant, toute connexion entrante sur `http://:80/` est remontée sur le port série sous forme d'événements `+IPD`, à charge pour le programme côté PC (ou pour un firmware personnalisé) de les analyser et de répondre via `AT+CIPSEND`.\n\n## Limites du firmware AT\n\nLe firmware AT est pratique pour découvrir et tester l'ESP8266, mais il montre vite ses limites :\n\n- **latence** importante (chaque commande passe par le port série) ;\n- **pas de TLS** correct dans les anciennes versions ;\n- **complexité** pour gérer plusieurs clients simultanés ;\n- **dépendance** à un hôte qui pilote l'ESP en permanence.\n\nPour des projets plus aboutis, il est préférable de flasher l'ESP avec un firmware personnalisé (Arduino, ESP-IDF, MicroPython, Tasmota, ESPHome…) qui exécute directement la logique applicative sur le microcontrôleur, sans intermédiaire série.\n```\n","featured":false,"tags":[]} \ No newline at end of file diff --git a/_cache/articles/70b5f213-db76-4072-afb6-f876fe67aaf8.json b/_cache/articles/70b5f213-db76-4072-afb6-f876fe67aaf8.json deleted file mode 100644 index 601283a..0000000 --- a/_cache/articles/70b5f213-db76-4072-afb6-f876fe67aaf8.json +++ /dev/null @@ -1 +0,0 @@ -{"uuid":"70b5f213-db76-4072-afb6-f876fe67aaf8","slug":"non-le-compteur-linky-ne-reconnait-pas-les-voitures-electriques","title":"Non, le compteur Linky n'est pas conçu pour repérer votre voiture électrique","author":"cedric@abonnel.fr","published":true,"published_at":"2025-12-06 06:36","created_at":"2025-12-06 06:36:25","updated_at":"2026-05-12 01:32:46","revisions":[{"n":1,"date":"2026-05-12 01:27:37","comment":"","title":"Non, le compteur Linky n'est pas conçu pour repérer votre voiture électrique"},{"n":2,"date":"2026-05-12 01:29:28","comment":"","title":"Non, le compteur Linky n'est pas conçu pour repérer votre voiture électrique"},{"n":3,"date":"2026-05-12 01:30:49","comment":"","title":"Non, le compteur Linky n'est pas conçu pour repérer votre voiture électrique"},{"n":4,"date":"2026-05-12 01:32:08","comment":"","title":"Non, le compteur Linky n'est pas conçu pour repérer votre voiture électrique"},{"n":5,"date":"2026-05-12 01:32:46","comment":"","title":"Non, le compteur Linky n'est pas conçu pour repérer votre voiture électrique"}],"cover":"cover.jpg","files_meta":{"cover.jpg":{"author":"","source_url":"https://www.letribunaldunet.fr/wp-content/uploads/2025/09/Maison-moderne-avec-panneaux-solaire-et-voiture-electrique-762x508.jpg"},"18917a438b4d07f9-71431.jpg":{"author":"","source_url":""}},"external_links":[],"seo_title":"","seo_description":"","og_image":"","category":"actualité","content":"# Non, le compteur Linky n'est pas conçu pour repérer votre voiture électrique\n\n*Démêlons le vrai du faux sur une affirmation qui revient régulièrement dans les débats autour de la fiscalité des véhicules à batterie.*\n\nDepuis plusieurs mois, à mesure que s'intensifient les discussions sur une éventuelle taxe kilométrique visant les voitures électriques, une affirmation refait surface avec insistance sur les réseaux sociaux et dans certains articles : *« Le compteur Linky a été conçu pour reconnaître la connexion d'une voiture à batterie. »* La formule est efficace, presque inquiétante, et elle nourrit l'idée d'un État qui aurait anticipé depuis longtemps la surveillance des automobilistes électriques via leur compteur domestique.\n\nLe problème, c'est que cette affirmation est tout simplement fausse. Ou plus exactement : elle confond grossièrement ce que Linky mesure réellement et ce qu'on lui prête comme capacités. Pour comprendre pourquoi, il faut revenir aux fondamentaux de ce qu'est un compteur électrique, même \"intelligent\".\n\n## Ce que Linky mesure réellement\n\nUn compteur Linky, c'est avant tout un instrument de mesure. Il enregistre la consommation électrique globale du logement, en temps quasi réel, avec une précision bien supérieure à celle des anciens compteurs électromécaniques. Concrètement, il relève la puissance instantanée appelée par l'ensemble de l'installation, l'intensité du courant qui circule sur les phases, ainsi que quelques paramètres plus techniques comme les harmoniques — des perturbations du signal qui renseignent sur la qualité du courant.\n\nTout cela est agrégé. Linky voit *un total*, pas une ventilation appareil par appareil. Quand votre four à 3 kW se met en route, le compteur enregistre une montée de 3 kW. Quand une wallbox commence à charger une voiture à 3,7 kW, il enregistre une montée de 3,7 kW. Du point de vue de Linky, ces deux événements sont parfaitement indiscernables. Il n'a aucun moyen de savoir si l'électricité part vers une plaque de cuisson, un chauffe-eau, un radiateur ou une Tesla branchée au garage.\n\nC'est une limitation fondamentale, pas un oubli de conception : un compteur de tableau électrique se situe en amont de tout, sur l'arrivée générale. Il voit ce qui entre dans la maison, point final.\n\n## Ce que Linky ne sait pas faire — et ne saura jamais faire en l'état\n\nContrairement à ce que certains articles laissent entendre, Linky n'a aucune capacité à identifier la nature des appareils qui se branchent. Il ne reconnaît pas une voiture électrique, ne lit pas les protocoles de communication entre une borne et un véhicule (Type 2, CCS, CHAdeMO), ne dialogue ni avec le chargeur embarqué ni avec le BMS — le système de gestion de batterie qui pilote la charge côté voiture. Aucune de ces fonctions ne figure dans ses spécifications techniques, qui sont publiques et consultables.\n\nLinky n'est ni une prise connectée capable de profiler ce qui s'y branche, ni un analyseur de charge avancé, ni un dispositif de reconnaissance d'appareils par signature. C'est un compteur de facturation, conçu pour relever votre consommation à distance et permettre à votre fournisseur d'affiner les offres tarifaires (heures creuses dynamiques, par exemple). Tout le reste relève du fantasme ou de la confusion.\n\n## D'où vient cette idée alors ?\n\nLa rumeur n'est pas née de nulle part. Elle s'enracine dans deux éléments réels, mais largement mal interprétés.\n\n**Le premier, c'est l'existence de la TIC, la « télé-information client ».** Il s'agit d'une interface physique présente sur le compteur Linky, qui diffuse en continu certaines données : puissance souscrite, puissance instantanée appelée, index de consommation, période tarifaire en cours. Cette interface est *sortante* : elle envoie des informations vers l'extérieur, vers des appareils domestiques compatibles, mais elle ne reçoit rien en retour.\n\nCertaines wallbox modernes sont capables de se brancher sur cette TIC pour lire en direct la puissance déjà consommée dans le logement. Elles ajustent alors automatiquement la puissance de charge de la voiture pour ne pas faire disjoncter l'installation : si quelqu'un allume le four pendant que la voiture charge, la borne réduit son appel de courant. C'est une fonction très utile, mais elle fonctionne dans un seul sens. **La wallbox lit Linky. Linky ne lit pas la wallbox, et encore moins la voiture.** Beaucoup de gens, en entendant parler de wallbox \"communiquant avec Linky\", imaginent un dialogue bidirectionnel qui n'existe pas.\n\n**Le second élément, c'est l'arrivée du débat sur une taxe kilométrique.** Avec la baisse des recettes de TICPE liée à l'électrification du parc automobile, plusieurs think tanks et rapports parlementaires ont effectivement évoqué l'idée de taxer les kilomètres parcourus en VE, et certains ont mentionné Linky parmi les outils techniques *envisageables*. De cette spéculation prospective, une partie du public a tiré la conclusion que le compteur était déjà équipé pour le faire. Or il y a un gouffre entre « on pourrait peut-être un jour utiliser Linky comme brique d'un dispositif fiscal » et « Linky a été conçu pour ça ». Le premier est une hypothèse politique discutable ; le second est un raccourci qui ne correspond à aucune réalité technique.\n\n## Et techniquement, ce serait possible un jour ?\n\nC'est la question intéressante, et la réponse mérite plus de nuance qu'un simple oui ou non.\n\nIl existe effectivement un champ de recherche actif, baptisé **NILM** pour *Non-Intrusive Load Monitoring*. L'idée : analyser la courbe de consommation globale d'un logement pour en déduire, par traitement du signal et apprentissage automatique, quels appareils s'y trouvent et quand ils fonctionnent. Chaque appareil aurait, en théorie, une \"signature électrique\" reconnaissable — un profil d'appel de courant au démarrage, un comportement en régime, etc.\n\nEn pratique, l'exercice est très difficile, et il l'est particulièrement pour la recharge d'un véhicule électrique. Une borne en charge se comporte comme une charge quasi constante de plusieurs kilowatts pendant plusieurs heures. C'est une signature… qui ressemble énormément à celle d'un chauffe-eau, d'un convecteur, d'un sèche-linge en cycle long ou d'un radiateur à inertie. Sans cadence de fonctionnement caractéristique, sans pics distinctifs, sans cycles courts, il n'y a rien de très spécifique à exploiter. Identifier de manière fiable qu'on a affaire à une voiture *et pas* à un autre appareil de puissance similaire reste un problème ouvert dans la littérature scientifique.\n\nMais surtout, et c'est le point essentiel : **Linky n'embarque aucun de ces algorithmes**. Il transmet des données de comptage agrégées à Enedis, qui les utilise pour la facturation et la gestion du réseau. Enedis n'a ni la mission, ni le droit légal, ni l'infrastructure pour analyser appareil par appareil les usages domestiques de ses clients. Le cadre réglementaire français, notamment via la CNIL, encadre strictement ce qui peut être fait des données de consommation, et toute exploitation plus fine — même la courbe de charge à pas fin — nécessite le consentement explicite de l'abonné.\n\n## Ce qu'il faut retenir\n\nLe compteur Linky mesure votre consommation globale, c'est vrai. Il permet à certaines bornes de recharge de moduler intelligemment leur puissance via la TIC, c'est vrai aussi. Mais il ne reconnaît pas, n'identifie pas et ne distingue pas une voiture électrique des autres appareils du logement. Cette capacité n'existe ni dans son matériel, ni dans son logiciel, ni dans les données qu'il transmet à Enedis.\n\nL'affirmation selon laquelle « Linky a été conçu pour reconnaître la connexion d'une voiture à batterie » mélange donc trois choses très différentes : des capacités réelles mais limitées (mesure de puissance, interface TIC sortante), des usages techniques existants côté wallbox, et des hypothèses politiques sur de futurs dispositifs fiscaux. De cette confusion naît une rumeur frappante, mais infondée.\n\nLe débat sur la fiscalité des véhicules électriques est légitime et important. Il mérite mieux que des affirmations qui n'ont pas de base technique.","featured":false,"tags":[]} \ No newline at end of file diff --git a/_cache/articles/72d50c35-9863-400b-8c5d-470c74bf2bd6.json b/_cache/articles/72d50c35-9863-400b-8c5d-470c74bf2bd6.json deleted file mode 100644 index 564c218..0000000 --- a/_cache/articles/72d50c35-9863-400b-8c5d-470c74bf2bd6.json +++ /dev/null @@ -1 +0,0 @@ -{"uuid":"72d50c35-9863-400b-8c5d-470c74bf2bd6","slug":"dimensionnement-des-cables-electriques-cuivre-230-v-monophase","title":"Dimensionnement des câbles électriques (cuivre, 230 V monophasé)","author":"cedric@abonnel.fr","published":true,"published_at":"2025-11-09 21:48","created_at":"2025-11-09 21:48:35","updated_at":"2026-05-12 17:00:04","revisions":[{"n":1,"date":"2026-05-12 16:55:20","comment":"Titre modifié, contenu modifié","title":"Tableau section câble / intensité / puissance (230 V monophasé, cuivre)"}],"cover":"cover.jpg","files_meta":{"cover.jpg":{"author":"","source_url":"https://www.bellemaison32.com/wp-content/uploads/2023/08/cable-electrique.jpg"}},"external_links":[],"seo_title":"","seo_description":"","og_image":"https://varlog.a5l.fr/file?uuid=72d50c35-9863-400b-8c5d-470c74bf2bd6&name=cover.jpg","category":"travaux","content":"# Dimensionnement des câbles électriques (cuivre, 230 V monophasé)\n\nDimensionnement des câbles électriques (cuivre, 230 V monophasé)\n\nCe document présente deux approches complémentaires pour choisir la section d'un câble électrique :\n\n1. selon le **courant admissible** (échauffement du conducteur) ;\n2. selon la **chute de tension** (qui dépend également de la longueur).\n\nLes valeurs ci-dessous sont indicatives, données pour des câbles en **cuivre**, en **pose domestique** (encastrée ou en air libre), dans des conditions normales. Elles peuvent varier en fonction du mode de pose, du regroupement des conducteurs et de la température ambiante.\n\n> ⚠️ Pour toute installation électrique fixe, se référer à la norme **NF C 15-100** et, au besoin, faire valider le dimensionnement par un professionnel.\n\n---\n\n## 1. Section / intensité / puissance (critère d'échauffement)\n\n| Section (mm²) | Intensité max (A) | Puissance max à 230 V (W) | Usage typique |\n| ------------- | ----------------- | ------------------------- | ----------------------------------------------------------- |\n| 0,22 | 2 | 460 | Signaux, petits appareils électroniques |\n| 0,5 | 3 – 4 | 690 – 920 | Câbles souples, lampes, alimentation basse puissance |\n| 0,75 | 6 | 1 380 | Lampes, rallonges légères |\n| 1 | 10 | 2 300 | Éclairage, petits appareils |\n| 1,5 | 16 | 3 680 | Circuits prises ou éclairage |\n| 2,5 | 20 – 25 | 4 600 – 5 750 | Prises de courant, électroménager |\n| 4 | 32 | 7 360 | Plaques de cuisson, climatisation |\n| 6 | 40 | 9 200 | Chauffe-eau, four, cuisinière |\n| 10 | 63 | 14 490 | Tableau divisionnaire, pompe à chaleur |\n| 16 | 80 | 18 400 | Alimentation principale, borne de recharge VE |\n| 25 | 100 | 23 000 | Alimentation générale forte puissance |\n| 35 | 125 | 28 750 | Installation industrielle |\n\n---\n\n## 2. Section / intensité / longueur (critère de chute de tension)\n\nLe critère précédent ne suffit pas : sur une longue distance, un câble correctement dimensionné en courant peut tout de même engendrer une **chute de tension** excessive, ce qui dégrade le fonctionnement des récepteurs et augmente les pertes.\n\nLe tableau suivant indique la **longueur maximale** (aller simple) pour rester sous une chute de tension de **3 %**, soit environ **6,9 V** sur un réseau 230 V. Cette limite correspond à la recommandation de la NF C 15-100 pour la majorité des circuits domestiques.\n\n| Section (mm²) | Intensité (A) | Longueur max pour ΔU ≤ 3 % (m) | Puissance max à 230 V (W) | Usage typique |\n| ------------- | ------------- | ------------------------------ | ------------------------- | ------------------------------ |\n| 0,75 | 6 | 14 | 1 380 | Lampes, rallonges légères |\n| 1 | 10 | 16 | 2 300 | Éclairage, petits appareils |\n| 1,5 | 16 | 19 | 3 680 | Circuits prises, éclairage |\n| 2,5 | 20 | 26 | 4 600 | Prises, électroménager |\n| 4 | 25 | 33 | 5 750 | Plaques, climatisation |\n| 6 | 32 | 39 | 7 360 | Chauffe-eau, four |\n| 10 | 40 | 52 | 9 200 | Tableau divisionnaire |\n| 16 | 63 | 58 | 14 490 | Borne de recharge VE |\n| 25 | 80 | 70 | 18 400 | Alimentation principale |\n| 35 | 100 | 80 | 23 000 | Installation industrielle |\n| 50 | 125 | 90 | 28 750 | Gros équipements |\n\n---\n\n## 3. Formule de calcul de la chute de tension\n\nEn monophasé, la chute de tension en volts est donnée par :\n\n$$\n\\Delta U = \\frac{2 \\times \\rho \\times L \\times I}{S}\n$$\n\navec :\n\n- $\\rho$ = 0,0175 Ω·mm²/m (résistivité du cuivre à 20 °C) ;\n- $L$ = longueur du câble (aller simple, en mètres) ;\n- $I$ = intensité parcourant le câble (en ampères) ;\n- $S$ = section du conducteur (en mm²).\n\nLe facteur **2** prend en compte le trajet aller-retour du courant (phase + neutre).\n\nPour obtenir la chute de tension en pourcentage, il suffit de diviser $\\Delta U$ par la tension nominale (230 V) :\n\n$$\n\\Delta U \\, (\\%) = \\frac{\\Delta U}{230} \\times 100\n$$\n\n### Exemple\n\nPour un câble de 2,5 mm², parcouru par 16 A, sur 25 m :\n\n$$\n\\Delta U = \\frac{2 \\times 0{,}0175 \\times 25 \\times 16}{2{,}5} = 5{,}6 \\text{ V}\n$$\n\nsoit environ **2,4 %** — la longueur reste donc admissible.\n\n---\n\n## 4. Synthèse pratique\n\nPour dimensionner correctement un câble, il convient de :\n\n1. choisir une section qui supporte le **courant maximal** (tableau §1) ;\n2. vérifier que la **longueur** n'entraîne pas une chute de tension supérieure à 3 % (tableau §2 ou formule §3) ;\n3. retenir la **section la plus grande** issue de ces deux critères ;\n4. tenir compte du **mode de pose**, du **regroupement** des câbles et de la **température ambiante**, qui peuvent imposer un déclassement.\n\nEn cas de doute, mieux vaut surdimensionner légèrement la section : le surcoût est modeste et les bénéfices (pertes réduites, échauffement plus faible, marge pour évolutions futures) sont réels.","featured":false,"tags":[]} \ No newline at end of file diff --git a/_cache/articles/75bf96ba-e110-4a9e-8163-95890562aecf.json b/_cache/articles/75bf96ba-e110-4a9e-8163-95890562aecf.json deleted file mode 100644 index ccc533c..0000000 --- a/_cache/articles/75bf96ba-e110-4a9e-8163-95890562aecf.json +++ /dev/null @@ -1 +0,0 @@ -{"uuid":"75bf96ba-e110-4a9e-8163-95890562aecf","slug":"souverainete-numerique-le-paradoxe-d-orange-face-aux-clouds-americains","title":"Orange dans les bras d'Amazon : l'aveu d'un échec européen","author":"cedric@abonnel.fr","published":true,"published_at":"2026-01-16 11:17","created_at":"2026-01-16 11:17:19","updated_at":"2026-05-11 21:44:15","revisions":[{"n":1,"date":"2026-05-11 19:14:47","comment":"","title":"Souveraineté numérique : le paradoxe d’Orange face aux clouds américains"},{"n":2,"date":"2026-05-11 19:16:11","comment":"","title":"Souveraineté numérique : le paradoxe d’Orange face aux clouds américains"},{"n":3,"date":"2026-05-11 19:19:14","comment":"","title":"Souveraineté numérique : le paradoxe d’Orange face aux clouds américains"},{"n":4,"date":"2026-05-11 19:23:36","comment":"","title":"Souveraineté numérique : le paradoxe d’Orange face aux clouds américains"},{"n":5,"date":"2026-05-11 20:03:18","comment":"","title":"Souveraineté numérique : le paradoxe d’Orange face aux clouds américains"},{"n":6,"date":"2026-05-11 20:04:17","comment":"","title":"Souveraineté numérique : le paradoxe d’Orange face aux clouds américains"},{"n":7,"date":"2026-05-11 20:22:36","comment":"","title":"Souveraineté numérique : le paradoxe d’Orange face aux clouds américains"},{"n":8,"date":"2026-05-11 20:23:25","comment":"","title":"Souveraineté numérique : le paradoxe d’Orange face aux clouds américains"},{"n":9,"date":"2026-05-11 21:37:25","comment":"","title":"Orange dans les bras d'Amazon : l'aveu d'un échec européen"},{"n":10,"date":"2026-05-11 21:38:02","comment":"","title":"Orange dans les bras d'Amazon : l'aveu d'un échec européen"},{"n":11,"date":"2026-05-11 21:39:10","comment":"","title":"Orange dans les bras d'Amazon : l'aveu d'un échec européen"},{"n":12,"date":"2026-05-11 21:40:24","comment":"","title":"Orange dans les bras d'Amazon : l'aveu d'un échec européen"},{"n":13,"date":"2026-05-11 21:43:18","comment":"","title":"Orange dans les bras d'Amazon : l'aveu d'un échec européen"},{"n":14,"date":"2026-05-11 21:44:15","comment":"","title":"Orange dans les bras d'Amazon : l'aveu d'un échec européen"}],"cover":"cover.jpg","files_meta":{"cover.jpg":{"author":"","source_url":"https://blog.wescale.fr/hubfs/CloudUS-Europe.jpg"},"l17cenum2526028_compte-rendu.pdf":{"author":"","source_url":"https://www.assemblee-nationale.fr/dyn/17/comptes-rendus/cenum/l17cenum2526028_compte-rendu.pdf"},"l17cenum2526028_compte-rendu_1.pdf":{"author":"","source_url":"https://www.assemblee-nationale.fr/dyn/17/comptes-rendus/cenum/l17cenum2526028_compte-rendu.pdf"},"Etude-Asteres-La-dependance-technologique-aux-services-de-cloud-et-logiciels-americains-avril-2025.pdf":{"author":"","source_url":"https://www.cigref.fr/wp/wp-content/uploads/2025/04/Etude-Asteres-La-dependance-technologique-aux-services-de-cloud-et-logiciels-americains-avril-2025.pdf"}},"external_links":[{"url":"https://www.lemondeinformatique.fr/les-dossiers/lire-cloud-souverain-une-interpretation-a-geometrie-variable-1678.html","name":"Cloud souverain, une interprétation à géométrie variable","added_at":"2026-05-11 21:40:20","meta":{"mime":"text/html","size":73778,"description":"La bataille des clouds pour la souveraineté - Cloud souverain, une interprétation à géométrie variable - ","og_image":"/file?uuid=75bf96ba-e110-4a9e-8163-95890562aecf&name=_thumb_f44a2f694f44f2a5-11682.jpg","site_name":"LeMondeInformatique","og_type":"article","canonical":"https://www.lemondeinformatique.fr/les-dossiers/lire-cloud-souverain-une-interpretation-a-geometrie-variable-1678.html"}},{"url":"https://www.assemblee-nationale.fr/dyn/17/comptes-rendus/cenum/l17cenum2526028_compte-rendu.pdf","name":"Commission d’enquête sur les dépendances structurelles et les vulnérabilités systémiques dans le secteur du numérique et les risques pour l’indépendance de la France","added_at":"2026-05-11 21:44:12","meta":{"mime":"application/pdf","size":659476,"date":"2026-05-06 16:38:24+02:00","creator":"pdftk 2.02 - www.pdftk.com","producer":"itext-paulo-155 (itextpdf.sf.net-lowagie.com)","pages":26,"pdf_version":"PDF 1.7"}}],"seo_title":"","seo_description":"","og_image":"","category":"actualité","content":"# Orange dans les bras d'Amazon : l'aveu d'un échec européen\n\nOrange utilise massivement AWS, Azure et Google Cloud. Dit comme ça, c'est presque une blague. L'ancien France Télécom, opérateur historique, fleuron des télécoms français, héritier du service public, branché sur les serveurs de la Silicon Valley. À l'heure où on ne parle que de souveraineté numérique, on pourrait croire à une trahison. C'est plus compliqué que ça.\n\nLa raison principale est bête : les Américains ont gagné la course. En quinze ans, AWS, Microsoft et Google ont construit une avance que personne ne sait combler aujourd'hui. Et ils ne vendent plus seulement du stockage ou de la puissance de calcul. Ils vendent un écosystème entier : de l'IA prête à l'emploi, des outils d'analyse de données, de l'automatisation, de la cybersécurité, des garanties de disponibilité à neuf chiffres. Pour Orange, qui doit faire tourner ses services dans une vingtaine de pays sans tomber en panne, ce niveau de maturité pèse lourd dans la balance.\n\nSauf que ce choix rationnel a un prix politique. En confiant ses infrastructures à des entreprises soumises au droit américain, Orange entre dans une zone de dépendance dont on ne sort pas facilement. Le Cloud Act permet aux autorités américaines de réclamer des données hébergées par ces sociétés, même quand ces données sont physiquement en Europe. On peut chiffrer, cloisonner, négocier des clauses dans tous les sens, le fait reste que la décision finale échappe au juge européen. Pour un opérateur télécoms qui manipule des données de millions d'abonnés, ce n'est pas un détail.\n\nLe plus rageant, c'est qu'on a des alternatives. OVHcloud, Scaleway, Outscale, IONOS en Allemagne, sans parler des projets autour de Deutsche Telekom. Ces acteurs existent, ils sont sérieux, ils savent faire. Alors pourquoi Orange ne s'allie pas avec eux pour construire quelque chose de crédible à l'échelle européenne ?\n\nParce que l'écart de moyens est vertigineux. AWS et Microsoft investissent chacun plus de cinquante milliards de dollars par an dans leurs infrastructures. Ils ont leurs propres câbles sous-marins, leurs propres réseaux mondiaux, et ils raflent une bonne partie des ingénieurs qui sortent des écoles. Un OVH, même bien géré, ne joue pas dans la même catégorie financière. Il faudrait une alliance européenne soutenue politiquement, financée sur vingt ou trente ans, pour espérer rattraper. On a essayé avec Gaia-X. Le résultat parle de lui-même.\n\nDu coup, Orange est coincé. Tout miser sur l'européen aujourd'hui, ça veut dire accepter des services moins performants, moins riches, et perdre du terrain face à ses concurrents qui, eux, n'auront pas ces scrupules. Dans un marché où les marges fondent et où chaque innovation compte, c'est un pari risqué. Continuer avec les Américains, c'est rester dans la course mais accepter une dépendance qui peut, du jour au lendemain, devenir un problème géopolitique.\n\nD'où la solution batarde que tout le monde adopte : l'hybride. On met chez Amazon ou Microsoft ce qui doit aller vite, innover, scaler. On garde en Europe, parfois sur des clouds \"de confiance\" labellisés SecNumCloud, ce qui touche aux données sensibles, aux clients régulés, à l'État. Ce n'est pas glorieux, mais ça permet de tenir les deux bouts.\n\nPour les défenseurs de la souveraineté numérique, ce compromis a un goût amer. On a l'impression d'une Europe qui se résigne, qui joue le match sur le terrain de l'adversaire avec ses règles. Mais en pointant Orange du doigt, on rate la cible. Le vrai problème n'est pas dans les choix d'une entreprise, il est en amont. Tant qu'on traitera le cloud comme un simple marché et pas comme une infrastructure critique, au même titre que l'électricité ou les chemins de fer, les industriels feront ce qu'ils ont toujours fait : choisir ce qui marche, là, maintenant.\n\nLa bonne question n'est donc pas \"pourquoi Orange utilise AWS\". Elle est \"pourquoi, vingt ans après l'arrivée du cloud, l'Europe n'a toujours pas mis sur la table de quoi rendre ce choix évitable\". La souveraineté ne se décrète pas dans des communiqués. Elle se paie. En milliards, en années, en décisions politiques qui survivent aux changements de gouvernement. Tant qu'on ne sera pas prêts à ce niveau d'engagement, on continuera à tenir un discours sur l'indépendance numérique en signant des contrats avec Seattle et Redmond.","featured":false,"tags":[]} \ No newline at end of file diff --git a/_cache/articles/79bd0f3b-a66d-4402-878c-6a6ba3af149b.json b/_cache/articles/79bd0f3b-a66d-4402-878c-6a6ba3af149b.json deleted file mode 100644 index 8d9ca7f..0000000 --- a/_cache/articles/79bd0f3b-a66d-4402-878c-6a6ba3af149b.json +++ /dev/null @@ -1 +0,0 @@ -{"uuid":"79bd0f3b-a66d-4402-878c-6a6ba3af149b","slug":"panorama-des-familles-de-soc-espressif","title":"Panorama des familles de SoC Espressif","author":"cedric@abonnel.fr","published":true,"published_at":"2023-02-03 19:45","created_at":"2023-02-03 19:45:47","updated_at":"2026-05-13 18:35:04","revisions":[{"n":1,"date":"2026-05-13 18:35:04","comment":"Titre modifié, contenu modifié","title":"Familles et évolutions"}],"cover":"","files_meta":{"20220127-233808.png":{"author":"","source_url":""},"dummy.png":{"author":"","source_url":""},"esp32.png":{"author":"","source_url":""}},"external_links":[],"seo_title":"","seo_description":"","og_image":"","category":"Électronique","content":"# Panorama des familles de SoC Espressif\n\n## Introduction\n\nEspressif Systems produit plusieurs familles de **System on Chip (SoC)** dédiés à l'IoT, toutes orientées vers la connectivité sans fil et le faible coût. Les deux grandes lignées sont l'**ESP8266** (Wi-Fi seul) et l'**ESP32** (Wi-Fi + Bluetooth), cette dernière s'étant elle-même ramifiée en plusieurs sous-familles (S, C, H, P).\n\nLe tableau de synthèse ci-dessous donne un aperçu rapide ; chaque famille est ensuite détaillée.\n\n| Famille | Année | Cœur | Wi-Fi | Bluetooth | Particularité |\n|---|---|---|---|---|---|\n| **ESP8266** | 2014 | Tensilica L106 32 bits, 1 cœur, 80 MHz | 802.11 b/g/n | non | Premier SoC Wi-Fi grand public bon marché |\n| **ESP32** | 2016 | Tensilica LX6 32 bits, 1 ou 2 cœurs, 240 MHz | 802.11 b/g/n | BT 4.2 + BLE | Polyvalent, cœur double |\n| **ESP32-S2** | 2020 | Tensilica LX7, 1 cœur | 802.11 b/g/n | non | USB OTG natif, faible consommation |\n| **ESP32-S3** | 2021 | Tensilica LX7, 2 cœurs, 240 MHz | 802.11 b/g/n | BT 5.0 LE | Accélérateur d'instructions vectorielles pour l'IA |\n| **ESP32-C3** | 2021 | RISC-V 32 bits, 1 cœur, 160 MHz | 802.11 b/g/n | BT 5.0 LE | Premier ESP en RISC-V |\n| **ESP32-C6** | 2023 | RISC-V, 2 cœurs (HP + LP) | Wi-Fi 6 (802.11ax), Thread, Zigbee | BT 5.0 LE | Multi-protocoles |\n| **ESP32-H2** | 2023 | RISC-V, 1 cœur | non | BT 5.0 LE, Thread, Zigbee | Sans Wi-Fi, dédié 802.15.4 |\n| **ESP32-P4** | 2024 | RISC-V, 2 cœurs HP + 1 LP, 400 MHz | non (radio externe) | non | Application processor haute performance |\n\n## ESP8266 : le pionnier\n\n![ESP8266](20220127-233808.png)\n\nL'**ESP8266** (sortie en **2014**) est le SoC qui a démocratisé l'IoT Wi-Fi grand public. Pour quelques euros, il offre un cœur **Tensilica Xtensa L106 32 bits** à 80 MHz, une **radio Wi-Fi 2,4 GHz** complète (802.11 b/g/n) et une pile TCP/IP, le tout dans un boîtier QFN32 de 5 × 5 mm.\n\nCaractéristiques marquantes :\n\n- un seul cœur, 80 ou 160 MHz ;\n- pas de Bluetooth, pas de BLE ;\n- pas de flash interne : code chargé depuis une flash SPI externe (généralement 512 Kio à 4 Mio) ;\n- 80 Kio de RAM utilisateur ;\n- 17 GPIO théoriques (mais peu exposées sur les petits modules comme l'ESP-01).\n\n> **Correction d'une idée reçue fréquente** : l'ESP8266 **ne dispose pas de Bluetooth**, et l'**ESP32 n'est pas un membre de la famille ESP8266** mais un SoC distinct, sorti plus tard. Le Bluetooth n'est apparu chez Espressif qu'avec l'ESP32 en 2016.\n\n### Modules à base d'ESP8266\n\nLe SoC nu est rarement utilisé seul : il est généralement vendu intégré sur un petit module (PCB + flash + antenne + brochage standardisé) produit par **AI-Thinker** ou directement par **Espressif**.\n\n| Origine | Modules les plus utilisés |\n|---|---|\n| **AI-Thinker** | ESP-01, ESP-01S, ESP-07, ESP-12E, ESP-12F, ESP-12S |\n| **Espressif** | ESP-WROOM-02, ESP-WROOM-02D, ESP-WROOM-02U, ESP-WROOM-S2 |\n\nLes références plus anciennes ou intermédiaires (ESP-02 à ESP-11, ESP-13, ESP-14, ESP-01M) existent mais n'ont jamais réellement percé ou ont été remplacées par les ESP-12x.\n\nListe complète sur Wikipédia : \n\n## ESP32 : Wi-Fi et Bluetooth\n\n![ESP32](esp32.png)\n\nL'**ESP32** (sortie en **2016**) marque un saut générationnel. Au-delà du Wi-Fi déjà présent sur l'ESP8266, il ajoute le **Bluetooth Classic 4.2** et le **Bluetooth Low Energy (BLE)**, monte à **240 MHz**, propose une version **double cœur**, et multiplie les périphériques.\n\nCaractéristiques marquantes :\n\n- cœur **Tensilica Xtensa LX6**, mono ou double cœur selon les modèles ;\n- Wi-Fi 2,4 GHz + Bluetooth 4.2 + BLE ;\n- jusqu'à **520 Kio** de SRAM ;\n- nombreuses interfaces : 3 UART, 4 SPI, 2 I²C, 2 I²S, CAN, Ethernet MAC, capteur Hall, capteur tactile capacitif, ADC 12 bits sur jusqu'à 18 canaux ;\n- coprocesseur ULP (Ultra Low Power) capable de tourner pendant que les cœurs principaux dorment.\n\n### Modules ESP32 (Tensilica LX6)\n\nTous fabriqués par Espressif, certifiés FCC/CE :\n\n| Module | Particularité |\n|---|---|\n| **ESP32-WROOM-32** | Le plus répandu, antenne PCB |\n| **ESP32-WROOM-32D** | Version révisée avec puce double cœur |\n| **ESP32-WROOM-32U** | Connecteur U.FL pour antenne externe |\n| **ESP32-SOLO-1** | Variante mono-cœur |\n| **ESP32-WROVER** / **WROVER-B** / **WROVER-I** / **WROVER-IB** | Ajout d'une **PSRAM** (4 ou 8 Mio) pour les applications gourmandes en mémoire (caméra, audio) |\n| **ESP32-PICO-V3-ZERO** | SiP très compact intégrant flash + cristal |\n\nPlusieurs déclinaisons d'audiosystème et d'OEM existent autour de cette base (ESP32-A1S de AI-Thinker pour l'audio, NINA-W13x d'u-blox certifiés industriellement, etc.), mais ne sont que des reconditionnements du même SoC.\n\nListe détaillée : \n\n## ESP32-S : USB natif et IA embarquée\n\nLa série **ESP32-S** introduit le cœur **Xtensa LX7**, plus performant, et abandonne le Bluetooth sur la S2 (réintroduit sur la S3 en version BLE 5.0).\n\n| SoC | Cœurs | Wi-Fi | BLE | Atout principal |\n|---|---|---|---|---|\n| **ESP32-S2** | 1 × LX7 | oui | non | **USB OTG natif**, faible consommation |\n| **ESP32-S3** | 2 × LX7 | oui | BLE 5.0 | **Accélération vectorielle** pour TinyML / vision |\n\nModules courants :\n\n- série S2 : `ESP32-S2-MINI-1[U]`, `ESP32-S2-SOLO[-U]`, `ESP32-S2-WROOM[-I]`, `ESP32-S2-WROVER[-I]` ;\n- série S3 : `ESP32-S3-MINI-1[U]`, `ESP32-S3-WROOM-1[U]`, `ESP32-S3-WROOM-2`.\n\nLe suffixe `-U` désigne un connecteur d'antenne externe (U.FL), le suffixe `-I` une variante industrielle (plage de température étendue).\n\n## ESP32-C : passage au RISC-V\n\nLa série **ESP32-C** marque le passage d'Espressif à l'architecture **RISC-V** open source. Plus simple, moins gourmande, et facturée moins cher que les cœurs Xtensa propriétaires.\n\n| SoC | Cœur | Wi-Fi | BLE | Autres protocoles |\n|---|---|---|---|---|\n| **ESP32-C3** | RISC-V 32 bits, 160 MHz | 802.11 b/g/n | BLE 5.0 | — |\n| **ESP32-C6** | 2 × RISC-V (HP 160 MHz + LP) | **Wi-Fi 6** (802.11ax) | BLE 5.0 | **Thread, Zigbee** (802.15.4) |\n\nL'ESP32-C6 est particulièrement notable : c'est le premier SoC d'Espressif compatible **Matter** sur Thread et Wi-Fi.\n\nModules : `ESP32-C3-MINI-1[U]`, `ESP32-C3-WROOM-02[U]`, et plus récemment les `ESP32-C6-WROOM-1[U]`.\n\n## ESP32-H : 802.15.4 sans Wi-Fi\n\n| SoC | Cœur | Wi-Fi | BLE | Autres |\n|---|---|---|---|---|\n| **ESP32-H2** | RISC-V 32 bits, 96 MHz | **non** | BLE 5.0 | **Thread, Zigbee** (802.15.4) |\n\nL'**ESP32-H2** est conçu pour les nœuds Matter / Thread / Zigbee qui n'ont pas besoin de Wi-Fi (capteurs basse consommation derrière un routeur). Il se couple typiquement à un ESP32-C6 ou à une box compatible Thread.\n\n## ESP32-P : processeur d'application\n\n| SoC | Cœurs | Connectivité | Rôle |\n|---|---|---|---|\n| **ESP32-P4** | 2 × RISC-V HP (400 MHz) + 1 LP | **aucune radio interne** | Application processor pour interfaces homme-machine évoluées (LCD haute résolution, caméra MIPI-CSI, audio…) |\n\nL'ESP32-P4 sort du modèle « SoC IoT autonome » : il est destiné à être couplé à un autre ESP (typiquement un C6) qui apporte la radio. C'est la première incursion d'Espressif sur le segment des microcontrôleurs applicatifs hautes performances.\n\n## Comment choisir\n\nQuelques règles simples pour s'y retrouver lors du choix d'un SoC :\n\n- **Projet simple, Wi-Fi seul, budget serré** : ESP8266 (sur un module ESP-12F ou une WeMos D1 mini) suffit largement.\n- **Projet général, Wi-Fi + Bluetooth, beaucoup de GPIO** : ESP32-WROOM-32 reste la valeur sûre.\n- **Besoin d'USB natif, de basse consommation, ou de TinyML** : ESP32-S2 ou S3.\n- **Coût minimal et BLE moderne** : ESP32-C3.\n- **Thread, Zigbee, Matter, Wi-Fi 6** : ESP32-C6 (avec Wi-Fi) ou ESP32-H2 (sans Wi-Fi).\n- **IHM riche, écran haute définition, caméra** : ESP32-P4 couplé à un C6.\n\n## Pour aller plus loin\n\n- [L'ESP-01 : présentation et premiers pas](https://varlog.a5l.fr/post/esp-01-presentation-premiers-pas)\n- [Premier programme ESP-01](https://varlog.a5l.fr/post/esp-01-premier-programme)\n- [ESP8266 : commandes AT](https://varlog.a5l.fr/post/esp8266-commandes-at)\n- Page produits Espressif : \n- Wikipédia ESP8266 : \n- Wikipédia ESP32 : \n```\n","featured":false,"tags":[]} \ No newline at end of file diff --git a/_cache/articles/7af79dd4-67d9-4516-a67b-06c2e569eaea.json b/_cache/articles/7af79dd4-67d9-4516-a67b-06c2e569eaea.json deleted file mode 100644 index 06e0310..0000000 --- a/_cache/articles/7af79dd4-67d9-4516-a67b-06c2e569eaea.json +++ /dev/null @@ -1 +0,0 @@ -{"uuid":"7af79dd4-67d9-4516-a67b-06c2e569eaea","slug":"test-kobo-libra-colour","title":"Kobo Libra Colour : la liseuse qui voulait devenir un carnet","author":"cedric@abonnel.fr","published":true,"published_at":"2025-11-09 12:03","created_at":"2025-11-09 12:03:56","updated_at":"2026-05-12 01:41:02","revisions":[{"n":1,"date":"2026-05-12 01:41:02","comment":"","title":"Kobo Libra Colour : la liseuse qui voulait devenir un carnet"}],"cover":"cover.jpg","files_meta":{"cover.jpg":{"author":"","source_url":"https://www.noypigeeks.com/wp-content/uploads/2024/04/Kobo-Libra-Color.jpg"}},"external_links":[],"seo_title":"","seo_description":"","og_image":"","category":"loisirs","content":"# Kobo Libra Colour : la liseuse qui voulait devenir un carnet\n\n*Prix indicatif : environ 229 €. Écran 7 pouces E-Ink Kaleido 3 couleur, stylet en option (Kobo Stylus 2).*\n\n## Une catégorie qui s'était endormie\n\nCela fait presque dix ans que les liseuses se ressemblent. Un écran noir et blanc, un éclairage frontal réglable, une autonomie de plusieurs semaines, et basta. Le progrès s'est concentré sur des détails : un peu plus de contraste, un peu moins de poids, un éclairage légèrement plus chaud le soir. Les constructeurs avaient apparemment décidé qu'un livre numérique devait imiter le plus fidèlement possible un livre de poche, et qu'il n'y avait pas grand-chose d'autre à inventer.\n\nLa **Kobo Libra Colour** prend l'exact contre-pied de cette prudence. Elle est la première Kobo de 7 pouces à embarquer le nouvel écran **E-Ink Kaleido 3**, qui affiche enfin de la couleur sans renoncer au confort de la lecture sur encre électronique. Et surtout, elle est compatible avec un stylet, le Kobo Stylus 2, vendu séparément. La promesse tient en trois verbes : lire, annoter, prendre des notes. Sans devenir une tablette, sans bouffer la batterie en quelques heures, sans bombarder l'utilisateur de notifications.\n\nEn main, l'objet inspire confiance. 199 grammes seulement, un poids très bien réparti, et cette poignée latérale typique de la gamme Libra qui change vraiment la prise — on tient la liseuse à une main pendant des heures sans crispation, le pouce posé sur les deux boutons physiques de tournage de page. Détail qui en dit long sur la philosophie du produit : ces boutons sont là pour qu'on n'ait pas besoin de toucher l'écran. La liseuse veut rester une liseuse.\n\n## Un écran couleur qui sert enfin à quelque chose\n\nLa technologie Kaleido 3 mérite quelques mots d'explication, parce qu'elle est souvent mal comprise. Ce n'est pas un écran LCD comme sur une tablette : il n'y a pas de rétroéclairage direct, donc pas d'émission lumineuse agressive dans les yeux, et la lisibilité reste excellente en plein soleil — là où n'importe quel iPad devient inutilisable. Le principe est celui de l'encre électronique classique, surmonté d'une fine couche de filtres colorés qui restituent environ 4 000 couleurs.\n\nLa contrepartie, il faut la connaître avant d'acheter : la résolution en couleur est nettement plus basse qu'en noir et blanc, et on perçoit légèrement la trame des filtres si on cherche le défaut. Les rouges sont un peu ternes, les bleus corrects, les verts inégaux. Personne ne lira de bande dessinée Marvel sur cet écran en se disant \"c'est aussi beau qu'imprimé\".\n\nMais c'est passer à côté de l'essentiel. Pour la première fois, la couleur sur une liseuse n'est pas un gadget : c'est un outil. Les cartes deviennent vraiment lisibles, les schémas techniques retrouvent leur logique de codage couleur, les manuels gagnent en clarté. Et surtout, le surlignage — jaune, rose, vert, bleu — fonctionne comme sur papier. On peut enfin différencier ce qu'on veut retenir, ce qu'on conteste, ce qu'on veut creuser. C'est bête à dire, mais après des années à surligner en \"gris foncé\" sur fond gris clair, l'effet est libérateur.\n\n## Le stylet, où la liseuse change de nature\n\nC'est avec le Kobo Stylus 2 que la Libra Colour révèle ce qu'elle a vraiment dans le ventre. Vendu en option (et c'est dommage, à ce prix-là), il transforme l'usage. On peut annoter directement dans les PDF et les ePub, surligner à la main plutôt qu'avec une sélection à deux doigts, écrire dans des carnets intégrés au système, et synchroniser tout ça via Dropbox ou par câble USB.\n\nLe point qui fait la différence, et qu'on cherche en vain sur la plupart des concurrents : **les PDF annotés sont exportables tels quels**. Quand on récupère son fichier, les coups de surligneur, les notes manuscrites dans la marge, les flèches griffonnées — tout est intégré à la page comme si on l'avait fait au stylo. On en sort un PDF qu'on peut imprimer, archiver, partager. Pour un étudiant qui annote ses cours, un enseignant qui corrige des copies au format numérique, un professionnel qui relit des dossiers : c'est exactement ce qu'on attendait depuis des années.\n\nFaut-il s'attendre à la sensation d'une tablette graphique haut de gamme ? Non. La latence est faible mais perceptible, le frottement du stylet sur le verre n'a pas la résistance d'un Remarkable 2 (qui reste la référence pour le ressenti \"crayon sur papier\"). Mais c'est crédible, fluide, suffisant pour écrire pendant une heure sans frustration.\n\n## Ce qui en fait toujours une excellente liseuse, par ailleurs\n\nOn l'oublierait presque tellement le stylet capte l'attention, mais la Libra Colour reste avant tout une liseuse Kobo, c'est-à-dire ce que la marque fait de mieux. Lecture native des fichiers ePub sans passer par une conversion absurde, intégration de Pocket pour envoyer en un clic les articles longs du web vers la liseuse, librairie intégrée qui inclut désormais les BD en couleur achetables directement.\n\nEt — point essentiel pour qui se méfie des écosystèmes fermés — **aucun verrou Amazon**. On charge ses propres fichiers sans gymnastique, on installe KOReader si on veut un lecteur alternatif, on lit ses bibliothèques publiques via Overdrive. La liseuse appartient à son propriétaire.\n\nLe contraste en noir et blanc reste très correct malgré la couche de filtres couleur — légèrement inférieur à une liseuse pure N&B comme la Clara BW, mais largement suffisant pour la lecture confortable. L'éclairage frontal est homogène, sans points chauds, et le ConfortLight PRO permet de glisser progressivement vers un ton ambré le soir, ce qui change réellement quelque chose pour la lecture nocturne.\n\n## Autonomie : il faut être honnête\n\nC'est sans doute le point où il faut tempérer l'enthousiasme. Avec un usage mixte lecture et annotations, en gardant le Wi-Fi actif, on tient entre une et trois semaines selon l'intensité. C'est moins qu'une Clara classique qui peut atteindre six semaines, et bien plus qu'un iPad ou un Remarkable. La couleur et le stylet ont un coût énergétique, et la Libra ne fait pas de miracle. Cela reste totalement cohérent avec l'usage d'une liseuse — on ne la branche pas tous les soirs — mais ne tablez pas sur le mois entier en voyage si vous comptez prendre des notes copieuses.\n\n## Le flux d'export, en pratique\n\nQuand on annote un PDF, le récupérer est simple : soit on connecte la Kobo à un ordinateur en USB et on copie le fichier exporté, soit on laisse la synchronisation Dropbox faire le travail en arrière-plan. Il n'y a pas d'impression directe depuis la liseuse — il faut passer par un ordinateur — mais aucune annotation n'est perdue dans la conversion. C'est un workflow qui demande deux clics, pas un projet en soi.\n\n## Comment elle se situe dans la gamme\n\nQuelques repères pour situer la Libra Colour face aux alternatives qu'on hésite souvent à comparer.\n\n| Modèle | Écran | Stylet | Export PDF annoté | À qui ça s'adresse |\n|---|---|---|---|---|\n| **Kobo Libra Colour** | 7\" couleur Kaleido 3 | En option | Oui | Lecture quotidienne + annotations occasionnelles + couleur utile |\n| Kobo Sage | 8\" N&B | En option | Oui | Prise de notes plus sérieuse, format intermédiaire |\n| Kobo Elipsa 2E | 10,3\" N&B | Inclus | Oui | Remplacer un classeur A4, usage intensif des PDF techniques |\n| Kindle Scribe | 10,2\" N&B | Inclus | Export limité | Lecteurs déjà installés dans l'écosystème Kindle |\n\nPour qui veut une vraie planche à dessin numérique, l'Elipsa 2E reste plus indiquée — son grand format change la donne pour les schémas et les documents A4. Pour qui veut juste lire en N&B pour un budget contenu, la Clara BW suffit largement. Mais sur le créneau \"je lis beaucoup, j'aimerais annoter parfois, et la couleur me servirait pour mes manuels ou mes BD\", la Libra Colour est aujourd'hui la proposition la plus équilibrée du marché.\n\n## Mon avis\n\nLa Kobo Libra Colour n'est pas la meilleure liseuse possible dans chaque catégorie prise séparément. L'Elipsa 2E reste plus à l'aise sur les PDF complexes, la Clara BW pèse moins lourd dans la poche et coûte moins cher, le Remarkable 2 offre une meilleure sensation d'écriture. Mais c'est précisément ce qui fait sa force : c'est la liseuse qui en fait *assez* dans plusieurs domaines pour ne pas demander d'en posséder deux.\n\nPendant des années, on a dû choisir entre lire et annoter, entre voir des cartes en couleur et garder une bonne autonomie, entre payer 350 € pour une grande tablette E-Ink ou se contenter d'un noir et blanc rigide. La Libra Colour est le premier produit, à ma connaissance, à proposer un compromis qui ne ressemble pas à un compromis. À 229 €, ou autour de 290 € avec le stylet, c'est une vraie proposition de valeur pour qui lit beaucoup et travaille un peu sur ce qu'il lit.\n\n**La meilleure liseuse \"papier numérique\" polyvalente du moment, et de loin.**","featured":false,"tags":[]} \ No newline at end of file diff --git a/_cache/articles/7cf4eff3-2bab-4f2e-8982-247c89f7ca16.json b/_cache/articles/7cf4eff3-2bab-4f2e-8982-247c89f7ca16.json deleted file mode 100644 index 689b972..0000000 --- a/_cache/articles/7cf4eff3-2bab-4f2e-8982-247c89f7ca16.json +++ /dev/null @@ -1 +0,0 @@ -{"uuid":"7cf4eff3-2bab-4f2e-8982-247c89f7ca16","slug":"installer-webmin-l-outil-d-administration-en-mode-web","title":"Mettre en place un serveur Debian administrable avec Webmin","author":"cedric@abonnel.fr","published":true,"published_at":"2025-11-13 11:57","created_at":"2025-11-13 11:57:05","updated_at":"2026-05-12 10:48:26","revisions":[],"cover":"cover.svg","files_meta":{"11f42517bdead1c0-18569.svg":{"author":"Cédrix / Générée par IA","source_url":""},"cover.svg":{"author":"Cédrix / Générée par IA","source_url":""}},"external_links":[],"seo_title":"Sécuriser une Debian fraîche : Webmin et firewalld pas à pas","seo_description":"Procédure complète pour sécuriser une Debian fraîche : préparation via scripts, installation de Webmin et configuration de firewalld. Guide pas à pas.","og_image":"","category":"linux","content":"# Mettre en place un serveur Debian administrable avec Webmin\n\nQuand on monte un nouveau serveur, les premières heures sont toujours les mêmes : on durcit la machine, on crée un utilisateur correct, on coupe ce qui traîne, et on met en place de quoi l'administrer sans avoir à ouvrir un terminal pour chaque détail. Cet article décrit la procédure que j'utilise sur mes Debian fraîches : préparation via mes scripts, installation de Webmin, et activation de `firewalld` pour ne laisser passer que ce qui doit l'être.\n\nL'idée n'est pas de transformer le serveur en sapin de Noël, mais d'avoir une base saine sur laquelle bâtir, qu'il s'agisse d'expérimenter dans un LXC ou de préparer une VM destinée à recevoir une vraie charge.\n\n## Étape 1 — Préparer la machine\n\nSur une Debian neuve, on commence par récupérer un petit script qui en télécharge d'autres. C'est juste un point d'entrée : il va chercher dans mon dépôt Forgejo un ensemble de scripts d'initialisation que je maintiens à jour.\n\n```bash\nwget -O fetch_scripts.sh https://git.abonnel.fr/cedricAbonnel/notes-techniques/raw/branch/main/scripts/fetch_scripts.sh\nchmod +x fetch_scripts.sh\n./fetch_scripts.sh\n```\n\nÀ ce stade, un dossier `common/` apparaît à côté du script. C'est là que se trouve le vrai travail :\n\n```bash\ncd common/\n./setup_debian.sh\n```\n\n`setup_debian.sh` fait ce qu'on a tous fini par écrire un jour : mise à jour des paquets, installation des outils de base, création d'un utilisateur non-root avec les bons droits sudo, durcissement minimal de SSH. Rien de magique, mais c'est répétable et c'est ce qui compte quand on provisionne souvent.\n\n**Important** : une fois le script terminé, il faut se déconnecter de la session `root` et se reconnecter avec l'utilisateur que le script vient de créer. Tout ce qui suit se fait avec cet utilisateur, en passant par `sudo` quand nécessaire. Continuer en root est une mauvaise habitude qui finit toujours par se payer.\n\n## Étape 2 — Installer Webmin\n\nWebmin est une interface web d'administration système. Pour quelqu'un qui débute, c'est une porte d'entrée appréciable : on voit les services qui tournent, les utilisateurs, les paquets installés, les logs, le tout depuis un navigateur. Pour quelqu'un d'expérimenté, c'est un complément pratique quand on veut donner un accès limité à un collègue moins à l'aise en ligne de commande.\n\nWebmin fournit son propre script pour configurer le dépôt apt :\n\n```bash\ncurl -o webmin-setup-repo.sh https://raw.githubusercontent.com/webmin/webmin/master/webmin-setup-repo.sh\nsudo sh webmin-setup-repo.sh\n```\n\nCe script ajoute le dépôt officiel Webmin à la liste des sources apt et importe la clé GPG associée. Une fois fait, l'installation devient une commande apt classique :\n\n```bash\nsudo apt-get install webmin usermin --install-recommends\n```\n\nPetite précision sur les deux paquets : **Webmin** sert à l'administration système (root ou utilisateur sudo), **Usermin** est sa version pour les utilisateurs standards, qui leur permet de gérer leur propre compte, leurs mails, leurs fichiers, sans toucher au système. Sur une machine mono-utilisateur, on peut se passer d'Usermin, mais l'installer maintenant coûte trois mégaoctets et évite d'y revenir plus tard.\n\n## Étape 3 — Se connecter à l'interface\n\nWebmin écoute par défaut sur le port **10000** en HTTPS. Depuis un navigateur :\n\n```\nhttps://:10000\n```\n\n`` est à remplacer par l'adresse de la machine. Le navigateur va râler à propos du certificat — c'est normal, Webmin génère un certificat auto-signé à l'installation. On peut accepter l'avertissement pour l'instant ; si la machine est destinée à un usage durable, on remplacera ça plus tard par un vrai certificat (Let's Encrypt via un reverse proxy, par exemple).\n\nPour la connexion, **on utilise les identifiants Linux de l'utilisateur sudo**, pas un compte spécifique à Webmin. C'est l'utilisateur que `setup_debian.sh` a créé à l'étape 1. Webmin s'appuie sur PAM, donc tout compte système autorisé à se connecter peut potentiellement entrer — d'où l'importance de l'étape suivante.\n\n## Étape 4 — Activer le pare-feu\n\nUne machine accessible sur internet sans pare-feu, c'est une question de temps avant les premiers ennuis. Sur Debian, je préfère `firewalld` à `ufw` ou à la configuration brute de `nftables` : la notion de zones est pratique, la syntaxe se retient, et l'intégration avec Webmin est correcte.\n\nInstallation et activation :\n\n```bash\nsudo apt update\nsudo apt install firewalld\nsudo systemctl enable firewalld\nsudo systemctl start firewalld\n```\n\n`enable` rend le service persistant au redémarrage, `start` le lance immédiatement. Vérification :\n\n```bash\nsudo firewall-cmd --state\n```\n\nLe retour attendu est `running`. Si c'est autre chose, `systemctl status firewalld` permet de comprendre ce qui coince — c'est souvent un conflit avec un autre service de filtrage déjà en place.\n\nÀ ce stade, le pare-feu tourne mais avec une configuration par défaut qui, selon la zone active, peut bloquer Webmin. Il faut donc explicitement autoriser le port 10000 :\n\n```bash\nsudo firewall-cmd --add-port=10000/tcp --permanent\nsudo firewall-cmd --reload\n```\n\nLe `--permanent` écrit la règle dans la configuration ; sans ça, elle disparaît au prochain redémarrage. Le `reload` recharge la configuration pour que la règle prenne effet immédiatement. C'est l'erreur classique : on ajoute une règle, on continue à ne pas pouvoir se connecter, on perd dix minutes avant de se rappeler du `reload`.\n\n## Pour aller plus loin\n\nUne fois cette base en place, plusieurs directions s'offrent selon le rôle de la machine.\n\nSi elle est destinée à héberger un service web public, l'étape logique suivante consiste à placer Webmin **derrière un reverse proxy** plutôt que de l'exposer directement sur le port 10000. Le port 10000 est alors fermé vers l'extérieur, et l'interface devient accessible via un sous-domaine en HTTPS avec un vrai certificat. C'est plus propre, plus sûr, et ça évite l'avertissement de certificat à chaque connexion.\n\nSi la machine est un serveur d'applications, autant profiter du fait que `firewalld` est en place pour réfléchir aux ports en amont. Mieux vaut décider tout de suite quelles applications écoutent où, plutôt que d'empiler les `--add-port` au fil de l'eau et de finir avec une configuration que plus personne ne comprend.\n\nEt dans tous les cas, **garder une trace écrite** des choix faits : quels ports ouverts, quel utilisateur sudo, quelle convention de nommage. Un fichier `README.md` à la racine du home de l'admin, peu importe le support — l'important c'est que dans six mois, on puisse retrouver le fil sans avoir à tout rétro-ingénierer.","featured":false,"tags":[]} \ No newline at end of file diff --git a/_cache/articles/83cabd62-617e-418c-a890-76e205bf5551.json b/_cache/articles/83cabd62-617e-418c-a890-76e205bf5551.json deleted file mode 100644 index 8e17fb7..0000000 --- a/_cache/articles/83cabd62-617e-418c-a890-76e205bf5551.json +++ /dev/null @@ -1 +0,0 @@ -{"uuid":"83cabd62-617e-418c-a890-76e205bf5551","slug":"rejet-des-mails-avec-l-en-tete-received-spf","title":"Filtrer les mails selon le résultat SPF","author":"cedric@abonnel.fr","published":true,"published_at":"2025-05-20 16:46","created_at":"2025-05-20 16:46:00","updated_at":"2026-05-12 11:17:15","revisions":[{"n":1,"date":"2026-05-12 11:17:15","comment":"Contenu modifié, couverture modifiée, métadonnées fichiers modifiées","title":"Filtrer les mails selon le résultat SPF"}],"cover":"cover.svg","files_meta":{"80df51587e63642b-13724.svg":{"author":"Cédrix / Générée par IA","source_url":""}},"external_links":[],"seo_title":"","seo_description":"Filtrer les mails par SPF : guide DevOps débutant. Codes Fail, Permerror, Softfail expliqués, exemples Postfix et SpamAssassin inclus.","og_image":"https://varlog.a5l.fr/file?uuid=83cabd62-617e-418c-a890-76e205bf5551&name=80df51587e63642b-13724.svg","category":"informatique","content":"# Filtrer les mails selon le résultat SPF\n\nQuand on gère un serveur de messagerie, le SPF (Sender Policy Framework) est l'un des premiers remparts contre l'usurpation d'identité. Concrètement, il permet à un domaine de déclarer dans son DNS quelles adresses IP ont le droit d'envoyer des mails en son nom. À la réception, le serveur vérifie cette correspondance et écrit le résultat dans un en-tête : `Received-SPF`.\n\nReste à savoir quoi faire de ce résultat. Tous les verdicts SPF ne se valent pas, et rejeter trop large revient vite à perdre des mails légitimes.\n\n## Les codes de retour SPF\n\nVoici les sept valeurs qu'on peut rencontrer dans `Received-SPF`, et ce qu'il faut en faire :\n\n| Code | Signification | Rejet conseillé |\n|------|---------------|-----------------|\n| `Pass` | L'IP est explicitement autorisée par le domaine | Non |\n| `Fail` | L'IP n'est pas autorisée | Oui |\n| `Softfail` | L'IP n'est probablement pas autorisée | Optionnel |\n| `Neutral` | Le domaine ne se prononce pas | Non |\n| `None` | Pas d'enregistrement SPF publié | Optionnel |\n| `Permerror` | Erreur permanente (syntaxe SPF invalide, boucle…) | Oui |\n| `Temperror` | Erreur temporaire (DNS injoignable, timeout) | Non recommandé |\n\nLes deux candidats évidents au rejet automatique sont **`Fail`** et **`Permerror`**. Le premier dit clairement « cette IP n'a rien à faire ici » ; le second signale un enregistrement cassé, ce qui est rare chez un expéditeur sérieux.\n\n`Softfail` est plus délicat : beaucoup de domaines mal configurés y atterrissent, donc rejeter sur ce critère seul génère des faux positifs. Mieux vaut l'utiliser comme un signal parmi d'autres (typiquement via un score SpamAssassin) plutôt que comme motif de rejet sec.\n\n`Temperror` ne doit jamais déclencher un rejet définitif : le problème vient d'un DNS qui ne répond pas, pas du mail lui-même. Un rejet temporaire (code 4xx) est en revanche acceptable, le serveur émetteur réessaiera.\n\n## Mise en pratique avec Postfix\n\nPostfix permet de filtrer sur les en-têtes via la directive `header_checks`. Dans `main.cf` :\n\n```\nheader_checks = regexp:/etc/postfix/header_checks\n```\n\nPuis dans `/etc/postfix/header_checks` :\n\n```\n/^Received-SPF: Fail/ REJECT SPF Fail - IP non autorisee\n/^Received-SPF: Permerror/ REJECT SPF Permerror - enregistrement SPF invalide\n```\n\nAprès modification, recharger Postfix :\n\n```\npostfix reload\n```\n\nÀ noter : `header_checks` agit sur les en-têtes déjà présents. Si on veut que la vérification SPF soit faite par Postfix lui-même au moment de la réception, le bon outil est plutôt **policyd-spf** (paquet `postfix-policyd-spf-python` sous Debian), qui s'intègre via `smtpd_recipient_restrictions` et permet de rejeter avant même que le mail soit accepté.\n\n## L'approche par scoring avec SpamAssassin\n\nPlutôt que de couper net, on peut intégrer SPF à un score global. SpamAssassin expose plusieurs règles dédiées :\n\n- `SPF_FAIL` : ajoute un score significatif\n- `SPF_SOFTFAIL` : score modéré\n- `SPF_PERMERROR` : signale une config cassée\n- `SPF_HELO_FAIL` : échec sur l'identité HELO\n\nL'intérêt du scoring, c'est de combiner SPF avec d'autres signaux (DKIM, DMARC, listes noires, contenu). Un mail qui échoue uniquement à SPF mais passe tout le reste mérite peut-être un passage en spam plutôt qu'un rejet pur. Inversement, un cumul `SPF_FAIL` + DKIM cassé + IP sur une RBL ne laisse pas beaucoup de doute.\n\n## Quelques précautions avant de mettre en production\n\nAvant d'activer un rejet sur `Fail`, deux réflexes utiles :\n\nD'abord, regarder les logs en mode passif pendant quelques jours. Loguer les verdicts SPF sans rejeter permet de mesurer le volume concerné et de repérer les expéditeurs légitimes mal configurés (il y en a toujours, y compris des prestataires connus).\n\nEnsuite, vérifier que les mails forwardés ne sont pas pénalisés. Un mail transféré perd souvent son alignement SPF puisque l'IP de réémission n'est pas celle déclarée par le domaine d'origine. C'est précisément le problème que DKIM et ARC sont censés résoudre, mais tous les serveurs ne les implémentent pas correctement.\n\nLe SPF est un bon premier filtre, pas une solution complète. Combiné à DKIM et DMARC, il forme la base de l'authentification mail moderne ; isolé, il reste utile mais imparfait.","featured":false,"tags":[]} \ No newline at end of file diff --git a/_cache/articles/8ed45b6e-d89b-4ae9-94e2-ed8476c00080.json b/_cache/articles/8ed45b6e-d89b-4ae9-94e2-ed8476c00080.json deleted file mode 100644 index 0425a0b..0000000 --- a/_cache/articles/8ed45b6e-d89b-4ae9-94e2-ed8476c00080.json +++ /dev/null @@ -1 +0,0 @@ -{"uuid":"8ed45b6e-d89b-4ae9-94e2-ed8476c00080","slug":"creer-son-propre-mini-framework-php-from-scratch","title":"Créer son propre mini-framework PHP from scratch","author":"cedric@abonnel.fr","published":true,"published_at":"2025-11-04 22:07:52","created_at":"2025-11-04 22:07:52","updated_at":"2025-11-04 22:07:52","revisions":[],"cover":"","category":"informatique","content":"# Créer son propre mini-framework PHP from scratch\n\nTout commence avec une idée simple : bâtir un système web **léger, modulaire et compréhensible**, sans dépendre d’un framework externe.\nUn **framework maison**, conçu pour gérer efficacement des **posts**, des **commentaires** et des **pièces jointes**, tout en respectant les principes de l’architecture **MVC**.\n\n### L’objectif\n\nDisposer d’une base claire et extensible, où chaque brique du système — du routeur aux modèles — reste transparente et entièrement maîtrisable.\n\n---\n\n## **La structure du projet**\n\nL’application s’organise autour d’une arborescence simple et logique.\n\nAu sommet, le dossier `public/` joue le rôle de **porte d’entrée** du site, avec un fichier `index.php` qui orchestre tout : c’est lui qui intercepte chaque requête et la transmet au **routeur**.\n\nDans le dossier `app/`, on retrouve le cœur de la logique métier :\n\n* `Core/` contient les **fondations** : le routeur et la classe de base des contrôleurs.\n* `Controllers/` regroupe les différentes logiques d’action (posts, commentaires, pièces jointes).\n* `Models/` gère la **persistance des données** — ici stockées dans des fichiers JSON pour plus de simplicité.\n\nChaque couche a un rôle précis, et l’ensemble reste clair, modulaire et facile à maintenir.\n\n---\n\n## **Le routeur : le cerveau du système**\n\nAu cœur du projet, le fichier `Router.php` agit comme un **chef d’orchestre**.\nIl écoute les requêtes entrantes, analyse leur méthode (`GET`, `POST`, `PATCH`, etc.) et les fait correspondre à la bonne route.\n\nGrâce à un jeu de **regex**, le routeur reconnaît des chemins dynamiques comme `/posts/:id` et transmet automatiquement les paramètres au contrôleur concerné.\nUne architecture élégante, minimaliste et pourtant très puissante.\n\n---\n\n## **L’entrée principale : `index.php`**\n\nTout commence dans `public/index.php`.\nAprès avoir chargé les classes nécessaires, on y définit les routes — une à une — comme les **règles d’un jeu**.\n\nChaque route associe une méthode HTTP à une action précise :\n\n* Afficher tous les posts\n* Créer un nouveau post\n* Mettre à jour, publier ou masquer un post\n* Ajouter un commentaire ou une pièce jointe\n\nUne fois toutes les routes enregistrées, le routeur **intercepte la requête HTTP réelle** et la redirige vers le bon contrôleur.\nC’est simple, direct et parfaitement lisible.\n\n---\n\n## **Les contrôleurs : la logique métier**\n\nPrenons `PostController` comme exemple.\nChaque méthode correspond à une **action concrète** du système : afficher la liste des posts, en créer un, le modifier, le publier ou le masquer.\n\nLes contrôleurs sont **stateless** : ils reçoivent les données, invoquent le modèle correspondant, puis renvoient une réponse JSON propre et explicite.\nAucune dépendance superflue, aucun artifice — le code parle de lui-même.\n\n---\n\n## **Les modèles : la mémoire du système**\n\nLes modèles (`Post`, `Comment`, `Attachment`) assurent la gestion des données.\nIci, les informations sont stockées dans des fichiers JSON — un choix volontairement simple, idéal pour le prototypage ou les petits projets.\n\nMais la structure est pensée pour pouvoir évoluer facilement vers une **base de données réelle** (MySQL, SQLite, etc.) via PDO.\nChaque modèle sait comment **lire, créer, modifier et sauvegarder** ses propres objets, garantissant ainsi une séparation claire des responsabilités.\n\n---\n\n## **Une API claire et RESTful**\n\nLes routes suivent une logique **RESTful**, simple et cohérente :\n\n```bash\nPATCH /posts/42/publish\nPATCH /posts/42/comments/17/hide\nPOST /posts/42/attachments\n```\n\nL’API est lisible, homogène et prête à être consommée par n’importe quel front-end — qu’il soit en Vue.js, React, ou même une interface HTML minimale.\n\n---\n\n## **Pourquoi cette approche séduit**\n\nCe mini-framework maison présente plusieurs atouts :\n\n* **Zéro dépendance externe** : tout est sous ton contrôle.\n* **Architecture claire et didactique** : parfaite pour comprendre la mécanique interne d’un framework.\n* **Routing dynamique et élégant** : les paramètres d’URL sont gérés naturellement.\n* **Extensibilité** : tu peux facilement ajouter l’authentification, des middlewares ou la validation des données.\n* **Légèreté** : un cœur minimal, mais robuste et fonctionnel.\n\n---\n\n## **Et après ?**\n\nLa prochaine étape : implémenter la **gestion complète des fichiers uploadés**, avec vérification du type MIME, stockage sécurisé dans `/uploads`, et possibilité de masquer les pièces jointes à la demande.\n\nPetit à petit, ton framework prend forme — un système MVC léger, propre et totalement maîtrisé.\nTu n’utilises plus un framework : tu **en construis un**.\n","featured":false,"files_meta":[],"external_links":[],"tags":[]} \ No newline at end of file diff --git a/_cache/articles/947e0330-2d72-44c9-8ee2-fcb312babcd0.json b/_cache/articles/947e0330-2d72-44c9-8ee2-fcb312babcd0.json deleted file mode 100644 index 4205aa3..0000000 --- a/_cache/articles/947e0330-2d72-44c9-8ee2-fcb312babcd0.json +++ /dev/null @@ -1 +0,0 @@ -{"uuid":"947e0330-2d72-44c9-8ee2-fcb312babcd0","slug":"la-3g-une-technologie-encore-efficace-mais-bridee","title":"La 3G : une technologie encore efficace… mais bridée","author":"cedric@abonnel.fr","published":true,"published_at":"2025-11-05 08:40:01","created_at":"2025-11-05 08:40:01","updated_at":"2025-11-05 08:40:01","revisions":[],"cover":"","category":"télécom","content":"# La 3G : une technologie encore efficace… mais bridée\n\n### Définition technique\n\nLa 3G, ou **UMTS/HSPA (Universal Mobile Telecommunications System / High Speed Packet Access)**, représente la troisième génération de réseaux mobiles. Déployée massivement au début des années 2000, elle a permis d’augmenter significativement les débits par rapport à la 2G et de démocratiser l’internet mobile.\n\n* **Débit théorique descendant** : de 384 kbit/s (UMTS) à 42 Mbit/s (HSPA+)\n* **Débit théorique montant** : de 64 kbit/s à 5,76 Mbit/s selon la version HSPA+\n* **Latence moyenne** : 150–200 ms\n\nGrâce à ces caractéristiques, la 3G pouvait supporter des usages multimédias modérés et une communication fluide pour des applications professionnelles légères.\n\n---\n\n### Usages typiques de la 3G\n\nLa 3G reste adaptée pour :\n\n* **Email et messagerie instantanée** : navigation fluide pour les échanges professionnels ou personnels.\n* **Surf web** : pages web standardisées et consultation de contenus multimédias légers.\n* **Visioconférence légère** : qualité suffisante pour des appels vidéo 480p.\n* **VoIP** : appels téléphoniques via internet, avec une qualité correcte sur réseaux non saturés.\n\nCes usages font de la 3G une technologie encore fonctionnelle, notamment dans les zones rurales ou pour les utilisateurs peu exigeants en débits élevés.\n\n---\n\n### Exemple concret : Free Mobile et bridage en itinérance\n\nAvec l’essor de la 4G et, plus récemment, de la 5G, certains opérateurs ont commencé à **réduire volontairement les performances de la 3G** pour encourager la migration vers les nouvelles générations. Free Mobile, en itinérance sur le réseau Orange, est un exemple emblématique :\n\n* **Depuis 2020**, le débit est limité à **384 kbit/s** dans les deux sens pour la 3G en itinérance.\n* Le **calendrier de réduction progressive** a été le suivant :\n\n * **2016** : ~5 Mbit/s descendant\n * **2017** : ~1 Mbit/s descendant\n * **2019** : 768 kbit/s descendant, 384 kbit/s montant\n * **2020** : 384 kbit/s descendant et montant\n\nCe bridage transforme la 3G d’une technologie performante en un réseau à très faible débit, affectant la fluidité des usages cités ci-dessus.\n\n---\n\n### Comparaison débits théoriques vs réels\n\n| Technologie | Débit théorique descendant | Débit réel Free Mobile itinérance 3G |\n| ----------- | -------------------------- | ------------------------------------ |\n| UMTS | 384 kbit/s – 2 Mbit/s | 384 kbit/s |\n| HSPA | 1,8 – 7,2 Mbit/s | 384–768 kbit/s |\n| HSPA+ | 21 – 42 Mbit/s | 384 kbit/s |\n\n**Schéma suggéré** : visualiser le décalage entre débit théorique et débit réel selon génération et itinérance. Cela montre clairement la dégradation volontaire de la 3G.\n\n---\n\n### Impact pour l’utilisateur\n\n* Navigation ralentie, streaming limité à une résolution faible.\n* Visioconférences perturbées ou coupures fréquentes.\n* Motivation implicite à migrer vers la 4G ou la 5G pour bénéficier de débits normaux.\n\nEn résumé, la 3G demeure techniquement suffisante pour de nombreux usages, mais **les opérateurs réduisent volontairement les performances**, transformant un service pleinement fonctionnel en expérience limitée.\n\n---\n\n### Références\n\n* [01net.com – Free Mobile et bridage 3G](https://www.01net.com/actualites/free-mobile-l-itinerance-3g-orange-sera-plus-lente-des-le-1er-janvier-avant-de-disparaitre-1833059.html)\n* [Fiche Free Mobile – Débits 3G (PDF)](https://mobile.free.fr/docs/fis/Fiche_information_standardisee_2020-12-15.pdf)","featured":false,"files_meta":[],"external_links":[],"tags":[]} \ No newline at end of file diff --git a/_cache/articles/976fd7f0-e53d-44e2-a879-58194765f3cf.json b/_cache/articles/976fd7f0-e53d-44e2-a879-58194765f3cf.json deleted file mode 100644 index 509e494..0000000 --- a/_cache/articles/976fd7f0-e53d-44e2-a879-58194765f3cf.json +++ /dev/null @@ -1 +0,0 @@ -{"uuid":"976fd7f0-e53d-44e2-a879-58194765f3cf","slug":"activer-les-mises-a-jour-automatiques-sur-debian-pour-une-gestion-simplifiee-des-correctifs-de-securite","title":"Activer les mises à jour automatiques sur Debian pour une gestion simplifiée des correctifs de sécurité","author":"cedric@abonnel.fr","published":true,"published_at":"2026-01-06 20:45","created_at":"2026-01-06 20:45:52","updated_at":"2026-05-12 09:33:15","revisions":[{"n":1,"date":"2026-05-12 00:18:42","comment":"","title":"Mises à jour automatiques de sécurité sur Debian"},{"n":2,"date":"2026-05-12 00:22:53","comment":"","title":"Mises à jour automatiques de sécurité sur Debian"},{"n":3,"date":"2026-05-12 09:33:15","comment":"","title":"Mises à jour automatiques de sécurité sur Debian"}],"cover":"cover.svg","files_meta":{"5cfac9bc6078c2d1-31391.svg":{"author":"Cédrix","source_url":""}},"external_links":[],"seo_title":"","seo_description":"","og_image":"","category":"linux","content":"# Activer les mises à jour automatiques sur Debian pour une gestion simplifiée des correctifs de sécurité\n\nDans un environnement de serveur ou de poste de travail, maintenir un système à jour avec les derniers correctifs de sécurité est crucial pour éviter toute vulnérabilité. Debian, l'une des distributions Linux les plus populaires et stables, propose des mécanismes permettant d'automatiser ce processus de mise à jour, et ainsi garantir que les correctifs de sécurité sont appliqués sans nécessiter une intervention manuelle.\n\nComment activer les mises à jour automatiques sur une machine Debian, en se concentrant spécifiquement sur les correctifs de sécurité ? Comment configurer ce processus pour un contrôle fin et comment tester que tout fonctionne correctement ?\n\n### Étapes pour activer les mises à jour automatiques\n\n#### 1. Installer les paquets nécessaires\n\nLa première étape pour activer les mises à jour automatiques sur Debian consiste à installer les outils nécessaires. Cela inclut le paquet `unattended-upgrades`, qui permet de gérer les mises à jour automatiques, ainsi que `apt-listchanges` qui permet de recevoir des informations sur les paquets mis à jour.\n\nExécutez la commande suivante pour installer ces paquets :\n\n```bash\nsudo apt update\nsudo apt install -y unattended-upgrades apt-listchanges\n```\n\n#### 2. Configurer `unattended-upgrades`\n\nUne fois le paquet installé, vous devez configurer `unattended-upgrades` pour qu'il applique automatiquement les mises à jour de sécurité. Cela se fait en modifiant certains fichiers de configuration dans `/etc/apt/apt.conf.d/`.\n\nExécutez la commande suivante pour reconfigurer `unattended-upgrades` :\n\n```bash\nsudo dpkg-reconfigure --priority=low unattended-upgrades\n```\n\nLors de la configuration, vous serez invité à activer les mises à jour automatiques. Assurez-vous que l'option **\"Install security updates\"** est sélectionnée. Cela garantit que les mises à jour de sécurité seront appliquées automatiquement sans intervention manuelle.\n\n#### 3. Vérifier la configuration dans `/etc/apt/apt.conf.d/50unattended-upgrades`\n\nUne fois la configuration initiale terminée, il est important de vérifier que le fichier de configuration principal de `unattended-upgrades` permet bien l'installation des mises à jour de sécurité.\n\nÉditez le fichier `/etc/apt/apt.conf.d/50unattended-upgrades` avec votre éditeur de texte préféré, par exemple `nano` :\n\n```bash\nsudo nano /etc/apt/apt.conf.d/50unattended-upgrades\n```\n\nDans ce fichier, vous devez vous assurer que la ligne suivante est présente et non commentée :\n\n```plaintext\n\"${distro_id}:${distro_codename}-security\";\n```\n\nCela garantit que les mises à jour de sécurité de votre version de Debian seront appliquées automatiquement.\n\n**Optionnel** : Si vous souhaitez également appliquer des mises à jour non critiques (par exemple des mises à jour mineures ou des corrections de bugs), vous pouvez activer les mises à jour pour tous les paquets en dé-commentant ou ajoutant cette ligne :\n\n```plaintext\n\"${distro_id}:${distro_codename}-updates\";\n```\n\nCependant, cette option peut introduire des mises à jour qui ne sont pas toujours aussi urgentes que celles de sécurité. Il est donc recommandé de ne l'activer que si vous êtes à l'aise avec des mises à jour supplémentaires automatiques.\n\n#### 4. Tester la configuration des mises à jour automatiques\n\nPour vous assurer que `unattended-upgrades` fonctionne comme prévu, il est utile de faire un test en mode \"dry-run\". Cela permet de simuler les mises à jour sans les appliquer réellement.\n\nExécutez la commande suivante :\n\n```bash\nsudo unattended-upgrades --dry-run --debug\n```\n\nCette commande simule le processus de mise à jour et affiche des informations détaillées sur les paquets qui seraient mis à jour. Cela vous permet de vérifier que la configuration fonctionne correctement et que seules les mises à jour de sécurité (ou celles que vous avez spécifiées) seront prises en compte.\n\n#### 5. Vérifier les logs\n\nUne fois les mises à jour automatiques activées et en cours d'exécution, il est important de vérifier régulièrement les logs pour vous assurer qu'aucune mise à jour n'a échoué. Les logs de `unattended-upgrades` sont stockés dans le fichier `/var/log/unattended-upgrades/unattended-upgrades.log`.\n\nPour consulter les logs, utilisez la commande suivante :\n\n```bash\nsudo cat /var/log/unattended-upgrades/unattended-upgrades.log\n```\n\nCela vous permet de suivre les mises à jour installées automatiquement et d’identifier tout problème éventuel.\n\n---\n\nEn activant les mises à jour automatiques sur votre machine Debian, vous vous assurez que les correctifs de sécurité sont appliqués rapidement et sans intervention manuelle, réduisant ainsi le risque de vulnérabilités exploitables.\n\nN'oubliez pas que bien que l'activation des mises à jour automatiques pour les correctifs de sécurité soit essentielle, il est également important de tester régulièrement le processus, de vérifier les logs, et de maintenir une vigilance pour toute mise à jour système majeure qui pourrait nécessiter une attention spéciale.\n\nEn appliquant cette configuration, vous minimisez les risques liés à des failles de sécurité tout en maintenant la stabilité et la sécurité de votre environnement Debian.\n","featured":false,"tags":[]} \ No newline at end of file diff --git a/_cache/articles/9f794c3d-714b-4b6d-8a5e-d56f7d984cc1.json b/_cache/articles/9f794c3d-714b-4b6d-8a5e-d56f7d984cc1.json deleted file mode 100644 index 5287570..0000000 --- a/_cache/articles/9f794c3d-714b-4b6d-8a5e-d56f7d984cc1.json +++ /dev/null @@ -1 +0,0 @@ -{"uuid":"9f794c3d-714b-4b6d-8a5e-d56f7d984cc1","slug":"circuit-de-demodulation-ask","title":"Démodulation ASK","author":"cedric@abonnel.fr","published":true,"published_at":"2025-11-23 08:38:53","created_at":"2025-11-23 08:38:53","updated_at":"2025-11-23 08:38:53","revisions":[],"cover":"","files_meta":[],"external_links":[],"seo_title":"","seo_description":"","og_image":"","category":"Électronique","content":"# Démodulation ASK\n\nLes compteurs électroniques Linky fournis par Enedis (anciennement EDF/ERDF) transmettent automatiquement leurs informations via une **liaison Téléinformation (TIC)**. Cette liaison fonctionne comme une communication série, mais le signal brut n’est **pas directement exploitable** en TTL ou RS232 : il nécessite un **conditionnement électrique** pour être compatible avec un microcontrôleur ou un ordinateur.\n\nUne fois ce traitement effectué, il est possible de récupérer les données suivantes :\n\n- la **consommation instantanée**,\n- les **index d’énergie (kWh)**,\n- l’**intensité utilisée**,\n- la **puissance maximale autorisée**,\n- et d’autres informations selon les modes du compteur.\n\n---\n\nLa transmission s’effectue via une **modulation ASK (Amplitude Shift Keying) à 50 kHz** :\n\n- **0 V** → bit logique **1**,\n- **~10 V crête à 50 kHz** → bit logique **0**.\n\nAinsi, le compteur encode les bits en faisant varier **l’amplitude** du signal. Pour être lisible par un microcontrôleur, ce signal doit être **démodulé** puis converti en **signal logique TTL**.\n\n---\n\nL’accès à cette liaison se fait via les bornes **I1** et **A** du compteur :\n\n- **Sans charge connectée** : tension jusqu’à **13 V RMS max**.\n- **Avec récepteur** : tension régulée autour de **6 V RMS ±10% à 50 kHz**, soit environ **12 V pic**, puissance minimale **130 mW**.\n\nCette alimentation est suffisante pour alimenter un optocoupleur.\n\n![](teleinformation-modulee-ask-50-khz.jpg)\n\n---\n\nLa sortie Téléinfo doit être **protégée contre les court-circuits** et l’interface doit pouvoir **résister accidentellement à la tension secteur (230 V / 50 Hz)** en cas de mauvais branchement.\n\nEnedis impose également que la **charge maximale** sur les bornes I1–A n’excède pas **2 kΩ en parallèle**, pour que le compteur puisse délivrer correctement son signal.\n\n---\n\nPour réaliser mon interface Téléinfo vers Raspberry Pi, je me suis appuyé sur le schéma de Charles Hallard :\n\n- **Optocoupleur** : isolation galvanique et conversion du signal modulé en TTL.\n- **Résistances adaptées** : pour respecter la charge maximale Téléinfo et assurer un signal correct.\n\nLe matériel utilisé :\n\n- Plaque pré-percée\n- 2 résistances\n- Optocoupleur (SFH620 ou équivalent)\n- Bornier pour raccordement au compteur\n- Câbles pour Raspberry Pi\n- Câble réseau pour bornes TIC\n\n![](opto_teleinfo_1.png)\n\nCe montage fonctionnait bien avec un Raspberry Pi 2. Mais plus avec un ESP8266.\n\n---\n\n## Pourquoi ajouter un MOSFET dans l’interface Téléinfo ?\nHallard explique que l’**opto-coupleur seul** peut fournir un signal instable, peu compatible avec certains microcontrôleurs (ESP32, ESP8266, Raspberry Pi). ([hallard.me](https://hallard.me/demystifier-la-teleinfo/))\n\nLe **MOSFET N** (ex. BS170) permet de :\n\n- **Tampon logique** : transforme le signal opto en un signal carré propre, avec des niveaux 0 V / Vcc conformes aux GPIO.\n- **Correction de polarité** : inverse le signal si nécessaire pour correspondre au protocole Téléinfo.\n- **Fiabilité** : front net et signal stable, même à 9600 bauds.\n- **Respect de la charge Téléinfo** : limite la charge vue par le compteur tout en délivrant un signal TTL fiable.\n\n---\n\n## Décoder l’ASK =\nGrâce à l’interface (opto + MOSFET), la **démodulation ASK** est déjà assurée. Le flux Téléinfo est désormais disponible en **signal TTL stable**.\n\nIl suffit ensuite de lire ce flux série pour décoder les trames Téléinfo au format ASCII.\n\nMatériel conseillé :\n\n- **Raspberry Pi** : analyser, stocker, ou intégrer les données dans un système domotique via Python ou Node-RED.\n Voir : \n- **ESP32 / ESP8266** : lecture compacte et connectée, envoi vers serveur, MQTT, ou interface web.\n Voir : \n\nCes équipements lisent le signal TTL, décodent les trames normalisées et rendent disponibles des informations comme : consommation instantanée, index, puissance souscrite, et états du compteur.","featured":false,"tags":[]} \ No newline at end of file diff --git a/_cache/articles/a2487513-2848-4e62-bd19-d8ebb205e502.json b/_cache/articles/a2487513-2848-4e62-bd19-d8ebb205e502.json deleted file mode 100644 index bf08630..0000000 --- a/_cache/articles/a2487513-2848-4e62-bd19-d8ebb205e502.json +++ /dev/null @@ -1 +0,0 @@ -{"uuid":"a2487513-2848-4e62-bd19-d8ebb205e502","slug":"progressive-web-apps-dossier-2026","title":"Progressive Web Apps — Dossier 2026","author":"cedric@abonnel.fr","published":true,"published_at":"2026-05-15 07:53","created_at":"2026-05-13 18:58:29","updated_at":"2026-05-13 19:06:33","revisions":[{"n":1,"date":"2026-05-13 19:02:08","comment":"Contenu modifié","title":"Progressive Web Apps — Dossier 2026"}],"cover":"","files_meta":{"cover.jpg":{"author":"","source_url":"https://www.pragimtech.com/blog/contribute/article_images/1220210424145927/progressive-web-apps.jpg"},"_thumb_3b36733949021940-73450.jpg":{"author":"","source_url":""},"_thumb_6cf992e9f28c8172-4217.png":{"author":"","source_url":""},"_thumb_442161d0a89ddd20-93141.png":{"author":"","source_url":""},"_thumb_926396967ba5066a-5819.png":{"author":"","source_url":""},"_thumb_92af148c2c6c0f4e-30461.png":{"author":"","source_url":""},"_thumb_d713074303b20cbd-5978.png":{"author":"","source_url":""},"_thumb_da0580ecf0511076-371380.png":{"author":"","source_url":""},"_thumb_dae1b79a9d60ae4b-22161.jpg":{"author":"","source_url":""}},"external_links":[{"url":"http://pwastats.com/","name":"PWA Stats","added_at":"2026-05-13 19:01:07","meta":{"mime":"text/html","size":7116,"description":"A collection of Progressive Web App case studies.","og_image":"/file?uuid=a2487513-2848-4e62-bd19-d8ebb205e502&name=_thumb_6cf992e9f28c8172-4217.png","site_name":"PWA Stats","og_type":"website"}},{"url":"https://web.dev/case-studies","name":"Case studies","added_at":"2026-05-13 19:02:00","meta":{"mime":"text/html","size":14236,"og_image":"/file?uuid=a2487513-2848-4e62-bd19-d8ebb205e502&name=_thumb_3b36733949021940-73450.jpg","site_name":"web.dev","og_type":"website","language":"en","canonical":"https://web.dev/case-studies"}},{"url":"https://almanac.httparchive.org/","name":"The 2025 Web Almanac","added_at":"2026-05-13 19:03:37","author":"Rick Viscomi","meta":{"mime":"text/html","size":15541,"description":"The Web Almanac is an annual state of the web report combining the expertise of the web community with the data and trends of the HTTP Archive.","og_image":"/file?uuid=a2487513-2848-4e62-bd19-d8ebb205e502&name=_thumb_92af148c2c6c0f4e-30461.png","og_type":"article","date":"2025-12-09T00:00:00.000Z","canonical":"https://almanac.httparchive.org/en/2025/"}},{"url":"https://www.pwabuilder.com/","name":"PWABuilder","added_at":"2026-05-13 19:03:54","meta":{"mime":"text/html","size":2467,"description":"Publish your Progressive Web App (PWA) to app stores","og_image":"/file?uuid=a2487513-2848-4e62-bd19-d8ebb205e502&name=_thumb_da0580ecf0511076-371380.png","og_type":"website"}},{"url":"https://developer.chrome.com/docs/workbox","name":"Workbox","added_at":"2026-05-13 19:04:09","meta":{"mime":"text/html","size":19258,"description":"Build progressive web apps (PWAs) with Workbox - the Service Worker library from the Chrome team","site_name":"Chrome for Developers","og_type":"website","language":"en","canonical":"https://developer.chrome.com/docs/workbox","og_image":"/file?uuid=a2487513-2848-4e62-bd19-d8ebb205e502&name=_thumb_926396967ba5066a-5819.png"}},{"url":"https://learn.microsoft.com/en-us/microsoft-edge/progressive-web-apps-chromium/","name":"Overview of Progressive Web Apps (PWAs) - Microsoft Edge Developer documentation | Microsoft Learn","added_at":"2026-05-13 19:04:29","author":"MSEdgeTeam","meta":{"mime":"text/html","size":53645,"description":"Progressive Web Apps (PWAs) run natively on Windows 10 or later. Here's everything you need to know about PWAs, as a web developer.","og_image":"/file?uuid=a2487513-2848-4e62-bd19-d8ebb205e502&name=_thumb_442161d0a89ddd20-93141.png","og_type":"website","canonical":"https://learn.microsoft.com/en-us/microsoft-edge/progressive-web-apps/"}},{"url":"https://developer.apple.com/documentation/usernotifications/sending-web-push-notifications-in-web-apps-and-browsers","name":"Sending web push notifications in web apps and browsers | Apple Developer Documentation","added_at":"2026-05-13 19:04:48","meta":{"mime":"text/html","size":3840,"description":"Update your web server and website to send push notifications that work in Safari, other browsers, and web apps, following cross-browser standards.","og_image":"/file?uuid=a2487513-2848-4e62-bd19-d8ebb205e502&name=_thumb_dae1b79a9d60ae4b-22161.jpg","site_name":"Apple Developer Documentation","og_type":"website","language":"en_US"}},{"url":"https://developer.mozilla.org/fr/docs/Web/Progressive_web_apps","name":"Applications web progressives | MDN","added_at":"2026-05-13 19:05:14","meta":{"mime":"text/html","size":18140,"description":"Les applications web progressives (ou progressive web applications en anglais, abrégées en PWAs) sont des applications web qui utilisent les service workers, les manifestes, et d'autres fonctionnalités de la plateforme web, avec l'amélioration progressive pour fournir aux utilisatrices et utilisateurs une expérience équivalente à celle des applications natives.","og_image":"/file?uuid=a2487513-2848-4e62-bd19-d8ebb205e502&name=_thumb_d713074303b20cbd-5978.png","site_name":"MDN Web Docs","language":"fr","canonical":"https://developer.mozilla.org/fr/docs/Web/Progressive_web_apps"}},{"url":"https://web.dev/explore/progressive-web-apps","name":"Progressive Web Apps  |  web.dev","added_at":"2026-05-13 19:06:29","meta":{"mime":"text/html","size":16488,"og_image":"/file?uuid=a2487513-2848-4e62-bd19-d8ebb205e502&name=_thumb_3b36733949021940-73450.jpg","site_name":"web.dev","og_type":"website","language":"en","canonical":"https://web.dev/explore/progressive-web-apps"}}],"seo_title":"","seo_description":"","og_image":"https://varlog.a5l.fr/file?uuid=a2487513-2848-4e62-bd19-d8ebb205e502&name=cover.jpg","category":"","content":"# Progressive Web Apps — Dossier 2026\n\n## 1. Qu'est-ce qu'une PWA ?\n\nUne **Progressive Web App** est une application web qui, grâce à des APIs modernes des navigateurs, se comporte comme une application native : installable sur l'écran d'accueil, capable de fonctionner hors ligne, de recevoir des notifications push, de s'intégrer au système d'exploitation, tout en restant un site web indexable par les moteurs de recherche.\n\nLe mot clé est **progressive** : l'expérience s'enrichit selon les capacités du navigateur et de l'appareil. Sur un Chrome récent sous Android, la PWA offre une expérience proche du natif ; sur un vieux navigateur, elle reste un site web fonctionnel.\n\nUne PWA repose sur trois piliers techniques :\n\n- **HTTPS obligatoire** — sécurité et confiance, prérequis pour toutes les APIs sensibles.\n- **Service Worker** — un script JavaScript qui tourne en arrière-plan, intercepte les requêtes réseau, gère le cache et les notifications.\n- **Manifest** (`manifest.webmanifest`) — un fichier JSON qui décrit l'application (nom, icônes, couleurs, mode d'affichage) pour permettre son installation.\n\nTrois critères définissent une PWA selon Google : elle doit être **fiable** (charge instantanément, même hors ligne), **rapide** (réagit vite aux interactions) et **engageante** (sensation d'application native, réengagement par notifications).\n\n## 2. Histoire et promoteurs\n\nL'idée d'une convergence web/natif n'est pas neuve. Steve Jobs, en 2007, présentait initialement l'iPhone sans App Store : les développeurs étaient censés faire des « web apps ». L'App Store est arrivé un an plus tard et a marginalisé cette vision pendant près d'une décennie.\n\nLe terme **« Progressive Web App »** est proposé en 2015 par la designer Frances Berriman et l'ingénieur Google **Alex Russell**, pour désigner les sites tirant parti des nouvelles APIs (service workers notamment, standardisés à partir de 2014-2015).\n\n**Les promoteurs historiques :**\n\n- **Google** — moteur principal. Pousse la spécification, intègre les PWA à Chrome, Android, ChromeOS, et au Play Store (depuis 2019, on peut publier une PWA empaquetée via TWA — Trusted Web Activity).\n- **Microsoft** — second souffle majeur. Edge intègre les PWA nativement, et Windows permet leur publication au Microsoft Store via packaging MSIX. En mai 2025, Edge a ajouté les **App Actions on Windows** pour les PWA, améliorant la découvrabilité système.\n- **Mozilla** — soutien historique des standards, support solide dans Firefox (bien que l'installation desktop ait été retirée puis partiellement réintégrée selon les versions).\n- **Apple** — adoption lente et réticente, voir section 6.\n\n**Les premiers grands déploiements** (vers 2016-2017) ont servi de cas d'école : Twitter Lite, AliExpress, Pinterest, Flipkart, Starbucks, Uber, Tinder, Trivago. Tous ont publié des chiffres montrant des gains d'engagement et de conversion significatifs, ce qui a légitimé le modèle auprès des grandes entreprises.\n\n## 3. Comment ça marche techniquement\n\n### 3.1 Le manifeste\n\nFichier JSON déclaratif qui dit au navigateur : « ce site est installable, voici comment il doit se présenter ».\n\n```json\n{\n \"name\": \"Mon Application\",\n \"short_name\": \"MonApp\",\n \"start_url\": \"/\",\n \"display\": \"standalone\",\n \"background_color\": \"#ffffff\",\n \"theme_color\": \"#0066cc\",\n \"icons\": [\n { \"src\": \"/icons/icon-192.png\", \"sizes\": \"192x192\", \"type\": \"image/png\" },\n { \"src\": \"/icons/icon-512.png\", \"sizes\": \"512x512\", \"type\": \"image/png\" }\n ]\n}\n```\n\nRéférencé dans le HTML :\n\n```html\n\n\n```\n\nLe mode `display: standalone` retire la barre d'adresse au lancement depuis l'écran d'accueil ; `fullscreen` masque même la barre système.\n\n### 3.2 Le Service Worker\n\nScript JavaScript qui s'exécute dans un thread séparé, sans accès direct au DOM, et qui agit comme un **proxy programmable** entre l'application et le réseau.\n\n```javascript\n// sw.js\nconst CACHE_NAME = 'app-v1';\nconst ASSETS = ['/', '/index.html', '/styles.css', '/app.js', '/icons/icon-192.png'];\n\n// Installation : on précharge les ressources critiques\nself.addEventListener('install', (event) => {\n event.waitUntil(\n caches.open(CACHE_NAME).then((cache) => cache.addAll(ASSETS))\n );\n});\n\n// Activation : on nettoie les anciens caches\nself.addEventListener('activate', (event) => {\n event.waitUntil(\n caches.keys().then((keys) =>\n Promise.all(keys.filter((k) => k !== CACHE_NAME).map((k) => caches.delete(k)))\n )\n );\n});\n\n// Fetch : stratégie cache-first, puis réseau en fallback\nself.addEventListener('fetch', (event) => {\n event.respondWith(\n caches.match(event.request).then((cached) => cached || fetch(event.request))\n );\n});\n```\n\nEnregistrement depuis la page principale :\n\n```javascript\nif ('serviceWorker' in navigator) {\n navigator.serviceWorker.register('/sw.js');\n}\n```\n\n### 3.3 Stratégies de cache\n\nQuatre patterns canoniques selon le type de ressource :\n\n- **Cache-first** — sert le cache, va sur le réseau si absent. Idéal pour les assets statiques (CSS, JS, polices).\n- **Network-first** — tente le réseau, retombe sur le cache en cas d'échec. Idéal pour les contenus dynamiques (articles, posts).\n- **Stale-while-revalidate** — sert le cache immédiatement, met à jour en arrière-plan. Bon compromis pour les contenus semi-dynamiques (listes, avatars).\n- **Network-only / Cache-only** — cas particuliers (analytics, données critiques).\n\n### 3.4 Les APIs modernes mobilisables\n\nEn 2026, l'écosystème PWA s'appuie sur un éventail large :\n\n- **Push API + Notifications API** — notifications push, y compris sur iOS 16.4+ (sous conditions).\n- **Background Sync** — différer une requête jusqu'au retour de la connectivité (Chrome/Edge ; pas sur iOS).\n- **Periodic Background Sync** — déclencher du code à intervalle régulier (Chrome/Edge uniquement).\n- **Web Share API** — utiliser le menu de partage natif du système.\n- **File System Access API** — lire/écrire dans des fichiers locaux (Chrome/Edge).\n- **WebGPU, WebAssembly SIMD, WebNN** — calcul intensif et inférence IA côté client.\n- **Badging API** — afficher un badge numérique sur l'icône d'app.\n- **Web Bluetooth, Web USB, Web Serial** — accès matériel (Chrome/Edge, hors iOS).\n- **Payment Request API** — paiements unifiés, dont Apple Pay sur Safari.\n\n## 4. Exemples emblématiques\n\nLes références suivantes ont structuré la perception du modèle PWA. Les chiffres sont ceux publiés par les entreprises à l'époque de leur migration.\n\n**Twitter Lite** (2017) — Twitter a déployé une PWA pesant moins de 1 Mo (contre 23 Mo pour l'app native Android). Résultat : +65 % de pages par session, +75 % de tweets envoyés, −20 % de taux de rebond. Nicolas Gallagher, alors lead du projet, résumait : « Twitter Lite is now the fastest, least expensive, and most reliable way to use Twitter. »\n\n**AliExpress** — Migration de leur site mobile vers une PWA. Doublement du temps passé par session, +104 % de taux de conversion pour les nouveaux utilisateurs sur tous les navigateurs.\n\n**Pinterest** — Refonte en PWA en 2017. Le poids initial du bundle JavaScript est passé de 650 Ko à 150 Ko. Temps passé +40 %, revenus publicitaires +44 %, engagement utilisateur +60 %.\n\n**Starbucks** — Une PWA pour la commande en ligne, environ 600 Ko (contre 148 Mo pour l'app iOS native). Double des commandes quotidiennes via le web, avec des chiffres particulièrement marqués sur les marchés à faible bande passante.\n\n**Spotify, Uber, Tinder, Trivago, BMW, Forbes, The Washington Post** — Tous ont déployé des versions PWA, soit en remplacement de leur site mobile, soit en complément de l'app native.\n\n**Note d'objectivité :** ces cas remontent majoritairement à 2017-2019. Beaucoup ont été suivis d'allers-retours stratégiques (certaines entreprises ont depuis re-priorisé le natif pour des raisons de fonctionnalités ou de distribution). Twitter, par exemple, a depuis fait évoluer son web app et son app native en parallèle. Ces chiffres restent illustratifs d'un potentiel, pas d'une vérité universelle.\n\n## 5. Où en est-on en 2026 ?\n\n### 5.1 Maturité du modèle\n\nTrois leviers ont fait basculer les PWA d'une expérimentation à une option pragmatique :\n\n1. **Maturité des APIs clés** — service worker stable, manifest standardisé, Web Push enfin disponible sur Safari (iOS 16.4+).\n2. **Intégration croissante par les OS et stores** — packaging MSIX vers le Microsoft Store, TWA vers le Play Store, App Actions sur Windows, mode app par défaut sur iOS 26.\n3. **Preuves de ROI répétées** sur une décennie de déploiements.\n\n### 5.2 Chiffres du marché\n\nLes estimations convergent vers une croissance soutenue. Selon Research Nester, le marché mondial des PWA dépassait 2,47 Md$ en 2025, est estimé à 3,14 Md$ en 2026, avec une projection à 34,58 Md$ d'ici 2035 (TCAC supérieur à 30 %).\n\nL'adoption reste cependant **concentrée** : selon les datasets publics (HTTP Archive / Web Almanac), une fraction modeste des sites déclarent un service worker, mais ces sites représentent une part disproportionnée du trafic mondial — autrement dit, ce sont les gros sites qui adoptent.\n\n### 5.3 Nouveautés récentes\n\n- **Declarative Web Push** (Safari 18.4, 2025) — alternative simplifiée au Web Push impératif, ne nécessitant pas de service worker pour des notifications basiques.\n- **App Actions on Windows** pour les PWA (Edge, mai 2025) — les PWA peuvent déclarer des actions invocables depuis la barre de recherche Windows.\n- **iOS 26** — tout site ajouté à l'écran d'accueil s'ouvre par défaut en mode application, même sans manifest. Avancée notable côté Apple.\n- **WebGPU, WebNN, WebAssembly SIMD** — débloquent l'inférence IA côté client, ouvrant la voie à des PWA capables de traitements lourds locaux (vision, NLP, recommandation).\n\n### 5.4 Verrous résiduels\n\n- **Découvrabilité** — beaucoup d'utilisateurs ne savent pas qu'« ajouter à l'écran d'accueil » installe une vraie app. Pas de prompt automatique sur iOS.\n- **Fragmentation des APIs** — Chrome/Edge avancent vite, Safari traîne, Firefox se positionne au cas par cas. Le détection de feature reste obligatoire.\n- **Stockage** — quotas plus stricts sur iOS qu'ailleurs, avec un risque d'éviction du cache après 7 jours sans utilisation sur certaines configurations.\n- **Monétisation** — pas de système intégré de paiement in-app comme l'App Store. Il faut passer par Stripe, Apple Pay via Payment Request, etc.\n\n## 6. Le cas iOS : limites et particularités\n\nApple a toujours été le frein principal à l'adoption universelle des PWA. Les raisons sont à la fois techniques et stratégiques (revenus de l'App Store, contrôle de la plateforme, monopole de WebKit).\n\n**Ce qui marche en 2026 sur iOS :**\n\n- Installation manuelle sur l'écran d'accueil (mais pas de prompt automatique).\n- Mode standalone (fenêtre sans barre d'adresse).\n- Service workers (avec des quotas et limitations).\n- Push notifications, **uniquement si la PWA a été installée à l'écran d'accueil** (depuis iOS 16.4).\n- Apple Pay via Payment Request API.\n- Géolocalisation, caméra, microphone.\n\n**Ce qui ne marche pas ou mal :**\n\n- Pas de Background Sync ni de Periodic Background Sync.\n- Pas de Web Bluetooth, Web USB, Web NFC.\n- Stockage limité, susceptible d'être purgé sans usage.\n- Pas de silent push ni de réveil en arrière-plan.\n- L'audience effectivement joignable par push est environ 10 à 15 fois plus petite que sur app native, une fois pris en compte le parcours d'installation multi-étapes.\n\n**Le détour DMA en Europe :** en 2024, Apple a brièvement annoncé supprimer le mode standalone pour les PWA dans l'UE (iOS 17.4) au prétexte du Digital Markets Act, ce qui aurait réduit les PWA à de simples raccourcis Safari. Décision rapidement annulée après tollé : le support PWA complet a été rétabli dans l'UE. Épisode révélateur de la position ambiguë d'Apple.\n\n**Verdict pratique 2026 :** Apple a fait des progrès (push en 16.4, Declarative Web Push en 18.4, app mode par défaut en iOS 26), mais à un rythme lent et avec des marges de manœuvre étroites. Pour un projet ciblant fortement iOS et reposant sur du push fiable, du background sync ou de l'intégration profonde au système, le natif (ou hybride) reste l'option plus sûre.\n\n## 7. PWA vs natif vs hybride\n\n| Critère | PWA | Natif (iOS/Android) | Hybride (RN, Flutter) |\n|---|---|---|---|\n| Codebase | Unique (web) | 2 séparés | 1 partagé, ponts natifs |\n| Distribution | URL + stores optionnels | App Store, Play Store obligatoires | Stores obligatoires |\n| Mises à jour | Instantanées | Validation store (jours) | Validation store |\n| Découvrabilité SEO | Oui (indexé Google) | Non | Non |\n| Coût de dev (typique) | 1× | 2-3× | 1,3-1,8× |\n| Performance UI | Bonne à très bonne | Maximale | Très bonne |\n| Accès matériel | Partiel, variable selon OS | Total | Quasi-total |\n| Notifications push iOS | Oui, sous conditions | Oui, sans conditions | Oui |\n| Frais store (achats numériques) | 0 % | 15-30 % | 15-30 % |\n| Hors ligne | Oui via service worker | Oui | Oui |\n\n**Quand choisir une PWA**\n\n- Audience web-first (desktop + mobile navigateur).\n- SEO comme canal d'acquisition stratégique.\n- Time-to-market et coût de maintenance prioritaires.\n- Contenu plutôt que fonctionnalités matérielles avancées.\n- Marchés émergents (stockage, bande passante limités).\n- Outils internes B2B, portails, contenus éditoriaux, e-commerce léger.\n\n**Quand préférer le natif**\n\n- Accès matériel profond (BLE, NFC, capteurs avancés, ARKit/ARCore).\n- Performances graphiques 120 fps, jeux, AR/VR.\n- Monétisation reposant sur l'achat in-app via stores.\n- Marque dépendant fortement de la présence App Store/Play Store.\n\n**Quand choisir hybride (React Native, Flutter)**\n\n- Présence store nécessaire mais sans le budget de deux codebases natives.\n- Équipe JavaScript ou Dart.\n- Besoins matériels modérés mais réels.\n\n## 8. Pour commencer : un MVP en 4 fichiers\n\nVoici la PWA minimale viable. Quatre fichiers, aucun framework, déployable sur n'importe quel hébergement HTTPS.\n\n### `index.html`\n\n```html\n\n\n\n \n \n Ma PWA\n \n \n \n\n\n

Bonjour

\n

Ceci est une PWA.

\n \n\n\n```\n\n### `manifest.webmanifest`\n\n```json\n{\n \"name\": \"Ma Progressive Web App\",\n \"short_name\": \"MaPWA\",\n \"description\": \"Démonstration minimale d'une PWA.\",\n \"start_url\": \"/\",\n \"scope\": \"/\",\n \"display\": \"standalone\",\n \"orientation\": \"portrait\",\n \"background_color\": \"#ffffff\",\n \"theme_color\": \"#0066cc\",\n \"icons\": [\n {\n \"src\": \"/icons/icon-192.png\",\n \"sizes\": \"192x192\",\n \"type\": \"image/png\",\n \"purpose\": \"any maskable\"\n },\n {\n \"src\": \"/icons/icon-512.png\",\n \"sizes\": \"512x512\",\n \"type\": \"image/png\",\n \"purpose\": \"any maskable\"\n }\n ]\n}\n```\n\n### `sw.js`\n\n```javascript\nconst CACHE_NAME = 'mapwa-v1';\nconst PRECACHE = [\n '/',\n '/index.html',\n '/manifest.webmanifest',\n '/icons/icon-192.png',\n '/icons/icon-512.png'\n];\n\nself.addEventListener('install', (event) => {\n event.waitUntil(\n caches.open(CACHE_NAME).then((cache) => cache.addAll(PRECACHE))\n );\n self.skipWaiting();\n});\n\nself.addEventListener('activate', (event) => {\n event.waitUntil(\n caches.keys().then((keys) =>\n Promise.all(\n keys.filter((k) => k !== CACHE_NAME).map((k) => caches.delete(k))\n )\n )\n );\n self.clients.claim();\n});\n\nself.addEventListener('fetch', (event) => {\n // Stale-while-revalidate pour les navigations\n if (event.request.mode === 'navigate') {\n event.respondWith(\n caches.match(event.request).then((cached) => {\n const fresh = fetch(event.request).then((response) => {\n caches.open(CACHE_NAME).then((c) => c.put(event.request, response.clone()));\n return response;\n }).catch(() => cached);\n return cached || fresh;\n })\n );\n return;\n }\n // Cache-first pour le reste\n event.respondWith(\n caches.match(event.request).then((cached) => cached || fetch(event.request))\n );\n});\n```\n\n### Icônes\n\nDeux fichiers PNG : `icons/icon-192.png` (192×192) et `icons/icon-512.png` (512×512). L'attribut `purpose: \"any maskable\"` permet à Android de découper l'icône selon la forme système (cercle, squircle, etc.).\n\n**Servir le tout en HTTPS** (obligatoire en production ; `localhost` fonctionne en dev). Configuration nginx/Apache : s'assurer que `manifest.webmanifest` est servi avec le content-type `application/manifest+json` et que `sw.js` n'est jamais mis en cache HTTP côté navigateur (sinon les mises à jour ne se propagent pas).\n\n```nginx\nlocation = /sw.js {\n add_header Cache-Control \"no-store, no-cache, must-revalidate\";\n expires off;\n}\n\nlocation = /manifest.webmanifest {\n add_header Content-Type \"application/manifest+json\";\n}\n```\n\n**Tester avec Lighthouse** (intégré à Chrome DevTools, onglet *Lighthouse* puis catégorie *Progressive Web App*) — fournit un score, identifie les manques, propose des corrections.\n\n## 9. Outils et frameworks\n\n**Workbox** (Google) — la bibliothèque de référence pour les service workers. Génère du SW à partir de configurations déclaratives, gère les stratégies de cache, le préchargement, la mise à jour. Souvent utilisée via un plugin de bundler.\n\n**Vite PWA Plugin** (`vite-plugin-pwa`) — l'option la plus simple pour un projet moderne basé sur Vite. Wrap Workbox, génère manifest et SW automatiquement.\n\n**Next.js** — supporte les PWA via `next-pwa` (basé sur Workbox).\n\n**Nuxt** — `@vite-pwa/nuxt` officiel.\n\n**Angular, Vue, Svelte** — tous disposent d'intégrations PWA officielles ou bien maintenues.\n\n**PWA Builder** (Microsoft) — outil web qui audit un site et génère le packaging pour les stores (MSIX pour Microsoft, TWA pour Play Store).\n\n**Lighthouse** — audit intégré à Chrome DevTools. Standard de fait pour vérifier la conformité PWA.\n\n**Côté PHP (pertinent au regard du contexte de cette doc)** — Symfony et Laravel n'ont pas d'extension PWA officielle, mais l'intégration est triviale puisqu'une PWA n'exige côté serveur que de servir correctement quelques fichiers statiques en HTTPS. Bundles comme `friendsofsymfony/elastica-bundle` ne couvrent pas le sujet ; c'est plutôt à l'asset pipeline (Webpack Encore, Vite) de gérer la génération du service worker.\n\n## 10. Pièges fréquents et bonnes pratiques\n\n**Le service worker piégé en cache** — `sw.js` lui-même ne doit jamais être mis en cache HTTP, sinon les utilisateurs restent bloqués sur une ancienne version. `Cache-Control: no-store` strict côté serveur.\n\n**Versionner le cache** — toujours inclure une version dans le nom du cache (`mapwa-v1`, `mapwa-v2`...) et purger les anciens à l'activation. Sans cela, des assets périmés peuvent persister indéfiniment.\n\n**Ne pas tout cacher** — précharger uniquement le strict nécessaire au shell de l'application. Le reste doit être mis en cache à la demande, avec une stratégie adaptée.\n\n**Tester hors ligne** — Chrome DevTools propose un mode *Offline* dans l'onglet *Network*. C'est le seul moyen de vérifier que les stratégies de cache fonctionnent.\n\n**Gérer la mise à jour** — quand un nouveau service worker est détecté, il s'installe mais n'est actif qu'après fermeture de tous les onglets de la PWA. Soit forcer via `skipWaiting()` + `clients.claim()` (rapide mais peut casser une session en cours), soit afficher à l'utilisateur une bannière « nouvelle version disponible ».\n\n**Détection de feature, jamais détection de navigateur** — `if ('serviceWorker' in navigator)`, `if ('PushManager' in window)`. Ne jamais sniffer `userAgent`.\n\n**Tester sur iOS réel** — l'émulateur Safari ne reproduit pas toutes les limitations. Un iPhone physique est indispensable pour valider l'expérience.\n\n**HTTPS impératif** — même en pré-prod. Les certificats Let's Encrypt sont gratuits ; un reverse proxy bien configuré (Caddy, nginx, Traefik) suffit. *NB : ce point recoupe directement la configuration habituelle d'un homelab avec reverse proxy.*\n\n**Manifest et icônes adaptatives** — utiliser `purpose: \"maskable\"` avec des icônes ayant une zone de sécurité de ~10 % autour du contenu, sinon Android va découper dans le visuel.\n\n**Pas de prompt d'installation intrusif** — Chrome déclenche automatiquement un mini-info-bar quand les critères PWA sont remplis. Si on veut un prompt personnalisé, intercepter l'événement `beforeinstallprompt` et le déclencher au moment opportun (jamais au premier chargement).\n\n```javascript\nlet deferredPrompt;\nwindow.addEventListener('beforeinstallprompt', (e) => {\n e.preventDefault();\n deferredPrompt = e;\n // Afficher un bouton « Installer » dans l'UI\n document.querySelector('#install-btn').hidden = false;\n});\n\ndocument.querySelector('#install-btn').addEventListener('click', async () => {\n if (!deferredPrompt) return;\n deferredPrompt.prompt();\n const { outcome } = await deferredPrompt.userChoice;\n console.log('Choix utilisateur :', outcome);\n deferredPrompt = null;\n});\n```\n\n## 11. Ressources\n\n**Documentation officielle**\n\n- web.dev — section *Progressive Web Apps* : https://web.dev/explore/progressive-web-apps\n- MDN Web Docs — *Progressive web apps* : https://developer.mozilla.org/fr/docs/Web/Progressive_web_apps\n- Apple Developer — *Sending web push notifications* : https://developer.apple.com/documentation/usernotifications/sending-web-push-notifications-in-web-apps-and-browsers\n- Microsoft Edge — *PWA on Windows* : https://learn.microsoft.com/en-us/microsoft-edge/progressive-web-apps-chromium/\n\n**Outils**\n\n- Workbox : https://developer.chrome.com/docs/workbox\n- PWA Builder : https://www.pwabuilder.com/\n- Lighthouse : intégré à Chrome DevTools, ou via CLI `npm i -g @lhci/cli`\n\n**Veille**\n\n- *Web Almanac* (HTTP Archive) — rapport annuel sur l'état du web, chapitre PWA.\n- *Can I Use* : https://caniuse.com/ — compatibilité navigateur pour chaque API.\n\n**Études de cas**\n\n- web.dev cases : https://web.dev/case-studies\n\n\n---\n\n*Document de référence — état au 13 mai 2026. À revoir tous les 6 à 12 mois, l'écosystème évoluant rapidement (notamment côté Apple).*","featured":false,"tags":[]} \ No newline at end of file diff --git a/_cache/articles/a55aeefd-28ae-4c3f-bfc1-c0400c3877c2.json b/_cache/articles/a55aeefd-28ae-4c3f-bfc1-c0400c3877c2.json deleted file mode 100644 index a6fb46b..0000000 --- a/_cache/articles/a55aeefd-28ae-4c3f-bfc1-c0400c3877c2.json +++ /dev/null @@ -1 +0,0 @@ -{"uuid":"a55aeefd-28ae-4c3f-bfc1-c0400c3877c2","slug":"pourquoi-les-operateurs-brident-ils-la-3g","title":"Pourquoi les opérateurs brident-ils la 3G ?","author":"cedric@abonnel.fr","published":true,"published_at":"2025-11-05 08:41:22","created_at":"2025-11-05 08:41:22","updated_at":"2025-11-05 08:41:22","revisions":[],"cover":"","category":"télécom","content":"# Pourquoi les opérateurs brident-ils la 3G ?\n\n## Explications scientifiques et économiques\n\nLa migration des utilisateurs de la 3G vers la 4G et la 5G ne se limite pas à une simple volonté commerciale. Plusieurs facteurs techniques et économiques expliquent pourquoi les opérateurs limitent progressivement les performances des anciennes générations.\n\n---\n\n### 1. Refarming du spectre\n\nLe **refarming** consiste à **réaffecter les fréquences radio utilisées par la 3G (900 MHz, 1800 MHz, 2100 MHz)** pour la 4G et désormais la 5G.\n\n* **Objectif :** optimiser l’utilisation du spectre radio limité et très convoité.\n* **Conséquence pour la 3G :** réduction des capacités réseau et baisse effective des débits.\n* **Avantage pour la 4G/5G :** meilleure couverture et débits accrus, tout en utilisant les bandes déjà déployées.\n\n---\n\n### 2. Coût d’entretien élevé des infrastructures 3G\n\nMaintenir un réseau 3G opérationnel est **coûteux** :\n\n* Les équipements (antennes, contrôleurs RNC, stations de base) vieillissent et nécessitent maintenance et mises à jour régulières.\n* Les coûts énergétiques et opérationnels sont proportionnellement plus élevés par bit transmis comparé à la 4G ou la 5G.\n* En parallèle, le nombre d’utilisateurs actifs sur la 3G diminue, ce qui réduit la rentabilité.\n\n> Le ratio coût par bit est donc nettement moins favorable pour la 3G : pour un flux de données équivalent, un opérateur dépense plus en 3G qu’en 4G ou 5G.\n\n---\n\n### 3. Incitation à la migration via bridage\n\nPour accélérer la transition vers les nouvelles générations :\n\n* Les opérateurs **brident les débits 3G** (exemple concret : Free Mobile en itinérance sur Orange).\n* Les utilisateurs rencontrent des **limitations visibles** : ralentissements web, streaming limité, visioconférence dégradée.\n* Cette stratégie crée une motivation implicite à souscrire à des forfaits 4G ou 5G, sans intervention directe sur les tarifs.\n\n---\n\n### Évolution des débits bridés sur 3G Free/Orange (2016–2020)\n\n| Année | Débit descendant | Débit montant |\n| ----- | ---------------- | ------------- |\n| 2016 | ~5 Mbit/s | 0,5–1 Mbit/s |\n| 2017 | ~1 Mbit/s | 0,5 Mbit/s |\n| 2019 | 768 kbit/s | 384 kbit/s |\n| 2020 | 384 kbit/s | 384 kbit/s |\n\n> Ce tableau illustre la **réduction progressive des performances**, transformant un réseau encore fonctionnel en service à très faible débit, pour encourager la migration vers la 4G/5G.\n\n---\n\n### Schéma suggéré : flux de données et coût par bit (3G vs 4G)\n\n```mermaid\nflowchart LR\n A[Utilisateur 3G] -->|Faible débit| B[Flux de données]\n B -->|Coût élevé par bit| C[Opérateur]\n \n D[Utilisateur 4G] -->|Débit élevé| E[Flux de données]\n E -->|Coût faible par bit| C[Opérateur]\n \n style A fill:#f9f,stroke:#333,stroke-width:1px\n style D fill:#9f9,stroke:#333,stroke-width:1px\n```\n\n* **Lecture du schéma :** la 3G transmet moins de données à un coût plus élevé pour l’opérateur. La 4G/5G, avec des débits supérieurs et un coût par bit réduit, devient nettement plus rentable.\n\n---\n\nLa dégradation volontaire des performances 3G s’explique par un **mix de contraintes techniques, économiques et stratégiques** :\n\n1. Libérer les fréquences pour les nouvelles générations (refarming).\n2. Réduire les coûts d’entretien des infrastructures obsolètes.\n3. Inciter les utilisateurs à migrer vers la 4G et la 5G, plus rentables et performantes.\n\n> Ce processus est récurrent : chaque génération prépare progressivement l’abandon de la précédente, toujours sous couvert d’optimisation technique et économique.\n","featured":false,"files_meta":[],"external_links":[],"tags":[]} \ No newline at end of file diff --git a/_cache/articles/a9474a83-43b3-484c-950e-37a27ff663fe.json b/_cache/articles/a9474a83-43b3-484c-950e-37a27ff663fe.json deleted file mode 100644 index adb187d..0000000 --- a/_cache/articles/a9474a83-43b3-484c-950e-37a27ff663fe.json +++ /dev/null @@ -1 +0,0 @@ -{"uuid":"a9474a83-43b3-484c-950e-37a27ff663fe","slug":"game-watch-diy-fabrication","title":"Gawfgbsdfg","author":"cedric@abonnel.fr","published":false,"featured":false,"published_at":"2026-05-13 18:08","created_at":"2026-05-13 18:12:54","updated_at":"2026-05-15 22:57:05","revisions":[{"n":1,"date":"2026-05-15 22:57:05","comment":"Titre modifié, contenu modifié","title":"Game & Watch DIY — Fabrication"}],"cover":"","files_meta":{"9ae9bc58c13ca70c-56046.jpg":{"author":"","source_url":"https://images.freeimages.com/images/previews/9df/nature-1370816.jpg"}},"external_links":[],"seo_title":"","seo_description":"","og_image":"","category":"fablab","tags":[],"content":"# Gawfgbsdfg\n\n> Document de travail consolidant le prototypage Arduino, la conception du PCB sous KiCad, les règles de conception et la préparation des fichiers pour la CNC.\n\n---\n\n## 1. Rappel : prototypage\n\n### 1.1 Liste du matériel\n\n- 1 × Arduino Uno\n- 1 × écran LCD 16 broches (non I²C)\n- 3 × boutons poussoirs\n- 1 × buzzer\n- 1 × résistance 220 Ω\n- 1 × potentiomètre 10 kΩ *(facultatif — voir remarque ci-dessous)*\n\n### 1.2 Câblage\n\n**Écran LCD** — câblage identique au projet n° 11 du livre de référence ; consulter les pages 116 et 117 pour le détail des broches.\n\nUne variante sans potentiomètre a été testée (LCD branché directement à la masse) mais elle a été abandonnée.\n\n**Boutons poussoirs** — montés en pull-up interne :\n\n```\nGND → Poussoir → broches 7, 8, 9 (avec INPUT_PULLUP dans le code)\n```\n\nPour comprendre le principe du montage pull-up : \n\n**Buzzer** — deux broches : l'une à la masse, l'autre sur la broche 6 (qui assure également l'alimentation lors du pilotage par `tone()`). Voir notamment le projet n° 6, p. 71.\n\n### 1.3 Type de jeu\n\nJeu d'arcade type *Asteroids*.\n\n### 1.4 Code de référence\n\n```cpp\n#include \nLiquidCrystal lcd(12, 11, 5, 4, 3, 2);\n\n// ---- Buzzer ----\nconst int PIN_BUZZER = 6;\ninline void beepShoot() { tone(PIN_BUZZER, 2000, 40); } // court\ninline void beepHit() { tone(PIN_BUZZER, 1200, 80); } // moyen\ninline void beepOver() { tone(PIN_BUZZER, 400, 600); } // long\n\n// ---- Boutons ----\nconst int boutonTir = 7;\nconst int boutonHaut = 8;\nconst int boutonBas = 9;\n\n// ---- Affichage ----\nbyte CH_VAISSEAU[8] = {\n B00100, B01110, B11111, B11111, B01110, B00100, B00100, B00000\n};\nbyte CH_MISSILE[8] = {\n B00100, B00100, B00100, B11111, B00100, B00100, B00100, B00000\n};\nbyte CH_ENNEMI[8] = {\n B11111, B10101, B11111, B01010, B11111, B10101, B11111, B00000\n};\n\nint vaisseauLigne = 1; // 0..1\n\nstruct Ennemi { int colonne; int ligne; bool actif; };\nconst int MAX_ENNEMIS = 3;\nEnnemi ennemis[MAX_ENNEMIS];\n\nstruct Projectile { int colonne; int ligne; bool actif; };\nconst int MAX_TIRS = 6;\nProjectile tirs[MAX_TIRS];\n\nunsigned long dernierDeplacement = 0;\nunsigned long intervalDeplacement = 500;\n\nunsigned long dernierTir = 0;\nconst unsigned long delaiTir = 180;\n\nint score = 0;\n\nvoid setup() {\n pinMode(boutonTir, INPUT_PULLUP);\n pinMode(boutonHaut, INPUT_PULLUP);\n pinMode(boutonBas, INPUT_PULLUP);\n pinMode(PIN_BUZZER, OUTPUT);\n\n lcd.begin(16, 2);\n lcd.createChar(0, CH_VAISSEAU);\n lcd.createChar(1, CH_MISSILE);\n lcd.createChar(2, CH_ENNEMI);\n lcd.print(\"Vaisseau Pret!\");\n delay(600);\n lcd.clear();\n\n randomSeed(analogRead(A0));\n for (int i = 0; i < MAX_ENNEMIS; i++) ennemis[i].actif = false;\n for (int i = 0; i < MAX_TIRS; i++) tirs[i].actif = false;\n}\n\nvoid loop() {\n unsigned long now = millis();\n\n if (digitalRead(boutonHaut) == LOW) vaisseauLigne = 0;\n else if (digitalRead(boutonBas) == LOW) vaisseauLigne = 1;\n\n // Tir multi-missiles + bip\n if (digitalRead(boutonTir) == LOW && now - dernierTir >= delaiTir) {\n int idx = slotTirLibre();\n if (idx >= 0) {\n tirs[idx].actif = true;\n tirs[idx].colonne = 1;\n tirs[idx].ligne = vaisseauLigne;\n dernierTir = now;\n beepShoot();\n }\n }\n\n if (now - dernierDeplacement > intervalDeplacement) {\n dernierDeplacement = now;\n\n // Déplacer les tirs\n for (int t = 0; t < MAX_TIRS; t++) {\n if (!tirs[t].actif) continue;\n tirs[t].colonne++;\n if (tirs[t].colonne > 15) tirs[t].actif = false;\n }\n\n // Déplacer les ennemis + détection des collisions\n for (int i = 0; i < MAX_ENNEMIS; i++) {\n if (!ennemis[i].actif) continue;\n ennemis[i].colonne--;\n\n for (int t = 0; t < MAX_TIRS; t++) {\n if (!tirs[t].actif) continue;\n if (ennemis[i].colonne == tirs[t].colonne\n && ennemis[i].ligne == tirs[t].ligne) {\n ennemis[i].actif = false;\n tirs[t].actif = false;\n score++;\n beepHit();\n break;\n }\n }\n\n if (ennemis[i].colonne <= 0) {\n beepOver();\n gameOver();\n }\n }\n\n // Apparition d'ennemis\n int actifs = 0;\n for (int i = 0; i < MAX_ENNEMIS; i++) if (ennemis[i].actif) actifs++;\n if (actifs < MAX_ENNEMIS && random(0, 10) > 7) {\n for (int i = 0; i < MAX_ENNEMIS; i++) if (!ennemis[i].actif) {\n ennemis[i].actif = true;\n ennemis[i].colonne = 15;\n ennemis[i].ligne = random(0, 2);\n break;\n }\n }\n\n updateLCD();\n }\n}\n\nint slotTirLibre() {\n for (int i = 0; i < MAX_TIRS; i++) if (!tirs[i].actif) return i;\n return -1;\n}\n\nstatic inline void printIfOnScreen(int col, int row, uint8_t ch) {\n if (col >= 0 && col <= 15 && row >= 0 && row <= 1) {\n lcd.setCursor(col, row);\n lcd.write(ch);\n }\n}\n\nvoid updateLCD() {\n lcd.clear();\n lcd.setCursor(10, 0); lcd.print(\"S:\"); lcd.print(score);\n\n printIfOnScreen(0, vaisseauLigne, 0); // vaisseau\n\n // Tirs\n for (int t = 0; t < MAX_TIRS; t++) {\n if (!tirs[t].actif) continue;\n if (tirs[t].colonne >= 0 && tirs[t].colonne <= 15) {\n lcd.setCursor(tirs[t].colonne, tirs[t].ligne);\n lcd.write((uint8_t)1); // missile\n }\n }\n\n // Ennemis\n for (int i = 0; i < MAX_ENNEMIS; i++) {\n if (!ennemis[i].actif) continue;\n if (ennemis[i].colonne >= 0 && ennemis[i].colonne <= 15) {\n lcd.setCursor(ennemis[i].colonne, ennemis[i].ligne);\n lcd.write((uint8_t)2); // ennemi\n }\n }\n}\n\nvoid gameOver() {\n lcd.clear();\n lcd.setCursor(3, 0); lcd.print(\"GAME OVER\");\n lcd.setCursor(4, 1); lcd.print(\"Score:\"); lcd.print(score);\n while (true) {}\n}\n```\n\n---\n\n## 2. Tutoriel : préparation sous KiCad\n\n### 2.1 Atelier — KiCad → PCB → CNC\n\n> ⚠️ Tutoriel expérimental : à revérifier, tester et adapter au besoin.\n\nSite officiel : — éditeur de PCB libre et gratuit.\n\n### 2.2 Création du projet\n\nDeux possibilités :\n\n- **Projet vierge** : *Fichier → Nouveau projet*\n- **Projet « shield Arduino »** : *Fichier → Nouveau projet à partir d'un modèle → Arduino UNO Shield*\n\nL'exemple suivant porte sur la création d'un shield Arduino Uno comportant 3 LED, 3 résistances de 220 Ω et 3 boutons.\n\nEnregistrer le projet dans un dossier dédié (ici, `shieldDynalab`). Il contient deux fichiers principaux :\n\n- `*.kicad_sch` — conception du circuit électronique (schéma)\n- `*.kicad_pcb` — agencement des composants sur le circuit imprimé et dessin des pistes\n\nOuvrir le fichier `.kicad_sch`. Le modèle Arduino Uno Shield contient déjà les broches correspondant aux pins de l'Arduino.\n\n### 2.3 Ajout des composants\n\nCliquer sur le bouton **Ajouter un symbole** (barre d'outils de droite, en haut). Dans le champ de recherche, saisir le nom du composant *en anglais* (par exemple `led`).\n\nSélectionner le composant dans la liste : son symbole électrique s'affiche dans le volet de droite. Puis, via le menu déroulant **Pas d'empreinte par défaut**, sélectionner l'empreinte qui correspond au composant physique (par exemple via la référence constructeur ou les dimensions).\n\n> **Empreinte** : espace physique occupé par le composant sur le PCB ainsi que la position de ses broches.\n\n- **SMD** *(Surface Mount Device)* — composant monté en surface\n- **THT** *(Through-Hole Technology)* — composant traversant\n\nVérifier que l'empreinte qui s'affiche en dessous semble cohérente, valider, puis poursuivre avec les autres composants (par exemple une résistance 220 Ω).\n\nSi une empreinte n'est pas trouvée dans la liste déroulante, ce n'est pas grave : il sera possible de l'attribuer plus tard, par exemple pour le bouton poussoir.\n\n### 2.4 Attribution des empreintes a posteriori\n\nPour attribuer une empreinte aux composants qui n'en ont pas encore, utiliser le bouton **Assigner des empreintes**. Une fenêtre liste tous les composants du projet ; il devient possible :\n\n- de modifier les empreintes déjà attribuées,\n- d'en attribuer de nouvelles depuis la liste à droite (recherche par mot-clé ou référence, en anglais ; double-clic pour valider).\n\nEn cas de doute, faire un *clic droit* sur le nom de l'empreinte → **Affichage de l'empreinte sélectionnée**, pour vérifier visuellement la cohérence.\n\nSi un composant n'existe pas dans la bibliothèque, il est possible de fabriquer une empreinte personnalisée à partir de zéro.\n\n### 2.5 Conception du circuit\n\nDans l'espace de travail, survoler un composant et utiliser les raccourcis suivants :\n\n| Touche | Action |\n|---|---|\n| `M` | *Move* — déplacer le composant |\n| `R` | *Rotate* — pivoter le composant |\n| `Ctrl + D` | *Duplicate* — dupliquer le composant (cliquer ailleurs pour le poser) |\n\nLe bouton **Ajouter un fil** (barre d'outils de droite) permet de relier les broches entre elles.\n\nSurvoler les noms des broches de l'Arduino et faire `Ctrl + D` pour les dupliquer à proximité du module en cours de conception (par exemple le module LED). Procéder de même pour la masse (GND).\n\nLe bouton **Annotation de la schématique** renomme automatiquement les composants pour éviter les conflits.\n\nAjouter des **indicateurs de non-connexion** sur toutes les broches qui ne seront reliées à rien : cela évite les erreurs lors du contrôle des règles électriques (ERC).\n\n> *Point à vérifier* : sur quelles broches exactement faut-il placer ces indicateurs ?\n\nIl est possible de sélectionner plusieurs composants à la fois pour les dupliquer en bloc (utile lorsqu'un même sous-module se répète sur le circuit).\n\n### 2.6 Passage à l'éditeur de PCB\n\nUne fois le schéma terminé : **sauvegarder**, puis cliquer sur **Commuter vers l'éditeur de PCB** (barre d'outils en haut). Cela ouvre le fichier `.kicad_pcb`.\n\nAu départ, l'éditeur ne contient pas encore les composants du schéma. Pour les importer : **Outils → Mettre à jour le PCB depuis le schéma**.\n\nLes composants apparaissent à l'écran, reliés par des « chevelus » aux broches correspondantes. Reste à les positionner, les orienter et les router de manière à éviter les croisements de pistes (le casse-tête commence ici).\n\n### 2.7 Paramétrage des contraintes (CNC)\n\nAvant de tracer les pistes, paramétrer les contraintes liées à la CNC : **Options du CI → Contraintes**.\n\nModifier les valeurs minimales pour permettre le passage de la fraise lors de l'isolation des pistes. Se baser sur les diamètres de fraises disponibles.\n\n### 2.8 Tracé des pistes\n\nLe bouton de tracé de piste permet de dessiner les connexions. Au clic sur une broche, l'écran s'assombrit et seules les broches reliées électriquement restent éclairées, ce qui facilite l'identification des connexions à réaliser.\n\n- **Trait rouge** : la piste elle-même\n- **Contour gris** : la zone d'isolation minimum\n\nKiCad maintient automatiquement la distance minimale par rapport aux autres broches et pistes.\n\n**Choix de la couche** — bien sélectionner la couche dans la liste de droite *avant* de tracer :\n\n- `F.Cu` *(front)* — pistes en cuivre côté composants\n- `B.Cu` *(back)* — pistes en cuivre côté soudure\n\nVérifier le rendu via **Affichage → Visualisation 3D** pour s'assurer que le résultat est physiquement réalisable et cohérent.\n\n> 💡 **Cas de la gravure CNC** : le cuivre ne traverse pas la plaque au niveau des perçages. Les pistes doivent donc être placées de l'autre côté par rapport aux composants. On travaille donc sur la couche `B.Cu`.\n>\n> Faire les pistes sur `F.Cu` donne certes un rendu plus clair, mais ne permet pas de souder les composants une fois la plaque gravée à la CNC.\n\n### 2.9 Export des fichiers de fabrication\n\n**Pistes (Gerber)** : *Fichier → Fichier de fabrication → Gerber `.gbr`*. Sélectionner les couches concernées, tracer ; la fenêtre du bas confirme l'enregistrement.\n\n**Perçages (Excellon)** : *Fichier → Fichier de fabrication → Fichier de perçage `.drl`*. Créer le fichier de perçage ET le plan de perçage.\n\n### 2.10 Conversion Gerber → SVG\n\nUtiliser **FlatCam** : il permet d'ouvrir des fichiers Gerber, de définir le diamètre et le type de fraise utilisée, et de générer automatiquement le tracé vectoriel du chemin que la CNC empruntera. Il est également possible d'ajouter manuellement des traits si nécessaire.\n\nÉtapes :\n\n1. Import des fichiers Gerber\n2. Paramétrage de l'isolation\n3. Création de la géométrie\n4. Adaptation manuelle du tracé si besoin\n5. Géométrie sélectionnée → **Export SVG** ou **DXF**, ou bien génération directe du chemin CNC\n\nTutoriel vidéo : \n\n### 2.11 Ressources complémentaires\n\nDocumentation KiCad en français sur Fabmanager : \n\n---\n\n## 3. Atelier 2 — déroulé\n\n1. Retour sur les règles de conception\n2. Retour d'expérience sur le projet\n3. Préparation des fichiers pour la CNC\n4. Usinage sur CNC\n5. **Et après ?** Exposition, autres ateliers, création d'un club ?\n\n---\n\n## 4. Règles de conception du PCB\n\n### 4.1 Points abordés ensemble\n\n#### 1. Type de fabrication et couches utilisées\n\nPCB simple face : les pistes sont gravées sur la face cuivre inférieure, les composants traversants sont placés sur la face supérieure. Dans KiCad, router donc les pistes sur la couche `B.Cu`.\n\n#### 2. Types de composants électroniques\n\n- **CMS** (Composants Montés en Surface) = **SMD** (*Surface Mount Device*) : même chose, en français et en anglais.\n- **THT** (*Through-Hole Technology*) : composants traversants.\n\n#### 3. Outils de vérification dans KiCad\n\n- **DRC** (*Design Rule Check*) : contrôle du respect des règles de conception du PCB.\n- **ERC** (*Electrical Rule Check*) : contrôle de la cohérence électrique du schéma.\n\n#### 4. Gestion des entrées non connectées\n\nNe pas laisser d'entrée non connectée (dite « flottante ») : cela peut entraîner des comportements imprévisibles. Sur un microcontrôleur, une broche inutilisée peut rester non connectée à condition d'être correctement configurée par programmation (en sortie, ou avec un état défini par exemple en pull-up/pull-down interne).\n\n#### 5. Routage et angles des pistes\n\nÉviter les angles à 90°, privilégier les angles à 45°. Cela améliore la qualité de fabrication et limite les discontinuités électriques, particulièrement sur les signaux rapides.\n\n#### 6. Gestion des interférences\n\nÉloigner les éléments susceptibles de générer des interférences (liaisons USB, signaux rapides, lignes d'horloge) des entrées analogiques (notamment audio).\n\nRègle générale : plus un signal est rapide, plus il est susceptible de générer ou de subir des interférences. Dans ce cas, privilégier des pistes courtes. À l'inverse, pour des signaux lents (bouton poussoir, LED, commande de relais, UART à faible débit), il est possible de déporter le composant avec des pistes plus longues sans risque significatif.\n\n#### 7. Notion de routage soigné\n\nUn routage soigné consiste à tracer les pistes de manière logique et maîtrisée :\n\n- privilégier des trajets courts et directs,\n- éviter les boucles inutiles,\n- limiter les croisements entre signaux sensibles et signaux bruyants,\n- conserver une proximité cohérente avec la masse pour assurer un bon retour de courant.\n\nUn tracé clair et structuré facilite également la lecture, la maintenance et le dépannage du circuit.\n\n#### 8. Routage des signaux USB\n\nLes lignes D+ et D− doivent avoir des longueurs identiques afin de préserver les caractéristiques du signal différentiel et maintenir une impédance cohérente.\n\n#### 9. Intérêt des PCB multicouches\n\nLorsque cela est possible, un PCB à quatre couches est une solution idéale : les couches internes dédiées à l'alimentation et à la masse améliorent la stabilité électrique et réduisent les interférences (notamment grâce à leur effet capacitif).\n\n#### 10. Prototypage avec Arduino et intégration\n\nUne carte Arduino Uno est un dispositif complet adapté au prototypage rapide.\n\nDans une mise en œuvre intégrée, il est possible de ne conserver que le microcontrôleur — par exemple l'ATmega328P — accompagné des éléments minimaux nécessaires à son fonctionnement :\n\n- un quartz (généralement 16 MHz) avec ses deux condensateurs associés,\n- une résistance de pull-up sur la broche `RESET`,\n- les condensateurs de découplage pour l'alimentation.\n\nPour faciliter l'usage, monter le microcontrôleur sur un support DIP (support tulipe) : cela permet de le retirer aisément pour le reprogrammer sur une carte Arduino.\n\n### 4.2 Bonnes pratiques supplémentaires (bonus à vérifier)\n\n#### 11. Découplage des alimentations\n\nChaque circuit intégré doit posséder un condensateur de découplage (typiquement 100 nF) placé au plus près de ses broches `VCC` et `GND`. Cela absorbe les variations rapides de courant, stabilise la tension et évite les comportements aléatoires difficiles à diagnostiquer. Pratique particulièrement importante pour les microcontrôleurs et les circuits logiques rapides.\n\n#### 12. Plan de masse (GND)\n\nPlutôt que de relier la masse uniquement par des pistes fines, utiliser une zone de cuivre continue. Cela réduit les interférences électromagnétiques, améliore le retour de courant et simplifie le routage.\n\nDans le cas d'une gravure CNC, cette pratique est facilement réalisable : le plan de masse correspond au reste de cuivre non gravé, isolé autour des pistes et pastilles. Dans KiCad, on peut remplir la carte avec un *copper pour* (zone cuivrée) affectée à `GND` et relier tous les points de masse.\n\n#### 13. Boucle de courant et retour de masse\n\nUn signal électrique forme toujours une boucle complète : aller + retour. Si le chemin de retour n'est pas proche de la piste du signal, le circuit peut capter ou émettre du bruit. Toujours garder un retour de masse continu et proche pour tous les signaux, en particulier les signaux rapides ou sensibles.\n\n#### 14. Largeur des pistes adaptée au courant\n\nToutes les pistes ne doivent pas avoir la même largeur :\n\n- les signaux logiques peuvent passer sur des pistes fines,\n- les pistes d'alimentation et celles transportant un courant important doivent être plus larges pour éviter surchauffe, chute de tension ou destruction de la piste.\n\nIl existe des calculateurs en ligne pour déterminer la largeur adaptée selon le courant et l'épaisseur du cuivre.\n\n#### 15. Points de test pour le débogage\n\nPrévoir sur le PCB des points de test accessibles pour mesurer rapidement la tension d'alimentation, vérifier les signaux critiques et suivre les lignes de communication importantes.\n\nConcrètement, ce sont de petites pastilles ou trous métallisés sur lesquels on peut poser la sonde d'un multimètre ou d'un oscilloscope. Cela facilite le dépannage sans avoir à dessouder des composants.\n\n#### 16. Dissipation thermique\n\nCertains composants génèrent de la chaleur (régulateurs de tension, transistors de puissance). Pour éviter la surchauffe et préserver la fiabilité du circuit, prévoir une surface de cuivre suffisante pour dissiper cette chaleur :\n\n- pistes plus larges connectées aux broches concernées,\n- raccordement de ces broches à des zones de cuivre étendues qui agissent comme dissipateurs thermiques.\n\nL'objectif est d'offrir un chemin efficace d'évacuation de la chaleur vers le PCB.\n\n#### 17. Séparation des alimentations\n\nSi le circuit comporte des parties analogiques, numériques et de puissance, séparer les plans ou pistes d'alimentation pour chaque domaine. Par exemple, les moteurs et autres charges fortes peuvent disposer de leur propre piste, tandis que la logique numérique et l'analogique sensible utilisent des pistes ou zones distinctes.\n\nMême si toutes les alimentations proviennent de la même source, cette séparation physique sur le PCB limite les interférences et améliore la stabilité du circuit.\n\n---\n\n## 5. Application au projet\n\n### 5.1 Processus itératif (retour d'expérience)\n\n#### Conception du PCB\n\n**#1 — Listing des composants**\n\nInventorier l'ensemble des composants nécessaires.\n\n**#2 — Premiers choix de conception**\n\n- forme globale du PCB,\n- composants accessibles ou non,\n- répartition face supérieure / face inférieure,\n- type d'alimentation (ne pas oublier la batterie !).\n\n**#3 — Test de positionnement et d'implantation réelle** *(si possible)*\n\n- repérer les conflits potentiels (ponts notamment),\n- prendre les mesures critiques,\n- définir la forme et la taille du PCB.\n\n**#4 — Schématisation sous KiCad**\n\n> 💡 Travailler si possible sur un double écran.\n\n- positionner et anticiper a minima l'implantation des éléments ;\n- l'objectif n'est pas nécessairement de produire un schéma facilement lisible, mais un schéma exploitable pour le routage ;\n- éviter au maximum les croisements ;\n- relier directement les composants à la broche source (ne pas chercher à les relier entre eux dans un premier temps) ;\n- si besoin, utiliser l'empreinte d'un autre composant (exemple : une batterie peut être représentée par l'empreinte d'une résistance).\n\nÀ explorer : sous KiCad, les broches `GND` d'un Arduino ne sont pas reliées entre elles. Affecter un `GND` symbolique à chacune via des labels.\n\n**#5 — Routage sous KiCad (éditeur de PCB)**\n\nDernier moment pour vérifier les empreintes — vérifier notamment que le pas est bien un multiple de 2,54 mm.\n\n> ⚠️ Après création des pistes, déplacer un composant rompt les connexions. Implanter donc précisément les composants dès le départ (au besoin, double-clic + saisie des coordonnées).\n\nPour Arduino : supprimer si nécessaire les limites de la carte.\n\n- imaginer les premiers regroupements de pistes (vrai aussi pour la masse) et les ajuster progressivement sur le schéma ;\n- éviter les **prisons** (deux broches éloignées reliées par une boucle qui bloque l'accès aux autres broches) → privilégier les pistes en parallèle ;\n- pour le passage des pistes, modifier les empreintes si nécessaire (par exemple suppression d'un perçage) : *double-clic sur l'empreinte → Éditer l'empreinte → Créer une nouvelle bibliothèque personnalisée (la placer en favoris) → la modifier puis enregistrer sous cette nouvelle bibliothèque* ;\n- garder en tête qu'il est possible de faire passer des pistes **sous** les composants ;\n- dans certains cas, créer des ponts filaires (parfois inévitable).\n\n> **Important** : définir la couche `Edge.Cuts` (contour du PCB).\n\n**#6 — Réaffectation des broches**\n\nObjectif : faciliter le routage.\n\n- veiller à la capacité de chaque broche ;\n- bon à savoir : sur Arduino, les broches analogiques peuvent être réaffectées en numérique ;\n- noter toutes les modifications pour adapter le code en conséquence.\n\n**#7 — Modification du code**\n\nReporter les réaffectations de broches dans le code source.\n\n**#8 — Nouveau prototypage** *(facultatif)*\n\n#### Préparation des fichiers pour l'usinage\n\n**#9 — Export des fichiers Gerber et Excellon**\n\nExporter a minima : `B.Cu` + `Edge.Cuts` + `.drl`.\n\n**#10 — Traitement dans FlatCam**\n\nGénération des fichiers SVG.\n\n**#11 — Traitement dans Inkscape** *(facultatif)*\n\nFusionner les « combos », supprimer les contours superflus.\n\n### 5.2 Liste des équipements et positionnement\n\n- Shield Arduino custom avec PCB **débordant du form factor** standard.\n- L'écran déborde de **8 mm minimum vers le haut** ; les broches sont à **4 mm minimum** du bord de la carte.\n- **Pile 9 V** pour alimentation sur `Vin` (anticiper l'emplacement d'un futur interrupteur d'alimentation). Branchement filaire sur le PCB via une cosse de raccordement, à droite des broches de l'écran.\n- **Potentiomètre de contraste** : utile uniquement pour la mise au point, pas besoin d'être accessible une fois la carte dans son boîtier. Position classique conservée, mais il sera caché sous le capot.\n- **Port USB de l'Arduino** : accessible pour reprogrammation.\n- **Bouton reset** : ajout d'un bouton dédié pour relancer le jeu (ou aménager la forme du PCB pour conserver l'accès au bouton reset d'origine de l'Arduino).\n- **Buzzer** : monté en face arrière du PCB. Attention à :\n - ce que la position des mains lors du jeu ne bouche pas le son,\n - ce qu'il ne touche pas / ne court-circuite pas les broches en sous-face de l'écran (le centrer sur la hauteur, l'aligner à gauche sur le bord du module écran).\n\n#### Dimensions du PCB\n\n| | Hauteur | Largeur |\n|---|---|---|\n| Idéal | 78 mm | 80 mm |\n| Plaque à graver disponible | 70 mm | 100 mm |\n| **PCB final retenu** | **65 mm** | **80 mm** |\n\n### 5.3 Schéma KiCad — réaffectation des broches\n\n#### Boutons\n\n| Bouton | Broche Arduino | Rôle |\n|---|---|---|\n| SW1 | D12 (+ GND) | Bouton **haut** |\n| SW2 | D13 (broche 3 du SW2 sur GND, « 14 » à côté du 13) | Bouton **bas** |\n| SW3 | A0 (broches 1 et 3) + GND (broches 2 et 4, à côté du 5 V) | Bouton **tir** |\n\n#### Buzzer\n\n- Broche **D11** + GND.\n\n#### Écran LCD\n\n| Broche LCD | Broche Arduino |\n|---|---|\n| D7 | D10 |\n| D6 | D9 |\n| D5 | D8 |\n| D4 | D7 |\n| E | D5 |\n| RS | D6 |\n| RW | GND |\n\n#### Masses\n\n`VSS` du LCD, GND du buzzer, GND de SW1 et GND de SW2 sont tous reliés à la masse commune.\n\n> ⚠️ **Important** : sur l'écran LCD, il faudra **souder un pont** entre `R/W` et `VSS` pour relier `R/W` à la masse.\n\n---\n\n## 6. Tutoriel : préparation pour la CNC\n\n### 6.1 Création d'un PCB à la CNC (gravure « à l'anglaise »)\n\n**Logiciels utilisés :**\n\n- KiCad — version 9.0\n- FlatCam — version bêta 8.994\n- Inkscape\n- Easel (pilotage de la CNC)\n\n### 6.2 Étapes dans KiCad\n\n#### Règles de conception → contraintes\n\nVérifier :\n\n- le **diamètre des pads** : 3 mm (double-clic sur les pads → *Propriétés*) ;\n- la **distance entre pads** : 2,54 mm.\n\n> Proposition : passer à 2,34 mm (= 2,54 − 2 × 0,1) pour ménager une marge ?\n\n#### Ajouter le contour du circuit\n\n- sélectionner la couche `Edge.Cuts`,\n- utiliser par exemple l'outil **Rectangle**, clic simple.\n\n#### Export des fichiers de fabrication\n\n*Fichier → Fichiers de fabrication → Gerber → Tracer*, puis créer les **fichiers de perçage** (Excellon).\n\n> ⚠️ Ne pas oublier d'exporter la couche `Edge.Cuts`.\n\n### 6.3 FlatCam\n\n**Téléchargement** : \n\n> En date du 01/04/2026, la version 8.994 est disponible avec un `.exe` pour Windows.\n\n#### 1. Ouvrir FlatCam\n\n#### 2. Charger les fichiers\n\n- **Open Gerber** pour le fichier de la face cuivre + `Edge.Cuts`,\n- **Open Excellon** pour les fichiers de perçage :\n - `PTH` → perçage des composants,\n - `NPTH` → autres perçages.\n\n#### 3. Convertir Gerber et Excellon en géométries\n\n- sélectionner les fichiers,\n- *Edit → Conversion → Convert Any to Geo*.\n\n#### 4. Joindre les contours aux géométries\n\n**Pour les pistes** : sélectionner `B.Cu` + `Edge.Cuts` → *Edit → Join Objects → Join Geo / Gerber / Excellon*. Cela génère une nouvelle géométrie « Combo… ».\n\n**Pour les perçages** : même opération avec `PTH.drl` + `Edge.Cuts`.\n\n> ⚠️ Il n'est *a priori* pas possible de joindre efficacement les géométries `PTH.drl` et `B.Cu` directement : le fichier de pistes efface / écrase le fichier de perçage.\n\n#### Variante (ancienne version)\n\nAjouter manuellement une forme contour sur toutes les géométries :\n\n1. sélectionner la géométrie → *Properties → Geometry Editor* ;\n2. choisir l'outil souhaité (par exemple **Rectangle**) ;\n3. dessiner le contour.\n\nToutes les géométries doivent partager le même contour pour garantir leur alignement par la suite.\n\n#### 5. Exporter les géométries « Combo » en SVG\n\nSélectionner chaque géométrie puis *File → Export → SVG* (autant de fichiers SVG que de géométries).\n\n### 6.4 Inkscape *(facultatif)*\n\n1. Ouvrir les fichiers SVG « Combo » et faire copier / coller.\n2. Appliquer un **effet miroir** si nécessaire (réfléchir au résultat attendu).\n3. Séparément, **dégrouper** puis **unir** les pistes d'un côté, les perçages de l'autre.\n4. Regrouper chacun avec son contour respectif.\n5. Aligner les deux fichiers via leurs contours.\n6. Supprimer les contours superflus pour n'en conserver qu'un seul.\n7. Enregistrer le tout dans un seul fichier SVG final.\n\n> Option : conserver 2 contours est possible mais sans réel intérêt.\n\n### 6.5 Easel — usinage CNC\n\n#### Préparation du projet\n\n1. *Nouveau projet* → donner un nom au projet (cliquer sur *Untitled*).\n2. Régler l'unité en **millimètres**.\n3. Spécifier le **matériau PCB** et ses dimensions — **surtout l'épaisseur** (PCB du Lab = **1,4 mm**).\n\n> ⚠️ Appliquer un **miroir** si nécessaire (réfléchir au résultat).\n>\n> Vérifier la bonne superposition des SVG si besoin.\n\n#### Gravure des pistes\n\n> ⚠️ Vérifier de nouveau l'effet miroir.\n>\n> Important : **monter la fraise** et faire un **homing**.\n\n**Fraise utilisée** : V-bits → *Other* → **pointe javelot 30°, 0,125 in (⅛ pouce)**.\n\n**Cut settings** *(onglet Manual)* :\n\n| Paramètre | Valeur |\n|---|---|\n| Feed rate | 60 mm/min |\n| Plunge rate | 60 mm/min |\n| Depth per pass | 0,05 mm |\n\n**Import du SVG** : *Project → Import SVG*. Le placer à l'origine via `Ctrl + A` puis position `X = 0`, `Y = 0` (veiller à avoir un remplissage interne sur la couche extérieure, ou équivalent).\n\nSupprimer le contour et, au besoin, les trous de perçage. Combiner les pistes : `Ctrl + A` puis *Edit → Combine*.\n\n**Définir la profondeur de passe et le mode** : `Ctrl + A` → *Cut* → `Depth = 0,1 mm` *(à vérifier — proposition : 0,2 mm ?)* → **Cut outside shape path**.\n\n#### Perçages\n\n> ⚠️ Vérifier l'effet miroir.\n>\n> 💡 Préparer le fichier pendant que la fraise refroidit !\n\n- monter la fraise et faire un homing ;\n- *Probe* → **Use Last XY Zero** ;\n- ré-importer le SVG, le placer à `(0, 0)` (ou `Ctrl + Z`), puis supprimer le contour et les pistes ;\n- au besoin, supprimer aussi tout reste de contour ou de pistes.\n\n**Fraise utilisée** : 1/32 in (0,03125 in).\n\n**Profondeur et mode** : `Ctrl + A` → *Cut* → `Depth = max` (+ ajouter `0,2 mm` via **Add depth**) → **Cut inside shape path**.\n\n**Cut settings** :\n\n| Paramètre | Valeur |\n|---|---|\n| Feed rate | 300 mm/min |\n| Plunge rate | 100 mm/min |\n| Depth per pass | 0,4 mm |\n\n#### Découpe du contour\n\n- **Work Zero** : *Manual* → **Use Last Position** ;\n- ré-importer le SVG à `(0, 0)`, supprimer perçages et pistes (ou tracer directement le contour avec les outils d'Easel).\n\n**Fraise utilisée** : 1/32 in.\n\n**Profondeur et mode** : `Ctrl + A` → *Cut* → `Depth = max` (+ `0,2 mm` supplémentaires) → **Cut outside shape path**.\n\n> Sans les **tabs** ?\n\n**Cut settings** :\n\n| Paramètre | Valeur |\n|---|---|\n| Feed rate | 300 mm/min |\n| Plunge rate | 100 mm/min |\n| Depth per pass | 0,4 mm |\n\n#### Fixation de la plaque PCB\n\n> 💡 Conseil : travailler **en bas à gauche** de la fraiseuse.\n\n---\n\n## 7. Et après ?\n\nÀ définir : exposition, autres ateliers, création d'un club, prolongements logiciels et matériels…\n\n---\n\n## Notes éditoriales (à traiter)\n\n- Harmoniser / reprendre la cohérence des notes encore en suspens.\n- Vérifier les points marqués `?` (notamment indicateurs de non-connexion, valeur de profondeur à 0,1 ou 0,2 mm, pas à 2,34 ou 2,54 mm).\n- Compléter la section « Et après ? ».\n- Réinsérer les illustrations du document original aux emplacements pertinents (KiCad, FlatCam, Easel)."} \ No newline at end of file diff --git a/_cache/articles/ab80312d-1483-4187-bbe6-54bcaed793a9.json b/_cache/articles/ab80312d-1483-4187-bbe6-54bcaed793a9.json deleted file mode 100644 index 9c9f98c..0000000 --- a/_cache/articles/ab80312d-1483-4187-bbe6-54bcaed793a9.json +++ /dev/null @@ -1 +0,0 @@ -{"uuid":"ab80312d-1483-4187-bbe6-54bcaed793a9","slug":"specifications-esp-01","title":"ESP-01 : présentation et premiers pas","author":"cedric@abonnel.fr","published":true,"published_at":"2022-01-28 10:03","created_at":"2022-01-28 10:03:16","updated_at":"2026-05-13 18:26:30","revisions":[{"n":1,"date":"2026-05-13 18:26:30","comment":"Contenu modifié","title":"ESP-01 : présentation et premiers pas"}],"cover":"","files_meta":{"20201207-233302.png":{"author":"","source_url":""},"20201209-085932.png":{"author":"","source_url":""},"20201212-183454.png":{"author":"","source_url":""},"20220128-103802.png":{"author":"","source_url":""},"20220128-110155.png":{"author":"","source_url":""},"esp01.pdf":{"author":"","source_url":""}},"external_links":[],"seo_title":"","seo_description":"","og_image":"","category":"Électronique","content":"# ESP-01 : présentation et premiers pas\n\n![Image d'un ESP-01](20220128-103802.png)\n\n## Présentation\n\nL'[ESP-01](https://amzn.to/3oAwIaR) est un module Wi-Fi compact construit autour du microcontrôleur **ESP8266EX** d'Espressif. Sur un PCB d'environ 24 × 14 mm, il rassemble :\n\n- un microcontrôleur **ESP8266EX** (cœur Tensilica L106 32 bits cadencé à 80/160 MHz) ;\n- une mémoire **SPI Flash** externe (généralement **1 Mo** sur les versions courantes, parfois jusqu'à 4 Mo) ;\n- une **antenne PCB** d'environ 2 dBi, gravée directement sur le circuit imprimé ;\n- un **connecteur 2 × 4 broches** au pas de 2,54 mm.\n\n> Lien d'achat : [ESP-01 basé sur ESP8266](https://amzn.to/3oAwIaR)\n\n### ESP8266EX vs ESP-01 : ne pas confondre\n\nUne confusion fréquente porte sur la dénomination du produit :\n\n- **ESP8266EX** désigne le **circuit intégré** (le SoC) produit par Espressif. C'est la puce qui contient le processeur, la radio Wi-Fi, la RAM et les périphériques.\n- **ESP-01** désigne un **module** : un petit PCB qui embarque l'ESP8266EX, sa mémoire flash, son antenne et un connecteur d'accès. Il est conçu et vendu par AI-Thinker, pas par Espressif.\n\nPlusieurs autres modules existent autour du même SoC (ESP-02, ESP-05, ESP-07, ESP-12, etc.). Ils diffèrent par le nombre de broches exposées, la taille de la flash, le type d'antenne et le facteur de forme. L'ESP-01 est le plus simple et le plus économique de la famille, mais aussi le plus contraint en nombre d'entrées/sorties accessibles.\n\n### Pourquoi un adaptateur USB est nécessaire\n\nL'ESP-01 n'expose qu'un port série UART à 3,3 V — pas d'interface USB, pas de régulateur, pas de bouton. Pour le programmer ou dialoguer avec lui depuis un ordinateur, il faut un **adaptateur USB-série** capable de :\n\n- convertir les niveaux USB en niveaux série logiques ;\n- fournir une alimentation **3,3 V** stable (l'ESP-01 ne tolère pas le 5 V).\n\nLes adaptateurs courants utilisent une puce **CH340**, **CP2102** ou **FT232**. Certains sont des dongles spécialement formés pour accueillir l'ESP-01 directement sur leur connecteur.\n\n> Attention : on lit parfois la référence « CH360 ». Il s'agit en réalité de la **CH340** (de WCH). Aucune puce « CH360 » n'existe dans cette gamme.\n\n## Brochage de l'ESP-01\n\n![Brochage de l'ESP-01](20220128-110155.png)\n\nLe connecteur 8 broches est directement câblé sur les pins de l'ESP8266EX :\n\n| Broche | Nom | Rôle |\n|---|---|---|\n| 1 | **GND** | Masse |\n| 2 | **GPIO2** | E/S générique. Doit être à l'état haut (ou flottante) au démarrage pour booter normalement. |\n| 3 | **GPIO0** | E/S générique. **Forcée à GND au démarrage** pour entrer en mode programmation (flash). Laissée libre, elle permet un boot normal. |\n| 4 | **RX** | Réception série (UART0). À relier au TX de l'adaptateur USB-série. |\n| 5 | **TX** | Émission série (UART0). À relier au RX de l'adaptateur USB-série. |\n| 6 | **CH_PD** (aussi noté **EN**) | Chip enable. Doit être maintenue à **3,3 V** pour que le module fonctionne. |\n| 7 | **RST** | Reset, actif à l'état bas. |\n| 8 | **VCC** | Alimentation **3,3 V** uniquement. |\n\nPoints de vigilance :\n\n- l'alimentation **3,3 V** est impérative ; le 5 V détruit le SoC instantanément ;\n- les pics de courant en émission peuvent atteindre **300 mA**. Une alimentation sous-dimensionnée provoque des resets aléatoires ;\n- les niveaux logiques sont également à 3,3 V : interfacer un Arduino Uno (5 V) sans pont diviseur ou level shifter peut endommager l'ESP.\n\n### Branchement avec un adaptateur USB-CH340\n\n![ESP-01 avec adaptateur USB CH340](20201207-233302.png)\n\nUne fois l'ESP-01 enfiché dans l'adaptateur, ce dernier joue le rôle de pont entre le port USB de l'ordinateur et l'UART de l'ESP8266EX :\n\n- l'ordinateur voit un port série virtuel (`/dev/ttyUSB0` sous Linux, `COMx` sous Windows) ;\n- l'adaptateur fournit le 3,3 V à l'ESP-01 et relaie les octets dans les deux sens ;\n- la plupart des adaptateurs d'entrée de gamme **ne gèrent pas le passage en mode flash** : voir l'article dédié à la [modification de l'adaptateur USB vers ESP-01](https://varlog.a5l.fr/post/adaptateur-usb-vers-esp-01-activer-le-mode-programmation) pour ajouter un jumper GPIO0 / GND.\n\n## Datasheet\n\nLa documentation officielle est très succincte pour ce module. Les deux références utiles sont :\n\n- la **datasheet de l'ESP8266EX** (Espressif) — caractéristiques électriques, brochage du SoC, consommation : \n- la **datasheet AI-Thinker de l'ESP-01** (sommaire) — dimensions et brochage du module : disponible sur le mirroir du fabricant.\n\n![Aperçu de la datasheet ESP-01](20201209-085932.png)\n\nLe fichier joint à cet article reprend la version condensée diffusée par AI-Thinker : [esp01.pdf](esp01.pdf)\n\n## Configurer l'IDE Arduino\n\n![Paramétrage de l'IDE Arduino](20201212-183454.png)\n\nL'IDE Arduino ne sait pas, par défaut, compiler pour l'ESP8266. Il faut au préalable installer le **board package** correspondant.\n\n### 1. Ajouter l'URL du gestionnaire de cartes\n\nDans `Fichier → Préférences`, ajouter dans **URL de gestionnaire de cartes supplémentaires** :\n\n```\nhttps://arduino.esp8266.com/stable/package_esp8266com_index.json\n```\n\n### 2. Installer le support ESP8266\n\nOuvrir `Outils → Type de carte → Gestionnaire de cartes`, rechercher **esp8266** et installer le paquet *esp8266 by ESP8266 Community*.\n\n### 3. Sélectionner la carte et les paramètres\n\nPour un ESP-01, choisir `Outils → Type de carte → Generic ESP8266 Module`, puis vérifier les paramètres suivants :\n\n| Paramètre | Valeur recommandée pour ESP-01 |\n|---|---|\n| **Flash Size** | `1MB (FS:64KB OTA:~470KB)` pour les ESP-01 noirs ; `512KB` pour les anciens ESP-01 bleus |\n| **Flash Mode** | `DOUT` (compatible avec la majorité des modules ; éviter `QIO` qui plante au boot sur certains lots) |\n| **Flash Frequency** | `40 MHz` |\n| **CPU Frequency** | `80 MHz` |\n| **Upload Speed** | `115200` baud (vitesse fiable ; possible de monter à 230400 ou 460800 si l'adaptateur suit) |\n| **Reset Method** | `dtr (aka nodemcu)` si l'adaptateur câble DTR ; sinon `no dtr (aka ck)` (reset manuel) |\n| **Port** | port série de l'adaptateur (`/dev/ttyUSB0`, `COM3`…) |\n\nEn pratique, sur un ESP-01 récent acheté avec un adaptateur basique, seul le **port série** doit être ajusté. Les valeurs par défaut conviennent.\n\n### 4. Premier téléversement\n\nUn programme de test minimal pour valider la chaîne complète :\n\n```cpp\nvoid setup() {\n Serial.begin(115200);\n pinMode(LED_BUILTIN, OUTPUT);\n}\n\nvoid loop() {\n digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));\n Serial.println(\"Hello ESP-01\");\n delay(1000);\n}\n```\n\nAvant de lancer le téléversement :\n\n1. placer l'ESP-01 en **mode flash** (GPIO0 à GND au démarrage) ;\n2. brancher l'adaptateur sur le PC ;\n3. lancer le téléversement depuis l'IDE Arduino.\n\nSi l'opération échoue avec un message du type `Failed to connect to ESP8266: Timed out waiting for packet header`, c'est que la mise en mode flash n'a pas été effective. Voir là encore l'article sur la [modification de l'adaptateur](https://varlog.a5l.fr/post/adaptateur-usb-vers-esp-01-activer-le-mode-programmation).\n\n## Pour aller plus loin\n\n- [Adaptateur USB vers ESP-01 : activer le mode programmation](https://varlog.a5l.fr/post/adaptateur-usb-vers-esp-01-activer-le-mode-programmation)\n- [ESP8266 : commandes AT](https://varlog.a5l.fr/post/esp8266-commandes-at)\n- [Réinitialisation d'un ESP-01 : restauration du firmware AT](https://varlog.a5l.fr/post/esp8266ex-restore-commandes-at)\n```\n","featured":false,"tags":[]} \ No newline at end of file diff --git a/_cache/articles/aba42f8a-41ca-4c5f-9a9d-ba3760e10d0f.json b/_cache/articles/aba42f8a-41ca-4c5f-9a9d-ba3760e10d0f.json deleted file mode 100644 index 13ffd10..0000000 --- a/_cache/articles/aba42f8a-41ca-4c5f-9a9d-ba3760e10d0f.json +++ /dev/null @@ -1 +0,0 @@ -{"uuid":"aba42f8a-41ca-4c5f-9a9d-ba3760e10d0f","slug":"esptool","title":"esptool","author":"cedric@abonnel.fr","published":true,"published_at":"2025-11-19 11:43:45","created_at":"2025-11-19 11:43:45","updated_at":"2025-11-19 11:43:45","revisions":[],"cover":"","files_meta":[],"external_links":[],"seo_title":"","seo_description":"","og_image":"","category":"Électronique","content":"# esptool\n\n![esptool](dummy.png)\n\n**esptool** est un outil en ligne de commande développé par Espressif (le fabricant des puces ESP32, ESP8266, etc.) qui sert à flasher, programmer et interagir avec les microcontrôleurs ESP via leur port série (UART).\n\n- Espressif recommande d’installer `esptool` via `pip` si possible. [^note: https://docs.espressif.com/projects/esptool/en/latest/esp32/installation.html]\n- Ils recommandent fortement d’utiliser un **virtual environment (venv)** pour éviter de polluer l’environnement Python système.\n\n# Installation\n1. Installer le package `python3-pip` et `python3-venv` si ce n’est pas déjà fait :\n\n```BASH\nsudo apt update\nsudo apt install python3-pip python3-venv\n```\n\n2. Crée un `venv` dans votre dossier (par exemple `esptoolenv`) :\n\n```BASH\npython3 -m venv ~/esptoolenv\n```\n\n# Utilisation\n1. Activer le `venv` :\n\n```BASH\nsource ~/esptoolenv/bin/activate\n```\n\n2. Installer `esptool` dans le `venv` :\n\n(si vous l'avez effectué dans une utilisation précédente, inutile de le refaire maintenant).\n\n```BASH\npip install esptool\n```\n\n3. Vérifier que ça marche :\n\n```BASH\nesptool version\n```\n\nCe qui donne le résultat suivant :\n\n```BASH\n(esptoolenv) cedric41a@cedric41a-MS-7C56:~$ esptool version\nesptool v5.1.0\n5.1.0\n```\n\n4. Quand vous avez fini d’utiliser `esptool`, vous pouvez désactiver le `venv` :\n\n```BASH\ndeactivate\n```","featured":false,"tags":[]} \ No newline at end of file diff --git a/_cache/articles/ac8515ca-400e-43dc-b5bb-08aa5e6689b5.json b/_cache/articles/ac8515ca-400e-43dc-b5bb-08aa5e6689b5.json deleted file mode 100644 index 815e6fb..0000000 --- a/_cache/articles/ac8515ca-400e-43dc-b5bb-08aa5e6689b5.json +++ /dev/null @@ -1 +0,0 @@ -{"uuid":"ac8515ca-400e-43dc-b5bb-08aa5e6689b5","slug":"premier-programme-esp-01-afficher-les-informations-systeme","title":"Premier programme ESP-01 : afficher les informations système","author":"cedric@abonnel.fr","published":true,"published_at":"2020-12-12 22:28","created_at":"2020-12-12 22:28:56","updated_at":"2026-05-13 18:30:19","revisions":[{"n":1,"date":"2026-05-13 18:30:19","comment":"Titre modifié, contenu modifié","title":"Premier programme ESP-01"}],"cover":"","files_meta":{"dummy.png":{"author":"","source_url":""}},"external_links":[],"seo_title":"","seo_description":"","og_image":"","category":"Électronique","content":"# Premier programme ESP-01 : afficher les informations système\n\n## Objectif\n\nLe sketch ci-dessous est un petit utilitaire de diagnostic : une fois téléversé sur un ESP-01, il publie toutes les dix secondes sur la console série un état détaillé du microcontrôleur — identifiant, fréquence, tension d'alimentation, version du SDK — ainsi qu'un état de la mémoire flash. C'est l'équivalent d'un `uname -a` couplé à un `df` pour l'ESP8266.\n\nCet exemple sert deux objectifs :\n\n- **valider la chaîne complète** (adaptateur, mode flash, IDE, board package) en réussissant un premier téléversement ;\n- **identifier précisément le module** en main : la flash réelle ne correspond pas toujours à ce qui est annoncé par le vendeur, et il peut être utile de le constater avant d'aller plus loin.\n\n> **Prérequis** : un ESP-01 programmable depuis l'IDE Arduino. Voir les articles dédiés à l'[adaptateur USB-série](https://varlog.a5l.fr/post/adaptateur-usb-vers-esp-01-activer-le-mode-programmation) et à la [configuration de l'IDE pour l'ESP-01](https://varlog.a5l.fr/post/esp-01-presentation-premiers-pas).\n\n## Le programme\n\n```cpp\n// Demande au SDK de connecter l'ADC interne à la mesure de VCC\n// plutôt qu'à la broche TOUT. Doit être déclaré en dehors de setup()\n// pour être pris en compte au démarrage.\nADC_MODE(ADC_VCC);\n\nvoid setup() {\n Serial.begin(115200);\n delay(100); // petit délai pour stabiliser l'UART\n}\n\nvoid loop() {\n /* ----- ESP8266EX ----- */\n Serial.println(\"INFO ESP8266EX\");\n\n Serial.printf(\"Numéro de série de l'ESP8266EX .....: %u\\n\",\n ESP.getChipId());\n\n float frequenceCpu = float(ESP.getCpuFreqMHz());\n Serial.printf(\"Fréquence du CPU ...................: %4.1f MHz\\n\",\n frequenceCpu);\n\n // getVcc() renvoie la tension en millivolts\n float vcc = float(ESP.getVcc()) / 1000.0;\n Serial.printf(\"Alimentation .......................: %4.2f V\\n\", vcc);\n\n // La version du core Arduino-ESP8266 contient des underscores\n // (ex: 2_7_4) ; on les remplace par des points pour la lisibilité.\n String coreVersion = ESP.getCoreVersion();\n coreVersion.replace('_', '.');\n Serial.print(\"Version du gestionnaire de carte ...: \");\n Serial.println(coreVersion);\n\n Serial.printf(\"Version du SDK .....................: %s\\n\\n\",\n ESP.getSdkVersion());\n\n /* ----- Mémoire flash ----- */\n Serial.println(\"INFO FLASH\");\n\n Serial.printf(\"Numéro de série du chip ............: %u\\n\",\n ESP.getFlashChipId());\n\n float frequenceFlash = float(ESP.getFlashChipSpeed()) / 1000000.0;\n Serial.printf(\"Fréquence ..........................: %4.1f MHz\\n\",\n frequenceFlash);\n\n Serial.printf(\"Capacité effective .................: %u octets\\n\",\n ESP.getFlashChipRealSize());\n Serial.printf(\"Capacité paramétrée dans l'EDI .....: %u octets\\n\",\n ESP.getFlashChipSize());\n\n Serial.printf(\"Taille du sketch ...................: %u octets\\n\",\n ESP.getSketchSize());\n Serial.printf(\"Mémoire disponible .................: %u octets\\n\\n\\n\",\n ESP.getFreeSketchSpace());\n\n delay(10000);\n}\n```\n\n## Téléverser et lire la sortie\n\n1. Sélectionner `Outils → Type de carte → Generic ESP8266 Module`.\n2. Régler le port série sur celui de l'adaptateur.\n3. Placer l'ESP-01 en mode flash (jumper GPIO0 ↔ GND), téléverser, retirer le jumper, redémarrer.\n4. Ouvrir le moniteur série à **115200 bauds**, fin de ligne **NL & CR**.\n\nSortie attendue (les valeurs varient d'un module à l'autre) :\n\n```\nINFO ESP8266EX\nNuméro de série de l'ESP8266EX .....: 10106374\nFréquence du CPU ...................: 80.0 MHz\nAlimentation .......................: 3.47 V\nVersion du gestionnaire de carte ...: 2.7.4\nVersion du SDK .....................: 2.2.2-dev(38a443e)\n\nINFO FLASH\nNuméro de série du chip ............: 1327304\nFréquence ..........................: 40.0 MHz\nCapacité effective .................: 1048576 octets\nCapacité paramétrée dans l'EDI .....: 1048576 octets\nTaille du sketch ...................: 268288 octets\nMémoire disponible .................: 778240 octets\n```\n\n## Lecture des informations\n\n### Bloc ESP8266EX\n\n| Information | Méthode | Commentaire |\n|---|---|---|\n| Numéro de série du SoC | `ESP.getChipId()` | Entier 24 bits dérivé de l'adresse MAC du module. Identifie de manière unique un ESP8266 donné. |\n| Fréquence du CPU | `ESP.getCpuFreqMHz()` | 80 MHz par défaut, peut passer à 160 MHz avec `system_update_cpu_freq(160)` ou via les options de carte de l'IDE. |\n| Alimentation | `ESP.getVcc()` | Tension VCC en millivolts. Nécessite `ADC_MODE(ADC_VCC)` et que la broche TOUT (ADC0) soit laissée libre. |\n| Version du core | `ESP.getCoreVersion()` | Version du board package *esp8266 by ESP8266 Community*. C'est lui qui fournit l'API Arduino utilisée ici. |\n| Version du SDK | `ESP.getSdkVersion()` | Version du SDK NONOS d'Espressif, utilisé en interne par le core. Ne pas confondre avec la version du core. |\n\nLecture de la sortie d'exemple : le module est un ESP8266 cadencé à 80 MHz, alimenté à environ 3,47 V (légèrement au-dessus du nominal de 3,3 V, ce qui reste dans la plage tolérée 3,0–3,6 V), compilé avec le board package 2.7.4 (basé sur le SDK NONOS 2.2.2).\n\n### Bloc Flash\n\n| Information | Méthode | Commentaire |\n|---|---|---|\n| Numéro de série de la flash | `ESP.getFlashChipId()` | Concaténation du manufacturer ID et du device ID renvoyés par la commande JEDEC. Utile pour identifier la puce flash réellement soudée. |\n| Fréquence | `ESP.getFlashChipSpeed()` | Vitesse de l'horloge SPI en Hz. 40 MHz est la valeur standard ; 80 MHz est possible mais instable sur certains lots. |\n| Capacité effective | `ESP.getFlashChipRealSize()` | Taille **physique** de la puce flash, lue dans son JEDEC ID. C'est la vérité matérielle. |\n| Capacité paramétrée | `ESP.getFlashChipSize()` | Taille que l'IDE a annoncée au firmware (paramètre *Flash Size* dans `Outils`). Doit correspondre à la capacité effective. |\n| Taille du sketch | `ESP.getSketchSize()` | Place occupée par le programme actuel. |\n| Mémoire disponible | `ESP.getFreeSketchSpace()` | Place restante utilisable pour un téléversement OTA. **Pas** la RAM libre — pour cela utiliser `ESP.getFreeHeap()`. |\n\nDans la sortie d'exemple, la flash physique fait **1 Mo** (1 048 576 octets) et l'IDE a été paramétré avec la même valeur : c'est cohérent.\n\n> **Piège classique** : si `getFlashChipRealSize()` et `getFlashChipSize()` diffèrent, le module est mal configuré dans l'IDE. Les conséquences vont de plantages aléatoires au refus de monter le système de fichiers SPIFFS/LittleFS. C'est l'un des intérêts principaux de ce sketch : détecter ce désaccord avant d'investiguer un comportement étrange.\n\n## Variante : ajouter quelques infos utiles\n\nQuelques méthodes complémentaires qu'il peut être pertinent d'ajouter au programme selon les besoins :\n\n```cpp\nSerial.printf(\"RAM libre (heap) ...................: %u octets\\n\",\n ESP.getFreeHeap());\nSerial.printf(\"Fragmentation du heap ..............: %u %%\\n\",\n ESP.getHeapFragmentation());\nSerial.printf(\"Plus gros bloc libre ...............: %u octets\\n\",\n ESP.getMaxFreeBlockSize());\n\nSerial.printf(\"Adresse MAC ........................: %s\\n\",\n WiFi.macAddress().c_str()); // nécessite #include \nSerial.printf(\"Cause du dernier reset .............: %s\\n\",\n ESP.getResetReason().c_str());\n```\n\nCes valeurs sont particulièrement intéressantes pour diagnostiquer des plantages : `getResetReason()` indique si le module a redémarré sur un watchdog, un brown-out, un reset matériel ou une exception logicielle.\n\n## Pour aller plus loin\n\n- [L'ESP-01 : présentation et premiers pas](https://varlog.a5l.fr/post/esp-01-presentation-premiers-pas)\n- [Adaptateur USB vers ESP-01 : activer le mode programmation](https://varlog.a5l.fr/post/adaptateur-usb-vers-esp-01-activer-le-mode-programmation)\n- [ESP8266 : commandes AT](https://varlog.a5l.fr/post/esp8266-commandes-at)\n- Documentation officielle de l'API `ESP` du core Arduino : \n```","featured":false,"tags":[]} \ No newline at end of file diff --git a/_cache/articles/ad43fd21-ddcf-4ce2-b924-fdaadc8a6cdd.json b/_cache/articles/ad43fd21-ddcf-4ce2-b924-fdaadc8a6cdd.json deleted file mode 100644 index a34ced4..0000000 --- a/_cache/articles/ad43fd21-ddcf-4ce2-b924-fdaadc8a6cdd.json +++ /dev/null @@ -1 +0,0 @@ -{"uuid":"ad43fd21-ddcf-4ce2-b924-fdaadc8a6cdd","slug":"post-install","title":"Premiers pas DevOps : préparer un système Debian fraîchement installé","author":"cedric@abonnel.fr","published":true,"published_at":"2023-02-09 15:18","created_at":"2023-02-09 15:18:57","updated_at":"2026-05-12 22:57:49","revisions":[{"n":1,"date":"2026-05-12 22:57:49","comment":"Contenu modifié","title":"Premiers pas DevOps : préparer un système Debian fraîchement installé"}],"cover":"","files_meta":{"cover.jpg":{"author":"","source_url":"https://3.bp.blogspot.com/-WER6d6fmIXU/WD1K9pOVoQI/AAAAAAAAGt4/47YWFQ7r7HQs2HTlkoz9KRt-1SmBXXaWwCLcB/s320/debian-logo.jpg","title":"Logo Debian GNU Linux","meta":{"mime":"image/jpeg","size":12823,"width":320}}},"external_links":[],"seo_title":"","seo_description":"","og_image":"","category":"Informatique","content":"# Premiers pas DevOps : préparer un système Debian fraîchement installé\n\nLorsqu'on vient de provisionner une machine Debian — que ce soit un conteneur LXC, une VM ou un serveur dédié — quelques étapes initiales sont incontournables avant de pouvoir vraiment travailler dessus. Ce petit guide reprend les gestes de base : passer en `root`, configurer les dépôts officiels, mettre le système à jour, installer `sudo`, et terminer par quelques réglages d'identification qui éviteront des surprises plus tard. Rien de sorcier, mais autant prendre de bonnes habitudes dès le départ.\n\n## Passer en utilisateur root\n\nLa première étape consiste à obtenir les droits administrateur. Sur une Debian fraîche, l'utilisateur `root` existe déjà et possède un mot de passe défini lors de l'installation. Pour ouvrir une session avec son environnement complet (variables, PATH, répertoire personnel), on utilise :\n\n```bash\nsu - root\n```\n\nLe tiret est important : sans lui, on hérite uniquement de l'UID de root sans charger son shell de connexion, ce qui peut donner lieu à des surprises (PATH incomplet, absence de `/sbin` dans la recherche des commandes, etc.).\n\nÀ noter que si `sudo` est déjà installé et que l'utilisateur courant fait partie du groupe `sudo`, on peut aussi écrire `sudo -i` pour obtenir le même résultat. Mais sur une Debian minimale tout juste installée, `sudo` n'est généralement pas présent — d'où la nécessité de passer par `su` dans un premier temps.\n\n## Configurer les dépôts officiels\n\nDebian s'appuie sur APT pour gérer ses paquets, et APT a besoin de savoir où les chercher. Cette configuration se trouve dans le fichier `/etc/apt/sources.list` (et, sur les versions récentes, éventuellement dans `/etc/apt/sources.list.d/` pour les dépôts additionnels).\n\nOn l'ouvre avec un éditeur de texte :\n\n```bash\nnano /etc/apt/sources.list\n```\n\nUn contenu typique pour Debian 12 (Bookworm) ressemble à ceci :\n\n```\ndeb http://deb.debian.org/debian bookworm main contrib non-free non-free-firmware\ndeb http://deb.debian.org/debian bookworm-updates main contrib non-free non-free-firmware\ndeb http://security.debian.org/debian-security bookworm-security main contrib non-free non-free-firmware\n```\n\nQuelques explications rapides sur les composants :\n\n- **main** contient les paquets libres officiellement supportés par Debian\n- **contrib** regroupe les paquets libres qui dépendent de logiciels non libres\n- **non-free** et **non-free-firmware** contiennent les paquets non libres (utiles notamment pour les pilotes matériels)\n\nLe dépôt `bookworm-updates` apporte les mises à jour stables non urgentes, tandis que `bookworm-security` fournit les correctifs de sécurité — celui-ci est essentiel et ne doit jamais être omis sur une machine connectée au réseau.\n\nPour une version différente de Debian, il suffit de remplacer `bookworm` par le nom de code correspondant (`bullseye`, `trixie`, etc.).\n\n## Mettre le système à jour\n\nUne fois les dépôts configurés, on récupère la liste des paquets disponibles puis on applique les mises à jour :\n\n```bash\napt update\napt upgrade\n```\n\nLa distinction entre les deux est importante :\n\n- `apt update` ne met rien à jour : la commande synchronise simplement l'index local des paquets avec ce que les dépôts annoncent. Sans cette étape, APT ignore l'existence des nouvelles versions.\n- `apt upgrade` installe effectivement les versions plus récentes des paquets déjà présents.\n\nPour les mises à jour plus profondes qui peuvent ajouter ou retirer des paquets (changement de dépendances, transitions majeures), il existe aussi `apt full-upgrade`. À utiliser avec un peu plus de précaution, mais c'est ce qu'il faut pour suivre l'évolution complète d'une distribution.\n\nSur un conteneur ou une VM fraîche, cette première mise à jour peut tirer un certain nombre de paquets. C'est normal : l'image de base est figée au moment de sa publication, et plusieurs mois de correctifs se sont souvent accumulés depuis.\n\nPetit conseil pour la suite, dès qu'on commencera à scripter ces opérations : préférer `apt-get` à `apt` dans les scripts, car son interface est garantie stable entre versions. Et pour éviter les questions interactives bloquantes lors d'installations automatisées, positionner `DEBIAN_FRONTEND=noninteractive` dans l'environnement.\n\n## Installer sudo\n\nPar défaut, Debian n'installe pas `sudo` sur un système minimal. Travailler en permanence en `root` n'est pourtant pas une bonne pratique : on perd la traçabilité des actions, et la moindre erreur de frappe peut avoir des conséquences sérieuses. L'idée derrière `sudo` est de déléguer ponctuellement des droits administrateur à un utilisateur normal, commande par commande, avec un journal des actions effectuées.\n\nL'installation se fait classiquement :\n\n```bash\napt install sudo\n```\n\nEnsuite, il faut ajouter son utilisateur (celui avec lequel on se connectera au quotidien) au groupe `sudo` :\n\n```bash\nusermod -aG sudo nom_utilisateur\n```\n\nLe drapeau `-a` (pour *append*) est crucial : sans lui, `usermod -G` remplacerait la liste des groupes secondaires de l'utilisateur au lieu d'y ajouter `sudo`, ce qui peut avoir des effets de bord désagréables.\n\nL'utilisateur doit ensuite se déconnecter puis se reconnecter pour que sa nouvelle appartenance au groupe soit prise en compte. À partir de là, il peut préfixer ses commandes par `sudo` pour les exécuter avec les droits administrateur, en saisissant son propre mot de passe (et non celui de root).\n\n## Régler l'identité et l'horloge de la machine\n\nDeux derniers détails de configuration qui paraissent anodins, mais qui simplifient grandement la vie sur un parc qui grandit.\n\nD'abord, fixer le nom de la machine. Sur une infrastructure organisée, le hostname et le FQDN suivent généralement une convention de nommage (par exemple `dafactures.acegrp.lan` pour un projet de facturation sur un réseau interne). La commande `hostnamectl` s'en charge proprement :\n\n```bash\nhostnamectl set-hostname dafactures.acegrp.lan\n```\n\nPenser à vérifier ensuite que `/etc/hosts` contient bien une ligne associant l'IP locale au FQDN, sous peine de voir certains services (Postfix notamment, ou des outils de log) se plaindre de ne pas résoudre leur propre nom.\n\nEnsuite, le fuseau horaire. Détail souvent négligé qui complique pourtant le débogage dès qu'on croise des logs entre plusieurs machines :\n\n```bash\ntimedatectl set-timezone Europe/Paris\n```\n\nLa synchronisation NTP est généralement déjà active via `systemd-timesyncd` sur les Debian récentes — un `timedatectl status` permet de le vérifier.\n\n## Et après ?\n\nUne fois ces étapes franchies, la machine est dans un état sain et utilisable. Les pistes naturelles pour la suite tournent autour du durcissement (configuration SSH avec authentification par clé et désactivation de la connexion root à distance, mise en place d'un pare-feu, installation de `unattended-upgrades` pour les correctifs de sécurité automatiques), puis de l'installation des outils métier proprement dits — serveur web, base de données, runtime applicatif.\n\nGarder en tête que ces gestes initiaux, aussi triviaux paraissent-ils, méritent d'être scriptés dès qu'on les répète plus de deux ou trois fois. C'est précisément là que la démarche DevOps prend tout son sens : transformer des manipulations manuelles en code reproductible, versionné et partageable.","featured":false,"tags":[]} \ No newline at end of file diff --git a/_cache/articles/b0b3ac59-87c5-4598-a549-f3168abb4429.json b/_cache/articles/b0b3ac59-87c5-4598-a549-f3168abb4429.json deleted file mode 100644 index 079236f..0000000 --- a/_cache/articles/b0b3ac59-87c5-4598-a549-f3168abb4429.json +++ /dev/null @@ -1 +0,0 @@ -{"uuid":"b0b3ac59-87c5-4598-a549-f3168abb4429","slug":"quand-les-conversations-sont-devenues-une-matiere-premiere","title":"Quand les conversations sont devenues une matière première","author":"cedric@abonnel.fr","published":true,"published_at":"2025-11-05 07:17","created_at":"2025-11-05 07:17:02","updated_at":"2026-05-12 01:49:27","revisions":[{"n":1,"date":"2026-05-12 01:49:27","comment":"","title":"Quand les conversations sont devenues une matière première"}],"cover":"","files_meta":[],"external_links":[],"seo_title":"","seo_description":"","og_image":"","category":"loisirs","content":"# Quand les conversations sont devenues une matière première\n\nEntre 2023 et 2024, quelque chose s'est rompu sur le web social. Pas un effondrement, pas une crise visible — plutôt un basculement discret, presque administratif, dans la manière dont les grandes plateformes ont commencé à regarder ce que produisaient leurs utilisateurs. Les messages, les fils de discussion, les commentaires sarcastiques sous une photo de chat, les longues confidences nocturnes sur Tumblr : tout cela, jusque-là considéré comme l'humus naturel des réseaux sociaux, est soudainement devenu autre chose. Une ressource. Un actif. Une matière brute.\n\nLe déclencheur s'appelle **Reddit**. Le 22 février 2024, le jour même où l'entreprise dépose son dossier d'introduction en Bourse, elle annonce un accord à 60 millions de dollars par an avec Google : le géant de la recherche pourra puiser dans les archives du forum, via son API, pour entraîner ses modèles d'intelligence artificielle. Quelques mois plus tard, OpenAI signe à son tour un accord similaire, estimé autour de 70 millions de dollars annuels par les analystes. Le message envoyé au marché est limpide : ces décennies de conversations humaines, agrégées par une communauté qui croyait simplement bavarder, valent désormais des centaines de millions de dollars. Steve Huffman, PDG de Reddit, vante un modèle économique enfin durable. Les analystes financiers, eux, parlent de mine d'or.\n\n**Tumblr** rejoint la danse une semaine plus tard, mais par effraction. Le 27 février 2024, le site spécialisé 404 Media révèle qu'Automattic — la maison mère de Tumblr et WordPress.com — finalise des accords avec OpenAI et Midjourney pour leur fournir l'accès aux contenus publiés sur ses plateformes. La fuite est embarrassante : des documents internes montrent qu'une première extraction de données a même ratissé trop large, embarquant par erreur des posts privés, des blogs supprimés et des contenus normalement exclus. Automattic publie en urgence un communiqué annonçant un système d'opt-out — la possibilité pour les utilisateurs de refuser, à condition de cocher la bonne case dans les bons paramètres. Mais la communauté Tumblr, refuge historique d'artistes, d'écrivains amateurs, de communautés queer et de fanfic, n'a pas attendu la procédure officielle pour réagir : la nouvelle déclenche une vague de fermetures de comptes et d'effacements rétroactifs.\n\n**X**, sous la direction d'Elon Musk, emprunte un chemin parallèle mais plus solitaire. Plutôt que de vendre l'accès à ses données à des concurrents, Musk a verrouillé son robinet dès 2023 — au point d'introduire des plafonds de consultation tellement absurdes que la plateforme en est devenue inutilisable pendant quelques jours — et a réservé sa matière première à xAI, sa propre société d'intelligence artificielle, pour alimenter le chatbot Grok. En octobre 2024, X annonce une refonte de ses conditions d'utilisation, effective le 15 novembre. Le nouveau texte est explicite : tout contenu publié sur la plateforme peut être utilisé pour entraîner ses modèles d'apprentissage automatique, ainsi que ceux de « partenaires tiers » non nommés. L'option qui permettait jusque-là aux utilisateurs européens de refuser que leurs posts servent à entraîner Grok est, dans la foulée, devenue inaccessible pour beaucoup. Le principe reste le même que chez Reddit — les mots des utilisateurs deviennent du carburant — mais sans le détour d'un contrat externe.\n\nCar ce qui frappe, ce n'est pas tant chaque accord pris isolément que la rapidité avec laquelle l'idée s'est imposée. En quelques mois, exploiter les mots de ses utilisateurs pour entraîner de l'IA est devenu non plus une stratégie audacieuse, mais une évidence de marché. **LinkedIn**, propriété de Microsoft — qui se trouve aussi être le principal investisseur d'OpenAI —, suit le mouvement avec une discrétion remarquable. Le 18 septembre 2024, une mise à jour silencieuse de sa politique de confidentialité révèle que la plateforme entraîne déjà ses propres modèles d'IA générative à partir des posts, articles et données de profil de ses membres, partout dans le monde — y compris au Royaume-Uni. Personne n'a été prévenu en bonne et due forme ; le paramètre permettant de refuser ne se déclenche pas par défaut.\n\nL'épisode tourne court. En 48 heures, l'Information Commissioner's Office britannique, le régulateur des données, exige un arrêt immédiat de la pratique sur le territoire. Stephen Almond, son directeur exécutif chargé des risques réglementaires, déclare publiquement que la confiance du public dans l'IA générative dépend précisément du respect des droits à la vie privée dès le départ. LinkedIn suspend le traitement au Royaume-Uni, dans l'Espace économique européen et en Suisse. Pour le reste du monde — les États-Unis, l'Asie, le Canada, l'Amérique latine —, la collecte continue, opt-out par défaut.\n\nMais quelque chose, du côté des utilisateurs, n'a pas suivi.\n\nSur Reddit, des modérateurs ferment leurs subreddits en protestation. D'autres remplacent leurs anciens posts par des chaînes de caractères absurdes — du sabotage de données, en somme, pour rendre leurs contributions inutilisables. Sur Tumblr, on voit ressurgir un vieux geste internet : des comptes entiers passent en privé, des années d'écriture s'effacent en quelques clics. Des forums spécialisés évoquent une « grève des données ». Une phrase circule, amère, sur plusieurs plateformes à la fois : *« Nos mots valent de l'or, mais pas pour nous. »*\n\nC'est sans doute le paradoxe le plus profond de cette séquence. Pendant deux décennies, les grandes plateformes avaient bâti leur valeur sur un contrat tacite : vous nous donnez votre temps et votre attention, nous vous offrons un espace pour exister et nous monétisons votre regard auprès des annonceurs. Le deal était imparfait, mais lisible. À partir de 2024, un second contrat se superpose au premier sans avoir été négocié : votre langage, vos conversations, vos archives intimes deviennent aussi une matière première vendable, à votre insu le plus souvent, pour entraîner des intelligences qui à terme produiront le même langage que vous — mais en série, à coût marginal nul, et au bénéfice d'autres.\n\nLe web social était entré dans une nouvelle ère. Celle où les conversations des uns sont devenues l'apprentissage des autres.\n\n---\n\n## Sources\nVoici la liste des sources utilisées pour la vérification, organisée par thème pour que tu puisses les citer ou les ajouter en fin d'article.\n\n### Reddit – Google et OpenAI\n\n- **CBS News** (23 février 2024) — Annonce de l'accord à 60 M$ entre Google et Reddit\nhttps://www.cbsnews.com/news/google-reddit-60-million-deal-ai-training/\n\n- **Lutzker & Lutzker** (18 mars 2024) — Analyse détaillée de l'accord et de l'usage de l'API Reddit\nhttps://www.lutzker.com/ip_bit_pieces/reddits-licensing-agreement-with-google/\n\n- **Columbia Journalism Review** — Analyse de la stratégie globale de Reddit (mention de l'accord OpenAI à ~70 M$/an)\nhttps://www.cjr.org/analysis/reddit-winning-ai-licensing-deals-openai-google-gemini-answers-rsl.php\n\n### Tumblr / Automattic – OpenAI et Midjourney\n\n- **404 Media** (27 février 2024) — Article source qui a révélé l'affaire\nhttps://www.404media.co/tumblr-and-wordpress-to-sell-users-data-to-train-ai-tools/\n\n- **Engadget** (27 février 2024) — Reprise détaillée avec la réponse officielle d'Automattic\nhttps://www.engadget.com/tumblr-and-wordpress-posts-will-reportedly-be-used-for-openai-and-midjourney-training-204425798.html\n\n- **WP Tavern** (28 février 2024) — Angle communauté WordPress et critique de la politique d'opt-out\nhttps://wptavern.com/automattic-faces-scrutiny-over-ai-access-policy\n\n- **Popular Science** (29 février 2024) — Mise en perspective sur l'inefficacité de l'opt-out\nhttps://www.popsci.com/technology/openai-wordpress-tumblr/\n\n### X (Twitter) – Conditions d'utilisation et entraînement de Grok\n\n- **Social Media Today** (17 octobre 2024) — Analyse des nouvelles conditions effectives le 15 novembre 2024\nhttps://www.socialmediatoday.com/news/x-formerly-twitter-updates-terms-service/730223/\n\n- **CNN Business** (21 octobre 2024) — Réaction des utilisateurs et flou sur l'opt-out\nhttps://www.cnn.com/2024/10/21/tech/x-twitter-terms-of-service\n\n- **Cybernews** (18 octobre 2024) — Sur la disparition de l'option d'opt-out\nhttps://cybernews.com/ai-news/updated-x-terms/\n\n- **Gigazine** — Déta#il des clauses ajoutées concernant les « partenaires tiers »\nhttps://gigazine.net/gsc_news/en/20241018-x-privacy-policy-ai-training/\n\n## LinkedIn – Intervention de l'ICO britannique\n\n- **TechCrunch** (20 septembre 2024) — LinkedIn suspend l'entraînement IA au Royaume-Uni\nhttps://techcrunch.com/2024/09/20/linkedin-has-stopped-grabbing-u-k-users-data-for-ai/\n\n- **The Record (Recorded Future News)** (20 septembre 2024) — Le rôle de l'ICO dans l'arrêt\nhttps://therecord.media/uk-regulator-stops-linkedin-ai-models\n\n- **The Hacker News** (22 septembre 2024) — Synthèse incluant la mention de Meta en parallèle\nhttps://thehackernews.com/2024/09/linkedin-halts-ai-data-processing-in-uk.html\n\n- **Legal IT Insider** (20 septembre 2024) — Citation complète de Stephen Almond (ICO)\nhttps://legaltechnology.com/2024/09/20/linkedin-suspends-opt-out-ai-model-training-for-uk-following-ico-concerns/","featured":false,"tags":[]} \ No newline at end of file diff --git a/_cache/articles/bea327e2-9d1c-4ff6-a5a5-26748c80018b.json b/_cache/articles/bea327e2-9d1c-4ff6-a5a5-26748c80018b.json deleted file mode 100644 index 9612e5a..0000000 --- a/_cache/articles/bea327e2-9d1c-4ff6-a5a5-26748c80018b.json +++ /dev/null @@ -1 +0,0 @@ -{"uuid":"bea327e2-9d1c-4ff6-a5a5-26748c80018b","slug":"anatomie-d-un-script-d-auto-deploiement-bash-fetch-scripts-sh","title":"Script Bash d'auto-déploiement : `fetch_scripts.sh`","author":"cedric@abonnel.fr","published":true,"published_at":"2026-05-04 07:04","created_at":"2026-05-12 10:55:39","updated_at":"2026-05-12 11:10:51","revisions":[{"n":1,"date":"2026-05-12 11:08:57","comment":"Catégorie modifiée, contenu modifié, article publié, couverture modifiée","title":"Script Bash d'auto-déploiement : `fetch_scripts.sh`"},{"n":2,"date":"2026-05-12 11:10:51","comment":"Contenu modifié : mention autocritique","title":"Script Bash d'auto-déploiement : `fetch_scripts.sh`"}],"cover":"cover.svg","files_meta":{"d6ea4554c9fbfc14-23663.svg":{"author":"","source_url":""},"cover.svg":{"author":"","source_url":""}},"external_links":[{"url":"https://git.abonnel.fr/cedricAbonnel/notes-techniques/raw/commit/18c6dd9e45e57d272659da6e2c53b79048985400/scripts/fetch_scripts.sh","name":"Script bash fetch_scripts.sh dans sa version 18c6dd9e45e57d272659da6e2c53b79048985400","added_at":"2026-05-12 11:07:42","meta":{"mime":"text/plain","size":4334}}],"seo_title":"","seo_description":"Auto analyse pédagogique et critique du script Bash d'auto-mise à jour qui synchronise des scripts depuis un dépôt Forgejo. Sept failles identifiées, sept correctifs à effectuer.","og_image":"https://varlog.a5l.fr/file?uuid=bea327e2-9d1c-4ff6-a5a5-26748c80018b&name=cover.svg","category":"informatique","content":"# > Comment un simple script Bash peut télécharger, mettre à jour et synchroniser une bibliothèque de scripts distants — et pourquoi il faut le lire avec un œil critique.\r\n\r\n[fetch_scripts.sh](https://git.abonnel.fr/cedricAbonnel/notes-techniques/raw/commit/18c6dd9e45e57d272659da6e2c53b79048985400/scripts/fetch_scripts.sh)\r\n\r\n> 📝 **Note** — Cet article est une autocritique. Le script `fetch_scripts.sh` analysé ici est de ma propre fabrication, déployé sur mes propres machines. L'exercice consiste à le relire avec la distance d'un reviewer extérieur, pour identifier ce qui tient la route et ce qui mériterait d'être repris.\r\n\r\n## Le contexte\r\n\r\nL'idée derrière ce script est élégante : centraliser une collection de scripts utilitaires dans un dépôt Git public (ici, une instance Forgejo auto-hébergée), puis fournir un **unique point d'entrée** que l'on télécharge sur n'importe quelle machine. Ce point d'entrée se met à jour tout seul, propose à l'opérateur de choisir quels sous-ensembles de scripts récupérer, et maintient une synchronisation locale du dépôt distant.\r\n\r\nC'est typiquement le genre d'outil qui se déploie en une ligne :\r\n\r\n```bash\r\nwget https://git.example.fr/.../fetch_scripts.sh && bash fetch_scripts.sh\r\n```\r\n\r\nDécortiquons ce qu'il fait, étape par étape, puis voyons où il faudrait taper.\r\n\r\n---\r\n\r\n## Étape 1 — L'auto-mise à jour\r\n\r\n```bash\r\nSCRIPT_URL=\"https://git.abonnel.fr/.../fetch_scripts.sh\"\r\nSCRIPT_NAME=$(basename \"$0\")\r\nTMP_SCRIPT=\"/tmp/$SCRIPT_NAME\"\r\n\r\nwget -q -O \"$TMP_SCRIPT\" \"$SCRIPT_URL\"\r\n\r\nif ! cmp -s \"$TMP_SCRIPT\" \"$0\"; then\r\n echo \"🔄 Mise à jour du script...\"\r\n mv \"$TMP_SCRIPT\" \"$0\"\r\n chmod +x \"$0\"\r\n exec \"$0\" \"$@\"\r\nfi\r\n```\r\n\r\n**Ce qui se passe :** le script télécharge sa propre version distante dans `/tmp`, la compare octet-à-octet avec lui-même (`cmp -s`), et si elle diffère, il s'écrase, se rend exécutable, et **se relance** via `exec` (qui remplace le processus courant — pas d'empilement de shells).\r\n\r\n**Pourquoi c'est malin :** ça garantit qu'à chaque exécution, l'opérateur travaille avec la version canonique du dépôt. Pas besoin de mécanisme de versioning, pas de vérification de hash, pas de paquet à publier.\r\n\r\n**Pourquoi c'est risqué :** on y reviendra dans la critique, mais en résumé — l'auto-mise à jour silencieuse depuis une URL en HTTPS sans signature est une porte d'entrée pour la chaîne d'approvisionnement.\r\n\r\n---\r\n\r\n## Étape 2 — Récupération du catalogue de dossiers\r\n\r\n```bash\r\nREPO_URL=\"https://git.abonnel.fr/.../scripts\"\r\nDIR_LIST_FILE=\".directories.txt\"\r\nMANDATORY_DIR=\"common\"\r\n\r\nTMP_DIR=$(mktemp -d)\r\nwget -q -O \"$TMP_DIR/$DIR_LIST_FILE\" \"$REPO_URL/$DIR_LIST_FILE\"\r\nmapfile -t AVAILABLE_DIRS < \"$TMP_DIR/$DIR_LIST_FILE\"\r\n```\r\n\r\nLe dépôt distant contient un fichier `.directories.txt` qui liste les catégories de scripts disponibles (par exemple : `common`, `proxmox`, `php`, `monitoring`…). Ce fichier est la **source de vérité** : ajouter une catégorie côté serveur la rend immédiatement disponible côté client.\r\n\r\n`mapfile` (alias `readarray`) lit le fichier ligne à ligne dans un tableau Bash. Plus propre qu'une boucle `while read`.\r\n\r\nUn dossier `common` est marqué comme obligatoire — il sera toujours téléchargé, sans demander à l'utilisateur.\r\n\r\n---\r\n\r\n## Étape 3 — Mémoire de la sélection précédente\r\n\r\n```bash\r\nSELECTED_DIRS_FILE=\".selected_dirs.txt\"\r\n\r\nif [ -f \"$SELECTED_DIRS_FILE\" ]; then\r\n mapfile -t PREVIOUS_SELECTION < \"$SELECTED_DIRS_FILE\"\r\nelse\r\n PREVIOUS_SELECTION=()\r\nfi\r\n```\r\n\r\nÀ chaque exécution, le script relit la sélection de la fois précédente. C'est ce qui permet à l'interface graphique (étape suivante) de **pré-cocher** les bons dossiers : on n'a pas à refaire son choix à chaque mise à jour.\r\n\r\n---\r\n\r\n## Étape 4 — L'interface `whiptail`\r\n\r\n```bash\r\nCHOICES=()\r\nfor dir in \"${AVAILABLE_DIRS[@]}\"; do\r\n if [ \"$dir\" == \"$MANDATORY_DIR\" ]; then\r\n continue\r\n fi\r\n if [[ \" ${PREVIOUS_SELECTION[*]} \" =~ \" $dir \" ]]; then\r\n CHOICES+=(\"$dir\" \"\" ON)\r\n else\r\n CHOICES+=(\"$dir\" \"\" OFF)\r\n fi\r\ndone\r\n\r\nSELECTED_DIRS=$(whiptail --title \"Sélection des dossiers\" --checklist \\\r\n \"Sélectionnez les dossiers à télécharger :\" 20 60 10 \\\r\n \"${CHOICES[@]}\" 3>&1 1>&2 2>&3)\r\n```\r\n\r\n`whiptail` est l'outil de dialogue ncurses standard sur Debian/Ubuntu — il affiche cette boîte bleue familière avec des cases à cocher, navigable au clavier. Idéal en SSH.\r\n\r\nLa gymnastique `3>&1 1>&2 2>&3` est un classique : `whiptail` écrit son interface sur stdout et sa réponse sur stderr. Il faut donc **échanger les deux** pour capturer la sélection dans `$SELECTED_DIRS` tout en laissant l'interface s'afficher.\r\n\r\nL'expression `[[ \" ${ARRAY[*]} \" =~ \" $dir \" ]]` est une astuce courante pour tester l'appartenance à un tableau Bash — on entoure d'espaces pour éviter les correspondances partielles (`web` qui matcherait `web-server`).\r\n\r\n---\r\n\r\n## Étape 5 — Synchronisation : ajouts et suppressions\r\n\r\n```bash\r\nSELECTED_DIRS_ARRAY=(\"$MANDATORY_DIR\" $(echo \"$SELECTED_DIRS\" | tr -d '\"'))\r\necho \"${SELECTED_DIRS_ARRAY[@]}\" > \"$SELECTED_DIRS_FILE\"\r\n\r\nfor dir in \"${PREVIOUS_SELECTION[@]}\"; do\r\n if [[ ! \" ${SELECTED_DIRS_ARRAY[*]} \" =~ \" $dir \" ]]; then\r\n echo \"🗑 Suppression du dossier $dir...\"\r\n rm -rf \"$dir\"\r\n fi\r\ndone\r\n```\r\n\r\nLogique de diff : tout ce qui était sélectionné avant et ne l'est plus est **supprimé du disque**. Ça maintient le répertoire local propre — pas de scripts orphelins qui traînent.\r\n\r\n`whiptail` renvoie la sélection sous forme de chaîne entre guillemets (`\"dir1\" \"dir2\"`), d'où le `tr -d '\"'` pour les retirer avant de constituer le tableau.\r\n\r\n---\r\n\r\n## Étape 6 — Téléchargement des fichiers de chaque dossier\r\n\r\n```bash\r\nfor TARGET_DIR in \"${SELECTED_DIRS_ARRAY[@]}\"; do\r\n wget -q -O \"$LIST_PATH\" \"$REPO_URL/$TARGET_DIR/.list_files.txt\"\r\n mkdir -p \"$TARGET_DIR\"\r\n\r\n while read -r file; do\r\n wget -q -O \"$TARGET_DIR/$(basename \"$file\")\" \"$REPO_URL/$TARGET_DIR/$file\"\r\n done < \"$LIST_PATH\"\r\n\r\n for existing_file in \"$TARGET_DIR\"/*; do\r\n if [ -f \"$existing_file\" ] && ! grep -qx \"$(basename \"$existing_file\")\" \"$LIST_PATH\"; then\r\n rm \"$existing_file\"\r\n fi\r\n done\r\n\r\n chmod +x \"$TARGET_DIR\"/*.sh\r\ndone\r\n```\r\n\r\nMême logique récursive d'un niveau plus bas : chaque dossier contient son propre `.list_files.txt` listant ses fichiers. On télécharge ceux qui y figurent, on supprime ceux qui n'y figurent plus, et on rend tout exécutable.\r\n\r\nC'est une forme de `rsync` artisanal, basé sur des manifestes plats. Ça fonctionne sans avoir à installer `git` sur la machine cible — seuls `wget` et `whiptail` sont requis.\r\n\r\n---\r\n\r\n## Critique : ce qui marche, ce qui inquiète\r\n\r\n### Les bons côtés\r\n\r\n**La logique d'idempotence** est solide. Le script peut tourner cent fois de suite, il convergera toujours vers le même état : les dossiers sélectionnés contiendront exactement les fichiers du manifeste, ni plus, ni moins. C'est le bon réflexe DevOps.\r\n\r\n**L'auto-bootstrap** est ergonomique. Une seule URL à retenir, tout le reste se télécharge tout seul. Pour une bibliothèque personnelle de scripts d'admin, c'est imbattable en simplicité.\r\n\r\n**Pas de dépendances exotiques.** `wget`, `whiptail`, `mapfile` : tout est disponible nativement sur Debian. Le script tourne aussi bien sur un conteneur LXC fraîchement provisionné que sur une machine établie.\r\n\r\n**Le manifeste séparé** (`.directories.txt` et `.list_files.txt`) découple la liste des fichiers de leur contenu. C'est plus simple qu'un parsing HTML de l'index Git, et ça reste sous contrôle éditorial.\r\n\r\n### Les angles morts\r\n\r\n#### 1. Aucune vérification d'intégrité\r\n\r\nC'est **le** point critique. Le script télécharge du code exécutable en HTTPS, sans vérifier :\r\n- ni signature GPG,\r\n- ni hash SHA256,\r\n- ni même que le serveur a bien répondu correctement.\r\n\r\n`wget -q` en mode silencieux **n'échoue pas visiblement** : si la requête renvoie une page d'erreur 404 ou une page de connexion captive Wi-Fi en HTML, elle sera écrite dans le fichier de destination. La vérification suivante (`cmp -s`) considérera ce HTML comme « différent », fera le `mv`, et au prochain `exec` le shell essaiera d'exécuter du HTML. Au mieux ça crashe, au pire ça exécute des balises interprétables.\r\n\r\n**Pire encore pour l'auto-update :** si quelqu'un compromet l'instance Forgejo (ou interpose un proxy malveillant capable de servir un certificat valide pour `git.abonnel.fr`), le prochain `fetch_scripts.sh` télécharge et exécute du code arbitraire avec les privilèges de l'utilisateur courant — souvent root pour ce genre d'outils d'admin.\r\n\r\n**Correctif minimal :** publier un fichier `.sha256sums` signé GPG dans le dépôt, le télécharger, vérifier sa signature avec une clé connue localement, puis valider chaque fichier téléchargé contre ce manifeste.\r\n\r\n#### 2. `wget` sans gestion d'erreur\r\n\r\n```bash\r\nwget -q -O \"$TMP_SCRIPT\" \"$SCRIPT_URL\"\r\nif ! cmp -s \"$TMP_SCRIPT\" \"$0\"; then\r\n```\r\n\r\nSi `wget` échoue (réseau coupé, DNS HS, certificat expiré), `$TMP_SCRIPT` sera soit vide soit absent. `cmp -s` retournera « différent », et le script **écrasera la version locale par un fichier vide**. À la prochaine exécution, plus rien ne fonctionne.\r\n\r\n**Correctif :** vérifier le code de retour de `wget`, vérifier que le fichier téléchargé n'est pas vide, et vérifier qu'il commence bien par `#!/bin/bash` avant d'écraser quoi que ce soit.\r\n\r\n```bash\r\nif ! wget -q -O \"$TMP_SCRIPT\" \"$SCRIPT_URL\"; then\r\n echo \"❌ Téléchargement échoué, on garde la version actuelle\"\r\nelif [ ! -s \"$TMP_SCRIPT\" ] || ! head -n1 \"$TMP_SCRIPT\" | grep -q \"^#!\"; then\r\n echo \"❌ Fichier téléchargé invalide\"\r\n rm -f \"$TMP_SCRIPT\"\r\nelif ! cmp -s \"$TMP_SCRIPT\" \"$0\"; then\r\n # ...\r\nfi\r\n```\r\n\r\n#### 3. Le `exec \"$0\" \"$@\"` perd les modifications de l'environnement\r\n\r\nSi le script a été lancé par `bash fetch_scripts.sh` (donc sans le bit exécutable, sans shebang utilisé), `$0` vaut `fetch_scripts.sh`. Après `mv`, on `exec` un fichier qui pourrait ne pas être dans le `$PATH`. En pratique ça marche parce qu'on est dans le bon répertoire, mais c'est fragile — un `cd` quelque part dans le script suffirait à le casser.\r\n\r\n#### 4. Injection via les noms de fichiers du manifeste\r\n\r\n```bash\r\nwhile read -r file; do\r\n wget -q -O \"$TARGET_DIR/$(basename \"$file\")\" \"$REPO_URL/$TARGET_DIR/$file\"\r\ndone < \"$LIST_PATH\"\r\n```\r\n\r\nLe contenu de `.list_files.txt` est utilisé directement dans une URL et dans un chemin de fichier local. Si quelqu'un peut écrire dans ce fichier manifeste (ce qui revient à pouvoir pousser sur le dépôt Forgejo), il peut y mettre des chemins comme `../../../etc/cron.d/backdoor` et écrire en dehors du répertoire prévu.\r\n\r\n`basename` neutralise partiellement la chose côté nom local, mais l'URL côté distant accepte n'importe quoi. C'est moins critique que la première faille, mais ça mérite un filtre regex (`[a-zA-Z0-9._-]+` uniquement).\r\n\r\n#### 5. `whiptail` et la sélection vide\r\n\r\nSi l'utilisateur ne coche rien et valide, `$SELECTED_DIRS` est vide. Le script continue avec seulement `common`, ce qui est probablement le comportement attendu. Mais si `whiptail` n'est pas installé (rare mais possible, par exemple sur Alpine ou un Debian minimal sans `whiptail`), le script échoue avec une erreur peu explicite. Un test préalable `command -v whiptail` éviterait la déconvenue.\r\n\r\n#### 6. Pas de log, pas de mode dry-run\r\n\r\nPour un outil qui supprime des fichiers (`rm -rf \"$dir\"`), l'absence d'option `--dry-run` qui afficherait ce qui *serait* fait sans rien toucher est gênante. Une frappe distraite sur la checklist, et un dossier entier disparaît sans warning.\r\n\r\n#### 7. Le verrou manquant\r\n\r\nRien n'empêche deux instances de `fetch_scripts.sh` de tourner en parallèle (par exemple via `cron` et un opérateur en interactif). Un `flock` sur un fichier de lock éviterait des courses sur les opérations de download/delete.\r\n\r\n---\r\n\r\n## Verdict\r\n\r\nC'est un script **utile, lisible, et bien construit pour un usage personnel** sur des machines de confiance. La logique de synchronisation est saine, l'ergonomie `whiptail` est appréciable, l'auto-bootstrap est élégant.\r\n\r\nMais dès qu'on franchit la frontière du « j'utilise ça sur mes propres machines avec mon propre dépôt », les manques se font sentir : **pas de vérification d'intégrité, pas de gestion d'erreur réseau, pas d'option de récupération**. Dans un contexte d'équipe ou de production, ces points sont bloquants.\r\n\r\n### Pistes d'évolution prioritaires\r\n\r\n1. **Signature ou checksum** : publier un `MANIFEST.sha256` signé GPG, le vérifier avant tout `mv` ou exécution.\r\n2. **`set -euo pipefail`** en tête de script pour faire échouer proprement à la première erreur.\r\n3. **Vérifier `wget`** : code de retour, fichier non vide, shebang présent.\r\n4. **Backup avant écrasement** : conserver la version précédente (`fetch_scripts.sh.bak`) pour pouvoir revenir en arrière.\r\n5. **Option `--dry-run`** pour visualiser sans appliquer.\r\n6. **Filtre regex** sur les noms de fichiers du manifeste pour éviter les traversées de chemin.\r\n7. **Lock file** via `flock` pour éviter les exécutions concurrentes.\r\n\r\nAvec ces ajouts, on passe d'un script « pratique » à un outil de déploiement digne de ce nom — sans rien perdre de sa simplicité initiale."} \ No newline at end of file diff --git a/_cache/articles/c8fa250e-d8b5-453a-a06a-799d53c3b6d1.json b/_cache/articles/c8fa250e-d8b5-453a-a06a-799d53c3b6d1.json deleted file mode 100644 index fe3059c..0000000 --- a/_cache/articles/c8fa250e-d8b5-453a-a06a-799d53c3b6d1.json +++ /dev/null @@ -1 +0,0 @@ -{"uuid":"c8fa250e-d8b5-453a-a06a-799d53c3b6d1","slug":"la-smart-brick-de-lego-quand-la-brique-devient-intelligente","title":"LEGO : La brique qui répond","author":"cedric@abonnel.fr","published":true,"published_at":"2026-01-13 20:26","created_at":"2026-01-13 20:26:53","updated_at":"2026-05-11 22:45:23","revisions":[{"n":1,"date":"2026-05-11 21:54:06","comment":"","title":"LEGO : La brique qui répond"},{"n":2,"date":"2026-05-11 22:45:23","comment":"","title":"LEGO : La brique qui répond"}],"cover":"cover.jpg","files_meta":{"cover.jpg":{"author":"","source_url":"https://thegadgetflow.com/wp-content/uploads/2026/01/LEGO-Interactive-smart-brick-featured-image-1.jpg"},"_thumb_035b34dd014ac80f-635197.jpg":{"author":"","source_url":""},"_thumb_5913d9738c966833-30567.jpg":{"author":"","source_url":""},"_thumb_7d6ba93f6ce840e7-13566.webp":{"author":"","source_url":""},"_thumb_d5dde33b48cd2761-66620.jpg":{"author":"","source_url":""},"_thumb_e99b946f131256b8-49943.jpg":{"author":"","source_url":""},"_thumb_fb5a5b1ffa000d12-30780.png":{"author":"","source_url":""}},"external_links":[{"url":"https://www.begeek.fr/lego-smart-brick-les-briques-de-la-marque-danoise-deviennent-interactives-426477","name":"LEGO Smart Brick : les briques de la marque danoise deviennent interactives","added_at":"2026-05-11 21:47:32","meta":{"mime":"text/html","size":36385,"description":"Avec les Smart Bricks, LEGO transforme chaque construction en une expérience connectée grâce à des capteurs, haut-parleurs et LED intégrés.","og_image":"/file?uuid=c8fa250e-d8b5-453a-a06a-799d53c3b6d1&name=_thumb_5913d9738c966833-30567.jpg","site_name":"Begeek","og_type":"article","language":"fr_FR","date":"2026-01-07T13:00:51+00:00","canonical":"https://www.begeek.fr/lego-smart-brick-les-briques-de-la-marque-danoise-deviennent-interactives-426477"}},{"url":"https://www.mac4ever.com/divers/193948-lego-devoile-une-etonnante-brique-intelligente-au-ces-2026","name":"LEGO dévoile une étonnante brique intelligente au CES 2026","added_at":"2026-05-11 21:47:50","meta":{"mime":"text/html","size":121071,"description":"Pour sa première apparition au CES de Las Vegas, LEGO frappe fort avec Smart Play, une nouvelle plateforme qui intègre de l'électronique miniaturisée…","og_image":"/file?uuid=c8fa250e-d8b5-453a-a06a-799d53c3b6d1&name=_thumb_7d6ba93f6ce840e7-13566.webp","site_name":"Mac4Ever","og_type":"article","language":"fr_FR","date":"2026-01-06T09:36:39+01:00","canonical":"https://www.mac4ever.com/divers/193948-lego-devoile-une-etonnante-brique-intelligente-au-ces-2026"}},{"url":"https://www.clubic.com/actualite-593794-lego-devoile-smart-play-sa-plus-grosse-innovation-depuis-toujours.html","name":"LEGO dévoile Smart Play, sa plus grosse innovation \"depuis... toujours\" !","added_at":"2026-05-11 21:48:05","meta":{"mime":"text/html","size":251642,"description":"Dans les couloirs du CES de Las Vegas, la marque LEGO a tenu à dévoiler une toute nouvelle brique intelligente : Smart Brick. Une brique qui va se charger de réagir de manière intelligente (et autonome) à son environnement, sans la moindre application ou écran externe.","og_image":"/file?uuid=c8fa250e-d8b5-453a-a06a-799d53c3b6d1&name=_thumb_d5dde33b48cd2761-66620.jpg","site_name":"clubic.com","og_type":"article","language":"fr_FR","date":"2026-01-07T09:56:00+01:00","canonical":"https://www.clubic.com/actualite-593794-lego-devoile-smart-play-sa-plus-grosse-innovation-depuis-toujours.html"}},{"url":"https://www.solutions-magazine.com/lego-smart-brick/","name":"LEGO lance sa « smart brick » - Solutions Magazine","added_at":"2026-05-11 21:48:23","meta":{"mime":"text/html","size":582486,"description":"Au CES, Lego a dévoilé un ensemble de nouvelles technologies insérées dans ses futurs jouets. Notamment sa « smart brick »","og_image":"/file?uuid=c8fa250e-d8b5-453a-a06a-799d53c3b6d1&name=_thumb_e99b946f131256b8-49943.jpg","site_name":"Solutions Magazine","og_type":"article","language":"fr_FR","date":"2026-01-10T15:56:46+00:00","canonical":"https://www.solutions-magazine.com/lego-smart-brick/"}},{"url":"https://www.lesnumeriques.com/jouet/lego-smart-play-on-a-mis-nos-gros-doigts-sur-la-petite-brique-magique-et-c-est-bluffant-n249358.html","name":"Lego Smart Play : on a mis nos gros doigts sur la petite brique magique, et c'est bluffant ! - Les Numériques","added_at":"2026-05-11 21:48:38","meta":{"mime":"text/html","size":219016,"description":"Présentée il y a quelques jours au CES en exclusivité, la brique Lego connectée Smart Brick s'est dévoilée un peu plus à Paris. Après quelques minutes de démonstration, avouons-le : nous regrettons de ne plus avoir 8 ans pour jouer avec sans scrupule.","keywords":"lego","og_image":"/file?uuid=c8fa250e-d8b5-453a-a06a-799d53c3b6d1&name=_thumb_035b34dd014ac80f-635197.jpg","og_type":"article","date":"2026-01-11T06:00:00Z","canonical":"https://www.lesnumeriques.com/jouet/lego-smart-play-on-a-mis-nos-gros-doigts-sur-la-petite-brique-magique-et-c-est-bluffant-n249358.html"}},{"url":"https://www.lego.com/fr-fr/smart-play","name":"Système LEGO® SMART Play™ | Boutique LEGO® officielle FR","added_at":"2026-05-11 21:48:47","meta":{"mime":"text/html","size":1219325,"description":"Voici le système LEGO® SMART Play™, conçu pour stimuler la créativité des enfants. Découvrez cette évolution du jeu LEGO® qui vous répond à l’infini ! Plus d’informations ici","canonical":"https://www.lego.com/fr-fr/smart-play","og_image":"/file?uuid=c8fa250e-d8b5-453a-a06a-799d53c3b6d1&name=_thumb_fb5a5b1ffa000d12-30780.png"}}],"seo_title":"","seo_description":"","og_image":"","category":"loisirs","content":"# LEGO : La brique qui répond\n\n## La brique qui répond\n\nÀ première vue c'est une brique LEGO comme une autre. Un parallélépipède de plastique gris, le format classique, deux par quatre tenons sur le dessus. On pourrait la prendre, l'emboîter dans un mur, et ne rien remarquer. Sauf que celle-là parle. Elle fait du bruit, elle clignote, elle sait si vous la secouez ou si vous la posez à plat. À l'intérieur, LEGO a réussi à caser un accéléromètre, un capteur de lumière, un capteur de couleur, un haut-parleur miniature et une puce sur mesure plus petite qu'un seul tenon. C'est la **LEGO Smart Brick**, et elle est arrivée en boutique le 1ᵉʳ mars 2026.\n\nIl faut tout de suite tordre le cou à un malentendu. La Smart Brick, ce n'est pas un Mindstorms. Ce n'est pas du LEGO éducatif, ce n'est pas une plateforme pour apprendre à coder, et on ne programme rien du tout avec. C'est un objet beaucoup plus simple dans son intention : faire en sorte qu'un set LEGO réagisse quand on joue avec. Vous prenez le X-Wing de Luke Skywalker, vous le faites basculer pour décoller, le brique embarquée détecte le mouvement et joue le bruit du moteur. Vous posez la minifigurine de Dark Vador à côté, la brique la reconnaît grâce à un Smart Tag (une petite tuile codée), et elle déclenche la respiration emblématique du Seigneur Sith. C'est tout. Mais c'est déjà beaucoup.\n\nLEGO appelle cet écosystème **Smart Play**. Il repose sur trois éléments. La Smart Brick elle-même, qui est le cerveau et le haut-parleur. Les Smart Tags, des tuiles plates qu'on accroche aux constructions et qui disent à la brique ce qu'elle doit faire à cet endroit (« ici tu joues un bruit de tir laser », « ici tu fais le bruit du réacteur »). Et les Smart Minifigures, des figurines avec un identifiant intégré, que la brique détecte quand on les approche. Le tout communique en local, sans appli obligatoire, sans écran, via un système maison que LEGO a baptisé BrickNet. C'est important : le pari est explicitement de faire de la techno **invisible**, pas de coller un smartphone entre l'enfant et le jouet.\n\nCôté pratique, la brique se recharge sans fil. Elle tient environ deux heures et demie en jeu actif, se met en veille au bout de trois minutes d'inactivité et se réveille quand on la secoue. Au-delà d'une dizaine d'heures de veille, il faut la remettre sur son chargeur. Une application gratuite, **LEGO SMART Assist**, sert à régler le volume, donner un nom à ses briques, gérer plusieurs appareils, et surtout mettre à jour le firmware — parce que oui, une brique LEGO peut maintenant recevoir des mises à jour logicielles. On y est.\n\nPour le lancement, LEGO a choisi Star Wars, et l'offre est un peu plus subtile qu'il n'y paraît. **Huit sets** sortent le 1ᵉʳ mars, mais seulement **trois contiennent réellement une Smart Brick**. Ce sont les coffrets dits *All-In-One*, qui embarquent la brique, son chargeur, des tags et des figurines intelligentes :\n\n- **75421 — Chasseur TIE de Dark Vador** : 69,99 €, le ticket d'entrée.\n- **75423 — Le X-Wing rouge de Luke Skywalker** : 89,99 €.\n- **75427 — Duel dans la salle du trône & A-Wing** : 159,99 €, le plus gros, avec **deux** Smart Bricks.\n\nLes cinq autres sets — Millennium Falcon, Mos Eisley Cantina, AT-ST Endor, hutte de Yoda, Landspeeder de Luke — sont étiquetés Smart Play mais ne contiennent **pas** de brique. Ils embarquent juste des tags et des figurines compatibles. Pour qu'ils s'animent, il faut posséder une brique achetée dans l'un des trois coffrets *All-In-One*, et la déplacer d'un set à l'autre. C'est un choix commercial qu'on peut critiquer : un parent ou un grand-parent qui voit *Smart Play* sur la boîte de la Mos Eisley Cantina à 79,99 € a de quoi être surpris en rentrant à la maison.\n\nGéographiquement, le lancement est restreint. Six pays seulement à l'ouverture : États-Unis, Royaume-Uni, France, Allemagne, Pologne, Australie. Le reste du monde attendra.\n\nPourquoi est-ce intéressant au-delà du cas Star Wars ? Parce que LEGO ne fait pas ça pour vendre trois sets. La marque parle de **plus de vingt brevets** déposés sur la techno, et de la « plus grande évolution du système LEGO depuis l'introduction de la minifigurine en 1978 ». Le ton est ambitieux, et il y a déjà des rumeurs de déclinaisons sur les gammes Pokémon et Animal Crossing. Si le pari réussit, on parle d'une plateforme qui peut s'étendre à toute la production LEGO sur dix ou vingt ans. Si elle échoue, ce sera la deuxième tentative ratée après les Mindstorms et la gamme Boost, dans la longue liste des essais LEGO pour marier l'électronique au plastique.\n\nLe point qui me semble vraiment réussi, c'est la philosophie sans écran. Là où la plupart des jouets connectés exigent une tablette pour fonctionner, où l'enfant finit en pratique à regarder un iPad plutôt qu'à jouer avec l'objet physique, LEGO a fait le choix inverse : l'application existe mais elle est facultative, toute l'interaction se passe entre les mains et les briques. C'est moins spectaculaire dans une démo marketing, mais c'est probablement plus juste pour des gamins de huit ans.\n\nReste à voir ce que ça donne en vrai, sur le tapis du salon, après six mois d'utilisation, quand la batterie sera moins fringante et que la nouveauté se sera émoussée. C'est toujours là que se joue la vraie partie pour ce genre de produit. Mais sur le papier, et c'est rare, LEGO a sorti quelque chose qui ne ressemble à rien d'autre.","featured":false,"tags":[]} \ No newline at end of file diff --git a/_cache/articles/c9796eff-43b9-4e51-b613-8eec21a8c352.json b/_cache/articles/c9796eff-43b9-4e51-b613-8eec21a8c352.json deleted file mode 100644 index cde33f7..0000000 --- a/_cache/articles/c9796eff-43b9-4e51-b613-8eec21a8c352.json +++ /dev/null @@ -1 +0,0 @@ -{"uuid":"c9796eff-43b9-4e51-b613-8eec21a8c352","slug":"gitea-prerequis","title":"gitea, prérequis","author":"cedric@abonnel.fr","published":true,"published_at":"2025-11-07 10:57:33","created_at":"2025-11-07 10:57:33","updated_at":"2025-11-07 10:57:33","revisions":[],"cover":"","category":"informatique","content":"# gitea, prérequis\n\nVoici les **pré-requis système** (processeur, mémoire, etc.) pour installer **Gitea** sur une distribution **Debian**\n\n---\n\n### **1. Exigences minimales**\n\nCes valeurs sont suffisantes pour un petit déploiement personnel ou une petite équipe.\n\n| Ressource | Minimum recommandé | Détails |\n| ------------------- | -------------------------------------------- | --------------------------------------------------------------------------------------------- |\n| **CPU** | 2+ vCPU / cœur | Gitea est léger, même un petit processeur type Atom ou 1 vCPU cloud suffit. |\n| **RAM** | 1 Go ou + | Le binaire Go est efficace. 1 Go est sûr pour un usage personnel. 2 Go ou plus (pour plusieurs utilisateurs) |\n| **Stockage** | ≥ 1 Go libre | Le binaire Gitea fait ~100 Mo, plus les dépôts Git (prévoir plus selon le nombre de projets). |\n| **OS** | Debian 12 (Bookworm) ou Debian 13 | Gitea fournit des binaires compatibles. |\n| **Base de données** | SQLite, MariaDB/MySQL, PostgreSQL | SQLite pour test/local, PostgreSQL ou MariaDB en prod. |\n| **Reverse proxy** | nginx, Caddy, Apache ... avec HTTPS |\n| **Utilisateur système** | `git` (non root) pour exécuter le service |\n\n---\n\n### **2. Vérification rapide des ressources**\n\nTu peux vérifier ta machine avec :\n\n```bash\nlscpu | grep \"Model name\"\nfree -h\ndf -h /\n```\n","featured":false,"files_meta":[],"external_links":[],"tags":[]} \ No newline at end of file diff --git a/_cache/articles/cb93c086-4b6f-4c32-82a5-208adb14d0bf.json b/_cache/articles/cb93c086-4b6f-4c32-82a5-208adb14d0bf.json deleted file mode 100644 index 69cea1b..0000000 --- a/_cache/articles/cb93c086-4b6f-4c32-82a5-208adb14d0bf.json +++ /dev/null @@ -1 +0,0 @@ -{"uuid":"cb93c086-4b6f-4c32-82a5-208adb14d0bf","slug":"esp8266-panorama-du-soc-des-modules-et-des-cartes-de-developpement","title":"ESP8266 : panorama du SoC, des modules et des cartes de développement","author":"cedric@abonnel.fr","published":true,"published_at":"2022-01-28 10:47","created_at":"2022-01-28 10:47:26","updated_at":"2026-05-13 18:32:46","revisions":[{"n":1,"date":"2026-05-13 18:32:46","comment":"Titre modifié, contenu modifié","title":"Spécifications de l'ESP8266"}],"cover":"","files_meta":{"20220128-104522.png":{"author":"","source_url":""},"ai-thinker.png":{"author":"","source_url":""},"espressif-logo-pratik-panda-clients-2.png":{"author":"","source_url":""},"nodemcuv3.0-pinout.jpg":{"author":"","source_url":""}},"external_links":[],"seo_title":"","seo_description":"","og_image":"","category":"Électronique","content":"# ESP8266 : panorama du SoC, des modules et des cartes de développement\n\n## Présentation\n\nL'**ESP8266** est un microcontrôleur économique intégrant nativement une interface **Wi-Fi 2,4 GHz** (IEEE 802.11 b/g/n) et une pile **TCP/IP**. Il est conçu et commercialisé par **Espressif Systems**, une société chinoise basée à Shanghai et présente à l'international (États-Unis, Inde, République tchèque, Brésil, Singapour).\n\nLancé fin **2014**, l'ESP8266 a connu un succès très rapide grâce à un rapport prix / fonctionnalités sans précédent : pour quelques euros, il met à disposition un microcontrôleur 32 bits cadencé à 80 MHz et une connectivité Wi-Fi complète. Sa version la plus connue, l'**ESP-01**, est devenue la porte d'entrée standard vers l'IoT pour le grand public.\n\nLe SoC a depuis été complété par la famille **ESP32** (cœur Xtensa LX6/LX7 dual-core, Bluetooth en plus du Wi-Fi), puis par les **ESP32-Cx / ESP32-Sx / ESP32-Hx**, mais l'ESP8266 reste massivement utilisé pour les projets simples et peu gourmands.\n\n## Trois niveaux à ne pas confondre\n\nAvant d'entrer dans les spécifications, une clarification utile sur le vocabulaire — fréquemment mélangé dans la documentation amateur :\n\n| Niveau | Définition | Exemples |\n|---|---|---|\n| **SoC** *(System on Chip)* | Le circuit intégré nu, vendu par Espressif. | ESP8266EX |\n| **Module** | Un petit PCB qui embarque le SoC, sa flash, son antenne et un brochage standardisé. | ESP-01, ESP-12E, ESP-WROOM-02 |\n| **Carte de développement** | Une carte plus large qui embarque un module + un USB-série + un régulateur + des boutons + des broches au pas standard. | NodeMCU, WeMos D1 mini, Adafruit HUZZAH |\n\nL'ESP-01 est donc un *module* (vendu par AI-Thinker), pas un SoC ni une carte de développement à proprement parler.\n\n## Spécifications techniques du SoC ESP8266EX\n\n### Processeur\n\n- cœur **Tensilica Xtensa LX106**, RISC 32 bits ;\n- cadencé à **80 MHz** par défaut, **160 MHz** en mode overclock logiciel.\n\n### Mémoire\n\n- **32 Kio** d'IRAM (instructions) ;\n- **32 Kio** de cache d'instructions ;\n- **80 Kio** de RAM utilisateur ;\n- **16 Kio** de RAM système réservée à l'ETS ;\n- pas de ROM ni de flash interne : le code est chargé depuis une **flash SPI externe** (QSPI) pouvant atteindre **16 Mio**, généralement comprise entre 512 Kio et 4 Mio sur les modules vendus.\n\n### Radio Wi-Fi\n\n- norme **IEEE 802.11 b/g/n** (2,4 GHz uniquement) ;\n- chiffrement **WEP, WPA, WPA2** (mais pas WPA3) ;\n- modes **station**, **point d'accès** et **mixte (STA+AP)** ;\n- bloc RF intégré (TR switch, balun, LNA, PA, matching network) — le module n'a besoin que de son antenne.\n\n### Périphériques\n\n- **17 GPIO** théoriques au niveau du SoC (mais beaucoup sont préemptées par la flash SPI ou non exposées sur les modules courants) ;\n- **SPI** matériel ;\n- **I²C** logiciel (bit-banging, pas de contrôleur dédié) ;\n- **I²S** avec DMA ;\n- **UART** matérielle complète sur des broches dédiées ; un second UART en émission seule peut être activé sur GPIO2 ;\n- un **ADC 10 bits** unique, par approximations successives, lisible sur la broche TOUT/ADC0.\n\n### Alimentation\n\n- tension d'alimentation **3,0 à 3,6 V** (nominal 3,3 V) ;\n- pics de courant pouvant atteindre **environ 300 mA** lors des émissions Wi-Fi.\n\n## Modules à base d'ESP8266\n\nDeux familles principales coexistent. AI-Thinker a inondé le marché avec la série « ESP-0x / ESP-1x », pendant qu'Espressif a publié sa propre gamme « ESP-WROOM » plus tardive.\n\n### Modules AI-Thinker\n\n![Logo AI-Thinker](ai-thinker.png)\n\nAI-Thinker a produit une longue série de modules, qui se distinguent essentiellement par leur **facteur de forme**, leur **antenne** (PCB, céramique, IPEX), leur **nombre de broches exposées** et la **taille de la flash** soudée.\n\nLes plus connus :\n\n| Module | Particularités |\n|---|---|\n| **ESP-01** | Le plus compact, 8 broches, antenne PCB, 1 Mo de flash sur les versions noires. Le plus économique, mais GPIO très limités. |\n| **ESP-01S** | Version améliorée de l'ESP-01, généralement 1 Mo de flash et LED câblée différemment. |\n| **ESP-07** | 16 broches, antenne céramique + connecteur IPEX pour antenne externe, blindage RF. |\n| **ESP-12E / ESP-12F / ESP-12S** | Format SMD 22 broches, blindé, antenne PCB. Base de la quasi-totalité des cartes NodeMCU et WeMos. |\n\nLes autres références (ESP-02 à ESP-11, ESP-13, ESP-14) existent mais ont peu percé en pratique. La plupart sont aujourd'hui difficiles à trouver et n'ont pas d'intérêt particulier face aux ESP-12x.\n\n### Modules Espressif\n\n![Logo Espressif](espressif-logo-pratik-panda-clients-2.png)\n\nEspressif a publié sa propre gamme « WROOM » certifiée FCC/CE, souvent privilégiée pour les produits commerciaux :\n\n| Module | Antenne |\n|---|---|\n| **ESP-WROOM-02** | PCB |\n| **ESP-WROOM-02D** | PCB (version révisée) |\n| **ESP-WROOM-02U** | Connecteur U.FL pour antenne externe |\n| **ESP-WROOM-S2** | Variante avec SDIO |\n\nListe détaillée et historique des modules sur Wikipédia : \n\n## Cartes de développement\n\nLes cartes de développement embarquent un module ESP8266 et tout le nécessaire pour démarrer immédiatement : convertisseur USB-série, régulateur 3,3 V, boutons RESET et FLASH, broches au pas de 2,54 mm, parfois LED utilisateur.\n\n### NodeMCU\n\n![Brochage NodeMCU v3](nodemcuv3.0-pinout.jpg)\n\nLa carte la plus populaire de la famille. Elle existe en plusieurs révisions :\n\n- **v0.9** : module ESP-12, format « large » 47 mm de large ;\n- **v1.0** (DEVKIT v1.0) : module ESP-12E, USB-série CP2102, format normalisé ;\n- **v3** (« LoLin » et clones) : module ESP-12E ou ESP-12F, USB-série CH340. C'est la version la plus répandue, bien que la numérotation « v3 » soit purement commerciale (non officielle).\n\nLa carte expose la plupart des GPIO du module sous des noms **D0 à D8** propres à NodeMCU, qui ne correspondent **pas** directement aux numéros GPIO de l'ESP8266. Une table de correspondance est indispensable :\n\n| Étiquette NodeMCU | GPIO ESP8266 |\n|---|---|\n| D0 | GPIO16 |\n| D1 | GPIO5 |\n| D2 | GPIO4 |\n| D3 | GPIO0 |\n| D4 | GPIO2 (LED interne) |\n| D5 | GPIO14 |\n| D6 | GPIO12 |\n| D7 | GPIO13 |\n| D8 | GPIO15 |\n\n### WeMos D1 mini\n\nFormat compact (34 × 25 mm), module ESP-12F, USB-série CH340. Compatible mécaniquement avec un large écosystème de **shields** empilables (relais, OLED, batterie, capteur DHT…). C'est aujourd'hui la carte la plus utilisée pour des projets domotiques.\n\n### Adafruit HUZZAH\n\nCarte haut de gamme avec module ESP-12E, régulateur 500 mA, niveau logique compatible avec une logique 5 V via résistances de pull-up. Idéale pour prototyper de manière fiable, mais plus chère et nécessite un FTDI externe sur la version sans USB.\n\n### Espressif ESP-12E (module)\n\nLe module ESP-12E n'est pas une carte de développement à proprement parler : c'est le module SMD soudé sur la majorité des NodeMCU et WeMos. Son brochage est cependant utile à connaître lorsqu'on veut concevoir sa propre carte autour de lui.\n\n![Brochage du module ESP-12E](20220128-104522.png)\n\n### DOIT ESP-12F\n\nCarte de prototypage à base de module ESP-12F, comparable à une NodeMCU v3, parfois vendue sous le nom **DOIT DevKit V1**.\n\n## Pour aller plus loin\n\n- [L'ESP-01 : présentation et premiers pas](https://varlog.a5l.fr/post/esp-01-presentation-premiers-pas)\n- [Premier programme ESP-01 : afficher les informations système](https://varlog.a5l.fr/post/esp-01-premier-programme)\n- [ESP8266 : commandes AT](https://varlog.a5l.fr/post/esp8266-commandes-at)\n- Documentation officielle Espressif : \n- Article Wikipédia (en anglais), plus complet : \n```\n","featured":false,"tags":[]} \ No newline at end of file diff --git a/_cache/articles/cd0a1ad7-7559-40e0-96b3-0bfbf4734d18.json b/_cache/articles/cd0a1ad7-7559-40e0-96b3-0bfbf4734d18.json deleted file mode 100644 index 0b1e585..0000000 --- a/_cache/articles/cd0a1ad7-7559-40e0-96b3-0bfbf4734d18.json +++ /dev/null @@ -1 +0,0 @@ -{"uuid":"cd0a1ad7-7559-40e0-96b3-0bfbf4734d18","slug":"forum-alpinux","title":"Forum Alpinux","author":"cedric@abonnel.fr","published":true,"published_at":"2025-04-04 07:45","created_at":"2025-04-04 07:45:00","updated_at":"2026-05-12 09:42:07","revisions":[],"cover":"cover.png","files_meta":{"571f5db24ca3ff68-74792.png":{"author":"Alpinux","source_url":""}},"external_links":[],"seo_title":"","seo_description":"","og_image":"","category":"linux","content":"# Forum Alpinux\n\nHier soir se tenait le *Repair du Libre* et le *Forum Alpinux* à Chambéry.\n\nLors du *Repair du Libre*, une personne est venue pour faire diagnostiquer son ordinateur. Trois points ont été vérifiés : la batterie, le disque dur et l’espace de stockage. La batterie, âgée de plus de 4 ans, était hors service. En revanche, le disque dur était en bon état selon *SmartControl*, et l’espace disque disponible était suffisant.\n\nNous avons également tenté d’installer **Linux Mint 22.1** sur un PC sans UEFI, mais l’opération s’est révélée complexe. L’installateur *Ubiquity* prépare le disque en mode GPT, ce qui n’est pas compatible avec une machine équipée d’un BIOS classique, entraînant l’échec de l’installation.\n\nPar ailleurs, un autre ordinateur présentait un problème de connexion Wi-Fi : le pilote ne se chargeait pas à cause de *Secure Boot*. Une fois ce dernier désactivé, la connexion devrait fonctionner normalement.\n\nEnfin, avec l’aide de Brice, nous avons échangé autour d’*OpenStreetMap*, *StreetComplete* et *OSMAND~* pendant le *Forum Alpinux*. Une contribution collective via *StreetComplete* est prévue en juin par Alpinux à Chambéry.\n","featured":false,"tags":[]} \ No newline at end of file diff --git a/_cache/articles/cfe738e9-7ac2-4c7e-9205-dab4957835c6.json b/_cache/articles/cfe738e9-7ac2-4c7e-9205-dab4957835c6.json deleted file mode 100644 index c4befc7..0000000 --- a/_cache/articles/cfe738e9-7ac2-4c7e-9205-dab4957835c6.json +++ /dev/null @@ -1 +0,0 @@ -{"uuid":"cfe738e9-7ac2-4c7e-9205-dab4957835c6","slug":"preparation-du-raspberry-pi","title":"Décoder les infos de la TIC et les communiquer","author":"cedric@abonnel.fr","published":true,"published_at":"2025-11-19 06:48","created_at":"2025-11-19 06:48:01","updated_at":"2026-05-12 17:38:19","revisions":[{"n":1,"date":"2026-05-12 17:38:19","comment":"Contenu modifié","title":"Décoder les infos de la TIC et les communiquer"}],"cover":"","files_meta":{"dummy.png":{"author":"","source_url":""}},"external_links":[],"seo_title":"","seo_description":"","og_image":"","category":"Électronique","content":"# Décoder les infos de la TIC et les communiquer\n\n## Choix du Raspberry Pi\n\nL'objectif est de récupérer automatiquement et à intervalles réguliers les informations émises par un compteur Linky, puis de les rendre accessibles depuis l'extérieur du Raspberry Pi.\n\nTrois prérequis matériels s'imposent donc :\n\n- une **connexion réseau**, pour exposer ou transmettre les données collectées ;\n- un **espace de stockage**, suffisant pour l'OS, les outils et l'historique des relevés ;\n- une **liaison série**, pour dialoguer avec la sortie TIC du compteur.\n\nLe choix s'est porté sur un **Raspberry Pi 3**, qui couvre ces trois besoins sans surcoût ni complexité supplémentaire. Le stockage est assuré par une carte SD, la liaison série est exposée sur le port GPIO, et la connectivité réseau bénéficie d'un atout pratique : l'armoire de brassage de la maison se trouve à quelques mètres du compteur électrique, ce qui permet d'envisager un raccordement filaire fiable plutôt qu'un lien sans fil.\n\nCôté logiciel, le système retenu est **Raspberry Pi OS** (anciennement Raspbian), recommandé par défaut sur cette plateforme. Cette distribution dérivée de Debian apporte tout l'écosystème GNU/Linux nécessaire : pile réseau TCP/IP, accès distant par SSH, synchronisation horaire NTP, gestion de bases de données, serveur web, interpréteurs PHP et Python. Autant de briques qui serviront aux étapes ultérieures du projet.\n\n## Câblage\n\nLe compteur Linky émet la trame TIC sous forme d'un **signal modulé en ASK** (Amplitude Shift Keying). Ce signal n'est pas directement exploitable par l'UART du Raspberry Pi, qui attend un niveau logique TTL stable.\n\nUn **démodulateur ASK** est donc intercalé entre le compteur et le Raspberry Pi. Son rôle est de récupérer la porteuse modulée et de restituer en sortie un signal binaire TTL propre, directement lisible par le port série.\n\nLa chaîne complète est la suivante :\n\n```\nCompteur Linky → Démodulateur ASK → UART du Raspberry Pi\n```\n\nLe câblage côté Raspberry Pi se résume à trois fils :\n\n| Broche | Signal | Rôle |\n|---|---|---|\n| Pin 1 | **3V3** | Alimentation du démodulateur |\n| Pin 6 | **GND** | Masse commune |\n| Pin 10 | **RX (GPIO15)** | Lecture de la sortie TTL du démodulateur |\n\n### Schéma de câblage\n\n```\n ┌─────────────────────────┐\n │ Compteur Linky │\n │ sortie TIC (ASK) │\n └───────────┬─────────────┘\n │ signal TIC modulé\n ▼\n ┌─────────────────────────┐\n │ Démodulateur ASK │\n │ │\n │ IN ← TIC data │\n │ GND ← TIC GND │\n │ │\n │ VCC ─────────────────────► Pin 1 (3V3)\n │ GND ─────────────────────► Pin 6 (GND)\n │ OUT ─────────────────────► Pin 10 (RX / GPIO15)\n └─────────────────────────┘ Raspberry Pi 3\n```\n\n## Installation de l'OS\n\nLe déploiement de Raspberry Pi OS sur la carte SD suit la procédure standard décrite dans l'article [à compléter]. Un point d'attention : **activer le service SSH** dès la préparation de l'image, faute de quoi aucun accès distant ne sera possible au premier démarrage.\n\nUne fois le Raspberry Pi mis sous tension et raccordé au réseau, son adresse IP n'est pas connue à l'avance. Un balayage du réseau local avec `nmap` permet de l'identifier :\n\n```bash\nnmap -sn 192.168.1.0/24\n```\n\n> Note : la cible passée à `nmap` est l'adresse du réseau (`.0/24`), pas celle de la passerelle. Le `/24` indique le masque de sous-réseau et délimite la plage scannée.\n\nUne fois l'adresse repérée, la connexion s'établit avec le compte `pi` et le mot de passe par défaut `raspberry` :\n\n```bash\nssh pi@192.168.1.68\n```\n\n> Premier réflexe sécurité : changer immédiatement le mot de passe du compte `pi` avec `passwd`, voire désactiver ce compte au profit d'un utilisateur dédié. Les identifiants par défaut sont connus de tous les scans automatisés.\n","featured":false,"tags":[]} \ No newline at end of file diff --git a/_cache/articles/d6571053-2261-4e6e-ab39-3c327ff2e8e4.json b/_cache/articles/d6571053-2261-4e6e-ab39-3c327ff2e8e4.json deleted file mode 100644 index e4a9643..0000000 --- a/_cache/articles/d6571053-2261-4e6e-ab39-3c327ff2e8e4.json +++ /dev/null @@ -1 +0,0 @@ -{"uuid":"d6571053-2261-4e6e-ab39-3c327ff2e8e4","slug":"les-strategies-de-migration-4g","title":"Les stratégies de migration 4G","author":"cedric@abonnel.fr","published":true,"published_at":"2025-11-05 08:43:31","created_at":"2025-11-05 08:43:31","updated_at":"2025-11-05 08:43:31","revisions":[],"cover":"","category":"télécom","content":"# Les stratégies de migration 4G\n\n### Pression progressive sur la 3G\n\nDepuis le déploiement massif de la 4G, les opérateurs français ont mis en place des **stratégies ciblées pour inciter les utilisateurs à migrer depuis la 3G**. Même lorsque la 3G suffisait pour des usages quotidiens (email, surf, visioconférence légère), plusieurs leviers ont été utilisés :\n\n* **Bridage progressif des débits 3G** : réduction systématique des vitesses en itinérance ou sur réseaux saturés.\n* **Promotion active de la 4G** : campagnes marketing, forfaits 4G plus attractifs.\n* **Optimisation du spectre** : récupération des fréquences 3G (900/1800/2100 MHz) pour augmenter la capacité 4G.\n* **Réduction du coût par bit** : la 4G transmet plus de données avec un coût énergétique et matériel inférieur à la 3G, incitant les opérateurs à concentrer les ressources sur la 4G.\n\nCes stratégies combinent aspects **techniques, économiques et commerciaux** pour rendre la migration quasi inévitable.\n\n---\n\n### Cas opérateurs : Free, Orange, SFR, Bouygues\n\n| Opérateur | 3G moyen (Mbit/s) | 4G moyen (Mbit/s) |\n| --------- | ----------------- | ----------------- |\n| Free | 0,384 | 50–150 |\n| Orange | 0,5–1 | 60–200 |\n| SFR | 0,5 | 50–150 |\n| Bouygues | 0,5 | 50–150 |\n\n* **Free Mobile** : itinérance 3G bridée à 384 kbit/s pour les abonnés hors 4G, couverture 4G déjà très étendue.\n* **Orange** : maintien de la 3G dans les zones rurales, mais réduction progressive des débits pour favoriser la 4G.\n* **SFR et Bouygues** : bridage partiel et incitations tarifaires à passer à la 4G.\n\n> Le tableau montre l’écart spectaculaire entre la 3G bridée et les débits moyens 4G, un argument indirect pour pousser les abonnés vers la nouvelle génération.\n\n---\n\n### Graphique suggéré : part des abonnés 4G vs 3G (2015–2025)\n\n```mermaid\n%% Simulation de la part des abonnés 3G vs 4G\n%% Remarque : données représentatives\npie\n title Part des abonnés 3G vs 4G (France)\n \"3G 2015\": 70\n \"4G 2015\": 30\n \"3G 2020\": 25\n \"4G 2020\": 75\n \"3G 2025\": 5\n \"4G 2025\": 95\n```\n\n* Ce graphique illustre la **migration progressive** : alors que la 3G dominait en 2015, elle devient marginale en 2025.\n* La stratégie opérateur a donc porté ses fruits : libération de spectre et concentration des ressources sur la 4G.\n\n---\n\n### Narratif\n\nMême si la 3G suffisait pour de nombreux usages quotidiens, **les opérateurs ont utilisé le bridage et la mise en avant de la 4G comme leviers indirects pour forcer la migration**.\n\n* **Libération du spectre** : les fréquences 3G peuvent être utilisées pour la 4G et préparer la 5G.\n* **Réduction des coûts** : maintenir la 3G est plus coûteux que concentrer les investissements sur la 4G.\n* **Pression subtile sur l’utilisateur** : le simple fait de ralentir la 3G encourage la migration sans hausse tarifaire directe.\n\n> En pratique, cela signifie que la 4G n’est pas seulement une amélioration technique, mais aussi un outil stratégique pour redéployer les ressources et moderniser le réseau.\n\n","featured":false,"files_meta":[],"external_links":[],"tags":[]} \ No newline at end of file diff --git a/_cache/articles/da1b3cec-980d-458c-9d2b-0c950d278f22.json b/_cache/articles/da1b3cec-980d-458c-9d2b-0c950d278f22.json deleted file mode 100644 index 5ff7f6d..0000000 --- a/_cache/articles/da1b3cec-980d-458c-9d2b-0c950d278f22.json +++ /dev/null @@ -1 +0,0 @@ -{"uuid":"da1b3cec-980d-458c-9d2b-0c950d278f22","slug":"domotique-les-vrais-problemes-en-domotique-zigbee-home-assistant","title":"Domotique : les vrais problèmes en domotique Zigbee & Home Assistant","author":"cedric@abonnel.fr","published":true,"published_at":"2026-05-22 18:00:00","created_at":"2026-05-22 18:00:00","updated_at":"2025-05-01 06:11:58","revisions":[],"cover":"","category":"domotique","content":"# Domotique : les vrais problèmes en domotique Zigbee & Home Assistant\n\nJe suis en train de préparer une vidéo un peu différente de celle que j’ai faite sur *Zigbee, Zigbee2MQTT et Home Assistant*. Cette fois, je veux parler des **problèmes concrets** que je rencontre **au quotidien**, dans une installation domotique qui fonctionne… mais pas toujours comme prévu.\n\nPar exemple, mon antenne Zigbee — une clé que j’utilise avec Zigbee2MQTT — se **déconnecte régulièrement**, toutes les 5 à 15 minutes. C’est intermittent, difficile à diagnostiquer, et surtout très frustrant. Parfois, elle réapparaît toute seule. D’autres fois, elle oblige à redémarrer le service ou la machine. Et évidemment, quand le Zigbee tombe, **toute la chaîne domotique en dépend** : capteurs inaccessibles, automatisations qui ne se déclenchent plus, etc.\n\nJe parlerai aussi des **problèmes côté serveur**, comme certaines **mises à jour** de Home Assistant ou d’addons qui ne se passent pas bien : dépendances cassées, redémarrages partiels, ou intégrations qui ne répondent plus comme avant. Ce sont des situations qu’on rencontre tôt ou tard quand on auto-héberge, surtout dans un système évolutif et modulaire comme Home Assistant.\n\nProblèmes coté objets connectés : \n* pile HS\n* valeurs incomplètes : il manque par exemple la puissance instantanée\n* valeurs incorrectes : la valeur retournée n'est plus du tout correcte (il fait 9°C dehors et la capteur indique -1°), l'energie totale consommée passe de 1234 kW à 950 kW\n* répondant de l'objet connecté : l'action n'est pas transmise ou avec avec beaucoup de retard à l'objet connecté quand l'objet de perd pas le réseau. Résolu avec la configuration de Zigbee2MQTT.\n* perte de réseau : peut poser des problème lorsqu'on pilote des radiateurs\n\nOutils nécessaires :\n* ssh\n* multimètre\n\nL’objectif de cette vidéo, ce n’est pas de me plaindre ni de critiquer les outils que j’utilise. Au contraire. J’ai choisi cette approche justement parce qu’elle me laisse la main. Mais je veux **montrer aussi la réalité terrain**, au-delà des démonstrations propres et des installations idéales. Parce que ce sont dans ces moments-là — quand on cherche, qu’on teste, qu’on tâtonne — qu’on apprend vraiment comment tout fonctionne.\n\nEt si je partage ça, c’est aussi pour que **d’autres qui rencontrent les mêmes soucis puissent comparer, proposer, ou tout simplement se rassurer**. Ce n’est pas parfait, mais ça tourne. Et parfois, savoir qu’on n’est pas seul à rencontrer un bug, c’est déjà beaucoup.","featured":false,"files_meta":[],"external_links":[],"tags":[]} \ No newline at end of file diff --git a/_cache/articles/da406813-bf15-4f4e-a700-2752550224bb.json b/_cache/articles/da406813-bf15-4f4e-a700-2752550224bb.json deleted file mode 100644 index 704a3be..0000000 --- a/_cache/articles/da406813-bf15-4f4e-a700-2752550224bb.json +++ /dev/null @@ -1 +0,0 @@ -{"uuid":"da406813-bf15-4f4e-a700-2752550224bb","slug":"quand-la-3g-suffisait-et-qu-on-vous-fait-basculer","title":"Quand la 3G suffisait… et qu’on vous fait basculer","author":"cedric@abonnel.fr","published":true,"published_at":"2025-11-05 08:38:25","created_at":"2025-11-05 08:38:25","updated_at":"2025-11-05 08:38:25","revisions":[],"cover":"","category":"télécom","content":"# Quand la 3G suffisait… et qu’on vous fait basculer\n\nUne plongée scientifique et technologique dans l’évolution des réseaux mobiles et la stratégie des opérateurs.\n\n---\n\n## Introduction\n\n> En 2015, votre 3G suffisait pour le télétravail, la visioconférence et le streaming léger. Aujourd’hui, même pour un simple email, certaines zones semblent plus lentes qu’avant.\n\nL’histoire des télécommunications mobiles est jalonnée de révolutions techniques. Chaque génération de réseau – de la 2G à la 5G – a apporté des débits supérieurs, des latences réduites et de nouveaux usages. Pourtant, derrière la façade technologique, une stratégie commerciale se dessine : la **migration forcée** des utilisateurs vers les nouvelles générations. Ce dossier examine comment la 3G, la 4G et la 5G se succèdent, comment les opérateurs orchestrent le passage d’une technologie à l’autre, et quels impacts cela a sur l’expérience utilisateur.\n\n---\n\n## La 3G : une technologie encore performante… bridée par les opérateurs\n\n### Définition et usages\n\nLa 3G (UMTS/HSPA) a marqué un saut qualitatif par rapport à la 2G. Développée à la fin des années 1990 et déployée massivement à partir de 2004, elle permettait :\n\n* des débits théoriques de 384 kbit/s jusqu’à 42 Mbit/s pour les variantes HSPA+ ;\n* des applications comme le surf web, la messagerie instantanée, les appels VoIP et la visioconférence légère ;\n* une latence moyenne de 150–200 ms, suffisante pour la plupart des usages bureautiques.\n\nPour l’utilisateur lambda, la 3G suffisait amplement. Pourtant, à partir de 2016–2017, certains opérateurs ont commencé à **réduire volontairement les performances**.\n\n### Exemple concret : Free Mobile\n\nFree Mobile, en itinérance sur le réseau Orange, a progressivement **bridé les débits 3G** :\n\n| Année | Débit descendant | Débit montant |\n| ----- | ---------------- | ------------- |\n| 2016 | ~5 Mbit/s | 0,5–1 Mbit/s |\n| 2017 | ~1 Mbit/s | 0,5 Mbit/s |\n| 2019 | 768 kbit/s | 384 kbit/s |\n| 2020 | 384 kbit/s | 384 kbit/s |\n\n> Source : [01net – Free Mobile et bridage 3G](https://www.01net.com/actualites/free-mobile-l-itinerance-3g-orange-sera-plus-lente-des-le-1er-janvier-avant-de-disparaitre-1833059.html)\n\nLes utilisateurs constatent alors que leur expérience, auparavant fluide, devient frustrante : ralentissement du web, vidéos qui ne se chargent pas correctement, visioconférences de qualité médiocre.\n\n### Pourquoi un bridage ?\n\nLe bridage de la 3G s’explique par plusieurs facteurs :\n\n1. **Refarming du spectre** : libérer les fréquences 900/1800/2100 MHz pour la 4G et la 5G ;\n2. **Coût d’entretien** : maintenir un réseau 3G coûteux pour des utilisateurs minoritaires n’est plus rentable ;\n3. **Incitation à migrer** : les abonnés passent naturellement aux nouvelles technologies pour profiter de meilleurs débits.\n\n**Schéma suggéré :** flux de données et coût par bit en 3G vs 4G.\n\n---\n\n## La 4G : la révolution nécessaire\n\n### Définition technique\n\nLa 4G, ou LTE (Long Term Evolution), est une avancée majeure :\n\n* Débits théoriques : 100 Mbit/s → 1 Gbit/s ;\n* Latence : 30–50 ms ;\n* Architecture optimisée : eNodeB remplace le contrôleur RNC de la 3G pour réduire les goulots d’étranglement ;\n* Utilisations : streaming HD, cloud computing, jeux en ligne, IoT.\n\n> La 4G a donc transformé l’expérience mobile et a rendu certaines limitations 3G plus visibles que jamais.\n\n### Stratégies de migration\n\nLes opérateurs incitent à la migration par :\n\n* le **bridage des anciennes générations** ;\n* la publicité sur les débits 4G/5G ;\n* le lancement de forfaits “4G-only”.\n\n| Opérateur | 3G moyen (Mbit/s) | 4G moyen (Mbit/s) |\n| --------- | ----------------- | ----------------- |\n| Free | 0,384 | 50–150 |\n| Orange | 0,5–1 | 60–200 |\n| SFR | 0,5 | 50–150 |\n| Bouygues | 0,5 | 50–150 |\n\n> Graphique suggéré : part des abonnés 4G vs 3G (2015–2025).\n\n---\n\n## La 5G : promesse et réalité\n\n### Les promesses\n\n* Débits : 100 Mbit/s → 10 Gbit/s selon fréquence et densité d’antennes ;\n* Latence ultra faible : 1–10 ms ;\n* Fréquences : 700 MHz → 26 GHz (mmWave) ;\n* Usages : cloud gaming, véhicules autonomes, IoT à grande échelle.\n\n### L’expérience utilisateur\n\nMême scénario qu’avec la 3G : certaines zones restent en 4G bridée, incitant les utilisateurs à passer à la 5G. La promesse de la 5G ne se réalise pleinement que dans les zones très denses ou les zones pilotes.\n\n**Schéma suggéré :** architecture 4G vs 5G.\n\n---\n\n## Conséquences pour l’utilisateur\n\n* **Scénarios pratiques :** visioconférence, streaming, cloud computing, IoT ;\n* **Expérience variable selon réseau :** frustration sur 3G bridée, fluidité sur 4G/5G ;\n* **Témoignages utilisateurs :** Reddit, forums français, témoignages directs.\n\n> “Dès qu’on tombe en 3G, rien ne charge correctement… le réseau est volontairement dégradé.” – Reddit\n\n---\n\n## Synthèse scientifique\n\n| Génération | Débit théorique | Latence | Couverture | Usages possibles | Coût par bit | Bridage existant |\n| ---------- | ---------------------- | ---------- | ---------- | -------------------------------------- | ------------ | ---------------------- |\n| 3G | 384 kbit/s → 42 Mbit/s | 150–200 ms | Très large | Email, surf, visio légère | Élevé | Itinérance bridée Free |\n| 4G | 100 Mbit/s → 1 Gbit/s | 30–50 ms | Large | Streaming HD, jeux, cloud | Moyen | Bridage minoritaire |\n| 5G | 100 Mbit/s → 10 Gbit/s | 1–10 ms | Variable | IoT, cloud gaming, véhicules autonomes | Faible | Pas encore |\n\n> Le bridage apparaît comme une stratégie commerciale autant qu’une conséquence technique, visant à préparer l’utilisateur à migrer vers de nouvelles technologies.\n\n---\n\n## Perspectives et conseils\n\n* Vérifier la couverture et la technologie disponible selon votre zone ;\n* Questionner son opérateur :\n\n 1. Suis-je sur le réseau propre ou en itinérance ?\n 2. Quels sont les débits effectifs en 3G et 4G ?\n 3. Quand la 3G sera-t-elle désactivée ?\n* Anticiper le passage à la 5G pour certains usages exigeants (IoT, cloud gaming, télétravail intensif).\n\n> Vous pouvez encore profiter de votre 3G… mais à quel prix ?\n\n---\n\n## Références principales\n\n1. [01net – Free Mobile et bridage 3G](https://www.01net.com/actualites/free-mobile-l-itinerance-3g-orange-sera-plus-lente-des-le-1er-janvier-avant-de-disparaitre-1833059.html)\n2. [Univers Freebox – Bridage 3G](https://www.universfreebox.com/article/47917/Free-Mobile-continue-de-brider-l-itinerance-3G-Orange)\n3. [ARCEP – Gestion spectre et couverture](https://www.arcep.fr/)\n4. Free Mobile – Fiche information standardisée 2020 ([PDF](https://mobile.free.fr/docs/fis/Fiche_information_standardisee_2020-12-15.pdf))\n","featured":false,"files_meta":[],"external_links":[],"tags":[]} \ No newline at end of file diff --git a/_cache/articles/ddb53aae-7214-4e3c-8af5-e42da60d8429.json b/_cache/articles/ddb53aae-7214-4e3c-8af5-e42da60d8429.json deleted file mode 100644 index 8be2d8d..0000000 --- a/_cache/articles/ddb53aae-7214-4e3c-8af5-e42da60d8429.json +++ /dev/null @@ -1 +0,0 @@ -{"uuid":"ddb53aae-7214-4e3c-8af5-e42da60d8429","slug":"kobo-elipsa-2e-le-cahier-a4-numerique-qu-on-attendait-a-quelques-details-pres","title":"Kobo Elipsa 2E : le cahier A4 numérique qu'on attendait, à quelques détails près","author":"cedric@abonnel.fr","published":true,"published_at":"2025-11-09 12:07","created_at":"2025-11-09 12:07:00","updated_at":"2026-05-12 01:43:39","revisions":[{"n":1,"date":"2026-05-12 01:43:39","comment":"","title":"Kobo Elipsa 2E : le cahier A4 numérique qu'on attendait, à quelques détails près"}],"cover":"cover.jpg","files_meta":{"cover.jpg":{"author":"","source_url":"https://fwd.nl/app/uploads/Kobo-Elipsa-2E-620x410.jpg"}},"external_links":[{"url":"https://fwd.nl/app/uploads/Kobo-Elipsa-2E-620x410.jpg","name":"Kobo Eclipse","added_at":"2026-05-12 01:42:43","meta":{"mime":"image/jpeg","size":48877,"width":620}}],"seo_title":"","seo_description":"","og_image":"","category":"loisirs","content":"# Kobo Elipsa 2E : le cahier A4 numérique qu'on attendait, à quelques détails près\n\n## Une liseuse qui n'en est plus tout à fait une\n\nPendant longtemps, le marché des liseuses s'est tenu à une règle non écrite : une liseuse, c'est petit, c'est noir et blanc, c'est fait pour lire des romans dans le métro. Les tentatives de sortir de ce cadre — Sony DPT-RP1, Onyx Boox, ReMarkable — restaient soit confidentielles, soit positionnées comme des outils de prise de notes pure, sans véritable identité de liseuse. Avec l'**Elipsa 2E**, Kobo assume frontalement l'hybridation. Ce n'est pas une liseuse à laquelle on a ajouté un stylet ; c'est un objet pensé dès le départ comme un *cahier numérique qui sait aussi lire des livres*.\n\nL'engin est imposant. Écran E-Ink Carta 1200 de 10,3 pouces, résolution 1404 × 1872 pour 227 ppi, processeur dual-core 2 GHz et 32 Go de stockage. Côté tarif, TechRadar la situe autour de 399 dollars ou 349 livres, ce qui la place dans une catégorie où on n'achète plus sur un coup de tête : à ce prix, on attend un usage précis, pas un gadget de chevet.\n\n## Le format change tout\n\nTenir l'Elipsa 2E pour la première fois, c'est comprendre instantanément à qui elle parle. À 10,3 pouces, on est très proche d'une feuille A5, voire d'un cahier d'étudiant — un format qui colle naturellement aux PDF et aux documents grand format. Et c'est là que tout se joue.\n\nQuiconque a déjà tenté de lire un PDF technique sur une liseuse 6 ou 7 pouces sait à quel point l'exercice est frustrant : on zoome, on déplace, on perd la mise en page, les schémas explosent en morceaux. Avec l'Elipsa 2E, un PDF A4 passe à l'écran à une taille parfaitement lisible, sans gymnastique. Les manuels techniques, les articles scientifiques, les supports de cours, les rapports d'entreprise : tout ce qui était pénible devient confortable. C'est moins spectaculaire que la couleur d'une Libra Colour, mais sur un usage professionnel ou étudiant intensif, le format change littéralement la nature de l'objet.\n\n## Le stylet, atout central — mais imparfait\n\nLe stylet est inclus dans la boîte. Détail qui n'a l'air de rien mais qui mérite d'être souligné, parce que l'usage prévu est clairement l'annotation directe sur les e-books et la prise de notes manuscrites. Pas de Kobo Stylus 2 à racheter en option, pas de configuration séparée : on déballe, on écrit.\n\nL'utilisation est exactement ce qu'on en attend. On peut surligner dans n'importe quel ePub, écrire dans la marge, créer des carnets vierges pour des notes manuscrites, dessiner des schémas à main levée. Tout ce qu'on griffonne reste dans le fichier, et — point essentiel — peut être ressorti ensuite. Le système prend en charge ePub, PDF, et accepte sans broncher les fichiers déposés par USB-C, Wi-Fi ou Bluetooth.\n\nMais il faut être honnête : la sensation d'écriture n'est pas au niveau de ce que proposent les meilleurs concurrents. eWritable est même cinglant, qualifiant l'expérience tactile d'« horrible » et pointant le choix par Kobo du protocole Microsoft Pen Protocol (MPP 2.0) plutôt que la technologie Wacom qui équipe le ReMarkable 2 et reste la référence du secteur. Concrètement, qu'est-ce que ça veut dire ? Que la pointe glisse un peu trop sur le verre, qu'il manque cette résistance subtile qui fait penser au crayon sur papier, et qu'à très haute vitesse d'écriture la latence devient perceptible. Pour quelqu'un qui annote ses lectures, surligne, prend des notes ponctuelles, c'est largement suffisant. Pour quelqu'un qui veut remplacer son carnet Moleskine en cours magistral et écrire trois pages d'affilée à vitesse normale, ce sera frustrant.\n\nC'est une différence de positionnement, pas un défaut technique grave : l'Elipsa 2E est d'abord une liseuse qui annote, pas un cahier qui sait aussi lire.\n\n## L'export des annotations, ce qui fait vraiment la différence\n\nC'est probablement le point sur lequel Kobo creuse l'écart avec ses concurrents, et notamment avec le Kindle Scribe. Le manuel officiel explique qu'on peut exporter ses annotations sous forme de fichier .txt et le récupérer sur son ordinateur, mais en réalité l'écosystème va plus loin : les PDF annotés ressortent avec les annotations intégrées à la page, prêts à être imprimés ou partagés.\n\nCe flux, en apparence banal, change tout pour qui travaille sérieusement avec ses lectures. Un étudiant peut annoter ses cours et imprimer la version surlignée pour les révisions. Un enseignant peut corriger des copies en PDF et renvoyer le fichier annoté à l'élève. Un consultant peut lire un rapport, le commenter en marge, le réintégrer dans sa documentation projet. Aucune annotation perdue, aucune resaisie. Là où Kindle Scribe limite encore largement l'export de ses annotations, Kobo joue le jeu de l'ouverture.\n\n## Le talon d'Achille : l'entrée des fichiers\n\nC'est ici que l'Elipsa 2E montre ses limites les plus tangibles, et il faut le savoir avant d'acheter. Contrairement à Kindle, il n'existe pas d'adresse e-mail officielle « envoyer à ma liseuse » : il faut transférer les fichiers manuellement, par USB ou via un service tiers comme Dropbox. Pour qui s'envoie régulièrement des articles ou des e-books depuis son ordinateur ou son téléphone, ce manque crée une vraie friction quotidienne.\n\nLes workarounds existent, à condition d'accepter de mettre un peu les mains dans le moteur. Un projet open source baptisé KoboMail propose un système d'envoi par e-mail pour certaines Kobo, et plus intéressant encore, un daemon Nextcloud-Kobo permet de synchroniser automatiquement un dossier Nextcloud via WebDAV vers la liseuse. C'est ouvert, c'est élégant, ça respecte le principe d'auto-hébergement — mais ce n'est pas du *plug and play*. Il faut un serveur Nextcloud opérationnel, savoir configurer une connexion WebDAV, et accepter que l'installation se fasse dans le dossier `/mnt/onboard/.adds/` du système Kobo. Bref, c'est superbe pour qui maîtrise déjà son infrastructure ; c'est rédhibitoire pour qui veut juste une solution clé en main.\n\nSur ce point précis, Kobo et Amazon proposent deux philosophies opposées : le confort immédiat d'un écosystème fermé contre la liberté d'un écosystème ouvert mais exigeant. À vous de voir où vous vous situez.\n\n## Pour qui ce produit a-t-il du sens ?\n\nL'Elipsa 2E est faite pour vous si vous lisez beaucoup de documents grand format — PDF techniques, cours universitaires, rapports professionnels, partitions — et si l'idée d'annoter ces documents fait partie intégrante de votre flux de travail. Elle est faite pour vous si vous voulez un objet unique au lieu de jongler entre une liseuse classique et un cahier papier. Elle est faite pour vous, aussi, si vous avez déjà (ou êtes prêt à monter) un Nextcloud ou un Dropbox pour synchroniser vos fichiers proprement.\n\nElle ne l'est pas si votre priorité est la prise de notes manuscrite intensive et fluide : sur ce terrain, un ReMarkable 2 ou un Supernote restent supérieurs. Elle ne l'est pas non plus si vous attendez le confort de l'envoi par e-mail à la Kindle, ou si l'idée d'installer un plugin communautaire pour combler un manque officiel vous donne de l'urticaire. Et elle est sans doute disproportionnée si vous lisez essentiellement des romans : à ce moment-là, une Clara BW à 150 € vous donnera plus de plaisir, dans un format de poche.\n\n## Mon avis\n\nL'Elipsa 2E est un produit ambitieux qui réussit l'essentiel et trébuche sur quelques détails finalement révélateurs. L'essentiel, c'est le format, la qualité de l'écran, l'export des annotations, l'ouverture du système et l'autonomie typique d'une liseuse — autant de raisons qui en font la meilleure proposition du marché pour un usage documentaire sérieux à ce niveau de prix.\n\nLes détails, ce sont le ressenti perfectible du stylet et l'absence d'un système d'entrée des fichiers digne de 2026. Kobo aurait pu intégrer nativement WebDAV — ça lui coûterait à peu près rien — et opter pour une dalle Wacom — ça lui coûterait plus cher mais lui ferait gagner une catégorie entière d'utilisateurs. À la place, on hérite d'un produit excellent à 80 %, et qui demande qu'on accepte ses zones grises sur les 20 % restants.\n\nPour qui cherche un véritable cahier A4 numérique sans basculer dans une tablette Android Onyx — plus chère, plus complexe, et au confort de lecture moindre — l'Elipsa 2E reste, à mes yeux, le meilleur compromis du moment. Pas le produit parfait. Le meilleur compromis. Ce n'est pas la même chose, et c'est très bien aussi.","featured":false,"tags":[]} \ No newline at end of file diff --git a/_cache/articles/e1e8a0c1-6971-4357-9aaa-7e7a748922f3.json b/_cache/articles/e1e8a0c1-6971-4357-9aaa-7e7a748922f3.json deleted file mode 100644 index 6edeaa3..0000000 --- a/_cache/articles/e1e8a0c1-6971-4357-9aaa-7e7a748922f3.json +++ /dev/null @@ -1 +0,0 @@ -{"uuid":"e1e8a0c1-6971-4357-9aaa-7e7a748922f3","slug":"quand-systemd-remplace-cron-pourquoi-et-comment-migrer-ses-taches-planifiees","title":"Quand systemd remplace cron : pourquoi (et comment) migrer ses tâches planifiées","author":"cedric@abonnel.fr","published":true,"published_at":"2026-06-01 07:56","created_at":"2026-05-12 13:57:29","updated_at":"2026-05-12 13:58:58","revisions":[],"cover":"","files_meta":{"b116a3e7b4b54c5c-13369.svg":{"author":"Générée par IA our Cédrix","source_url":""}},"external_links":[],"seo_title":"","seo_description":"","og_image":"","category":"informatique","content":"# Quand systemd remplace cron : pourquoi (et comment) migrer ses tâches planifiées\n\n*Cron tourne sur Linux depuis 1975. Il a fait son temps pour beaucoup d'usages : voici ce que les timers systemd apportent, et comment basculer sans tout casser.*\n\n## Pourquoi cron reste partout\n\n`cron` est l'un des plus anciens outils Unix encore en service. Son principe tient en deux idées : un démon qui se réveille toutes les minutes, et un fichier texte — la crontab — où chaque ligne décrit une commande et son moment d'exécution avec cinq champs (minute, heure, jour du mois, mois, jour de la semaine).\n\n```\n# m h dom mon dow command\n0 2 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1\n```\n\nCinquante ans plus tard, ça marche. C'est installé partout, c'est documenté à mort, ça tient sur une ligne, et n'importe quel administrateur sait lire `0 2 * * *`. Pour beaucoup de besoins simples — « lancer ce script tous les jours à 2h du matin » — cron reste le bon choix.\n\nLe problème est que les besoins ont rarement été aussi simples depuis longtemps.\n\n## Les limites de cron qu'on finit toujours par rencontrer\n\nÀ chaque administration de serveur sérieuse, on retombe sur les mêmes frustrations.\n\n**La machine était éteinte au moment du job.** Cron saute purement et simplement l'occurrence ratée. Si le portable de l'utilisateur dormait à 2h, la sauvegarde quotidienne n'aura pas lieu — point. Le job s'exécutera de nouveau le lendemain à 2h, sans rattrapage, sans alerte.\n\n**Les logs sont dispersés ou perdus.** Par défaut, la sortie standard du job est envoyée par mail à l'utilisateur (si `MAILTO` est défini et qu'un MTA tourne) ou simplement perdue. Le démon lui-même logue dans syslog quand il *démarre* un job, mais pas son contenu. Diagnostiquer pourquoi un job a échoué la semaine dernière relève souvent de l'archéologie.\n\n**Pas de dépendances.** Un job qui doit attendre que le réseau soit monté, qu'un point de montage soit présent, qu'un autre service ait fini son démarrage : cron ne sait pas exprimer ça. La parade habituelle — un `sleep 60` ou un `@reboot` suivi d'une boucle d'attente — fonctionne mais reste un bricolage.\n\n**Pas de recouvrement entre exécutions.** Si un job de 5 minutes en prend 7 ce jour-là, cron lance la prochaine occurrence pile au moment où la précédente tourne encore. Deux instances simultanées d'un script de synchronisation, c'est rarement ce qu'on veut.\n\n**Pas de jitter, pas de randomisation.** Quand cinquante VMs lancent leur `cron.daily` toutes en même temps à 6h25 (l'heure d'anacron par défaut sur Debian), le pic de charge sur l'hyperviseur est garanti. Cron n'offre aucune primitive pour étaler les exécutions.\n\n**Pas de visibilité globale.** Pour répondre à « quels jobs vont tourner aujourd'hui sur cette machine ? », il faut lire la crontab système, les crontabs utilisateur (`/var/spool/cron/`), le contenu de `/etc/cron.d/`, `/etc/cron.daily/`, `/etc/cron.hourly/`, etc. Aucune commande ne donne la vue consolidée.\n\n**Pas d'isolation, pas de quota.** Le job s'exécute avec les privilèges et les ressources du shell qui l'a lancé. Aucune façon native de limiter à 50 % de CPU, à 1 Go de RAM, ou de couper si ça dépasse 10 minutes.\n\nAucun de ces points ne rend cron inutilisable. Mais accumulés sur une dizaine de jobs critiques, ils transforment l'administration en travail de surveillance permanente.\n\n## Ce qu'apporte un timer systemd\n\nSur toute distribution Linux moderne basée sur systemd (la quasi-totalité, hors BSD, Alpine, Gentoo et quelques cas particuliers), une alternative native existe : les **timers**. Le principe est différent dès le départ.\n\nUn timer systemd, c'est **deux fichiers** au lieu d'une ligne :\n\n- Un fichier `.service` qui décrit **ce qu'il faut faire** — exactement comme on décrit un service classique, en mode `Type=oneshot` pour un job ponctuel\n- Un fichier `.timer` qui décrit **quand le faire** — ce sont les règles de déclenchement\n\nCette séparation entre le « quoi » et le « quand » est plus verbeuse au départ, mais elle débloque tout le reste.\n\n### Une syntaxe d'horaire lisible\n\nLà où cron oblige à mentaliser `0 2 * * 1-5`, systemd écrit :\n\n```ini\nOnCalendar=Mon..Fri 02:00:00\n```\n\nEt la commande `systemd-analyze calendar \"Mon..Fri 02:00:00\"` valide l'expression en montrant la prochaine exécution prévue. Une erreur de jour-de-semaine ou un décalage horaire ne plante pas en silence : on le voit avant de déployer.\n\nD'autres formes utiles que cron ne sait pas exprimer :\n\n```ini\nOnCalendar=*-*-* 02..04:00:00 # toutes les heures entre 2h et 4h\nOnCalendar=*-*-01 03:00:00 # tous les 1er du mois à 3h\nOnCalendar=*-*-* 09:00:00 Europe/Paris # à 9h heure de Paris, été comme hiver\n```\n\nLe support natif des fuseaux horaires est une avancée significative pour qui gère des serveurs distribués géographiquement — cron ignore tout du concept et tourne sur le fuseau du système.\n\n### Du temps relatif, pas seulement du temps absolu\n\nCron raisonne uniquement en horloge murale (« tel jour, à telle heure »). systemd ajoute le **temps monotone**, relatif à un événement :\n\n```ini\nOnBootSec=10min # 10 minutes après le démarrage\nOnUnitActiveSec=6h # toutes les 6 heures après la dernière exécution\nOnStartupSec=5min # 5 minutes après le démarrage de systemd\n```\n\n`OnUnitActiveSec=6h` règle proprement le problème des exécutions qui se chevauchent : la prochaine instance se déclenche 6 heures **après la fin** de la précédente, pas 6 heures après son démarrage. Aucune équivalence simple en cron.\n\n### Le rattrapage des exécutions ratées\n\nUne seule ligne change tout :\n\n```ini\nPersistent=true\n```\n\nAvec cette option, systemd mémorise la dernière exécution réussie. Si la machine était éteinte au moment prévu, le job se déclenche dès le démarrage suivant (après le `RandomizedDelaySec` éventuel, voir plus bas). Pour un portable, un poste de développement, ou n'importe quelle machine qui n'est pas en service 24/7, c'est une différence majeure de fiabilité.\n\n### Du jitter intégré\n\n```ini\nRandomizedDelaySec=15min\n```\n\nLe déclenchement se fait à un instant aléatoire dans la fenêtre `[heure_prévue, heure_prévue + 15 min]`. Quand cinquante machines lancent leur mise à jour quotidienne, le pic de charge se lisse au lieu de tomber au même instant. C'est la fonctionnalité que tous les administrateurs de flottes finissent par re-bricoler en cron avec un `sleep $((RANDOM % 900))` peu élégant.\n\n### Le logging gratuit dans journald\n\nTout ce que le service écrit sur stdout et stderr est capturé automatiquement par journald. Une seule commande pour tout consulter :\n\n```bash\njournalctl -u backup.service # toutes les exécutions historisées\njournalctl -u backup.service -f # en suivi temps réel\njournalctl -u backup.service --since yesterday\n```\n\nPas de configuration, pas de redirection à la main, pas de `>> /var/log/backup.log 2>&1` à coller à chaque ligne de crontab. Et accessoirement, journald gère la rotation, la compression et la rétention.\n\n### Les dépendances déclaratives\n\nDans le fichier `.service`, on peut dire au planificateur qu'un job nécessite que le réseau soit prêt, qu'un point de montage soit présent, qu'un autre service ait démarré :\n\n```ini\n[Unit]\nWants=network-online.target\nAfter=network-online.target\nRequiresMountsFor=/mnt/backup\n```\n\nsystemd attend que ces conditions soient remplies avant de déclencher le service. Le job ne tente plus de s'exécuter sur un montage absent ou avant que la résolution DNS soit fonctionnelle.\n\n### Le contrôle des ressources via cgroups\n\nPuisque chaque exécution passe par un service, on bénéficie de tout l'arsenal cgroups de systemd :\n\n```ini\n[Service]\nCPUQuota=50%\nMemoryMax=1G\nIOWeight=10\n```\n\nUn job de sauvegarde qui pourrait saturer le disque ne sortira pas de son enveloppe. Cron n'offre rien d'équivalent — au mieux on enrobe la commande dans `nice` et `ionice`, ce qui reste primitif.\n\n### La vue consolidée\n\n```bash\nsystemctl list-timers --all\n```\n\nUne seule commande, toutes les exécutions planifiées du système, classées par prochaine échéance, avec date de dernière exécution. La question « qu'est-ce qui tourne automatiquement sur cette machine ? » trouve enfin une réponse en une ligne.\n\n## Un exemple complet, pas-à-pas\n\nReprenons le job de sauvegarde initial — `0 2 * * * /usr/local/bin/backup.sh` — et traduisons-le.\n\n`/etc/systemd/system/backup.service` :\n\n```ini\n[Unit]\nDescription=Sauvegarde quotidienne\nWants=network-online.target\nAfter=network-online.target\n\n[Service]\nType=oneshot\nUser=backup\nGroup=backup\nExecStart=/usr/local/bin/backup.sh\n# Capture stdout/stderr dans journald (comportement par défaut, ici explicité)\nStandardOutput=journal\nStandardError=journal\n# Garde-fous ressources\nCPUQuota=50%\nMemoryMax=1G\n```\n\n`/etc/systemd/system/backup.timer` :\n\n```ini\n[Unit]\nDescription=Déclenche la sauvegarde tous les jours à 2h\n\n[Timer]\nOnCalendar=*-*-* 02:00:00\nPersistent=true\nRandomizedDelaySec=15min\n\n[Install]\nWantedBy=timers.target\n```\n\nActivation :\n\n```bash\nsudo systemctl daemon-reload\nsudo systemctl enable --now backup.timer\n```\n\nVérifications :\n\n```bash\nsystemctl list-timers backup.timer\nsystemctl status backup.timer\nsystemd-analyze calendar \"*-*-* 02:00:00\" # voir la prochaine échéance\njournalctl -u backup.service # voir l'historique\nsudo systemctl start backup.service # déclencher manuellement pour tester\n```\n\nComparé à la ligne de crontab originale, c'est plus verbeux. Mais on a, sans rien ajouter : le rattrapage en cas d'arrêt machine, du jitter pour éviter les pics, l'attente du réseau, des limites de ressources, du logging structuré, et une commande pour tout inspecter.\n\n## Quelques recettes utiles\n\n**Tous les jours à 3h sauf le dimanche** :\n\n```ini\nOnCalendar=Mon..Sat 03:00:00\n```\n\n**Toutes les 15 minutes pendant les heures de bureau** :\n\n```ini\nOnCalendar=Mon..Fri 08..18:00/15:00\n```\n\n**Le premier lundi de chaque mois à 5h** : pas faisable en une seule expression, mais combinable avec une condition `ExecStartPre` qui vérifie la date et sort si ce n'est pas le bon jour. C'est l'une des rares zones où cron reste plus naturel (`0 5 * * 1` + `[ $(date +\\%d) -le 7 ]` dans le script).\n\n**Toutes les six heures à partir du dernier passage** (jamais de chevauchement) :\n\n```ini\n[Timer]\nOnBootSec=5min\nOnUnitActiveSec=6h\n```\n\n**Timer utilisateur, sans `sudo`** : dans `~/.config/systemd/user/`, puis :\n\n```bash\nsystemctl --user daemon-reload\nsystemctl --user enable --now monjob.timer\nloginctl enable-linger $USER # pour que ça tourne sans session ouverte\n```\n\n## Quand garder cron\n\nTout n'est pas à migrer. Cron reste le bon choix dans plusieurs cas :\n\n- **Scripts portables vers BSD, macOS, ou des conteneurs minimaux**. systemd n'existe pas dans Alpine Linux, sur les BSD, ni dans la plupart des images Docker légères.\n- **Tâches utilisateur très simples sur un serveur partagé**, où chaque utilisateur gère sa propre crontab sans privilèges admin.\n- **Notification par mail intégrée** : si `MAILTO=admin@domain.tld` suivi d'une sortie sur stderr couvre déjà le besoin de monitoring, repasser par journald + un exporter Prometheus est de la sur-ingénierie.\n- **Un job de trente secondes à ajouter sur un serveur existant** déjà couvert par cron. Mélanger les deux outils est sans risque — ils coexistent sans interférence — et créer deux fichiers pour un alias unique d'une ligne reste excessif.\n\nLa meilleure stratégie est rarement migratoire au pas de charge. Elle consiste à **utiliser systemd pour toute nouvelle tâche planifiée**, et à ne migrer les jobs cron existants que quand ils posent un problème concret : un job raté qu'il fallait rattraper, un log perdu qu'il fallait retrouver, un chevauchement qui a corrompu des données.\n\n## En résumé\n\nCron n'est pas obsolète, il est sous-dimensionné pour des besoins modernes. Les timers systemd ne remplacent pas la simplicité d'une ligne de crontab pour un job trivial, mais ils apportent à peu près tout ce qui manque dès qu'une tâche planifiée devient critique : rattrapage, logging, dépendances, isolation, observabilité.\n\nPour un DevOps qui construit aujourd'hui un nouveau service, le choix par défaut a basculé : commencer en systemd, et n'utiliser cron que par exception justifiée. La verbosité initiale des deux fichiers se rentabilise au premier incident de production qu'on diagnostique en `journalctl -u nom.service` au lieu de fouiller dans des logs disparates.\n\nEt même sans migrer quoi que ce soit, la commande `systemctl list-timers` mérite d'entrer dans le réflexe de tout audit de machine Linux. C'est là que se cache la moitié des tâches planifiées qu'on croit avoir comprises.","featured":false,"tags":[]} \ No newline at end of file diff --git a/_cache/articles/e739bf3c-b380-4567-90aa-32da12f56bc5.json b/_cache/articles/e739bf3c-b380-4567-90aa-32da12f56bc5.json deleted file mode 100644 index ff93212..0000000 --- a/_cache/articles/e739bf3c-b380-4567-90aa-32da12f56bc5.json +++ /dev/null @@ -1 +0,0 @@ -{"uuid":"e739bf3c-b380-4567-90aa-32da12f56bc5","slug":"50g-pon-la-fibre-optique-du-futur","title":"50G-PON : la fibre optique du futur","author":"cedric@abonnel.fr","published":true,"published_at":"2025-11-05 08:48","created_at":"2025-11-05 08:48:01","updated_at":"2026-05-11 23:54:38","revisions":[{"n":1,"date":"2026-05-11 23:54:38","comment":"","title":"50G-PON : la fibre optique du futur"}],"cover":"cover.jpg","files_meta":{"cover.jpg":{"author":"","source_url":"https://www.zdnet.fr/wp-content/uploads/zdnet/2025/10/fibre-1125x615.jpg"},"_thumb_63b0e27c3950cfe1-993774.webp":{"author":"","source_url":""},"_thumb_6dea6d617384f5ed-875.gif":{"author":"","source_url":""},"_thumb_7df96bdf1ecebb75-124286.jpg":{"author":"","source_url":""},"_thumb_bfd46debd51361c4-255309.jpg":{"author":"","source_url":""},"_thumb_c436b74420666bbb-3393394.png":{"author":"","source_url":""},"_thumb_e58b3803bdfafdf0-360838.png":{"author":"","source_url":""}},"external_links":[{"url":"https://hellofuture.orange.com/fr/50g-pon-orange-ouvre-la-voie-a-la-fibre-du-futur/","name":"50G-PON : Orange ouvre la voie à la Fibre du futur - Hello Future","added_at":"2026-05-11 23:52:53","meta":{"mime":"text/html","size":117887,"description":"Sur la standardisation de la triple coexistence de trois technologies PON Depuis 2006, Orange déploie la fibre jusqu’aux domiciles (FTTH-Fibre To The Home) et jusqu’aux entreprises (FTTE-Fibre To The Entreprise). Les réseaux d’accès fibre d’Orange reposent sur des infrastructures passives (fibres, câbles, connecteurs, boitiers etc.) et des systèmes de transmissions…","og_image":"/file?uuid=e739bf3c-b380-4567-90aa-32da12f56bc5&name=_thumb_bfd46debd51361c4-255309.jpg","site_name":"Hello Future","og_type":"article","language":"fr_FR","date":"2024-06-25T10:27:25+01:00","canonical":"https://hellofuture.orange.com/fr/50g-pon-orange-ouvre-la-voie-a-la-fibre-du-futur/"}},{"url":"https://www.universfreebox.com/article/587477/orange-teste-la-fibre-du-futur-avec-la-50g-pon-a-40-gbit-s-une-premiere-en-france","name":"Orange teste la \"fibre du futur\" avec la 50G-PON à 40 Gbit/s, une première en France","added_at":"2026-05-11 23:53:22","author":"Lucas Musset","meta":{"mime":"text/html","size":118235,"description":"Orange teste la technologie 50G-PON, une première en France pour la fibre très haut débit. Ce jeudi 23 octobre 2025, Orange a présenté à Lyon et Marseille une démonstration grandeur nature de la technologie 50G-PON, considérée comme la prochaine étape majeure dans l’évolution des réseaux fibre optique. Il s’agit, selon l’opérateur, d’une première en France. […]","og_image":"/file?uuid=e739bf3c-b380-4567-90aa-32da12f56bc5&name=_thumb_c436b74420666bbb-3393394.png","site_name":"Univers Freebox","og_type":"article","language":"fr_FR","date":"2025-10-23T16:00:44+00:00","canonical":"https://www.universfreebox.com/article/587477/orange-teste-la-fibre-du-futur-avec-la-50g-pon-a-40-gbit-s-une-premiere-en-france"}},{"url":"https://www.generation-nt.com/actualites/orange-50g-pon-fibre-ftth-debit-2064811","name":"Fibre du futur : Orange teste du 50G-PON en conditions réelles","added_at":"2026-05-11 23:53:33","author":"Jérôme G.","meta":{"mime":"text/html","size":109809,"description":"GNT est le portail Hi-Tech français consacré aux nouvelles technologies (internet, logiciel, matériel, mobilité, entreprise) et au jeu vidéo PC et consoles.","keywords":"50g-pon orange fibre optique , orange, 50g, pon, fibre, ftth, debit","og_image":"/file?uuid=e739bf3c-b380-4567-90aa-32da12f56bc5&name=_thumb_63b0e27c3950cfe1-993774.webp","site_name":"Génération NT","og_type":"article","language":"fr_FR","canonical":"https://www.generation-nt.com/actualites/orange-50g-pon-fibre-ftth-debit-2064811"}},{"url":"https://www.zdnet.fr/actualites/orange-teste-la-fibre-optique-du-futur-jusqua-cinq-fois-plus-rapide-484095.htm","name":"Orange teste la fibre optique du futur, jusqu’à cinq fois plus ra ...","added_at":"2026-05-11 23:54:09","author":"Xavier Biseul","meta":{"mime":"text/html","size":236667,"description":"Dans ses laboratoires, l’opérateur historique mène des expérimentations sur la technologie 50G-PON. Ce nouveau standard des réseaux de fibre optique permet d’atteindre des débits théoriques allant jusqu’à 50 gigabits par seconde.","og_image":"/file?uuid=e739bf3c-b380-4567-90aa-32da12f56bc5&name=_thumb_7df96bdf1ecebb75-124286.jpg","site_name":"ZDNET","og_type":"article","language":"fr_FR","date":"2025-10-28T15:20:02+00:00","canonical":"https://www.zdnet.fr/actualites/orange-teste-la-fibre-optique-du-futur-jusqua-cinq-fois-plus-rapide-484095.htm"}},{"url":"https://www.lyon-entreprises.com/actualites/article/orange-teste-a-lyon-la-fibre-du-futur-grace-a-la-technologie-50g-pon","name":"Orange teste à Lyon la fibre du futur grâce à la technologie 50G-PON - Lyon Entreprises [LE]","added_at":"2026-05-11 23:54:21","meta":{"mime":"text/html","size":161762,"description":"Un article d'actualité LE [ Lyon-Entreprises ], le portail d'information sur les entreprises pour les décideurs de Lyon et Rhône-Alpes","og_image":"/file?uuid=e739bf3c-b380-4567-90aa-32da12f56bc5&name=_thumb_e58b3803bdfafdf0-360838.png","site_name":"Lyon Entreprises [LE]","og_type":"article","language":"fr_FR","canonical":"https://www.lyon-entreprises.com/actualites/article/orange-teste-a-lyon-la-fibre-du-futur-grace-a-la-technologie-50g-pon"}},{"url":"https://lafibre.info/orange-les-news/50g-pon-orange-ouvre-la-voie-a-la-fibre-du-futur/","name":"50G-PON : Orange ouvre la voie à la Fibre du futur","added_at":"2026-05-11 23:54:30","meta":{"mime":"text/html","size":48608,"description":"50G-PON : Orange ouvre la voie à la Fibre du futur","keywords":"Fibre optique,FTTH,très haut débit,Gpon,FTTLA,FTTdp,Test débit,SpeedTest","canonical":"https://lafibre.info/orange-les-news/50g-pon-orange-ouvre-la-voie-a-la-fibre-du-futur/","og_image":"/file?uuid=e739bf3c-b380-4567-90aa-32da12f56bc5&name=_thumb_6dea6d617384f5ed-875.gif"}}],"seo_title":"","seo_description":"","og_image":"","category":"télécom","content":"# 50G-PON : la fibre optique du futur\n\nLa fibre optique a déjà remplacé le cuivre dans la plupart des déploiements neufs, et les opérateurs ont passé la dernière décennie à généraliser le GPON puis le XGS-PON. Mais la course aux débits ne s'arrête pas là. La prochaine marche s'appelle le **50G-PON**, et elle est en train de passer du statut de standard sur le papier à celui de technologie qu'on commence à voir en démonstration chez les équipementiers. Voilà ce qu'il faut en retenir.\n\n## Ce que c'est\n\nLe 50G-PON est la dernière génération de réseau optique passif normalisée par l'ITU-T sous la référence **G.9804**. Comme ses prédécesseurs, il repose sur le principe d'une fibre unique partagée entre plusieurs abonnés via des splitters passifs — pas d'électronique active entre le central et le client. Ce qui change, c'est le débit : **50 Gbit/s symétriques** sur une seule longueur d'onde.\n\nPour situer la techno dans sa famille :\n\n- **GPON** : 2,5 Gbit/s descendant / 1,25 Gbit/s montant — la base du déploiement résidentiel actuel\n- **XGS-PON** : 10 Gbit/s symétriques — la génération qui prend le relais aujourd'hui\n- **NG-PON2** : 40 Gbit/s, obtenus en agrégeant quatre canaux de 10 Gbit/s sur des longueurs d'onde différentes\n- **50G-PON** : 50 Gbit/s symétriques sur une longueur d'onde unique\n\nLe point intéressant, c'est précisément ce dernier détail. Là où NG-PON2 multipliait les canaux pour atteindre 40 Gbit/s — au prix d'une électronique plus complexe et plus chère — le 50G-PON tape les 50 Gbit/s sur **une seule porteuse**. C'est techniquement plus exigeant côté composants optiques, mais beaucoup plus simple à industrialiser et à exploiter.\n\n## Comment ça marche\n\nL'architecture reste celle du PON classique, ce qui est un choix volontaire pour garantir la coexistence avec les générations précédentes :\n\n```\nOLT (central) ──── fibre ──── [Splitter passif] ─┬─── ONT abonné 1\n ├─── ONT abonné 2\n └─── ONT abonné 3\n```\n\n- L'**OLT** (*Optical Line Terminal*), côté opérateur, pilote le réseau et émet le signal.\n- Les **splitters passifs** dupliquent le signal lumineux pour le distribuer, sans alimentation ni amplification.\n- L'**ONT** (*Optical Network Terminal*), chez l'abonné, fait la conversion optique-électrique.\n\nL'astuce du 50G-PON, c'est qu'il utilise **des longueurs d'onde différentes** de celles du GPON et du XGS-PON. Concrètement, les trois technologies peuvent **cohabiter sur la même fibre physique** : un opérateur peut continuer à servir ses abonnés GPON existants tout en branchant des nouveaux clients en XGS-PON ou en 50G-PON, sans retoucher l'infrastructure passive. C'est un point décisif pour le déploiement, parce qu'il évite la rupture de service et étale l'investissement.\n\n## Pourquoi ça compte\n\nÀ 50 Gbit/s symétriques, on n'est plus dans la logique du « plus de débit pour le particulier ». L'enjeu est ailleurs, et il est triple.\n\nD'abord, **les usages professionnels** qui tournent en limite sur XGS-PON. Sauvegarde cloud à l'échelle d'une entreprise, synchronisation inter-sites, stockage partagé, environnements de travail virtualisés : ces flux ont besoin de débit symétrique et constant, et 10 Gbit/s commencent à serrer dans certains contextes.\n\nEnsuite, le **transport pour le mobile**. Une antenne 5G — et a fortiori 6G — doit être raccordée au cœur de réseau par un lien capable d'encaisser le trafic agrégé de tous les utilisateurs qu'elle sert. C'est ce qu'on appelle le *fronthaul* ou le *backhaul* selon l'architecture. Le 50G-PON est un candidat sérieux pour ce rôle, parce qu'il offre les bons débits avec une infrastructure mutualisable et peu coûteuse à exploiter.\n\nEnfin, **l'évolutivité**. La même fibre, le même splitter, le même chemin physique pourront porter le 50G-PON aujourd'hui et la génération suivante — déjà en discussion à l'ITU-T sous le nom de 100G-PON — demain. C'est ce qui justifie qu'on déploie du 50G-PON même si tous les abonnés n'en ont pas l'usage immédiat : ce n'est pas l'équipement client qui coûte cher, c'est la fibre dans la rue, et elle est déjà là.\n\n## Ce qui freine encore\n\nLe 50G-PON existe, il est standardisé, et plusieurs équipementiers proposent du matériel compatible. Pour autant, le déploiement à grande échelle prendra du temps, pour quelques raisons concrètes.\n\nLe **coût des équipements** reste élevé. Les composants optiques capables de moduler proprement à 50 Gbit/s sur une seule porteuse sont à un stade industriel récent, et les volumes ne sont pas encore là pour faire baisser les prix. Pour la majorité des foyers, le XGS-PON couvre largement les besoins et coûte beaucoup moins cher.\n\nLa **consommation énergétique** est plus importante que sur les générations précédentes. Ce n'est pas rédhibitoire, mais ça compte dans le bilan d'exploitation, surtout à l'échelle d'un opérateur.\n\nEnfin, **le marché n'est pas pressé**. Les box résidentielles actuelles n'exploiteraient même pas 10 Gbit/s symétriques, et les usages qui justifient le 50G-PON sont aujourd'hui concentrés sur des segments précis — entreprises, datacenters, opérateurs mobiles. Le déploiement va donc se faire par couches, en commençant par les zones où la demande existe vraiment.\n\n## En résumé\n\n| Technologie | Débit symétrique | Cible principale |\n|---|---|---|\n| GPON | 1 Gbit/s | Résidentiel actuel |\n| XGS-PON | 10 Gbit/s | Résidentiel haut de gamme, PME |\n| NG-PON2 | 40 Gbit/s (4 × 10) | Niche, peu déployé |\n| 50G-PON | 50 Gbit/s | Entreprises, datacenters, transport mobile |\n\nLe 50G-PON n'est pas la techno qui va arriver dans les box grand public dans les six mois. C'est la **brique d'infrastructure** qui prépare la décennie qui vient : celle qui permettra aux opérateurs de répondre à la fois aux besoins des entreprises, au raccordement des antennes mobiles de prochaine génération, et à la montée en puissance progressive du résidentiel — sans toucher à la fibre déjà tirée. Et c'est exactement ce qu'on attend d'une bonne infrastructure : qu'elle se mette en place sans bruit, et qu'elle dure.\n","featured":false,"tags":[]} \ No newline at end of file diff --git a/_cache/articles/e9adfdab-6246-411f-9953-91fcfcfb105f.json b/_cache/articles/e9adfdab-6246-411f-9953-91fcfcfb105f.json deleted file mode 100644 index fef08e3..0000000 --- a/_cache/articles/e9adfdab-6246-411f-9953-91fcfcfb105f.json +++ /dev/null @@ -1 +0,0 @@ -{"uuid":"e9adfdab-6246-411f-9953-91fcfcfb105f","slug":"esp32","title":"esp32","author":"cedric@abonnel.fr","published":true,"published_at":"2025-11-29 06:31:50","created_at":"2025-11-29 06:31:50","updated_at":"2025-11-29 06:31:50","revisions":[],"cover":"","files_meta":[],"external_links":[],"seo_title":"","seo_description":"","og_image":"","category":"Électronique","content":"# esp32\n\n![ESP32 pour Téléinfo](dummy.png)\n\n## Choix de l’ESP32\nL’ESP32 constitue une alternative compacte et économique pour récupérer automatiquement les informations TIC d’un compteur électrique. Il présente plusieurs avantages :\n\n- **une connexion Wi-Fi intégrée**, permettant de communiquer facilement avec un serveur, une box domotique ou un service en ligne ;\n- **un espace de stockage interne (SPI Flash)** pour le firmware et les données nécessaires au fonctionnement ;\n- **une interface série (UART)** directement accessible sur les broches GPIO pour lire les trames issues du démodulateur ASK.\n\nL’utilisation d’un **démodulateur ASK** permet d’obtenir un signal numérique TTL immédiatement compatible avec l’entrée UART de l’ESP32, sans adaptation de niveau. Les broches les plus couramment utilisées pour la liaison série sont **GPIO16 (RX)** ou **RX0 (GPIO3)**, selon la configuration retenue.\nL’alimentation du module est assurée par la sortie **3,3 V** de l’ESP32, ce qui permet un câblage simple et propre.\n\nGrâce à son environnement logiciel flexible (Arduino, ESP-IDF, MicroPython…), l’ESP32 permet de mettre en place facilement des fonctions avancées : connexion Wi-Fi, envoi de données vers MQTT, interface Web locale, synchronisation NTP, journalisation, etc.\n\n## Câblage\n⚠️ **Attention : ne pas confondre 3V3, VIN et VCC/VDD (5 V)**\n\nSur une carte ESP32 (dev board type WROOM / NodeMCU / UPesy / DOIT…), les tensions disponibles sont :\n\n### • 3V3 (3.3 V régulé)\n- C’est la sortie du régulateur embarqué.\n- Elle alimente le microcontrôleur ESP32 et ses GPIO.\n- **Toutes les entrées/sorties de l’ESP32 sont *strictement* en 3,3 V.**\n- **Le démodulateur ASK doit être alimenté ici.**\n\n### • VIN (ou 5V selon les cartes)\n- Entrée utilisée pour alimenter la carte en **5 V** (via USB ou alimentation externe).\n- Passera ensuite par le régulateur pour produire le **3,3 V interne**.\n- **NE PAS utiliser VIN pour alimenter le démodulateur ASK**.\n\n### • Pourquoi cette précision ?\nParce que certains modules ou schémas utilisent la notation **VCC / VDD**, qui peut désigner tantôt 3,3 V, tantôt 5 V selon le fabricant.\nSur l’ESP32, **la seule tension sûre pour alimenter un module logique est 3V3**.\n\n### Rappel important\n- Les GPIO de l’ESP32 **ne sont pas tolérants au 5 V**.\n- Injecter du 5 V sur RX0, GPIO3 ou tout autre GPIO risque de **détruire le microcontrôleur**.\n\n### Description du câblage\n![](20251119-075836.png)\n\nSchéma de *câblage ESP32 générique* provenant du site \n\nL’ESP32 est connecté au **démodulateur ASK**, qui fournit un signal numérique TTL prêt à être lu par l’UART de l’ESP32.\nLe câblage est très simple : trois fils suffisent entre l’ESP32 et le module.\n\nBroches recommandées :\n\n- **3V3** – alimentation du démodulateur\n- **GND** – masse commune\n- **RX0 / GPIO3** entrée série utilisée pour lire les trames TIC)\n\nL’ESP32 ne transmet aucune commande au compteur : seule la ligne **RX** est nécessaire.\nLe démodulateur assure la conversion du signal modulé provenant du Linky vers un signal propre au format TTL.\n\n---\n\n### Schéma de câblage (ASCII)\n```\n+-----------------------------+\n| Compteur Linky |\n| --- |\n| Sortie TIC (ASK) |\n +-------------+---------------+\n| |\n| --- |\n| Signal TIC modulé |\n v\n +-----------------------------+\n| Démodulateur ASK |\n| --- |\n| |\n| IN <---------------------+- TIC Data |\n| GND <---------------------+- TIC GND |\n| |\n| OUT ----------------------+------------------> RX0 / GPIO3 |\n| GND ----------------------+------------------> GND |\n| VCC <---------------------+------------------- 3V3 |\n +-----------------------------+\n\n```\n ╔═══════════════════════╗\n ║ ESP32 ║\n ║ Dev Board ║\n ╠═══════════════════════╣\n ║ 3V3 : alimentation ║\n ║ GND : masse ║\n ║ GPIO3 : RX0 (UART) ║\n ╚═══════════════════════╝\n```\n```\n\n## ESP Home\n\nLa capture ci-dessus illustre un ESPHome fonctionnel, connecté à un compteur Linky, affichant les mesures électriques instantanées et les index de consommation. En parallèle, les logs temps réel confirment la bonne réception et l’envoi périodique des données.\n\n## Tasmota\nPour récupérer et exploiter les informations du compteur électrique Linky, nous allons utiliser un logiciel tel que **Tasmota**. Tasmota est un firmware open-source pour microcontrôleurs ESP8266 et ESP32, conçu pour simplifier la gestion des objets connectés et la domotique.\n\nGrâce à Tasmota, il devient possible de :\n\n- **Lire directement les trames TIC** via l’entrée UART de l’ESP32, en utilisant un démodulateur ASK pour obtenir un signal numérique TTL propre.\n- **Transmettre les données** vers un serveur local ou en ligne, une box domotique ou un service cloud compatible MQTT ou HTTP.\n- **Configurer facilement le système** sans coder, grâce à son interface Web intuitive et ses nombreuses options de paramétrage pour les GPIO, UART et protocoles réseau.\n\nEn utilisant Tasmota avec l’ESP32, nous transformons ce microcontrôleur en un **collecteur TIC intelligent**, capable de centraliser les informations énergétiques de manière autonome et de les rendre exploitables pour la domotique ou le suivi de consommation.\n## Installer Tasmota\nBrancher l'ESP32 sur l'ordinateur. Voir la page .\n\nTélécharger **Tasmota32** (`tasmota32.bin`) qui inclut les drivers nécessaires à la Téléinfo/TIC.\n\nTéléchargez-le ici : https:*ota.tasmota.com/tasmota32/release/\n\nFlasher Tasmota pour ESP32 avec espytool","featured":false,"tags":[]} \ No newline at end of file diff --git a/_cache/articles/f008f509-2cad-437f-9850-7b39ec37262a.json b/_cache/articles/f008f509-2cad-437f-9850-7b39ec37262a.json deleted file mode 100644 index 099df59..0000000 --- a/_cache/articles/f008f509-2cad-437f-9850-7b39ec37262a.json +++ /dev/null @@ -1 +0,0 @@ -{"uuid":"f008f509-2cad-437f-9850-7b39ec37262a","slug":"gitea-l-installation","title":"gitea, l'installation","author":"cedric@abonnel.fr","published":true,"published_at":"2025-11-07 11:01:57","created_at":"2025-11-07 11:01:57","updated_at":"2025-11-07 11:01:57","revisions":[],"cover":"","category":"informatique","content":"# gitea, l'installation\n\nVoici un guide pas à pas pour installer Gitea sur Debian 13 avec PostgreSQL comme base de données, et configurer un reverse-proxy (par ex. Traefik ou Nginx) pour servir Gitea. \n\n---\n\n## 1. Pré-requis\n\n* Un serveur Debian 13 à jour.\n\n ```bash\n sudo apt update && sudo apt upgrade -y\n ```\n* Installer Git, et éventuellement d’autres dépendances.\n\n ```bash\n sudo apt install -y git ca-certificates\n ```\n* Un nom de domaine `git.abonnel.fr` pointant vers votre serveur (DNS A ou AAAA).\n* Assurez-vous que le port 80 et/ou 443 sont ouverts sur le serveur (pour le proxy).\n* Installer PostgreSQL.\n\n---\n\n## 2. Installer PostgreSQL et créer base & utilisateur\n\n1. Installer PostgreSQL (Debian 13 inclut postgresql dans ses dépôts).\n\n ```bash\n sudo apt install -y postgresql postgresql-contrib\n ```\n2. Passer à l’utilisateur postgres et créer la base + utilisateur pour Gitea :\n\n ```bash\n sudo -i -u postgres\n psql\n CREATE DATABASE gitea WITH ENCODING 'UTF8' TEMPLATE template0;\n CREATE USER gitea WITH PASSWORD 'votre_mot_de_passe_sécurisé';\n GRANT ALL PRIVILEGES ON DATABASE gitea TO gitea;\n \\q\n exit\n ```\n\n Ces commandes sont conformes à la documentation Gitea pour PostgreSQL. ([Gitea Documentation][1])\n3. Vérifier que PostgreSQL fonctionne :\n\n ```bash\n sudo systemctl status postgresql\n ```\n4. (Optionnel) Modifier le fichier `pg_hba.conf` si vous voulez autoriser certaines connexions supplémentaires (ex: accès réseau).\n\n---\n\n## 3. Installer Gitea\n\n1. Créer un utilisateur système qui va exécuter Gitea :\n\n ```bash\n sudo adduser --system --shell /bin/bash --gecos 'Git Version Control' --group --disabled-password --home /home/git git\n ```\n\n ([Gitea Documentation][2])\n2. Créer les dossiers de travail :\n\n ```bash\n sudo mkdir -p /var/lib/gitea/{custom,data,log}\n sudo chown -R git:git /var/lib/gitea/\n sudo chmod -R 750 /var/lib/gitea/\n sudo mkdir /etc/gitea\n sudo chown root:git /etc/gitea\n sudo chmod 770 /etc/gitea\n ```\n\n ([Gitea Documentation][3])\n3. Télécharger le binaire Gitea :\n\n ```bash\n wget -O gitea https://dl.gitea.com/gitea/1.24.7/gitea-1.24.7-linux-amd64\n chmod +x gitea\n sudo mv gitea /usr/local/bin/gitea\n ```\n\n (Vérifiez la version la plus récente sur le site officiel) ([Gitea Documentation][2])\n4. Créer un fichier de service systemd pour Gitea. Exemple minimal (`/etc/systemd/system/gitea.service`) :\n\n ```ini\n [Unit]\n Description=Gitea (Git with a cup of tea)\n After=network.target postgresql.service\n\n [Service]\n User=git\n Group=git\n WorkingDirectory=/var/lib/gitea/\n ExecStart=/usr/local/bin/gitea web --config /etc/gitea/app.ini\n Restart=always\n Environment=USER=git HOME=/var/lib/gitea GITEA_WORK_DIR=/var/lib/gitea\n\n [Install]\n WantedBy=multi-user.target\n ```\n\n Ensuite :\n\n ```bash\n sudo systemctl daemon-reload\n sudo systemctl enable --now gitea\n sudo systemctl status gitea\n ```\n\n ([Gitea Documentation][4])\n\n---\n\n## 4. Configuration via l’interface web\n\n* Ouvrez [http://votre-serveur:3000](http://votre-serveur:3000) (ou le port que Gitea utilise) dans un navigateur.\n* Dans l’assistant d’installation, choisissez *PostgreSQL* comme type de base de données. Entrez :\n\n * Host : `localhost:5432` (ou l’IP/port selon)\n * Database : `gitea`\n * Username : `gitea`\n * Password : celui que vous avez défini\n* Dans le champ \"Base URL\", indiquez `https://git.abonnel.fr/` (ou http selon votre setup).\n* Complétez le reste (admin account, etc.).\n ([James R. S. Kemp Git][5])\n\n---\n\n## 5. Configurer reverse-proxy pour `git.abonnel.fr`\n\nSi vous utilisez Nginx ou Traefik (ou un autre proxy) vous devez rediriger le domaine vers Gitea.\n\n### Exemple avec Nginx :\n\n```nginx\nserver {\n listen 80;\n server_name git.abonnel.fr;\n\n # redirection vers HTTPS (si certbot/Let’s Encrypt)\n return 301 https://$host$request_uri;\n}\n\nserver {\n listen 443 ssl;\n server_name git.abonnel.fr;\n\n ssl_certificate /etc/letsencrypt/live/git.abonnel.fr/fullchain.pem;\n ssl_certificate_key /etc/letsencrypt/live/git.abonnel.fr/privkey.pem;\n\n location / {\n proxy_pass http://127.0.0.1:3000;\n proxy_set_header Host $host;\n proxy_set_header X-Real-IP $remote_addr;\n proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n proxy_set_header X-Forwarded-Proto $scheme;\n }\n}\n```\n\nCet exemple est inspiré des tutos d’installation Gitea + Nginx. ([James R. S. Kemp Git][5])\nSi vous utilisez un autre proxy (ex: Traefik ou « zoraxyproxy »), adaptez la configuration pour qu’il fasse passer `git.abonnel.fr` vers `localhost:3000` et gère SSL.\n\n### Activer HTTPS\n\n* Installez `certbot` ou utilisez votre gestionnaire de certificats.\n\n ```bash\n sudo apt install -y certbot python3-certbot-nginx\n sudo certbot --nginx -d git.abonnel.fr\n ```\n* Vérifiez que le certificat est actif et que `https://git.abonnel.fr` fonctionne.\n\n---\n\n## 6. Configuration finale dans app.ini\n\nAprès installation, vous pouvez ajuster `/etc/gitea/app.ini` (ou via l’interface). Exemples de réglages utiles :\n\n* Dans `[server]` :\n\n ```\n ROOT_URL = https://git.abonnel.fr/\n HTTP_PORT = 3000\n SSH_PORT = 22 # ou le port SSH que vous utilisez pour Git \n START_SSH_SERVER = false # si vous n’utilisez pas le serveur SSH interne \n DOMAIN = git.abonnel.fr\n ```\n* Dans `[database]` :\n\n ```\n DB_TYPE = postgres\n HOST = 127.0.0.1:5432\n NAME = gitea\n USER = gitea\n PASSWD = votre_mot_de_passe\n SSL_MODE = disable # ou require selon votre config\n ```\n* Redémarrez Gitea après modification :\n\n ```bash\n sudo systemctl restart gitea\n ```\n\n---\n\n## 7. Sécuriser & entretien\n\n* Assurez-vous que seuls les ports nécessaires sont exposés (ex: 80/443 via proxy, 3000 en local si non exposé).\n* Faites des sauvegardes régulières : base PostgreSQL + dossier `/var/lib/gitea/data` (ou vos dépôts).\n* Vérifiez les logs de Gitea (souvent dans `/var/lib/gitea/log/`).\n* Gardez Gitea et PostgreSQL à jour.\n* Si vous utilisez SSH pour les repos Git, configurez correctement les clés SSH utilisateur et vérifiez que l’utilisateur `git` a bien les permissions.\n\n---\n\n\n[1]: https://docs.gitea.com/enterprise/installation/linux?utm_source=chatgpt.com \"Install on Linux | Gitea Enterprise Documentations\"\n[2]: https://docs.gitea.com/installation/install-from-binary?utm_source=chatgpt.com \"Installation from binary | Gitea Documentation\"\n[3]: https://docs.gitea.com/1.18/installation/install-from-binary?utm_source=chatgpt.com \"Installation from binary | Gitea Documentation\"\n[4]: https://docs.gitea.com/1.20/category/installation?utm_source=chatgpt.com \"Installation | Gitea Documentation\"\n[5]: https://git.jamesrskemp.com/hosting/gitea.html?utm_source=chatgpt.com \"Gitea - Git Commands by James Skemp\"\n","featured":false,"files_meta":[],"external_links":[],"tags":[]} \ No newline at end of file diff --git a/_cache/backlinks.json b/_cache/backlinks.json index 75aecbd..0637a08 100644 --- a/_cache/backlinks.json +++ b/_cache/backlinks.json @@ -1 +1 @@ -{"post-install":[{"uuid":"0bba1ad7-e4cb-49a6-9467-fcfac2e09a93","slug":"deuxiemes-pas-devops-durcir-et-fiabiliser-un-serveur-debian","title":"Deuxièmes pas DevOps : durcir et fiabiliser un serveur Debian","cover":"cover.jpg","category":"informatique","published_at":"2026-06-08 07:00","created_at":"2026-05-12 23:01:34"}],"advanced-access-control-mechanisms-in-lte-and-5g-nr-networks":[{"uuid":"4f443bcb-b0d4-47f8-837d-61627e6c94f2","slug":"priorites-et-acces-au-reseau-en-4g-et-5g","title":"Pourquoi le réseau mobile ne s'effondre pas le jour où tout le monde téléphone en même temps","cover":"cover.jpg","category":"télécom","published_at":"2026-01-06 22:21","created_at":"2026-01-06 22:21:04"}]} \ No newline at end of file +[] \ No newline at end of file diff --git a/a2487513-2848-4e62-bd19-d8ebb205e502/files/_thumb_3b36733949021940-73450.jpg b/a2487513-2848-4e62-bd19-d8ebb205e502/files/_thumb_3b36733949021940-73450.jpg deleted file mode 100644 index ea61807..0000000 Binary files a/a2487513-2848-4e62-bd19-d8ebb205e502/files/_thumb_3b36733949021940-73450.jpg and /dev/null differ diff --git a/a2487513-2848-4e62-bd19-d8ebb205e502/files/_thumb_442161d0a89ddd20-93141.png b/a2487513-2848-4e62-bd19-d8ebb205e502/files/_thumb_442161d0a89ddd20-93141.png deleted file mode 100644 index eb1ee32..0000000 Binary files a/a2487513-2848-4e62-bd19-d8ebb205e502/files/_thumb_442161d0a89ddd20-93141.png and /dev/null differ diff --git a/a2487513-2848-4e62-bd19-d8ebb205e502/files/_thumb_6cf992e9f28c8172-4217.png b/a2487513-2848-4e62-bd19-d8ebb205e502/files/_thumb_6cf992e9f28c8172-4217.png deleted file mode 100644 index 625d316..0000000 Binary files a/a2487513-2848-4e62-bd19-d8ebb205e502/files/_thumb_6cf992e9f28c8172-4217.png and /dev/null differ diff --git a/a2487513-2848-4e62-bd19-d8ebb205e502/files/_thumb_926396967ba5066a-5819.png b/a2487513-2848-4e62-bd19-d8ebb205e502/files/_thumb_926396967ba5066a-5819.png deleted file mode 100644 index 3f9de21..0000000 Binary files a/a2487513-2848-4e62-bd19-d8ebb205e502/files/_thumb_926396967ba5066a-5819.png and /dev/null differ diff --git a/a2487513-2848-4e62-bd19-d8ebb205e502/files/_thumb_92af148c2c6c0f4e-30461.png b/a2487513-2848-4e62-bd19-d8ebb205e502/files/_thumb_92af148c2c6c0f4e-30461.png deleted file mode 100644 index f515aa3..0000000 Binary files a/a2487513-2848-4e62-bd19-d8ebb205e502/files/_thumb_92af148c2c6c0f4e-30461.png and /dev/null differ diff --git a/a2487513-2848-4e62-bd19-d8ebb205e502/files/_thumb_d713074303b20cbd-5978.png b/a2487513-2848-4e62-bd19-d8ebb205e502/files/_thumb_d713074303b20cbd-5978.png deleted file mode 100644 index 768a78b..0000000 Binary files a/a2487513-2848-4e62-bd19-d8ebb205e502/files/_thumb_d713074303b20cbd-5978.png and /dev/null differ diff --git a/a2487513-2848-4e62-bd19-d8ebb205e502/files/_thumb_da0580ecf0511076-371380.png b/a2487513-2848-4e62-bd19-d8ebb205e502/files/_thumb_da0580ecf0511076-371380.png deleted file mode 100644 index 18de4ca..0000000 Binary files a/a2487513-2848-4e62-bd19-d8ebb205e502/files/_thumb_da0580ecf0511076-371380.png and /dev/null differ diff --git a/a2487513-2848-4e62-bd19-d8ebb205e502/files/_thumb_dae1b79a9d60ae4b-22161.jpg b/a2487513-2848-4e62-bd19-d8ebb205e502/files/_thumb_dae1b79a9d60ae4b-22161.jpg deleted file mode 100644 index ded0547..0000000 Binary files a/a2487513-2848-4e62-bd19-d8ebb205e502/files/_thumb_dae1b79a9d60ae4b-22161.jpg and /dev/null differ diff --git a/a2487513-2848-4e62-bd19-d8ebb205e502/index.md b/a2487513-2848-4e62-bd19-d8ebb205e502/index.md deleted file mode 100644 index c84e024..0000000 --- a/a2487513-2848-4e62-bd19-d8ebb205e502/index.md +++ /dev/null @@ -1,452 +0,0 @@ -# Progressive Web Apps — Dossier 2026 - -## 1. Qu'est-ce qu'une PWA ? - -Une **Progressive Web App** est une application web qui, grâce à des APIs modernes des navigateurs, se comporte comme une application native : installable sur l'écran d'accueil, capable de fonctionner hors ligne, de recevoir des notifications push, de s'intégrer au système d'exploitation, tout en restant un site web indexable par les moteurs de recherche. - -Le mot clé est **progressive** : l'expérience s'enrichit selon les capacités du navigateur et de l'appareil. Sur un Chrome récent sous Android, la PWA offre une expérience proche du natif ; sur un vieux navigateur, elle reste un site web fonctionnel. - -Une PWA repose sur trois piliers techniques : - -- **HTTPS obligatoire** — sécurité et confiance, prérequis pour toutes les APIs sensibles. -- **Service Worker** — un script JavaScript qui tourne en arrière-plan, intercepte les requêtes réseau, gère le cache et les notifications. -- **Manifest** (`manifest.webmanifest`) — un fichier JSON qui décrit l'application (nom, icônes, couleurs, mode d'affichage) pour permettre son installation. - -Trois critères définissent une PWA selon Google : elle doit être **fiable** (charge instantanément, même hors ligne), **rapide** (réagit vite aux interactions) et **engageante** (sensation d'application native, réengagement par notifications). - -## 2. Histoire et promoteurs - -L'idée d'une convergence web/natif n'est pas neuve. Steve Jobs, en 2007, présentait initialement l'iPhone sans App Store : les développeurs étaient censés faire des « web apps ». L'App Store est arrivé un an plus tard et a marginalisé cette vision pendant près d'une décennie. - -Le terme **« Progressive Web App »** est proposé en 2015 par la designer Frances Berriman et l'ingénieur Google **Alex Russell**, pour désigner les sites tirant parti des nouvelles APIs (service workers notamment, standardisés à partir de 2014-2015). - -**Les promoteurs historiques :** - -- **Google** — moteur principal. Pousse la spécification, intègre les PWA à Chrome, Android, ChromeOS, et au Play Store (depuis 2019, on peut publier une PWA empaquetée via TWA — Trusted Web Activity). -- **Microsoft** — second souffle majeur. Edge intègre les PWA nativement, et Windows permet leur publication au Microsoft Store via packaging MSIX. En mai 2025, Edge a ajouté les **App Actions on Windows** pour les PWA, améliorant la découvrabilité système. -- **Mozilla** — soutien historique des standards, support solide dans Firefox (bien que l'installation desktop ait été retirée puis partiellement réintégrée selon les versions). -- **Apple** — adoption lente et réticente, voir section 6. - -**Les premiers grands déploiements** (vers 2016-2017) ont servi de cas d'école : Twitter Lite, AliExpress, Pinterest, Flipkart, Starbucks, Uber, Tinder, Trivago. Tous ont publié des chiffres montrant des gains d'engagement et de conversion significatifs, ce qui a légitimé le modèle auprès des grandes entreprises. - -## 3. Comment ça marche techniquement - -### 3.1 Le manifeste - -Fichier JSON déclaratif qui dit au navigateur : « ce site est installable, voici comment il doit se présenter ». - -```json -{ - "name": "Mon Application", - "short_name": "MonApp", - "start_url": "/", - "display": "standalone", - "background_color": "#ffffff", - "theme_color": "#0066cc", - "icons": [ - { "src": "/icons/icon-192.png", "sizes": "192x192", "type": "image/png" }, - { "src": "/icons/icon-512.png", "sizes": "512x512", "type": "image/png" } - ] -} -``` - -Référencé dans le HTML : - -```html - - -``` - -Le mode `display: standalone` retire la barre d'adresse au lancement depuis l'écran d'accueil ; `fullscreen` masque même la barre système. - -### 3.2 Le Service Worker - -Script JavaScript qui s'exécute dans un thread séparé, sans accès direct au DOM, et qui agit comme un **proxy programmable** entre l'application et le réseau. - -```javascript -// sw.js -const CACHE_NAME = 'app-v1'; -const ASSETS = ['/', '/index.html', '/styles.css', '/app.js', '/icons/icon-192.png']; - -// Installation : on précharge les ressources critiques -self.addEventListener('install', (event) => { - event.waitUntil( - caches.open(CACHE_NAME).then((cache) => cache.addAll(ASSETS)) - ); -}); - -// Activation : on nettoie les anciens caches -self.addEventListener('activate', (event) => { - event.waitUntil( - caches.keys().then((keys) => - Promise.all(keys.filter((k) => k !== CACHE_NAME).map((k) => caches.delete(k))) - ) - ); -}); - -// Fetch : stratégie cache-first, puis réseau en fallback -self.addEventListener('fetch', (event) => { - event.respondWith( - caches.match(event.request).then((cached) => cached || fetch(event.request)) - ); -}); -``` - -Enregistrement depuis la page principale : - -```javascript -if ('serviceWorker' in navigator) { - navigator.serviceWorker.register('/sw.js'); -} -``` - -### 3.3 Stratégies de cache - -Quatre patterns canoniques selon le type de ressource : - -- **Cache-first** — sert le cache, va sur le réseau si absent. Idéal pour les assets statiques (CSS, JS, polices). -- **Network-first** — tente le réseau, retombe sur le cache en cas d'échec. Idéal pour les contenus dynamiques (articles, posts). -- **Stale-while-revalidate** — sert le cache immédiatement, met à jour en arrière-plan. Bon compromis pour les contenus semi-dynamiques (listes, avatars). -- **Network-only / Cache-only** — cas particuliers (analytics, données critiques). - -### 3.4 Les APIs modernes mobilisables - -En 2026, l'écosystème PWA s'appuie sur un éventail large : - -- **Push API + Notifications API** — notifications push, y compris sur iOS 16.4+ (sous conditions). -- **Background Sync** — différer une requête jusqu'au retour de la connectivité (Chrome/Edge ; pas sur iOS). -- **Periodic Background Sync** — déclencher du code à intervalle régulier (Chrome/Edge uniquement). -- **Web Share API** — utiliser le menu de partage natif du système. -- **File System Access API** — lire/écrire dans des fichiers locaux (Chrome/Edge). -- **WebGPU, WebAssembly SIMD, WebNN** — calcul intensif et inférence IA côté client. -- **Badging API** — afficher un badge numérique sur l'icône d'app. -- **Web Bluetooth, Web USB, Web Serial** — accès matériel (Chrome/Edge, hors iOS). -- **Payment Request API** — paiements unifiés, dont Apple Pay sur Safari. - -## 4. Exemples emblématiques - -Les références suivantes ont structuré la perception du modèle PWA. Les chiffres sont ceux publiés par les entreprises à l'époque de leur migration. - -**Twitter Lite** (2017) — Twitter a déployé une PWA pesant moins de 1 Mo (contre 23 Mo pour l'app native Android). Résultat : +65 % de pages par session, +75 % de tweets envoyés, −20 % de taux de rebond. Nicolas Gallagher, alors lead du projet, résumait : « Twitter Lite is now the fastest, least expensive, and most reliable way to use Twitter. » - -**AliExpress** — Migration de leur site mobile vers une PWA. Doublement du temps passé par session, +104 % de taux de conversion pour les nouveaux utilisateurs sur tous les navigateurs. - -**Pinterest** — Refonte en PWA en 2017. Le poids initial du bundle JavaScript est passé de 650 Ko à 150 Ko. Temps passé +40 %, revenus publicitaires +44 %, engagement utilisateur +60 %. - -**Starbucks** — Une PWA pour la commande en ligne, environ 600 Ko (contre 148 Mo pour l'app iOS native). Double des commandes quotidiennes via le web, avec des chiffres particulièrement marqués sur les marchés à faible bande passante. - -**Spotify, Uber, Tinder, Trivago, BMW, Forbes, The Washington Post** — Tous ont déployé des versions PWA, soit en remplacement de leur site mobile, soit en complément de l'app native. - -**Note d'objectivité :** ces cas remontent majoritairement à 2017-2019. Beaucoup ont été suivis d'allers-retours stratégiques (certaines entreprises ont depuis re-priorisé le natif pour des raisons de fonctionnalités ou de distribution). Twitter, par exemple, a depuis fait évoluer son web app et son app native en parallèle. Ces chiffres restent illustratifs d'un potentiel, pas d'une vérité universelle. - -## 5. Où en est-on en 2026 ? - -### 5.1 Maturité du modèle - -Trois leviers ont fait basculer les PWA d'une expérimentation à une option pragmatique : - -1. **Maturité des APIs clés** — service worker stable, manifest standardisé, Web Push enfin disponible sur Safari (iOS 16.4+). -2. **Intégration croissante par les OS et stores** — packaging MSIX vers le Microsoft Store, TWA vers le Play Store, App Actions sur Windows, mode app par défaut sur iOS 26. -3. **Preuves de ROI répétées** sur une décennie de déploiements. - -### 5.2 Chiffres du marché - -Les estimations convergent vers une croissance soutenue. Selon Research Nester, le marché mondial des PWA dépassait 2,47 Md$ en 2025, est estimé à 3,14 Md$ en 2026, avec une projection à 34,58 Md$ d'ici 2035 (TCAC supérieur à 30 %). - -L'adoption reste cependant **concentrée** : selon les datasets publics (HTTP Archive / Web Almanac), une fraction modeste des sites déclarent un service worker, mais ces sites représentent une part disproportionnée du trafic mondial — autrement dit, ce sont les gros sites qui adoptent. - -### 5.3 Nouveautés récentes - -- **Declarative Web Push** (Safari 18.4, 2025) — alternative simplifiée au Web Push impératif, ne nécessitant pas de service worker pour des notifications basiques. -- **App Actions on Windows** pour les PWA (Edge, mai 2025) — les PWA peuvent déclarer des actions invocables depuis la barre de recherche Windows. -- **iOS 26** — tout site ajouté à l'écran d'accueil s'ouvre par défaut en mode application, même sans manifest. Avancée notable côté Apple. -- **WebGPU, WebNN, WebAssembly SIMD** — débloquent l'inférence IA côté client, ouvrant la voie à des PWA capables de traitements lourds locaux (vision, NLP, recommandation). - -### 5.4 Verrous résiduels - -- **Découvrabilité** — beaucoup d'utilisateurs ne savent pas qu'« ajouter à l'écran d'accueil » installe une vraie app. Pas de prompt automatique sur iOS. -- **Fragmentation des APIs** — Chrome/Edge avancent vite, Safari traîne, Firefox se positionne au cas par cas. Le détection de feature reste obligatoire. -- **Stockage** — quotas plus stricts sur iOS qu'ailleurs, avec un risque d'éviction du cache après 7 jours sans utilisation sur certaines configurations. -- **Monétisation** — pas de système intégré de paiement in-app comme l'App Store. Il faut passer par Stripe, Apple Pay via Payment Request, etc. - -## 6. Le cas iOS : limites et particularités - -Apple a toujours été le frein principal à l'adoption universelle des PWA. Les raisons sont à la fois techniques et stratégiques (revenus de l'App Store, contrôle de la plateforme, monopole de WebKit). - -**Ce qui marche en 2026 sur iOS :** - -- Installation manuelle sur l'écran d'accueil (mais pas de prompt automatique). -- Mode standalone (fenêtre sans barre d'adresse). -- Service workers (avec des quotas et limitations). -- Push notifications, **uniquement si la PWA a été installée à l'écran d'accueil** (depuis iOS 16.4). -- Apple Pay via Payment Request API. -- Géolocalisation, caméra, microphone. - -**Ce qui ne marche pas ou mal :** - -- Pas de Background Sync ni de Periodic Background Sync. -- Pas de Web Bluetooth, Web USB, Web NFC. -- Stockage limité, susceptible d'être purgé sans usage. -- Pas de silent push ni de réveil en arrière-plan. -- L'audience effectivement joignable par push est environ 10 à 15 fois plus petite que sur app native, une fois pris en compte le parcours d'installation multi-étapes. - -**Le détour DMA en Europe :** en 2024, Apple a brièvement annoncé supprimer le mode standalone pour les PWA dans l'UE (iOS 17.4) au prétexte du Digital Markets Act, ce qui aurait réduit les PWA à de simples raccourcis Safari. Décision rapidement annulée après tollé : le support PWA complet a été rétabli dans l'UE. Épisode révélateur de la position ambiguë d'Apple. - -**Verdict pratique 2026 :** Apple a fait des progrès (push en 16.4, Declarative Web Push en 18.4, app mode par défaut en iOS 26), mais à un rythme lent et avec des marges de manœuvre étroites. Pour un projet ciblant fortement iOS et reposant sur du push fiable, du background sync ou de l'intégration profonde au système, le natif (ou hybride) reste l'option plus sûre. - -## 7. PWA vs natif vs hybride - -| Critère | PWA | Natif (iOS/Android) | Hybride (RN, Flutter) | -|---|---|---|---| -| Codebase | Unique (web) | 2 séparés | 1 partagé, ponts natifs | -| Distribution | URL + stores optionnels | App Store, Play Store obligatoires | Stores obligatoires | -| Mises à jour | Instantanées | Validation store (jours) | Validation store | -| Découvrabilité SEO | Oui (indexé Google) | Non | Non | -| Coût de dev (typique) | 1× | 2-3× | 1,3-1,8× | -| Performance UI | Bonne à très bonne | Maximale | Très bonne | -| Accès matériel | Partiel, variable selon OS | Total | Quasi-total | -| Notifications push iOS | Oui, sous conditions | Oui, sans conditions | Oui | -| Frais store (achats numériques) | 0 % | 15-30 % | 15-30 % | -| Hors ligne | Oui via service worker | Oui | Oui | - -**Quand choisir une PWA** - -- Audience web-first (desktop + mobile navigateur). -- SEO comme canal d'acquisition stratégique. -- Time-to-market et coût de maintenance prioritaires. -- Contenu plutôt que fonctionnalités matérielles avancées. -- Marchés émergents (stockage, bande passante limités). -- Outils internes B2B, portails, contenus éditoriaux, e-commerce léger. - -**Quand préférer le natif** - -- Accès matériel profond (BLE, NFC, capteurs avancés, ARKit/ARCore). -- Performances graphiques 120 fps, jeux, AR/VR. -- Monétisation reposant sur l'achat in-app via stores. -- Marque dépendant fortement de la présence App Store/Play Store. - -**Quand choisir hybride (React Native, Flutter)** - -- Présence store nécessaire mais sans le budget de deux codebases natives. -- Équipe JavaScript ou Dart. -- Besoins matériels modérés mais réels. - -## 8. Pour commencer : un MVP en 4 fichiers - -Voici la PWA minimale viable. Quatre fichiers, aucun framework, déployable sur n'importe quel hébergement HTTPS. - -### `index.html` - -```html - - - - - - Ma PWA - - - - - -

Bonjour

-

Ceci est une PWA.

- - - -``` - -### `manifest.webmanifest` - -```json -{ - "name": "Ma Progressive Web App", - "short_name": "MaPWA", - "description": "Démonstration minimale d'une PWA.", - "start_url": "/", - "scope": "/", - "display": "standalone", - "orientation": "portrait", - "background_color": "#ffffff", - "theme_color": "#0066cc", - "icons": [ - { - "src": "/icons/icon-192.png", - "sizes": "192x192", - "type": "image/png", - "purpose": "any maskable" - }, - { - "src": "/icons/icon-512.png", - "sizes": "512x512", - "type": "image/png", - "purpose": "any maskable" - } - ] -} -``` - -### `sw.js` - -```javascript -const CACHE_NAME = 'mapwa-v1'; -const PRECACHE = [ - '/', - '/index.html', - '/manifest.webmanifest', - '/icons/icon-192.png', - '/icons/icon-512.png' -]; - -self.addEventListener('install', (event) => { - event.waitUntil( - caches.open(CACHE_NAME).then((cache) => cache.addAll(PRECACHE)) - ); - self.skipWaiting(); -}); - -self.addEventListener('activate', (event) => { - event.waitUntil( - caches.keys().then((keys) => - Promise.all( - keys.filter((k) => k !== CACHE_NAME).map((k) => caches.delete(k)) - ) - ) - ); - self.clients.claim(); -}); - -self.addEventListener('fetch', (event) => { - // Stale-while-revalidate pour les navigations - if (event.request.mode === 'navigate') { - event.respondWith( - caches.match(event.request).then((cached) => { - const fresh = fetch(event.request).then((response) => { - caches.open(CACHE_NAME).then((c) => c.put(event.request, response.clone())); - return response; - }).catch(() => cached); - return cached || fresh; - }) - ); - return; - } - // Cache-first pour le reste - event.respondWith( - caches.match(event.request).then((cached) => cached || fetch(event.request)) - ); -}); -``` - -### Icônes - -Deux fichiers PNG : `icons/icon-192.png` (192×192) et `icons/icon-512.png` (512×512). L'attribut `purpose: "any maskable"` permet à Android de découper l'icône selon la forme système (cercle, squircle, etc.). - -**Servir le tout en HTTPS** (obligatoire en production ; `localhost` fonctionne en dev). Configuration nginx/Apache : s'assurer que `manifest.webmanifest` est servi avec le content-type `application/manifest+json` et que `sw.js` n'est jamais mis en cache HTTP côté navigateur (sinon les mises à jour ne se propagent pas). - -```nginx -location = /sw.js { - add_header Cache-Control "no-store, no-cache, must-revalidate"; - expires off; -} - -location = /manifest.webmanifest { - add_header Content-Type "application/manifest+json"; -} -``` - -**Tester avec Lighthouse** (intégré à Chrome DevTools, onglet *Lighthouse* puis catégorie *Progressive Web App*) — fournit un score, identifie les manques, propose des corrections. - -## 9. Outils et frameworks - -**Workbox** (Google) — la bibliothèque de référence pour les service workers. Génère du SW à partir de configurations déclaratives, gère les stratégies de cache, le préchargement, la mise à jour. Souvent utilisée via un plugin de bundler. - -**Vite PWA Plugin** (`vite-plugin-pwa`) — l'option la plus simple pour un projet moderne basé sur Vite. Wrap Workbox, génère manifest et SW automatiquement. - -**Next.js** — supporte les PWA via `next-pwa` (basé sur Workbox). - -**Nuxt** — `@vite-pwa/nuxt` officiel. - -**Angular, Vue, Svelte** — tous disposent d'intégrations PWA officielles ou bien maintenues. - -**PWA Builder** (Microsoft) — outil web qui audit un site et génère le packaging pour les stores (MSIX pour Microsoft, TWA pour Play Store). - -**Lighthouse** — audit intégré à Chrome DevTools. Standard de fait pour vérifier la conformité PWA. - -**Côté PHP (pertinent au regard du contexte de cette doc)** — Symfony et Laravel n'ont pas d'extension PWA officielle, mais l'intégration est triviale puisqu'une PWA n'exige côté serveur que de servir correctement quelques fichiers statiques en HTTPS. Bundles comme `friendsofsymfony/elastica-bundle` ne couvrent pas le sujet ; c'est plutôt à l'asset pipeline (Webpack Encore, Vite) de gérer la génération du service worker. - -## 10. Pièges fréquents et bonnes pratiques - -**Le service worker piégé en cache** — `sw.js` lui-même ne doit jamais être mis en cache HTTP, sinon les utilisateurs restent bloqués sur une ancienne version. `Cache-Control: no-store` strict côté serveur. - -**Versionner le cache** — toujours inclure une version dans le nom du cache (`mapwa-v1`, `mapwa-v2`...) et purger les anciens à l'activation. Sans cela, des assets périmés peuvent persister indéfiniment. - -**Ne pas tout cacher** — précharger uniquement le strict nécessaire au shell de l'application. Le reste doit être mis en cache à la demande, avec une stratégie adaptée. - -**Tester hors ligne** — Chrome DevTools propose un mode *Offline* dans l'onglet *Network*. C'est le seul moyen de vérifier que les stratégies de cache fonctionnent. - -**Gérer la mise à jour** — quand un nouveau service worker est détecté, il s'installe mais n'est actif qu'après fermeture de tous les onglets de la PWA. Soit forcer via `skipWaiting()` + `clients.claim()` (rapide mais peut casser une session en cours), soit afficher à l'utilisateur une bannière « nouvelle version disponible ». - -**Détection de feature, jamais détection de navigateur** — `if ('serviceWorker' in navigator)`, `if ('PushManager' in window)`. Ne jamais sniffer `userAgent`. - -**Tester sur iOS réel** — l'émulateur Safari ne reproduit pas toutes les limitations. Un iPhone physique est indispensable pour valider l'expérience. - -**HTTPS impératif** — même en pré-prod. Les certificats Let's Encrypt sont gratuits ; un reverse proxy bien configuré (Caddy, nginx, Traefik) suffit. *NB : ce point recoupe directement la configuration habituelle d'un homelab avec reverse proxy.* - -**Manifest et icônes adaptatives** — utiliser `purpose: "maskable"` avec des icônes ayant une zone de sécurité de ~10 % autour du contenu, sinon Android va découper dans le visuel. - -**Pas de prompt d'installation intrusif** — Chrome déclenche automatiquement un mini-info-bar quand les critères PWA sont remplis. Si on veut un prompt personnalisé, intercepter l'événement `beforeinstallprompt` et le déclencher au moment opportun (jamais au premier chargement). - -```javascript -let deferredPrompt; -window.addEventListener('beforeinstallprompt', (e) => { - e.preventDefault(); - deferredPrompt = e; - // Afficher un bouton « Installer » dans l'UI - document.querySelector('#install-btn').hidden = false; -}); - -document.querySelector('#install-btn').addEventListener('click', async () => { - if (!deferredPrompt) return; - deferredPrompt.prompt(); - const { outcome } = await deferredPrompt.userChoice; - console.log('Choix utilisateur :', outcome); - deferredPrompt = null; -}); -``` - -## 11. Ressources - -**Documentation officielle** - -- web.dev — section *Progressive Web Apps* : https://web.dev/explore/progressive-web-apps -- MDN Web Docs — *Progressive web apps* : https://developer.mozilla.org/fr/docs/Web/Progressive_web_apps -- Apple Developer — *Sending web push notifications* : https://developer.apple.com/documentation/usernotifications/sending-web-push-notifications-in-web-apps-and-browsers -- Microsoft Edge — *PWA on Windows* : https://learn.microsoft.com/en-us/microsoft-edge/progressive-web-apps-chromium/ - -**Outils** - -- Workbox : https://developer.chrome.com/docs/workbox -- PWA Builder : https://www.pwabuilder.com/ -- Lighthouse : intégré à Chrome DevTools, ou via CLI `npm i -g @lhci/cli` - -**Veille** - -- *Web Almanac* (HTTP Archive) — rapport annuel sur l'état du web, chapitre PWA. -- *Can I Use* : https://caniuse.com/ — compatibilité navigateur pour chaque API. - -**Études de cas** - -- web.dev cases : https://web.dev/case-studies - - ---- - -*Document de référence — état au 13 mai 2026. À revoir tous les 6 à 12 mois, l'écosystème évoluant rapidement (notamment côté Apple).* \ No newline at end of file diff --git a/a2487513-2848-4e62-bd19-d8ebb205e502/meta.json b/a2487513-2848-4e62-bd19-d8ebb205e502/meta.json deleted file mode 100644 index 783562a..0000000 --- a/a2487513-2848-4e62-bd19-d8ebb205e502/meta.json +++ /dev/null @@ -1,188 +0,0 @@ -{ - "uuid": "a2487513-2848-4e62-bd19-d8ebb205e502", - "slug": "progressive-web-apps-dossier-2026", - "title": "Progressive Web Apps — Dossier 2026", - "author": "cedric@abonnel.fr", - "published": true, - "published_at": "2026-05-15 07:53", - "created_at": "2026-05-13 18:58:29", - "updated_at": "2026-05-13 19:06:33", - "revisions": [ - { - "n": 1, - "date": "2026-05-13 19:02:08", - "comment": "Contenu modifié", - "title": "Progressive Web Apps — Dossier 2026" - } - ], - "cover": "cover.jpg", - "files_meta": { - "cover.jpg": { - "author": "", - "source_url": "https://www.pragimtech.com/blog/contribute/article_images/1220210424145927/progressive-web-apps.jpg" - }, - "_thumb_3b36733949021940-73450.jpg": { - "author": "", - "source_url": "" - }, - "_thumb_6cf992e9f28c8172-4217.png": { - "author": "", - "source_url": "" - }, - "_thumb_442161d0a89ddd20-93141.png": { - "author": "", - "source_url": "" - }, - "_thumb_926396967ba5066a-5819.png": { - "author": "", - "source_url": "" - }, - "_thumb_92af148c2c6c0f4e-30461.png": { - "author": "", - "source_url": "" - }, - "_thumb_d713074303b20cbd-5978.png": { - "author": "", - "source_url": "" - }, - "_thumb_da0580ecf0511076-371380.png": { - "author": "", - "source_url": "" - }, - "_thumb_dae1b79a9d60ae4b-22161.jpg": { - "author": "", - "source_url": "" - } - }, - "external_links": [ - { - "url": "http://pwastats.com/", - "name": "PWA Stats", - "added_at": "2026-05-13 19:01:07", - "meta": { - "mime": "text/html", - "size": 7116, - "description": "A collection of Progressive Web App case studies.", - "og_image": "/file?uuid=a2487513-2848-4e62-bd19-d8ebb205e502&name=_thumb_6cf992e9f28c8172-4217.png", - "site_name": "PWA Stats", - "og_type": "website" - } - }, - { - "url": "https://web.dev/case-studies", - "name": "Case studies", - "added_at": "2026-05-13 19:02:00", - "meta": { - "mime": "text/html", - "size": 14236, - "og_image": "/file?uuid=a2487513-2848-4e62-bd19-d8ebb205e502&name=_thumb_3b36733949021940-73450.jpg", - "site_name": "web.dev", - "og_type": "website", - "language": "en", - "canonical": "https://web.dev/case-studies" - } - }, - { - "url": "https://almanac.httparchive.org/", - "name": "The 2025 Web Almanac", - "added_at": "2026-05-13 19:03:37", - "author": "Rick Viscomi", - "meta": { - "mime": "text/html", - "size": 15541, - "description": "The Web Almanac is an annual state of the web report combining the expertise of the web community with the data and trends of the HTTP Archive.", - "og_image": "/file?uuid=a2487513-2848-4e62-bd19-d8ebb205e502&name=_thumb_92af148c2c6c0f4e-30461.png", - "og_type": "article", - "date": "2025-12-09T00:00:00.000Z", - "canonical": "https://almanac.httparchive.org/en/2025/" - } - }, - { - "url": "https://www.pwabuilder.com/", - "name": "PWABuilder", - "added_at": "2026-05-13 19:03:54", - "meta": { - "mime": "text/html", - "size": 2467, - "description": "Publish your Progressive Web App (PWA) to app stores", - "og_image": "/file?uuid=a2487513-2848-4e62-bd19-d8ebb205e502&name=_thumb_da0580ecf0511076-371380.png", - "og_type": "website" - } - }, - { - "url": "https://developer.chrome.com/docs/workbox", - "name": "Workbox", - "added_at": "2026-05-13 19:04:09", - "meta": { - "mime": "text/html", - "size": 19258, - "description": "Build progressive web apps (PWAs) with Workbox - the Service Worker library from the Chrome team", - "site_name": "Chrome for Developers", - "og_type": "website", - "language": "en", - "canonical": "https://developer.chrome.com/docs/workbox", - "og_image": "/file?uuid=a2487513-2848-4e62-bd19-d8ebb205e502&name=_thumb_926396967ba5066a-5819.png" - } - }, - { - "url": "https://learn.microsoft.com/en-us/microsoft-edge/progressive-web-apps-chromium/", - "name": "Overview of Progressive Web Apps (PWAs) - Microsoft Edge Developer documentation | Microsoft Learn", - "added_at": "2026-05-13 19:04:29", - "author": "MSEdgeTeam", - "meta": { - "mime": "text/html", - "size": 53645, - "description": "Progressive Web Apps (PWAs) run natively on Windows 10 or later. Here's everything you need to know about PWAs, as a web developer.", - "og_image": "/file?uuid=a2487513-2848-4e62-bd19-d8ebb205e502&name=_thumb_442161d0a89ddd20-93141.png", - "og_type": "website", - "canonical": "https://learn.microsoft.com/en-us/microsoft-edge/progressive-web-apps/" - } - }, - { - "url": "https://developer.apple.com/documentation/usernotifications/sending-web-push-notifications-in-web-apps-and-browsers", - "name": "Sending web push notifications in web apps and browsers | Apple Developer Documentation", - "added_at": "2026-05-13 19:04:48", - "meta": { - "mime": "text/html", - "size": 3840, - "description": "Update your web server and website to send push notifications that work in Safari, other browsers, and web apps, following cross-browser standards.", - "og_image": "/file?uuid=a2487513-2848-4e62-bd19-d8ebb205e502&name=_thumb_dae1b79a9d60ae4b-22161.jpg", - "site_name": "Apple Developer Documentation", - "og_type": "website", - "language": "en_US" - } - }, - { - "url": "https://developer.mozilla.org/fr/docs/Web/Progressive_web_apps", - "name": "Applications web progressives | MDN", - "added_at": "2026-05-13 19:05:14", - "meta": { - "mime": "text/html", - "size": 18140, - "description": "Les applications web progressives (ou progressive web applications en anglais, abrégées en PWAs) sont des applications web qui utilisent les service workers, les manifestes, et d'autres fonctionnalités de la plateforme web, avec l'amélioration progressive pour fournir aux utilisatrices et utilisateurs une expérience équivalente à celle des applications natives.", - "og_image": "/file?uuid=a2487513-2848-4e62-bd19-d8ebb205e502&name=_thumb_d713074303b20cbd-5978.png", - "site_name": "MDN Web Docs", - "language": "fr", - "canonical": "https://developer.mozilla.org/fr/docs/Web/Progressive_web_apps" - } - }, - { - "url": "https://web.dev/explore/progressive-web-apps", - "name": "Progressive Web Apps  |  web.dev", - "added_at": "2026-05-13 19:06:29", - "meta": { - "mime": "text/html", - "size": 16488, - "og_image": "/file?uuid=a2487513-2848-4e62-bd19-d8ebb205e502&name=_thumb_3b36733949021940-73450.jpg", - "site_name": "web.dev", - "og_type": "website", - "language": "en", - "canonical": "https://web.dev/explore/progressive-web-apps" - } - } - ], - "seo_title": "", - "seo_description": "", - "og_image": "https://varlog.a5l.fr/file?uuid=a2487513-2848-4e62-bd19-d8ebb205e502&name=cover.jpg", - "category": "" -} diff --git a/a2487513-2848-4e62-bd19-d8ebb205e502/revisions/0001.md b/a2487513-2848-4e62-bd19-d8ebb205e502/revisions/0001.md deleted file mode 100644 index 3e95a1e..0000000 --- a/a2487513-2848-4e62-bd19-d8ebb205e502/revisions/0001.md +++ /dev/null @@ -1,450 +0,0 @@ -## 1. Qu'est-ce qu'une PWA ? - -Une **Progressive Web App** est une application web qui, grâce à des APIs modernes des navigateurs, se comporte comme une application native : installable sur l'écran d'accueil, capable de fonctionner hors ligne, de recevoir des notifications push, de s'intégrer au système d'exploitation, tout en restant un site web indexable par les moteurs de recherche. - -Le mot clé est **progressive** : l'expérience s'enrichit selon les capacités du navigateur et de l'appareil. Sur un Chrome récent sous Android, la PWA offre une expérience proche du natif ; sur un vieux navigateur, elle reste un site web fonctionnel. - -Une PWA repose sur trois piliers techniques : - -- **HTTPS obligatoire** — sécurité et confiance, prérequis pour toutes les APIs sensibles. -- **Service Worker** — un script JavaScript qui tourne en arrière-plan, intercepte les requêtes réseau, gère le cache et les notifications. -- **Manifest** (`manifest.webmanifest`) — un fichier JSON qui décrit l'application (nom, icônes, couleurs, mode d'affichage) pour permettre son installation. - -Trois critères définissent une PWA selon Google : elle doit être **fiable** (charge instantanément, même hors ligne), **rapide** (réagit vite aux interactions) et **engageante** (sensation d'application native, réengagement par notifications). - -## 2. Histoire et promoteurs - -L'idée d'une convergence web/natif n'est pas neuve. Steve Jobs, en 2007, présentait initialement l'iPhone sans App Store : les développeurs étaient censés faire des « web apps ». L'App Store est arrivé un an plus tard et a marginalisé cette vision pendant près d'une décennie. - -Le terme **« Progressive Web App »** est proposé en 2015 par la designer Frances Berriman et l'ingénieur Google **Alex Russell**, pour désigner les sites tirant parti des nouvelles APIs (service workers notamment, standardisés à partir de 2014-2015). - -**Les promoteurs historiques :** - -- **Google** — moteur principal. Pousse la spécification, intègre les PWA à Chrome, Android, ChromeOS, et au Play Store (depuis 2019, on peut publier une PWA empaquetée via TWA — Trusted Web Activity). -- **Microsoft** — second souffle majeur. Edge intègre les PWA nativement, et Windows permet leur publication au Microsoft Store via packaging MSIX. En mai 2025, Edge a ajouté les **App Actions on Windows** pour les PWA, améliorant la découvrabilité système. -- **Mozilla** — soutien historique des standards, support solide dans Firefox (bien que l'installation desktop ait été retirée puis partiellement réintégrée selon les versions). -- **Apple** — adoption lente et réticente, voir section 6. - -**Les premiers grands déploiements** (vers 2016-2017) ont servi de cas d'école : Twitter Lite, AliExpress, Pinterest, Flipkart, Starbucks, Uber, Tinder, Trivago. Tous ont publié des chiffres montrant des gains d'engagement et de conversion significatifs, ce qui a légitimé le modèle auprès des grandes entreprises. - -## 3. Comment ça marche techniquement - -### 3.1 Le manifeste - -Fichier JSON déclaratif qui dit au navigateur : « ce site est installable, voici comment il doit se présenter ». - -```json -{ - "name": "Mon Application", - "short_name": "MonApp", - "start_url": "/", - "display": "standalone", - "background_color": "#ffffff", - "theme_color": "#0066cc", - "icons": [ - { "src": "/icons/icon-192.png", "sizes": "192x192", "type": "image/png" }, - { "src": "/icons/icon-512.png", "sizes": "512x512", "type": "image/png" } - ] -} -``` - -Référencé dans le HTML : - -```html - - -``` - -Le mode `display: standalone` retire la barre d'adresse au lancement depuis l'écran d'accueil ; `fullscreen` masque même la barre système. - -### 3.2 Le Service Worker - -Script JavaScript qui s'exécute dans un thread séparé, sans accès direct au DOM, et qui agit comme un **proxy programmable** entre l'application et le réseau. - -```javascript -// sw.js -const CACHE_NAME = 'app-v1'; -const ASSETS = ['/', '/index.html', '/styles.css', '/app.js', '/icons/icon-192.png']; - -// Installation : on précharge les ressources critiques -self.addEventListener('install', (event) => { - event.waitUntil( - caches.open(CACHE_NAME).then((cache) => cache.addAll(ASSETS)) - ); -}); - -// Activation : on nettoie les anciens caches -self.addEventListener('activate', (event) => { - event.waitUntil( - caches.keys().then((keys) => - Promise.all(keys.filter((k) => k !== CACHE_NAME).map((k) => caches.delete(k))) - ) - ); -}); - -// Fetch : stratégie cache-first, puis réseau en fallback -self.addEventListener('fetch', (event) => { - event.respondWith( - caches.match(event.request).then((cached) => cached || fetch(event.request)) - ); -}); -``` - -Enregistrement depuis la page principale : - -```javascript -if ('serviceWorker' in navigator) { - navigator.serviceWorker.register('/sw.js'); -} -``` - -### 3.3 Stratégies de cache - -Quatre patterns canoniques selon le type de ressource : - -- **Cache-first** — sert le cache, va sur le réseau si absent. Idéal pour les assets statiques (CSS, JS, polices). -- **Network-first** — tente le réseau, retombe sur le cache en cas d'échec. Idéal pour les contenus dynamiques (articles, posts). -- **Stale-while-revalidate** — sert le cache immédiatement, met à jour en arrière-plan. Bon compromis pour les contenus semi-dynamiques (listes, avatars). -- **Network-only / Cache-only** — cas particuliers (analytics, données critiques). - -### 3.4 Les APIs modernes mobilisables - -En 2026, l'écosystème PWA s'appuie sur un éventail large : - -- **Push API + Notifications API** — notifications push, y compris sur iOS 16.4+ (sous conditions). -- **Background Sync** — différer une requête jusqu'au retour de la connectivité (Chrome/Edge ; pas sur iOS). -- **Periodic Background Sync** — déclencher du code à intervalle régulier (Chrome/Edge uniquement). -- **Web Share API** — utiliser le menu de partage natif du système. -- **File System Access API** — lire/écrire dans des fichiers locaux (Chrome/Edge). -- **WebGPU, WebAssembly SIMD, WebNN** — calcul intensif et inférence IA côté client. -- **Badging API** — afficher un badge numérique sur l'icône d'app. -- **Web Bluetooth, Web USB, Web Serial** — accès matériel (Chrome/Edge, hors iOS). -- **Payment Request API** — paiements unifiés, dont Apple Pay sur Safari. - -## 4. Exemples emblématiques - -Les références suivantes ont structuré la perception du modèle PWA. Les chiffres sont ceux publiés par les entreprises à l'époque de leur migration. - -**Twitter Lite** (2017) — Twitter a déployé une PWA pesant moins de 1 Mo (contre 23 Mo pour l'app native Android). Résultat : +65 % de pages par session, +75 % de tweets envoyés, −20 % de taux de rebond. Nicolas Gallagher, alors lead du projet, résumait : « Twitter Lite is now the fastest, least expensive, and most reliable way to use Twitter. » - -**AliExpress** — Migration de leur site mobile vers une PWA. Doublement du temps passé par session, +104 % de taux de conversion pour les nouveaux utilisateurs sur tous les navigateurs. - -**Pinterest** — Refonte en PWA en 2017. Le poids initial du bundle JavaScript est passé de 650 Ko à 150 Ko. Temps passé +40 %, revenus publicitaires +44 %, engagement utilisateur +60 %. - -**Starbucks** — Une PWA pour la commande en ligne, environ 600 Ko (contre 148 Mo pour l'app iOS native). Double des commandes quotidiennes via le web, avec des chiffres particulièrement marqués sur les marchés à faible bande passante. - -**Spotify, Uber, Tinder, Trivago, BMW, Forbes, The Washington Post** — Tous ont déployé des versions PWA, soit en remplacement de leur site mobile, soit en complément de l'app native. - -**Note d'objectivité :** ces cas remontent majoritairement à 2017-2019. Beaucoup ont été suivis d'allers-retours stratégiques (certaines entreprises ont depuis re-priorisé le natif pour des raisons de fonctionnalités ou de distribution). Twitter, par exemple, a depuis fait évoluer son web app et son app native en parallèle. Ces chiffres restent illustratifs d'un potentiel, pas d'une vérité universelle. - -## 5. Où en est-on en 2026 ? - -### 5.1 Maturité du modèle - -Trois leviers ont fait basculer les PWA d'une expérimentation à une option pragmatique : - -1. **Maturité des APIs clés** — service worker stable, manifest standardisé, Web Push enfin disponible sur Safari (iOS 16.4+). -2. **Intégration croissante par les OS et stores** — packaging MSIX vers le Microsoft Store, TWA vers le Play Store, App Actions sur Windows, mode app par défaut sur iOS 26. -3. **Preuves de ROI répétées** sur une décennie de déploiements. - -### 5.2 Chiffres du marché - -Les estimations convergent vers une croissance soutenue. Selon Research Nester, le marché mondial des PWA dépassait 2,47 Md$ en 2025, est estimé à 3,14 Md$ en 2026, avec une projection à 34,58 Md$ d'ici 2035 (TCAC supérieur à 30 %). - -L'adoption reste cependant **concentrée** : selon les datasets publics (HTTP Archive / Web Almanac), une fraction modeste des sites déclarent un service worker, mais ces sites représentent une part disproportionnée du trafic mondial — autrement dit, ce sont les gros sites qui adoptent. - -### 5.3 Nouveautés récentes - -- **Declarative Web Push** (Safari 18.4, 2025) — alternative simplifiée au Web Push impératif, ne nécessitant pas de service worker pour des notifications basiques. -- **App Actions on Windows** pour les PWA (Edge, mai 2025) — les PWA peuvent déclarer des actions invocables depuis la barre de recherche Windows. -- **iOS 26** — tout site ajouté à l'écran d'accueil s'ouvre par défaut en mode application, même sans manifest. Avancée notable côté Apple. -- **WebGPU, WebNN, WebAssembly SIMD** — débloquent l'inférence IA côté client, ouvrant la voie à des PWA capables de traitements lourds locaux (vision, NLP, recommandation). - -### 5.4 Verrous résiduels - -- **Découvrabilité** — beaucoup d'utilisateurs ne savent pas qu'« ajouter à l'écran d'accueil » installe une vraie app. Pas de prompt automatique sur iOS. -- **Fragmentation des APIs** — Chrome/Edge avancent vite, Safari traîne, Firefox se positionne au cas par cas. Le détection de feature reste obligatoire. -- **Stockage** — quotas plus stricts sur iOS qu'ailleurs, avec un risque d'éviction du cache après 7 jours sans utilisation sur certaines configurations. -- **Monétisation** — pas de système intégré de paiement in-app comme l'App Store. Il faut passer par Stripe, Apple Pay via Payment Request, etc. - -## 6. Le cas iOS : limites et particularités - -Apple a toujours été le frein principal à l'adoption universelle des PWA. Les raisons sont à la fois techniques et stratégiques (revenus de l'App Store, contrôle de la plateforme, monopole de WebKit). - -**Ce qui marche en 2026 sur iOS :** - -- Installation manuelle sur l'écran d'accueil (mais pas de prompt automatique). -- Mode standalone (fenêtre sans barre d'adresse). -- Service workers (avec des quotas et limitations). -- Push notifications, **uniquement si la PWA a été installée à l'écran d'accueil** (depuis iOS 16.4). -- Apple Pay via Payment Request API. -- Géolocalisation, caméra, microphone. - -**Ce qui ne marche pas ou mal :** - -- Pas de Background Sync ni de Periodic Background Sync. -- Pas de Web Bluetooth, Web USB, Web NFC. -- Stockage limité, susceptible d'être purgé sans usage. -- Pas de silent push ni de réveil en arrière-plan. -- L'audience effectivement joignable par push est environ 10 à 15 fois plus petite que sur app native, une fois pris en compte le parcours d'installation multi-étapes. - -**Le détour DMA en Europe :** en 2024, Apple a brièvement annoncé supprimer le mode standalone pour les PWA dans l'UE (iOS 17.4) au prétexte du Digital Markets Act, ce qui aurait réduit les PWA à de simples raccourcis Safari. Décision rapidement annulée après tollé : le support PWA complet a été rétabli dans l'UE. Épisode révélateur de la position ambiguë d'Apple. - -**Verdict pratique 2026 :** Apple a fait des progrès (push en 16.4, Declarative Web Push en 18.4, app mode par défaut en iOS 26), mais à un rythme lent et avec des marges de manœuvre étroites. Pour un projet ciblant fortement iOS et reposant sur du push fiable, du background sync ou de l'intégration profonde au système, le natif (ou hybride) reste l'option plus sûre. - -## 7. PWA vs natif vs hybride - -| Critère | PWA | Natif (iOS/Android) | Hybride (RN, Flutter) | -|---|---|---|---| -| Codebase | Unique (web) | 2 séparés | 1 partagé, ponts natifs | -| Distribution | URL + stores optionnels | App Store, Play Store obligatoires | Stores obligatoires | -| Mises à jour | Instantanées | Validation store (jours) | Validation store | -| Découvrabilité SEO | Oui (indexé Google) | Non | Non | -| Coût de dev (typique) | 1× | 2-3× | 1,3-1,8× | -| Performance UI | Bonne à très bonne | Maximale | Très bonne | -| Accès matériel | Partiel, variable selon OS | Total | Quasi-total | -| Notifications push iOS | Oui, sous conditions | Oui, sans conditions | Oui | -| Frais store (achats numériques) | 0 % | 15-30 % | 15-30 % | -| Hors ligne | Oui via service worker | Oui | Oui | - -**Quand choisir une PWA** - -- Audience web-first (desktop + mobile navigateur). -- SEO comme canal d'acquisition stratégique. -- Time-to-market et coût de maintenance prioritaires. -- Contenu plutôt que fonctionnalités matérielles avancées. -- Marchés émergents (stockage, bande passante limités). -- Outils internes B2B, portails, contenus éditoriaux, e-commerce léger. - -**Quand préférer le natif** - -- Accès matériel profond (BLE, NFC, capteurs avancés, ARKit/ARCore). -- Performances graphiques 120 fps, jeux, AR/VR. -- Monétisation reposant sur l'achat in-app via stores. -- Marque dépendant fortement de la présence App Store/Play Store. - -**Quand choisir hybride (React Native, Flutter)** - -- Présence store nécessaire mais sans le budget de deux codebases natives. -- Équipe JavaScript ou Dart. -- Besoins matériels modérés mais réels. - -## 8. Pour commencer : un MVP en 4 fichiers - -Voici la PWA minimale viable. Quatre fichiers, aucun framework, déployable sur n'importe quel hébergement HTTPS. - -### `index.html` - -```html - - - - - - Ma PWA - - - - - -

Bonjour

-

Ceci est une PWA.

- - - -``` - -### `manifest.webmanifest` - -```json -{ - "name": "Ma Progressive Web App", - "short_name": "MaPWA", - "description": "Démonstration minimale d'une PWA.", - "start_url": "/", - "scope": "/", - "display": "standalone", - "orientation": "portrait", - "background_color": "#ffffff", - "theme_color": "#0066cc", - "icons": [ - { - "src": "/icons/icon-192.png", - "sizes": "192x192", - "type": "image/png", - "purpose": "any maskable" - }, - { - "src": "/icons/icon-512.png", - "sizes": "512x512", - "type": "image/png", - "purpose": "any maskable" - } - ] -} -``` - -### `sw.js` - -```javascript -const CACHE_NAME = 'mapwa-v1'; -const PRECACHE = [ - '/', - '/index.html', - '/manifest.webmanifest', - '/icons/icon-192.png', - '/icons/icon-512.png' -]; - -self.addEventListener('install', (event) => { - event.waitUntil( - caches.open(CACHE_NAME).then((cache) => cache.addAll(PRECACHE)) - ); - self.skipWaiting(); -}); - -self.addEventListener('activate', (event) => { - event.waitUntil( - caches.keys().then((keys) => - Promise.all( - keys.filter((k) => k !== CACHE_NAME).map((k) => caches.delete(k)) - ) - ) - ); - self.clients.claim(); -}); - -self.addEventListener('fetch', (event) => { - // Stale-while-revalidate pour les navigations - if (event.request.mode === 'navigate') { - event.respondWith( - caches.match(event.request).then((cached) => { - const fresh = fetch(event.request).then((response) => { - caches.open(CACHE_NAME).then((c) => c.put(event.request, response.clone())); - return response; - }).catch(() => cached); - return cached || fresh; - }) - ); - return; - } - // Cache-first pour le reste - event.respondWith( - caches.match(event.request).then((cached) => cached || fetch(event.request)) - ); -}); -``` - -### Icônes - -Deux fichiers PNG : `icons/icon-192.png` (192×192) et `icons/icon-512.png` (512×512). L'attribut `purpose: "any maskable"` permet à Android de découper l'icône selon la forme système (cercle, squircle, etc.). - -**Servir le tout en HTTPS** (obligatoire en production ; `localhost` fonctionne en dev). Configuration nginx/Apache : s'assurer que `manifest.webmanifest` est servi avec le content-type `application/manifest+json` et que `sw.js` n'est jamais mis en cache HTTP côté navigateur (sinon les mises à jour ne se propagent pas). - -```nginx -location = /sw.js { - add_header Cache-Control "no-store, no-cache, must-revalidate"; - expires off; -} - -location = /manifest.webmanifest { - add_header Content-Type "application/manifest+json"; -} -``` - -**Tester avec Lighthouse** (intégré à Chrome DevTools, onglet *Lighthouse* puis catégorie *Progressive Web App*) — fournit un score, identifie les manques, propose des corrections. - -## 9. Outils et frameworks - -**Workbox** (Google) — la bibliothèque de référence pour les service workers. Génère du SW à partir de configurations déclaratives, gère les stratégies de cache, le préchargement, la mise à jour. Souvent utilisée via un plugin de bundler. - -**Vite PWA Plugin** (`vite-plugin-pwa`) — l'option la plus simple pour un projet moderne basé sur Vite. Wrap Workbox, génère manifest et SW automatiquement. - -**Next.js** — supporte les PWA via `next-pwa` (basé sur Workbox). - -**Nuxt** — `@vite-pwa/nuxt` officiel. - -**Angular, Vue, Svelte** — tous disposent d'intégrations PWA officielles ou bien maintenues. - -**PWA Builder** (Microsoft) — outil web qui audit un site et génère le packaging pour les stores (MSIX pour Microsoft, TWA pour Play Store). - -**Lighthouse** — audit intégré à Chrome DevTools. Standard de fait pour vérifier la conformité PWA. - -**Côté PHP (pertinent au regard du contexte de cette doc)** — Symfony et Laravel n'ont pas d'extension PWA officielle, mais l'intégration est triviale puisqu'une PWA n'exige côté serveur que de servir correctement quelques fichiers statiques en HTTPS. Bundles comme `friendsofsymfony/elastica-bundle` ne couvrent pas le sujet ; c'est plutôt à l'asset pipeline (Webpack Encore, Vite) de gérer la génération du service worker. - -## 10. Pièges fréquents et bonnes pratiques - -**Le service worker piégé en cache** — `sw.js` lui-même ne doit jamais être mis en cache HTTP, sinon les utilisateurs restent bloqués sur une ancienne version. `Cache-Control: no-store` strict côté serveur. - -**Versionner le cache** — toujours inclure une version dans le nom du cache (`mapwa-v1`, `mapwa-v2`...) et purger les anciens à l'activation. Sans cela, des assets périmés peuvent persister indéfiniment. - -**Ne pas tout cacher** — précharger uniquement le strict nécessaire au shell de l'application. Le reste doit être mis en cache à la demande, avec une stratégie adaptée. - -**Tester hors ligne** — Chrome DevTools propose un mode *Offline* dans l'onglet *Network*. C'est le seul moyen de vérifier que les stratégies de cache fonctionnent. - -**Gérer la mise à jour** — quand un nouveau service worker est détecté, il s'installe mais n'est actif qu'après fermeture de tous les onglets de la PWA. Soit forcer via `skipWaiting()` + `clients.claim()` (rapide mais peut casser une session en cours), soit afficher à l'utilisateur une bannière « nouvelle version disponible ». - -**Détection de feature, jamais détection de navigateur** — `if ('serviceWorker' in navigator)`, `if ('PushManager' in window)`. Ne jamais sniffer `userAgent`. - -**Tester sur iOS réel** — l'émulateur Safari ne reproduit pas toutes les limitations. Un iPhone physique est indispensable pour valider l'expérience. - -**HTTPS impératif** — même en pré-prod. Les certificats Let's Encrypt sont gratuits ; un reverse proxy bien configuré (Caddy, nginx, Traefik) suffit. *NB : ce point recoupe directement la configuration habituelle d'un homelab avec reverse proxy.* - -**Manifest et icônes adaptatives** — utiliser `purpose: "maskable"` avec des icônes ayant une zone de sécurité de ~10 % autour du contenu, sinon Android va découper dans le visuel. - -**Pas de prompt d'installation intrusif** — Chrome déclenche automatiquement un mini-info-bar quand les critères PWA sont remplis. Si on veut un prompt personnalisé, intercepter l'événement `beforeinstallprompt` et le déclencher au moment opportun (jamais au premier chargement). - -```javascript -let deferredPrompt; -window.addEventListener('beforeinstallprompt', (e) => { - e.preventDefault(); - deferredPrompt = e; - // Afficher un bouton « Installer » dans l'UI - document.querySelector('#install-btn').hidden = false; -}); - -document.querySelector('#install-btn').addEventListener('click', async () => { - if (!deferredPrompt) return; - deferredPrompt.prompt(); - const { outcome } = await deferredPrompt.userChoice; - console.log('Choix utilisateur :', outcome); - deferredPrompt = null; -}); -``` - -## 11. Ressources - -**Documentation officielle** - -- web.dev — section *Progressive Web Apps* : https://web.dev/explore/progressive-web-apps -- MDN Web Docs — *Progressive web apps* : https://developer.mozilla.org/fr/docs/Web/Progressive_web_apps -- Apple Developer — *Sending web push notifications* : https://developer.apple.com/documentation/usernotifications/sending-web-push-notifications-in-web-apps-and-browsers -- Microsoft Edge — *PWA on Windows* : https://learn.microsoft.com/en-us/microsoft-edge/progressive-web-apps-chromium/ - -**Outils** - -- Workbox : https://developer.chrome.com/docs/workbox -- PWA Builder : https://www.pwabuilder.com/ -- Lighthouse : intégré à Chrome DevTools, ou via CLI `npm i -g @lhci/cli` - -**Veille** - -- *Web Almanac* (HTTP Archive) — rapport annuel sur l'état du web, chapitre PWA. -- *Can I Use* : https://caniuse.com/ — compatibilité navigateur pour chaque API. - -**Études de cas** - -- web.dev cases : https://web.dev/case-studies - - ---- - -*Document de référence — état au 13 mai 2026. À revoir tous les 6 à 12 mois, l'écosystème évoluant rapidement (notamment côté Apple).* \ No newline at end of file diff --git a/a55aeefd-28ae-4c3f-bfc1-c0400c3877c2/index.md b/a55aeefd-28ae-4c3f-bfc1-c0400c3877c2/index.md deleted file mode 100644 index dc98b86..0000000 --- a/a55aeefd-28ae-4c3f-bfc1-c0400c3877c2/index.md +++ /dev/null @@ -1,78 +0,0 @@ -# Pourquoi les opérateurs brident-ils la 3G ? - -## Explications scientifiques et économiques - -La migration des utilisateurs de la 3G vers la 4G et la 5G ne se limite pas à une simple volonté commerciale. Plusieurs facteurs techniques et économiques expliquent pourquoi les opérateurs limitent progressivement les performances des anciennes générations. - ---- - -### 1. Refarming du spectre - -Le **refarming** consiste à **réaffecter les fréquences radio utilisées par la 3G (900 MHz, 1800 MHz, 2100 MHz)** pour la 4G et désormais la 5G. - -* **Objectif :** optimiser l’utilisation du spectre radio limité et très convoité. -* **Conséquence pour la 3G :** réduction des capacités réseau et baisse effective des débits. -* **Avantage pour la 4G/5G :** meilleure couverture et débits accrus, tout en utilisant les bandes déjà déployées. - ---- - -### 2. Coût d’entretien élevé des infrastructures 3G - -Maintenir un réseau 3G opérationnel est **coûteux** : - -* Les équipements (antennes, contrôleurs RNC, stations de base) vieillissent et nécessitent maintenance et mises à jour régulières. -* Les coûts énergétiques et opérationnels sont proportionnellement plus élevés par bit transmis comparé à la 4G ou la 5G. -* En parallèle, le nombre d’utilisateurs actifs sur la 3G diminue, ce qui réduit la rentabilité. - -> Le ratio coût par bit est donc nettement moins favorable pour la 3G : pour un flux de données équivalent, un opérateur dépense plus en 3G qu’en 4G ou 5G. - ---- - -### 3. Incitation à la migration via bridage - -Pour accélérer la transition vers les nouvelles générations : - -* Les opérateurs **brident les débits 3G** (exemple concret : Free Mobile en itinérance sur Orange). -* Les utilisateurs rencontrent des **limitations visibles** : ralentissements web, streaming limité, visioconférence dégradée. -* Cette stratégie crée une motivation implicite à souscrire à des forfaits 4G ou 5G, sans intervention directe sur les tarifs. - ---- - -### Évolution des débits bridés sur 3G Free/Orange (2016–2020) - -| Année | Débit descendant | Débit montant | -| ----- | ---------------- | ------------- | -| 2016 | ~5 Mbit/s | 0,5–1 Mbit/s | -| 2017 | ~1 Mbit/s | 0,5 Mbit/s | -| 2019 | 768 kbit/s | 384 kbit/s | -| 2020 | 384 kbit/s | 384 kbit/s | - -> Ce tableau illustre la **réduction progressive des performances**, transformant un réseau encore fonctionnel en service à très faible débit, pour encourager la migration vers la 4G/5G. - ---- - -### Schéma suggéré : flux de données et coût par bit (3G vs 4G) - -```mermaid -flowchart LR - A[Utilisateur 3G] -->|Faible débit| B[Flux de données] - B -->|Coût élevé par bit| C[Opérateur] - - D[Utilisateur 4G] -->|Débit élevé| E[Flux de données] - E -->|Coût faible par bit| C[Opérateur] - - style A fill:#f9f,stroke:#333,stroke-width:1px - style D fill:#9f9,stroke:#333,stroke-width:1px -``` - -* **Lecture du schéma :** la 3G transmet moins de données à un coût plus élevé pour l’opérateur. La 4G/5G, avec des débits supérieurs et un coût par bit réduit, devient nettement plus rentable. - ---- - -La dégradation volontaire des performances 3G s’explique par un **mix de contraintes techniques, économiques et stratégiques** : - -1. Libérer les fréquences pour les nouvelles générations (refarming). -2. Réduire les coûts d’entretien des infrastructures obsolètes. -3. Inciter les utilisateurs à migrer vers la 4G et la 5G, plus rentables et performantes. - -> Ce processus est récurrent : chaque génération prépare progressivement l’abandon de la précédente, toujours sous couvert d’optimisation technique et économique. diff --git a/a55aeefd-28ae-4c3f-bfc1-c0400c3877c2/meta.json b/a55aeefd-28ae-4c3f-bfc1-c0400c3877c2/meta.json deleted file mode 100644 index 8c26426..0000000 --- a/a55aeefd-28ae-4c3f-bfc1-c0400c3877c2/meta.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "uuid": "a55aeefd-28ae-4c3f-bfc1-c0400c3877c2", - "slug": "pourquoi-les-operateurs-brident-ils-la-3g", - "title": "Pourquoi les opérateurs brident-ils la 3G ?", - "author": "cedric@abonnel.fr", - "published": true, - "published_at": "2025-11-05 08:41:22", - "created_at": "2025-11-05 08:41:22", - "updated_at": "2025-11-05 08:41:22", - "revisions": [], - "cover": "cover.jpg", - "category": "télécom" -} diff --git a/a9474a83-43b3-484c-950e-37a27ff663fe/index.md b/a9474a83-43b3-484c-950e-37a27ff663fe/index.md deleted file mode 100644 index 9cb826c..0000000 --- a/a9474a83-43b3-484c-950e-37a27ff663fe/index.md +++ /dev/null @@ -1,783 +0,0 @@ -# Gawfgbsdfg - -> Document de travail consolidant le prototypage Arduino, la conception du PCB sous KiCad, les règles de conception et la préparation des fichiers pour la CNC. - ---- - -## 1. Rappel : prototypage - -### 1.1 Liste du matériel - -- 1 × Arduino Uno -- 1 × écran LCD 16 broches (non I²C) -- 3 × boutons poussoirs -- 1 × buzzer -- 1 × résistance 220 Ω -- 1 × potentiomètre 10 kΩ *(facultatif — voir remarque ci-dessous)* - -### 1.2 Câblage - -**Écran LCD** — câblage identique au projet n° 11 du livre de référence ; consulter les pages 116 et 117 pour le détail des broches. - -Une variante sans potentiomètre a été testée (LCD branché directement à la masse) mais elle a été abandonnée. - -**Boutons poussoirs** — montés en pull-up interne : - -``` -GND → Poussoir → broches 7, 8, 9 (avec INPUT_PULLUP dans le code) -``` - -Pour comprendre le principe du montage pull-up : - -**Buzzer** — deux broches : l'une à la masse, l'autre sur la broche 6 (qui assure également l'alimentation lors du pilotage par `tone()`). Voir notamment le projet n° 6, p. 71. - -### 1.3 Type de jeu - -Jeu d'arcade type *Asteroids*. - -### 1.4 Code de référence - -```cpp -#include -LiquidCrystal lcd(12, 11, 5, 4, 3, 2); - -// ---- Buzzer ---- -const int PIN_BUZZER = 6; -inline void beepShoot() { tone(PIN_BUZZER, 2000, 40); } // court -inline void beepHit() { tone(PIN_BUZZER, 1200, 80); } // moyen -inline void beepOver() { tone(PIN_BUZZER, 400, 600); } // long - -// ---- Boutons ---- -const int boutonTir = 7; -const int boutonHaut = 8; -const int boutonBas = 9; - -// ---- Affichage ---- -byte CH_VAISSEAU[8] = { - B00100, B01110, B11111, B11111, B01110, B00100, B00100, B00000 -}; -byte CH_MISSILE[8] = { - B00100, B00100, B00100, B11111, B00100, B00100, B00100, B00000 -}; -byte CH_ENNEMI[8] = { - B11111, B10101, B11111, B01010, B11111, B10101, B11111, B00000 -}; - -int vaisseauLigne = 1; // 0..1 - -struct Ennemi { int colonne; int ligne; bool actif; }; -const int MAX_ENNEMIS = 3; -Ennemi ennemis[MAX_ENNEMIS]; - -struct Projectile { int colonne; int ligne; bool actif; }; -const int MAX_TIRS = 6; -Projectile tirs[MAX_TIRS]; - -unsigned long dernierDeplacement = 0; -unsigned long intervalDeplacement = 500; - -unsigned long dernierTir = 0; -const unsigned long delaiTir = 180; - -int score = 0; - -void setup() { - pinMode(boutonTir, INPUT_PULLUP); - pinMode(boutonHaut, INPUT_PULLUP); - pinMode(boutonBas, INPUT_PULLUP); - pinMode(PIN_BUZZER, OUTPUT); - - lcd.begin(16, 2); - lcd.createChar(0, CH_VAISSEAU); - lcd.createChar(1, CH_MISSILE); - lcd.createChar(2, CH_ENNEMI); - lcd.print("Vaisseau Pret!"); - delay(600); - lcd.clear(); - - randomSeed(analogRead(A0)); - for (int i = 0; i < MAX_ENNEMIS; i++) ennemis[i].actif = false; - for (int i = 0; i < MAX_TIRS; i++) tirs[i].actif = false; -} - -void loop() { - unsigned long now = millis(); - - if (digitalRead(boutonHaut) == LOW) vaisseauLigne = 0; - else if (digitalRead(boutonBas) == LOW) vaisseauLigne = 1; - - // Tir multi-missiles + bip - if (digitalRead(boutonTir) == LOW && now - dernierTir >= delaiTir) { - int idx = slotTirLibre(); - if (idx >= 0) { - tirs[idx].actif = true; - tirs[idx].colonne = 1; - tirs[idx].ligne = vaisseauLigne; - dernierTir = now; - beepShoot(); - } - } - - if (now - dernierDeplacement > intervalDeplacement) { - dernierDeplacement = now; - - // Déplacer les tirs - for (int t = 0; t < MAX_TIRS; t++) { - if (!tirs[t].actif) continue; - tirs[t].colonne++; - if (tirs[t].colonne > 15) tirs[t].actif = false; - } - - // Déplacer les ennemis + détection des collisions - for (int i = 0; i < MAX_ENNEMIS; i++) { - if (!ennemis[i].actif) continue; - ennemis[i].colonne--; - - for (int t = 0; t < MAX_TIRS; t++) { - if (!tirs[t].actif) continue; - if (ennemis[i].colonne == tirs[t].colonne - && ennemis[i].ligne == tirs[t].ligne) { - ennemis[i].actif = false; - tirs[t].actif = false; - score++; - beepHit(); - break; - } - } - - if (ennemis[i].colonne <= 0) { - beepOver(); - gameOver(); - } - } - - // Apparition d'ennemis - int actifs = 0; - for (int i = 0; i < MAX_ENNEMIS; i++) if (ennemis[i].actif) actifs++; - if (actifs < MAX_ENNEMIS && random(0, 10) > 7) { - for (int i = 0; i < MAX_ENNEMIS; i++) if (!ennemis[i].actif) { - ennemis[i].actif = true; - ennemis[i].colonne = 15; - ennemis[i].ligne = random(0, 2); - break; - } - } - - updateLCD(); - } -} - -int slotTirLibre() { - for (int i = 0; i < MAX_TIRS; i++) if (!tirs[i].actif) return i; - return -1; -} - -static inline void printIfOnScreen(int col, int row, uint8_t ch) { - if (col >= 0 && col <= 15 && row >= 0 && row <= 1) { - lcd.setCursor(col, row); - lcd.write(ch); - } -} - -void updateLCD() { - lcd.clear(); - lcd.setCursor(10, 0); lcd.print("S:"); lcd.print(score); - - printIfOnScreen(0, vaisseauLigne, 0); // vaisseau - - // Tirs - for (int t = 0; t < MAX_TIRS; t++) { - if (!tirs[t].actif) continue; - if (tirs[t].colonne >= 0 && tirs[t].colonne <= 15) { - lcd.setCursor(tirs[t].colonne, tirs[t].ligne); - lcd.write((uint8_t)1); // missile - } - } - - // Ennemis - for (int i = 0; i < MAX_ENNEMIS; i++) { - if (!ennemis[i].actif) continue; - if (ennemis[i].colonne >= 0 && ennemis[i].colonne <= 15) { - lcd.setCursor(ennemis[i].colonne, ennemis[i].ligne); - lcd.write((uint8_t)2); // ennemi - } - } -} - -void gameOver() { - lcd.clear(); - lcd.setCursor(3, 0); lcd.print("GAME OVER"); - lcd.setCursor(4, 1); lcd.print("Score:"); lcd.print(score); - while (true) {} -} -``` - ---- - -## 2. Tutoriel : préparation sous KiCad - -### 2.1 Atelier — KiCad → PCB → CNC - -> ⚠️ Tutoriel expérimental : à revérifier, tester et adapter au besoin. - -Site officiel : — éditeur de PCB libre et gratuit. - -### 2.2 Création du projet - -Deux possibilités : - -- **Projet vierge** : *Fichier → Nouveau projet* -- **Projet « shield Arduino »** : *Fichier → Nouveau projet à partir d'un modèle → Arduino UNO Shield* - -L'exemple suivant porte sur la création d'un shield Arduino Uno comportant 3 LED, 3 résistances de 220 Ω et 3 boutons. - -Enregistrer le projet dans un dossier dédié (ici, `shieldDynalab`). Il contient deux fichiers principaux : - -- `*.kicad_sch` — conception du circuit électronique (schéma) -- `*.kicad_pcb` — agencement des composants sur le circuit imprimé et dessin des pistes - -Ouvrir le fichier `.kicad_sch`. Le modèle Arduino Uno Shield contient déjà les broches correspondant aux pins de l'Arduino. - -### 2.3 Ajout des composants - -Cliquer sur le bouton **Ajouter un symbole** (barre d'outils de droite, en haut). Dans le champ de recherche, saisir le nom du composant *en anglais* (par exemple `led`). - -Sélectionner le composant dans la liste : son symbole électrique s'affiche dans le volet de droite. Puis, via le menu déroulant **Pas d'empreinte par défaut**, sélectionner l'empreinte qui correspond au composant physique (par exemple via la référence constructeur ou les dimensions). - -> **Empreinte** : espace physique occupé par le composant sur le PCB ainsi que la position de ses broches. - -- **SMD** *(Surface Mount Device)* — composant monté en surface -- **THT** *(Through-Hole Technology)* — composant traversant - -Vérifier que l'empreinte qui s'affiche en dessous semble cohérente, valider, puis poursuivre avec les autres composants (par exemple une résistance 220 Ω). - -Si une empreinte n'est pas trouvée dans la liste déroulante, ce n'est pas grave : il sera possible de l'attribuer plus tard, par exemple pour le bouton poussoir. - -### 2.4 Attribution des empreintes a posteriori - -Pour attribuer une empreinte aux composants qui n'en ont pas encore, utiliser le bouton **Assigner des empreintes**. Une fenêtre liste tous les composants du projet ; il devient possible : - -- de modifier les empreintes déjà attribuées, -- d'en attribuer de nouvelles depuis la liste à droite (recherche par mot-clé ou référence, en anglais ; double-clic pour valider). - -En cas de doute, faire un *clic droit* sur le nom de l'empreinte → **Affichage de l'empreinte sélectionnée**, pour vérifier visuellement la cohérence. - -Si un composant n'existe pas dans la bibliothèque, il est possible de fabriquer une empreinte personnalisée à partir de zéro. - -### 2.5 Conception du circuit - -Dans l'espace de travail, survoler un composant et utiliser les raccourcis suivants : - -| Touche | Action | -|---|---| -| `M` | *Move* — déplacer le composant | -| `R` | *Rotate* — pivoter le composant | -| `Ctrl + D` | *Duplicate* — dupliquer le composant (cliquer ailleurs pour le poser) | - -Le bouton **Ajouter un fil** (barre d'outils de droite) permet de relier les broches entre elles. - -Survoler les noms des broches de l'Arduino et faire `Ctrl + D` pour les dupliquer à proximité du module en cours de conception (par exemple le module LED). Procéder de même pour la masse (GND). - -Le bouton **Annotation de la schématique** renomme automatiquement les composants pour éviter les conflits. - -Ajouter des **indicateurs de non-connexion** sur toutes les broches qui ne seront reliées à rien : cela évite les erreurs lors du contrôle des règles électriques (ERC). - -> *Point à vérifier* : sur quelles broches exactement faut-il placer ces indicateurs ? - -Il est possible de sélectionner plusieurs composants à la fois pour les dupliquer en bloc (utile lorsqu'un même sous-module se répète sur le circuit). - -### 2.6 Passage à l'éditeur de PCB - -Une fois le schéma terminé : **sauvegarder**, puis cliquer sur **Commuter vers l'éditeur de PCB** (barre d'outils en haut). Cela ouvre le fichier `.kicad_pcb`. - -Au départ, l'éditeur ne contient pas encore les composants du schéma. Pour les importer : **Outils → Mettre à jour le PCB depuis le schéma**. - -Les composants apparaissent à l'écran, reliés par des « chevelus » aux broches correspondantes. Reste à les positionner, les orienter et les router de manière à éviter les croisements de pistes (le casse-tête commence ici). - -### 2.7 Paramétrage des contraintes (CNC) - -Avant de tracer les pistes, paramétrer les contraintes liées à la CNC : **Options du CI → Contraintes**. - -Modifier les valeurs minimales pour permettre le passage de la fraise lors de l'isolation des pistes. Se baser sur les diamètres de fraises disponibles. - -### 2.8 Tracé des pistes - -Le bouton de tracé de piste permet de dessiner les connexions. Au clic sur une broche, l'écran s'assombrit et seules les broches reliées électriquement restent éclairées, ce qui facilite l'identification des connexions à réaliser. - -- **Trait rouge** : la piste elle-même -- **Contour gris** : la zone d'isolation minimum - -KiCad maintient automatiquement la distance minimale par rapport aux autres broches et pistes. - -**Choix de la couche** — bien sélectionner la couche dans la liste de droite *avant* de tracer : - -- `F.Cu` *(front)* — pistes en cuivre côté composants -- `B.Cu` *(back)* — pistes en cuivre côté soudure - -Vérifier le rendu via **Affichage → Visualisation 3D** pour s'assurer que le résultat est physiquement réalisable et cohérent. - -> 💡 **Cas de la gravure CNC** : le cuivre ne traverse pas la plaque au niveau des perçages. Les pistes doivent donc être placées de l'autre côté par rapport aux composants. On travaille donc sur la couche `B.Cu`. -> -> Faire les pistes sur `F.Cu` donne certes un rendu plus clair, mais ne permet pas de souder les composants une fois la plaque gravée à la CNC. - -### 2.9 Export des fichiers de fabrication - -**Pistes (Gerber)** : *Fichier → Fichier de fabrication → Gerber `.gbr`*. Sélectionner les couches concernées, tracer ; la fenêtre du bas confirme l'enregistrement. - -**Perçages (Excellon)** : *Fichier → Fichier de fabrication → Fichier de perçage `.drl`*. Créer le fichier de perçage ET le plan de perçage. - -### 2.10 Conversion Gerber → SVG - -Utiliser **FlatCam** : il permet d'ouvrir des fichiers Gerber, de définir le diamètre et le type de fraise utilisée, et de générer automatiquement le tracé vectoriel du chemin que la CNC empruntera. Il est également possible d'ajouter manuellement des traits si nécessaire. - -Étapes : - -1. Import des fichiers Gerber -2. Paramétrage de l'isolation -3. Création de la géométrie -4. Adaptation manuelle du tracé si besoin -5. Géométrie sélectionnée → **Export SVG** ou **DXF**, ou bien génération directe du chemin CNC - -Tutoriel vidéo : - -### 2.11 Ressources complémentaires - -Documentation KiCad en français sur Fabmanager : - ---- - -## 3. Atelier 2 — déroulé - -1. Retour sur les règles de conception -2. Retour d'expérience sur le projet -3. Préparation des fichiers pour la CNC -4. Usinage sur CNC -5. **Et après ?** Exposition, autres ateliers, création d'un club ? - ---- - -## 4. Règles de conception du PCB - -### 4.1 Points abordés ensemble - -#### 1. Type de fabrication et couches utilisées - -PCB simple face : les pistes sont gravées sur la face cuivre inférieure, les composants traversants sont placés sur la face supérieure. Dans KiCad, router donc les pistes sur la couche `B.Cu`. - -#### 2. Types de composants électroniques - -- **CMS** (Composants Montés en Surface) = **SMD** (*Surface Mount Device*) : même chose, en français et en anglais. -- **THT** (*Through-Hole Technology*) : composants traversants. - -#### 3. Outils de vérification dans KiCad - -- **DRC** (*Design Rule Check*) : contrôle du respect des règles de conception du PCB. -- **ERC** (*Electrical Rule Check*) : contrôle de la cohérence électrique du schéma. - -#### 4. Gestion des entrées non connectées - -Ne pas laisser d'entrée non connectée (dite « flottante ») : cela peut entraîner des comportements imprévisibles. Sur un microcontrôleur, une broche inutilisée peut rester non connectée à condition d'être correctement configurée par programmation (en sortie, ou avec un état défini par exemple en pull-up/pull-down interne). - -#### 5. Routage et angles des pistes - -Éviter les angles à 90°, privilégier les angles à 45°. Cela améliore la qualité de fabrication et limite les discontinuités électriques, particulièrement sur les signaux rapides. - -#### 6. Gestion des interférences - -Éloigner les éléments susceptibles de générer des interférences (liaisons USB, signaux rapides, lignes d'horloge) des entrées analogiques (notamment audio). - -Règle générale : plus un signal est rapide, plus il est susceptible de générer ou de subir des interférences. Dans ce cas, privilégier des pistes courtes. À l'inverse, pour des signaux lents (bouton poussoir, LED, commande de relais, UART à faible débit), il est possible de déporter le composant avec des pistes plus longues sans risque significatif. - -#### 7. Notion de routage soigné - -Un routage soigné consiste à tracer les pistes de manière logique et maîtrisée : - -- privilégier des trajets courts et directs, -- éviter les boucles inutiles, -- limiter les croisements entre signaux sensibles et signaux bruyants, -- conserver une proximité cohérente avec la masse pour assurer un bon retour de courant. - -Un tracé clair et structuré facilite également la lecture, la maintenance et le dépannage du circuit. - -#### 8. Routage des signaux USB - -Les lignes D+ et D− doivent avoir des longueurs identiques afin de préserver les caractéristiques du signal différentiel et maintenir une impédance cohérente. - -#### 9. Intérêt des PCB multicouches - -Lorsque cela est possible, un PCB à quatre couches est une solution idéale : les couches internes dédiées à l'alimentation et à la masse améliorent la stabilité électrique et réduisent les interférences (notamment grâce à leur effet capacitif). - -#### 10. Prototypage avec Arduino et intégration - -Une carte Arduino Uno est un dispositif complet adapté au prototypage rapide. - -Dans une mise en œuvre intégrée, il est possible de ne conserver que le microcontrôleur — par exemple l'ATmega328P — accompagné des éléments minimaux nécessaires à son fonctionnement : - -- un quartz (généralement 16 MHz) avec ses deux condensateurs associés, -- une résistance de pull-up sur la broche `RESET`, -- les condensateurs de découplage pour l'alimentation. - -Pour faciliter l'usage, monter le microcontrôleur sur un support DIP (support tulipe) : cela permet de le retirer aisément pour le reprogrammer sur une carte Arduino. - -### 4.2 Bonnes pratiques supplémentaires (bonus à vérifier) - -#### 11. Découplage des alimentations - -Chaque circuit intégré doit posséder un condensateur de découplage (typiquement 100 nF) placé au plus près de ses broches `VCC` et `GND`. Cela absorbe les variations rapides de courant, stabilise la tension et évite les comportements aléatoires difficiles à diagnostiquer. Pratique particulièrement importante pour les microcontrôleurs et les circuits logiques rapides. - -#### 12. Plan de masse (GND) - -Plutôt que de relier la masse uniquement par des pistes fines, utiliser une zone de cuivre continue. Cela réduit les interférences électromagnétiques, améliore le retour de courant et simplifie le routage. - -Dans le cas d'une gravure CNC, cette pratique est facilement réalisable : le plan de masse correspond au reste de cuivre non gravé, isolé autour des pistes et pastilles. Dans KiCad, on peut remplir la carte avec un *copper pour* (zone cuivrée) affectée à `GND` et relier tous les points de masse. - -#### 13. Boucle de courant et retour de masse - -Un signal électrique forme toujours une boucle complète : aller + retour. Si le chemin de retour n'est pas proche de la piste du signal, le circuit peut capter ou émettre du bruit. Toujours garder un retour de masse continu et proche pour tous les signaux, en particulier les signaux rapides ou sensibles. - -#### 14. Largeur des pistes adaptée au courant - -Toutes les pistes ne doivent pas avoir la même largeur : - -- les signaux logiques peuvent passer sur des pistes fines, -- les pistes d'alimentation et celles transportant un courant important doivent être plus larges pour éviter surchauffe, chute de tension ou destruction de la piste. - -Il existe des calculateurs en ligne pour déterminer la largeur adaptée selon le courant et l'épaisseur du cuivre. - -#### 15. Points de test pour le débogage - -Prévoir sur le PCB des points de test accessibles pour mesurer rapidement la tension d'alimentation, vérifier les signaux critiques et suivre les lignes de communication importantes. - -Concrètement, ce sont de petites pastilles ou trous métallisés sur lesquels on peut poser la sonde d'un multimètre ou d'un oscilloscope. Cela facilite le dépannage sans avoir à dessouder des composants. - -#### 16. Dissipation thermique - -Certains composants génèrent de la chaleur (régulateurs de tension, transistors de puissance). Pour éviter la surchauffe et préserver la fiabilité du circuit, prévoir une surface de cuivre suffisante pour dissiper cette chaleur : - -- pistes plus larges connectées aux broches concernées, -- raccordement de ces broches à des zones de cuivre étendues qui agissent comme dissipateurs thermiques. - -L'objectif est d'offrir un chemin efficace d'évacuation de la chaleur vers le PCB. - -#### 17. Séparation des alimentations - -Si le circuit comporte des parties analogiques, numériques et de puissance, séparer les plans ou pistes d'alimentation pour chaque domaine. Par exemple, les moteurs et autres charges fortes peuvent disposer de leur propre piste, tandis que la logique numérique et l'analogique sensible utilisent des pistes ou zones distinctes. - -Même si toutes les alimentations proviennent de la même source, cette séparation physique sur le PCB limite les interférences et améliore la stabilité du circuit. - ---- - -## 5. Application au projet - -### 5.1 Processus itératif (retour d'expérience) - -#### Conception du PCB - -**#1 — Listing des composants** - -Inventorier l'ensemble des composants nécessaires. - -**#2 — Premiers choix de conception** - -- forme globale du PCB, -- composants accessibles ou non, -- répartition face supérieure / face inférieure, -- type d'alimentation (ne pas oublier la batterie !). - -**#3 — Test de positionnement et d'implantation réelle** *(si possible)* - -- repérer les conflits potentiels (ponts notamment), -- prendre les mesures critiques, -- définir la forme et la taille du PCB. - -**#4 — Schématisation sous KiCad** - -> 💡 Travailler si possible sur un double écran. - -- positionner et anticiper a minima l'implantation des éléments ; -- l'objectif n'est pas nécessairement de produire un schéma facilement lisible, mais un schéma exploitable pour le routage ; -- éviter au maximum les croisements ; -- relier directement les composants à la broche source (ne pas chercher à les relier entre eux dans un premier temps) ; -- si besoin, utiliser l'empreinte d'un autre composant (exemple : une batterie peut être représentée par l'empreinte d'une résistance). - -À explorer : sous KiCad, les broches `GND` d'un Arduino ne sont pas reliées entre elles. Affecter un `GND` symbolique à chacune via des labels. - -**#5 — Routage sous KiCad (éditeur de PCB)** - -Dernier moment pour vérifier les empreintes — vérifier notamment que le pas est bien un multiple de 2,54 mm. - -> ⚠️ Après création des pistes, déplacer un composant rompt les connexions. Implanter donc précisément les composants dès le départ (au besoin, double-clic + saisie des coordonnées). - -Pour Arduino : supprimer si nécessaire les limites de la carte. - -- imaginer les premiers regroupements de pistes (vrai aussi pour la masse) et les ajuster progressivement sur le schéma ; -- éviter les **prisons** (deux broches éloignées reliées par une boucle qui bloque l'accès aux autres broches) → privilégier les pistes en parallèle ; -- pour le passage des pistes, modifier les empreintes si nécessaire (par exemple suppression d'un perçage) : *double-clic sur l'empreinte → Éditer l'empreinte → Créer une nouvelle bibliothèque personnalisée (la placer en favoris) → la modifier puis enregistrer sous cette nouvelle bibliothèque* ; -- garder en tête qu'il est possible de faire passer des pistes **sous** les composants ; -- dans certains cas, créer des ponts filaires (parfois inévitable). - -> **Important** : définir la couche `Edge.Cuts` (contour du PCB). - -**#6 — Réaffectation des broches** - -Objectif : faciliter le routage. - -- veiller à la capacité de chaque broche ; -- bon à savoir : sur Arduino, les broches analogiques peuvent être réaffectées en numérique ; -- noter toutes les modifications pour adapter le code en conséquence. - -**#7 — Modification du code** - -Reporter les réaffectations de broches dans le code source. - -**#8 — Nouveau prototypage** *(facultatif)* - -#### Préparation des fichiers pour l'usinage - -**#9 — Export des fichiers Gerber et Excellon** - -Exporter a minima : `B.Cu` + `Edge.Cuts` + `.drl`. - -**#10 — Traitement dans FlatCam** - -Génération des fichiers SVG. - -**#11 — Traitement dans Inkscape** *(facultatif)* - -Fusionner les « combos », supprimer les contours superflus. - -### 5.2 Liste des équipements et positionnement - -- Shield Arduino custom avec PCB **débordant du form factor** standard. -- L'écran déborde de **8 mm minimum vers le haut** ; les broches sont à **4 mm minimum** du bord de la carte. -- **Pile 9 V** pour alimentation sur `Vin` (anticiper l'emplacement d'un futur interrupteur d'alimentation). Branchement filaire sur le PCB via une cosse de raccordement, à droite des broches de l'écran. -- **Potentiomètre de contraste** : utile uniquement pour la mise au point, pas besoin d'être accessible une fois la carte dans son boîtier. Position classique conservée, mais il sera caché sous le capot. -- **Port USB de l'Arduino** : accessible pour reprogrammation. -- **Bouton reset** : ajout d'un bouton dédié pour relancer le jeu (ou aménager la forme du PCB pour conserver l'accès au bouton reset d'origine de l'Arduino). -- **Buzzer** : monté en face arrière du PCB. Attention à : - - ce que la position des mains lors du jeu ne bouche pas le son, - - ce qu'il ne touche pas / ne court-circuite pas les broches en sous-face de l'écran (le centrer sur la hauteur, l'aligner à gauche sur le bord du module écran). - -#### Dimensions du PCB - -| | Hauteur | Largeur | -|---|---|---| -| Idéal | 78 mm | 80 mm | -| Plaque à graver disponible | 70 mm | 100 mm | -| **PCB final retenu** | **65 mm** | **80 mm** | - -### 5.3 Schéma KiCad — réaffectation des broches - -#### Boutons - -| Bouton | Broche Arduino | Rôle | -|---|---|---| -| SW1 | D12 (+ GND) | Bouton **haut** | -| SW2 | D13 (broche 3 du SW2 sur GND, « 14 » à côté du 13) | Bouton **bas** | -| SW3 | A0 (broches 1 et 3) + GND (broches 2 et 4, à côté du 5 V) | Bouton **tir** | - -#### Buzzer - -- Broche **D11** + GND. - -#### Écran LCD - -| Broche LCD | Broche Arduino | -|---|---| -| D7 | D10 | -| D6 | D9 | -| D5 | D8 | -| D4 | D7 | -| E | D5 | -| RS | D6 | -| RW | GND | - -#### Masses - -`VSS` du LCD, GND du buzzer, GND de SW1 et GND de SW2 sont tous reliés à la masse commune. - -> ⚠️ **Important** : sur l'écran LCD, il faudra **souder un pont** entre `R/W` et `VSS` pour relier `R/W` à la masse. - ---- - -## 6. Tutoriel : préparation pour la CNC - -### 6.1 Création d'un PCB à la CNC (gravure « à l'anglaise ») - -**Logiciels utilisés :** - -- KiCad — version 9.0 -- FlatCam — version bêta 8.994 -- Inkscape -- Easel (pilotage de la CNC) - -### 6.2 Étapes dans KiCad - -#### Règles de conception → contraintes - -Vérifier : - -- le **diamètre des pads** : 3 mm (double-clic sur les pads → *Propriétés*) ; -- la **distance entre pads** : 2,54 mm. - -> Proposition : passer à 2,34 mm (= 2,54 − 2 × 0,1) pour ménager une marge ? - -#### Ajouter le contour du circuit - -- sélectionner la couche `Edge.Cuts`, -- utiliser par exemple l'outil **Rectangle**, clic simple. - -#### Export des fichiers de fabrication - -*Fichier → Fichiers de fabrication → Gerber → Tracer*, puis créer les **fichiers de perçage** (Excellon). - -> ⚠️ Ne pas oublier d'exporter la couche `Edge.Cuts`. - -### 6.3 FlatCam - -**Téléchargement** : - -> En date du 01/04/2026, la version 8.994 est disponible avec un `.exe` pour Windows. - -#### 1. Ouvrir FlatCam - -#### 2. Charger les fichiers - -- **Open Gerber** pour le fichier de la face cuivre + `Edge.Cuts`, -- **Open Excellon** pour les fichiers de perçage : - - `PTH` → perçage des composants, - - `NPTH` → autres perçages. - -#### 3. Convertir Gerber et Excellon en géométries - -- sélectionner les fichiers, -- *Edit → Conversion → Convert Any to Geo*. - -#### 4. Joindre les contours aux géométries - -**Pour les pistes** : sélectionner `B.Cu` + `Edge.Cuts` → *Edit → Join Objects → Join Geo / Gerber / Excellon*. Cela génère une nouvelle géométrie « Combo… ». - -**Pour les perçages** : même opération avec `PTH.drl` + `Edge.Cuts`. - -> ⚠️ Il n'est *a priori* pas possible de joindre efficacement les géométries `PTH.drl` et `B.Cu` directement : le fichier de pistes efface / écrase le fichier de perçage. - -#### Variante (ancienne version) - -Ajouter manuellement une forme contour sur toutes les géométries : - -1. sélectionner la géométrie → *Properties → Geometry Editor* ; -2. choisir l'outil souhaité (par exemple **Rectangle**) ; -3. dessiner le contour. - -Toutes les géométries doivent partager le même contour pour garantir leur alignement par la suite. - -#### 5. Exporter les géométries « Combo » en SVG - -Sélectionner chaque géométrie puis *File → Export → SVG* (autant de fichiers SVG que de géométries). - -### 6.4 Inkscape *(facultatif)* - -1. Ouvrir les fichiers SVG « Combo » et faire copier / coller. -2. Appliquer un **effet miroir** si nécessaire (réfléchir au résultat attendu). -3. Séparément, **dégrouper** puis **unir** les pistes d'un côté, les perçages de l'autre. -4. Regrouper chacun avec son contour respectif. -5. Aligner les deux fichiers via leurs contours. -6. Supprimer les contours superflus pour n'en conserver qu'un seul. -7. Enregistrer le tout dans un seul fichier SVG final. - -> Option : conserver 2 contours est possible mais sans réel intérêt. - -### 6.5 Easel — usinage CNC - -#### Préparation du projet - -1. *Nouveau projet* → donner un nom au projet (cliquer sur *Untitled*). -2. Régler l'unité en **millimètres**. -3. Spécifier le **matériau PCB** et ses dimensions — **surtout l'épaisseur** (PCB du Lab = **1,4 mm**). - -> ⚠️ Appliquer un **miroir** si nécessaire (réfléchir au résultat). -> -> Vérifier la bonne superposition des SVG si besoin. - -#### Gravure des pistes - -> ⚠️ Vérifier de nouveau l'effet miroir. -> -> Important : **monter la fraise** et faire un **homing**. - -**Fraise utilisée** : V-bits → *Other* → **pointe javelot 30°, 0,125 in (⅛ pouce)**. - -**Cut settings** *(onglet Manual)* : - -| Paramètre | Valeur | -|---|---| -| Feed rate | 60 mm/min | -| Plunge rate | 60 mm/min | -| Depth per pass | 0,05 mm | - -**Import du SVG** : *Project → Import SVG*. Le placer à l'origine via `Ctrl + A` puis position `X = 0`, `Y = 0` (veiller à avoir un remplissage interne sur la couche extérieure, ou équivalent). - -Supprimer le contour et, au besoin, les trous de perçage. Combiner les pistes : `Ctrl + A` puis *Edit → Combine*. - -**Définir la profondeur de passe et le mode** : `Ctrl + A` → *Cut* → `Depth = 0,1 mm` *(à vérifier — proposition : 0,2 mm ?)* → **Cut outside shape path**. - -#### Perçages - -> ⚠️ Vérifier l'effet miroir. -> -> 💡 Préparer le fichier pendant que la fraise refroidit ! - -- monter la fraise et faire un homing ; -- *Probe* → **Use Last XY Zero** ; -- ré-importer le SVG, le placer à `(0, 0)` (ou `Ctrl + Z`), puis supprimer le contour et les pistes ; -- au besoin, supprimer aussi tout reste de contour ou de pistes. - -**Fraise utilisée** : 1/32 in (0,03125 in). - -**Profondeur et mode** : `Ctrl + A` → *Cut* → `Depth = max` (+ ajouter `0,2 mm` via **Add depth**) → **Cut inside shape path**. - -**Cut settings** : - -| Paramètre | Valeur | -|---|---| -| Feed rate | 300 mm/min | -| Plunge rate | 100 mm/min | -| Depth per pass | 0,4 mm | - -#### Découpe du contour - -- **Work Zero** : *Manual* → **Use Last Position** ; -- ré-importer le SVG à `(0, 0)`, supprimer perçages et pistes (ou tracer directement le contour avec les outils d'Easel). - -**Fraise utilisée** : 1/32 in. - -**Profondeur et mode** : `Ctrl + A` → *Cut* → `Depth = max` (+ `0,2 mm` supplémentaires) → **Cut outside shape path**. - -> Sans les **tabs** ? - -**Cut settings** : - -| Paramètre | Valeur | -|---|---| -| Feed rate | 300 mm/min | -| Plunge rate | 100 mm/min | -| Depth per pass | 0,4 mm | - -#### Fixation de la plaque PCB - -> 💡 Conseil : travailler **en bas à gauche** de la fraiseuse. - ---- - -## 7. Et après ? - -À définir : exposition, autres ateliers, création d'un club, prolongements logiciels et matériels… - ---- - -## Notes éditoriales (à traiter) - -- Harmoniser / reprendre la cohérence des notes encore en suspens. -- Vérifier les points marqués `?` (notamment indicateurs de non-connexion, valeur de profondeur à 0,1 ou 0,2 mm, pas à 2,34 ou 2,54 mm). -- Compléter la section « Et après ? ». -- Réinsérer les illustrations du document original aux emplacements pertinents (KiCad, FlatCam, Easel). \ No newline at end of file diff --git a/a9474a83-43b3-484c-950e-37a27ff663fe/meta.json b/a9474a83-43b3-484c-950e-37a27ff663fe/meta.json deleted file mode 100644 index 3a65f52..0000000 --- a/a9474a83-43b3-484c-950e-37a27ff663fe/meta.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "uuid": "a9474a83-43b3-484c-950e-37a27ff663fe", - "slug": "game-watch-diy-fabrication", - "title": "Gawfgbsdfg", - "author": "cedric@abonnel.fr", - "published": false, - "featured": false, - "published_at": "2026-05-13 18:08", - "created_at": "2026-05-13 18:12:54", - "updated_at": "2026-05-15 22:57:05", - "revisions": [ - { - "n": 1, - "date": "2026-05-15 22:57:05", - "comment": "Titre modifié, contenu modifié", - "title": "Game & Watch DIY — Fabrication" - } - ], - "cover": "", - "files_meta": { - "9ae9bc58c13ca70c-56046.jpg": { - "author": "", - "source_url": "https://images.freeimages.com/images/previews/9df/nature-1370816.jpg" - } - }, - "external_links": [], - "seo_title": "", - "seo_description": "", - "og_image": "", - "category": "fablab", - "tags": [] -} diff --git a/a9474a83-43b3-484c-950e-37a27ff663fe/revisions/0001.md b/a9474a83-43b3-484c-950e-37a27ff663fe/revisions/0001.md deleted file mode 100644 index fe944a3..0000000 --- a/a9474a83-43b3-484c-950e-37a27ff663fe/revisions/0001.md +++ /dev/null @@ -1,781 +0,0 @@ -> Document de travail consolidant le prototypage Arduino, la conception du PCB sous KiCad, les règles de conception et la préparation des fichiers pour la CNC. - ---- - -## 1. Rappel : prototypage - -### 1.1 Liste du matériel - -- 1 × Arduino Uno -- 1 × écran LCD 16 broches (non I²C) -- 3 × boutons poussoirs -- 1 × buzzer -- 1 × résistance 220 Ω -- 1 × potentiomètre 10 kΩ *(facultatif — voir remarque ci-dessous)* - -### 1.2 Câblage - -**Écran LCD** — câblage identique au projet n° 11 du livre de référence ; consulter les pages 116 et 117 pour le détail des broches. - -Une variante sans potentiomètre a été testée (LCD branché directement à la masse) mais elle a été abandonnée. - -**Boutons poussoirs** — montés en pull-up interne : - -``` -GND → Poussoir → broches 7, 8, 9 (avec INPUT_PULLUP dans le code) -``` - -Pour comprendre le principe du montage pull-up : - -**Buzzer** — deux broches : l'une à la masse, l'autre sur la broche 6 (qui assure également l'alimentation lors du pilotage par `tone()`). Voir notamment le projet n° 6, p. 71. - -### 1.3 Type de jeu - -Jeu d'arcade type *Asteroids*. - -### 1.4 Code de référence - -```cpp -#include -LiquidCrystal lcd(12, 11, 5, 4, 3, 2); - -// ---- Buzzer ---- -const int PIN_BUZZER = 6; -inline void beepShoot() { tone(PIN_BUZZER, 2000, 40); } // court -inline void beepHit() { tone(PIN_BUZZER, 1200, 80); } // moyen -inline void beepOver() { tone(PIN_BUZZER, 400, 600); } // long - -// ---- Boutons ---- -const int boutonTir = 7; -const int boutonHaut = 8; -const int boutonBas = 9; - -// ---- Affichage ---- -byte CH_VAISSEAU[8] = { - B00100, B01110, B11111, B11111, B01110, B00100, B00100, B00000 -}; -byte CH_MISSILE[8] = { - B00100, B00100, B00100, B11111, B00100, B00100, B00100, B00000 -}; -byte CH_ENNEMI[8] = { - B11111, B10101, B11111, B01010, B11111, B10101, B11111, B00000 -}; - -int vaisseauLigne = 1; // 0..1 - -struct Ennemi { int colonne; int ligne; bool actif; }; -const int MAX_ENNEMIS = 3; -Ennemi ennemis[MAX_ENNEMIS]; - -struct Projectile { int colonne; int ligne; bool actif; }; -const int MAX_TIRS = 6; -Projectile tirs[MAX_TIRS]; - -unsigned long dernierDeplacement = 0; -unsigned long intervalDeplacement = 500; - -unsigned long dernierTir = 0; -const unsigned long delaiTir = 180; - -int score = 0; - -void setup() { - pinMode(boutonTir, INPUT_PULLUP); - pinMode(boutonHaut, INPUT_PULLUP); - pinMode(boutonBas, INPUT_PULLUP); - pinMode(PIN_BUZZER, OUTPUT); - - lcd.begin(16, 2); - lcd.createChar(0, CH_VAISSEAU); - lcd.createChar(1, CH_MISSILE); - lcd.createChar(2, CH_ENNEMI); - lcd.print("Vaisseau Pret!"); - delay(600); - lcd.clear(); - - randomSeed(analogRead(A0)); - for (int i = 0; i < MAX_ENNEMIS; i++) ennemis[i].actif = false; - for (int i = 0; i < MAX_TIRS; i++) tirs[i].actif = false; -} - -void loop() { - unsigned long now = millis(); - - if (digitalRead(boutonHaut) == LOW) vaisseauLigne = 0; - else if (digitalRead(boutonBas) == LOW) vaisseauLigne = 1; - - // Tir multi-missiles + bip - if (digitalRead(boutonTir) == LOW && now - dernierTir >= delaiTir) { - int idx = slotTirLibre(); - if (idx >= 0) { - tirs[idx].actif = true; - tirs[idx].colonne = 1; - tirs[idx].ligne = vaisseauLigne; - dernierTir = now; - beepShoot(); - } - } - - if (now - dernierDeplacement > intervalDeplacement) { - dernierDeplacement = now; - - // Déplacer les tirs - for (int t = 0; t < MAX_TIRS; t++) { - if (!tirs[t].actif) continue; - tirs[t].colonne++; - if (tirs[t].colonne > 15) tirs[t].actif = false; - } - - // Déplacer les ennemis + détection des collisions - for (int i = 0; i < MAX_ENNEMIS; i++) { - if (!ennemis[i].actif) continue; - ennemis[i].colonne--; - - for (int t = 0; t < MAX_TIRS; t++) { - if (!tirs[t].actif) continue; - if (ennemis[i].colonne == tirs[t].colonne - && ennemis[i].ligne == tirs[t].ligne) { - ennemis[i].actif = false; - tirs[t].actif = false; - score++; - beepHit(); - break; - } - } - - if (ennemis[i].colonne <= 0) { - beepOver(); - gameOver(); - } - } - - // Apparition d'ennemis - int actifs = 0; - for (int i = 0; i < MAX_ENNEMIS; i++) if (ennemis[i].actif) actifs++; - if (actifs < MAX_ENNEMIS && random(0, 10) > 7) { - for (int i = 0; i < MAX_ENNEMIS; i++) if (!ennemis[i].actif) { - ennemis[i].actif = true; - ennemis[i].colonne = 15; - ennemis[i].ligne = random(0, 2); - break; - } - } - - updateLCD(); - } -} - -int slotTirLibre() { - for (int i = 0; i < MAX_TIRS; i++) if (!tirs[i].actif) return i; - return -1; -} - -static inline void printIfOnScreen(int col, int row, uint8_t ch) { - if (col >= 0 && col <= 15 && row >= 0 && row <= 1) { - lcd.setCursor(col, row); - lcd.write(ch); - } -} - -void updateLCD() { - lcd.clear(); - lcd.setCursor(10, 0); lcd.print("S:"); lcd.print(score); - - printIfOnScreen(0, vaisseauLigne, 0); // vaisseau - - // Tirs - for (int t = 0; t < MAX_TIRS; t++) { - if (!tirs[t].actif) continue; - if (tirs[t].colonne >= 0 && tirs[t].colonne <= 15) { - lcd.setCursor(tirs[t].colonne, tirs[t].ligne); - lcd.write((uint8_t)1); // missile - } - } - - // Ennemis - for (int i = 0; i < MAX_ENNEMIS; i++) { - if (!ennemis[i].actif) continue; - if (ennemis[i].colonne >= 0 && ennemis[i].colonne <= 15) { - lcd.setCursor(ennemis[i].colonne, ennemis[i].ligne); - lcd.write((uint8_t)2); // ennemi - } - } -} - -void gameOver() { - lcd.clear(); - lcd.setCursor(3, 0); lcd.print("GAME OVER"); - lcd.setCursor(4, 1); lcd.print("Score:"); lcd.print(score); - while (true) {} -} -``` - ---- - -## 2. Tutoriel : préparation sous KiCad - -### 2.1 Atelier — KiCad → PCB → CNC - -> ⚠️ Tutoriel expérimental : à revérifier, tester et adapter au besoin. - -Site officiel : — éditeur de PCB libre et gratuit. - -### 2.2 Création du projet - -Deux possibilités : - -- **Projet vierge** : *Fichier → Nouveau projet* -- **Projet « shield Arduino »** : *Fichier → Nouveau projet à partir d'un modèle → Arduino UNO Shield* - -L'exemple suivant porte sur la création d'un shield Arduino Uno comportant 3 LED, 3 résistances de 220 Ω et 3 boutons. - -Enregistrer le projet dans un dossier dédié (ici, `shieldDynalab`). Il contient deux fichiers principaux : - -- `*.kicad_sch` — conception du circuit électronique (schéma) -- `*.kicad_pcb` — agencement des composants sur le circuit imprimé et dessin des pistes - -Ouvrir le fichier `.kicad_sch`. Le modèle Arduino Uno Shield contient déjà les broches correspondant aux pins de l'Arduino. - -### 2.3 Ajout des composants - -Cliquer sur le bouton **Ajouter un symbole** (barre d'outils de droite, en haut). Dans le champ de recherche, saisir le nom du composant *en anglais* (par exemple `led`). - -Sélectionner le composant dans la liste : son symbole électrique s'affiche dans le volet de droite. Puis, via le menu déroulant **Pas d'empreinte par défaut**, sélectionner l'empreinte qui correspond au composant physique (par exemple via la référence constructeur ou les dimensions). - -> **Empreinte** : espace physique occupé par le composant sur le PCB ainsi que la position de ses broches. - -- **SMD** *(Surface Mount Device)* — composant monté en surface -- **THT** *(Through-Hole Technology)* — composant traversant - -Vérifier que l'empreinte qui s'affiche en dessous semble cohérente, valider, puis poursuivre avec les autres composants (par exemple une résistance 220 Ω). - -Si une empreinte n'est pas trouvée dans la liste déroulante, ce n'est pas grave : il sera possible de l'attribuer plus tard, par exemple pour le bouton poussoir. - -### 2.4 Attribution des empreintes a posteriori - -Pour attribuer une empreinte aux composants qui n'en ont pas encore, utiliser le bouton **Assigner des empreintes**. Une fenêtre liste tous les composants du projet ; il devient possible : - -- de modifier les empreintes déjà attribuées, -- d'en attribuer de nouvelles depuis la liste à droite (recherche par mot-clé ou référence, en anglais ; double-clic pour valider). - -En cas de doute, faire un *clic droit* sur le nom de l'empreinte → **Affichage de l'empreinte sélectionnée**, pour vérifier visuellement la cohérence. - -Si un composant n'existe pas dans la bibliothèque, il est possible de fabriquer une empreinte personnalisée à partir de zéro. - -### 2.5 Conception du circuit - -Dans l'espace de travail, survoler un composant et utiliser les raccourcis suivants : - -| Touche | Action | -|---|---| -| `M` | *Move* — déplacer le composant | -| `R` | *Rotate* — pivoter le composant | -| `Ctrl + D` | *Duplicate* — dupliquer le composant (cliquer ailleurs pour le poser) | - -Le bouton **Ajouter un fil** (barre d'outils de droite) permet de relier les broches entre elles. - -Survoler les noms des broches de l'Arduino et faire `Ctrl + D` pour les dupliquer à proximité du module en cours de conception (par exemple le module LED). Procéder de même pour la masse (GND). - -Le bouton **Annotation de la schématique** renomme automatiquement les composants pour éviter les conflits. - -Ajouter des **indicateurs de non-connexion** sur toutes les broches qui ne seront reliées à rien : cela évite les erreurs lors du contrôle des règles électriques (ERC). - -> *Point à vérifier* : sur quelles broches exactement faut-il placer ces indicateurs ? - -Il est possible de sélectionner plusieurs composants à la fois pour les dupliquer en bloc (utile lorsqu'un même sous-module se répète sur le circuit). - -### 2.6 Passage à l'éditeur de PCB - -Une fois le schéma terminé : **sauvegarder**, puis cliquer sur **Commuter vers l'éditeur de PCB** (barre d'outils en haut). Cela ouvre le fichier `.kicad_pcb`. - -Au départ, l'éditeur ne contient pas encore les composants du schéma. Pour les importer : **Outils → Mettre à jour le PCB depuis le schéma**. - -Les composants apparaissent à l'écran, reliés par des « chevelus » aux broches correspondantes. Reste à les positionner, les orienter et les router de manière à éviter les croisements de pistes (le casse-tête commence ici). - -### 2.7 Paramétrage des contraintes (CNC) - -Avant de tracer les pistes, paramétrer les contraintes liées à la CNC : **Options du CI → Contraintes**. - -Modifier les valeurs minimales pour permettre le passage de la fraise lors de l'isolation des pistes. Se baser sur les diamètres de fraises disponibles. - -### 2.8 Tracé des pistes - -Le bouton de tracé de piste permet de dessiner les connexions. Au clic sur une broche, l'écran s'assombrit et seules les broches reliées électriquement restent éclairées, ce qui facilite l'identification des connexions à réaliser. - -- **Trait rouge** : la piste elle-même -- **Contour gris** : la zone d'isolation minimum - -KiCad maintient automatiquement la distance minimale par rapport aux autres broches et pistes. - -**Choix de la couche** — bien sélectionner la couche dans la liste de droite *avant* de tracer : - -- `F.Cu` *(front)* — pistes en cuivre côté composants -- `B.Cu` *(back)* — pistes en cuivre côté soudure - -Vérifier le rendu via **Affichage → Visualisation 3D** pour s'assurer que le résultat est physiquement réalisable et cohérent. - -> 💡 **Cas de la gravure CNC** : le cuivre ne traverse pas la plaque au niveau des perçages. Les pistes doivent donc être placées de l'autre côté par rapport aux composants. On travaille donc sur la couche `B.Cu`. -> -> Faire les pistes sur `F.Cu` donne certes un rendu plus clair, mais ne permet pas de souder les composants une fois la plaque gravée à la CNC. - -### 2.9 Export des fichiers de fabrication - -**Pistes (Gerber)** : *Fichier → Fichier de fabrication → Gerber `.gbr`*. Sélectionner les couches concernées, tracer ; la fenêtre du bas confirme l'enregistrement. - -**Perçages (Excellon)** : *Fichier → Fichier de fabrication → Fichier de perçage `.drl`*. Créer le fichier de perçage ET le plan de perçage. - -### 2.10 Conversion Gerber → SVG - -Utiliser **FlatCam** : il permet d'ouvrir des fichiers Gerber, de définir le diamètre et le type de fraise utilisée, et de générer automatiquement le tracé vectoriel du chemin que la CNC empruntera. Il est également possible d'ajouter manuellement des traits si nécessaire. - -Étapes : - -1. Import des fichiers Gerber -2. Paramétrage de l'isolation -3. Création de la géométrie -4. Adaptation manuelle du tracé si besoin -5. Géométrie sélectionnée → **Export SVG** ou **DXF**, ou bien génération directe du chemin CNC - -Tutoriel vidéo : - -### 2.11 Ressources complémentaires - -Documentation KiCad en français sur Fabmanager : - ---- - -## 3. Atelier 2 — déroulé - -1. Retour sur les règles de conception -2. Retour d'expérience sur le projet -3. Préparation des fichiers pour la CNC -4. Usinage sur CNC -5. **Et après ?** Exposition, autres ateliers, création d'un club ? - ---- - -## 4. Règles de conception du PCB - -### 4.1 Points abordés ensemble - -#### 1. Type de fabrication et couches utilisées - -PCB simple face : les pistes sont gravées sur la face cuivre inférieure, les composants traversants sont placés sur la face supérieure. Dans KiCad, router donc les pistes sur la couche `B.Cu`. - -#### 2. Types de composants électroniques - -- **CMS** (Composants Montés en Surface) = **SMD** (*Surface Mount Device*) : même chose, en français et en anglais. -- **THT** (*Through-Hole Technology*) : composants traversants. - -#### 3. Outils de vérification dans KiCad - -- **DRC** (*Design Rule Check*) : contrôle du respect des règles de conception du PCB. -- **ERC** (*Electrical Rule Check*) : contrôle de la cohérence électrique du schéma. - -#### 4. Gestion des entrées non connectées - -Ne pas laisser d'entrée non connectée (dite « flottante ») : cela peut entraîner des comportements imprévisibles. Sur un microcontrôleur, une broche inutilisée peut rester non connectée à condition d'être correctement configurée par programmation (en sortie, ou avec un état défini par exemple en pull-up/pull-down interne). - -#### 5. Routage et angles des pistes - -Éviter les angles à 90°, privilégier les angles à 45°. Cela améliore la qualité de fabrication et limite les discontinuités électriques, particulièrement sur les signaux rapides. - -#### 6. Gestion des interférences - -Éloigner les éléments susceptibles de générer des interférences (liaisons USB, signaux rapides, lignes d'horloge) des entrées analogiques (notamment audio). - -Règle générale : plus un signal est rapide, plus il est susceptible de générer ou de subir des interférences. Dans ce cas, privilégier des pistes courtes. À l'inverse, pour des signaux lents (bouton poussoir, LED, commande de relais, UART à faible débit), il est possible de déporter le composant avec des pistes plus longues sans risque significatif. - -#### 7. Notion de routage soigné - -Un routage soigné consiste à tracer les pistes de manière logique et maîtrisée : - -- privilégier des trajets courts et directs, -- éviter les boucles inutiles, -- limiter les croisements entre signaux sensibles et signaux bruyants, -- conserver une proximité cohérente avec la masse pour assurer un bon retour de courant. - -Un tracé clair et structuré facilite également la lecture, la maintenance et le dépannage du circuit. - -#### 8. Routage des signaux USB - -Les lignes D+ et D− doivent avoir des longueurs identiques afin de préserver les caractéristiques du signal différentiel et maintenir une impédance cohérente. - -#### 9. Intérêt des PCB multicouches - -Lorsque cela est possible, un PCB à quatre couches est une solution idéale : les couches internes dédiées à l'alimentation et à la masse améliorent la stabilité électrique et réduisent les interférences (notamment grâce à leur effet capacitif). - -#### 10. Prototypage avec Arduino et intégration - -Une carte Arduino Uno est un dispositif complet adapté au prototypage rapide. - -Dans une mise en œuvre intégrée, il est possible de ne conserver que le microcontrôleur — par exemple l'ATmega328P — accompagné des éléments minimaux nécessaires à son fonctionnement : - -- un quartz (généralement 16 MHz) avec ses deux condensateurs associés, -- une résistance de pull-up sur la broche `RESET`, -- les condensateurs de découplage pour l'alimentation. - -Pour faciliter l'usage, monter le microcontrôleur sur un support DIP (support tulipe) : cela permet de le retirer aisément pour le reprogrammer sur une carte Arduino. - -### 4.2 Bonnes pratiques supplémentaires (bonus à vérifier) - -#### 11. Découplage des alimentations - -Chaque circuit intégré doit posséder un condensateur de découplage (typiquement 100 nF) placé au plus près de ses broches `VCC` et `GND`. Cela absorbe les variations rapides de courant, stabilise la tension et évite les comportements aléatoires difficiles à diagnostiquer. Pratique particulièrement importante pour les microcontrôleurs et les circuits logiques rapides. - -#### 12. Plan de masse (GND) - -Plutôt que de relier la masse uniquement par des pistes fines, utiliser une zone de cuivre continue. Cela réduit les interférences électromagnétiques, améliore le retour de courant et simplifie le routage. - -Dans le cas d'une gravure CNC, cette pratique est facilement réalisable : le plan de masse correspond au reste de cuivre non gravé, isolé autour des pistes et pastilles. Dans KiCad, on peut remplir la carte avec un *copper pour* (zone cuivrée) affectée à `GND` et relier tous les points de masse. - -#### 13. Boucle de courant et retour de masse - -Un signal électrique forme toujours une boucle complète : aller + retour. Si le chemin de retour n'est pas proche de la piste du signal, le circuit peut capter ou émettre du bruit. Toujours garder un retour de masse continu et proche pour tous les signaux, en particulier les signaux rapides ou sensibles. - -#### 14. Largeur des pistes adaptée au courant - -Toutes les pistes ne doivent pas avoir la même largeur : - -- les signaux logiques peuvent passer sur des pistes fines, -- les pistes d'alimentation et celles transportant un courant important doivent être plus larges pour éviter surchauffe, chute de tension ou destruction de la piste. - -Il existe des calculateurs en ligne pour déterminer la largeur adaptée selon le courant et l'épaisseur du cuivre. - -#### 15. Points de test pour le débogage - -Prévoir sur le PCB des points de test accessibles pour mesurer rapidement la tension d'alimentation, vérifier les signaux critiques et suivre les lignes de communication importantes. - -Concrètement, ce sont de petites pastilles ou trous métallisés sur lesquels on peut poser la sonde d'un multimètre ou d'un oscilloscope. Cela facilite le dépannage sans avoir à dessouder des composants. - -#### 16. Dissipation thermique - -Certains composants génèrent de la chaleur (régulateurs de tension, transistors de puissance). Pour éviter la surchauffe et préserver la fiabilité du circuit, prévoir une surface de cuivre suffisante pour dissiper cette chaleur : - -- pistes plus larges connectées aux broches concernées, -- raccordement de ces broches à des zones de cuivre étendues qui agissent comme dissipateurs thermiques. - -L'objectif est d'offrir un chemin efficace d'évacuation de la chaleur vers le PCB. - -#### 17. Séparation des alimentations - -Si le circuit comporte des parties analogiques, numériques et de puissance, séparer les plans ou pistes d'alimentation pour chaque domaine. Par exemple, les moteurs et autres charges fortes peuvent disposer de leur propre piste, tandis que la logique numérique et l'analogique sensible utilisent des pistes ou zones distinctes. - -Même si toutes les alimentations proviennent de la même source, cette séparation physique sur le PCB limite les interférences et améliore la stabilité du circuit. - ---- - -## 5. Application au projet - -### 5.1 Processus itératif (retour d'expérience) - -#### Conception du PCB - -**#1 — Listing des composants** - -Inventorier l'ensemble des composants nécessaires. - -**#2 — Premiers choix de conception** - -- forme globale du PCB, -- composants accessibles ou non, -- répartition face supérieure / face inférieure, -- type d'alimentation (ne pas oublier la batterie !). - -**#3 — Test de positionnement et d'implantation réelle** *(si possible)* - -- repérer les conflits potentiels (ponts notamment), -- prendre les mesures critiques, -- définir la forme et la taille du PCB. - -**#4 — Schématisation sous KiCad** - -> 💡 Travailler si possible sur un double écran. - -- positionner et anticiper a minima l'implantation des éléments ; -- l'objectif n'est pas nécessairement de produire un schéma facilement lisible, mais un schéma exploitable pour le routage ; -- éviter au maximum les croisements ; -- relier directement les composants à la broche source (ne pas chercher à les relier entre eux dans un premier temps) ; -- si besoin, utiliser l'empreinte d'un autre composant (exemple : une batterie peut être représentée par l'empreinte d'une résistance). - -À explorer : sous KiCad, les broches `GND` d'un Arduino ne sont pas reliées entre elles. Affecter un `GND` symbolique à chacune via des labels. - -**#5 — Routage sous KiCad (éditeur de PCB)** - -Dernier moment pour vérifier les empreintes — vérifier notamment que le pas est bien un multiple de 2,54 mm. - -> ⚠️ Après création des pistes, déplacer un composant rompt les connexions. Implanter donc précisément les composants dès le départ (au besoin, double-clic + saisie des coordonnées). - -Pour Arduino : supprimer si nécessaire les limites de la carte. - -- imaginer les premiers regroupements de pistes (vrai aussi pour la masse) et les ajuster progressivement sur le schéma ; -- éviter les **prisons** (deux broches éloignées reliées par une boucle qui bloque l'accès aux autres broches) → privilégier les pistes en parallèle ; -- pour le passage des pistes, modifier les empreintes si nécessaire (par exemple suppression d'un perçage) : *double-clic sur l'empreinte → Éditer l'empreinte → Créer une nouvelle bibliothèque personnalisée (la placer en favoris) → la modifier puis enregistrer sous cette nouvelle bibliothèque* ; -- garder en tête qu'il est possible de faire passer des pistes **sous** les composants ; -- dans certains cas, créer des ponts filaires (parfois inévitable). - -> **Important** : définir la couche `Edge.Cuts` (contour du PCB). - -**#6 — Réaffectation des broches** - -Objectif : faciliter le routage. - -- veiller à la capacité de chaque broche ; -- bon à savoir : sur Arduino, les broches analogiques peuvent être réaffectées en numérique ; -- noter toutes les modifications pour adapter le code en conséquence. - -**#7 — Modification du code** - -Reporter les réaffectations de broches dans le code source. - -**#8 — Nouveau prototypage** *(facultatif)* - -#### Préparation des fichiers pour l'usinage - -**#9 — Export des fichiers Gerber et Excellon** - -Exporter a minima : `B.Cu` + `Edge.Cuts` + `.drl`. - -**#10 — Traitement dans FlatCam** - -Génération des fichiers SVG. - -**#11 — Traitement dans Inkscape** *(facultatif)* - -Fusionner les « combos », supprimer les contours superflus. - -### 5.2 Liste des équipements et positionnement - -- Shield Arduino custom avec PCB **débordant du form factor** standard. -- L'écran déborde de **8 mm minimum vers le haut** ; les broches sont à **4 mm minimum** du bord de la carte. -- **Pile 9 V** pour alimentation sur `Vin` (anticiper l'emplacement d'un futur interrupteur d'alimentation). Branchement filaire sur le PCB via une cosse de raccordement, à droite des broches de l'écran. -- **Potentiomètre de contraste** : utile uniquement pour la mise au point, pas besoin d'être accessible une fois la carte dans son boîtier. Position classique conservée, mais il sera caché sous le capot. -- **Port USB de l'Arduino** : accessible pour reprogrammation. -- **Bouton reset** : ajout d'un bouton dédié pour relancer le jeu (ou aménager la forme du PCB pour conserver l'accès au bouton reset d'origine de l'Arduino). -- **Buzzer** : monté en face arrière du PCB. Attention à : - - ce que la position des mains lors du jeu ne bouche pas le son, - - ce qu'il ne touche pas / ne court-circuite pas les broches en sous-face de l'écran (le centrer sur la hauteur, l'aligner à gauche sur le bord du module écran). - -#### Dimensions du PCB - -| | Hauteur | Largeur | -|---|---|---| -| Idéal | 78 mm | 80 mm | -| Plaque à graver disponible | 70 mm | 100 mm | -| **PCB final retenu** | **65 mm** | **80 mm** | - -### 5.3 Schéma KiCad — réaffectation des broches - -#### Boutons - -| Bouton | Broche Arduino | Rôle | -|---|---|---| -| SW1 | D12 (+ GND) | Bouton **haut** | -| SW2 | D13 (broche 3 du SW2 sur GND, « 14 » à côté du 13) | Bouton **bas** | -| SW3 | A0 (broches 1 et 3) + GND (broches 2 et 4, à côté du 5 V) | Bouton **tir** | - -#### Buzzer - -- Broche **D11** + GND. - -#### Écran LCD - -| Broche LCD | Broche Arduino | -|---|---| -| D7 | D10 | -| D6 | D9 | -| D5 | D8 | -| D4 | D7 | -| E | D5 | -| RS | D6 | -| RW | GND | - -#### Masses - -`VSS` du LCD, GND du buzzer, GND de SW1 et GND de SW2 sont tous reliés à la masse commune. - -> ⚠️ **Important** : sur l'écran LCD, il faudra **souder un pont** entre `R/W` et `VSS` pour relier `R/W` à la masse. - ---- - -## 6. Tutoriel : préparation pour la CNC - -### 6.1 Création d'un PCB à la CNC (gravure « à l'anglaise ») - -**Logiciels utilisés :** - -- KiCad — version 9.0 -- FlatCam — version bêta 8.994 -- Inkscape -- Easel (pilotage de la CNC) - -### 6.2 Étapes dans KiCad - -#### Règles de conception → contraintes - -Vérifier : - -- le **diamètre des pads** : 3 mm (double-clic sur les pads → *Propriétés*) ; -- la **distance entre pads** : 2,54 mm. - -> Proposition : passer à 2,34 mm (= 2,54 − 2 × 0,1) pour ménager une marge ? - -#### Ajouter le contour du circuit - -- sélectionner la couche `Edge.Cuts`, -- utiliser par exemple l'outil **Rectangle**, clic simple. - -#### Export des fichiers de fabrication - -*Fichier → Fichiers de fabrication → Gerber → Tracer*, puis créer les **fichiers de perçage** (Excellon). - -> ⚠️ Ne pas oublier d'exporter la couche `Edge.Cuts`. - -### 6.3 FlatCam - -**Téléchargement** : - -> En date du 01/04/2026, la version 8.994 est disponible avec un `.exe` pour Windows. - -#### 1. Ouvrir FlatCam - -#### 2. Charger les fichiers - -- **Open Gerber** pour le fichier de la face cuivre + `Edge.Cuts`, -- **Open Excellon** pour les fichiers de perçage : - - `PTH` → perçage des composants, - - `NPTH` → autres perçages. - -#### 3. Convertir Gerber et Excellon en géométries - -- sélectionner les fichiers, -- *Edit → Conversion → Convert Any to Geo*. - -#### 4. Joindre les contours aux géométries - -**Pour les pistes** : sélectionner `B.Cu` + `Edge.Cuts` → *Edit → Join Objects → Join Geo / Gerber / Excellon*. Cela génère une nouvelle géométrie « Combo… ». - -**Pour les perçages** : même opération avec `PTH.drl` + `Edge.Cuts`. - -> ⚠️ Il n'est *a priori* pas possible de joindre efficacement les géométries `PTH.drl` et `B.Cu` directement : le fichier de pistes efface / écrase le fichier de perçage. - -#### Variante (ancienne version) - -Ajouter manuellement une forme contour sur toutes les géométries : - -1. sélectionner la géométrie → *Properties → Geometry Editor* ; -2. choisir l'outil souhaité (par exemple **Rectangle**) ; -3. dessiner le contour. - -Toutes les géométries doivent partager le même contour pour garantir leur alignement par la suite. - -#### 5. Exporter les géométries « Combo » en SVG - -Sélectionner chaque géométrie puis *File → Export → SVG* (autant de fichiers SVG que de géométries). - -### 6.4 Inkscape *(facultatif)* - -1. Ouvrir les fichiers SVG « Combo » et faire copier / coller. -2. Appliquer un **effet miroir** si nécessaire (réfléchir au résultat attendu). -3. Séparément, **dégrouper** puis **unir** les pistes d'un côté, les perçages de l'autre. -4. Regrouper chacun avec son contour respectif. -5. Aligner les deux fichiers via leurs contours. -6. Supprimer les contours superflus pour n'en conserver qu'un seul. -7. Enregistrer le tout dans un seul fichier SVG final. - -> Option : conserver 2 contours est possible mais sans réel intérêt. - -### 6.5 Easel — usinage CNC - -#### Préparation du projet - -1. *Nouveau projet* → donner un nom au projet (cliquer sur *Untitled*). -2. Régler l'unité en **millimètres**. -3. Spécifier le **matériau PCB** et ses dimensions — **surtout l'épaisseur** (PCB du Lab = **1,4 mm**). - -> ⚠️ Appliquer un **miroir** si nécessaire (réfléchir au résultat). -> -> Vérifier la bonne superposition des SVG si besoin. - -#### Gravure des pistes - -> ⚠️ Vérifier de nouveau l'effet miroir. -> -> Important : **monter la fraise** et faire un **homing**. - -**Fraise utilisée** : V-bits → *Other* → **pointe javelot 30°, 0,125 in (⅛ pouce)**. - -**Cut settings** *(onglet Manual)* : - -| Paramètre | Valeur | -|---|---| -| Feed rate | 60 mm/min | -| Plunge rate | 60 mm/min | -| Depth per pass | 0,05 mm | - -**Import du SVG** : *Project → Import SVG*. Le placer à l'origine via `Ctrl + A` puis position `X = 0`, `Y = 0` (veiller à avoir un remplissage interne sur la couche extérieure, ou équivalent). - -Supprimer le contour et, au besoin, les trous de perçage. Combiner les pistes : `Ctrl + A` puis *Edit → Combine*. - -**Définir la profondeur de passe et le mode** : `Ctrl + A` → *Cut* → `Depth = 0,1 mm` *(à vérifier — proposition : 0,2 mm ?)* → **Cut outside shape path**. - -#### Perçages - -> ⚠️ Vérifier l'effet miroir. -> -> 💡 Préparer le fichier pendant que la fraise refroidit ! - -- monter la fraise et faire un homing ; -- *Probe* → **Use Last XY Zero** ; -- ré-importer le SVG, le placer à `(0, 0)` (ou `Ctrl + Z`), puis supprimer le contour et les pistes ; -- au besoin, supprimer aussi tout reste de contour ou de pistes. - -**Fraise utilisée** : 1/32 in (0,03125 in). - -**Profondeur et mode** : `Ctrl + A` → *Cut* → `Depth = max` (+ ajouter `0,2 mm` via **Add depth**) → **Cut inside shape path**. - -**Cut settings** : - -| Paramètre | Valeur | -|---|---| -| Feed rate | 300 mm/min | -| Plunge rate | 100 mm/min | -| Depth per pass | 0,4 mm | - -#### Découpe du contour - -- **Work Zero** : *Manual* → **Use Last Position** ; -- ré-importer le SVG à `(0, 0)`, supprimer perçages et pistes (ou tracer directement le contour avec les outils d'Easel). - -**Fraise utilisée** : 1/32 in. - -**Profondeur et mode** : `Ctrl + A` → *Cut* → `Depth = max` (+ `0,2 mm` supplémentaires) → **Cut outside shape path**. - -> Sans les **tabs** ? - -**Cut settings** : - -| Paramètre | Valeur | -|---|---| -| Feed rate | 300 mm/min | -| Plunge rate | 100 mm/min | -| Depth per pass | 0,4 mm | - -#### Fixation de la plaque PCB - -> 💡 Conseil : travailler **en bas à gauche** de la fraiseuse. - ---- - -## 7. Et après ? - -À définir : exposition, autres ateliers, création d'un club, prolongements logiciels et matériels… - ---- - -## Notes éditoriales (à traiter) - -- Harmoniser / reprendre la cohérence des notes encore en suspens. -- Vérifier les points marqués `?` (notamment indicateurs de non-connexion, valeur de profondeur à 0,1 ou 0,2 mm, pas à 2,34 ou 2,54 mm). -- Compléter la section « Et après ? ». -- Réinsérer les illustrations du document original aux emplacements pertinents (KiCad, FlatCam, Easel). \ No newline at end of file diff --git a/ab80312d-1483-4187-bbe6-54bcaed793a9/files/20201207-233302.png b/ab80312d-1483-4187-bbe6-54bcaed793a9/files/20201207-233302.png deleted file mode 100644 index ec77278..0000000 Binary files a/ab80312d-1483-4187-bbe6-54bcaed793a9/files/20201207-233302.png and /dev/null differ diff --git a/ab80312d-1483-4187-bbe6-54bcaed793a9/files/20201209-085932.png b/ab80312d-1483-4187-bbe6-54bcaed793a9/files/20201209-085932.png deleted file mode 100644 index c3766f6..0000000 Binary files a/ab80312d-1483-4187-bbe6-54bcaed793a9/files/20201209-085932.png and /dev/null differ diff --git a/ab80312d-1483-4187-bbe6-54bcaed793a9/files/20201212-183454.png b/ab80312d-1483-4187-bbe6-54bcaed793a9/files/20201212-183454.png deleted file mode 100644 index 058932f..0000000 Binary files a/ab80312d-1483-4187-bbe6-54bcaed793a9/files/20201212-183454.png and /dev/null differ diff --git a/ab80312d-1483-4187-bbe6-54bcaed793a9/files/20220128-103802.png b/ab80312d-1483-4187-bbe6-54bcaed793a9/files/20220128-103802.png deleted file mode 100644 index efb0771..0000000 Binary files a/ab80312d-1483-4187-bbe6-54bcaed793a9/files/20220128-103802.png and /dev/null differ diff --git a/ab80312d-1483-4187-bbe6-54bcaed793a9/files/20220128-110155.png b/ab80312d-1483-4187-bbe6-54bcaed793a9/files/20220128-110155.png deleted file mode 100644 index f661758..0000000 Binary files a/ab80312d-1483-4187-bbe6-54bcaed793a9/files/20220128-110155.png and /dev/null differ diff --git a/ab80312d-1483-4187-bbe6-54bcaed793a9/files/esp01.pdf b/ab80312d-1483-4187-bbe6-54bcaed793a9/files/esp01.pdf deleted file mode 100644 index 4483d76..0000000 Binary files a/ab80312d-1483-4187-bbe6-54bcaed793a9/files/esp01.pdf and /dev/null differ diff --git a/ab80312d-1483-4187-bbe6-54bcaed793a9/index.md b/ab80312d-1483-4187-bbe6-54bcaed793a9/index.md deleted file mode 100644 index bd222c1..0000000 --- a/ab80312d-1483-4187-bbe6-54bcaed793a9/index.md +++ /dev/null @@ -1,144 +0,0 @@ -# ESP-01 : présentation et premiers pas - -![Image d'un ESP-01](20220128-103802.png) - -## Présentation - -L'[ESP-01](https://amzn.to/3oAwIaR) est un module Wi-Fi compact construit autour du microcontrôleur **ESP8266EX** d'Espressif. Sur un PCB d'environ 24 × 14 mm, il rassemble : - -- un microcontrôleur **ESP8266EX** (cœur Tensilica L106 32 bits cadencé à 80/160 MHz) ; -- une mémoire **SPI Flash** externe (généralement **1 Mo** sur les versions courantes, parfois jusqu'à 4 Mo) ; -- une **antenne PCB** d'environ 2 dBi, gravée directement sur le circuit imprimé ; -- un **connecteur 2 × 4 broches** au pas de 2,54 mm. - -> Lien d'achat : [ESP-01 basé sur ESP8266](https://amzn.to/3oAwIaR) - -### ESP8266EX vs ESP-01 : ne pas confondre - -Une confusion fréquente porte sur la dénomination du produit : - -- **ESP8266EX** désigne le **circuit intégré** (le SoC) produit par Espressif. C'est la puce qui contient le processeur, la radio Wi-Fi, la RAM et les périphériques. -- **ESP-01** désigne un **module** : un petit PCB qui embarque l'ESP8266EX, sa mémoire flash, son antenne et un connecteur d'accès. Il est conçu et vendu par AI-Thinker, pas par Espressif. - -Plusieurs autres modules existent autour du même SoC (ESP-02, ESP-05, ESP-07, ESP-12, etc.). Ils diffèrent par le nombre de broches exposées, la taille de la flash, le type d'antenne et le facteur de forme. L'ESP-01 est le plus simple et le plus économique de la famille, mais aussi le plus contraint en nombre d'entrées/sorties accessibles. - -### Pourquoi un adaptateur USB est nécessaire - -L'ESP-01 n'expose qu'un port série UART à 3,3 V — pas d'interface USB, pas de régulateur, pas de bouton. Pour le programmer ou dialoguer avec lui depuis un ordinateur, il faut un **adaptateur USB-série** capable de : - -- convertir les niveaux USB en niveaux série logiques ; -- fournir une alimentation **3,3 V** stable (l'ESP-01 ne tolère pas le 5 V). - -Les adaptateurs courants utilisent une puce **CH340**, **CP2102** ou **FT232**. Certains sont des dongles spécialement formés pour accueillir l'ESP-01 directement sur leur connecteur. - -> Attention : on lit parfois la référence « CH360 ». Il s'agit en réalité de la **CH340** (de WCH). Aucune puce « CH360 » n'existe dans cette gamme. - -## Brochage de l'ESP-01 - -![Brochage de l'ESP-01](20220128-110155.png) - -Le connecteur 8 broches est directement câblé sur les pins de l'ESP8266EX : - -| Broche | Nom | Rôle | -|---|---|---| -| 1 | **GND** | Masse | -| 2 | **GPIO2** | E/S générique. Doit être à l'état haut (ou flottante) au démarrage pour booter normalement. | -| 3 | **GPIO0** | E/S générique. **Forcée à GND au démarrage** pour entrer en mode programmation (flash). Laissée libre, elle permet un boot normal. | -| 4 | **RX** | Réception série (UART0). À relier au TX de l'adaptateur USB-série. | -| 5 | **TX** | Émission série (UART0). À relier au RX de l'adaptateur USB-série. | -| 6 | **CH_PD** (aussi noté **EN**) | Chip enable. Doit être maintenue à **3,3 V** pour que le module fonctionne. | -| 7 | **RST** | Reset, actif à l'état bas. | -| 8 | **VCC** | Alimentation **3,3 V** uniquement. | - -Points de vigilance : - -- l'alimentation **3,3 V** est impérative ; le 5 V détruit le SoC instantanément ; -- les pics de courant en émission peuvent atteindre **300 mA**. Une alimentation sous-dimensionnée provoque des resets aléatoires ; -- les niveaux logiques sont également à 3,3 V : interfacer un Arduino Uno (5 V) sans pont diviseur ou level shifter peut endommager l'ESP. - -### Branchement avec un adaptateur USB-CH340 - -![ESP-01 avec adaptateur USB CH340](20201207-233302.png) - -Une fois l'ESP-01 enfiché dans l'adaptateur, ce dernier joue le rôle de pont entre le port USB de l'ordinateur et l'UART de l'ESP8266EX : - -- l'ordinateur voit un port série virtuel (`/dev/ttyUSB0` sous Linux, `COMx` sous Windows) ; -- l'adaptateur fournit le 3,3 V à l'ESP-01 et relaie les octets dans les deux sens ; -- la plupart des adaptateurs d'entrée de gamme **ne gèrent pas le passage en mode flash** : voir l'article dédié à la [modification de l'adaptateur USB vers ESP-01](https://varlog.a5l.fr/post/adaptateur-usb-vers-esp-01-activer-le-mode-programmation) pour ajouter un jumper GPIO0 / GND. - -## Datasheet - -La documentation officielle est très succincte pour ce module. Les deux références utiles sont : - -- la **datasheet de l'ESP8266EX** (Espressif) — caractéristiques électriques, brochage du SoC, consommation : -- la **datasheet AI-Thinker de l'ESP-01** (sommaire) — dimensions et brochage du module : disponible sur le mirroir du fabricant. - -![Aperçu de la datasheet ESP-01](20201209-085932.png) - -Le fichier joint à cet article reprend la version condensée diffusée par AI-Thinker : [esp01.pdf](esp01.pdf) - -## Configurer l'IDE Arduino - -![Paramétrage de l'IDE Arduino](20201212-183454.png) - -L'IDE Arduino ne sait pas, par défaut, compiler pour l'ESP8266. Il faut au préalable installer le **board package** correspondant. - -### 1. Ajouter l'URL du gestionnaire de cartes - -Dans `Fichier → Préférences`, ajouter dans **URL de gestionnaire de cartes supplémentaires** : - -``` -https://arduino.esp8266.com/stable/package_esp8266com_index.json -``` - -### 2. Installer le support ESP8266 - -Ouvrir `Outils → Type de carte → Gestionnaire de cartes`, rechercher **esp8266** et installer le paquet *esp8266 by ESP8266 Community*. - -### 3. Sélectionner la carte et les paramètres - -Pour un ESP-01, choisir `Outils → Type de carte → Generic ESP8266 Module`, puis vérifier les paramètres suivants : - -| Paramètre | Valeur recommandée pour ESP-01 | -|---|---| -| **Flash Size** | `1MB (FS:64KB OTA:~470KB)` pour les ESP-01 noirs ; `512KB` pour les anciens ESP-01 bleus | -| **Flash Mode** | `DOUT` (compatible avec la majorité des modules ; éviter `QIO` qui plante au boot sur certains lots) | -| **Flash Frequency** | `40 MHz` | -| **CPU Frequency** | `80 MHz` | -| **Upload Speed** | `115200` baud (vitesse fiable ; possible de monter à 230400 ou 460800 si l'adaptateur suit) | -| **Reset Method** | `dtr (aka nodemcu)` si l'adaptateur câble DTR ; sinon `no dtr (aka ck)` (reset manuel) | -| **Port** | port série de l'adaptateur (`/dev/ttyUSB0`, `COM3`…) | - -En pratique, sur un ESP-01 récent acheté avec un adaptateur basique, seul le **port série** doit être ajusté. Les valeurs par défaut conviennent. - -### 4. Premier téléversement - -Un programme de test minimal pour valider la chaîne complète : - -```cpp -void setup() { - Serial.begin(115200); - pinMode(LED_BUILTIN, OUTPUT); -} - -void loop() { - digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN)); - Serial.println("Hello ESP-01"); - delay(1000); -} -``` - -Avant de lancer le téléversement : - -1. placer l'ESP-01 en **mode flash** (GPIO0 à GND au démarrage) ; -2. brancher l'adaptateur sur le PC ; -3. lancer le téléversement depuis l'IDE Arduino. - -Si l'opération échoue avec un message du type `Failed to connect to ESP8266: Timed out waiting for packet header`, c'est que la mise en mode flash n'a pas été effective. Voir là encore l'article sur la [modification de l'adaptateur](https://varlog.a5l.fr/post/adaptateur-usb-vers-esp-01-activer-le-mode-programmation). - -## Pour aller plus loin - -- [Adaptateur USB vers ESP-01 : activer le mode programmation](https://varlog.a5l.fr/post/adaptateur-usb-vers-esp-01-activer-le-mode-programmation) -- [ESP8266 : commandes AT](https://varlog.a5l.fr/post/esp8266-commandes-at) -- [Réinitialisation d'un ESP-01 : restauration du firmware AT](https://varlog.a5l.fr/post/esp8266ex-restore-commandes-at) -``` diff --git a/ab80312d-1483-4187-bbe6-54bcaed793a9/meta.json b/ab80312d-1483-4187-bbe6-54bcaed793a9/meta.json deleted file mode 100644 index a6e2d98..0000000 --- a/ab80312d-1483-4187-bbe6-54bcaed793a9/meta.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "uuid": "ab80312d-1483-4187-bbe6-54bcaed793a9", - "slug": "specifications-esp-01", - "title": "ESP-01 : présentation et premiers pas", - "author": "cedric@abonnel.fr", - "published": true, - "published_at": "2022-01-28 10:03", - "created_at": "2022-01-28 10:03:16", - "updated_at": "2026-05-13 18:26:30", - "revisions": [ - { - "n": 1, - "date": "2026-05-13 18:26:30", - "comment": "Contenu modifié", - "title": "ESP-01 : présentation et premiers pas" - } - ], - "cover": "", - "files_meta": { - "20201207-233302.png": { - "author": "", - "source_url": "" - }, - "20201209-085932.png": { - "author": "", - "source_url": "" - }, - "20201212-183454.png": { - "author": "", - "source_url": "" - }, - "20220128-103802.png": { - "author": "", - "source_url": "" - }, - "20220128-110155.png": { - "author": "", - "source_url": "" - }, - "esp01.pdf": { - "author": "", - "source_url": "" - } - }, - "external_links": [], - "seo_title": "", - "seo_description": "", - "og_image": "", - "category": "Électronique" -} diff --git a/ab80312d-1483-4187-bbe6-54bcaed793a9/revisions/0001.md b/ab80312d-1483-4187-bbe6-54bcaed793a9/revisions/0001.md deleted file mode 100644 index 5653e29..0000000 --- a/ab80312d-1483-4187-bbe6-54bcaed793a9/revisions/0001.md +++ /dev/null @@ -1,142 +0,0 @@ -![Image d'un ESP-01](20220128-103802.png) - -## Présentation - -L'[ESP-01](https://amzn.to/3oAwIaR) est un module Wi-Fi compact construit autour du microcontrôleur **ESP8266EX** d'Espressif. Sur un PCB d'environ 24 × 14 mm, il rassemble : - -- un microcontrôleur **ESP8266EX** (cœur Tensilica L106 32 bits cadencé à 80/160 MHz) ; -- une mémoire **SPI Flash** externe (généralement **1 Mo** sur les versions courantes, parfois jusqu'à 4 Mo) ; -- une **antenne PCB** d'environ 2 dBi, gravée directement sur le circuit imprimé ; -- un **connecteur 2 × 4 broches** au pas de 2,54 mm. - -> Lien d'achat : [ESP-01 basé sur ESP8266](https://amzn.to/3oAwIaR) - -### ESP8266EX vs ESP-01 : ne pas confondre - -Une confusion fréquente porte sur la dénomination du produit : - -- **ESP8266EX** désigne le **circuit intégré** (le SoC) produit par Espressif. C'est la puce qui contient le processeur, la radio Wi-Fi, la RAM et les périphériques. -- **ESP-01** désigne un **module** : un petit PCB qui embarque l'ESP8266EX, sa mémoire flash, son antenne et un connecteur d'accès. Il est conçu et vendu par AI-Thinker, pas par Espressif. - -Plusieurs autres modules existent autour du même SoC (ESP-02, ESP-05, ESP-07, ESP-12, etc.). Ils diffèrent par le nombre de broches exposées, la taille de la flash, le type d'antenne et le facteur de forme. L'ESP-01 est le plus simple et le plus économique de la famille, mais aussi le plus contraint en nombre d'entrées/sorties accessibles. - -### Pourquoi un adaptateur USB est nécessaire - -L'ESP-01 n'expose qu'un port série UART à 3,3 V — pas d'interface USB, pas de régulateur, pas de bouton. Pour le programmer ou dialoguer avec lui depuis un ordinateur, il faut un **adaptateur USB-série** capable de : - -- convertir les niveaux USB en niveaux série logiques ; -- fournir une alimentation **3,3 V** stable (l'ESP-01 ne tolère pas le 5 V). - -Les adaptateurs courants utilisent une puce **CH340**, **CP2102** ou **FT232**. Certains sont des dongles spécialement formés pour accueillir l'ESP-01 directement sur leur connecteur. - -> Attention : on lit parfois la référence « CH360 ». Il s'agit en réalité de la **CH340** (de WCH). Aucune puce « CH360 » n'existe dans cette gamme. - -## Brochage de l'ESP-01 - -![Brochage de l'ESP-01](20220128-110155.png) - -Le connecteur 8 broches est directement câblé sur les pins de l'ESP8266EX : - -| Broche | Nom | Rôle | -|---|---|---| -| 1 | **GND** | Masse | -| 2 | **GPIO2** | E/S générique. Doit être à l'état haut (ou flottante) au démarrage pour booter normalement. | -| 3 | **GPIO0** | E/S générique. **Forcée à GND au démarrage** pour entrer en mode programmation (flash). Laissée libre, elle permet un boot normal. | -| 4 | **RX** | Réception série (UART0). À relier au TX de l'adaptateur USB-série. | -| 5 | **TX** | Émission série (UART0). À relier au RX de l'adaptateur USB-série. | -| 6 | **CH_PD** (aussi noté **EN**) | Chip enable. Doit être maintenue à **3,3 V** pour que le module fonctionne. | -| 7 | **RST** | Reset, actif à l'état bas. | -| 8 | **VCC** | Alimentation **3,3 V** uniquement. | - -Points de vigilance : - -- l'alimentation **3,3 V** est impérative ; le 5 V détruit le SoC instantanément ; -- les pics de courant en émission peuvent atteindre **300 mA**. Une alimentation sous-dimensionnée provoque des resets aléatoires ; -- les niveaux logiques sont également à 3,3 V : interfacer un Arduino Uno (5 V) sans pont diviseur ou level shifter peut endommager l'ESP. - -### Branchement avec un adaptateur USB-CH340 - -![ESP-01 avec adaptateur USB CH340](20201207-233302.png) - -Une fois l'ESP-01 enfiché dans l'adaptateur, ce dernier joue le rôle de pont entre le port USB de l'ordinateur et l'UART de l'ESP8266EX : - -- l'ordinateur voit un port série virtuel (`/dev/ttyUSB0` sous Linux, `COMx` sous Windows) ; -- l'adaptateur fournit le 3,3 V à l'ESP-01 et relaie les octets dans les deux sens ; -- la plupart des adaptateurs d'entrée de gamme **ne gèrent pas le passage en mode flash** : voir l'article dédié à la [modification de l'adaptateur USB vers ESP-01](https://varlog.a5l.fr/post/adaptateur-usb-vers-esp-01-activer-le-mode-programmation) pour ajouter un jumper GPIO0 / GND. - -## Datasheet - -La documentation officielle est très succincte pour ce module. Les deux références utiles sont : - -- la **datasheet de l'ESP8266EX** (Espressif) — caractéristiques électriques, brochage du SoC, consommation : -- la **datasheet AI-Thinker de l'ESP-01** (sommaire) — dimensions et brochage du module : disponible sur le mirroir du fabricant. - -![Aperçu de la datasheet ESP-01](20201209-085932.png) - -Le fichier joint à cet article reprend la version condensée diffusée par AI-Thinker : [esp01.pdf](esp01.pdf) - -## Configurer l'IDE Arduino - -![Paramétrage de l'IDE Arduino](20201212-183454.png) - -L'IDE Arduino ne sait pas, par défaut, compiler pour l'ESP8266. Il faut au préalable installer le **board package** correspondant. - -### 1. Ajouter l'URL du gestionnaire de cartes - -Dans `Fichier → Préférences`, ajouter dans **URL de gestionnaire de cartes supplémentaires** : - -``` -https://arduino.esp8266.com/stable/package_esp8266com_index.json -``` - -### 2. Installer le support ESP8266 - -Ouvrir `Outils → Type de carte → Gestionnaire de cartes`, rechercher **esp8266** et installer le paquet *esp8266 by ESP8266 Community*. - -### 3. Sélectionner la carte et les paramètres - -Pour un ESP-01, choisir `Outils → Type de carte → Generic ESP8266 Module`, puis vérifier les paramètres suivants : - -| Paramètre | Valeur recommandée pour ESP-01 | -|---|---| -| **Flash Size** | `1MB (FS:64KB OTA:~470KB)` pour les ESP-01 noirs ; `512KB` pour les anciens ESP-01 bleus | -| **Flash Mode** | `DOUT` (compatible avec la majorité des modules ; éviter `QIO` qui plante au boot sur certains lots) | -| **Flash Frequency** | `40 MHz` | -| **CPU Frequency** | `80 MHz` | -| **Upload Speed** | `115200` baud (vitesse fiable ; possible de monter à 230400 ou 460800 si l'adaptateur suit) | -| **Reset Method** | `dtr (aka nodemcu)` si l'adaptateur câble DTR ; sinon `no dtr (aka ck)` (reset manuel) | -| **Port** | port série de l'adaptateur (`/dev/ttyUSB0`, `COM3`…) | - -En pratique, sur un ESP-01 récent acheté avec un adaptateur basique, seul le **port série** doit être ajusté. Les valeurs par défaut conviennent. - -### 4. Premier téléversement - -Un programme de test minimal pour valider la chaîne complète : - -```cpp -void setup() { - Serial.begin(115200); - pinMode(LED_BUILTIN, OUTPUT); -} - -void loop() { - digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN)); - Serial.println("Hello ESP-01"); - delay(1000); -} -``` - -Avant de lancer le téléversement : - -1. placer l'ESP-01 en **mode flash** (GPIO0 à GND au démarrage) ; -2. brancher l'adaptateur sur le PC ; -3. lancer le téléversement depuis l'IDE Arduino. - -Si l'opération échoue avec un message du type `Failed to connect to ESP8266: Timed out waiting for packet header`, c'est que la mise en mode flash n'a pas été effective. Voir là encore l'article sur la [modification de l'adaptateur](https://varlog.a5l.fr/post/adaptateur-usb-vers-esp-01-activer-le-mode-programmation). - -## Pour aller plus loin - -- [Adaptateur USB vers ESP-01 : activer le mode programmation](https://varlog.a5l.fr/post/adaptateur-usb-vers-esp-01-activer-le-mode-programmation) -- [ESP8266 : commandes AT](https://varlog.a5l.fr/post/esp8266-commandes-at) -- [Réinitialisation d'un ESP-01 : restauration du firmware AT](https://varlog.a5l.fr/post/esp8266ex-restore-commandes-at) -``` diff --git a/aba42f8a-41ca-4c5f-9a9d-ba3760e10d0f/files/dummy.png b/aba42f8a-41ca-4c5f-9a9d-ba3760e10d0f/files/dummy.png deleted file mode 100644 index 58bb881..0000000 Binary files a/aba42f8a-41ca-4c5f-9a9d-ba3760e10d0f/files/dummy.png and /dev/null differ diff --git a/aba42f8a-41ca-4c5f-9a9d-ba3760e10d0f/index.md b/aba42f8a-41ca-4c5f-9a9d-ba3760e10d0f/index.md deleted file mode 100644 index 222e1a1..0000000 --- a/aba42f8a-41ca-4c5f-9a9d-ba3760e10d0f/index.md +++ /dev/null @@ -1,57 +0,0 @@ -# esptool - -![esptool](dummy.png) - -**esptool** est un outil en ligne de commande développé par Espressif (le fabricant des puces ESP32, ESP8266, etc.) qui sert à flasher, programmer et interagir avec les microcontrôleurs ESP via leur port série (UART). - -- Espressif recommande d’installer `esptool` via `pip` si possible. [^note: https://docs.espressif.com/projects/esptool/en/latest/esp32/installation.html] -- Ils recommandent fortement d’utiliser un **virtual environment (venv)** pour éviter de polluer l’environnement Python système. - -# Installation -1. Installer le package `python3-pip` et `python3-venv` si ce n’est pas déjà fait : - -```BASH -sudo apt update -sudo apt install python3-pip python3-venv -``` - -2. Crée un `venv` dans votre dossier (par exemple `esptoolenv`) : - -```BASH -python3 -m venv ~/esptoolenv -``` - -# Utilisation -1. Activer le `venv` : - -```BASH -source ~/esptoolenv/bin/activate -``` - -2. Installer `esptool` dans le `venv` : - -(si vous l'avez effectué dans une utilisation précédente, inutile de le refaire maintenant). - -```BASH -pip install esptool -``` - -3. Vérifier que ça marche : - -```BASH -esptool version -``` - -Ce qui donne le résultat suivant : - -```BASH -(esptoolenv) cedric41a@cedric41a-MS-7C56:~$ esptool version -esptool v5.1.0 -5.1.0 -``` - -4. Quand vous avez fini d’utiliser `esptool`, vous pouvez désactiver le `venv` : - -```BASH -deactivate -``` \ No newline at end of file diff --git a/aba42f8a-41ca-4c5f-9a9d-ba3760e10d0f/meta.json b/aba42f8a-41ca-4c5f-9a9d-ba3760e10d0f/meta.json deleted file mode 100644 index 6652b36..0000000 --- a/aba42f8a-41ca-4c5f-9a9d-ba3760e10d0f/meta.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "uuid": "aba42f8a-41ca-4c5f-9a9d-ba3760e10d0f", - "slug": "esptool", - "title": "esptool", - "author": "cedric@abonnel.fr", - "published": true, - "published_at": "2025-11-19 11:43:45", - "created_at": "2025-11-19 11:43:45", - "updated_at": "2025-11-19 11:43:45", - "revisions": [], - "cover": "", - "files_meta": [], - "external_links": [], - "seo_title": "", - "seo_description": "", - "og_image": "", - "category": "Électronique" -} diff --git a/ac8515ca-400e-43dc-b5bb-08aa5e6689b5/files/dummy.png b/ac8515ca-400e-43dc-b5bb-08aa5e6689b5/files/dummy.png deleted file mode 100644 index 58bb881..0000000 Binary files a/ac8515ca-400e-43dc-b5bb-08aa5e6689b5/files/dummy.png and /dev/null differ diff --git a/ac8515ca-400e-43dc-b5bb-08aa5e6689b5/index.md b/ac8515ca-400e-43dc-b5bb-08aa5e6689b5/index.md deleted file mode 100644 index dfc9e8f..0000000 --- a/ac8515ca-400e-43dc-b5bb-08aa5e6689b5/index.md +++ /dev/null @@ -1,157 +0,0 @@ -# Premier programme ESP-01 : afficher les informations système - -## Objectif - -Le sketch ci-dessous est un petit utilitaire de diagnostic : une fois téléversé sur un ESP-01, il publie toutes les dix secondes sur la console série un état détaillé du microcontrôleur — identifiant, fréquence, tension d'alimentation, version du SDK — ainsi qu'un état de la mémoire flash. C'est l'équivalent d'un `uname -a` couplé à un `df` pour l'ESP8266. - -Cet exemple sert deux objectifs : - -- **valider la chaîne complète** (adaptateur, mode flash, IDE, board package) en réussissant un premier téléversement ; -- **identifier précisément le module** en main : la flash réelle ne correspond pas toujours à ce qui est annoncé par le vendeur, et il peut être utile de le constater avant d'aller plus loin. - -> **Prérequis** : un ESP-01 programmable depuis l'IDE Arduino. Voir les articles dédiés à l'[adaptateur USB-série](https://varlog.a5l.fr/post/adaptateur-usb-vers-esp-01-activer-le-mode-programmation) et à la [configuration de l'IDE pour l'ESP-01](https://varlog.a5l.fr/post/esp-01-presentation-premiers-pas). - -## Le programme - -```cpp -// Demande au SDK de connecter l'ADC interne à la mesure de VCC -// plutôt qu'à la broche TOUT. Doit être déclaré en dehors de setup() -// pour être pris en compte au démarrage. -ADC_MODE(ADC_VCC); - -void setup() { - Serial.begin(115200); - delay(100); // petit délai pour stabiliser l'UART -} - -void loop() { - /* ----- ESP8266EX ----- */ - Serial.println("INFO ESP8266EX"); - - Serial.printf("Numéro de série de l'ESP8266EX .....: %u\n", - ESP.getChipId()); - - float frequenceCpu = float(ESP.getCpuFreqMHz()); - Serial.printf("Fréquence du CPU ...................: %4.1f MHz\n", - frequenceCpu); - - // getVcc() renvoie la tension en millivolts - float vcc = float(ESP.getVcc()) / 1000.0; - Serial.printf("Alimentation .......................: %4.2f V\n", vcc); - - // La version du core Arduino-ESP8266 contient des underscores - // (ex: 2_7_4) ; on les remplace par des points pour la lisibilité. - String coreVersion = ESP.getCoreVersion(); - coreVersion.replace('_', '.'); - Serial.print("Version du gestionnaire de carte ...: "); - Serial.println(coreVersion); - - Serial.printf("Version du SDK .....................: %s\n\n", - ESP.getSdkVersion()); - - /* ----- Mémoire flash ----- */ - Serial.println("INFO FLASH"); - - Serial.printf("Numéro de série du chip ............: %u\n", - ESP.getFlashChipId()); - - float frequenceFlash = float(ESP.getFlashChipSpeed()) / 1000000.0; - Serial.printf("Fréquence ..........................: %4.1f MHz\n", - frequenceFlash); - - Serial.printf("Capacité effective .................: %u octets\n", - ESP.getFlashChipRealSize()); - Serial.printf("Capacité paramétrée dans l'EDI .....: %u octets\n", - ESP.getFlashChipSize()); - - Serial.printf("Taille du sketch ...................: %u octets\n", - ESP.getSketchSize()); - Serial.printf("Mémoire disponible .................: %u octets\n\n\n", - ESP.getFreeSketchSpace()); - - delay(10000); -} -``` - -## Téléverser et lire la sortie - -1. Sélectionner `Outils → Type de carte → Generic ESP8266 Module`. -2. Régler le port série sur celui de l'adaptateur. -3. Placer l'ESP-01 en mode flash (jumper GPIO0 ↔ GND), téléverser, retirer le jumper, redémarrer. -4. Ouvrir le moniteur série à **115200 bauds**, fin de ligne **NL & CR**. - -Sortie attendue (les valeurs varient d'un module à l'autre) : - -``` -INFO ESP8266EX -Numéro de série de l'ESP8266EX .....: 10106374 -Fréquence du CPU ...................: 80.0 MHz -Alimentation .......................: 3.47 V -Version du gestionnaire de carte ...: 2.7.4 -Version du SDK .....................: 2.2.2-dev(38a443e) - -INFO FLASH -Numéro de série du chip ............: 1327304 -Fréquence ..........................: 40.0 MHz -Capacité effective .................: 1048576 octets -Capacité paramétrée dans l'EDI .....: 1048576 octets -Taille du sketch ...................: 268288 octets -Mémoire disponible .................: 778240 octets -``` - -## Lecture des informations - -### Bloc ESP8266EX - -| Information | Méthode | Commentaire | -|---|---|---| -| Numéro de série du SoC | `ESP.getChipId()` | Entier 24 bits dérivé de l'adresse MAC du module. Identifie de manière unique un ESP8266 donné. | -| Fréquence du CPU | `ESP.getCpuFreqMHz()` | 80 MHz par défaut, peut passer à 160 MHz avec `system_update_cpu_freq(160)` ou via les options de carte de l'IDE. | -| Alimentation | `ESP.getVcc()` | Tension VCC en millivolts. Nécessite `ADC_MODE(ADC_VCC)` et que la broche TOUT (ADC0) soit laissée libre. | -| Version du core | `ESP.getCoreVersion()` | Version du board package *esp8266 by ESP8266 Community*. C'est lui qui fournit l'API Arduino utilisée ici. | -| Version du SDK | `ESP.getSdkVersion()` | Version du SDK NONOS d'Espressif, utilisé en interne par le core. Ne pas confondre avec la version du core. | - -Lecture de la sortie d'exemple : le module est un ESP8266 cadencé à 80 MHz, alimenté à environ 3,47 V (légèrement au-dessus du nominal de 3,3 V, ce qui reste dans la plage tolérée 3,0–3,6 V), compilé avec le board package 2.7.4 (basé sur le SDK NONOS 2.2.2). - -### Bloc Flash - -| Information | Méthode | Commentaire | -|---|---|---| -| Numéro de série de la flash | `ESP.getFlashChipId()` | Concaténation du manufacturer ID et du device ID renvoyés par la commande JEDEC. Utile pour identifier la puce flash réellement soudée. | -| Fréquence | `ESP.getFlashChipSpeed()` | Vitesse de l'horloge SPI en Hz. 40 MHz est la valeur standard ; 80 MHz est possible mais instable sur certains lots. | -| Capacité effective | `ESP.getFlashChipRealSize()` | Taille **physique** de la puce flash, lue dans son JEDEC ID. C'est la vérité matérielle. | -| Capacité paramétrée | `ESP.getFlashChipSize()` | Taille que l'IDE a annoncée au firmware (paramètre *Flash Size* dans `Outils`). Doit correspondre à la capacité effective. | -| Taille du sketch | `ESP.getSketchSize()` | Place occupée par le programme actuel. | -| Mémoire disponible | `ESP.getFreeSketchSpace()` | Place restante utilisable pour un téléversement OTA. **Pas** la RAM libre — pour cela utiliser `ESP.getFreeHeap()`. | - -Dans la sortie d'exemple, la flash physique fait **1 Mo** (1 048 576 octets) et l'IDE a été paramétré avec la même valeur : c'est cohérent. - -> **Piège classique** : si `getFlashChipRealSize()` et `getFlashChipSize()` diffèrent, le module est mal configuré dans l'IDE. Les conséquences vont de plantages aléatoires au refus de monter le système de fichiers SPIFFS/LittleFS. C'est l'un des intérêts principaux de ce sketch : détecter ce désaccord avant d'investiguer un comportement étrange. - -## Variante : ajouter quelques infos utiles - -Quelques méthodes complémentaires qu'il peut être pertinent d'ajouter au programme selon les besoins : - -```cpp -Serial.printf("RAM libre (heap) ...................: %u octets\n", - ESP.getFreeHeap()); -Serial.printf("Fragmentation du heap ..............: %u %%\n", - ESP.getHeapFragmentation()); -Serial.printf("Plus gros bloc libre ...............: %u octets\n", - ESP.getMaxFreeBlockSize()); - -Serial.printf("Adresse MAC ........................: %s\n", - WiFi.macAddress().c_str()); // nécessite #include -Serial.printf("Cause du dernier reset .............: %s\n", - ESP.getResetReason().c_str()); -``` - -Ces valeurs sont particulièrement intéressantes pour diagnostiquer des plantages : `getResetReason()` indique si le module a redémarré sur un watchdog, un brown-out, un reset matériel ou une exception logicielle. - -## Pour aller plus loin - -- [L'ESP-01 : présentation et premiers pas](https://varlog.a5l.fr/post/esp-01-presentation-premiers-pas) -- [Adaptateur USB vers ESP-01 : activer le mode programmation](https://varlog.a5l.fr/post/adaptateur-usb-vers-esp-01-activer-le-mode-programmation) -- [ESP8266 : commandes AT](https://varlog.a5l.fr/post/esp8266-commandes-at) -- Documentation officielle de l'API `ESP` du core Arduino : -``` \ No newline at end of file diff --git a/ac8515ca-400e-43dc-b5bb-08aa5e6689b5/meta.json b/ac8515ca-400e-43dc-b5bb-08aa5e6689b5/meta.json deleted file mode 100644 index 1e701f8..0000000 --- a/ac8515ca-400e-43dc-b5bb-08aa5e6689b5/meta.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "uuid": "ac8515ca-400e-43dc-b5bb-08aa5e6689b5", - "slug": "premier-programme-esp-01-afficher-les-informations-systeme", - "title": "Premier programme ESP-01 : afficher les informations système", - "author": "cedric@abonnel.fr", - "published": true, - "published_at": "2020-12-12 22:28", - "created_at": "2020-12-12 22:28:56", - "updated_at": "2026-05-13 18:30:19", - "revisions": [ - { - "n": 1, - "date": "2026-05-13 18:30:19", - "comment": "Titre modifié, contenu modifié", - "title": "Premier programme ESP-01" - } - ], - "cover": "", - "files_meta": { - "dummy.png": { - "author": "", - "source_url": "" - } - }, - "external_links": [], - "seo_title": "", - "seo_description": "", - "og_image": "", - "category": "Électronique" -} diff --git a/ac8515ca-400e-43dc-b5bb-08aa5e6689b5/revisions/0001.md b/ac8515ca-400e-43dc-b5bb-08aa5e6689b5/revisions/0001.md deleted file mode 100644 index b6b0e43..0000000 --- a/ac8515ca-400e-43dc-b5bb-08aa5e6689b5/revisions/0001.md +++ /dev/null @@ -1,162 +0,0 @@ -Voici une version retravaillée : présentation contextualisée, code commenté, sortie expliquée ligne par ligne, et quelques précisions techniques sur ce que mesurent réellement les fonctions de l'API `ESP`. - -```markdown -![Premier programme ESP-01](dummy.png) - -# Premier programme ESP-01 : afficher les informations système - -## Objectif - -Le sketch ci-dessous est un petit utilitaire de diagnostic : une fois téléversé sur un ESP-01, il publie toutes les dix secondes sur la console série un état détaillé du microcontrôleur — identifiant, fréquence, tension d'alimentation, version du SDK — ainsi qu'un état de la mémoire flash. C'est l'équivalent d'un `uname -a` couplé à un `df` pour l'ESP8266. - -Cet exemple sert deux objectifs : - -- **valider la chaîne complète** (adaptateur, mode flash, IDE, board package) en réussissant un premier téléversement ; -- **identifier précisément le module** en main : la flash réelle ne correspond pas toujours à ce qui est annoncé par le vendeur, et il peut être utile de le constater avant d'aller plus loin. - -> **Prérequis** : un ESP-01 programmable depuis l'IDE Arduino. Voir les articles dédiés à l'[adaptateur USB-série](https://varlog.a5l.fr/post/adaptateur-usb-vers-esp-01-activer-le-mode-programmation) et à la [configuration de l'IDE pour l'ESP-01](https://varlog.a5l.fr/post/esp-01-presentation-premiers-pas). - -## Le programme - -```cpp -// Demande au SDK de connecter l'ADC interne à la mesure de VCC -// plutôt qu'à la broche TOUT. Doit être déclaré en dehors de setup() -// pour être pris en compte au démarrage. -ADC_MODE(ADC_VCC); - -void setup() { - Serial.begin(115200); - delay(100); // petit délai pour stabiliser l'UART -} - -void loop() { - /* ----- ESP8266EX ----- */ - Serial.println("INFO ESP8266EX"); - - Serial.printf("Numéro de série de l'ESP8266EX .....: %u\n", - ESP.getChipId()); - - float frequenceCpu = float(ESP.getCpuFreqMHz()); - Serial.printf("Fréquence du CPU ...................: %4.1f MHz\n", - frequenceCpu); - - // getVcc() renvoie la tension en millivolts - float vcc = float(ESP.getVcc()) / 1000.0; - Serial.printf("Alimentation .......................: %4.2f V\n", vcc); - - // La version du core Arduino-ESP8266 contient des underscores - // (ex: 2_7_4) ; on les remplace par des points pour la lisibilité. - String coreVersion = ESP.getCoreVersion(); - coreVersion.replace('_', '.'); - Serial.print("Version du gestionnaire de carte ...: "); - Serial.println(coreVersion); - - Serial.printf("Version du SDK .....................: %s\n\n", - ESP.getSdkVersion()); - - /* ----- Mémoire flash ----- */ - Serial.println("INFO FLASH"); - - Serial.printf("Numéro de série du chip ............: %u\n", - ESP.getFlashChipId()); - - float frequenceFlash = float(ESP.getFlashChipSpeed()) / 1000000.0; - Serial.printf("Fréquence ..........................: %4.1f MHz\n", - frequenceFlash); - - Serial.printf("Capacité effective .................: %u octets\n", - ESP.getFlashChipRealSize()); - Serial.printf("Capacité paramétrée dans l'EDI .....: %u octets\n", - ESP.getFlashChipSize()); - - Serial.printf("Taille du sketch ...................: %u octets\n", - ESP.getSketchSize()); - Serial.printf("Mémoire disponible .................: %u octets\n\n\n", - ESP.getFreeSketchSpace()); - - delay(10000); -} -``` - -## Téléverser et lire la sortie - -1. Sélectionner `Outils → Type de carte → Generic ESP8266 Module`. -2. Régler le port série sur celui de l'adaptateur. -3. Placer l'ESP-01 en mode flash (jumper GPIO0 ↔ GND), téléverser, retirer le jumper, redémarrer. -4. Ouvrir le moniteur série à **115200 bauds**, fin de ligne **NL & CR**. - -Sortie attendue (les valeurs varient d'un module à l'autre) : - -``` -INFO ESP8266EX -Numéro de série de l'ESP8266EX .....: 10106374 -Fréquence du CPU ...................: 80.0 MHz -Alimentation .......................: 3.47 V -Version du gestionnaire de carte ...: 2.7.4 -Version du SDK .....................: 2.2.2-dev(38a443e) - -INFO FLASH -Numéro de série du chip ............: 1327304 -Fréquence ..........................: 40.0 MHz -Capacité effective .................: 1048576 octets -Capacité paramétrée dans l'EDI .....: 1048576 octets -Taille du sketch ...................: 268288 octets -Mémoire disponible .................: 778240 octets -``` - -## Lecture des informations - -### Bloc ESP8266EX - -| Information | Méthode | Commentaire | -|---|---|---| -| Numéro de série du SoC | `ESP.getChipId()` | Entier 24 bits dérivé de l'adresse MAC du module. Identifie de manière unique un ESP8266 donné. | -| Fréquence du CPU | `ESP.getCpuFreqMHz()` | 80 MHz par défaut, peut passer à 160 MHz avec `system_update_cpu_freq(160)` ou via les options de carte de l'IDE. | -| Alimentation | `ESP.getVcc()` | Tension VCC en millivolts. Nécessite `ADC_MODE(ADC_VCC)` et que la broche TOUT (ADC0) soit laissée libre. | -| Version du core | `ESP.getCoreVersion()` | Version du board package *esp8266 by ESP8266 Community*. C'est lui qui fournit l'API Arduino utilisée ici. | -| Version du SDK | `ESP.getSdkVersion()` | Version du SDK NONOS d'Espressif, utilisé en interne par le core. Ne pas confondre avec la version du core. | - -Lecture de la sortie d'exemple : le module est un ESP8266 cadencé à 80 MHz, alimenté à environ 3,47 V (légèrement au-dessus du nominal de 3,3 V, ce qui reste dans la plage tolérée 3,0–3,6 V), compilé avec le board package 2.7.4 (basé sur le SDK NONOS 2.2.2). - -### Bloc Flash - -| Information | Méthode | Commentaire | -|---|---|---| -| Numéro de série de la flash | `ESP.getFlashChipId()` | Concaténation du manufacturer ID et du device ID renvoyés par la commande JEDEC. Utile pour identifier la puce flash réellement soudée. | -| Fréquence | `ESP.getFlashChipSpeed()` | Vitesse de l'horloge SPI en Hz. 40 MHz est la valeur standard ; 80 MHz est possible mais instable sur certains lots. | -| Capacité effective | `ESP.getFlashChipRealSize()` | Taille **physique** de la puce flash, lue dans son JEDEC ID. C'est la vérité matérielle. | -| Capacité paramétrée | `ESP.getFlashChipSize()` | Taille que l'IDE a annoncée au firmware (paramètre *Flash Size* dans `Outils`). Doit correspondre à la capacité effective. | -| Taille du sketch | `ESP.getSketchSize()` | Place occupée par le programme actuel. | -| Mémoire disponible | `ESP.getFreeSketchSpace()` | Place restante utilisable pour un téléversement OTA. **Pas** la RAM libre — pour cela utiliser `ESP.getFreeHeap()`. | - -Dans la sortie d'exemple, la flash physique fait **1 Mo** (1 048 576 octets) et l'IDE a été paramétré avec la même valeur : c'est cohérent. - -> **Piège classique** : si `getFlashChipRealSize()` et `getFlashChipSize()` diffèrent, le module est mal configuré dans l'IDE. Les conséquences vont de plantages aléatoires au refus de monter le système de fichiers SPIFFS/LittleFS. C'est l'un des intérêts principaux de ce sketch : détecter ce désaccord avant d'investiguer un comportement étrange. - -## Variante : ajouter quelques infos utiles - -Quelques méthodes complémentaires qu'il peut être pertinent d'ajouter au programme selon les besoins : - -```cpp -Serial.printf("RAM libre (heap) ...................: %u octets\n", - ESP.getFreeHeap()); -Serial.printf("Fragmentation du heap ..............: %u %%\n", - ESP.getHeapFragmentation()); -Serial.printf("Plus gros bloc libre ...............: %u octets\n", - ESP.getMaxFreeBlockSize()); - -Serial.printf("Adresse MAC ........................: %s\n", - WiFi.macAddress().c_str()); // nécessite #include -Serial.printf("Cause du dernier reset .............: %s\n", - ESP.getResetReason().c_str()); -``` - -Ces valeurs sont particulièrement intéressantes pour diagnostiquer des plantages : `getResetReason()` indique si le module a redémarré sur un watchdog, un brown-out, un reset matériel ou une exception logicielle. - -## Pour aller plus loin - -- [L'ESP-01 : présentation et premiers pas](https://varlog.a5l.fr/post/esp-01-presentation-premiers-pas) -- [Adaptateur USB vers ESP-01 : activer le mode programmation](https://varlog.a5l.fr/post/adaptateur-usb-vers-esp-01-activer-le-mode-programmation) -- [ESP8266 : commandes AT](https://varlog.a5l.fr/post/esp8266-commandes-at) -- Documentation officielle de l'API `ESP` du core Arduino : -``` \ No newline at end of file diff --git a/ad43fd21-ddcf-4ce2-b924-fdaadc8a6cdd/index.md b/ad43fd21-ddcf-4ce2-b924-fdaadc8a6cdd/index.md deleted file mode 100644 index 738a210..0000000 --- a/ad43fd21-ddcf-4ce2-b924-fdaadc8a6cdd/index.md +++ /dev/null @@ -1,109 +0,0 @@ -# Premiers pas DevOps : préparer un système Debian fraîchement installé - -Lorsqu'on vient de provisionner une machine Debian — que ce soit un conteneur LXC, une VM ou un serveur dédié — quelques étapes initiales sont incontournables avant de pouvoir vraiment travailler dessus. Ce petit guide reprend les gestes de base : passer en `root`, configurer les dépôts officiels, mettre le système à jour, installer `sudo`, et terminer par quelques réglages d'identification qui éviteront des surprises plus tard. Rien de sorcier, mais autant prendre de bonnes habitudes dès le départ. - -## Passer en utilisateur root - -La première étape consiste à obtenir les droits administrateur. Sur une Debian fraîche, l'utilisateur `root` existe déjà et possède un mot de passe défini lors de l'installation. Pour ouvrir une session avec son environnement complet (variables, PATH, répertoire personnel), on utilise : - -```bash -su - root -``` - -Le tiret est important : sans lui, on hérite uniquement de l'UID de root sans charger son shell de connexion, ce qui peut donner lieu à des surprises (PATH incomplet, absence de `/sbin` dans la recherche des commandes, etc.). - -À noter que si `sudo` est déjà installé et que l'utilisateur courant fait partie du groupe `sudo`, on peut aussi écrire `sudo -i` pour obtenir le même résultat. Mais sur une Debian minimale tout juste installée, `sudo` n'est généralement pas présent — d'où la nécessité de passer par `su` dans un premier temps. - -## Configurer les dépôts officiels - -Debian s'appuie sur APT pour gérer ses paquets, et APT a besoin de savoir où les chercher. Cette configuration se trouve dans le fichier `/etc/apt/sources.list` (et, sur les versions récentes, éventuellement dans `/etc/apt/sources.list.d/` pour les dépôts additionnels). - -On l'ouvre avec un éditeur de texte : - -```bash -nano /etc/apt/sources.list -``` - -Un contenu typique pour Debian 12 (Bookworm) ressemble à ceci : - -``` -deb http://deb.debian.org/debian bookworm main contrib non-free non-free-firmware -deb http://deb.debian.org/debian bookworm-updates main contrib non-free non-free-firmware -deb http://security.debian.org/debian-security bookworm-security main contrib non-free non-free-firmware -``` - -Quelques explications rapides sur les composants : - -- **main** contient les paquets libres officiellement supportés par Debian -- **contrib** regroupe les paquets libres qui dépendent de logiciels non libres -- **non-free** et **non-free-firmware** contiennent les paquets non libres (utiles notamment pour les pilotes matériels) - -Le dépôt `bookworm-updates` apporte les mises à jour stables non urgentes, tandis que `bookworm-security` fournit les correctifs de sécurité — celui-ci est essentiel et ne doit jamais être omis sur une machine connectée au réseau. - -Pour une version différente de Debian, il suffit de remplacer `bookworm` par le nom de code correspondant (`bullseye`, `trixie`, etc.). - -## Mettre le système à jour - -Une fois les dépôts configurés, on récupère la liste des paquets disponibles puis on applique les mises à jour : - -```bash -apt update -apt upgrade -``` - -La distinction entre les deux est importante : - -- `apt update` ne met rien à jour : la commande synchronise simplement l'index local des paquets avec ce que les dépôts annoncent. Sans cette étape, APT ignore l'existence des nouvelles versions. -- `apt upgrade` installe effectivement les versions plus récentes des paquets déjà présents. - -Pour les mises à jour plus profondes qui peuvent ajouter ou retirer des paquets (changement de dépendances, transitions majeures), il existe aussi `apt full-upgrade`. À utiliser avec un peu plus de précaution, mais c'est ce qu'il faut pour suivre l'évolution complète d'une distribution. - -Sur un conteneur ou une VM fraîche, cette première mise à jour peut tirer un certain nombre de paquets. C'est normal : l'image de base est figée au moment de sa publication, et plusieurs mois de correctifs se sont souvent accumulés depuis. - -Petit conseil pour la suite, dès qu'on commencera à scripter ces opérations : préférer `apt-get` à `apt` dans les scripts, car son interface est garantie stable entre versions. Et pour éviter les questions interactives bloquantes lors d'installations automatisées, positionner `DEBIAN_FRONTEND=noninteractive` dans l'environnement. - -## Installer sudo - -Par défaut, Debian n'installe pas `sudo` sur un système minimal. Travailler en permanence en `root` n'est pourtant pas une bonne pratique : on perd la traçabilité des actions, et la moindre erreur de frappe peut avoir des conséquences sérieuses. L'idée derrière `sudo` est de déléguer ponctuellement des droits administrateur à un utilisateur normal, commande par commande, avec un journal des actions effectuées. - -L'installation se fait classiquement : - -```bash -apt install sudo -``` - -Ensuite, il faut ajouter son utilisateur (celui avec lequel on se connectera au quotidien) au groupe `sudo` : - -```bash -usermod -aG sudo nom_utilisateur -``` - -Le drapeau `-a` (pour *append*) est crucial : sans lui, `usermod -G` remplacerait la liste des groupes secondaires de l'utilisateur au lieu d'y ajouter `sudo`, ce qui peut avoir des effets de bord désagréables. - -L'utilisateur doit ensuite se déconnecter puis se reconnecter pour que sa nouvelle appartenance au groupe soit prise en compte. À partir de là, il peut préfixer ses commandes par `sudo` pour les exécuter avec les droits administrateur, en saisissant son propre mot de passe (et non celui de root). - -## Régler l'identité et l'horloge de la machine - -Deux derniers détails de configuration qui paraissent anodins, mais qui simplifient grandement la vie sur un parc qui grandit. - -D'abord, fixer le nom de la machine. Sur une infrastructure organisée, le hostname et le FQDN suivent généralement une convention de nommage (par exemple `dafactures.acegrp.lan` pour un projet de facturation sur un réseau interne). La commande `hostnamectl` s'en charge proprement : - -```bash -hostnamectl set-hostname dafactures.acegrp.lan -``` - -Penser à vérifier ensuite que `/etc/hosts` contient bien une ligne associant l'IP locale au FQDN, sous peine de voir certains services (Postfix notamment, ou des outils de log) se plaindre de ne pas résoudre leur propre nom. - -Ensuite, le fuseau horaire. Détail souvent négligé qui complique pourtant le débogage dès qu'on croise des logs entre plusieurs machines : - -```bash -timedatectl set-timezone Europe/Paris -``` - -La synchronisation NTP est généralement déjà active via `systemd-timesyncd` sur les Debian récentes — un `timedatectl status` permet de le vérifier. - -## Et après ? - -Une fois ces étapes franchies, la machine est dans un état sain et utilisable. Les pistes naturelles pour la suite tournent autour du durcissement (configuration SSH avec authentification par clé et désactivation de la connexion root à distance, mise en place d'un pare-feu, installation de `unattended-upgrades` pour les correctifs de sécurité automatiques), puis de l'installation des outils métier proprement dits — serveur web, base de données, runtime applicatif. - -Garder en tête que ces gestes initiaux, aussi triviaux paraissent-ils, méritent d'être scriptés dès qu'on les répète plus de deux ou trois fois. C'est précisément là que la démarche DevOps prend tout son sens : transformer des manipulations manuelles en code reproductible, versionné et partageable. \ No newline at end of file diff --git a/ad43fd21-ddcf-4ce2-b924-fdaadc8a6cdd/meta.json b/ad43fd21-ddcf-4ce2-b924-fdaadc8a6cdd/meta.json deleted file mode 100644 index a079300..0000000 --- a/ad43fd21-ddcf-4ce2-b924-fdaadc8a6cdd/meta.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "uuid": "ad43fd21-ddcf-4ce2-b924-fdaadc8a6cdd", - "slug": "post-install", - "title": "Premiers pas DevOps : préparer un système Debian fraîchement installé", - "author": "cedric@abonnel.fr", - "published": true, - "published_at": "2023-02-09 15:18", - "created_at": "2023-02-09 15:18:57", - "updated_at": "2026-05-12 22:57:49", - "revisions": [ - { - "n": 1, - "date": "2026-05-12 22:57:49", - "comment": "Contenu modifié", - "title": "Premiers pas DevOps : préparer un système Debian fraîchement installé" - } - ], - "cover": "cover.jpg", - "files_meta": { - "cover.jpg": { - "author": "", - "source_url": "https://3.bp.blogspot.com/-WER6d6fmIXU/WD1K9pOVoQI/AAAAAAAAGt4/47YWFQ7r7HQs2HTlkoz9KRt-1SmBXXaWwCLcB/s320/debian-logo.jpg", - "title": "Logo Debian GNU Linux", - "meta": { - "mime": "image/jpeg", - "size": 12823, - "width": 320 - } - } - }, - "external_links": [], - "seo_title": "", - "seo_description": "", - "og_image": "", - "category": "Informatique" -} diff --git a/ad43fd21-ddcf-4ce2-b924-fdaadc8a6cdd/revisions/0001.md b/ad43fd21-ddcf-4ce2-b924-fdaadc8a6cdd/revisions/0001.md deleted file mode 100644 index ecdefa5..0000000 --- a/ad43fd21-ddcf-4ce2-b924-fdaadc8a6cdd/revisions/0001.md +++ /dev/null @@ -1,107 +0,0 @@ -Lorsqu'on vient de provisionner une machine Debian — que ce soit un conteneur LXC, une VM ou un serveur dédié — quelques étapes initiales sont incontournables avant de pouvoir vraiment travailler dessus. Ce petit guide reprend les gestes de base : passer en `root`, configurer les dépôts officiels, mettre le système à jour, installer `sudo`, et terminer par quelques réglages d'identification qui éviteront des surprises plus tard. Rien de sorcier, mais autant prendre de bonnes habitudes dès le départ. - -## Passer en utilisateur root - -La première étape consiste à obtenir les droits administrateur. Sur une Debian fraîche, l'utilisateur `root` existe déjà et possède un mot de passe défini lors de l'installation. Pour ouvrir une session avec son environnement complet (variables, PATH, répertoire personnel), on utilise : - -```bash -su - root -``` - -Le tiret est important : sans lui, on hérite uniquement de l'UID de root sans charger son shell de connexion, ce qui peut donner lieu à des surprises (PATH incomplet, absence de `/sbin` dans la recherche des commandes, etc.). - -À noter que si `sudo` est déjà installé et que l'utilisateur courant fait partie du groupe `sudo`, on peut aussi écrire `sudo -i` pour obtenir le même résultat. Mais sur une Debian minimale tout juste installée, `sudo` n'est généralement pas présent — d'où la nécessité de passer par `su` dans un premier temps. - -## Configurer les dépôts officiels - -Debian s'appuie sur APT pour gérer ses paquets, et APT a besoin de savoir où les chercher. Cette configuration se trouve dans le fichier `/etc/apt/sources.list` (et, sur les versions récentes, éventuellement dans `/etc/apt/sources.list.d/` pour les dépôts additionnels). - -On l'ouvre avec un éditeur de texte : - -```bash -nano /etc/apt/sources.list -``` - -Un contenu typique pour Debian 12 (Bookworm) ressemble à ceci : - -``` -deb http://deb.debian.org/debian bookworm main contrib non-free non-free-firmware -deb http://deb.debian.org/debian bookworm-updates main contrib non-free non-free-firmware -deb http://security.debian.org/debian-security bookworm-security main contrib non-free non-free-firmware -``` - -Quelques explications rapides sur les composants : - -- **main** contient les paquets libres officiellement supportés par Debian -- **contrib** regroupe les paquets libres qui dépendent de logiciels non libres -- **non-free** et **non-free-firmware** contiennent les paquets non libres (utiles notamment pour les pilotes matériels) - -Le dépôt `bookworm-updates` apporte les mises à jour stables non urgentes, tandis que `bookworm-security` fournit les correctifs de sécurité — celui-ci est essentiel et ne doit jamais être omis sur une machine connectée au réseau. - -Pour une version différente de Debian, il suffit de remplacer `bookworm` par le nom de code correspondant (`bullseye`, `trixie`, etc.). - -## Mettre le système à jour - -Une fois les dépôts configurés, on récupère la liste des paquets disponibles puis on applique les mises à jour : - -```bash -apt update -apt upgrade -``` - -La distinction entre les deux est importante : - -- `apt update` ne met rien à jour : la commande synchronise simplement l'index local des paquets avec ce que les dépôts annoncent. Sans cette étape, APT ignore l'existence des nouvelles versions. -- `apt upgrade` installe effectivement les versions plus récentes des paquets déjà présents. - -Pour les mises à jour plus profondes qui peuvent ajouter ou retirer des paquets (changement de dépendances, transitions majeures), il existe aussi `apt full-upgrade`. À utiliser avec un peu plus de précaution, mais c'est ce qu'il faut pour suivre l'évolution complète d'une distribution. - -Sur un conteneur ou une VM fraîche, cette première mise à jour peut tirer un certain nombre de paquets. C'est normal : l'image de base est figée au moment de sa publication, et plusieurs mois de correctifs se sont souvent accumulés depuis. - -Petit conseil pour la suite, dès qu'on commencera à scripter ces opérations : préférer `apt-get` à `apt` dans les scripts, car son interface est garantie stable entre versions. Et pour éviter les questions interactives bloquantes lors d'installations automatisées, positionner `DEBIAN_FRONTEND=noninteractive` dans l'environnement. - -## Installer sudo - -Par défaut, Debian n'installe pas `sudo` sur un système minimal. Travailler en permanence en `root` n'est pourtant pas une bonne pratique : on perd la traçabilité des actions, et la moindre erreur de frappe peut avoir des conséquences sérieuses. L'idée derrière `sudo` est de déléguer ponctuellement des droits administrateur à un utilisateur normal, commande par commande, avec un journal des actions effectuées. - -L'installation se fait classiquement : - -```bash -apt install sudo -``` - -Ensuite, il faut ajouter son utilisateur (celui avec lequel on se connectera au quotidien) au groupe `sudo` : - -```bash -usermod -aG sudo nom_utilisateur -``` - -Le drapeau `-a` (pour *append*) est crucial : sans lui, `usermod -G` remplacerait la liste des groupes secondaires de l'utilisateur au lieu d'y ajouter `sudo`, ce qui peut avoir des effets de bord désagréables. - -L'utilisateur doit ensuite se déconnecter puis se reconnecter pour que sa nouvelle appartenance au groupe soit prise en compte. À partir de là, il peut préfixer ses commandes par `sudo` pour les exécuter avec les droits administrateur, en saisissant son propre mot de passe (et non celui de root). - -## Régler l'identité et l'horloge de la machine - -Deux derniers détails de configuration qui paraissent anodins, mais qui simplifient grandement la vie sur un parc qui grandit. - -D'abord, fixer le nom de la machine. Sur une infrastructure organisée, le hostname et le FQDN suivent généralement une convention de nommage (par exemple `dafactures.acegrp.lan` pour un projet de facturation sur un réseau interne). La commande `hostnamectl` s'en charge proprement : - -```bash -hostnamectl set-hostname dafactures.acegrp.lan -``` - -Penser à vérifier ensuite que `/etc/hosts` contient bien une ligne associant l'IP locale au FQDN, sous peine de voir certains services (Postfix notamment, ou des outils de log) se plaindre de ne pas résoudre leur propre nom. - -Ensuite, le fuseau horaire. Détail souvent négligé qui complique pourtant le débogage dès qu'on croise des logs entre plusieurs machines : - -```bash -timedatectl set-timezone Europe/Paris -``` - -La synchronisation NTP est généralement déjà active via `systemd-timesyncd` sur les Debian récentes — un `timedatectl status` permet de le vérifier. - -## Et après ? - -Une fois ces étapes franchies, la machine est dans un état sain et utilisable. Les pistes naturelles pour la suite tournent autour du durcissement (configuration SSH avec authentification par clé et désactivation de la connexion root à distance, mise en place d'un pare-feu, installation de `unattended-upgrades` pour les correctifs de sécurité automatiques), puis de l'installation des outils métier proprement dits — serveur web, base de données, runtime applicatif. - -Garder en tête que ces gestes initiaux, aussi triviaux paraissent-ils, méritent d'être scriptés dès qu'on les répète plus de deux ou trois fois. C'est précisément là que la démarche DevOps prend tout son sens : transformer des manipulations manuelles en code reproductible, versionné et partageable. \ No newline at end of file diff --git a/b0b3ac59-87c5-4598-a549-f3168abb4429/index.md b/b0b3ac59-87c5-4598-a549-f3168abb4429/index.md deleted file mode 100644 index 309793b..0000000 --- a/b0b3ac59-87c5-4598-a549-f3168abb4429/index.md +++ /dev/null @@ -1,79 +0,0 @@ -# Quand les conversations sont devenues une matière première - -Entre 2023 et 2024, quelque chose s'est rompu sur le web social. Pas un effondrement, pas une crise visible — plutôt un basculement discret, presque administratif, dans la manière dont les grandes plateformes ont commencé à regarder ce que produisaient leurs utilisateurs. Les messages, les fils de discussion, les commentaires sarcastiques sous une photo de chat, les longues confidences nocturnes sur Tumblr : tout cela, jusque-là considéré comme l'humus naturel des réseaux sociaux, est soudainement devenu autre chose. Une ressource. Un actif. Une matière brute. - -Le déclencheur s'appelle **Reddit**. Le 22 février 2024, le jour même où l'entreprise dépose son dossier d'introduction en Bourse, elle annonce un accord à 60 millions de dollars par an avec Google : le géant de la recherche pourra puiser dans les archives du forum, via son API, pour entraîner ses modèles d'intelligence artificielle. Quelques mois plus tard, OpenAI signe à son tour un accord similaire, estimé autour de 70 millions de dollars annuels par les analystes. Le message envoyé au marché est limpide : ces décennies de conversations humaines, agrégées par une communauté qui croyait simplement bavarder, valent désormais des centaines de millions de dollars. Steve Huffman, PDG de Reddit, vante un modèle économique enfin durable. Les analystes financiers, eux, parlent de mine d'or. - -**Tumblr** rejoint la danse une semaine plus tard, mais par effraction. Le 27 février 2024, le site spécialisé 404 Media révèle qu'Automattic — la maison mère de Tumblr et WordPress.com — finalise des accords avec OpenAI et Midjourney pour leur fournir l'accès aux contenus publiés sur ses plateformes. La fuite est embarrassante : des documents internes montrent qu'une première extraction de données a même ratissé trop large, embarquant par erreur des posts privés, des blogs supprimés et des contenus normalement exclus. Automattic publie en urgence un communiqué annonçant un système d'opt-out — la possibilité pour les utilisateurs de refuser, à condition de cocher la bonne case dans les bons paramètres. Mais la communauté Tumblr, refuge historique d'artistes, d'écrivains amateurs, de communautés queer et de fanfic, n'a pas attendu la procédure officielle pour réagir : la nouvelle déclenche une vague de fermetures de comptes et d'effacements rétroactifs. - -**X**, sous la direction d'Elon Musk, emprunte un chemin parallèle mais plus solitaire. Plutôt que de vendre l'accès à ses données à des concurrents, Musk a verrouillé son robinet dès 2023 — au point d'introduire des plafonds de consultation tellement absurdes que la plateforme en est devenue inutilisable pendant quelques jours — et a réservé sa matière première à xAI, sa propre société d'intelligence artificielle, pour alimenter le chatbot Grok. En octobre 2024, X annonce une refonte de ses conditions d'utilisation, effective le 15 novembre. Le nouveau texte est explicite : tout contenu publié sur la plateforme peut être utilisé pour entraîner ses modèles d'apprentissage automatique, ainsi que ceux de « partenaires tiers » non nommés. L'option qui permettait jusque-là aux utilisateurs européens de refuser que leurs posts servent à entraîner Grok est, dans la foulée, devenue inaccessible pour beaucoup. Le principe reste le même que chez Reddit — les mots des utilisateurs deviennent du carburant — mais sans le détour d'un contrat externe. - -Car ce qui frappe, ce n'est pas tant chaque accord pris isolément que la rapidité avec laquelle l'idée s'est imposée. En quelques mois, exploiter les mots de ses utilisateurs pour entraîner de l'IA est devenu non plus une stratégie audacieuse, mais une évidence de marché. **LinkedIn**, propriété de Microsoft — qui se trouve aussi être le principal investisseur d'OpenAI —, suit le mouvement avec une discrétion remarquable. Le 18 septembre 2024, une mise à jour silencieuse de sa politique de confidentialité révèle que la plateforme entraîne déjà ses propres modèles d'IA générative à partir des posts, articles et données de profil de ses membres, partout dans le monde — y compris au Royaume-Uni. Personne n'a été prévenu en bonne et due forme ; le paramètre permettant de refuser ne se déclenche pas par défaut. - -L'épisode tourne court. En 48 heures, l'Information Commissioner's Office britannique, le régulateur des données, exige un arrêt immédiat de la pratique sur le territoire. Stephen Almond, son directeur exécutif chargé des risques réglementaires, déclare publiquement que la confiance du public dans l'IA générative dépend précisément du respect des droits à la vie privée dès le départ. LinkedIn suspend le traitement au Royaume-Uni, dans l'Espace économique européen et en Suisse. Pour le reste du monde — les États-Unis, l'Asie, le Canada, l'Amérique latine —, la collecte continue, opt-out par défaut. - -Mais quelque chose, du côté des utilisateurs, n'a pas suivi. - -Sur Reddit, des modérateurs ferment leurs subreddits en protestation. D'autres remplacent leurs anciens posts par des chaînes de caractères absurdes — du sabotage de données, en somme, pour rendre leurs contributions inutilisables. Sur Tumblr, on voit ressurgir un vieux geste internet : des comptes entiers passent en privé, des années d'écriture s'effacent en quelques clics. Des forums spécialisés évoquent une « grève des données ». Une phrase circule, amère, sur plusieurs plateformes à la fois : *« Nos mots valent de l'or, mais pas pour nous. »* - -C'est sans doute le paradoxe le plus profond de cette séquence. Pendant deux décennies, les grandes plateformes avaient bâti leur valeur sur un contrat tacite : vous nous donnez votre temps et votre attention, nous vous offrons un espace pour exister et nous monétisons votre regard auprès des annonceurs. Le deal était imparfait, mais lisible. À partir de 2024, un second contrat se superpose au premier sans avoir été négocié : votre langage, vos conversations, vos archives intimes deviennent aussi une matière première vendable, à votre insu le plus souvent, pour entraîner des intelligences qui à terme produiront le même langage que vous — mais en série, à coût marginal nul, et au bénéfice d'autres. - -Le web social était entré dans une nouvelle ère. Celle où les conversations des uns sont devenues l'apprentissage des autres. - ---- - -## Sources -Voici la liste des sources utilisées pour la vérification, organisée par thème pour que tu puisses les citer ou les ajouter en fin d'article. - -### Reddit – Google et OpenAI - -- **CBS News** (23 février 2024) — Annonce de l'accord à 60 M$ entre Google et Reddit -https://www.cbsnews.com/news/google-reddit-60-million-deal-ai-training/ - -- **Lutzker & Lutzker** (18 mars 2024) — Analyse détaillée de l'accord et de l'usage de l'API Reddit -https://www.lutzker.com/ip_bit_pieces/reddits-licensing-agreement-with-google/ - -- **Columbia Journalism Review** — Analyse de la stratégie globale de Reddit (mention de l'accord OpenAI à ~70 M$/an) -https://www.cjr.org/analysis/reddit-winning-ai-licensing-deals-openai-google-gemini-answers-rsl.php - -### Tumblr / Automattic – OpenAI et Midjourney - -- **404 Media** (27 février 2024) — Article source qui a révélé l'affaire -https://www.404media.co/tumblr-and-wordpress-to-sell-users-data-to-train-ai-tools/ - -- **Engadget** (27 février 2024) — Reprise détaillée avec la réponse officielle d'Automattic -https://www.engadget.com/tumblr-and-wordpress-posts-will-reportedly-be-used-for-openai-and-midjourney-training-204425798.html - -- **WP Tavern** (28 février 2024) — Angle communauté WordPress et critique de la politique d'opt-out -https://wptavern.com/automattic-faces-scrutiny-over-ai-access-policy - -- **Popular Science** (29 février 2024) — Mise en perspective sur l'inefficacité de l'opt-out -https://www.popsci.com/technology/openai-wordpress-tumblr/ - -### X (Twitter) – Conditions d'utilisation et entraînement de Grok - -- **Social Media Today** (17 octobre 2024) — Analyse des nouvelles conditions effectives le 15 novembre 2024 -https://www.socialmediatoday.com/news/x-formerly-twitter-updates-terms-service/730223/ - -- **CNN Business** (21 octobre 2024) — Réaction des utilisateurs et flou sur l'opt-out -https://www.cnn.com/2024/10/21/tech/x-twitter-terms-of-service - -- **Cybernews** (18 octobre 2024) — Sur la disparition de l'option d'opt-out -https://cybernews.com/ai-news/updated-x-terms/ - -- **Gigazine** — Déta#il des clauses ajoutées concernant les « partenaires tiers » -https://gigazine.net/gsc_news/en/20241018-x-privacy-policy-ai-training/ - -## LinkedIn – Intervention de l'ICO britannique - -- **TechCrunch** (20 septembre 2024) — LinkedIn suspend l'entraînement IA au Royaume-Uni -https://techcrunch.com/2024/09/20/linkedin-has-stopped-grabbing-u-k-users-data-for-ai/ - -- **The Record (Recorded Future News)** (20 septembre 2024) — Le rôle de l'ICO dans l'arrêt -https://therecord.media/uk-regulator-stops-linkedin-ai-models - -- **The Hacker News** (22 septembre 2024) — Synthèse incluant la mention de Meta en parallèle -https://thehackernews.com/2024/09/linkedin-halts-ai-data-processing-in-uk.html - -- **Legal IT Insider** (20 septembre 2024) — Citation complète de Stephen Almond (ICO) -https://legaltechnology.com/2024/09/20/linkedin-suspends-opt-out-ai-model-training-for-uk-following-ico-concerns/ \ No newline at end of file diff --git a/b0b3ac59-87c5-4598-a549-f3168abb4429/meta.json b/b0b3ac59-87c5-4598-a549-f3168abb4429/meta.json deleted file mode 100644 index c4b1884..0000000 --- a/b0b3ac59-87c5-4598-a549-f3168abb4429/meta.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "uuid": "b0b3ac59-87c5-4598-a549-f3168abb4429", - "slug": "quand-les-conversations-sont-devenues-une-matiere-premiere", - "title": "Quand les conversations sont devenues une matière première", - "author": "cedric@abonnel.fr", - "published": true, - "published_at": "2025-11-05 07:17", - "created_at": "2025-11-05 07:17:02", - "updated_at": "2026-05-12 01:49:27", - "revisions": [ - { - "n": 1, - "date": "2026-05-12 01:49:27", - "comment": "", - "title": "Quand les conversations sont devenues une matière première" - } - ], - "cover": "", - "files_meta": [], - "external_links": [], - "seo_title": "", - "seo_description": "", - "og_image": "", - "category": "loisirs" -} diff --git a/b0b3ac59-87c5-4598-a549-f3168abb4429/revisions/0001.md b/b0b3ac59-87c5-4598-a549-f3168abb4429/revisions/0001.md deleted file mode 100644 index d9cda11..0000000 --- a/b0b3ac59-87c5-4598-a549-f3168abb4429/revisions/0001.md +++ /dev/null @@ -1,77 +0,0 @@ -Entre 2023 et 2024, quelque chose s'est rompu sur le web social. Pas un effondrement, pas une crise visible — plutôt un basculement discret, presque administratif, dans la manière dont les grandes plateformes ont commencé à regarder ce que produisaient leurs utilisateurs. Les messages, les fils de discussion, les commentaires sarcastiques sous une photo de chat, les longues confidences nocturnes sur Tumblr : tout cela, jusque-là considéré comme l'humus naturel des réseaux sociaux, est soudainement devenu autre chose. Une ressource. Un actif. Une matière brute. - -Le déclencheur s'appelle **Reddit**. Le 22 février 2024, le jour même où l'entreprise dépose son dossier d'introduction en Bourse, elle annonce un accord à 60 millions de dollars par an avec Google : le géant de la recherche pourra puiser dans les archives du forum, via son API, pour entraîner ses modèles d'intelligence artificielle. Quelques mois plus tard, OpenAI signe à son tour un accord similaire, estimé autour de 70 millions de dollars annuels par les analystes. Le message envoyé au marché est limpide : ces décennies de conversations humaines, agrégées par une communauté qui croyait simplement bavarder, valent désormais des centaines de millions de dollars. Steve Huffman, PDG de Reddit, vante un modèle économique enfin durable. Les analystes financiers, eux, parlent de mine d'or. - -**Tumblr** rejoint la danse une semaine plus tard, mais par effraction. Le 27 février 2024, le site spécialisé 404 Media révèle qu'Automattic — la maison mère de Tumblr et WordPress.com — finalise des accords avec OpenAI et Midjourney pour leur fournir l'accès aux contenus publiés sur ses plateformes. La fuite est embarrassante : des documents internes montrent qu'une première extraction de données a même ratissé trop large, embarquant par erreur des posts privés, des blogs supprimés et des contenus normalement exclus. Automattic publie en urgence un communiqué annonçant un système d'opt-out — la possibilité pour les utilisateurs de refuser, à condition de cocher la bonne case dans les bons paramètres. Mais la communauté Tumblr, refuge historique d'artistes, d'écrivains amateurs, de communautés queer et de fanfic, n'a pas attendu la procédure officielle pour réagir : la nouvelle déclenche une vague de fermetures de comptes et d'effacements rétroactifs. - -**X**, sous la direction d'Elon Musk, emprunte un chemin parallèle mais plus solitaire. Plutôt que de vendre l'accès à ses données à des concurrents, Musk a verrouillé son robinet dès 2023 — au point d'introduire des plafonds de consultation tellement absurdes que la plateforme en est devenue inutilisable pendant quelques jours — et a réservé sa matière première à xAI, sa propre société d'intelligence artificielle, pour alimenter le chatbot Grok. En octobre 2024, X annonce une refonte de ses conditions d'utilisation, effective le 15 novembre. Le nouveau texte est explicite : tout contenu publié sur la plateforme peut être utilisé pour entraîner ses modèles d'apprentissage automatique, ainsi que ceux de « partenaires tiers » non nommés. L'option qui permettait jusque-là aux utilisateurs européens de refuser que leurs posts servent à entraîner Grok est, dans la foulée, devenue inaccessible pour beaucoup. Le principe reste le même que chez Reddit — les mots des utilisateurs deviennent du carburant — mais sans le détour d'un contrat externe. - -Car ce qui frappe, ce n'est pas tant chaque accord pris isolément que la rapidité avec laquelle l'idée s'est imposée. En quelques mois, exploiter les mots de ses utilisateurs pour entraîner de l'IA est devenu non plus une stratégie audacieuse, mais une évidence de marché. **LinkedIn**, propriété de Microsoft — qui se trouve aussi être le principal investisseur d'OpenAI —, suit le mouvement avec une discrétion remarquable. Le 18 septembre 2024, une mise à jour silencieuse de sa politique de confidentialité révèle que la plateforme entraîne déjà ses propres modèles d'IA générative à partir des posts, articles et données de profil de ses membres, partout dans le monde — y compris au Royaume-Uni. Personne n'a été prévenu en bonne et due forme ; le paramètre permettant de refuser ne se déclenche pas par défaut. - -L'épisode tourne court. En 48 heures, l'Information Commissioner's Office britannique, le régulateur des données, exige un arrêt immédiat de la pratique sur le territoire. Stephen Almond, son directeur exécutif chargé des risques réglementaires, déclare publiquement que la confiance du public dans l'IA générative dépend précisément du respect des droits à la vie privée dès le départ. LinkedIn suspend le traitement au Royaume-Uni, dans l'Espace économique européen et en Suisse. Pour le reste du monde — les États-Unis, l'Asie, le Canada, l'Amérique latine —, la collecte continue, opt-out par défaut. - -Mais quelque chose, du côté des utilisateurs, n'a pas suivi. - -Sur Reddit, des modérateurs ferment leurs subreddits en protestation. D'autres remplacent leurs anciens posts par des chaînes de caractères absurdes — du sabotage de données, en somme, pour rendre leurs contributions inutilisables. Sur Tumblr, on voit ressurgir un vieux geste internet : des comptes entiers passent en privé, des années d'écriture s'effacent en quelques clics. Des forums spécialisés évoquent une « grève des données ». Une phrase circule, amère, sur plusieurs plateformes à la fois : *« Nos mots valent de l'or, mais pas pour nous. »* - -C'est sans doute le paradoxe le plus profond de cette séquence. Pendant deux décennies, les grandes plateformes avaient bâti leur valeur sur un contrat tacite : vous nous donnez votre temps et votre attention, nous vous offrons un espace pour exister et nous monétisons votre regard auprès des annonceurs. Le deal était imparfait, mais lisible. À partir de 2024, un second contrat se superpose au premier sans avoir été négocié : votre langage, vos conversations, vos archives intimes deviennent aussi une matière première vendable, à votre insu le plus souvent, pour entraîner des intelligences qui à terme produiront le même langage que vous — mais en série, à coût marginal nul, et au bénéfice d'autres. - -Le web social était entré dans une nouvelle ère. Celle où les conversations des uns sont devenues l'apprentissage des autres. - ---- - -## Sources -Voici la liste des sources utilisées pour la vérification, organisée par thème pour que tu puisses les citer ou les ajouter en fin d'article. - -### Reddit – Google et OpenAI - -- **CBS News** (23 février 2024) — Annonce de l'accord à 60 M$ entre Google et Reddit -https://www.cbsnews.com/news/google-reddit-60-million-deal-ai-training/ - -- **Lutzker & Lutzker** (18 mars 2024) — Analyse détaillée de l'accord et de l'usage de l'API Reddit -https://www.lutzker.com/ip_bit_pieces/reddits-licensing-agreement-with-google/ - -- **Columbia Journalism Review** — Analyse de la stratégie globale de Reddit (mention de l'accord OpenAI à ~70 M$/an) -https://www.cjr.org/analysis/reddit-winning-ai-licensing-deals-openai-google-gemini-answers-rsl.php - -### Tumblr / Automattic – OpenAI et Midjourney - -- **404 Media** (27 février 2024) — Article source qui a révélé l'affaire -https://www.404media.co/tumblr-and-wordpress-to-sell-users-data-to-train-ai-tools/ - -- **Engadget** (27 février 2024) — Reprise détaillée avec la réponse officielle d'Automattic -https://www.engadget.com/tumblr-and-wordpress-posts-will-reportedly-be-used-for-openai-and-midjourney-training-204425798.html - -- **WP Tavern** (28 février 2024) — Angle communauté WordPress et critique de la politique d'opt-out -https://wptavern.com/automattic-faces-scrutiny-over-ai-access-policy - -- **Popular Science** (29 février 2024) — Mise en perspective sur l'inefficacité de l'opt-out -https://www.popsci.com/technology/openai-wordpress-tumblr/ - -### X (Twitter) – Conditions d'utilisation et entraînement de Grok - -- **Social Media Today** (17 octobre 2024) — Analyse des nouvelles conditions effectives le 15 novembre 2024 -https://www.socialmediatoday.com/news/x-formerly-twitter-updates-terms-service/730223/ - -- **CNN Business** (21 octobre 2024) — Réaction des utilisateurs et flou sur l'opt-out -https://www.cnn.com/2024/10/21/tech/x-twitter-terms-of-service - -- **Cybernews** (18 octobre 2024) — Sur la disparition de l'option d'opt-out -https://cybernews.com/ai-news/updated-x-terms/ - -- **Gigazine** — Déta#il des clauses ajoutées concernant les « partenaires tiers » -https://gigazine.net/gsc_news/en/20241018-x-privacy-policy-ai-training/ - -## LinkedIn – Intervention de l'ICO britannique - -- **TechCrunch** (20 septembre 2024) — LinkedIn suspend l'entraînement IA au Royaume-Uni -https://techcrunch.com/2024/09/20/linkedin-has-stopped-grabbing-u-k-users-data-for-ai/ - -- **The Record (Recorded Future News)** (20 septembre 2024) — Le rôle de l'ICO dans l'arrêt -https://therecord.media/uk-regulator-stops-linkedin-ai-models - -- **The Hacker News** (22 septembre 2024) — Synthèse incluant la mention de Meta en parallèle -https://thehackernews.com/2024/09/linkedin-halts-ai-data-processing-in-uk.html - -- **Legal IT Insider** (20 septembre 2024) — Citation complète de Stephen Almond (ICO) -https://legaltechnology.com/2024/09/20/linkedin-suspends-opt-out-ai-model-training-for-uk-following-ico-concerns/ \ No newline at end of file diff --git a/bea327e2-9d1c-4ff6-a5a5-26748c80018b/files/cover.svg b/bea327e2-9d1c-4ff6-a5a5-26748c80018b/files/cover.svg deleted file mode 100644 index 4c7db0f..0000000 --- a/bea327e2-9d1c-4ff6-a5a5-26748c80018b/files/cover.svg +++ /dev/null @@ -1,98 +0,0 @@ - -Article cover: anatomy of fetch_scripts.sh -Editorial cover image showing a stylized terminal with bash commands, sync arrows, and abstract geometric shapes representing remote script fetching and synchronization. - - - - - - - - - - - - - - - - - - - - - - - - - -fetch_scripts.sh — bash - - -$ -wget --q -O -"$TMP_SCRIPT" -"$SCRIPT_URL" - -if -! -cmp -s -"$TMP_SCRIPT" -"$0" -; then - -# 🔄 Mise à jour du script - -mv -"$TMP_SCRIPT" -"$0" -chmod -+x -"$0" -exec -"$0" "$@" - -fi - -$ -whiptail ---checklist -... - - - - - - - - - - - - -Forgejo repo -git.abonnel.fr - - - - - - - - -Local scripts -~/scripts/ - - - - - - - - - -Anatomie d'un script d'auto-déploiement -Bash · Forgejo · Synchronisation · Critique DevOps - - \ No newline at end of file diff --git a/bea327e2-9d1c-4ff6-a5a5-26748c80018b/index.md b/bea327e2-9d1c-4ff6-a5a5-26748c80018b/index.md deleted file mode 100644 index 060c4b4..0000000 --- a/bea327e2-9d1c-4ff6-a5a5-26748c80018b/index.md +++ /dev/null @@ -1,252 +0,0 @@ -# > Comment un simple script Bash peut télécharger, mettre à jour et synchroniser une bibliothèque de scripts distants — et pourquoi il faut le lire avec un œil critique. - -[fetch_scripts.sh](https://git.abonnel.fr/cedricAbonnel/notes-techniques/raw/commit/18c6dd9e45e57d272659da6e2c53b79048985400/scripts/fetch_scripts.sh) - -> 📝 **Note** — Cet article est une autocritique. Le script `fetch_scripts.sh` analysé ici est de ma propre fabrication, déployé sur mes propres machines. L'exercice consiste à le relire avec la distance d'un reviewer extérieur, pour identifier ce qui tient la route et ce qui mériterait d'être repris. - -## Le contexte - -L'idée derrière ce script est élégante : centraliser une collection de scripts utilitaires dans un dépôt Git public (ici, une instance Forgejo auto-hébergée), puis fournir un **unique point d'entrée** que l'on télécharge sur n'importe quelle machine. Ce point d'entrée se met à jour tout seul, propose à l'opérateur de choisir quels sous-ensembles de scripts récupérer, et maintient une synchronisation locale du dépôt distant. - -C'est typiquement le genre d'outil qui se déploie en une ligne : - -```bash -wget https://git.example.fr/.../fetch_scripts.sh && bash fetch_scripts.sh -``` - -Décortiquons ce qu'il fait, étape par étape, puis voyons où il faudrait taper. - ---- - -## Étape 1 — L'auto-mise à jour - -```bash -SCRIPT_URL="https://git.abonnel.fr/.../fetch_scripts.sh" -SCRIPT_NAME=$(basename "$0") -TMP_SCRIPT="/tmp/$SCRIPT_NAME" - -wget -q -O "$TMP_SCRIPT" "$SCRIPT_URL" - -if ! cmp -s "$TMP_SCRIPT" "$0"; then - echo "🔄 Mise à jour du script..." - mv "$TMP_SCRIPT" "$0" - chmod +x "$0" - exec "$0" "$@" -fi -``` - -**Ce qui se passe :** le script télécharge sa propre version distante dans `/tmp`, la compare octet-à-octet avec lui-même (`cmp -s`), et si elle diffère, il s'écrase, se rend exécutable, et **se relance** via `exec` (qui remplace le processus courant — pas d'empilement de shells). - -**Pourquoi c'est malin :** ça garantit qu'à chaque exécution, l'opérateur travaille avec la version canonique du dépôt. Pas besoin de mécanisme de versioning, pas de vérification de hash, pas de paquet à publier. - -**Pourquoi c'est risqué :** on y reviendra dans la critique, mais en résumé — l'auto-mise à jour silencieuse depuis une URL en HTTPS sans signature est une porte d'entrée pour la chaîne d'approvisionnement. - ---- - -## Étape 2 — Récupération du catalogue de dossiers - -```bash -REPO_URL="https://git.abonnel.fr/.../scripts" -DIR_LIST_FILE=".directories.txt" -MANDATORY_DIR="common" - -TMP_DIR=$(mktemp -d) -wget -q -O "$TMP_DIR/$DIR_LIST_FILE" "$REPO_URL/$DIR_LIST_FILE" -mapfile -t AVAILABLE_DIRS < "$TMP_DIR/$DIR_LIST_FILE" -``` - -Le dépôt distant contient un fichier `.directories.txt` qui liste les catégories de scripts disponibles (par exemple : `common`, `proxmox`, `php`, `monitoring`…). Ce fichier est la **source de vérité** : ajouter une catégorie côté serveur la rend immédiatement disponible côté client. - -`mapfile` (alias `readarray`) lit le fichier ligne à ligne dans un tableau Bash. Plus propre qu'une boucle `while read`. - -Un dossier `common` est marqué comme obligatoire — il sera toujours téléchargé, sans demander à l'utilisateur. - ---- - -## Étape 3 — Mémoire de la sélection précédente - -```bash -SELECTED_DIRS_FILE=".selected_dirs.txt" - -if [ -f "$SELECTED_DIRS_FILE" ]; then - mapfile -t PREVIOUS_SELECTION < "$SELECTED_DIRS_FILE" -else - PREVIOUS_SELECTION=() -fi -``` - -À chaque exécution, le script relit la sélection de la fois précédente. C'est ce qui permet à l'interface graphique (étape suivante) de **pré-cocher** les bons dossiers : on n'a pas à refaire son choix à chaque mise à jour. - ---- - -## Étape 4 — L'interface `whiptail` - -```bash -CHOICES=() -for dir in "${AVAILABLE_DIRS[@]}"; do - if [ "$dir" == "$MANDATORY_DIR" ]; then - continue - fi - if [[ " ${PREVIOUS_SELECTION[*]} " =~ " $dir " ]]; then - CHOICES+=("$dir" "" ON) - else - CHOICES+=("$dir" "" OFF) - fi -done - -SELECTED_DIRS=$(whiptail --title "Sélection des dossiers" --checklist \ - "Sélectionnez les dossiers à télécharger :" 20 60 10 \ - "${CHOICES[@]}" 3>&1 1>&2 2>&3) -``` - -`whiptail` est l'outil de dialogue ncurses standard sur Debian/Ubuntu — il affiche cette boîte bleue familière avec des cases à cocher, navigable au clavier. Idéal en SSH. - -La gymnastique `3>&1 1>&2 2>&3` est un classique : `whiptail` écrit son interface sur stdout et sa réponse sur stderr. Il faut donc **échanger les deux** pour capturer la sélection dans `$SELECTED_DIRS` tout en laissant l'interface s'afficher. - -L'expression `[[ " ${ARRAY[*]} " =~ " $dir " ]]` est une astuce courante pour tester l'appartenance à un tableau Bash — on entoure d'espaces pour éviter les correspondances partielles (`web` qui matcherait `web-server`). - ---- - -## Étape 5 — Synchronisation : ajouts et suppressions - -```bash -SELECTED_DIRS_ARRAY=("$MANDATORY_DIR" $(echo "$SELECTED_DIRS" | tr -d '"')) -echo "${SELECTED_DIRS_ARRAY[@]}" > "$SELECTED_DIRS_FILE" - -for dir in "${PREVIOUS_SELECTION[@]}"; do - if [[ ! " ${SELECTED_DIRS_ARRAY[*]} " =~ " $dir " ]]; then - echo "🗑 Suppression du dossier $dir..." - rm -rf "$dir" - fi -done -``` - -Logique de diff : tout ce qui était sélectionné avant et ne l'est plus est **supprimé du disque**. Ça maintient le répertoire local propre — pas de scripts orphelins qui traînent. - -`whiptail` renvoie la sélection sous forme de chaîne entre guillemets (`"dir1" "dir2"`), d'où le `tr -d '"'` pour les retirer avant de constituer le tableau. - ---- - -## Étape 6 — Téléchargement des fichiers de chaque dossier - -```bash -for TARGET_DIR in "${SELECTED_DIRS_ARRAY[@]}"; do - wget -q -O "$LIST_PATH" "$REPO_URL/$TARGET_DIR/.list_files.txt" - mkdir -p "$TARGET_DIR" - - while read -r file; do - wget -q -O "$TARGET_DIR/$(basename "$file")" "$REPO_URL/$TARGET_DIR/$file" - done < "$LIST_PATH" - - for existing_file in "$TARGET_DIR"/*; do - if [ -f "$existing_file" ] && ! grep -qx "$(basename "$existing_file")" "$LIST_PATH"; then - rm "$existing_file" - fi - done - - chmod +x "$TARGET_DIR"/*.sh -done -``` - -Même logique récursive d'un niveau plus bas : chaque dossier contient son propre `.list_files.txt` listant ses fichiers. On télécharge ceux qui y figurent, on supprime ceux qui n'y figurent plus, et on rend tout exécutable. - -C'est une forme de `rsync` artisanal, basé sur des manifestes plats. Ça fonctionne sans avoir à installer `git` sur la machine cible — seuls `wget` et `whiptail` sont requis. - ---- - -## Critique : ce qui marche, ce qui inquiète - -### Les bons côtés - -**La logique d'idempotence** est solide. Le script peut tourner cent fois de suite, il convergera toujours vers le même état : les dossiers sélectionnés contiendront exactement les fichiers du manifeste, ni plus, ni moins. C'est le bon réflexe DevOps. - -**L'auto-bootstrap** est ergonomique. Une seule URL à retenir, tout le reste se télécharge tout seul. Pour une bibliothèque personnelle de scripts d'admin, c'est imbattable en simplicité. - -**Pas de dépendances exotiques.** `wget`, `whiptail`, `mapfile` : tout est disponible nativement sur Debian. Le script tourne aussi bien sur un conteneur LXC fraîchement provisionné que sur une machine établie. - -**Le manifeste séparé** (`.directories.txt` et `.list_files.txt`) découple la liste des fichiers de leur contenu. C'est plus simple qu'un parsing HTML de l'index Git, et ça reste sous contrôle éditorial. - -### Les angles morts - -#### 1. Aucune vérification d'intégrité - -C'est **le** point critique. Le script télécharge du code exécutable en HTTPS, sans vérifier : -- ni signature GPG, -- ni hash SHA256, -- ni même que le serveur a bien répondu correctement. - -`wget -q` en mode silencieux **n'échoue pas visiblement** : si la requête renvoie une page d'erreur 404 ou une page de connexion captive Wi-Fi en HTML, elle sera écrite dans le fichier de destination. La vérification suivante (`cmp -s`) considérera ce HTML comme « différent », fera le `mv`, et au prochain `exec` le shell essaiera d'exécuter du HTML. Au mieux ça crashe, au pire ça exécute des balises interprétables. - -**Pire encore pour l'auto-update :** si quelqu'un compromet l'instance Forgejo (ou interpose un proxy malveillant capable de servir un certificat valide pour `git.abonnel.fr`), le prochain `fetch_scripts.sh` télécharge et exécute du code arbitraire avec les privilèges de l'utilisateur courant — souvent root pour ce genre d'outils d'admin. - -**Correctif minimal :** publier un fichier `.sha256sums` signé GPG dans le dépôt, le télécharger, vérifier sa signature avec une clé connue localement, puis valider chaque fichier téléchargé contre ce manifeste. - -#### 2. `wget` sans gestion d'erreur - -```bash -wget -q -O "$TMP_SCRIPT" "$SCRIPT_URL" -if ! cmp -s "$TMP_SCRIPT" "$0"; then -``` - -Si `wget` échoue (réseau coupé, DNS HS, certificat expiré), `$TMP_SCRIPT` sera soit vide soit absent. `cmp -s` retournera « différent », et le script **écrasera la version locale par un fichier vide**. À la prochaine exécution, plus rien ne fonctionne. - -**Correctif :** vérifier le code de retour de `wget`, vérifier que le fichier téléchargé n'est pas vide, et vérifier qu'il commence bien par `#!/bin/bash` avant d'écraser quoi que ce soit. - -```bash -if ! wget -q -O "$TMP_SCRIPT" "$SCRIPT_URL"; then - echo "❌ Téléchargement échoué, on garde la version actuelle" -elif [ ! -s "$TMP_SCRIPT" ] || ! head -n1 "$TMP_SCRIPT" | grep -q "^#!"; then - echo "❌ Fichier téléchargé invalide" - rm -f "$TMP_SCRIPT" -elif ! cmp -s "$TMP_SCRIPT" "$0"; then - # ... -fi -``` - -#### 3. Le `exec "$0" "$@"` perd les modifications de l'environnement - -Si le script a été lancé par `bash fetch_scripts.sh` (donc sans le bit exécutable, sans shebang utilisé), `$0` vaut `fetch_scripts.sh`. Après `mv`, on `exec` un fichier qui pourrait ne pas être dans le `$PATH`. En pratique ça marche parce qu'on est dans le bon répertoire, mais c'est fragile — un `cd` quelque part dans le script suffirait à le casser. - -#### 4. Injection via les noms de fichiers du manifeste - -```bash -while read -r file; do - wget -q -O "$TARGET_DIR/$(basename "$file")" "$REPO_URL/$TARGET_DIR/$file" -done < "$LIST_PATH" -``` - -Le contenu de `.list_files.txt` est utilisé directement dans une URL et dans un chemin de fichier local. Si quelqu'un peut écrire dans ce fichier manifeste (ce qui revient à pouvoir pousser sur le dépôt Forgejo), il peut y mettre des chemins comme `../../../etc/cron.d/backdoor` et écrire en dehors du répertoire prévu. - -`basename` neutralise partiellement la chose côté nom local, mais l'URL côté distant accepte n'importe quoi. C'est moins critique que la première faille, mais ça mérite un filtre regex (`[a-zA-Z0-9._-]+` uniquement). - -#### 5. `whiptail` et la sélection vide - -Si l'utilisateur ne coche rien et valide, `$SELECTED_DIRS` est vide. Le script continue avec seulement `common`, ce qui est probablement le comportement attendu. Mais si `whiptail` n'est pas installé (rare mais possible, par exemple sur Alpine ou un Debian minimal sans `whiptail`), le script échoue avec une erreur peu explicite. Un test préalable `command -v whiptail` éviterait la déconvenue. - -#### 6. Pas de log, pas de mode dry-run - -Pour un outil qui supprime des fichiers (`rm -rf "$dir"`), l'absence d'option `--dry-run` qui afficherait ce qui *serait* fait sans rien toucher est gênante. Une frappe distraite sur la checklist, et un dossier entier disparaît sans warning. - -#### 7. Le verrou manquant - -Rien n'empêche deux instances de `fetch_scripts.sh` de tourner en parallèle (par exemple via `cron` et un opérateur en interactif). Un `flock` sur un fichier de lock éviterait des courses sur les opérations de download/delete. - ---- - -## Verdict - -C'est un script **utile, lisible, et bien construit pour un usage personnel** sur des machines de confiance. La logique de synchronisation est saine, l'ergonomie `whiptail` est appréciable, l'auto-bootstrap est élégant. - -Mais dès qu'on franchit la frontière du « j'utilise ça sur mes propres machines avec mon propre dépôt », les manques se font sentir : **pas de vérification d'intégrité, pas de gestion d'erreur réseau, pas d'option de récupération**. Dans un contexte d'équipe ou de production, ces points sont bloquants. - -### Pistes d'évolution prioritaires - -1. **Signature ou checksum** : publier un `MANIFEST.sha256` signé GPG, le vérifier avant tout `mv` ou exécution. -2. **`set -euo pipefail`** en tête de script pour faire échouer proprement à la première erreur. -3. **Vérifier `wget`** : code de retour, fichier non vide, shebang présent. -4. **Backup avant écrasement** : conserver la version précédente (`fetch_scripts.sh.bak`) pour pouvoir revenir en arrière. -5. **Option `--dry-run`** pour visualiser sans appliquer. -6. **Filtre regex** sur les noms de fichiers du manifeste pour éviter les traversées de chemin. -7. **Lock file** via `flock` pour éviter les exécutions concurrentes. - -Avec ces ajouts, on passe d'un script « pratique » à un outil de déploiement digne de ce nom — sans rien perdre de sa simplicité initiale. \ No newline at end of file diff --git a/bea327e2-9d1c-4ff6-a5a5-26748c80018b/meta.json b/bea327e2-9d1c-4ff6-a5a5-26748c80018b/meta.json deleted file mode 100644 index a6ccaa7..0000000 --- a/bea327e2-9d1c-4ff6-a5a5-26748c80018b/meta.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "uuid": "bea327e2-9d1c-4ff6-a5a5-26748c80018b", - "slug": "anatomie-d-un-script-d-auto-deploiement-bash-fetch-scripts-sh", - "title": "Script Bash d'auto-déploiement : `fetch_scripts.sh`", - "author": "cedric@abonnel.fr", - "published": true, - "published_at": "2026-05-04 07:04", - "created_at": "2026-05-12 10:55:39", - "updated_at": "2026-05-12 11:10:51", - "revisions": [ - { - "n": 1, - "date": "2026-05-12 11:08:57", - "comment": "Catégorie modifiée, contenu modifié, article publié, couverture modifiée", - "title": "Script Bash d'auto-déploiement : `fetch_scripts.sh`" - }, - { - "n": 2, - "date": "2026-05-12 11:10:51", - "comment": "Contenu modifié : mention autocritique", - "title": "Script Bash d'auto-déploiement : `fetch_scripts.sh`" - } - ], - "cover": "cover.svg", - "files_meta": { - "d6ea4554c9fbfc14-23663.svg": { - "author": "", - "source_url": "" - }, - "cover.svg": { - "author": "", - "source_url": "" - } - }, - "external_links": [ - { - "url": "https://git.abonnel.fr/cedricAbonnel/notes-techniques/raw/commit/18c6dd9e45e57d272659da6e2c53b79048985400/scripts/fetch_scripts.sh", - "name": "Script bash fetch_scripts.sh dans sa version 18c6dd9e45e57d272659da6e2c53b79048985400", - "added_at": "2026-05-12 11:07:42", - "meta": { - "mime": "text/plain", - "size": 4334 - } - } - ], - "seo_title": "", - "seo_description": "Auto analyse pédagogique et critique du script Bash d'auto-mise à jour qui synchronise des scripts depuis un dépôt Forgejo. Sept failles identifiées, sept correctifs à effectuer.", - "og_image": "https://varlog.a5l.fr/file?uuid=bea327e2-9d1c-4ff6-a5a5-26748c80018b&name=cover.svg", - "category": "informatique" -} diff --git a/bea327e2-9d1c-4ff6-a5a5-26748c80018b/revisions/0001.md b/bea327e2-9d1c-4ff6-a5a5-26748c80018b/revisions/0001.md deleted file mode 100644 index e0b61fe..0000000 --- a/bea327e2-9d1c-4ff6-a5a5-26748c80018b/revisions/0001.md +++ /dev/null @@ -1,250 +0,0 @@ -# > Comment un simple script Bash peut télécharger, mettre à jour et synchroniser une bibliothèque de scripts distants — et pourquoi il faut le lire avec un œil critique. - -[fetch_scripts.sh](https://git.abonnel.fr/cedricAbonnel/notes-techniques/raw/commit/18c6dd9e45e57d272659da6e2c53b79048985400/scripts/fetch_scripts.sh) - -## Le contexte - -L'idée derrière ce script est élégante : centraliser une collection de scripts utilitaires dans un dépôt Git public (ici, une instance Forgejo auto-hébergée), puis fournir un **unique point d'entrée** que l'on télécharge sur n'importe quelle machine. Ce point d'entrée se met à jour tout seul, propose à l'opérateur de choisir quels sous-ensembles de scripts récupérer, et maintient une synchronisation locale du dépôt distant. - -C'est typiquement le genre d'outil qui se déploie en une ligne : - -```bash -wget https://git.example.fr/.../fetch_scripts.sh && bash fetch_scripts.sh -``` - -Décortiquons ce qu'il fait, étape par étape, puis voyons où il faudrait taper. - ---- - -## Étape 1 — L'auto-mise à jour - -```bash -SCRIPT_URL="https://git.abonnel.fr/.../fetch_scripts.sh" -SCRIPT_NAME=$(basename "$0") -TMP_SCRIPT="/tmp/$SCRIPT_NAME" - -wget -q -O "$TMP_SCRIPT" "$SCRIPT_URL" - -if ! cmp -s "$TMP_SCRIPT" "$0"; then - echo "🔄 Mise à jour du script..." - mv "$TMP_SCRIPT" "$0" - chmod +x "$0" - exec "$0" "$@" -fi -``` - -**Ce qui se passe :** le script télécharge sa propre version distante dans `/tmp`, la compare octet-à-octet avec lui-même (`cmp -s`), et si elle diffère, il s'écrase, se rend exécutable, et **se relance** via `exec` (qui remplace le processus courant — pas d'empilement de shells). - -**Pourquoi c'est malin :** ça garantit qu'à chaque exécution, l'opérateur travaille avec la version canonique du dépôt. Pas besoin de mécanisme de versioning, pas de vérification de hash, pas de paquet à publier. - -**Pourquoi c'est risqué :** on y reviendra dans la critique, mais en résumé — l'auto-mise à jour silencieuse depuis une URL en HTTPS sans signature est une porte d'entrée pour la chaîne d'approvisionnement. - ---- - -## Étape 2 — Récupération du catalogue de dossiers - -```bash -REPO_URL="https://git.abonnel.fr/.../scripts" -DIR_LIST_FILE=".directories.txt" -MANDATORY_DIR="common" - -TMP_DIR=$(mktemp -d) -wget -q -O "$TMP_DIR/$DIR_LIST_FILE" "$REPO_URL/$DIR_LIST_FILE" -mapfile -t AVAILABLE_DIRS < "$TMP_DIR/$DIR_LIST_FILE" -``` - -Le dépôt distant contient un fichier `.directories.txt` qui liste les catégories de scripts disponibles (par exemple : `common`, `proxmox`, `php`, `monitoring`…). Ce fichier est la **source de vérité** : ajouter une catégorie côté serveur la rend immédiatement disponible côté client. - -`mapfile` (alias `readarray`) lit le fichier ligne à ligne dans un tableau Bash. Plus propre qu'une boucle `while read`. - -Un dossier `common` est marqué comme obligatoire — il sera toujours téléchargé, sans demander à l'utilisateur. - ---- - -## Étape 3 — Mémoire de la sélection précédente - -```bash -SELECTED_DIRS_FILE=".selected_dirs.txt" - -if [ -f "$SELECTED_DIRS_FILE" ]; then - mapfile -t PREVIOUS_SELECTION < "$SELECTED_DIRS_FILE" -else - PREVIOUS_SELECTION=() -fi -``` - -À chaque exécution, le script relit la sélection de la fois précédente. C'est ce qui permet à l'interface graphique (étape suivante) de **pré-cocher** les bons dossiers : on n'a pas à refaire son choix à chaque mise à jour. - ---- - -## Étape 4 — L'interface `whiptail` - -```bash -CHOICES=() -for dir in "${AVAILABLE_DIRS[@]}"; do - if [ "$dir" == "$MANDATORY_DIR" ]; then - continue - fi - if [[ " ${PREVIOUS_SELECTION[*]} " =~ " $dir " ]]; then - CHOICES+=("$dir" "" ON) - else - CHOICES+=("$dir" "" OFF) - fi -done - -SELECTED_DIRS=$(whiptail --title "Sélection des dossiers" --checklist \ - "Sélectionnez les dossiers à télécharger :" 20 60 10 \ - "${CHOICES[@]}" 3>&1 1>&2 2>&3) -``` - -`whiptail` est l'outil de dialogue ncurses standard sur Debian/Ubuntu — il affiche cette boîte bleue familière avec des cases à cocher, navigable au clavier. Idéal en SSH. - -La gymnastique `3>&1 1>&2 2>&3` est un classique : `whiptail` écrit son interface sur stdout et sa réponse sur stderr. Il faut donc **échanger les deux** pour capturer la sélection dans `$SELECTED_DIRS` tout en laissant l'interface s'afficher. - -L'expression `[[ " ${ARRAY[*]} " =~ " $dir " ]]` est une astuce courante pour tester l'appartenance à un tableau Bash — on entoure d'espaces pour éviter les correspondances partielles (`web` qui matcherait `web-server`). - ---- - -## Étape 5 — Synchronisation : ajouts et suppressions - -```bash -SELECTED_DIRS_ARRAY=("$MANDATORY_DIR" $(echo "$SELECTED_DIRS" | tr -d '"')) -echo "${SELECTED_DIRS_ARRAY[@]}" > "$SELECTED_DIRS_FILE" - -for dir in "${PREVIOUS_SELECTION[@]}"; do - if [[ ! " ${SELECTED_DIRS_ARRAY[*]} " =~ " $dir " ]]; then - echo "🗑 Suppression du dossier $dir..." - rm -rf "$dir" - fi -done -``` - -Logique de diff : tout ce qui était sélectionné avant et ne l'est plus est **supprimé du disque**. Ça maintient le répertoire local propre — pas de scripts orphelins qui traînent. - -`whiptail` renvoie la sélection sous forme de chaîne entre guillemets (`"dir1" "dir2"`), d'où le `tr -d '"'` pour les retirer avant de constituer le tableau. - ---- - -## Étape 6 — Téléchargement des fichiers de chaque dossier - -```bash -for TARGET_DIR in "${SELECTED_DIRS_ARRAY[@]}"; do - wget -q -O "$LIST_PATH" "$REPO_URL/$TARGET_DIR/.list_files.txt" - mkdir -p "$TARGET_DIR" - - while read -r file; do - wget -q -O "$TARGET_DIR/$(basename "$file")" "$REPO_URL/$TARGET_DIR/$file" - done < "$LIST_PATH" - - for existing_file in "$TARGET_DIR"/*; do - if [ -f "$existing_file" ] && ! grep -qx "$(basename "$existing_file")" "$LIST_PATH"; then - rm "$existing_file" - fi - done - - chmod +x "$TARGET_DIR"/*.sh -done -``` - -Même logique récursive d'un niveau plus bas : chaque dossier contient son propre `.list_files.txt` listant ses fichiers. On télécharge ceux qui y figurent, on supprime ceux qui n'y figurent plus, et on rend tout exécutable. - -C'est une forme de `rsync` artisanal, basé sur des manifestes plats. Ça fonctionne sans avoir à installer `git` sur la machine cible — seuls `wget` et `whiptail` sont requis. - ---- - -## Critique : ce qui marche, ce qui inquiète - -### Les bons côtés - -**La logique d'idempotence** est solide. Le script peut tourner cent fois de suite, il convergera toujours vers le même état : les dossiers sélectionnés contiendront exactement les fichiers du manifeste, ni plus, ni moins. C'est le bon réflexe DevOps. - -**L'auto-bootstrap** est ergonomique. Une seule URL à retenir, tout le reste se télécharge tout seul. Pour une bibliothèque personnelle de scripts d'admin, c'est imbattable en simplicité. - -**Pas de dépendances exotiques.** `wget`, `whiptail`, `mapfile` : tout est disponible nativement sur Debian. Le script tourne aussi bien sur un conteneur LXC fraîchement provisionné que sur une machine établie. - -**Le manifeste séparé** (`.directories.txt` et `.list_files.txt`) découple la liste des fichiers de leur contenu. C'est plus simple qu'un parsing HTML de l'index Git, et ça reste sous contrôle éditorial. - -### Les angles morts - -#### 1. Aucune vérification d'intégrité - -C'est **le** point critique. Le script télécharge du code exécutable en HTTPS, sans vérifier : -- ni signature GPG, -- ni hash SHA256, -- ni même que le serveur a bien répondu correctement. - -`wget -q` en mode silencieux **n'échoue pas visiblement** : si la requête renvoie une page d'erreur 404 ou une page de connexion captive Wi-Fi en HTML, elle sera écrite dans le fichier de destination. La vérification suivante (`cmp -s`) considérera ce HTML comme « différent », fera le `mv`, et au prochain `exec` le shell essaiera d'exécuter du HTML. Au mieux ça crashe, au pire ça exécute des balises interprétables. - -**Pire encore pour l'auto-update :** si quelqu'un compromet l'instance Forgejo (ou interpose un proxy malveillant capable de servir un certificat valide pour `git.abonnel.fr`), le prochain `fetch_scripts.sh` télécharge et exécute du code arbitraire avec les privilèges de l'utilisateur courant — souvent root pour ce genre d'outils d'admin. - -**Correctif minimal :** publier un fichier `.sha256sums` signé GPG dans le dépôt, le télécharger, vérifier sa signature avec une clé connue localement, puis valider chaque fichier téléchargé contre ce manifeste. - -#### 2. `wget` sans gestion d'erreur - -```bash -wget -q -O "$TMP_SCRIPT" "$SCRIPT_URL" -if ! cmp -s "$TMP_SCRIPT" "$0"; then -``` - -Si `wget` échoue (réseau coupé, DNS HS, certificat expiré), `$TMP_SCRIPT` sera soit vide soit absent. `cmp -s` retournera « différent », et le script **écrasera la version locale par un fichier vide**. À la prochaine exécution, plus rien ne fonctionne. - -**Correctif :** vérifier le code de retour de `wget`, vérifier que le fichier téléchargé n'est pas vide, et vérifier qu'il commence bien par `#!/bin/bash` avant d'écraser quoi que ce soit. - -```bash -if ! wget -q -O "$TMP_SCRIPT" "$SCRIPT_URL"; then - echo "❌ Téléchargement échoué, on garde la version actuelle" -elif [ ! -s "$TMP_SCRIPT" ] || ! head -n1 "$TMP_SCRIPT" | grep -q "^#!"; then - echo "❌ Fichier téléchargé invalide" - rm -f "$TMP_SCRIPT" -elif ! cmp -s "$TMP_SCRIPT" "$0"; then - # ... -fi -``` - -#### 3. Le `exec "$0" "$@"` perd les modifications de l'environnement - -Si le script a été lancé par `bash fetch_scripts.sh` (donc sans le bit exécutable, sans shebang utilisé), `$0` vaut `fetch_scripts.sh`. Après `mv`, on `exec` un fichier qui pourrait ne pas être dans le `$PATH`. En pratique ça marche parce qu'on est dans le bon répertoire, mais c'est fragile — un `cd` quelque part dans le script suffirait à le casser. - -#### 4. Injection via les noms de fichiers du manifeste - -```bash -while read -r file; do - wget -q -O "$TARGET_DIR/$(basename "$file")" "$REPO_URL/$TARGET_DIR/$file" -done < "$LIST_PATH" -``` - -Le contenu de `.list_files.txt` est utilisé directement dans une URL et dans un chemin de fichier local. Si quelqu'un peut écrire dans ce fichier manifeste (ce qui revient à pouvoir pousser sur le dépôt Forgejo), il peut y mettre des chemins comme `../../../etc/cron.d/backdoor` et écrire en dehors du répertoire prévu. - -`basename` neutralise partiellement la chose côté nom local, mais l'URL côté distant accepte n'importe quoi. C'est moins critique que la première faille, mais ça mérite un filtre regex (`[a-zA-Z0-9._-]+` uniquement). - -#### 5. `whiptail` et la sélection vide - -Si l'utilisateur ne coche rien et valide, `$SELECTED_DIRS` est vide. Le script continue avec seulement `common`, ce qui est probablement le comportement attendu. Mais si `whiptail` n'est pas installé (rare mais possible, par exemple sur Alpine ou un Debian minimal sans `whiptail`), le script échoue avec une erreur peu explicite. Un test préalable `command -v whiptail` éviterait la déconvenue. - -#### 6. Pas de log, pas de mode dry-run - -Pour un outil qui supprime des fichiers (`rm -rf "$dir"`), l'absence d'option `--dry-run` qui afficherait ce qui *serait* fait sans rien toucher est gênante. Une frappe distraite sur la checklist, et un dossier entier disparaît sans warning. - -#### 7. Le verrou manquant - -Rien n'empêche deux instances de `fetch_scripts.sh` de tourner en parallèle (par exemple via `cron` et un opérateur en interactif). Un `flock` sur un fichier de lock éviterait des courses sur les opérations de download/delete. - ---- - -## Verdict - -C'est un script **utile, lisible, et bien construit pour un usage personnel** sur des machines de confiance. La logique de synchronisation est saine, l'ergonomie `whiptail` est appréciable, l'auto-bootstrap est élégant. - -Mais dès qu'on franchit la frontière du « j'utilise ça sur mes propres machines avec mon propre dépôt », les manques se font sentir : **pas de vérification d'intégrité, pas de gestion d'erreur réseau, pas d'option de récupération**. Dans un contexte d'équipe ou de production, ces points sont bloquants. - -### Pistes d'évolution prioritaires - -1. **Signature ou checksum** : publier un `MANIFEST.sha256` signé GPG, le vérifier avant tout `mv` ou exécution. -2. **`set -euo pipefail`** en tête de script pour faire échouer proprement à la première erreur. -3. **Vérifier `wget`** : code de retour, fichier non vide, shebang présent. -4. **Backup avant écrasement** : conserver la version précédente (`fetch_scripts.sh.bak`) pour pouvoir revenir en arrière. -5. **Option `--dry-run`** pour visualiser sans appliquer. -6. **Filtre regex** sur les noms de fichiers du manifeste pour éviter les traversées de chemin. -7. **Lock file** via `flock` pour éviter les exécutions concurrentes. - -Avec ces ajouts, on passe d'un script « pratique » à un outil de déploiement digne de ce nom — sans rien perdre de sa simplicité initiale. \ No newline at end of file diff --git a/bea327e2-9d1c-4ff6-a5a5-26748c80018b/revisions/0002.md b/bea327e2-9d1c-4ff6-a5a5-26748c80018b/revisions/0002.md deleted file mode 100644 index 9f76320..0000000 --- a/bea327e2-9d1c-4ff6-a5a5-26748c80018b/revisions/0002.md +++ /dev/null @@ -1,260 +0,0 @@ -# > Comment un simple script Bash peut télécharger, mettre à jour et synchroniser une bibliothèque de scripts distants — et pourquoi il faut le lire avec un œil critique. - -[fetch_scripts.sh](https://git.abonnel.fr/cedricAbonnel/notes-techniques/raw/commit/18c6dd9e45e57d272659da6e2c53b79048985400/scripts/fetch_scripts.sh) - -Il s'agit d'ajouter une mention indiquant que cet article est une autocritique — le script analysé étant l'œuvre de l'auteur lui-même. - -Quelques options selon l'effet recherché : - -**En sous-titre, sous le titre principal :** -> *Autocritique d'un script maison : ce que j'ai bien fait, et où j'aurais dû taper plus fort.* - -**En encart d'introduction, juste avant « Le contexte » :** -> 📝 **Note** — Cet article est une autocritique. Le script `fetch_scripts.sh` analysé ici est de ma propre fabrication, déployé sur mes propres machines. L'exercice consiste à le relire avec la distance d'un reviewer extérieur, pour identifier ce qui tient la route et ce qui mériterait d'être repris. - -## Le contexte - -L'idée derrière ce script est élégante : centraliser une collection de scripts utilitaires dans un dépôt Git public (ici, une instance Forgejo auto-hébergée), puis fournir un **unique point d'entrée** que l'on télécharge sur n'importe quelle machine. Ce point d'entrée se met à jour tout seul, propose à l'opérateur de choisir quels sous-ensembles de scripts récupérer, et maintient une synchronisation locale du dépôt distant. - -C'est typiquement le genre d'outil qui se déploie en une ligne : - -```bash -wget https://git.example.fr/.../fetch_scripts.sh && bash fetch_scripts.sh -``` - -Décortiquons ce qu'il fait, étape par étape, puis voyons où il faudrait taper. - ---- - -## Étape 1 — L'auto-mise à jour - -```bash -SCRIPT_URL="https://git.abonnel.fr/.../fetch_scripts.sh" -SCRIPT_NAME=$(basename "$0") -TMP_SCRIPT="/tmp/$SCRIPT_NAME" - -wget -q -O "$TMP_SCRIPT" "$SCRIPT_URL" - -if ! cmp -s "$TMP_SCRIPT" "$0"; then - echo "🔄 Mise à jour du script..." - mv "$TMP_SCRIPT" "$0" - chmod +x "$0" - exec "$0" "$@" -fi -``` - -**Ce qui se passe :** le script télécharge sa propre version distante dans `/tmp`, la compare octet-à-octet avec lui-même (`cmp -s`), et si elle diffère, il s'écrase, se rend exécutable, et **se relance** via `exec` (qui remplace le processus courant — pas d'empilement de shells). - -**Pourquoi c'est malin :** ça garantit qu'à chaque exécution, l'opérateur travaille avec la version canonique du dépôt. Pas besoin de mécanisme de versioning, pas de vérification de hash, pas de paquet à publier. - -**Pourquoi c'est risqué :** on y reviendra dans la critique, mais en résumé — l'auto-mise à jour silencieuse depuis une URL en HTTPS sans signature est une porte d'entrée pour la chaîne d'approvisionnement. - ---- - -## Étape 2 — Récupération du catalogue de dossiers - -```bash -REPO_URL="https://git.abonnel.fr/.../scripts" -DIR_LIST_FILE=".directories.txt" -MANDATORY_DIR="common" - -TMP_DIR=$(mktemp -d) -wget -q -O "$TMP_DIR/$DIR_LIST_FILE" "$REPO_URL/$DIR_LIST_FILE" -mapfile -t AVAILABLE_DIRS < "$TMP_DIR/$DIR_LIST_FILE" -``` - -Le dépôt distant contient un fichier `.directories.txt` qui liste les catégories de scripts disponibles (par exemple : `common`, `proxmox`, `php`, `monitoring`…). Ce fichier est la **source de vérité** : ajouter une catégorie côté serveur la rend immédiatement disponible côté client. - -`mapfile` (alias `readarray`) lit le fichier ligne à ligne dans un tableau Bash. Plus propre qu'une boucle `while read`. - -Un dossier `common` est marqué comme obligatoire — il sera toujours téléchargé, sans demander à l'utilisateur. - ---- - -## Étape 3 — Mémoire de la sélection précédente - -```bash -SELECTED_DIRS_FILE=".selected_dirs.txt" - -if [ -f "$SELECTED_DIRS_FILE" ]; then - mapfile -t PREVIOUS_SELECTION < "$SELECTED_DIRS_FILE" -else - PREVIOUS_SELECTION=() -fi -``` - -À chaque exécution, le script relit la sélection de la fois précédente. C'est ce qui permet à l'interface graphique (étape suivante) de **pré-cocher** les bons dossiers : on n'a pas à refaire son choix à chaque mise à jour. - ---- - -## Étape 4 — L'interface `whiptail` - -```bash -CHOICES=() -for dir in "${AVAILABLE_DIRS[@]}"; do - if [ "$dir" == "$MANDATORY_DIR" ]; then - continue - fi - if [[ " ${PREVIOUS_SELECTION[*]} " =~ " $dir " ]]; then - CHOICES+=("$dir" "" ON) - else - CHOICES+=("$dir" "" OFF) - fi -done - -SELECTED_DIRS=$(whiptail --title "Sélection des dossiers" --checklist \ - "Sélectionnez les dossiers à télécharger :" 20 60 10 \ - "${CHOICES[@]}" 3>&1 1>&2 2>&3) -``` - -`whiptail` est l'outil de dialogue ncurses standard sur Debian/Ubuntu — il affiche cette boîte bleue familière avec des cases à cocher, navigable au clavier. Idéal en SSH. - -La gymnastique `3>&1 1>&2 2>&3` est un classique : `whiptail` écrit son interface sur stdout et sa réponse sur stderr. Il faut donc **échanger les deux** pour capturer la sélection dans `$SELECTED_DIRS` tout en laissant l'interface s'afficher. - -L'expression `[[ " ${ARRAY[*]} " =~ " $dir " ]]` est une astuce courante pour tester l'appartenance à un tableau Bash — on entoure d'espaces pour éviter les correspondances partielles (`web` qui matcherait `web-server`). - ---- - -## Étape 5 — Synchronisation : ajouts et suppressions - -```bash -SELECTED_DIRS_ARRAY=("$MANDATORY_DIR" $(echo "$SELECTED_DIRS" | tr -d '"')) -echo "${SELECTED_DIRS_ARRAY[@]}" > "$SELECTED_DIRS_FILE" - -for dir in "${PREVIOUS_SELECTION[@]}"; do - if [[ ! " ${SELECTED_DIRS_ARRAY[*]} " =~ " $dir " ]]; then - echo "🗑 Suppression du dossier $dir..." - rm -rf "$dir" - fi -done -``` - -Logique de diff : tout ce qui était sélectionné avant et ne l'est plus est **supprimé du disque**. Ça maintient le répertoire local propre — pas de scripts orphelins qui traînent. - -`whiptail` renvoie la sélection sous forme de chaîne entre guillemets (`"dir1" "dir2"`), d'où le `tr -d '"'` pour les retirer avant de constituer le tableau. - ---- - -## Étape 6 — Téléchargement des fichiers de chaque dossier - -```bash -for TARGET_DIR in "${SELECTED_DIRS_ARRAY[@]}"; do - wget -q -O "$LIST_PATH" "$REPO_URL/$TARGET_DIR/.list_files.txt" - mkdir -p "$TARGET_DIR" - - while read -r file; do - wget -q -O "$TARGET_DIR/$(basename "$file")" "$REPO_URL/$TARGET_DIR/$file" - done < "$LIST_PATH" - - for existing_file in "$TARGET_DIR"/*; do - if [ -f "$existing_file" ] && ! grep -qx "$(basename "$existing_file")" "$LIST_PATH"; then - rm "$existing_file" - fi - done - - chmod +x "$TARGET_DIR"/*.sh -done -``` - -Même logique récursive d'un niveau plus bas : chaque dossier contient son propre `.list_files.txt` listant ses fichiers. On télécharge ceux qui y figurent, on supprime ceux qui n'y figurent plus, et on rend tout exécutable. - -C'est une forme de `rsync` artisanal, basé sur des manifestes plats. Ça fonctionne sans avoir à installer `git` sur la machine cible — seuls `wget` et `whiptail` sont requis. - ---- - -## Critique : ce qui marche, ce qui inquiète - -### Les bons côtés - -**La logique d'idempotence** est solide. Le script peut tourner cent fois de suite, il convergera toujours vers le même état : les dossiers sélectionnés contiendront exactement les fichiers du manifeste, ni plus, ni moins. C'est le bon réflexe DevOps. - -**L'auto-bootstrap** est ergonomique. Une seule URL à retenir, tout le reste se télécharge tout seul. Pour une bibliothèque personnelle de scripts d'admin, c'est imbattable en simplicité. - -**Pas de dépendances exotiques.** `wget`, `whiptail`, `mapfile` : tout est disponible nativement sur Debian. Le script tourne aussi bien sur un conteneur LXC fraîchement provisionné que sur une machine établie. - -**Le manifeste séparé** (`.directories.txt` et `.list_files.txt`) découple la liste des fichiers de leur contenu. C'est plus simple qu'un parsing HTML de l'index Git, et ça reste sous contrôle éditorial. - -### Les angles morts - -#### 1. Aucune vérification d'intégrité - -C'est **le** point critique. Le script télécharge du code exécutable en HTTPS, sans vérifier : -- ni signature GPG, -- ni hash SHA256, -- ni même que le serveur a bien répondu correctement. - -`wget -q` en mode silencieux **n'échoue pas visiblement** : si la requête renvoie une page d'erreur 404 ou une page de connexion captive Wi-Fi en HTML, elle sera écrite dans le fichier de destination. La vérification suivante (`cmp -s`) considérera ce HTML comme « différent », fera le `mv`, et au prochain `exec` le shell essaiera d'exécuter du HTML. Au mieux ça crashe, au pire ça exécute des balises interprétables. - -**Pire encore pour l'auto-update :** si quelqu'un compromet l'instance Forgejo (ou interpose un proxy malveillant capable de servir un certificat valide pour `git.abonnel.fr`), le prochain `fetch_scripts.sh` télécharge et exécute du code arbitraire avec les privilèges de l'utilisateur courant — souvent root pour ce genre d'outils d'admin. - -**Correctif minimal :** publier un fichier `.sha256sums` signé GPG dans le dépôt, le télécharger, vérifier sa signature avec une clé connue localement, puis valider chaque fichier téléchargé contre ce manifeste. - -#### 2. `wget` sans gestion d'erreur - -```bash -wget -q -O "$TMP_SCRIPT" "$SCRIPT_URL" -if ! cmp -s "$TMP_SCRIPT" "$0"; then -``` - -Si `wget` échoue (réseau coupé, DNS HS, certificat expiré), `$TMP_SCRIPT` sera soit vide soit absent. `cmp -s` retournera « différent », et le script **écrasera la version locale par un fichier vide**. À la prochaine exécution, plus rien ne fonctionne. - -**Correctif :** vérifier le code de retour de `wget`, vérifier que le fichier téléchargé n'est pas vide, et vérifier qu'il commence bien par `#!/bin/bash` avant d'écraser quoi que ce soit. - -```bash -if ! wget -q -O "$TMP_SCRIPT" "$SCRIPT_URL"; then - echo "❌ Téléchargement échoué, on garde la version actuelle" -elif [ ! -s "$TMP_SCRIPT" ] || ! head -n1 "$TMP_SCRIPT" | grep -q "^#!"; then - echo "❌ Fichier téléchargé invalide" - rm -f "$TMP_SCRIPT" -elif ! cmp -s "$TMP_SCRIPT" "$0"; then - # ... -fi -``` - -#### 3. Le `exec "$0" "$@"` perd les modifications de l'environnement - -Si le script a été lancé par `bash fetch_scripts.sh` (donc sans le bit exécutable, sans shebang utilisé), `$0` vaut `fetch_scripts.sh`. Après `mv`, on `exec` un fichier qui pourrait ne pas être dans le `$PATH`. En pratique ça marche parce qu'on est dans le bon répertoire, mais c'est fragile — un `cd` quelque part dans le script suffirait à le casser. - -#### 4. Injection via les noms de fichiers du manifeste - -```bash -while read -r file; do - wget -q -O "$TARGET_DIR/$(basename "$file")" "$REPO_URL/$TARGET_DIR/$file" -done < "$LIST_PATH" -``` - -Le contenu de `.list_files.txt` est utilisé directement dans une URL et dans un chemin de fichier local. Si quelqu'un peut écrire dans ce fichier manifeste (ce qui revient à pouvoir pousser sur le dépôt Forgejo), il peut y mettre des chemins comme `../../../etc/cron.d/backdoor` et écrire en dehors du répertoire prévu. - -`basename` neutralise partiellement la chose côté nom local, mais l'URL côté distant accepte n'importe quoi. C'est moins critique que la première faille, mais ça mérite un filtre regex (`[a-zA-Z0-9._-]+` uniquement). - -#### 5. `whiptail` et la sélection vide - -Si l'utilisateur ne coche rien et valide, `$SELECTED_DIRS` est vide. Le script continue avec seulement `common`, ce qui est probablement le comportement attendu. Mais si `whiptail` n'est pas installé (rare mais possible, par exemple sur Alpine ou un Debian minimal sans `whiptail`), le script échoue avec une erreur peu explicite. Un test préalable `command -v whiptail` éviterait la déconvenue. - -#### 6. Pas de log, pas de mode dry-run - -Pour un outil qui supprime des fichiers (`rm -rf "$dir"`), l'absence d'option `--dry-run` qui afficherait ce qui *serait* fait sans rien toucher est gênante. Une frappe distraite sur la checklist, et un dossier entier disparaît sans warning. - -#### 7. Le verrou manquant - -Rien n'empêche deux instances de `fetch_scripts.sh` de tourner en parallèle (par exemple via `cron` et un opérateur en interactif). Un `flock` sur un fichier de lock éviterait des courses sur les opérations de download/delete. - ---- - -## Verdict - -C'est un script **utile, lisible, et bien construit pour un usage personnel** sur des machines de confiance. La logique de synchronisation est saine, l'ergonomie `whiptail` est appréciable, l'auto-bootstrap est élégant. - -Mais dès qu'on franchit la frontière du « j'utilise ça sur mes propres machines avec mon propre dépôt », les manques se font sentir : **pas de vérification d'intégrité, pas de gestion d'erreur réseau, pas d'option de récupération**. Dans un contexte d'équipe ou de production, ces points sont bloquants. - -### Pistes d'évolution prioritaires - -1. **Signature ou checksum** : publier un `MANIFEST.sha256` signé GPG, le vérifier avant tout `mv` ou exécution. -2. **`set -euo pipefail`** en tête de script pour faire échouer proprement à la première erreur. -3. **Vérifier `wget`** : code de retour, fichier non vide, shebang présent. -4. **Backup avant écrasement** : conserver la version précédente (`fetch_scripts.sh.bak`) pour pouvoir revenir en arrière. -5. **Option `--dry-run`** pour visualiser sans appliquer. -6. **Filtre regex** sur les noms de fichiers du manifeste pour éviter les traversées de chemin. -7. **Lock file** via `flock` pour éviter les exécutions concurrentes. - -Avec ces ajouts, on passe d'un script « pratique » à un outil de déploiement digne de ce nom — sans rien perdre de sa simplicité initiale. \ No newline at end of file diff --git a/c8fa250e-d8b5-453a-a06a-799d53c3b6d1/files/_thumb_035b34dd014ac80f-635197.jpg b/c8fa250e-d8b5-453a-a06a-799d53c3b6d1/files/_thumb_035b34dd014ac80f-635197.jpg deleted file mode 100644 index ac0c81a..0000000 Binary files a/c8fa250e-d8b5-453a-a06a-799d53c3b6d1/files/_thumb_035b34dd014ac80f-635197.jpg and /dev/null differ diff --git a/c8fa250e-d8b5-453a-a06a-799d53c3b6d1/files/_thumb_5913d9738c966833-30567.jpg b/c8fa250e-d8b5-453a-a06a-799d53c3b6d1/files/_thumb_5913d9738c966833-30567.jpg deleted file mode 100644 index 54ec9c9..0000000 Binary files a/c8fa250e-d8b5-453a-a06a-799d53c3b6d1/files/_thumb_5913d9738c966833-30567.jpg and /dev/null differ diff --git a/c8fa250e-d8b5-453a-a06a-799d53c3b6d1/files/_thumb_7d6ba93f6ce840e7-13566.webp b/c8fa250e-d8b5-453a-a06a-799d53c3b6d1/files/_thumb_7d6ba93f6ce840e7-13566.webp deleted file mode 100644 index fc9ad23..0000000 Binary files a/c8fa250e-d8b5-453a-a06a-799d53c3b6d1/files/_thumb_7d6ba93f6ce840e7-13566.webp and /dev/null differ diff --git a/c8fa250e-d8b5-453a-a06a-799d53c3b6d1/files/_thumb_d5dde33b48cd2761-66620.jpg b/c8fa250e-d8b5-453a-a06a-799d53c3b6d1/files/_thumb_d5dde33b48cd2761-66620.jpg deleted file mode 100644 index c15f74d..0000000 Binary files a/c8fa250e-d8b5-453a-a06a-799d53c3b6d1/files/_thumb_d5dde33b48cd2761-66620.jpg and /dev/null differ diff --git a/c8fa250e-d8b5-453a-a06a-799d53c3b6d1/files/_thumb_e99b946f131256b8-49943.jpg b/c8fa250e-d8b5-453a-a06a-799d53c3b6d1/files/_thumb_e99b946f131256b8-49943.jpg deleted file mode 100644 index 7686c81..0000000 Binary files a/c8fa250e-d8b5-453a-a06a-799d53c3b6d1/files/_thumb_e99b946f131256b8-49943.jpg and /dev/null differ diff --git a/c8fa250e-d8b5-453a-a06a-799d53c3b6d1/files/_thumb_fb5a5b1ffa000d12-30780.png b/c8fa250e-d8b5-453a-a06a-799d53c3b6d1/files/_thumb_fb5a5b1ffa000d12-30780.png deleted file mode 100644 index bcaf159..0000000 Binary files a/c8fa250e-d8b5-453a-a06a-799d53c3b6d1/files/_thumb_fb5a5b1ffa000d12-30780.png and /dev/null differ diff --git a/c8fa250e-d8b5-453a-a06a-799d53c3b6d1/files/cover.jpg b/c8fa250e-d8b5-453a-a06a-799d53c3b6d1/files/cover.jpg deleted file mode 100644 index 3cfadc3..0000000 Binary files a/c8fa250e-d8b5-453a-a06a-799d53c3b6d1/files/cover.jpg and /dev/null differ diff --git a/c8fa250e-d8b5-453a-a06a-799d53c3b6d1/index.md b/c8fa250e-d8b5-453a-a06a-799d53c3b6d1/index.md deleted file mode 100644 index a87fc04..0000000 --- a/c8fa250e-d8b5-453a-a06a-799d53c3b6d1/index.md +++ /dev/null @@ -1,27 +0,0 @@ -# LEGO : La brique qui répond - -## La brique qui répond - -À première vue c'est une brique LEGO comme une autre. Un parallélépipède de plastique gris, le format classique, deux par quatre tenons sur le dessus. On pourrait la prendre, l'emboîter dans un mur, et ne rien remarquer. Sauf que celle-là parle. Elle fait du bruit, elle clignote, elle sait si vous la secouez ou si vous la posez à plat. À l'intérieur, LEGO a réussi à caser un accéléromètre, un capteur de lumière, un capteur de couleur, un haut-parleur miniature et une puce sur mesure plus petite qu'un seul tenon. C'est la **LEGO Smart Brick**, et elle est arrivée en boutique le 1ᵉʳ mars 2026. - -Il faut tout de suite tordre le cou à un malentendu. La Smart Brick, ce n'est pas un Mindstorms. Ce n'est pas du LEGO éducatif, ce n'est pas une plateforme pour apprendre à coder, et on ne programme rien du tout avec. C'est un objet beaucoup plus simple dans son intention : faire en sorte qu'un set LEGO réagisse quand on joue avec. Vous prenez le X-Wing de Luke Skywalker, vous le faites basculer pour décoller, le brique embarquée détecte le mouvement et joue le bruit du moteur. Vous posez la minifigurine de Dark Vador à côté, la brique la reconnaît grâce à un Smart Tag (une petite tuile codée), et elle déclenche la respiration emblématique du Seigneur Sith. C'est tout. Mais c'est déjà beaucoup. - -LEGO appelle cet écosystème **Smart Play**. Il repose sur trois éléments. La Smart Brick elle-même, qui est le cerveau et le haut-parleur. Les Smart Tags, des tuiles plates qu'on accroche aux constructions et qui disent à la brique ce qu'elle doit faire à cet endroit (« ici tu joues un bruit de tir laser », « ici tu fais le bruit du réacteur »). Et les Smart Minifigures, des figurines avec un identifiant intégré, que la brique détecte quand on les approche. Le tout communique en local, sans appli obligatoire, sans écran, via un système maison que LEGO a baptisé BrickNet. C'est important : le pari est explicitement de faire de la techno **invisible**, pas de coller un smartphone entre l'enfant et le jouet. - -Côté pratique, la brique se recharge sans fil. Elle tient environ deux heures et demie en jeu actif, se met en veille au bout de trois minutes d'inactivité et se réveille quand on la secoue. Au-delà d'une dizaine d'heures de veille, il faut la remettre sur son chargeur. Une application gratuite, **LEGO SMART Assist**, sert à régler le volume, donner un nom à ses briques, gérer plusieurs appareils, et surtout mettre à jour le firmware — parce que oui, une brique LEGO peut maintenant recevoir des mises à jour logicielles. On y est. - -Pour le lancement, LEGO a choisi Star Wars, et l'offre est un peu plus subtile qu'il n'y paraît. **Huit sets** sortent le 1ᵉʳ mars, mais seulement **trois contiennent réellement une Smart Brick**. Ce sont les coffrets dits *All-In-One*, qui embarquent la brique, son chargeur, des tags et des figurines intelligentes : - -- **75421 — Chasseur TIE de Dark Vador** : 69,99 €, le ticket d'entrée. -- **75423 — Le X-Wing rouge de Luke Skywalker** : 89,99 €. -- **75427 — Duel dans la salle du trône & A-Wing** : 159,99 €, le plus gros, avec **deux** Smart Bricks. - -Les cinq autres sets — Millennium Falcon, Mos Eisley Cantina, AT-ST Endor, hutte de Yoda, Landspeeder de Luke — sont étiquetés Smart Play mais ne contiennent **pas** de brique. Ils embarquent juste des tags et des figurines compatibles. Pour qu'ils s'animent, il faut posséder une brique achetée dans l'un des trois coffrets *All-In-One*, et la déplacer d'un set à l'autre. C'est un choix commercial qu'on peut critiquer : un parent ou un grand-parent qui voit *Smart Play* sur la boîte de la Mos Eisley Cantina à 79,99 € a de quoi être surpris en rentrant à la maison. - -Géographiquement, le lancement est restreint. Six pays seulement à l'ouverture : États-Unis, Royaume-Uni, France, Allemagne, Pologne, Australie. Le reste du monde attendra. - -Pourquoi est-ce intéressant au-delà du cas Star Wars ? Parce que LEGO ne fait pas ça pour vendre trois sets. La marque parle de **plus de vingt brevets** déposés sur la techno, et de la « plus grande évolution du système LEGO depuis l'introduction de la minifigurine en 1978 ». Le ton est ambitieux, et il y a déjà des rumeurs de déclinaisons sur les gammes Pokémon et Animal Crossing. Si le pari réussit, on parle d'une plateforme qui peut s'étendre à toute la production LEGO sur dix ou vingt ans. Si elle échoue, ce sera la deuxième tentative ratée après les Mindstorms et la gamme Boost, dans la longue liste des essais LEGO pour marier l'électronique au plastique. - -Le point qui me semble vraiment réussi, c'est la philosophie sans écran. Là où la plupart des jouets connectés exigent une tablette pour fonctionner, où l'enfant finit en pratique à regarder un iPad plutôt qu'à jouer avec l'objet physique, LEGO a fait le choix inverse : l'application existe mais elle est facultative, toute l'interaction se passe entre les mains et les briques. C'est moins spectaculaire dans une démo marketing, mais c'est probablement plus juste pour des gamins de huit ans. - -Reste à voir ce que ça donne en vrai, sur le tapis du salon, après six mois d'utilisation, quand la batterie sera moins fringante et que la nouveauté se sera émoussée. C'est toujours là que se joue la vraie partie pour ce genre de produit. Mais sur le papier, et c'est rare, LEGO a sorti quelque chose qui ne ressemble à rien d'autre. \ No newline at end of file diff --git a/c8fa250e-d8b5-453a-a06a-799d53c3b6d1/meta.json b/c8fa250e-d8b5-453a-a06a-799d53c3b6d1/meta.json deleted file mode 100644 index 251bb52..0000000 --- a/c8fa250e-d8b5-453a-a06a-799d53c3b6d1/meta.json +++ /dev/null @@ -1,152 +0,0 @@ -{ - "uuid": "c8fa250e-d8b5-453a-a06a-799d53c3b6d1", - "slug": "la-smart-brick-de-lego-quand-la-brique-devient-intelligente", - "title": "LEGO : La brique qui répond", - "author": "cedric@abonnel.fr", - "published": true, - "published_at": "2026-01-13 20:26", - "created_at": "2026-01-13 20:26:53", - "updated_at": "2026-05-11 22:45:23", - "revisions": [ - { - "n": 1, - "date": "2026-05-11 21:54:06", - "comment": "", - "title": "LEGO : La brique qui répond" - }, - { - "n": 2, - "date": "2026-05-11 22:45:23", - "comment": "", - "title": "LEGO : La brique qui répond" - } - ], - "cover": "cover.jpg", - "files_meta": { - "cover.jpg": { - "author": "", - "source_url": "https://thegadgetflow.com/wp-content/uploads/2026/01/LEGO-Interactive-smart-brick-featured-image-1.jpg" - }, - "_thumb_035b34dd014ac80f-635197.jpg": { - "author": "", - "source_url": "" - }, - "_thumb_5913d9738c966833-30567.jpg": { - "author": "", - "source_url": "" - }, - "_thumb_7d6ba93f6ce840e7-13566.webp": { - "author": "", - "source_url": "" - }, - "_thumb_d5dde33b48cd2761-66620.jpg": { - "author": "", - "source_url": "" - }, - "_thumb_e99b946f131256b8-49943.jpg": { - "author": "", - "source_url": "" - }, - "_thumb_fb5a5b1ffa000d12-30780.png": { - "author": "", - "source_url": "" - } - }, - "external_links": [ - { - "url": "https://www.begeek.fr/lego-smart-brick-les-briques-de-la-marque-danoise-deviennent-interactives-426477", - "name": "LEGO Smart Brick : les briques de la marque danoise deviennent interactives", - "added_at": "2026-05-11 21:47:32", - "meta": { - "mime": "text/html", - "size": 36385, - "description": "Avec les Smart Bricks, LEGO transforme chaque construction en une expérience connectée grâce à des capteurs, haut-parleurs et LED intégrés.", - "og_image": "/file?uuid=c8fa250e-d8b5-453a-a06a-799d53c3b6d1&name=_thumb_5913d9738c966833-30567.jpg", - "site_name": "Begeek", - "og_type": "article", - "language": "fr_FR", - "date": "2026-01-07T13:00:51+00:00", - "canonical": "https://www.begeek.fr/lego-smart-brick-les-briques-de-la-marque-danoise-deviennent-interactives-426477" - } - }, - { - "url": "https://www.mac4ever.com/divers/193948-lego-devoile-une-etonnante-brique-intelligente-au-ces-2026", - "name": "LEGO dévoile une étonnante brique intelligente au CES 2026", - "added_at": "2026-05-11 21:47:50", - "meta": { - "mime": "text/html", - "size": 121071, - "description": "Pour sa première apparition au CES de Las Vegas, LEGO frappe fort avec Smart Play, une nouvelle plateforme qui intègre de l'électronique miniaturisée…", - "og_image": "/file?uuid=c8fa250e-d8b5-453a-a06a-799d53c3b6d1&name=_thumb_7d6ba93f6ce840e7-13566.webp", - "site_name": "Mac4Ever", - "og_type": "article", - "language": "fr_FR", - "date": "2026-01-06T09:36:39+01:00", - "canonical": "https://www.mac4ever.com/divers/193948-lego-devoile-une-etonnante-brique-intelligente-au-ces-2026" - } - }, - { - "url": "https://www.clubic.com/actualite-593794-lego-devoile-smart-play-sa-plus-grosse-innovation-depuis-toujours.html", - "name": "LEGO dévoile Smart Play, sa plus grosse innovation \"depuis... toujours\" !", - "added_at": "2026-05-11 21:48:05", - "meta": { - "mime": "text/html", - "size": 251642, - "description": "Dans les couloirs du CES de Las Vegas, la marque LEGO a tenu à dévoiler une toute nouvelle brique intelligente : Smart Brick. Une brique qui va se charger de réagir de manière intelligente (et autonome) à son environnement, sans la moindre application ou écran externe.", - "og_image": "/file?uuid=c8fa250e-d8b5-453a-a06a-799d53c3b6d1&name=_thumb_d5dde33b48cd2761-66620.jpg", - "site_name": "clubic.com", - "og_type": "article", - "language": "fr_FR", - "date": "2026-01-07T09:56:00+01:00", - "canonical": "https://www.clubic.com/actualite-593794-lego-devoile-smart-play-sa-plus-grosse-innovation-depuis-toujours.html" - } - }, - { - "url": "https://www.solutions-magazine.com/lego-smart-brick/", - "name": "LEGO lance sa « smart brick » - Solutions Magazine", - "added_at": "2026-05-11 21:48:23", - "meta": { - "mime": "text/html", - "size": 582486, - "description": "Au CES, Lego a dévoilé un ensemble de nouvelles technologies insérées dans ses futurs jouets. Notamment sa « smart brick »", - "og_image": "/file?uuid=c8fa250e-d8b5-453a-a06a-799d53c3b6d1&name=_thumb_e99b946f131256b8-49943.jpg", - "site_name": "Solutions Magazine", - "og_type": "article", - "language": "fr_FR", - "date": "2026-01-10T15:56:46+00:00", - "canonical": "https://www.solutions-magazine.com/lego-smart-brick/" - } - }, - { - "url": "https://www.lesnumeriques.com/jouet/lego-smart-play-on-a-mis-nos-gros-doigts-sur-la-petite-brique-magique-et-c-est-bluffant-n249358.html", - "name": "Lego Smart Play : on a mis nos gros doigts sur la petite brique magique, et c'est bluffant ! - Les Numériques", - "added_at": "2026-05-11 21:48:38", - "meta": { - "mime": "text/html", - "size": 219016, - "description": "Présentée il y a quelques jours au CES en exclusivité, la brique Lego connectée Smart Brick s'est dévoilée un peu plus à Paris. Après quelques minutes de démonstration, avouons-le : nous regrettons de ne plus avoir 8 ans pour jouer avec sans scrupule.", - "keywords": "lego", - "og_image": "/file?uuid=c8fa250e-d8b5-453a-a06a-799d53c3b6d1&name=_thumb_035b34dd014ac80f-635197.jpg", - "og_type": "article", - "date": "2026-01-11T06:00:00Z", - "canonical": "https://www.lesnumeriques.com/jouet/lego-smart-play-on-a-mis-nos-gros-doigts-sur-la-petite-brique-magique-et-c-est-bluffant-n249358.html" - } - }, - { - "url": "https://www.lego.com/fr-fr/smart-play", - "name": "Système LEGO® SMART Play™ | Boutique LEGO® officielle FR", - "added_at": "2026-05-11 21:48:47", - "meta": { - "mime": "text/html", - "size": 1219325, - "description": "Voici le système LEGO® SMART Play™, conçu pour stimuler la créativité des enfants. Découvrez cette évolution du jeu LEGO® qui vous répond à l’infini ! Plus d’informations ici", - "canonical": "https://www.lego.com/fr-fr/smart-play", - "og_image": "/file?uuid=c8fa250e-d8b5-453a-a06a-799d53c3b6d1&name=_thumb_fb5a5b1ffa000d12-30780.png" - } - } - ], - "seo_title": "", - "seo_description": "", - "og_image": "", - "category": "loisirs" -} diff --git a/c8fa250e-d8b5-453a-a06a-799d53c3b6d1/revisions/0001.md b/c8fa250e-d8b5-453a-a06a-799d53c3b6d1/revisions/0001.md deleted file mode 100644 index 3494d6e..0000000 --- a/c8fa250e-d8b5-453a-a06a-799d53c3b6d1/revisions/0001.md +++ /dev/null @@ -1,25 +0,0 @@ -## La brique qui répond - -À première vue c'est une brique LEGO comme une autre. Un parallélépipède de plastique gris, le format classique, deux par quatre tenons sur le dessus. On pourrait la prendre, l'emboîter dans un mur, et ne rien remarquer. Sauf que celle-là parle. Elle fait du bruit, elle clignote, elle sait si vous la secouez ou si vous la posez à plat. À l'intérieur, LEGO a réussi à caser un accéléromètre, un capteur de lumière, un capteur de couleur, un haut-parleur miniature et une puce sur mesure plus petite qu'un seul tenon. C'est la **LEGO Smart Brick**, et elle est arrivée en boutique le 1ᵉʳ mars 2026. - -Il faut tout de suite tordre le cou à un malentendu. La Smart Brick, ce n'est pas un Mindstorms. Ce n'est pas du LEGO éducatif, ce n'est pas une plateforme pour apprendre à coder, et on ne programme rien du tout avec. C'est un objet beaucoup plus simple dans son intention : faire en sorte qu'un set LEGO réagisse quand on joue avec. Vous prenez le X-Wing de Luke Skywalker, vous le faites basculer pour décoller, le brique embarquée détecte le mouvement et joue le bruit du moteur. Vous posez la minifigurine de Dark Vador à côté, la brique la reconnaît grâce à un Smart Tag (une petite tuile codée), et elle déclenche la respiration emblématique du Seigneur Sith. C'est tout. Mais c'est déjà beaucoup. - -LEGO appelle cet écosystème **Smart Play**. Il repose sur trois éléments. La Smart Brick elle-même, qui est le cerveau et le haut-parleur. Les Smart Tags, des tuiles plates qu'on accroche aux constructions et qui disent à la brique ce qu'elle doit faire à cet endroit (« ici tu joues un bruit de tir laser », « ici tu fais le bruit du réacteur »). Et les Smart Minifigures, des figurines avec un identifiant intégré, que la brique détecte quand on les approche. Le tout communique en local, sans appli obligatoire, sans écran, via un système maison que LEGO a baptisé BrickNet. C'est important : le pari est explicitement de faire de la techno **invisible**, pas de coller un smartphone entre l'enfant et le jouet. - -Côté pratique, la brique se recharge sans fil. Elle tient environ deux heures et demie en jeu actif, se met en veille au bout de trois minutes d'inactivité et se réveille quand on la secoue. Au-delà d'une dizaine d'heures de veille, il faut la remettre sur son chargeur. Une application gratuite, **LEGO SMART Assist**, sert à régler le volume, donner un nom à ses briques, gérer plusieurs appareils, et surtout mettre à jour le firmware — parce que oui, une brique LEGO peut maintenant recevoir des mises à jour logicielles. On y est. - -Pour le lancement, LEGO a choisi Star Wars, et l'offre est un peu plus subtile qu'il n'y paraît. **Huit sets** sortent le 1ᵉʳ mars, mais seulement **trois contiennent réellement une Smart Brick**. Ce sont les coffrets dits *All-In-One*, qui embarquent la brique, son chargeur, des tags et des figurines intelligentes : - -- **75421 — Chasseur TIE de Dark Vador** : 69,99 €, le ticket d'entrée. -- **75423 — Le X-Wing rouge de Luke Skywalker** : 89,99 €. -- **75427 — Duel dans la salle du trône & A-Wing** : 159,99 €, le plus gros, avec **deux** Smart Bricks. - -Les cinq autres sets — Millennium Falcon, Mos Eisley Cantina, AT-ST Endor, hutte de Yoda, Landspeeder de Luke — sont étiquetés Smart Play mais ne contiennent **pas** de brique. Ils embarquent juste des tags et des figurines compatibles. Pour qu'ils s'animent, il faut posséder une brique achetée dans l'un des trois coffrets *All-In-One*, et la déplacer d'un set à l'autre. C'est un choix commercial qu'on peut critiquer : un parent ou un grand-parent qui voit *Smart Play* sur la boîte de la Mos Eisley Cantina à 79,99 € a de quoi être surpris en rentrant à la maison. - -Géographiquement, le lancement est restreint. Six pays seulement à l'ouverture : États-Unis, Royaume-Uni, France, Allemagne, Pologne, Australie. Le reste du monde attendra. - -Pourquoi est-ce intéressant au-delà du cas Star Wars ? Parce que LEGO ne fait pas ça pour vendre trois sets. La marque parle de **plus de vingt brevets** déposés sur la techno, et de la « plus grande évolution du système LEGO depuis l'introduction de la minifigurine en 1978 ». Le ton est ambitieux, et il y a déjà des rumeurs de déclinaisons sur les gammes Pokémon et Animal Crossing. Si le pari réussit, on parle d'une plateforme qui peut s'étendre à toute la production LEGO sur dix ou vingt ans. Si elle échoue, ce sera la deuxième tentative ratée après les Mindstorms et la gamme Boost, dans la longue liste des essais LEGO pour marier l'électronique au plastique. - -Le point qui me semble vraiment réussi, c'est la philosophie sans écran. Là où la plupart des jouets connectés exigent une tablette pour fonctionner, où l'enfant finit en pratique à regarder un iPad plutôt qu'à jouer avec l'objet physique, LEGO a fait le choix inverse : l'application existe mais elle est facultative, toute l'interaction se passe entre les mains et les briques. C'est moins spectaculaire dans une démo marketing, mais c'est probablement plus juste pour des gamins de huit ans. - -Reste à voir ce que ça donne en vrai, sur le tapis du salon, après six mois d'utilisation, quand la batterie sera moins fringante et que la nouveauté se sera émoussée. C'est toujours là que se joue la vraie partie pour ce genre de produit. Mais sur le papier, et c'est rare, LEGO a sorti quelque chose qui ne ressemble à rien d'autre. \ No newline at end of file diff --git a/c8fa250e-d8b5-453a-a06a-799d53c3b6d1/revisions/0002.md b/c8fa250e-d8b5-453a-a06a-799d53c3b6d1/revisions/0002.md deleted file mode 100644 index 6b9d6aa..0000000 --- a/c8fa250e-d8b5-453a-a06a-799d53c3b6d1/revisions/0002.md +++ /dev/null @@ -1,25 +0,0 @@ -## La brique qui répond - -À première vue c'est une brique LEGO comme une autre. Un parallélépipède de plastique gris, le format classique, deux par quatre tenons sur le dessus. On pourrait la prendre, l'emboîter dans un mur, et ne rien remarquer. Sauf que celle-là parle. Elle fait du bruit, elle clignote, elle sait si vous la secouez ou si vous la posez à plat. À l'intérieur, LEGO a réussi à caser un accéléromètre, un capteur de lumière, un capteur de couleur, un haut-parleur miniature et une puce sur mesure plus petite qu'un seul tenon. C'est la **LEGO Smart Brick**, et elle est arrivée en boutique le 1ᵉʳ mars 2026. - -Il faut tout de suite tordre le cou à un malentendu. La Smart Brick, ce n'est pas un Mindstorms. Ce n'est pas du LEGO éducatif, ce n'est pas une plateforme pour apprendre à coder, et on ne programme rien du tout avec. C'est un objet beaucoup plus simple dans son intention : faire en sorte qu'un set LEGO réagisse quand on joue avec. Vous prenez le X-Wing de Luke Skywalker, vous le faites basculer pour décoller, le brique embarquée détecte le mouvement et joue le bruit du moteur. Vous posez la minifigurine de Dark Vador à côté, la brique la reconnaît grâce à un Smart Tag (une petite tuile codée), et elle déclenche la respiration emblématique du Seigneur Sith. C'est tout. Mais c'est déjà beaucoup. - -LEGO appelle cet écosystème **Smart Play**. Il repose sur trois éléments. La Smart Brick elle-même, qui est le cerveau et le haut-parleur. Les Smart Tags, des tuiles plates qu'on accroche aux constructions et qui disent à la brique ce qu'elle doit faire à cet endroit (« ici tu joues un bruit de tir laser », « ici tu fais le bruit du réacteur »). Et les Smart Minifigures, des figurines avec un identifiant intégré, que la brique détecte quand on les approche. Le tout communique en local, sans appli obligatoire, sans écran, via un système maison que LEGO a baptisé BrickNet. C'est important : le pari est explicitement de faire de la techno **invisible**, pas de coller un smartphone entre l'enfant et le jouet. - -Côté pratique, la brique se recharge sans fil. Elle tient environ deux heures et demie en jeu actif, se met en veille au bout de trois minutes d'inactivité et se réveille quand on la secoue. Au-delà d'une dizaine d'heures de veille, il faut la remettre sur son chargeur. Une application gratuite, **LEGO SMART Assist**, sert à régler le volume, donner un nom à ses briques, gérer plusieurs appareils, et surtout mettre à jour le firmware — parce que oui, une brique LEGO peut maintenant recevoir des mises à jour logicielles. On y est. - -Pour le lancement, LEGO a choisi Star Wars, et l'offre est un peu plus subtile qu'il n'y paraît. **Huit sets** sortent le 1ᵉʳ mars, mais seulement **trois contiennent réellement une Smart Brick**. Ce sont les coffrets dits *All-In-One*, qui embarquent la brique, son chargeur, des tags et des figurines intelligentes : - -- **75421 — Chasseur TIE de Dark Vador** : 69,99 €, le ticket d'entrée. -- **75423 — Le X-Wing rouge de Luke Skywalker** : 89,99 €. -- **75427 — Duel dans la salle du trône & A-Wing** : 159,99 €, le plus gros, avec **deux** Smart Bricks. - -Les cinq autres sets — Millennium Falcon, Mos Eisley Cantina, AT-ST Endor, hutte de Yoda, Landspeeder de Luke — sont étiquetés Smart Play mais ne contiennent **pas** de brique. Ils embarquent juste des tags et des figurines compatibles. Pour qu'ils s'animent, il faut posséder une brique achetée dans l'un des trois coffrets *All-In-One*, et la déplacer d'un set à l'autre. C'est un choix commercial qu'on peut critiquer : un parent ou un grand-parent qui voit *Smart Play* sur la boîte de la Mos Eisley Cantina à 79,99 € a de quoi être surpris en rentrant à la maison. - -Géographiquement, le lancement est restreint. Six pays seulement à l'ouverture : États-Unis, Royaume-Uni, France, Allemagne, Pologne, Australie. Le reste du monde attendra. - -Pourquoi est-ce intéressant au-delà du cas Star Wars ? Parce que LEGO ne fait pas ça pour vendre trois sets. La marque parle de **plus de vingt brevets** déposés sur la techno, et de la « plus grande évolution du système LEGO depuis l'introduction de la minifigurine en 1978 ». Le ton est ambitieux, et il y a déjà des rumeurs de déclinaisons sur les gammes Pokémon et Animal Crossing. Si le pari réussit, on parle d'une plateforme qui peut s'étendre à toute la production LEGO sur dix ou vingt ans. Si elle échoue, ce sera la deuxième tentative ratée après les Mindstorms et la gamme Boost, dans la longue liste des essais LEGO pour marier l'électronique au plastique. - -Le point qui me semble vraiment réussi, c'est la philosophie sans écran. Là où la plupart des jouets connectés exigent une tablette pour fonctionner, où l'enfant finit en pratique à regarder un iPad plutôt qu'à jouer avec l'objet physique, LEGO a fait le choix inverse : l'application existe mais elle est facultative, toute l'interaction se passe entre les mains et les briques. C'est moins spectaculaire dans une démo marketing, mais c'est probablement plus juste pour des gamins de huit ans. - -Reste à voir ce que ça donne en vrai, sur le tapis du salon, après six mois d'utilisation, quand la batterie sera moins fringante et que la nouveauté se sera émoussée. C'est toujours là que se joue la vraie partie pour ce genre de produit. Mais sur le papier, et c'est rare, LEGO a sorti quelque chose qui ne ressemble à rien d'autre. \ No newline at end of file diff --git a/c9796eff-43b9-4e51-b613-8eec21a8c352/index.md b/c9796eff-43b9-4e51-b613-8eec21a8c352/index.md deleted file mode 100644 index 9f18005..0000000 --- a/c9796eff-43b9-4e51-b613-8eec21a8c352/index.md +++ /dev/null @@ -1,31 +0,0 @@ -# gitea, prérequis - -Voici les **pré-requis système** (processeur, mémoire, etc.) pour installer **Gitea** sur une distribution **Debian** - ---- - -### **1. Exigences minimales** - -Ces valeurs sont suffisantes pour un petit déploiement personnel ou une petite équipe. - -| Ressource | Minimum recommandé | Détails | -| ------------------- | -------------------------------------------- | --------------------------------------------------------------------------------------------- | -| **CPU** | 2+ vCPU / cœur | Gitea est léger, même un petit processeur type Atom ou 1 vCPU cloud suffit. | -| **RAM** | 1 Go ou + | Le binaire Go est efficace. 1 Go est sûr pour un usage personnel. 2 Go ou plus (pour plusieurs utilisateurs) | -| **Stockage** | ≥ 1 Go libre | Le binaire Gitea fait ~100 Mo, plus les dépôts Git (prévoir plus selon le nombre de projets). | -| **OS** | Debian 12 (Bookworm) ou Debian 13 | Gitea fournit des binaires compatibles. | -| **Base de données** | SQLite, MariaDB/MySQL, PostgreSQL | SQLite pour test/local, PostgreSQL ou MariaDB en prod. | -| **Reverse proxy** | nginx, Caddy, Apache ... avec HTTPS | -| **Utilisateur système** | `git` (non root) pour exécuter le service | - ---- - -### **2. Vérification rapide des ressources** - -Tu peux vérifier ta machine avec : - -```bash -lscpu | grep "Model name" -free -h -df -h / -``` diff --git a/c9796eff-43b9-4e51-b613-8eec21a8c352/meta.json b/c9796eff-43b9-4e51-b613-8eec21a8c352/meta.json deleted file mode 100644 index 2baca1f..0000000 --- a/c9796eff-43b9-4e51-b613-8eec21a8c352/meta.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "uuid": "c9796eff-43b9-4e51-b613-8eec21a8c352", - "slug": "gitea-prerequis", - "title": "gitea, prérequis", - "author": "cedric@abonnel.fr", - "published": true, - "published_at": "2025-11-07 10:57:33", - "created_at": "2025-11-07 10:57:33", - "updated_at": "2025-11-07 10:57:33", - "revisions": [], - "cover": "cover.jpg", - "category": "informatique" -} diff --git a/cb93c086-4b6f-4c32-82a5-208adb14d0bf/files/20220128-104522.png b/cb93c086-4b6f-4c32-82a5-208adb14d0bf/files/20220128-104522.png deleted file mode 100644 index f895ee3..0000000 Binary files a/cb93c086-4b6f-4c32-82a5-208adb14d0bf/files/20220128-104522.png and /dev/null differ diff --git a/cb93c086-4b6f-4c32-82a5-208adb14d0bf/files/ai-thinker.png b/cb93c086-4b6f-4c32-82a5-208adb14d0bf/files/ai-thinker.png deleted file mode 100644 index 40930d8..0000000 Binary files a/cb93c086-4b6f-4c32-82a5-208adb14d0bf/files/ai-thinker.png and /dev/null differ diff --git a/cb93c086-4b6f-4c32-82a5-208adb14d0bf/files/espressif-logo-pratik-panda-clients-2.png b/cb93c086-4b6f-4c32-82a5-208adb14d0bf/files/espressif-logo-pratik-panda-clients-2.png deleted file mode 100644 index 045ac96..0000000 Binary files a/cb93c086-4b6f-4c32-82a5-208adb14d0bf/files/espressif-logo-pratik-panda-clients-2.png and /dev/null differ diff --git a/cb93c086-4b6f-4c32-82a5-208adb14d0bf/files/nodemcuv3.0-pinout.jpg b/cb93c086-4b6f-4c32-82a5-208adb14d0bf/files/nodemcuv3.0-pinout.jpg deleted file mode 100644 index a5d2733..0000000 Binary files a/cb93c086-4b6f-4c32-82a5-208adb14d0bf/files/nodemcuv3.0-pinout.jpg and /dev/null differ diff --git a/cb93c086-4b6f-4c32-82a5-208adb14d0bf/index.md b/cb93c086-4b6f-4c32-82a5-208adb14d0bf/index.md deleted file mode 100644 index 1af856b..0000000 --- a/cb93c086-4b6f-4c32-82a5-208adb14d0bf/index.md +++ /dev/null @@ -1,148 +0,0 @@ -# ESP8266 : panorama du SoC, des modules et des cartes de développement - -## Présentation - -L'**ESP8266** est un microcontrôleur économique intégrant nativement une interface **Wi-Fi 2,4 GHz** (IEEE 802.11 b/g/n) et une pile **TCP/IP**. Il est conçu et commercialisé par **Espressif Systems**, une société chinoise basée à Shanghai et présente à l'international (États-Unis, Inde, République tchèque, Brésil, Singapour). - -Lancé fin **2014**, l'ESP8266 a connu un succès très rapide grâce à un rapport prix / fonctionnalités sans précédent : pour quelques euros, il met à disposition un microcontrôleur 32 bits cadencé à 80 MHz et une connectivité Wi-Fi complète. Sa version la plus connue, l'**ESP-01**, est devenue la porte d'entrée standard vers l'IoT pour le grand public. - -Le SoC a depuis été complété par la famille **ESP32** (cœur Xtensa LX6/LX7 dual-core, Bluetooth en plus du Wi-Fi), puis par les **ESP32-Cx / ESP32-Sx / ESP32-Hx**, mais l'ESP8266 reste massivement utilisé pour les projets simples et peu gourmands. - -## Trois niveaux à ne pas confondre - -Avant d'entrer dans les spécifications, une clarification utile sur le vocabulaire — fréquemment mélangé dans la documentation amateur : - -| Niveau | Définition | Exemples | -|---|---|---| -| **SoC** *(System on Chip)* | Le circuit intégré nu, vendu par Espressif. | ESP8266EX | -| **Module** | Un petit PCB qui embarque le SoC, sa flash, son antenne et un brochage standardisé. | ESP-01, ESP-12E, ESP-WROOM-02 | -| **Carte de développement** | Une carte plus large qui embarque un module + un USB-série + un régulateur + des boutons + des broches au pas standard. | NodeMCU, WeMos D1 mini, Adafruit HUZZAH | - -L'ESP-01 est donc un *module* (vendu par AI-Thinker), pas un SoC ni une carte de développement à proprement parler. - -## Spécifications techniques du SoC ESP8266EX - -### Processeur - -- cœur **Tensilica Xtensa LX106**, RISC 32 bits ; -- cadencé à **80 MHz** par défaut, **160 MHz** en mode overclock logiciel. - -### Mémoire - -- **32 Kio** d'IRAM (instructions) ; -- **32 Kio** de cache d'instructions ; -- **80 Kio** de RAM utilisateur ; -- **16 Kio** de RAM système réservée à l'ETS ; -- pas de ROM ni de flash interne : le code est chargé depuis une **flash SPI externe** (QSPI) pouvant atteindre **16 Mio**, généralement comprise entre 512 Kio et 4 Mio sur les modules vendus. - -### Radio Wi-Fi - -- norme **IEEE 802.11 b/g/n** (2,4 GHz uniquement) ; -- chiffrement **WEP, WPA, WPA2** (mais pas WPA3) ; -- modes **station**, **point d'accès** et **mixte (STA+AP)** ; -- bloc RF intégré (TR switch, balun, LNA, PA, matching network) — le module n'a besoin que de son antenne. - -### Périphériques - -- **17 GPIO** théoriques au niveau du SoC (mais beaucoup sont préemptées par la flash SPI ou non exposées sur les modules courants) ; -- **SPI** matériel ; -- **I²C** logiciel (bit-banging, pas de contrôleur dédié) ; -- **I²S** avec DMA ; -- **UART** matérielle complète sur des broches dédiées ; un second UART en émission seule peut être activé sur GPIO2 ; -- un **ADC 10 bits** unique, par approximations successives, lisible sur la broche TOUT/ADC0. - -### Alimentation - -- tension d'alimentation **3,0 à 3,6 V** (nominal 3,3 V) ; -- pics de courant pouvant atteindre **environ 300 mA** lors des émissions Wi-Fi. - -## Modules à base d'ESP8266 - -Deux familles principales coexistent. AI-Thinker a inondé le marché avec la série « ESP-0x / ESP-1x », pendant qu'Espressif a publié sa propre gamme « ESP-WROOM » plus tardive. - -### Modules AI-Thinker - -![Logo AI-Thinker](ai-thinker.png) - -AI-Thinker a produit une longue série de modules, qui se distinguent essentiellement par leur **facteur de forme**, leur **antenne** (PCB, céramique, IPEX), leur **nombre de broches exposées** et la **taille de la flash** soudée. - -Les plus connus : - -| Module | Particularités | -|---|---| -| **ESP-01** | Le plus compact, 8 broches, antenne PCB, 1 Mo de flash sur les versions noires. Le plus économique, mais GPIO très limités. | -| **ESP-01S** | Version améliorée de l'ESP-01, généralement 1 Mo de flash et LED câblée différemment. | -| **ESP-07** | 16 broches, antenne céramique + connecteur IPEX pour antenne externe, blindage RF. | -| **ESP-12E / ESP-12F / ESP-12S** | Format SMD 22 broches, blindé, antenne PCB. Base de la quasi-totalité des cartes NodeMCU et WeMos. | - -Les autres références (ESP-02 à ESP-11, ESP-13, ESP-14) existent mais ont peu percé en pratique. La plupart sont aujourd'hui difficiles à trouver et n'ont pas d'intérêt particulier face aux ESP-12x. - -### Modules Espressif - -![Logo Espressif](espressif-logo-pratik-panda-clients-2.png) - -Espressif a publié sa propre gamme « WROOM » certifiée FCC/CE, souvent privilégiée pour les produits commerciaux : - -| Module | Antenne | -|---|---| -| **ESP-WROOM-02** | PCB | -| **ESP-WROOM-02D** | PCB (version révisée) | -| **ESP-WROOM-02U** | Connecteur U.FL pour antenne externe | -| **ESP-WROOM-S2** | Variante avec SDIO | - -Liste détaillée et historique des modules sur Wikipédia : - -## Cartes de développement - -Les cartes de développement embarquent un module ESP8266 et tout le nécessaire pour démarrer immédiatement : convertisseur USB-série, régulateur 3,3 V, boutons RESET et FLASH, broches au pas de 2,54 mm, parfois LED utilisateur. - -### NodeMCU - -![Brochage NodeMCU v3](nodemcuv3.0-pinout.jpg) - -La carte la plus populaire de la famille. Elle existe en plusieurs révisions : - -- **v0.9** : module ESP-12, format « large » 47 mm de large ; -- **v1.0** (DEVKIT v1.0) : module ESP-12E, USB-série CP2102, format normalisé ; -- **v3** (« LoLin » et clones) : module ESP-12E ou ESP-12F, USB-série CH340. C'est la version la plus répandue, bien que la numérotation « v3 » soit purement commerciale (non officielle). - -La carte expose la plupart des GPIO du module sous des noms **D0 à D8** propres à NodeMCU, qui ne correspondent **pas** directement aux numéros GPIO de l'ESP8266. Une table de correspondance est indispensable : - -| Étiquette NodeMCU | GPIO ESP8266 | -|---|---| -| D0 | GPIO16 | -| D1 | GPIO5 | -| D2 | GPIO4 | -| D3 | GPIO0 | -| D4 | GPIO2 (LED interne) | -| D5 | GPIO14 | -| D6 | GPIO12 | -| D7 | GPIO13 | -| D8 | GPIO15 | - -### WeMos D1 mini - -Format compact (34 × 25 mm), module ESP-12F, USB-série CH340. Compatible mécaniquement avec un large écosystème de **shields** empilables (relais, OLED, batterie, capteur DHT…). C'est aujourd'hui la carte la plus utilisée pour des projets domotiques. - -### Adafruit HUZZAH - -Carte haut de gamme avec module ESP-12E, régulateur 500 mA, niveau logique compatible avec une logique 5 V via résistances de pull-up. Idéale pour prototyper de manière fiable, mais plus chère et nécessite un FTDI externe sur la version sans USB. - -### Espressif ESP-12E (module) - -Le module ESP-12E n'est pas une carte de développement à proprement parler : c'est le module SMD soudé sur la majorité des NodeMCU et WeMos. Son brochage est cependant utile à connaître lorsqu'on veut concevoir sa propre carte autour de lui. - -![Brochage du module ESP-12E](20220128-104522.png) - -### DOIT ESP-12F - -Carte de prototypage à base de module ESP-12F, comparable à une NodeMCU v3, parfois vendue sous le nom **DOIT DevKit V1**. - -## Pour aller plus loin - -- [L'ESP-01 : présentation et premiers pas](https://varlog.a5l.fr/post/esp-01-presentation-premiers-pas) -- [Premier programme ESP-01 : afficher les informations système](https://varlog.a5l.fr/post/esp-01-premier-programme) -- [ESP8266 : commandes AT](https://varlog.a5l.fr/post/esp8266-commandes-at) -- Documentation officielle Espressif : -- Article Wikipédia (en anglais), plus complet : -``` diff --git a/cb93c086-4b6f-4c32-82a5-208adb14d0bf/meta.json b/cb93c086-4b6f-4c32-82a5-208adb14d0bf/meta.json deleted file mode 100644 index 57d17e1..0000000 --- a/cb93c086-4b6f-4c32-82a5-208adb14d0bf/meta.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "uuid": "cb93c086-4b6f-4c32-82a5-208adb14d0bf", - "slug": "esp8266-panorama-du-soc-des-modules-et-des-cartes-de-developpement", - "title": "ESP8266 : panorama du SoC, des modules et des cartes de développement", - "author": "cedric@abonnel.fr", - "published": true, - "published_at": "2022-01-28 10:47", - "created_at": "2022-01-28 10:47:26", - "updated_at": "2026-05-13 18:32:46", - "revisions": [ - { - "n": 1, - "date": "2026-05-13 18:32:46", - "comment": "Titre modifié, contenu modifié", - "title": "Spécifications de l'ESP8266" - } - ], - "cover": "", - "files_meta": { - "20220128-104522.png": { - "author": "", - "source_url": "" - }, - "ai-thinker.png": { - "author": "", - "source_url": "" - }, - "espressif-logo-pratik-panda-clients-2.png": { - "author": "", - "source_url": "" - }, - "nodemcuv3.0-pinout.jpg": { - "author": "", - "source_url": "" - } - }, - "external_links": [], - "seo_title": "", - "seo_description": "", - "og_image": "", - "category": "Électronique" -} diff --git a/cb93c086-4b6f-4c32-82a5-208adb14d0bf/revisions/0001.md b/cb93c086-4b6f-4c32-82a5-208adb14d0bf/revisions/0001.md deleted file mode 100644 index e576546..0000000 --- a/cb93c086-4b6f-4c32-82a5-208adb14d0bf/revisions/0001.md +++ /dev/null @@ -1,153 +0,0 @@ -Voici une version remaniée : structure clarifiée, données factuelles vérifiées et complétées, distinction nette entre **SoC**, **modules** et **cartes de développement**, et plusieurs corrections importantes. - -```markdown -![Famille ESP8266](dummy.png) - -# L'ESP8266 : panorama du SoC, des modules et des cartes de développement - -## Présentation - -L'**ESP8266** est un microcontrôleur économique intégrant nativement une interface **Wi-Fi 2,4 GHz** (IEEE 802.11 b/g/n) et une pile **TCP/IP**. Il est conçu et commercialisé par **Espressif Systems**, une société chinoise basée à Shanghai et présente à l'international (États-Unis, Inde, République tchèque, Brésil, Singapour). - -Lancé fin **2014**, l'ESP8266 a connu un succès très rapide grâce à un rapport prix / fonctionnalités sans précédent : pour quelques euros, il met à disposition un microcontrôleur 32 bits cadencé à 80 MHz et une connectivité Wi-Fi complète. Sa version la plus connue, l'**ESP-01**, est devenue la porte d'entrée standard vers l'IoT pour le grand public. - -Le SoC a depuis été complété par la famille **ESP32** (cœur Xtensa LX6/LX7 dual-core, Bluetooth en plus du Wi-Fi), puis par les **ESP32-Cx / ESP32-Sx / ESP32-Hx**, mais l'ESP8266 reste massivement utilisé pour les projets simples et peu gourmands. - -## Trois niveaux à ne pas confondre - -Avant d'entrer dans les spécifications, une clarification utile sur le vocabulaire — fréquemment mélangé dans la documentation amateur : - -| Niveau | Définition | Exemples | -|---|---|---| -| **SoC** *(System on Chip)* | Le circuit intégré nu, vendu par Espressif. | ESP8266EX | -| **Module** | Un petit PCB qui embarque le SoC, sa flash, son antenne et un brochage standardisé. | ESP-01, ESP-12E, ESP-WROOM-02 | -| **Carte de développement** | Une carte plus large qui embarque un module + un USB-série + un régulateur + des boutons + des broches au pas standard. | NodeMCU, WeMos D1 mini, Adafruit HUZZAH | - -L'ESP-01 est donc un *module* (vendu par AI-Thinker), pas un SoC ni une carte de développement à proprement parler. - -## Spécifications techniques du SoC ESP8266EX - -### Processeur - -- cœur **Tensilica Xtensa LX106**, RISC 32 bits ; -- cadencé à **80 MHz** par défaut, **160 MHz** en mode overclock logiciel. - -### Mémoire - -- **32 Kio** d'IRAM (instructions) ; -- **32 Kio** de cache d'instructions ; -- **80 Kio** de RAM utilisateur ; -- **16 Kio** de RAM système réservée à l'ETS ; -- pas de ROM ni de flash interne : le code est chargé depuis une **flash SPI externe** (QSPI) pouvant atteindre **16 Mio**, généralement comprise entre 512 Kio et 4 Mio sur les modules vendus. - -### Radio Wi-Fi - -- norme **IEEE 802.11 b/g/n** (2,4 GHz uniquement) ; -- chiffrement **WEP, WPA, WPA2** (mais pas WPA3) ; -- modes **station**, **point d'accès** et **mixte (STA+AP)** ; -- bloc RF intégré (TR switch, balun, LNA, PA, matching network) — le module n'a besoin que de son antenne. - -### Périphériques - -- **17 GPIO** théoriques au niveau du SoC (mais beaucoup sont préemptées par la flash SPI ou non exposées sur les modules courants) ; -- **SPI** matériel ; -- **I²C** logiciel (bit-banging, pas de contrôleur dédié) ; -- **I²S** avec DMA ; -- **UART** matérielle complète sur des broches dédiées ; un second UART en émission seule peut être activé sur GPIO2 ; -- un **ADC 10 bits** unique, par approximations successives, lisible sur la broche TOUT/ADC0. - -### Alimentation - -- tension d'alimentation **3,0 à 3,6 V** (nominal 3,3 V) ; -- pics de courant pouvant atteindre **environ 300 mA** lors des émissions Wi-Fi. - -## Modules à base d'ESP8266 - -Deux familles principales coexistent. AI-Thinker a inondé le marché avec la série « ESP-0x / ESP-1x », pendant qu'Espressif a publié sa propre gamme « ESP-WROOM » plus tardive. - -### Modules AI-Thinker - -![Logo AI-Thinker](ai-thinker.png) - -AI-Thinker a produit une longue série de modules, qui se distinguent essentiellement par leur **facteur de forme**, leur **antenne** (PCB, céramique, IPEX), leur **nombre de broches exposées** et la **taille de la flash** soudée. - -Les plus connus : - -| Module | Particularités | -|---|---| -| **ESP-01** | Le plus compact, 8 broches, antenne PCB, 1 Mo de flash sur les versions noires. Le plus économique, mais GPIO très limités. | -| **ESP-01S** | Version améliorée de l'ESP-01, généralement 1 Mo de flash et LED câblée différemment. | -| **ESP-07** | 16 broches, antenne céramique + connecteur IPEX pour antenne externe, blindage RF. | -| **ESP-12E / ESP-12F / ESP-12S** | Format SMD 22 broches, blindé, antenne PCB. Base de la quasi-totalité des cartes NodeMCU et WeMos. | - -Les autres références (ESP-02 à ESP-11, ESP-13, ESP-14) existent mais ont peu percé en pratique. La plupart sont aujourd'hui difficiles à trouver et n'ont pas d'intérêt particulier face aux ESP-12x. - -### Modules Espressif - -![Logo Espressif](espressif-logo-pratik-panda-clients-2.png) - -Espressif a publié sa propre gamme « WROOM » certifiée FCC/CE, souvent privilégiée pour les produits commerciaux : - -| Module | Antenne | -|---|---| -| **ESP-WROOM-02** | PCB | -| **ESP-WROOM-02D** | PCB (version révisée) | -| **ESP-WROOM-02U** | Connecteur U.FL pour antenne externe | -| **ESP-WROOM-S2** | Variante avec SDIO | - -Liste détaillée et historique des modules sur Wikipédia : - -## Cartes de développement - -Les cartes de développement embarquent un module ESP8266 et tout le nécessaire pour démarrer immédiatement : convertisseur USB-série, régulateur 3,3 V, boutons RESET et FLASH, broches au pas de 2,54 mm, parfois LED utilisateur. - -### NodeMCU - -![Brochage NodeMCU v3](nodemcuv3.0-pinout.jpg) - -La carte la plus populaire de la famille. Elle existe en plusieurs révisions : - -- **v0.9** : module ESP-12, format « large » 47 mm de large ; -- **v1.0** (DEVKIT v1.0) : module ESP-12E, USB-série CP2102, format normalisé ; -- **v3** (« LoLin » et clones) : module ESP-12E ou ESP-12F, USB-série CH340. C'est la version la plus répandue, bien que la numérotation « v3 » soit purement commerciale (non officielle). - -La carte expose la plupart des GPIO du module sous des noms **D0 à D8** propres à NodeMCU, qui ne correspondent **pas** directement aux numéros GPIO de l'ESP8266. Une table de correspondance est indispensable : - -| Étiquette NodeMCU | GPIO ESP8266 | -|---|---| -| D0 | GPIO16 | -| D1 | GPIO5 | -| D2 | GPIO4 | -| D3 | GPIO0 | -| D4 | GPIO2 (LED interne) | -| D5 | GPIO14 | -| D6 | GPIO12 | -| D7 | GPIO13 | -| D8 | GPIO15 | - -### WeMos D1 mini - -Format compact (34 × 25 mm), module ESP-12F, USB-série CH340. Compatible mécaniquement avec un large écosystème de **shields** empilables (relais, OLED, batterie, capteur DHT…). C'est aujourd'hui la carte la plus utilisée pour des projets domotiques. - -### Adafruit HUZZAH - -Carte haut de gamme avec module ESP-12E, régulateur 500 mA, niveau logique compatible avec une logique 5 V via résistances de pull-up. Idéale pour prototyper de manière fiable, mais plus chère et nécessite un FTDI externe sur la version sans USB. - -### Espressif ESP-12E (module) - -Le module ESP-12E n'est pas une carte de développement à proprement parler : c'est le module SMD soudé sur la majorité des NodeMCU et WeMos. Son brochage est cependant utile à connaître lorsqu'on veut concevoir sa propre carte autour de lui. - -![Brochage du module ESP-12E](20220128-104522.png) - -### DOIT ESP-12F - -Carte de prototypage à base de module ESP-12F, comparable à une NodeMCU v3, parfois vendue sous le nom **DOIT DevKit V1**. - -## Pour aller plus loin - -- [L'ESP-01 : présentation et premiers pas](https://varlog.a5l.fr/post/esp-01-presentation-premiers-pas) -- [Premier programme ESP-01 : afficher les informations système](https://varlog.a5l.fr/post/esp-01-premier-programme) -- [ESP8266 : commandes AT](https://varlog.a5l.fr/post/esp8266-commandes-at) -- Documentation officielle Espressif : -- Article Wikipédia (en anglais), plus complet : -``` diff --git a/cd0a1ad7-7559-40e0-96b3-0bfbf4734d18/files/cover.png b/cd0a1ad7-7559-40e0-96b3-0bfbf4734d18/files/cover.png deleted file mode 100644 index c814f06..0000000 Binary files a/cd0a1ad7-7559-40e0-96b3-0bfbf4734d18/files/cover.png and /dev/null differ diff --git a/cd0a1ad7-7559-40e0-96b3-0bfbf4734d18/index.md b/cd0a1ad7-7559-40e0-96b3-0bfbf4734d18/index.md deleted file mode 100644 index 899c5e5..0000000 --- a/cd0a1ad7-7559-40e0-96b3-0bfbf4734d18/index.md +++ /dev/null @@ -1,11 +0,0 @@ -# Forum Alpinux - -Hier soir se tenait le *Repair du Libre* et le *Forum Alpinux* à Chambéry. - -Lors du *Repair du Libre*, une personne est venue pour faire diagnostiquer son ordinateur. Trois points ont été vérifiés : la batterie, le disque dur et l’espace de stockage. La batterie, âgée de plus de 4 ans, était hors service. En revanche, le disque dur était en bon état selon *SmartControl*, et l’espace disque disponible était suffisant. - -Nous avons également tenté d’installer **Linux Mint 22.1** sur un PC sans UEFI, mais l’opération s’est révélée complexe. L’installateur *Ubiquity* prépare le disque en mode GPT, ce qui n’est pas compatible avec une machine équipée d’un BIOS classique, entraînant l’échec de l’installation. - -Par ailleurs, un autre ordinateur présentait un problème de connexion Wi-Fi : le pilote ne se chargeait pas à cause de *Secure Boot*. Une fois ce dernier désactivé, la connexion devrait fonctionner normalement. - -Enfin, avec l’aide de Brice, nous avons échangé autour d’*OpenStreetMap*, *StreetComplete* et *OSMAND~* pendant le *Forum Alpinux*. Une contribution collective via *StreetComplete* est prévue en juin par Alpinux à Chambéry. diff --git a/cd0a1ad7-7559-40e0-96b3-0bfbf4734d18/meta.json b/cd0a1ad7-7559-40e0-96b3-0bfbf4734d18/meta.json deleted file mode 100644 index 8c2b829..0000000 --- a/cd0a1ad7-7559-40e0-96b3-0bfbf4734d18/meta.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "uuid": "cd0a1ad7-7559-40e0-96b3-0bfbf4734d18", - "slug": "forum-alpinux", - "title": "Forum Alpinux", - "author": "cedric@abonnel.fr", - "published": true, - "published_at": "2025-04-04 07:45", - "created_at": "2025-04-04 07:45:00", - "updated_at": "2026-05-12 09:42:07", - "revisions": [], - "cover": "cover.png", - "files_meta": { - "571f5db24ca3ff68-74792.png": { - "author": "Alpinux", - "source_url": "" - } - }, - "external_links": [], - "seo_title": "", - "seo_description": "", - "og_image": "", - "category": "linux" -} diff --git a/cfe738e9-7ac2-4c7e-9205-dab4957835c6/files/dummy.png b/cfe738e9-7ac2-4c7e-9205-dab4957835c6/files/dummy.png deleted file mode 100644 index 58bb881..0000000 Binary files a/cfe738e9-7ac2-4c7e-9205-dab4957835c6/files/dummy.png and /dev/null differ diff --git a/cfe738e9-7ac2-4c7e-9205-dab4957835c6/index.md b/cfe738e9-7ac2-4c7e-9205-dab4957835c6/index.md deleted file mode 100644 index 60c8270..0000000 --- a/cfe738e9-7ac2-4c7e-9205-dab4957835c6/index.md +++ /dev/null @@ -1,76 +0,0 @@ -# Décoder les infos de la TIC et les communiquer - -## Choix du Raspberry Pi - -L'objectif est de récupérer automatiquement et à intervalles réguliers les informations émises par un compteur Linky, puis de les rendre accessibles depuis l'extérieur du Raspberry Pi. - -Trois prérequis matériels s'imposent donc : - -- une **connexion réseau**, pour exposer ou transmettre les données collectées ; -- un **espace de stockage**, suffisant pour l'OS, les outils et l'historique des relevés ; -- une **liaison série**, pour dialoguer avec la sortie TIC du compteur. - -Le choix s'est porté sur un **Raspberry Pi 3**, qui couvre ces trois besoins sans surcoût ni complexité supplémentaire. Le stockage est assuré par une carte SD, la liaison série est exposée sur le port GPIO, et la connectivité réseau bénéficie d'un atout pratique : l'armoire de brassage de la maison se trouve à quelques mètres du compteur électrique, ce qui permet d'envisager un raccordement filaire fiable plutôt qu'un lien sans fil. - -Côté logiciel, le système retenu est **Raspberry Pi OS** (anciennement Raspbian), recommandé par défaut sur cette plateforme. Cette distribution dérivée de Debian apporte tout l'écosystème GNU/Linux nécessaire : pile réseau TCP/IP, accès distant par SSH, synchronisation horaire NTP, gestion de bases de données, serveur web, interpréteurs PHP et Python. Autant de briques qui serviront aux étapes ultérieures du projet. - -## Câblage - -Le compteur Linky émet la trame TIC sous forme d'un **signal modulé en ASK** (Amplitude Shift Keying). Ce signal n'est pas directement exploitable par l'UART du Raspberry Pi, qui attend un niveau logique TTL stable. - -Un **démodulateur ASK** est donc intercalé entre le compteur et le Raspberry Pi. Son rôle est de récupérer la porteuse modulée et de restituer en sortie un signal binaire TTL propre, directement lisible par le port série. - -La chaîne complète est la suivante : - -``` -Compteur Linky → Démodulateur ASK → UART du Raspberry Pi -``` - -Le câblage côté Raspberry Pi se résume à trois fils : - -| Broche | Signal | Rôle | -|---|---|---| -| Pin 1 | **3V3** | Alimentation du démodulateur | -| Pin 6 | **GND** | Masse commune | -| Pin 10 | **RX (GPIO15)** | Lecture de la sortie TTL du démodulateur | - -### Schéma de câblage - -``` - ┌─────────────────────────┐ - │ Compteur Linky │ - │ sortie TIC (ASK) │ - └───────────┬─────────────┘ - │ signal TIC modulé - ▼ - ┌─────────────────────────┐ - │ Démodulateur ASK │ - │ │ - │ IN ← TIC data │ - │ GND ← TIC GND │ - │ │ - │ VCC ─────────────────────► Pin 1 (3V3) - │ GND ─────────────────────► Pin 6 (GND) - │ OUT ─────────────────────► Pin 10 (RX / GPIO15) - └─────────────────────────┘ Raspberry Pi 3 -``` - -## Installation de l'OS - -Le déploiement de Raspberry Pi OS sur la carte SD suit la procédure standard décrite dans l'article [à compléter]. Un point d'attention : **activer le service SSH** dès la préparation de l'image, faute de quoi aucun accès distant ne sera possible au premier démarrage. - -Une fois le Raspberry Pi mis sous tension et raccordé au réseau, son adresse IP n'est pas connue à l'avance. Un balayage du réseau local avec `nmap` permet de l'identifier : - -```bash -nmap -sn 192.168.1.0/24 -``` - -> Note : la cible passée à `nmap` est l'adresse du réseau (`.0/24`), pas celle de la passerelle. Le `/24` indique le masque de sous-réseau et délimite la plage scannée. - -Une fois l'adresse repérée, la connexion s'établit avec le compte `pi` et le mot de passe par défaut `raspberry` : - -```bash -ssh pi@192.168.1.68 -``` - -> Premier réflexe sécurité : changer immédiatement le mot de passe du compte `pi` avec `passwd`, voire désactiver ce compte au profit d'un utilisateur dédié. Les identifiants par défaut sont connus de tous les scans automatisés. diff --git a/cfe738e9-7ac2-4c7e-9205-dab4957835c6/meta.json b/cfe738e9-7ac2-4c7e-9205-dab4957835c6/meta.json deleted file mode 100644 index 846a6cd..0000000 --- a/cfe738e9-7ac2-4c7e-9205-dab4957835c6/meta.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "uuid": "cfe738e9-7ac2-4c7e-9205-dab4957835c6", - "slug": "preparation-du-raspberry-pi", - "title": "Décoder les infos de la TIC et les communiquer", - "author": "cedric@abonnel.fr", - "published": true, - "published_at": "2025-11-19 06:48", - "created_at": "2025-11-19 06:48:01", - "updated_at": "2026-05-12 17:38:19", - "revisions": [ - { - "n": 1, - "date": "2026-05-12 17:38:19", - "comment": "Contenu modifié", - "title": "Décoder les infos de la TIC et les communiquer" - } - ], - "cover": "", - "files_meta": { - "dummy.png": { - "author": "", - "source_url": "" - } - }, - "external_links": [], - "seo_title": "", - "seo_description": "", - "og_image": "", - "category": "Électronique" -} diff --git a/cfe738e9-7ac2-4c7e-9205-dab4957835c6/revisions/0001.md b/cfe738e9-7ac2-4c7e-9205-dab4957835c6/revisions/0001.md deleted file mode 100644 index c040130..0000000 --- a/cfe738e9-7ac2-4c7e-9205-dab4957835c6/revisions/0001.md +++ /dev/null @@ -1,74 +0,0 @@ -## Choix du Raspberry Pi - -L'objectif est de récupérer automatiquement et à intervalles réguliers les informations émises par un compteur Linky, puis de les rendre accessibles depuis l'extérieur du Raspberry Pi. - -Trois prérequis matériels s'imposent donc : - -- une **connexion réseau**, pour exposer ou transmettre les données collectées ; -- un **espace de stockage**, suffisant pour l'OS, les outils et l'historique des relevés ; -- une **liaison série**, pour dialoguer avec la sortie TIC du compteur. - -Le choix s'est porté sur un **Raspberry Pi 3**, qui couvre ces trois besoins sans surcoût ni complexité supplémentaire. Le stockage est assuré par une carte SD, la liaison série est exposée sur le port GPIO, et la connectivité réseau bénéficie d'un atout pratique : l'armoire de brassage de la maison se trouve à quelques mètres du compteur électrique, ce qui permet d'envisager un raccordement filaire fiable plutôt qu'un lien sans fil. - -Côté logiciel, le système retenu est **Raspberry Pi OS** (anciennement Raspbian), recommandé par défaut sur cette plateforme. Cette distribution dérivée de Debian apporte tout l'écosystème GNU/Linux nécessaire : pile réseau TCP/IP, accès distant par SSH, synchronisation horaire NTP, gestion de bases de données, serveur web, interpréteurs PHP et Python. Autant de briques qui serviront aux étapes ultérieures du projet. - -## Câblage - -Le compteur Linky émet la trame TIC sous forme d'un **signal modulé en ASK** (Amplitude Shift Keying). Ce signal n'est pas directement exploitable par l'UART du Raspberry Pi, qui attend un niveau logique TTL stable. - -Un **démodulateur ASK** est donc intercalé entre le compteur et le Raspberry Pi. Son rôle est de récupérer la porteuse modulée et de restituer en sortie un signal binaire TTL propre, directement lisible par le port série. - -La chaîne complète est la suivante : - -``` -Compteur Linky → Démodulateur ASK → UART du Raspberry Pi -``` - -Le câblage côté Raspberry Pi se résume à trois fils : - -| Broche | Signal | Rôle | -|---|---|---| -| Pin 1 | **3V3** | Alimentation du démodulateur | -| Pin 6 | **GND** | Masse commune | -| Pin 10 | **RX (GPIO15)** | Lecture de la sortie TTL du démodulateur | - -### Schéma de câblage - -``` - ┌─────────────────────────┐ - │ Compteur Linky │ - │ sortie TIC (ASK) │ - └───────────┬─────────────┘ - │ signal TIC modulé - ▼ - ┌─────────────────────────┐ - │ Démodulateur ASK │ - │ │ - │ IN ← TIC data │ - │ GND ← TIC GND │ - │ │ - │ VCC ─────────────────────► Pin 1 (3V3) - │ GND ─────────────────────► Pin 6 (GND) - │ OUT ─────────────────────► Pin 10 (RX / GPIO15) - └─────────────────────────┘ Raspberry Pi 3 -``` - -## Installation de l'OS - -Le déploiement de Raspberry Pi OS sur la carte SD suit la procédure standard décrite dans l'article [à compléter]. Un point d'attention : **activer le service SSH** dès la préparation de l'image, faute de quoi aucun accès distant ne sera possible au premier démarrage. - -Une fois le Raspberry Pi mis sous tension et raccordé au réseau, son adresse IP n'est pas connue à l'avance. Un balayage du réseau local avec `nmap` permet de l'identifier : - -```bash -nmap -sn 192.168.1.0/24 -``` - -> Note : la cible passée à `nmap` est l'adresse du réseau (`.0/24`), pas celle de la passerelle. Le `/24` indique le masque de sous-réseau et délimite la plage scannée. - -Une fois l'adresse repérée, la connexion s'établit avec le compte `pi` et le mot de passe par défaut `raspberry` : - -```bash -ssh pi@192.168.1.68 -``` - -> Premier réflexe sécurité : changer immédiatement le mot de passe du compte `pi` avec `passwd`, voire désactiver ce compte au profit d'un utilisateur dédié. Les identifiants par défaut sont connus de tous les scans automatisés. diff --git a/d6571053-2261-4e6e-ab39-3c327ff2e8e4/index.md b/d6571053-2261-4e6e-ab39-3c327ff2e8e4/index.md deleted file mode 100644 index 76a05b2..0000000 --- a/d6571053-2261-4e6e-ab39-3c327ff2e8e4/index.md +++ /dev/null @@ -1,62 +0,0 @@ -# Les stratégies de migration 4G - -### Pression progressive sur la 3G - -Depuis le déploiement massif de la 4G, les opérateurs français ont mis en place des **stratégies ciblées pour inciter les utilisateurs à migrer depuis la 3G**. Même lorsque la 3G suffisait pour des usages quotidiens (email, surf, visioconférence légère), plusieurs leviers ont été utilisés : - -* **Bridage progressif des débits 3G** : réduction systématique des vitesses en itinérance ou sur réseaux saturés. -* **Promotion active de la 4G** : campagnes marketing, forfaits 4G plus attractifs. -* **Optimisation du spectre** : récupération des fréquences 3G (900/1800/2100 MHz) pour augmenter la capacité 4G. -* **Réduction du coût par bit** : la 4G transmet plus de données avec un coût énergétique et matériel inférieur à la 3G, incitant les opérateurs à concentrer les ressources sur la 4G. - -Ces stratégies combinent aspects **techniques, économiques et commerciaux** pour rendre la migration quasi inévitable. - ---- - -### Cas opérateurs : Free, Orange, SFR, Bouygues - -| Opérateur | 3G moyen (Mbit/s) | 4G moyen (Mbit/s) | -| --------- | ----------------- | ----------------- | -| Free | 0,384 | 50–150 | -| Orange | 0,5–1 | 60–200 | -| SFR | 0,5 | 50–150 | -| Bouygues | 0,5 | 50–150 | - -* **Free Mobile** : itinérance 3G bridée à 384 kbit/s pour les abonnés hors 4G, couverture 4G déjà très étendue. -* **Orange** : maintien de la 3G dans les zones rurales, mais réduction progressive des débits pour favoriser la 4G. -* **SFR et Bouygues** : bridage partiel et incitations tarifaires à passer à la 4G. - -> Le tableau montre l’écart spectaculaire entre la 3G bridée et les débits moyens 4G, un argument indirect pour pousser les abonnés vers la nouvelle génération. - ---- - -### Graphique suggéré : part des abonnés 4G vs 3G (2015–2025) - -```mermaid -%% Simulation de la part des abonnés 3G vs 4G -%% Remarque : données représentatives -pie - title Part des abonnés 3G vs 4G (France) - "3G 2015": 70 - "4G 2015": 30 - "3G 2020": 25 - "4G 2020": 75 - "3G 2025": 5 - "4G 2025": 95 -``` - -* Ce graphique illustre la **migration progressive** : alors que la 3G dominait en 2015, elle devient marginale en 2025. -* La stratégie opérateur a donc porté ses fruits : libération de spectre et concentration des ressources sur la 4G. - ---- - -### Narratif - -Même si la 3G suffisait pour de nombreux usages quotidiens, **les opérateurs ont utilisé le bridage et la mise en avant de la 4G comme leviers indirects pour forcer la migration**. - -* **Libération du spectre** : les fréquences 3G peuvent être utilisées pour la 4G et préparer la 5G. -* **Réduction des coûts** : maintenir la 3G est plus coûteux que concentrer les investissements sur la 4G. -* **Pression subtile sur l’utilisateur** : le simple fait de ralentir la 3G encourage la migration sans hausse tarifaire directe. - -> En pratique, cela signifie que la 4G n’est pas seulement une amélioration technique, mais aussi un outil stratégique pour redéployer les ressources et moderniser le réseau. - diff --git a/d6571053-2261-4e6e-ab39-3c327ff2e8e4/meta.json b/d6571053-2261-4e6e-ab39-3c327ff2e8e4/meta.json deleted file mode 100644 index 4b27521..0000000 --- a/d6571053-2261-4e6e-ab39-3c327ff2e8e4/meta.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "uuid": "d6571053-2261-4e6e-ab39-3c327ff2e8e4", - "slug": "les-strategies-de-migration-4g", - "title": "Les stratégies de migration 4G", - "author": "cedric@abonnel.fr", - "published": true, - "published_at": "2025-11-05 08:43:31", - "created_at": "2025-11-05 08:43:31", - "updated_at": "2025-11-05 08:43:31", - "revisions": [], - "cover": "cover.jpg", - "category": "télécom" -} diff --git a/da1b3cec-980d-458c-9d2b-0c950d278f22/index.md b/da1b3cec-980d-458c-9d2b-0c950d278f22/index.md deleted file mode 100644 index 213c29d..0000000 --- a/da1b3cec-980d-458c-9d2b-0c950d278f22/index.md +++ /dev/null @@ -1,22 +0,0 @@ -# Domotique : les vrais problèmes en domotique Zigbee & Home Assistant - -Je suis en train de préparer une vidéo un peu différente de celle que j’ai faite sur *Zigbee, Zigbee2MQTT et Home Assistant*. Cette fois, je veux parler des **problèmes concrets** que je rencontre **au quotidien**, dans une installation domotique qui fonctionne… mais pas toujours comme prévu. - -Par exemple, mon antenne Zigbee — une clé que j’utilise avec Zigbee2MQTT — se **déconnecte régulièrement**, toutes les 5 à 15 minutes. C’est intermittent, difficile à diagnostiquer, et surtout très frustrant. Parfois, elle réapparaît toute seule. D’autres fois, elle oblige à redémarrer le service ou la machine. Et évidemment, quand le Zigbee tombe, **toute la chaîne domotique en dépend** : capteurs inaccessibles, automatisations qui ne se déclenchent plus, etc. - -Je parlerai aussi des **problèmes côté serveur**, comme certaines **mises à jour** de Home Assistant ou d’addons qui ne se passent pas bien : dépendances cassées, redémarrages partiels, ou intégrations qui ne répondent plus comme avant. Ce sont des situations qu’on rencontre tôt ou tard quand on auto-héberge, surtout dans un système évolutif et modulaire comme Home Assistant. - -Problèmes coté objets connectés : -* pile HS -* valeurs incomplètes : il manque par exemple la puissance instantanée -* valeurs incorrectes : la valeur retournée n'est plus du tout correcte (il fait 9°C dehors et la capteur indique -1°), l'energie totale consommée passe de 1234 kW à 950 kW -* répondant de l'objet connecté : l'action n'est pas transmise ou avec avec beaucoup de retard à l'objet connecté quand l'objet de perd pas le réseau. Résolu avec la configuration de Zigbee2MQTT. -* perte de réseau : peut poser des problème lorsqu'on pilote des radiateurs - -Outils nécessaires : -* ssh -* multimètre - -L’objectif de cette vidéo, ce n’est pas de me plaindre ni de critiquer les outils que j’utilise. Au contraire. J’ai choisi cette approche justement parce qu’elle me laisse la main. Mais je veux **montrer aussi la réalité terrain**, au-delà des démonstrations propres et des installations idéales. Parce que ce sont dans ces moments-là — quand on cherche, qu’on teste, qu’on tâtonne — qu’on apprend vraiment comment tout fonctionne. - -Et si je partage ça, c’est aussi pour que **d’autres qui rencontrent les mêmes soucis puissent comparer, proposer, ou tout simplement se rassurer**. Ce n’est pas parfait, mais ça tourne. Et parfois, savoir qu’on n’est pas seul à rencontrer un bug, c’est déjà beaucoup. \ No newline at end of file diff --git a/da1b3cec-980d-458c-9d2b-0c950d278f22/meta.json b/da1b3cec-980d-458c-9d2b-0c950d278f22/meta.json deleted file mode 100644 index ee7c7b6..0000000 --- a/da1b3cec-980d-458c-9d2b-0c950d278f22/meta.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "uuid": "da1b3cec-980d-458c-9d2b-0c950d278f22", - "slug": "domotique-les-vrais-problemes-en-domotique-zigbee-home-assistant", - "title": "Domotique : les vrais problèmes en domotique Zigbee & Home Assistant", - "author": "cedric@abonnel.fr", - "published": true, - "published_at": "2026-05-22 18:00:00", - "created_at": "2026-05-22 18:00:00", - "updated_at": "2025-05-01 06:11:58", - "revisions": [], - "cover": "cover.jpg", - "category": "domotique" -} diff --git a/da406813-bf15-4f4e-a700-2752550224bb/index.md b/da406813-bf15-4f4e-a700-2752550224bb/index.md deleted file mode 100644 index 128a24a..0000000 --- a/da406813-bf15-4f4e-a700-2752550224bb/index.md +++ /dev/null @@ -1,144 +0,0 @@ -# Quand la 3G suffisait… et qu’on vous fait basculer - -Une plongée scientifique et technologique dans l’évolution des réseaux mobiles et la stratégie des opérateurs. - ---- - -## Introduction - -> En 2015, votre 3G suffisait pour le télétravail, la visioconférence et le streaming léger. Aujourd’hui, même pour un simple email, certaines zones semblent plus lentes qu’avant. - -L’histoire des télécommunications mobiles est jalonnée de révolutions techniques. Chaque génération de réseau – de la 2G à la 5G – a apporté des débits supérieurs, des latences réduites et de nouveaux usages. Pourtant, derrière la façade technologique, une stratégie commerciale se dessine : la **migration forcée** des utilisateurs vers les nouvelles générations. Ce dossier examine comment la 3G, la 4G et la 5G se succèdent, comment les opérateurs orchestrent le passage d’une technologie à l’autre, et quels impacts cela a sur l’expérience utilisateur. - ---- - -## La 3G : une technologie encore performante… bridée par les opérateurs - -### Définition et usages - -La 3G (UMTS/HSPA) a marqué un saut qualitatif par rapport à la 2G. Développée à la fin des années 1990 et déployée massivement à partir de 2004, elle permettait : - -* des débits théoriques de 384 kbit/s jusqu’à 42 Mbit/s pour les variantes HSPA+ ; -* des applications comme le surf web, la messagerie instantanée, les appels VoIP et la visioconférence légère ; -* une latence moyenne de 150–200 ms, suffisante pour la plupart des usages bureautiques. - -Pour l’utilisateur lambda, la 3G suffisait amplement. Pourtant, à partir de 2016–2017, certains opérateurs ont commencé à **réduire volontairement les performances**. - -### Exemple concret : Free Mobile - -Free Mobile, en itinérance sur le réseau Orange, a progressivement **bridé les débits 3G** : - -| Année | Débit descendant | Débit montant | -| ----- | ---------------- | ------------- | -| 2016 | ~5 Mbit/s | 0,5–1 Mbit/s | -| 2017 | ~1 Mbit/s | 0,5 Mbit/s | -| 2019 | 768 kbit/s | 384 kbit/s | -| 2020 | 384 kbit/s | 384 kbit/s | - -> Source : [01net – Free Mobile et bridage 3G](https://www.01net.com/actualites/free-mobile-l-itinerance-3g-orange-sera-plus-lente-des-le-1er-janvier-avant-de-disparaitre-1833059.html) - -Les utilisateurs constatent alors que leur expérience, auparavant fluide, devient frustrante : ralentissement du web, vidéos qui ne se chargent pas correctement, visioconférences de qualité médiocre. - -### Pourquoi un bridage ? - -Le bridage de la 3G s’explique par plusieurs facteurs : - -1. **Refarming du spectre** : libérer les fréquences 900/1800/2100 MHz pour la 4G et la 5G ; -2. **Coût d’entretien** : maintenir un réseau 3G coûteux pour des utilisateurs minoritaires n’est plus rentable ; -3. **Incitation à migrer** : les abonnés passent naturellement aux nouvelles technologies pour profiter de meilleurs débits. - -**Schéma suggéré :** flux de données et coût par bit en 3G vs 4G. - ---- - -## La 4G : la révolution nécessaire - -### Définition technique - -La 4G, ou LTE (Long Term Evolution), est une avancée majeure : - -* Débits théoriques : 100 Mbit/s → 1 Gbit/s ; -* Latence : 30–50 ms ; -* Architecture optimisée : eNodeB remplace le contrôleur RNC de la 3G pour réduire les goulots d’étranglement ; -* Utilisations : streaming HD, cloud computing, jeux en ligne, IoT. - -> La 4G a donc transformé l’expérience mobile et a rendu certaines limitations 3G plus visibles que jamais. - -### Stratégies de migration - -Les opérateurs incitent à la migration par : - -* le **bridage des anciennes générations** ; -* la publicité sur les débits 4G/5G ; -* le lancement de forfaits “4G-only”. - -| Opérateur | 3G moyen (Mbit/s) | 4G moyen (Mbit/s) | -| --------- | ----------------- | ----------------- | -| Free | 0,384 | 50–150 | -| Orange | 0,5–1 | 60–200 | -| SFR | 0,5 | 50–150 | -| Bouygues | 0,5 | 50–150 | - -> Graphique suggéré : part des abonnés 4G vs 3G (2015–2025). - ---- - -## La 5G : promesse et réalité - -### Les promesses - -* Débits : 100 Mbit/s → 10 Gbit/s selon fréquence et densité d’antennes ; -* Latence ultra faible : 1–10 ms ; -* Fréquences : 700 MHz → 26 GHz (mmWave) ; -* Usages : cloud gaming, véhicules autonomes, IoT à grande échelle. - -### L’expérience utilisateur - -Même scénario qu’avec la 3G : certaines zones restent en 4G bridée, incitant les utilisateurs à passer à la 5G. La promesse de la 5G ne se réalise pleinement que dans les zones très denses ou les zones pilotes. - -**Schéma suggéré :** architecture 4G vs 5G. - ---- - -## Conséquences pour l’utilisateur - -* **Scénarios pratiques :** visioconférence, streaming, cloud computing, IoT ; -* **Expérience variable selon réseau :** frustration sur 3G bridée, fluidité sur 4G/5G ; -* **Témoignages utilisateurs :** Reddit, forums français, témoignages directs. - -> “Dès qu’on tombe en 3G, rien ne charge correctement… le réseau est volontairement dégradé.” – Reddit - ---- - -## Synthèse scientifique - -| Génération | Débit théorique | Latence | Couverture | Usages possibles | Coût par bit | Bridage existant | -| ---------- | ---------------------- | ---------- | ---------- | -------------------------------------- | ------------ | ---------------------- | -| 3G | 384 kbit/s → 42 Mbit/s | 150–200 ms | Très large | Email, surf, visio légère | Élevé | Itinérance bridée Free | -| 4G | 100 Mbit/s → 1 Gbit/s | 30–50 ms | Large | Streaming HD, jeux, cloud | Moyen | Bridage minoritaire | -| 5G | 100 Mbit/s → 10 Gbit/s | 1–10 ms | Variable | IoT, cloud gaming, véhicules autonomes | Faible | Pas encore | - -> Le bridage apparaît comme une stratégie commerciale autant qu’une conséquence technique, visant à préparer l’utilisateur à migrer vers de nouvelles technologies. - ---- - -## Perspectives et conseils - -* Vérifier la couverture et la technologie disponible selon votre zone ; -* Questionner son opérateur : - - 1. Suis-je sur le réseau propre ou en itinérance ? - 2. Quels sont les débits effectifs en 3G et 4G ? - 3. Quand la 3G sera-t-elle désactivée ? -* Anticiper le passage à la 5G pour certains usages exigeants (IoT, cloud gaming, télétravail intensif). - -> Vous pouvez encore profiter de votre 3G… mais à quel prix ? - ---- - -## Références principales - -1. [01net – Free Mobile et bridage 3G](https://www.01net.com/actualites/free-mobile-l-itinerance-3g-orange-sera-plus-lente-des-le-1er-janvier-avant-de-disparaitre-1833059.html) -2. [Univers Freebox – Bridage 3G](https://www.universfreebox.com/article/47917/Free-Mobile-continue-de-brider-l-itinerance-3G-Orange) -3. [ARCEP – Gestion spectre et couverture](https://www.arcep.fr/) -4. Free Mobile – Fiche information standardisée 2020 ([PDF](https://mobile.free.fr/docs/fis/Fiche_information_standardisee_2020-12-15.pdf)) diff --git a/da406813-bf15-4f4e-a700-2752550224bb/meta.json b/da406813-bf15-4f4e-a700-2752550224bb/meta.json deleted file mode 100644 index 30de07b..0000000 --- a/da406813-bf15-4f4e-a700-2752550224bb/meta.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "uuid": "da406813-bf15-4f4e-a700-2752550224bb", - "slug": "quand-la-3g-suffisait-et-qu-on-vous-fait-basculer", - "title": "Quand la 3G suffisait… et qu’on vous fait basculer", - "author": "cedric@abonnel.fr", - "published": true, - "published_at": "2025-11-05 08:38:25", - "created_at": "2025-11-05 08:38:25", - "updated_at": "2025-11-05 08:38:25", - "revisions": [], - "cover": "cover.jpg", - "category": "télécom" -} diff --git a/ddb53aae-7214-4e3c-8af5-e42da60d8429/files/cover.jpg b/ddb53aae-7214-4e3c-8af5-e42da60d8429/files/cover.jpg deleted file mode 100644 index 575fb91..0000000 Binary files a/ddb53aae-7214-4e3c-8af5-e42da60d8429/files/cover.jpg and /dev/null differ diff --git a/ddb53aae-7214-4e3c-8af5-e42da60d8429/index.md b/ddb53aae-7214-4e3c-8af5-e42da60d8429/index.md deleted file mode 100644 index 7b920bb..0000000 --- a/ddb53aae-7214-4e3c-8af5-e42da60d8429/index.md +++ /dev/null @@ -1,51 +0,0 @@ -# Kobo Elipsa 2E : le cahier A4 numérique qu'on attendait, à quelques détails près - -## Une liseuse qui n'en est plus tout à fait une - -Pendant longtemps, le marché des liseuses s'est tenu à une règle non écrite : une liseuse, c'est petit, c'est noir et blanc, c'est fait pour lire des romans dans le métro. Les tentatives de sortir de ce cadre — Sony DPT-RP1, Onyx Boox, ReMarkable — restaient soit confidentielles, soit positionnées comme des outils de prise de notes pure, sans véritable identité de liseuse. Avec l'**Elipsa 2E**, Kobo assume frontalement l'hybridation. Ce n'est pas une liseuse à laquelle on a ajouté un stylet ; c'est un objet pensé dès le départ comme un *cahier numérique qui sait aussi lire des livres*. - -L'engin est imposant. Écran E-Ink Carta 1200 de 10,3 pouces, résolution 1404 × 1872 pour 227 ppi, processeur dual-core 2 GHz et 32 Go de stockage. Côté tarif, TechRadar la situe autour de 399 dollars ou 349 livres, ce qui la place dans une catégorie où on n'achète plus sur un coup de tête : à ce prix, on attend un usage précis, pas un gadget de chevet. - -## Le format change tout - -Tenir l'Elipsa 2E pour la première fois, c'est comprendre instantanément à qui elle parle. À 10,3 pouces, on est très proche d'une feuille A5, voire d'un cahier d'étudiant — un format qui colle naturellement aux PDF et aux documents grand format. Et c'est là que tout se joue. - -Quiconque a déjà tenté de lire un PDF technique sur une liseuse 6 ou 7 pouces sait à quel point l'exercice est frustrant : on zoome, on déplace, on perd la mise en page, les schémas explosent en morceaux. Avec l'Elipsa 2E, un PDF A4 passe à l'écran à une taille parfaitement lisible, sans gymnastique. Les manuels techniques, les articles scientifiques, les supports de cours, les rapports d'entreprise : tout ce qui était pénible devient confortable. C'est moins spectaculaire que la couleur d'une Libra Colour, mais sur un usage professionnel ou étudiant intensif, le format change littéralement la nature de l'objet. - -## Le stylet, atout central — mais imparfait - -Le stylet est inclus dans la boîte. Détail qui n'a l'air de rien mais qui mérite d'être souligné, parce que l'usage prévu est clairement l'annotation directe sur les e-books et la prise de notes manuscrites. Pas de Kobo Stylus 2 à racheter en option, pas de configuration séparée : on déballe, on écrit. - -L'utilisation est exactement ce qu'on en attend. On peut surligner dans n'importe quel ePub, écrire dans la marge, créer des carnets vierges pour des notes manuscrites, dessiner des schémas à main levée. Tout ce qu'on griffonne reste dans le fichier, et — point essentiel — peut être ressorti ensuite. Le système prend en charge ePub, PDF, et accepte sans broncher les fichiers déposés par USB-C, Wi-Fi ou Bluetooth. - -Mais il faut être honnête : la sensation d'écriture n'est pas au niveau de ce que proposent les meilleurs concurrents. eWritable est même cinglant, qualifiant l'expérience tactile d'« horrible » et pointant le choix par Kobo du protocole Microsoft Pen Protocol (MPP 2.0) plutôt que la technologie Wacom qui équipe le ReMarkable 2 et reste la référence du secteur. Concrètement, qu'est-ce que ça veut dire ? Que la pointe glisse un peu trop sur le verre, qu'il manque cette résistance subtile qui fait penser au crayon sur papier, et qu'à très haute vitesse d'écriture la latence devient perceptible. Pour quelqu'un qui annote ses lectures, surligne, prend des notes ponctuelles, c'est largement suffisant. Pour quelqu'un qui veut remplacer son carnet Moleskine en cours magistral et écrire trois pages d'affilée à vitesse normale, ce sera frustrant. - -C'est une différence de positionnement, pas un défaut technique grave : l'Elipsa 2E est d'abord une liseuse qui annote, pas un cahier qui sait aussi lire. - -## L'export des annotations, ce qui fait vraiment la différence - -C'est probablement le point sur lequel Kobo creuse l'écart avec ses concurrents, et notamment avec le Kindle Scribe. Le manuel officiel explique qu'on peut exporter ses annotations sous forme de fichier .txt et le récupérer sur son ordinateur, mais en réalité l'écosystème va plus loin : les PDF annotés ressortent avec les annotations intégrées à la page, prêts à être imprimés ou partagés. - -Ce flux, en apparence banal, change tout pour qui travaille sérieusement avec ses lectures. Un étudiant peut annoter ses cours et imprimer la version surlignée pour les révisions. Un enseignant peut corriger des copies en PDF et renvoyer le fichier annoté à l'élève. Un consultant peut lire un rapport, le commenter en marge, le réintégrer dans sa documentation projet. Aucune annotation perdue, aucune resaisie. Là où Kindle Scribe limite encore largement l'export de ses annotations, Kobo joue le jeu de l'ouverture. - -## Le talon d'Achille : l'entrée des fichiers - -C'est ici que l'Elipsa 2E montre ses limites les plus tangibles, et il faut le savoir avant d'acheter. Contrairement à Kindle, il n'existe pas d'adresse e-mail officielle « envoyer à ma liseuse » : il faut transférer les fichiers manuellement, par USB ou via un service tiers comme Dropbox. Pour qui s'envoie régulièrement des articles ou des e-books depuis son ordinateur ou son téléphone, ce manque crée une vraie friction quotidienne. - -Les workarounds existent, à condition d'accepter de mettre un peu les mains dans le moteur. Un projet open source baptisé KoboMail propose un système d'envoi par e-mail pour certaines Kobo, et plus intéressant encore, un daemon Nextcloud-Kobo permet de synchroniser automatiquement un dossier Nextcloud via WebDAV vers la liseuse. C'est ouvert, c'est élégant, ça respecte le principe d'auto-hébergement — mais ce n'est pas du *plug and play*. Il faut un serveur Nextcloud opérationnel, savoir configurer une connexion WebDAV, et accepter que l'installation se fasse dans le dossier `/mnt/onboard/.adds/` du système Kobo. Bref, c'est superbe pour qui maîtrise déjà son infrastructure ; c'est rédhibitoire pour qui veut juste une solution clé en main. - -Sur ce point précis, Kobo et Amazon proposent deux philosophies opposées : le confort immédiat d'un écosystème fermé contre la liberté d'un écosystème ouvert mais exigeant. À vous de voir où vous vous situez. - -## Pour qui ce produit a-t-il du sens ? - -L'Elipsa 2E est faite pour vous si vous lisez beaucoup de documents grand format — PDF techniques, cours universitaires, rapports professionnels, partitions — et si l'idée d'annoter ces documents fait partie intégrante de votre flux de travail. Elle est faite pour vous si vous voulez un objet unique au lieu de jongler entre une liseuse classique et un cahier papier. Elle est faite pour vous, aussi, si vous avez déjà (ou êtes prêt à monter) un Nextcloud ou un Dropbox pour synchroniser vos fichiers proprement. - -Elle ne l'est pas si votre priorité est la prise de notes manuscrite intensive et fluide : sur ce terrain, un ReMarkable 2 ou un Supernote restent supérieurs. Elle ne l'est pas non plus si vous attendez le confort de l'envoi par e-mail à la Kindle, ou si l'idée d'installer un plugin communautaire pour combler un manque officiel vous donne de l'urticaire. Et elle est sans doute disproportionnée si vous lisez essentiellement des romans : à ce moment-là, une Clara BW à 150 € vous donnera plus de plaisir, dans un format de poche. - -## Mon avis - -L'Elipsa 2E est un produit ambitieux qui réussit l'essentiel et trébuche sur quelques détails finalement révélateurs. L'essentiel, c'est le format, la qualité de l'écran, l'export des annotations, l'ouverture du système et l'autonomie typique d'une liseuse — autant de raisons qui en font la meilleure proposition du marché pour un usage documentaire sérieux à ce niveau de prix. - -Les détails, ce sont le ressenti perfectible du stylet et l'absence d'un système d'entrée des fichiers digne de 2026. Kobo aurait pu intégrer nativement WebDAV — ça lui coûterait à peu près rien — et opter pour une dalle Wacom — ça lui coûterait plus cher mais lui ferait gagner une catégorie entière d'utilisateurs. À la place, on hérite d'un produit excellent à 80 %, et qui demande qu'on accepte ses zones grises sur les 20 % restants. - -Pour qui cherche un véritable cahier A4 numérique sans basculer dans une tablette Android Onyx — plus chère, plus complexe, et au confort de lecture moindre — l'Elipsa 2E reste, à mes yeux, le meilleur compromis du moment. Pas le produit parfait. Le meilleur compromis. Ce n'est pas la même chose, et c'est très bien aussi. \ No newline at end of file diff --git a/ddb53aae-7214-4e3c-8af5-e42da60d8429/meta.json b/ddb53aae-7214-4e3c-8af5-e42da60d8429/meta.json deleted file mode 100644 index 7bc0e71..0000000 --- a/ddb53aae-7214-4e3c-8af5-e42da60d8429/meta.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "uuid": "ddb53aae-7214-4e3c-8af5-e42da60d8429", - "slug": "kobo-elipsa-2e-le-cahier-a4-numerique-qu-on-attendait-a-quelques-details-pres", - "title": "Kobo Elipsa 2E : le cahier A4 numérique qu'on attendait, à quelques détails près", - "author": "cedric@abonnel.fr", - "published": true, - "published_at": "2025-11-09 12:07", - "created_at": "2025-11-09 12:07:00", - "updated_at": "2026-05-12 01:43:39", - "revisions": [ - { - "n": 1, - "date": "2026-05-12 01:43:39", - "comment": "", - "title": "Kobo Elipsa 2E : le cahier A4 numérique qu'on attendait, à quelques détails près" - } - ], - "cover": "cover.jpg", - "files_meta": { - "cover.jpg": { - "author": "", - "source_url": "https://fwd.nl/app/uploads/Kobo-Elipsa-2E-620x410.jpg" - } - }, - "external_links": [ - { - "url": "https://fwd.nl/app/uploads/Kobo-Elipsa-2E-620x410.jpg", - "name": "Kobo Eclipse", - "added_at": "2026-05-12 01:42:43", - "meta": { - "mime": "image/jpeg", - "size": 48877, - "width": 620 - } - } - ], - "seo_title": "", - "seo_description": "", - "og_image": "", - "category": "loisirs" -} diff --git a/ddb53aae-7214-4e3c-8af5-e42da60d8429/revisions/0001.md b/ddb53aae-7214-4e3c-8af5-e42da60d8429/revisions/0001.md deleted file mode 100644 index 2dcf064..0000000 --- a/ddb53aae-7214-4e3c-8af5-e42da60d8429/revisions/0001.md +++ /dev/null @@ -1,49 +0,0 @@ -## Une liseuse qui n'en est plus tout à fait une - -Pendant longtemps, le marché des liseuses s'est tenu à une règle non écrite : une liseuse, c'est petit, c'est noir et blanc, c'est fait pour lire des romans dans le métro. Les tentatives de sortir de ce cadre — Sony DPT-RP1, Onyx Boox, ReMarkable — restaient soit confidentielles, soit positionnées comme des outils de prise de notes pure, sans véritable identité de liseuse. Avec l'**Elipsa 2E**, Kobo assume frontalement l'hybridation. Ce n'est pas une liseuse à laquelle on a ajouté un stylet ; c'est un objet pensé dès le départ comme un *cahier numérique qui sait aussi lire des livres*. - -L'engin est imposant. Écran E-Ink Carta 1200 de 10,3 pouces, résolution 1404 × 1872 pour 227 ppi, processeur dual-core 2 GHz et 32 Go de stockage. Côté tarif, TechRadar la situe autour de 399 dollars ou 349 livres, ce qui la place dans une catégorie où on n'achète plus sur un coup de tête : à ce prix, on attend un usage précis, pas un gadget de chevet. - -## Le format change tout - -Tenir l'Elipsa 2E pour la première fois, c'est comprendre instantanément à qui elle parle. À 10,3 pouces, on est très proche d'une feuille A5, voire d'un cahier d'étudiant — un format qui colle naturellement aux PDF et aux documents grand format. Et c'est là que tout se joue. - -Quiconque a déjà tenté de lire un PDF technique sur une liseuse 6 ou 7 pouces sait à quel point l'exercice est frustrant : on zoome, on déplace, on perd la mise en page, les schémas explosent en morceaux. Avec l'Elipsa 2E, un PDF A4 passe à l'écran à une taille parfaitement lisible, sans gymnastique. Les manuels techniques, les articles scientifiques, les supports de cours, les rapports d'entreprise : tout ce qui était pénible devient confortable. C'est moins spectaculaire que la couleur d'une Libra Colour, mais sur un usage professionnel ou étudiant intensif, le format change littéralement la nature de l'objet. - -## Le stylet, atout central — mais imparfait - -Le stylet est inclus dans la boîte. Détail qui n'a l'air de rien mais qui mérite d'être souligné, parce que l'usage prévu est clairement l'annotation directe sur les e-books et la prise de notes manuscrites. Pas de Kobo Stylus 2 à racheter en option, pas de configuration séparée : on déballe, on écrit. - -L'utilisation est exactement ce qu'on en attend. On peut surligner dans n'importe quel ePub, écrire dans la marge, créer des carnets vierges pour des notes manuscrites, dessiner des schémas à main levée. Tout ce qu'on griffonne reste dans le fichier, et — point essentiel — peut être ressorti ensuite. Le système prend en charge ePub, PDF, et accepte sans broncher les fichiers déposés par USB-C, Wi-Fi ou Bluetooth. - -Mais il faut être honnête : la sensation d'écriture n'est pas au niveau de ce que proposent les meilleurs concurrents. eWritable est même cinglant, qualifiant l'expérience tactile d'« horrible » et pointant le choix par Kobo du protocole Microsoft Pen Protocol (MPP 2.0) plutôt que la technologie Wacom qui équipe le ReMarkable 2 et reste la référence du secteur. Concrètement, qu'est-ce que ça veut dire ? Que la pointe glisse un peu trop sur le verre, qu'il manque cette résistance subtile qui fait penser au crayon sur papier, et qu'à très haute vitesse d'écriture la latence devient perceptible. Pour quelqu'un qui annote ses lectures, surligne, prend des notes ponctuelles, c'est largement suffisant. Pour quelqu'un qui veut remplacer son carnet Moleskine en cours magistral et écrire trois pages d'affilée à vitesse normale, ce sera frustrant. - -C'est une différence de positionnement, pas un défaut technique grave : l'Elipsa 2E est d'abord une liseuse qui annote, pas un cahier qui sait aussi lire. - -## L'export des annotations, ce qui fait vraiment la différence - -C'est probablement le point sur lequel Kobo creuse l'écart avec ses concurrents, et notamment avec le Kindle Scribe. Le manuel officiel explique qu'on peut exporter ses annotations sous forme de fichier .txt et le récupérer sur son ordinateur, mais en réalité l'écosystème va plus loin : les PDF annotés ressortent avec les annotations intégrées à la page, prêts à être imprimés ou partagés. - -Ce flux, en apparence banal, change tout pour qui travaille sérieusement avec ses lectures. Un étudiant peut annoter ses cours et imprimer la version surlignée pour les révisions. Un enseignant peut corriger des copies en PDF et renvoyer le fichier annoté à l'élève. Un consultant peut lire un rapport, le commenter en marge, le réintégrer dans sa documentation projet. Aucune annotation perdue, aucune resaisie. Là où Kindle Scribe limite encore largement l'export de ses annotations, Kobo joue le jeu de l'ouverture. - -## Le talon d'Achille : l'entrée des fichiers - -C'est ici que l'Elipsa 2E montre ses limites les plus tangibles, et il faut le savoir avant d'acheter. Contrairement à Kindle, il n'existe pas d'adresse e-mail officielle « envoyer à ma liseuse » : il faut transférer les fichiers manuellement, par USB ou via un service tiers comme Dropbox. Pour qui s'envoie régulièrement des articles ou des e-books depuis son ordinateur ou son téléphone, ce manque crée une vraie friction quotidienne. - -Les workarounds existent, à condition d'accepter de mettre un peu les mains dans le moteur. Un projet open source baptisé KoboMail propose un système d'envoi par e-mail pour certaines Kobo, et plus intéressant encore, un daemon Nextcloud-Kobo permet de synchroniser automatiquement un dossier Nextcloud via WebDAV vers la liseuse. C'est ouvert, c'est élégant, ça respecte le principe d'auto-hébergement — mais ce n'est pas du *plug and play*. Il faut un serveur Nextcloud opérationnel, savoir configurer une connexion WebDAV, et accepter que l'installation se fasse dans le dossier `/mnt/onboard/.adds/` du système Kobo. Bref, c'est superbe pour qui maîtrise déjà son infrastructure ; c'est rédhibitoire pour qui veut juste une solution clé en main. - -Sur ce point précis, Kobo et Amazon proposent deux philosophies opposées : le confort immédiat d'un écosystème fermé contre la liberté d'un écosystème ouvert mais exigeant. À vous de voir où vous vous situez. - -## Pour qui ce produit a-t-il du sens ? - -L'Elipsa 2E est faite pour vous si vous lisez beaucoup de documents grand format — PDF techniques, cours universitaires, rapports professionnels, partitions — et si l'idée d'annoter ces documents fait partie intégrante de votre flux de travail. Elle est faite pour vous si vous voulez un objet unique au lieu de jongler entre une liseuse classique et un cahier papier. Elle est faite pour vous, aussi, si vous avez déjà (ou êtes prêt à monter) un Nextcloud ou un Dropbox pour synchroniser vos fichiers proprement. - -Elle ne l'est pas si votre priorité est la prise de notes manuscrite intensive et fluide : sur ce terrain, un ReMarkable 2 ou un Supernote restent supérieurs. Elle ne l'est pas non plus si vous attendez le confort de l'envoi par e-mail à la Kindle, ou si l'idée d'installer un plugin communautaire pour combler un manque officiel vous donne de l'urticaire. Et elle est sans doute disproportionnée si vous lisez essentiellement des romans : à ce moment-là, une Clara BW à 150 € vous donnera plus de plaisir, dans un format de poche. - -## Mon avis - -L'Elipsa 2E est un produit ambitieux qui réussit l'essentiel et trébuche sur quelques détails finalement révélateurs. L'essentiel, c'est le format, la qualité de l'écran, l'export des annotations, l'ouverture du système et l'autonomie typique d'une liseuse — autant de raisons qui en font la meilleure proposition du marché pour un usage documentaire sérieux à ce niveau de prix. - -Les détails, ce sont le ressenti perfectible du stylet et l'absence d'un système d'entrée des fichiers digne de 2026. Kobo aurait pu intégrer nativement WebDAV — ça lui coûterait à peu près rien — et opter pour une dalle Wacom — ça lui coûterait plus cher mais lui ferait gagner une catégorie entière d'utilisateurs. À la place, on hérite d'un produit excellent à 80 %, et qui demande qu'on accepte ses zones grises sur les 20 % restants. - -Pour qui cherche un véritable cahier A4 numérique sans basculer dans une tablette Android Onyx — plus chère, plus complexe, et au confort de lecture moindre — l'Elipsa 2E reste, à mes yeux, le meilleur compromis du moment. Pas le produit parfait. Le meilleur compromis. Ce n'est pas la même chose, et c'est très bien aussi. \ No newline at end of file diff --git a/e1e8a0c1-6971-4357-9aaa-7e7a748922f3/files/b116a3e7b4b54c5c-13369.svg b/e1e8a0c1-6971-4357-9aaa-7e7a748922f3/files/b116a3e7b4b54c5c-13369.svg deleted file mode 100644 index 6bdeaff..0000000 --- a/e1e8a0c1-6971-4357-9aaa-7e7a748922f3/files/b116a3e7b4b54c5c-13369.svg +++ /dev/null @@ -1,206 +0,0 @@ - - -cron vs timers systemd : comparaison des capacités -Comparaison visuelle en deux colonnes entre cron (à gauche) et les timers systemd (à droite). Chaque ligne représente une capacité de planification : syntaxe d'horaire, rattrapage des jobs ratés, logging, dépendances, jitter, limites de ressources, vue consolidée. La colonne cron coche les bases, la colonne systemd coche toutes les capacités. - - - - - - - - - - - - - - - - - - - - - - cron - depuis 1975 — simple, partout - - - - - - - - - - - - - - - - - - - - - systemd timer - intégré, déclaratif, observable - - - -syntaxe d'horaire -rattrapage si éteint -logs intégrés -dépendances -jitter (anti pics) -limites cgroups -vue consolidée -fuseaux horaires -portabilité (BSD, Alpine) - - - - - - - - - - - - - ! - 0 2 * * * (cryptique) - - - - - - OnCalendar=Mon..Fri 02:00 - - - - - - - - - job sauté en silence - - - - - - Persistent=true - - - - - - - ! - mail ou redirection manuelle - - - - - - journalctl -u nom.service - - - - - - - - - aucune (sleep + boucle) - - - - - - After=network-online.target - - - - - - - - - sleep $((RANDOM % N)) - - - - - - RandomizedDelaySec=15min - - - - - - - - - nice + ionice au mieux - - - - - - CPUQuota=50% MemoryMax=1G - - - - - - - - - cron.d, cron.daily, users… - - - - - - systemctl list-timers - - - - - - - - - fuseau système uniquement - - - - - - 09:00:00 Europe/Paris - - - - - - - - BSD, macOS, conteneurs - - - - - - - Linux systemd uniquement - - - - -cron pour la simplicité et la portabilité — systemd dès que la tâche devient critique - diff --git a/e1e8a0c1-6971-4357-9aaa-7e7a748922f3/index.md b/e1e8a0c1-6971-4357-9aaa-7e7a748922f3/index.md deleted file mode 100644 index f940b21..0000000 --- a/e1e8a0c1-6971-4357-9aaa-7e7a748922f3/index.md +++ /dev/null @@ -1,253 +0,0 @@ -# Quand systemd remplace cron : pourquoi (et comment) migrer ses tâches planifiées - -*Cron tourne sur Linux depuis 1975. Il a fait son temps pour beaucoup d'usages : voici ce que les timers systemd apportent, et comment basculer sans tout casser.* - -## Pourquoi cron reste partout - -`cron` est l'un des plus anciens outils Unix encore en service. Son principe tient en deux idées : un démon qui se réveille toutes les minutes, et un fichier texte — la crontab — où chaque ligne décrit une commande et son moment d'exécution avec cinq champs (minute, heure, jour du mois, mois, jour de la semaine). - -``` -# m h dom mon dow command -0 2 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1 -``` - -Cinquante ans plus tard, ça marche. C'est installé partout, c'est documenté à mort, ça tient sur une ligne, et n'importe quel administrateur sait lire `0 2 * * *`. Pour beaucoup de besoins simples — « lancer ce script tous les jours à 2h du matin » — cron reste le bon choix. - -Le problème est que les besoins ont rarement été aussi simples depuis longtemps. - -## Les limites de cron qu'on finit toujours par rencontrer - -À chaque administration de serveur sérieuse, on retombe sur les mêmes frustrations. - -**La machine était éteinte au moment du job.** Cron saute purement et simplement l'occurrence ratée. Si le portable de l'utilisateur dormait à 2h, la sauvegarde quotidienne n'aura pas lieu — point. Le job s'exécutera de nouveau le lendemain à 2h, sans rattrapage, sans alerte. - -**Les logs sont dispersés ou perdus.** Par défaut, la sortie standard du job est envoyée par mail à l'utilisateur (si `MAILTO` est défini et qu'un MTA tourne) ou simplement perdue. Le démon lui-même logue dans syslog quand il *démarre* un job, mais pas son contenu. Diagnostiquer pourquoi un job a échoué la semaine dernière relève souvent de l'archéologie. - -**Pas de dépendances.** Un job qui doit attendre que le réseau soit monté, qu'un point de montage soit présent, qu'un autre service ait fini son démarrage : cron ne sait pas exprimer ça. La parade habituelle — un `sleep 60` ou un `@reboot` suivi d'une boucle d'attente — fonctionne mais reste un bricolage. - -**Pas de recouvrement entre exécutions.** Si un job de 5 minutes en prend 7 ce jour-là, cron lance la prochaine occurrence pile au moment où la précédente tourne encore. Deux instances simultanées d'un script de synchronisation, c'est rarement ce qu'on veut. - -**Pas de jitter, pas de randomisation.** Quand cinquante VMs lancent leur `cron.daily` toutes en même temps à 6h25 (l'heure d'anacron par défaut sur Debian), le pic de charge sur l'hyperviseur est garanti. Cron n'offre aucune primitive pour étaler les exécutions. - -**Pas de visibilité globale.** Pour répondre à « quels jobs vont tourner aujourd'hui sur cette machine ? », il faut lire la crontab système, les crontabs utilisateur (`/var/spool/cron/`), le contenu de `/etc/cron.d/`, `/etc/cron.daily/`, `/etc/cron.hourly/`, etc. Aucune commande ne donne la vue consolidée. - -**Pas d'isolation, pas de quota.** Le job s'exécute avec les privilèges et les ressources du shell qui l'a lancé. Aucune façon native de limiter à 50 % de CPU, à 1 Go de RAM, ou de couper si ça dépasse 10 minutes. - -Aucun de ces points ne rend cron inutilisable. Mais accumulés sur une dizaine de jobs critiques, ils transforment l'administration en travail de surveillance permanente. - -## Ce qu'apporte un timer systemd - -Sur toute distribution Linux moderne basée sur systemd (la quasi-totalité, hors BSD, Alpine, Gentoo et quelques cas particuliers), une alternative native existe : les **timers**. Le principe est différent dès le départ. - -Un timer systemd, c'est **deux fichiers** au lieu d'une ligne : - -- Un fichier `.service` qui décrit **ce qu'il faut faire** — exactement comme on décrit un service classique, en mode `Type=oneshot` pour un job ponctuel -- Un fichier `.timer` qui décrit **quand le faire** — ce sont les règles de déclenchement - -Cette séparation entre le « quoi » et le « quand » est plus verbeuse au départ, mais elle débloque tout le reste. - -### Une syntaxe d'horaire lisible - -Là où cron oblige à mentaliser `0 2 * * 1-5`, systemd écrit : - -```ini -OnCalendar=Mon..Fri 02:00:00 -``` - -Et la commande `systemd-analyze calendar "Mon..Fri 02:00:00"` valide l'expression en montrant la prochaine exécution prévue. Une erreur de jour-de-semaine ou un décalage horaire ne plante pas en silence : on le voit avant de déployer. - -D'autres formes utiles que cron ne sait pas exprimer : - -```ini -OnCalendar=*-*-* 02..04:00:00 # toutes les heures entre 2h et 4h -OnCalendar=*-*-01 03:00:00 # tous les 1er du mois à 3h -OnCalendar=*-*-* 09:00:00 Europe/Paris # à 9h heure de Paris, été comme hiver -``` - -Le support natif des fuseaux horaires est une avancée significative pour qui gère des serveurs distribués géographiquement — cron ignore tout du concept et tourne sur le fuseau du système. - -### Du temps relatif, pas seulement du temps absolu - -Cron raisonne uniquement en horloge murale (« tel jour, à telle heure »). systemd ajoute le **temps monotone**, relatif à un événement : - -```ini -OnBootSec=10min # 10 minutes après le démarrage -OnUnitActiveSec=6h # toutes les 6 heures après la dernière exécution -OnStartupSec=5min # 5 minutes après le démarrage de systemd -``` - -`OnUnitActiveSec=6h` règle proprement le problème des exécutions qui se chevauchent : la prochaine instance se déclenche 6 heures **après la fin** de la précédente, pas 6 heures après son démarrage. Aucune équivalence simple en cron. - -### Le rattrapage des exécutions ratées - -Une seule ligne change tout : - -```ini -Persistent=true -``` - -Avec cette option, systemd mémorise la dernière exécution réussie. Si la machine était éteinte au moment prévu, le job se déclenche dès le démarrage suivant (après le `RandomizedDelaySec` éventuel, voir plus bas). Pour un portable, un poste de développement, ou n'importe quelle machine qui n'est pas en service 24/7, c'est une différence majeure de fiabilité. - -### Du jitter intégré - -```ini -RandomizedDelaySec=15min -``` - -Le déclenchement se fait à un instant aléatoire dans la fenêtre `[heure_prévue, heure_prévue + 15 min]`. Quand cinquante machines lancent leur mise à jour quotidienne, le pic de charge se lisse au lieu de tomber au même instant. C'est la fonctionnalité que tous les administrateurs de flottes finissent par re-bricoler en cron avec un `sleep $((RANDOM % 900))` peu élégant. - -### Le logging gratuit dans journald - -Tout ce que le service écrit sur stdout et stderr est capturé automatiquement par journald. Une seule commande pour tout consulter : - -```bash -journalctl -u backup.service # toutes les exécutions historisées -journalctl -u backup.service -f # en suivi temps réel -journalctl -u backup.service --since yesterday -``` - -Pas de configuration, pas de redirection à la main, pas de `>> /var/log/backup.log 2>&1` à coller à chaque ligne de crontab. Et accessoirement, journald gère la rotation, la compression et la rétention. - -### Les dépendances déclaratives - -Dans le fichier `.service`, on peut dire au planificateur qu'un job nécessite que le réseau soit prêt, qu'un point de montage soit présent, qu'un autre service ait démarré : - -```ini -[Unit] -Wants=network-online.target -After=network-online.target -RequiresMountsFor=/mnt/backup -``` - -systemd attend que ces conditions soient remplies avant de déclencher le service. Le job ne tente plus de s'exécuter sur un montage absent ou avant que la résolution DNS soit fonctionnelle. - -### Le contrôle des ressources via cgroups - -Puisque chaque exécution passe par un service, on bénéficie de tout l'arsenal cgroups de systemd : - -```ini -[Service] -CPUQuota=50% -MemoryMax=1G -IOWeight=10 -``` - -Un job de sauvegarde qui pourrait saturer le disque ne sortira pas de son enveloppe. Cron n'offre rien d'équivalent — au mieux on enrobe la commande dans `nice` et `ionice`, ce qui reste primitif. - -### La vue consolidée - -```bash -systemctl list-timers --all -``` - -Une seule commande, toutes les exécutions planifiées du système, classées par prochaine échéance, avec date de dernière exécution. La question « qu'est-ce qui tourne automatiquement sur cette machine ? » trouve enfin une réponse en une ligne. - -## Un exemple complet, pas-à-pas - -Reprenons le job de sauvegarde initial — `0 2 * * * /usr/local/bin/backup.sh` — et traduisons-le. - -`/etc/systemd/system/backup.service` : - -```ini -[Unit] -Description=Sauvegarde quotidienne -Wants=network-online.target -After=network-online.target - -[Service] -Type=oneshot -User=backup -Group=backup -ExecStart=/usr/local/bin/backup.sh -# Capture stdout/stderr dans journald (comportement par défaut, ici explicité) -StandardOutput=journal -StandardError=journal -# Garde-fous ressources -CPUQuota=50% -MemoryMax=1G -``` - -`/etc/systemd/system/backup.timer` : - -```ini -[Unit] -Description=Déclenche la sauvegarde tous les jours à 2h - -[Timer] -OnCalendar=*-*-* 02:00:00 -Persistent=true -RandomizedDelaySec=15min - -[Install] -WantedBy=timers.target -``` - -Activation : - -```bash -sudo systemctl daemon-reload -sudo systemctl enable --now backup.timer -``` - -Vérifications : - -```bash -systemctl list-timers backup.timer -systemctl status backup.timer -systemd-analyze calendar "*-*-* 02:00:00" # voir la prochaine échéance -journalctl -u backup.service # voir l'historique -sudo systemctl start backup.service # déclencher manuellement pour tester -``` - -Comparé à la ligne de crontab originale, c'est plus verbeux. Mais on a, sans rien ajouter : le rattrapage en cas d'arrêt machine, du jitter pour éviter les pics, l'attente du réseau, des limites de ressources, du logging structuré, et une commande pour tout inspecter. - -## Quelques recettes utiles - -**Tous les jours à 3h sauf le dimanche** : - -```ini -OnCalendar=Mon..Sat 03:00:00 -``` - -**Toutes les 15 minutes pendant les heures de bureau** : - -```ini -OnCalendar=Mon..Fri 08..18:00/15:00 -``` - -**Le premier lundi de chaque mois à 5h** : pas faisable en une seule expression, mais combinable avec une condition `ExecStartPre` qui vérifie la date et sort si ce n'est pas le bon jour. C'est l'une des rares zones où cron reste plus naturel (`0 5 * * 1` + `[ $(date +\%d) -le 7 ]` dans le script). - -**Toutes les six heures à partir du dernier passage** (jamais de chevauchement) : - -```ini -[Timer] -OnBootSec=5min -OnUnitActiveSec=6h -``` - -**Timer utilisateur, sans `sudo`** : dans `~/.config/systemd/user/`, puis : - -```bash -systemctl --user daemon-reload -systemctl --user enable --now monjob.timer -loginctl enable-linger $USER # pour que ça tourne sans session ouverte -``` - -## Quand garder cron - -Tout n'est pas à migrer. Cron reste le bon choix dans plusieurs cas : - -- **Scripts portables vers BSD, macOS, ou des conteneurs minimaux**. systemd n'existe pas dans Alpine Linux, sur les BSD, ni dans la plupart des images Docker légères. -- **Tâches utilisateur très simples sur un serveur partagé**, où chaque utilisateur gère sa propre crontab sans privilèges admin. -- **Notification par mail intégrée** : si `MAILTO=admin@domain.tld` suivi d'une sortie sur stderr couvre déjà le besoin de monitoring, repasser par journald + un exporter Prometheus est de la sur-ingénierie. -- **Un job de trente secondes à ajouter sur un serveur existant** déjà couvert par cron. Mélanger les deux outils est sans risque — ils coexistent sans interférence — et créer deux fichiers pour un alias unique d'une ligne reste excessif. - -La meilleure stratégie est rarement migratoire au pas de charge. Elle consiste à **utiliser systemd pour toute nouvelle tâche planifiée**, et à ne migrer les jobs cron existants que quand ils posent un problème concret : un job raté qu'il fallait rattraper, un log perdu qu'il fallait retrouver, un chevauchement qui a corrompu des données. - -## En résumé - -Cron n'est pas obsolète, il est sous-dimensionné pour des besoins modernes. Les timers systemd ne remplacent pas la simplicité d'une ligne de crontab pour un job trivial, mais ils apportent à peu près tout ce qui manque dès qu'une tâche planifiée devient critique : rattrapage, logging, dépendances, isolation, observabilité. - -Pour un DevOps qui construit aujourd'hui un nouveau service, le choix par défaut a basculé : commencer en systemd, et n'utiliser cron que par exception justifiée. La verbosité initiale des deux fichiers se rentabilise au premier incident de production qu'on diagnostique en `journalctl -u nom.service` au lieu de fouiller dans des logs disparates. - -Et même sans migrer quoi que ce soit, la commande `systemctl list-timers` mérite d'entrer dans le réflexe de tout audit de machine Linux. C'est là que se cache la moitié des tâches planifiées qu'on croit avoir comprises. \ No newline at end of file diff --git a/e1e8a0c1-6971-4357-9aaa-7e7a748922f3/meta.json b/e1e8a0c1-6971-4357-9aaa-7e7a748922f3/meta.json deleted file mode 100644 index 6aac6ee..0000000 --- a/e1e8a0c1-6971-4357-9aaa-7e7a748922f3/meta.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "uuid": "e1e8a0c1-6971-4357-9aaa-7e7a748922f3", - "slug": "quand-systemd-remplace-cron-pourquoi-et-comment-migrer-ses-taches-planifiees", - "title": "Quand systemd remplace cron : pourquoi (et comment) migrer ses tâches planifiées", - "author": "cedric@abonnel.fr", - "published": true, - "published_at": "2026-06-01 07:56", - "created_at": "2026-05-12 13:57:29", - "updated_at": "2026-05-12 13:58:58", - "revisions": [], - "cover": "", - "files_meta": { - "b116a3e7b4b54c5c-13369.svg": { - "author": "Générée par IA our Cédrix", - "source_url": "" - } - }, - "external_links": [], - "seo_title": "", - "seo_description": "", - "og_image": "", - "category": "informatique" -} diff --git a/e739bf3c-b380-4567-90aa-32da12f56bc5/files/_thumb_63b0e27c3950cfe1-993774.webp b/e739bf3c-b380-4567-90aa-32da12f56bc5/files/_thumb_63b0e27c3950cfe1-993774.webp deleted file mode 100644 index 17836e5..0000000 Binary files a/e739bf3c-b380-4567-90aa-32da12f56bc5/files/_thumb_63b0e27c3950cfe1-993774.webp and /dev/null differ diff --git a/e739bf3c-b380-4567-90aa-32da12f56bc5/files/_thumb_6dea6d617384f5ed-875.gif b/e739bf3c-b380-4567-90aa-32da12f56bc5/files/_thumb_6dea6d617384f5ed-875.gif deleted file mode 100644 index e594837..0000000 Binary files a/e739bf3c-b380-4567-90aa-32da12f56bc5/files/_thumb_6dea6d617384f5ed-875.gif and /dev/null differ diff --git a/e739bf3c-b380-4567-90aa-32da12f56bc5/files/_thumb_7df96bdf1ecebb75-124286.jpg b/e739bf3c-b380-4567-90aa-32da12f56bc5/files/_thumb_7df96bdf1ecebb75-124286.jpg deleted file mode 100644 index 2a1cec7..0000000 Binary files a/e739bf3c-b380-4567-90aa-32da12f56bc5/files/_thumb_7df96bdf1ecebb75-124286.jpg and /dev/null differ diff --git a/e739bf3c-b380-4567-90aa-32da12f56bc5/files/_thumb_bfd46debd51361c4-255309.jpg b/e739bf3c-b380-4567-90aa-32da12f56bc5/files/_thumb_bfd46debd51361c4-255309.jpg deleted file mode 100644 index 5d0bd1b..0000000 Binary files a/e739bf3c-b380-4567-90aa-32da12f56bc5/files/_thumb_bfd46debd51361c4-255309.jpg and /dev/null differ diff --git a/e739bf3c-b380-4567-90aa-32da12f56bc5/files/_thumb_c436b74420666bbb-3393394.png b/e739bf3c-b380-4567-90aa-32da12f56bc5/files/_thumb_c436b74420666bbb-3393394.png deleted file mode 100644 index 5b2f512..0000000 Binary files a/e739bf3c-b380-4567-90aa-32da12f56bc5/files/_thumb_c436b74420666bbb-3393394.png and /dev/null differ diff --git a/e739bf3c-b380-4567-90aa-32da12f56bc5/files/_thumb_e58b3803bdfafdf0-360838.png b/e739bf3c-b380-4567-90aa-32da12f56bc5/files/_thumb_e58b3803bdfafdf0-360838.png deleted file mode 100644 index f3c9683..0000000 Binary files a/e739bf3c-b380-4567-90aa-32da12f56bc5/files/_thumb_e58b3803bdfafdf0-360838.png and /dev/null differ diff --git a/e739bf3c-b380-4567-90aa-32da12f56bc5/files/cover.jpg b/e739bf3c-b380-4567-90aa-32da12f56bc5/files/cover.jpg deleted file mode 100644 index dec1178..0000000 Binary files a/e739bf3c-b380-4567-90aa-32da12f56bc5/files/cover.jpg and /dev/null differ diff --git a/e739bf3c-b380-4567-90aa-32da12f56bc5/index.md b/e739bf3c-b380-4567-90aa-32da12f56bc5/index.md deleted file mode 100644 index 7de28b3..0000000 --- a/e739bf3c-b380-4567-90aa-32da12f56bc5/index.md +++ /dev/null @@ -1,63 +0,0 @@ -# 50G-PON : la fibre optique du futur - -La fibre optique a déjà remplacé le cuivre dans la plupart des déploiements neufs, et les opérateurs ont passé la dernière décennie à généraliser le GPON puis le XGS-PON. Mais la course aux débits ne s'arrête pas là. La prochaine marche s'appelle le **50G-PON**, et elle est en train de passer du statut de standard sur le papier à celui de technologie qu'on commence à voir en démonstration chez les équipementiers. Voilà ce qu'il faut en retenir. - -## Ce que c'est - -Le 50G-PON est la dernière génération de réseau optique passif normalisée par l'ITU-T sous la référence **G.9804**. Comme ses prédécesseurs, il repose sur le principe d'une fibre unique partagée entre plusieurs abonnés via des splitters passifs — pas d'électronique active entre le central et le client. Ce qui change, c'est le débit : **50 Gbit/s symétriques** sur une seule longueur d'onde. - -Pour situer la techno dans sa famille : - -- **GPON** : 2,5 Gbit/s descendant / 1,25 Gbit/s montant — la base du déploiement résidentiel actuel -- **XGS-PON** : 10 Gbit/s symétriques — la génération qui prend le relais aujourd'hui -- **NG-PON2** : 40 Gbit/s, obtenus en agrégeant quatre canaux de 10 Gbit/s sur des longueurs d'onde différentes -- **50G-PON** : 50 Gbit/s symétriques sur une longueur d'onde unique - -Le point intéressant, c'est précisément ce dernier détail. Là où NG-PON2 multipliait les canaux pour atteindre 40 Gbit/s — au prix d'une électronique plus complexe et plus chère — le 50G-PON tape les 50 Gbit/s sur **une seule porteuse**. C'est techniquement plus exigeant côté composants optiques, mais beaucoup plus simple à industrialiser et à exploiter. - -## Comment ça marche - -L'architecture reste celle du PON classique, ce qui est un choix volontaire pour garantir la coexistence avec les générations précédentes : - -``` -OLT (central) ──── fibre ──── [Splitter passif] ─┬─── ONT abonné 1 - ├─── ONT abonné 2 - └─── ONT abonné 3 -``` - -- L'**OLT** (*Optical Line Terminal*), côté opérateur, pilote le réseau et émet le signal. -- Les **splitters passifs** dupliquent le signal lumineux pour le distribuer, sans alimentation ni amplification. -- L'**ONT** (*Optical Network Terminal*), chez l'abonné, fait la conversion optique-électrique. - -L'astuce du 50G-PON, c'est qu'il utilise **des longueurs d'onde différentes** de celles du GPON et du XGS-PON. Concrètement, les trois technologies peuvent **cohabiter sur la même fibre physique** : un opérateur peut continuer à servir ses abonnés GPON existants tout en branchant des nouveaux clients en XGS-PON ou en 50G-PON, sans retoucher l'infrastructure passive. C'est un point décisif pour le déploiement, parce qu'il évite la rupture de service et étale l'investissement. - -## Pourquoi ça compte - -À 50 Gbit/s symétriques, on n'est plus dans la logique du « plus de débit pour le particulier ». L'enjeu est ailleurs, et il est triple. - -D'abord, **les usages professionnels** qui tournent en limite sur XGS-PON. Sauvegarde cloud à l'échelle d'une entreprise, synchronisation inter-sites, stockage partagé, environnements de travail virtualisés : ces flux ont besoin de débit symétrique et constant, et 10 Gbit/s commencent à serrer dans certains contextes. - -Ensuite, le **transport pour le mobile**. Une antenne 5G — et a fortiori 6G — doit être raccordée au cœur de réseau par un lien capable d'encaisser le trafic agrégé de tous les utilisateurs qu'elle sert. C'est ce qu'on appelle le *fronthaul* ou le *backhaul* selon l'architecture. Le 50G-PON est un candidat sérieux pour ce rôle, parce qu'il offre les bons débits avec une infrastructure mutualisable et peu coûteuse à exploiter. - -Enfin, **l'évolutivité**. La même fibre, le même splitter, le même chemin physique pourront porter le 50G-PON aujourd'hui et la génération suivante — déjà en discussion à l'ITU-T sous le nom de 100G-PON — demain. C'est ce qui justifie qu'on déploie du 50G-PON même si tous les abonnés n'en ont pas l'usage immédiat : ce n'est pas l'équipement client qui coûte cher, c'est la fibre dans la rue, et elle est déjà là. - -## Ce qui freine encore - -Le 50G-PON existe, il est standardisé, et plusieurs équipementiers proposent du matériel compatible. Pour autant, le déploiement à grande échelle prendra du temps, pour quelques raisons concrètes. - -Le **coût des équipements** reste élevé. Les composants optiques capables de moduler proprement à 50 Gbit/s sur une seule porteuse sont à un stade industriel récent, et les volumes ne sont pas encore là pour faire baisser les prix. Pour la majorité des foyers, le XGS-PON couvre largement les besoins et coûte beaucoup moins cher. - -La **consommation énergétique** est plus importante que sur les générations précédentes. Ce n'est pas rédhibitoire, mais ça compte dans le bilan d'exploitation, surtout à l'échelle d'un opérateur. - -Enfin, **le marché n'est pas pressé**. Les box résidentielles actuelles n'exploiteraient même pas 10 Gbit/s symétriques, et les usages qui justifient le 50G-PON sont aujourd'hui concentrés sur des segments précis — entreprises, datacenters, opérateurs mobiles. Le déploiement va donc se faire par couches, en commençant par les zones où la demande existe vraiment. - -## En résumé - -| Technologie | Débit symétrique | Cible principale | -|---|---|---| -| GPON | 1 Gbit/s | Résidentiel actuel | -| XGS-PON | 10 Gbit/s | Résidentiel haut de gamme, PME | -| NG-PON2 | 40 Gbit/s (4 × 10) | Niche, peu déployé | -| 50G-PON | 50 Gbit/s | Entreprises, datacenters, transport mobile | - -Le 50G-PON n'est pas la techno qui va arriver dans les box grand public dans les six mois. C'est la **brique d'infrastructure** qui prépare la décennie qui vient : celle qui permettra aux opérateurs de répondre à la fois aux besoins des entreprises, au raccordement des antennes mobiles de prochaine génération, et à la montée en puissance progressive du résidentiel — sans toucher à la fibre déjà tirée. Et c'est exactement ce qu'on attend d'une bonne infrastructure : qu'elle se mette en place sans bruit, et qu'elle dure. diff --git a/e739bf3c-b380-4567-90aa-32da12f56bc5/meta.json b/e739bf3c-b380-4567-90aa-32da12f56bc5/meta.json deleted file mode 100644 index 2d0f00c..0000000 --- a/e739bf3c-b380-4567-90aa-32da12f56bc5/meta.json +++ /dev/null @@ -1,150 +0,0 @@ -{ - "uuid": "e739bf3c-b380-4567-90aa-32da12f56bc5", - "slug": "50g-pon-la-fibre-optique-du-futur", - "title": "50G-PON : la fibre optique du futur", - "author": "cedric@abonnel.fr", - "published": true, - "published_at": "2025-11-05 08:48", - "created_at": "2025-11-05 08:48:01", - "updated_at": "2026-05-11 23:54:38", - "revisions": [ - { - "n": 1, - "date": "2026-05-11 23:54:38", - "comment": "", - "title": "50G-PON : la fibre optique du futur" - } - ], - "cover": "cover.jpg", - "files_meta": { - "cover.jpg": { - "author": "", - "source_url": "https://www.zdnet.fr/wp-content/uploads/zdnet/2025/10/fibre-1125x615.jpg" - }, - "_thumb_63b0e27c3950cfe1-993774.webp": { - "author": "", - "source_url": "" - }, - "_thumb_6dea6d617384f5ed-875.gif": { - "author": "", - "source_url": "" - }, - "_thumb_7df96bdf1ecebb75-124286.jpg": { - "author": "", - "source_url": "" - }, - "_thumb_bfd46debd51361c4-255309.jpg": { - "author": "", - "source_url": "" - }, - "_thumb_c436b74420666bbb-3393394.png": { - "author": "", - "source_url": "" - }, - "_thumb_e58b3803bdfafdf0-360838.png": { - "author": "", - "source_url": "" - } - }, - "external_links": [ - { - "url": "https://hellofuture.orange.com/fr/50g-pon-orange-ouvre-la-voie-a-la-fibre-du-futur/", - "name": "50G-PON : Orange ouvre la voie à la Fibre du futur - Hello Future", - "added_at": "2026-05-11 23:52:53", - "meta": { - "mime": "text/html", - "size": 117887, - "description": "Sur la standardisation de la triple coexistence de trois technologies PON Depuis 2006, Orange déploie la fibre jusqu’aux domiciles (FTTH-Fibre To The Home) et jusqu’aux entreprises (FTTE-Fibre To The Entreprise). Les réseaux d’accès fibre d’Orange reposent sur des infrastructures passives (fibres, câbles, connecteurs, boitiers etc.) et des systèmes de transmissions…", - "og_image": "/file?uuid=e739bf3c-b380-4567-90aa-32da12f56bc5&name=_thumb_bfd46debd51361c4-255309.jpg", - "site_name": "Hello Future", - "og_type": "article", - "language": "fr_FR", - "date": "2024-06-25T10:27:25+01:00", - "canonical": "https://hellofuture.orange.com/fr/50g-pon-orange-ouvre-la-voie-a-la-fibre-du-futur/" - } - }, - { - "url": "https://www.universfreebox.com/article/587477/orange-teste-la-fibre-du-futur-avec-la-50g-pon-a-40-gbit-s-une-premiere-en-france", - "name": "Orange teste la \"fibre du futur\" avec la 50G-PON à 40 Gbit/s, une première en France", - "added_at": "2026-05-11 23:53:22", - "author": "Lucas Musset", - "meta": { - "mime": "text/html", - "size": 118235, - "description": "Orange teste la technologie 50G-PON, une première en France pour la fibre très haut débit. Ce jeudi 23 octobre 2025, Orange a présenté à Lyon et Marseille une démonstration grandeur nature de la technologie 50G-PON, considérée comme la prochaine étape majeure dans l’évolution des réseaux fibre optique. Il s’agit, selon l’opérateur, d’une première en France. […]", - "og_image": "/file?uuid=e739bf3c-b380-4567-90aa-32da12f56bc5&name=_thumb_c436b74420666bbb-3393394.png", - "site_name": "Univers Freebox", - "og_type": "article", - "language": "fr_FR", - "date": "2025-10-23T16:00:44+00:00", - "canonical": "https://www.universfreebox.com/article/587477/orange-teste-la-fibre-du-futur-avec-la-50g-pon-a-40-gbit-s-une-premiere-en-france" - } - }, - { - "url": "https://www.generation-nt.com/actualites/orange-50g-pon-fibre-ftth-debit-2064811", - "name": "Fibre du futur : Orange teste du 50G-PON en conditions réelles", - "added_at": "2026-05-11 23:53:33", - "author": "Jérôme G.", - "meta": { - "mime": "text/html", - "size": 109809, - "description": "GNT est le portail Hi-Tech français consacré aux nouvelles technologies (internet, logiciel, matériel, mobilité, entreprise) et au jeu vidéo PC et consoles.", - "keywords": "50g-pon orange fibre optique , orange, 50g, pon, fibre, ftth, debit", - "og_image": "/file?uuid=e739bf3c-b380-4567-90aa-32da12f56bc5&name=_thumb_63b0e27c3950cfe1-993774.webp", - "site_name": "Génération NT", - "og_type": "article", - "language": "fr_FR", - "canonical": "https://www.generation-nt.com/actualites/orange-50g-pon-fibre-ftth-debit-2064811" - } - }, - { - "url": "https://www.zdnet.fr/actualites/orange-teste-la-fibre-optique-du-futur-jusqua-cinq-fois-plus-rapide-484095.htm", - "name": "Orange teste la fibre optique du futur, jusqu’à cinq fois plus ra ...", - "added_at": "2026-05-11 23:54:09", - "author": "Xavier Biseul", - "meta": { - "mime": "text/html", - "size": 236667, - "description": "Dans ses laboratoires, l’opérateur historique mène des expérimentations sur la technologie 50G-PON. Ce nouveau standard des réseaux de fibre optique permet d’atteindre des débits théoriques allant jusqu’à 50 gigabits par seconde.", - "og_image": "/file?uuid=e739bf3c-b380-4567-90aa-32da12f56bc5&name=_thumb_7df96bdf1ecebb75-124286.jpg", - "site_name": "ZDNET", - "og_type": "article", - "language": "fr_FR", - "date": "2025-10-28T15:20:02+00:00", - "canonical": "https://www.zdnet.fr/actualites/orange-teste-la-fibre-optique-du-futur-jusqua-cinq-fois-plus-rapide-484095.htm" - } - }, - { - "url": "https://www.lyon-entreprises.com/actualites/article/orange-teste-a-lyon-la-fibre-du-futur-grace-a-la-technologie-50g-pon", - "name": "Orange teste à Lyon la fibre du futur grâce à la technologie 50G-PON - Lyon Entreprises [LE]", - "added_at": "2026-05-11 23:54:21", - "meta": { - "mime": "text/html", - "size": 161762, - "description": "Un article d'actualité LE [ Lyon-Entreprises ], le portail d'information sur les entreprises pour les décideurs de Lyon et Rhône-Alpes", - "og_image": "/file?uuid=e739bf3c-b380-4567-90aa-32da12f56bc5&name=_thumb_e58b3803bdfafdf0-360838.png", - "site_name": "Lyon Entreprises [LE]", - "og_type": "article", - "language": "fr_FR", - "canonical": "https://www.lyon-entreprises.com/actualites/article/orange-teste-a-lyon-la-fibre-du-futur-grace-a-la-technologie-50g-pon" - } - }, - { - "url": "https://lafibre.info/orange-les-news/50g-pon-orange-ouvre-la-voie-a-la-fibre-du-futur/", - "name": "50G-PON : Orange ouvre la voie à la Fibre du futur", - "added_at": "2026-05-11 23:54:30", - "meta": { - "mime": "text/html", - "size": 48608, - "description": "50G-PON : Orange ouvre la voie à la Fibre du futur", - "keywords": "Fibre optique,FTTH,très haut débit,Gpon,FTTLA,FTTdp,Test débit,SpeedTest", - "canonical": "https://lafibre.info/orange-les-news/50g-pon-orange-ouvre-la-voie-a-la-fibre-du-futur/", - "og_image": "/file?uuid=e739bf3c-b380-4567-90aa-32da12f56bc5&name=_thumb_6dea6d617384f5ed-875.gif" - } - } - ], - "seo_title": "", - "seo_description": "", - "og_image": "", - "category": "télécom" -} diff --git a/e739bf3c-b380-4567-90aa-32da12f56bc5/revisions/0001.md b/e739bf3c-b380-4567-90aa-32da12f56bc5/revisions/0001.md deleted file mode 100644 index 36b7b23..0000000 --- a/e739bf3c-b380-4567-90aa-32da12f56bc5/revisions/0001.md +++ /dev/null @@ -1,61 +0,0 @@ -La fibre optique a déjà remplacé le cuivre dans la plupart des déploiements neufs, et les opérateurs ont passé la dernière décennie à généraliser le GPON puis le XGS-PON. Mais la course aux débits ne s'arrête pas là. La prochaine marche s'appelle le **50G-PON**, et elle est en train de passer du statut de standard sur le papier à celui de technologie qu'on commence à voir en démonstration chez les équipementiers. Voilà ce qu'il faut en retenir. - -## Ce que c'est - -Le 50G-PON est la dernière génération de réseau optique passif normalisée par l'ITU-T sous la référence **G.9804**. Comme ses prédécesseurs, il repose sur le principe d'une fibre unique partagée entre plusieurs abonnés via des splitters passifs — pas d'électronique active entre le central et le client. Ce qui change, c'est le débit : **50 Gbit/s symétriques** sur une seule longueur d'onde. - -Pour situer la techno dans sa famille : - -- **GPON** : 2,5 Gbit/s descendant / 1,25 Gbit/s montant — la base du déploiement résidentiel actuel -- **XGS-PON** : 10 Gbit/s symétriques — la génération qui prend le relais aujourd'hui -- **NG-PON2** : 40 Gbit/s, obtenus en agrégeant quatre canaux de 10 Gbit/s sur des longueurs d'onde différentes -- **50G-PON** : 50 Gbit/s symétriques sur une longueur d'onde unique - -Le point intéressant, c'est précisément ce dernier détail. Là où NG-PON2 multipliait les canaux pour atteindre 40 Gbit/s — au prix d'une électronique plus complexe et plus chère — le 50G-PON tape les 50 Gbit/s sur **une seule porteuse**. C'est techniquement plus exigeant côté composants optiques, mais beaucoup plus simple à industrialiser et à exploiter. - -## Comment ça marche - -L'architecture reste celle du PON classique, ce qui est un choix volontaire pour garantir la coexistence avec les générations précédentes : - -``` -OLT (central) ──── fibre ──── [Splitter passif] ─┬─── ONT abonné 1 - ├─── ONT abonné 2 - └─── ONT abonné 3 -``` - -- L'**OLT** (*Optical Line Terminal*), côté opérateur, pilote le réseau et émet le signal. -- Les **splitters passifs** dupliquent le signal lumineux pour le distribuer, sans alimentation ni amplification. -- L'**ONT** (*Optical Network Terminal*), chez l'abonné, fait la conversion optique-électrique. - -L'astuce du 50G-PON, c'est qu'il utilise **des longueurs d'onde différentes** de celles du GPON et du XGS-PON. Concrètement, les trois technologies peuvent **cohabiter sur la même fibre physique** : un opérateur peut continuer à servir ses abonnés GPON existants tout en branchant des nouveaux clients en XGS-PON ou en 50G-PON, sans retoucher l'infrastructure passive. C'est un point décisif pour le déploiement, parce qu'il évite la rupture de service et étale l'investissement. - -## Pourquoi ça compte - -À 50 Gbit/s symétriques, on n'est plus dans la logique du « plus de débit pour le particulier ». L'enjeu est ailleurs, et il est triple. - -D'abord, **les usages professionnels** qui tournent en limite sur XGS-PON. Sauvegarde cloud à l'échelle d'une entreprise, synchronisation inter-sites, stockage partagé, environnements de travail virtualisés : ces flux ont besoin de débit symétrique et constant, et 10 Gbit/s commencent à serrer dans certains contextes. - -Ensuite, le **transport pour le mobile**. Une antenne 5G — et a fortiori 6G — doit être raccordée au cœur de réseau par un lien capable d'encaisser le trafic agrégé de tous les utilisateurs qu'elle sert. C'est ce qu'on appelle le *fronthaul* ou le *backhaul* selon l'architecture. Le 50G-PON est un candidat sérieux pour ce rôle, parce qu'il offre les bons débits avec une infrastructure mutualisable et peu coûteuse à exploiter. - -Enfin, **l'évolutivité**. La même fibre, le même splitter, le même chemin physique pourront porter le 50G-PON aujourd'hui et la génération suivante — déjà en discussion à l'ITU-T sous le nom de 100G-PON — demain. C'est ce qui justifie qu'on déploie du 50G-PON même si tous les abonnés n'en ont pas l'usage immédiat : ce n'est pas l'équipement client qui coûte cher, c'est la fibre dans la rue, et elle est déjà là. - -## Ce qui freine encore - -Le 50G-PON existe, il est standardisé, et plusieurs équipementiers proposent du matériel compatible. Pour autant, le déploiement à grande échelle prendra du temps, pour quelques raisons concrètes. - -Le **coût des équipements** reste élevé. Les composants optiques capables de moduler proprement à 50 Gbit/s sur une seule porteuse sont à un stade industriel récent, et les volumes ne sont pas encore là pour faire baisser les prix. Pour la majorité des foyers, le XGS-PON couvre largement les besoins et coûte beaucoup moins cher. - -La **consommation énergétique** est plus importante que sur les générations précédentes. Ce n'est pas rédhibitoire, mais ça compte dans le bilan d'exploitation, surtout à l'échelle d'un opérateur. - -Enfin, **le marché n'est pas pressé**. Les box résidentielles actuelles n'exploiteraient même pas 10 Gbit/s symétriques, et les usages qui justifient le 50G-PON sont aujourd'hui concentrés sur des segments précis — entreprises, datacenters, opérateurs mobiles. Le déploiement va donc se faire par couches, en commençant par les zones où la demande existe vraiment. - -## En résumé - -| Technologie | Débit symétrique | Cible principale | -|---|---|---| -| GPON | 1 Gbit/s | Résidentiel actuel | -| XGS-PON | 10 Gbit/s | Résidentiel haut de gamme, PME | -| NG-PON2 | 40 Gbit/s (4 × 10) | Niche, peu déployé | -| 50G-PON | 50 Gbit/s | Entreprises, datacenters, transport mobile | - -Le 50G-PON n'est pas la techno qui va arriver dans les box grand public dans les six mois. C'est la **brique d'infrastructure** qui prépare la décennie qui vient : celle qui permettra aux opérateurs de répondre à la fois aux besoins des entreprises, au raccordement des antennes mobiles de prochaine génération, et à la montée en puissance progressive du résidentiel — sans toucher à la fibre déjà tirée. Et c'est exactement ce qu'on attend d'une bonne infrastructure : qu'elle se mette en place sans bruit, et qu'elle dure. diff --git a/e9adfdab-6246-411f-9953-91fcfcfb105f/files/20251119-075836.png b/e9adfdab-6246-411f-9953-91fcfcfb105f/files/20251119-075836.png deleted file mode 100644 index b59b19f..0000000 Binary files a/e9adfdab-6246-411f-9953-91fcfcfb105f/files/20251119-075836.png and /dev/null differ diff --git a/e9adfdab-6246-411f-9953-91fcfcfb105f/files/dummy.png b/e9adfdab-6246-411f-9953-91fcfcfb105f/files/dummy.png deleted file mode 100644 index 58bb881..0000000 Binary files a/e9adfdab-6246-411f-9953-91fcfcfb105f/files/dummy.png and /dev/null differ diff --git a/e9adfdab-6246-411f-9953-91fcfcfb105f/index.md b/e9adfdab-6246-411f-9953-91fcfcfb105f/index.md deleted file mode 100644 index ee57050..0000000 --- a/e9adfdab-6246-411f-9953-91fcfcfb105f/index.md +++ /dev/null @@ -1,116 +0,0 @@ -# esp32 - -![ESP32 pour Téléinfo](dummy.png) - -## Choix de l’ESP32 -L’ESP32 constitue une alternative compacte et économique pour récupérer automatiquement les informations TIC d’un compteur électrique. Il présente plusieurs avantages : - -- **une connexion Wi-Fi intégrée**, permettant de communiquer facilement avec un serveur, une box domotique ou un service en ligne ; -- **un espace de stockage interne (SPI Flash)** pour le firmware et les données nécessaires au fonctionnement ; -- **une interface série (UART)** directement accessible sur les broches GPIO pour lire les trames issues du démodulateur ASK. - -L’utilisation d’un **démodulateur ASK** permet d’obtenir un signal numérique TTL immédiatement compatible avec l’entrée UART de l’ESP32, sans adaptation de niveau. Les broches les plus couramment utilisées pour la liaison série sont **GPIO16 (RX)** ou **RX0 (GPIO3)**, selon la configuration retenue. -L’alimentation du module est assurée par la sortie **3,3 V** de l’ESP32, ce qui permet un câblage simple et propre. - -Grâce à son environnement logiciel flexible (Arduino, ESP-IDF, MicroPython…), l’ESP32 permet de mettre en place facilement des fonctions avancées : connexion Wi-Fi, envoi de données vers MQTT, interface Web locale, synchronisation NTP, journalisation, etc. - -## Câblage -⚠️ **Attention : ne pas confondre 3V3, VIN et VCC/VDD (5 V)** - -Sur une carte ESP32 (dev board type WROOM / NodeMCU / UPesy / DOIT…), les tensions disponibles sont : - -### • 3V3 (3.3 V régulé) -- C’est la sortie du régulateur embarqué. -- Elle alimente le microcontrôleur ESP32 et ses GPIO. -- **Toutes les entrées/sorties de l’ESP32 sont *strictement* en 3,3 V.** -- **Le démodulateur ASK doit être alimenté ici.** - -### • VIN (ou 5V selon les cartes) -- Entrée utilisée pour alimenter la carte en **5 V** (via USB ou alimentation externe). -- Passera ensuite par le régulateur pour produire le **3,3 V interne**. -- **NE PAS utiliser VIN pour alimenter le démodulateur ASK**. - -### • Pourquoi cette précision ? -Parce que certains modules ou schémas utilisent la notation **VCC / VDD**, qui peut désigner tantôt 3,3 V, tantôt 5 V selon le fabricant. -Sur l’ESP32, **la seule tension sûre pour alimenter un module logique est 3V3**. - -### Rappel important -- Les GPIO de l’ESP32 **ne sont pas tolérants au 5 V**. -- Injecter du 5 V sur RX0, GPIO3 ou tout autre GPIO risque de **détruire le microcontrôleur**. - -### Description du câblage -![](20251119-075836.png) - -Schéma de *câblage ESP32 générique* provenant du site - -L’ESP32 est connecté au **démodulateur ASK**, qui fournit un signal numérique TTL prêt à être lu par l’UART de l’ESP32. -Le câblage est très simple : trois fils suffisent entre l’ESP32 et le module. - -Broches recommandées : - -- **3V3** – alimentation du démodulateur -- **GND** – masse commune -- **RX0 / GPIO3** entrée série utilisée pour lire les trames TIC) - -L’ESP32 ne transmet aucune commande au compteur : seule la ligne **RX** est nécessaire. -Le démodulateur assure la conversion du signal modulé provenant du Linky vers un signal propre au format TTL. - ---- - -### Schéma de câblage (ASCII) -``` -+-----------------------------+ -| Compteur Linky | -| --- | -| Sortie TIC (ASK) | - +-------------+---------------+ -| | -| --- | -| Signal TIC modulé | - v - +-----------------------------+ -| Démodulateur ASK | -| --- | -| | -| IN <---------------------+- TIC Data | -| GND <---------------------+- TIC GND | -| | -| OUT ----------------------+------------------> RX0 / GPIO3 | -| GND ----------------------+------------------> GND | -| VCC <---------------------+------------------- 3V3 | - +-----------------------------+ - -``` - ╔═══════════════════════╗ - ║ ESP32 ║ - ║ Dev Board ║ - ╠═══════════════════════╣ - ║ 3V3 : alimentation ║ - ║ GND : masse ║ - ║ GPIO3 : RX0 (UART) ║ - ╚═══════════════════════╝ -``` -``` - -## ESP Home - -La capture ci-dessus illustre un ESPHome fonctionnel, connecté à un compteur Linky, affichant les mesures électriques instantanées et les index de consommation. En parallèle, les logs temps réel confirment la bonne réception et l’envoi périodique des données. - -## Tasmota -Pour récupérer et exploiter les informations du compteur électrique Linky, nous allons utiliser un logiciel tel que **Tasmota**. Tasmota est un firmware open-source pour microcontrôleurs ESP8266 et ESP32, conçu pour simplifier la gestion des objets connectés et la domotique. - -Grâce à Tasmota, il devient possible de : - -- **Lire directement les trames TIC** via l’entrée UART de l’ESP32, en utilisant un démodulateur ASK pour obtenir un signal numérique TTL propre. -- **Transmettre les données** vers un serveur local ou en ligne, une box domotique ou un service cloud compatible MQTT ou HTTP. -- **Configurer facilement le système** sans coder, grâce à son interface Web intuitive et ses nombreuses options de paramétrage pour les GPIO, UART et protocoles réseau. - -En utilisant Tasmota avec l’ESP32, nous transformons ce microcontrôleur en un **collecteur TIC intelligent**, capable de centraliser les informations énergétiques de manière autonome et de les rendre exploitables pour la domotique ou le suivi de consommation. -## Installer Tasmota -Brancher l'ESP32 sur l'ordinateur. Voir la page . - -Télécharger **Tasmota32** (`tasmota32.bin`) qui inclut les drivers nécessaires à la Téléinfo/TIC. - -Téléchargez-le ici : https:*ota.tasmota.com/tasmota32/release/ - -Flasher Tasmota pour ESP32 avec espytool \ No newline at end of file diff --git a/e9adfdab-6246-411f-9953-91fcfcfb105f/meta.json b/e9adfdab-6246-411f-9953-91fcfcfb105f/meta.json deleted file mode 100644 index 307ecf6..0000000 --- a/e9adfdab-6246-411f-9953-91fcfcfb105f/meta.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "uuid": "e9adfdab-6246-411f-9953-91fcfcfb105f", - "slug": "esp32", - "title": "esp32", - "author": "cedric@abonnel.fr", - "published": true, - "published_at": "2025-11-29 06:31:50", - "created_at": "2025-11-29 06:31:50", - "updated_at": "2025-11-29 06:31:50", - "revisions": [], - "cover": "", - "files_meta": [], - "external_links": [], - "seo_title": "", - "seo_description": "", - "og_image": "", - "category": "Électronique" -} diff --git a/f008f509-2cad-437f-9850-7b39ec37262a/index.md b/f008f509-2cad-437f-9850-7b39ec37262a/index.md deleted file mode 100644 index d1dfb7f..0000000 --- a/f008f509-2cad-437f-9850-7b39ec37262a/index.md +++ /dev/null @@ -1,223 +0,0 @@ -# gitea, l'installation - -Voici un guide pas à pas pour installer Gitea sur Debian 13 avec PostgreSQL comme base de données, et configurer un reverse-proxy (par ex. Traefik ou Nginx) pour servir Gitea. - ---- - -## 1. Pré-requis - -* Un serveur Debian 13 à jour. - - ```bash - sudo apt update && sudo apt upgrade -y - ``` -* Installer Git, et éventuellement d’autres dépendances. - - ```bash - sudo apt install -y git ca-certificates - ``` -* Un nom de domaine `git.abonnel.fr` pointant vers votre serveur (DNS A ou AAAA). -* Assurez-vous que le port 80 et/ou 443 sont ouverts sur le serveur (pour le proxy). -* Installer PostgreSQL. - ---- - -## 2. Installer PostgreSQL et créer base & utilisateur - -1. Installer PostgreSQL (Debian 13 inclut postgresql dans ses dépôts). - - ```bash - sudo apt install -y postgresql postgresql-contrib - ``` -2. Passer à l’utilisateur postgres et créer la base + utilisateur pour Gitea : - - ```bash - sudo -i -u postgres - psql - CREATE DATABASE gitea WITH ENCODING 'UTF8' TEMPLATE template0; - CREATE USER gitea WITH PASSWORD 'votre_mot_de_passe_sécurisé'; - GRANT ALL PRIVILEGES ON DATABASE gitea TO gitea; - \q - exit - ``` - - Ces commandes sont conformes à la documentation Gitea pour PostgreSQL. ([Gitea Documentation][1]) -3. Vérifier que PostgreSQL fonctionne : - - ```bash - sudo systemctl status postgresql - ``` -4. (Optionnel) Modifier le fichier `pg_hba.conf` si vous voulez autoriser certaines connexions supplémentaires (ex: accès réseau). - ---- - -## 3. Installer Gitea - -1. Créer un utilisateur système qui va exécuter Gitea : - - ```bash - sudo adduser --system --shell /bin/bash --gecos 'Git Version Control' --group --disabled-password --home /home/git git - ``` - - ([Gitea Documentation][2]) -2. Créer les dossiers de travail : - - ```bash - sudo mkdir -p /var/lib/gitea/{custom,data,log} - sudo chown -R git:git /var/lib/gitea/ - sudo chmod -R 750 /var/lib/gitea/ - sudo mkdir /etc/gitea - sudo chown root:git /etc/gitea - sudo chmod 770 /etc/gitea - ``` - - ([Gitea Documentation][3]) -3. Télécharger le binaire Gitea : - - ```bash - wget -O gitea https://dl.gitea.com/gitea/1.24.7/gitea-1.24.7-linux-amd64 - chmod +x gitea - sudo mv gitea /usr/local/bin/gitea - ``` - - (Vérifiez la version la plus récente sur le site officiel) ([Gitea Documentation][2]) -4. Créer un fichier de service systemd pour Gitea. Exemple minimal (`/etc/systemd/system/gitea.service`) : - - ```ini - [Unit] - Description=Gitea (Git with a cup of tea) - After=network.target postgresql.service - - [Service] - User=git - Group=git - WorkingDirectory=/var/lib/gitea/ - ExecStart=/usr/local/bin/gitea web --config /etc/gitea/app.ini - Restart=always - Environment=USER=git HOME=/var/lib/gitea GITEA_WORK_DIR=/var/lib/gitea - - [Install] - WantedBy=multi-user.target - ``` - - Ensuite : - - ```bash - sudo systemctl daemon-reload - sudo systemctl enable --now gitea - sudo systemctl status gitea - ``` - - ([Gitea Documentation][4]) - ---- - -## 4. Configuration via l’interface web - -* Ouvrez [http://votre-serveur:3000](http://votre-serveur:3000) (ou le port que Gitea utilise) dans un navigateur. -* Dans l’assistant d’installation, choisissez *PostgreSQL* comme type de base de données. Entrez : - - * Host : `localhost:5432` (ou l’IP/port selon) - * Database : `gitea` - * Username : `gitea` - * Password : celui que vous avez défini -* Dans le champ "Base URL", indiquez `https://git.abonnel.fr/` (ou http selon votre setup). -* Complétez le reste (admin account, etc.). - ([James R. S. Kemp Git][5]) - ---- - -## 5. Configurer reverse-proxy pour `git.abonnel.fr` - -Si vous utilisez Nginx ou Traefik (ou un autre proxy) vous devez rediriger le domaine vers Gitea. - -### Exemple avec Nginx : - -```nginx -server { - listen 80; - server_name git.abonnel.fr; - - # redirection vers HTTPS (si certbot/Let’s Encrypt) - return 301 https://$host$request_uri; -} - -server { - listen 443 ssl; - server_name git.abonnel.fr; - - ssl_certificate /etc/letsencrypt/live/git.abonnel.fr/fullchain.pem; - ssl_certificate_key /etc/letsencrypt/live/git.abonnel.fr/privkey.pem; - - location / { - proxy_pass http://127.0.0.1:3000; - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - } -} -``` - -Cet exemple est inspiré des tutos d’installation Gitea + Nginx. ([James R. S. Kemp Git][5]) -Si vous utilisez un autre proxy (ex: Traefik ou « zoraxyproxy »), adaptez la configuration pour qu’il fasse passer `git.abonnel.fr` vers `localhost:3000` et gère SSL. - -### Activer HTTPS - -* Installez `certbot` ou utilisez votre gestionnaire de certificats. - - ```bash - sudo apt install -y certbot python3-certbot-nginx - sudo certbot --nginx -d git.abonnel.fr - ``` -* Vérifiez que le certificat est actif et que `https://git.abonnel.fr` fonctionne. - ---- - -## 6. Configuration finale dans app.ini - -Après installation, vous pouvez ajuster `/etc/gitea/app.ini` (ou via l’interface). Exemples de réglages utiles : - -* Dans `[server]` : - - ``` - ROOT_URL = https://git.abonnel.fr/ - HTTP_PORT = 3000 - SSH_PORT = 22 # ou le port SSH que vous utilisez pour Git - START_SSH_SERVER = false # si vous n’utilisez pas le serveur SSH interne - DOMAIN = git.abonnel.fr - ``` -* Dans `[database]` : - - ``` - DB_TYPE = postgres - HOST = 127.0.0.1:5432 - NAME = gitea - USER = gitea - PASSWD = votre_mot_de_passe - SSL_MODE = disable # ou require selon votre config - ``` -* Redémarrez Gitea après modification : - - ```bash - sudo systemctl restart gitea - ``` - ---- - -## 7. Sécuriser & entretien - -* Assurez-vous que seuls les ports nécessaires sont exposés (ex: 80/443 via proxy, 3000 en local si non exposé). -* Faites des sauvegardes régulières : base PostgreSQL + dossier `/var/lib/gitea/data` (ou vos dépôts). -* Vérifiez les logs de Gitea (souvent dans `/var/lib/gitea/log/`). -* Gardez Gitea et PostgreSQL à jour. -* Si vous utilisez SSH pour les repos Git, configurez correctement les clés SSH utilisateur et vérifiez que l’utilisateur `git` a bien les permissions. - ---- - - -[1]: https://docs.gitea.com/enterprise/installation/linux?utm_source=chatgpt.com "Install on Linux | Gitea Enterprise Documentations" -[2]: https://docs.gitea.com/installation/install-from-binary?utm_source=chatgpt.com "Installation from binary | Gitea Documentation" -[3]: https://docs.gitea.com/1.18/installation/install-from-binary?utm_source=chatgpt.com "Installation from binary | Gitea Documentation" -[4]: https://docs.gitea.com/1.20/category/installation?utm_source=chatgpt.com "Installation | Gitea Documentation" -[5]: https://git.jamesrskemp.com/hosting/gitea.html?utm_source=chatgpt.com "Gitea - Git Commands by James Skemp" diff --git a/f008f509-2cad-437f-9850-7b39ec37262a/meta.json b/f008f509-2cad-437f-9850-7b39ec37262a/meta.json deleted file mode 100644 index 2d1f101..0000000 --- a/f008f509-2cad-437f-9850-7b39ec37262a/meta.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "uuid": "f008f509-2cad-437f-9850-7b39ec37262a", - "slug": "gitea-l-installation", - "title": "gitea, l'installation", - "author": "cedric@abonnel.fr", - "published": true, - "published_at": "2025-11-07 11:01:57", - "created_at": "2025-11-07 11:01:57", - "updated_at": "2025-11-07 11:01:57", - "revisions": [], - "cover": "cover.jpg", - "category": "informatique" -}