From 5634c1e01ca4a241c8d8dfa2497447e6ce69a119 Mon Sep 17 00:00:00 2001 From: kleph Date: Tue, 27 Oct 2020 19:19:17 +0100 Subject: [PATCH 01/10] [lint] try to rename some files to check the linter --- content/{cle_usb.mdown => cle_usb.md} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename content/{cle_usb.mdown => cle_usb.md} (100%) diff --git a/content/cle_usb.mdown b/content/cle_usb.md similarity index 100% rename from content/cle_usb.mdown rename to content/cle_usb.md From 3a43ade8a79b1ef01a973b9f035cf69b7fc53362 Mon Sep 17 00:00:00 2001 From: kleph Date: Tue, 27 Oct 2020 19:35:24 +0100 Subject: [PATCH 02/10] [lint] Fix cle_usb markdown --- content/cle_usb.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/content/cle_usb.md b/content/cle_usb.md index c292b99..fb4ec67 100644 --- a/content/cle_usb.md +++ b/content/cle_usb.md @@ -19,7 +19,8 @@ Comme je viens d'avoir une clé de ce type, et que sur le coup je n'ai pas trouv # Détection À l'insertion de la clé, le noyau semble la détecter correctement, avec sa taille annoncée de 128 Go -``` + +``` console scsi 14:0:0:0: Direct-Access Generic Flash Disk 8.00 PQ: 0 ANSI: 4 sd 14:0:0:0: Attached scsi generic sg2 type 0 sd 14:0:0:0: [sdc] 262144000 512-byte logical blocks: (134 GB/125 GiB) @@ -31,7 +32,7 @@ Comme je viens d'avoir une clé de ce type, et que sur le coup je n'ai pas trouv Comme j'avais de forts doutes sur cette clé, j'ai lancé `f3probe` avant même d'essayer d'écrire quoique ce soit dessus. -``` +``` console # ./f3probe /dev/sdc F3 probe 5.0 Copyright (C) 2010 Digirati Internet LTDA. @@ -64,16 +65,17 @@ Le message est assez clair. Je ne me suis pas encore renseigné sur la nature ex Mon hypothèse actuelle est que le début de la flash est normale et foncitionne et qu'à partir d'une certaine taille, le contrôleur cycle sur un intervalle d'adresses. # Réparation + Comme le contrôleur en lui même ment, il n'est pas facile de faire reconnaître la clé comme faisant 12 Go et non 128. Malgré celà, une solution très simple consiste à créer une partition dont la taille correspond à celle de la flash détectée comme correcte. `f3probe` nous donnait le dernier bon secteur, ainsi qu'un exemple de commande `f3fix` à utiliser pour créer une partition de la bonne taille. Dans mon cas : -``` + +``` console f3fix --last-sec=26984447 /dev/sdc ``` - Sans vouloir rajouter de l'eau au moulin des conspirationistes et autres partisans du "monde de merde"©, ces clés ne sont clairement pas des erreurs. Il y a des mécanismes pour camoufler le fait que la mémoire soit plus petite que celle annoncée. Par exemple un système de cache qui permet conserver les données écrites, ainsi une lecture sera servie par le cache et empêchera la détection du fait que les données n'ont jamais été réeelements inscrites à l'adresse indiquée. From 1579bee9a4e37aaf27729430e9105bf3809474cf Mon Sep 17 00:00:00 2001 From: kleph Date: Tue, 27 Oct 2020 19:38:09 +0100 Subject: [PATCH 03/10] [lint] lint ecran_condo --- .mdlrc.style | 1 + content/{ecran_condos.mdown => ecran_condos.md} | 15 ++++++++++----- 2 files changed, 11 insertions(+), 5 deletions(-) rename content/{ecran_condos.mdown => ecran_condos.md} (95%) diff --git a/.mdlrc.style b/.mdlrc.style index a386b8d..b937074 100644 --- a/.mdlrc.style +++ b/.mdlrc.style @@ -1,3 +1,4 @@ all exclude_rule 'MD013' +exclude_rule 'MD024' # multiple headers with the same content exclude_rule 'MD041' # help with pelican format diff --git a/content/ecran_condos.mdown b/content/ecran_condos.md similarity index 95% rename from content/ecran_condos.mdown rename to content/ecran_condos.md index 0149641..bd5ad42 100644 --- a/content/ecran_condos.mdown +++ b/content/ecran_condos.md @@ -16,7 +16,8 @@ Un article rapide pour montrer quelques photos de l'intérieur de l'écran et mo EDIT: et que ça peut foncitonner :-) -## Carte d'alimentation +# Carte d'alimentation + L'allumage est long, lorsque l'écran est mis sous tension l'éclairage ne tient pas. Il s'éteint au bout de quelques secondes puis quelques minutes plus tard, après quelques clignotements, l'éclairage se stabilise et persiste. @@ -26,18 +27,22 @@ Après ouverture, je n'ai pas remarqué de condensateurs gonflés ou ayant coul ![carte d'alimentation vue de dessus](http://blog.kleph.eu/images/alim_dessus_2.jpg) -### Action et résultat +## Action et résultat + Ayant déjà pas mal de condensateurs à remplacer sur l'autre carte, j'ai testé une idée qui m'a été soufflée sur IRC(encore merci alrj ;-) ) : ne remplacer que le condensateur qui servait à "bootstraper", celui de 2.2µF. Comme il y en a deux et que je ne savais pas lequel était le bon, j'ai remplacé les deux. L'écran s'allume correctement, y compris après les mises en veille et lorsqu'il fait un peu frais. La théorie du moindre effort semble donc être un succès :-) -## Carte Logique +# Carte Logique + Le second soucis est que parfois l'image semble déstabilisée. Cela semble plutôt relié à la carte logique. ![carte logique vue de dessus](http://blog.kleph.eu/images/logic_dessus.jpg) -### Action et résultat +## Action et résultat + Après le remplacement de tous les condensateurs chimiques de cette carte, l'image est redeveue stable. -## Liens +# Liens + Pour tout ce qui concerne les condensateurs chimiques et globalement ce genre de réparations [Badcaps.net](http://www.badcaps.net/) est une très bonne référence et une mine d'information gigantesque. From 1290db0225b3c1ae616e7c7ecba928ec37d03c5f Mon Sep 17 00:00:00 2001 From: kleph Date: Tue, 27 Oct 2020 19:54:55 +0100 Subject: [PATCH 04/10] [lint] lint migration nf_tables --- .../{migration_nftables.mdown => migration_nftables.md} | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) rename content/{migration_nftables.mdown => migration_nftables.md} (97%) diff --git a/content/migration_nftables.mdown b/content/migration_nftables.md similarity index 97% rename from content/migration_nftables.mdown rename to content/migration_nftables.md index e874c59..f798ac5 100644 --- a/content/migration_nftables.mdown +++ b/content/migration_nftables.md @@ -13,8 +13,8 @@ Avant de migrer le firewall du routeur principal, j'ai voulu commencer par plus Une des machines de mon LAN utilise de la masquarade pour donner accès à une machine distante à travers un VPN. Ce qui tombe assez bien, la masquarade vient d'être ajoutée dans la version 3.18 du noyau et cettte configuration simple est un bon exercice pour commencer. +# iptables -## iptables Voici le script précédent que je vais remplacer, c'est de la masquarade simple : ```bash @@ -39,7 +39,8 @@ echo "1" > /proc/sys/net/ipv4/ip_forward iptables -t nat -o tun0 -A POSTROUTING -j MASQUERADE ``` -## nftables +# nftables + On trouve un peu de documentation sur le net, en particulier sur le [wiki de nftables][1], ainsi que celui de [gentoo][2] et d'[archlinux][3] Parmis les changements notables dès que l'on commence à se documenter, il y a le fait que les tables et les chaînes classiques d'iptables ne sont pas créées par défaut. Il faut donc les déclarer, et comme il n'y a pas de chaînes, il n'y a pas non plus de politique par défaut. @@ -84,7 +85,7 @@ nft add rule nat postrouting oif ${IF_OUTPUT} masquerade # active packet forwarding between interfaces (routing) echo "1" > /proc/sys/net/ipv4/ip_forward # ipv6 -# /proc/sys/net/ipv6/conf/all/forwarding = 1 +# /proc/sys/net/ipv6/conf/all/forwarding = 1 ``` From 05b3162a2ec6c3a07637a1930008099498dde478 Mon Sep 17 00:00:00 2001 From: kleph Date: Tue, 27 Oct 2020 20:13:09 +0100 Subject: [PATCH 05/10] [lint] lint the ouiche --- content/{ouiche.mdown => ouiche.md} | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename content/{ouiche.mdown => ouiche.md} (100%) diff --git a/content/ouiche.mdown b/content/ouiche.md similarity index 100% rename from content/ouiche.mdown rename to content/ouiche.md index 36b9da2..3a96260 100644 --- a/content/ouiche.mdown +++ b/content/ouiche.md @@ -7,7 +7,6 @@ Tags: manger Lang: fr Summary: J'ai fait une ouiche il y a pas longtemps et elle semble avoir eu pas mal de succès. - J'ai fait une ouiche il y a pas longtemps et elle semble avoir eu pas mal de succès. Voici donc la recette. @@ -25,6 +24,7 @@ Voici donc la recette. - 15 cl de crême fraîche légère épaisse (on peut mettre les 20cl, si elle est conditionnée comme ça) # Réalisation + Étaler la pâte dans un plat à tarte puis la piquer, avec une fourchette par exemple. Badigeonner le fond de la pâte avec de la moutarde pour obtenir une fine couche. @@ -38,11 +38,11 @@ Verser le tout sur la pâte. Saupoudrer d'emmental rapé. # Cuisson + Une bonne trentaine de minutes au four à 200°C (thermostat presque 7), puis surveiller ensuite. Il faut qu'elle soit dorée, mais pas trop et que les rebords soient cuits, mais pas carbonisés. Au bout de 20-25 minutes, si la ouiche a gonflé, ne pas hésiter à la piquer avec un couteau pour crever la bulle et laisser l'air s'échapper. Une fois dorée, si elle semble encore un peu trop fluide, éteindre le four et la laisser dedans encore 10 minutes. - Laisser refroidir un peu ou beaucoup selon si on veut la manger chaude ou l'emmener en picnic :-) From 71013418c99bf551bbb9c250e3fef8ecf24e25e5 Mon Sep 17 00:00:00 2001 From: kleph Date: Wed, 28 Oct 2020 15:07:27 +0100 Subject: [PATCH 06/10] [lint] lint packet_drop --- content/{packet_drop.mdown => packet_drop.md} | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) rename content/{packet_drop.mdown => packet_drop.md} (94%) diff --git a/content/packet_drop.mdown b/content/packet_drop.md similarity index 94% rename from content/packet_drop.mdown rename to content/packet_drop.md index ec0aa19..472756b 100644 --- a/content/packet_drop.mdown +++ b/content/packet_drop.md @@ -11,11 +11,11 @@ Summary: Augmentation du budget alloué au traitement des paquets réseau et de [TOC] -## Pourquoi ? Description du besoin +# Pourquoi ? Description du besoin Au boulot, on nous reportait quelques echecs de CI, dus à des connexion qui échouaient vers des ressources internes, et en particulier vers les proyxs sortants. Notre CI étant hébergé sur un cluster DC/OS, il a fallu analyser ce qu'il se passait directement au niveau des machines en elles mêmes. -## Critères de choix & solutions envisagées +# Critères de choix & solutions envisagées On a constaté des drops de paquets et des "overruns" sur les interfaces réseau des agents, d'abord p1, puis finalement les autres aussi. @@ -49,7 +49,7 @@ $ ethtool -S eth3 | grep rx_discard Au passage, on constate que les cartes réseau de ces machines ont 8 files de traitement des paquets. `ethtool -l` nous indique que l'ont pourrait passer à 30 files, combinées, c'est à dire qu'il faut toujours un nombre pair et que deux files sont liées, l'une pour la réception (RX) et l'autre pour la trasmission (TX). -## rx buffer +# rx buffer Après quelques recherches, en particulier à l'aide de cet article, [Monitoring and Tuning the Linux Networking Stack: Receiving Data](https://blog.packagecloud.io/eng/2016/06/22/monitoring-tuning-linux-networking-stack-receiving-data/), il a été constaté que la taille du ring buffer du driver réseau était configurée à une valeur assez basse par défaut : @@ -70,8 +70,7 @@ TX: 4078 Mon analyse est que les CPU de ces machines, servant au CI, sont soumis à des pics de charge, assez longs lors des builds et que le noyau n'a pas le temps de dépiler tous les paquets réseau arrivant dans le ring buffer entre la carte et le noyau. Ainsi, les anciens paquets non traités sont droppés. - -## /proc/net/softnet_stat +# /proc/net/softnet_stat Un autre extrait de l'article traitant cette fois de la gestion des interruptions réseau. Le traitement se fait à l'aide de la couche NAPI, qui est une optimisation du traitement des interruptions réseau, pour ne pas générer une interruption par paquet réseau, comme c'était le cas à l'origine, et ainsi pouvoir traiter de fortes charges réseau, sans monopoliser le CPU. Ce mécanisme désactive les interruptions matérielles et ce sont les interruptions logicielles qui sont en charge de venir traiter régulièrement le contenu du buffer de la carte réseau. @@ -107,22 +106,18 @@ Un extrait de la doc pour lire ça : (TL;DR, la deuxième indique les paquets dr > The second value, sd->dropped, is the number of network frames dropped because there was no room on the processing queue. More on this later. > The third value, sd->time_squeeze, is (as we saw) the number of times the net_rx_action loop terminated because the budget was consumed or the time limit was reached, but more work could have been. Increasing the budget as explained earlier can help reduce this. - Finalement, et contrairement à ce que je pensais au début, dans l'exemple collecté, ça ne serait peut-être pas tant la place dans le buffer qui manquerait, mais le temps pour le traiter. - -## Actions envisagées +# Actions envisagées - allouer plus de `budget` pour traiter le contenu de ce buffer - action à chaud : `sysctl -w net.core.netdev_budget=600` (l'unité étant le paquet traité, le temps étant plafonné à 2 jiffies, il y a un effet de seuil dans l'augmentation de la valeur. Par défaut le budget est de 300) - augmenter la taille du ring buffer, à 1024 voir au max à 4096 - ⚠️ fait un down/up sur la carte réseau donc drop toutes les connexions en cours ⚠️ - `ethtool -G ethX rx 1024` - -## Next steps +# Next steps Si cela ne suffit pas, d'autres pistes peuvent être explorées : -- irqbalance et le fait de répartir les gestionnaires d'interruptions sur tous plusieurs cœurs et de ne surtout pas en avoir plusieurs sur le même coeur. Le budget étant assigné à un coeur, si plusieurs gestionnaires d'interruptions sont assignés au même coeur, ils partageront le même budget. -A noter qu'un équilibrage automatique est réalisé sur les systèmes "modernes", nos centos 7 ont un process irqbalance qui tourne. Je ne m'attends donc pas de progrès de ce côté là, mais je n'ai pas creusé. +- irqbalance et le fait de répartir les gestionnaires d'interruptions sur tous plusieurs cœurs et de ne surtout pas en avoir plusieurs sur le même coeur. Le budget étant assigné à un coeur, si plusieurs gestionnaires d'interruptions sont assignés au même coeur, ils partageront le même budget. A noter qu'un équilibrage automatique est réalisé sur les systèmes "modernes", nos centos 7 ont un process irqbalance qui tourne. Je ne m'attends donc pas de progrès de ce côté là, mais je n'ai pas creusé. ## Quelques ressources documentaires From 889e9c7cfde1f6595271b2d9e2ffbecf521889d7 Mon Sep 17 00:00:00 2001 From: kleph Date: Wed, 28 Oct 2020 15:42:18 +0100 Subject: [PATCH 07/10] [lint] lint peering --- ...ring_free.mdown => parade_peering_free.md} | 65 ++++++++++++------- 1 file changed, 40 insertions(+), 25 deletions(-) rename content/{parade_peering_free.mdown => parade_peering_free.md} (84%) diff --git a/content/parade_peering_free.mdown b/content/parade_peering_free.md similarity index 84% rename from content/parade_peering_free.mdown rename to content/parade_peering_free.md index 310b8be..2385f14 100644 --- a/content/parade_peering_free.mdown +++ b/content/parade_peering_free.md @@ -12,75 +12,90 @@ Summary: Cet article montre comment j'ai redirigé une partie de mon trafic à t Ce soir je voulais suivre une des conférences TED en préparant à manger, et comme il y a une extension pour faire ça avec XBMC, ça ne devait pas être difficile. J'avais juste oublié un détail, ma connexion est fournie par Free, les connexions vers d'autres réseaux, aux "heures de pointe", sont, chaotiques, pour rester poli, dommage pour la fibre :'( # Idée + J'avais déjà eu ce genre de problème auparavant, avec youtube évidement, ainsi que les lives [twitch](http://www.twitch.tv). Pour youtube, un simple proxy suffit, ainsi que pour les vidéos déjà enregistrées de twitch. Mais pour les flux RTMP, j'ai joué un peu avec les possibilités de routage de Linux. J'ai redirigé d'abord une partie, puis finalement tout le trafic à destination du port 1935 à travers un VPN pour sortir depuis une machine ayant de meilleurs peerings. # En pratique + ## Prérequis + La mise en place du VPN n'est pas décrite ici, ce n'est pas l'objet. N'importe quel type de VPN routable devrait faire l'affaire. (j'utilise openvpn) Il faut aussi un noyau supportant le routage avancé. - TODO: config kernel +TODO: config kernel ## Marquage des paquets + On va tout d'abord isoler et marquer les paquets que l'on souhaite rediriger. Je l'ai fait avec iptables qui a une cible spécialement prévu à cet effet, [MARK][1]. - iptables -t mangle -A OUTPUT -p udp --dport 1935 -j MARK --set-mark 0x9 +```console +iptables -t mangle -A OUTPUT -p udp --dport 1935 -j MARK --set-mark 0x9 +``` Une fois ces paquets marqués, avec la marque /0x9/, ils vont être interceptés au moment du routage pour ne pas sortir par le même endroit que d'habitude. NOTE: Ici, j'utilise la chaîne **OUTPUT**, parce que la connexion est initialisée depuis la machine. Pour appliquer la marque aux paquets provenant d'une connexion routée par cette machine, il faut utiliser la chaîne **PREROUTING** (Voir plus bas). # Les tables de routage du noyau linux -En plus de la table de routage principale que l'on obtient avec la commande "ip route", le noyau linux comporte d'autres tables. Je ne les décrirai pas en détail ici, le [LARTC][2] le fait déjà (et en français, [ici][3]). + +En plus de la table de routage principale que l'on obtient avec la commande "ip route", le noyau linux comporte d'autres tables. Je ne les décrirai pas en détail ici, le [LARTC][2] le fait déjà (et en français, [ici][3]). Sachez juste qu'il est possible de rajouter des tables, en plus de la table "main", et que le fichier `/etc/iproute2/rt_tables` permet de nommer ces tables pour rendre plus explicite les n°. Vous verez d'ailleurs que ce fichier contient déjà des alias vers les tables par défaut. J'ai donc rajouté une ligne à ce fichier : - 2 vpn +```console +2 vpn +``` Et ensuite, je vais affecter une passerelle par défaut à cette table différente de celle de la table principale : - ip route add default via 192.168.1.1 table vpn - - +```console +ip route add default via 192.168.1.1 table vpn +``` + Il reste ensuite à définir la règle pour associer les paquets marqués par iptables à cette table de routage : - ip rule add fwmark 9 pref 10 lookup vpn - +```console +ip rule add fwmark 9 pref 10 lookup vpn +``` # Conclusion + Donc en résumé, les paquets seront reconnus par iptables, en fonction de critères classiques tels que l'adresse et/ou le port de destination, mais sachez que tous les critères d'iptables peuvent être utilisés pour celà, adresse/port source, ipset, nom d'utilisateur, etc... NOTE: Les marques sont locales à la machine et ne sont pas transmises sur le réseau. ## Sur la passerelle VPN + Cette passerelle me sert aussi de point d'accès wifi, avec la passerelle par défaut normale. J'ai donc ajouté le même script en modifiant l'IP de destination pour forcer ce type de trafic à passer par le VPN, une adresse en 10.0.0.1 chez moi. Dans la chaine PREROUTING cette fois car le traffic d'origine n'est pas local (cf. [Parcours des paquets dans netfilter][4]) # Le script + Voici le script que j'utilise pour faire tout ça. Finalement il est plutôt simple. - :::bash - #!/bin/sh - # route some ports/applications through the VPN - - VPN_GATEWAY=192.168.1.1 - - # mark the packets - # RTMP - iptables -t mangle -A OUTPUT -p udp --dport 1935 -j MARK --set-mark 0x9 - iptables -t mangle -A OUTPUT -p tcp --dport 1935 -j MARK --set-mark 0x9 - - # add route to redirect these packets - ip route add default via ${VPN_GATEWAY} table vpn - - # add rule to detect marked packets and to send that trafic to the new routing table - ip rule add fwmark 9 pref 10 lookup vpn +```bash +#!/bin/sh +# route some ports/applications through the VPN +VPN_GATEWAY=192.168.1.1 + +# mark the packets +# RTMP +iptables -t mangle -A OUTPUT -p udp --dport 1935 -j MARK --set-mark 0x9 +iptables -t mangle -A OUTPUT -p tcp --dport 1935 -j MARK --set-mark 0x9 + +# add route to redirect these packets +ip route add default via ${VPN_GATEWAY} table vpn + +# add rule to detect marked packets and to send that trafic to the new routing table +ip rule add fwmark 9 pref 10 lookup vpn +``` # Liens + Les quelques liens cités dans cet article. [1]: http://www.inetdoc.net/guides/iptables-tutorial/marktarget.html "MARK target" From 0b11ae494114bf132351f5ae0e0a3a4af6f1e1d1 Mon Sep 17 00:00:00 2001 From: kleph Date: Wed, 28 Oct 2020 16:56:54 +0100 Subject: [PATCH 08/10] [lint] lint raspi --- content/{raspi_therm.mdown => raspi_therm.md} | 33 ++++++++++++------- 1 file changed, 22 insertions(+), 11 deletions(-) rename content/{raspi_therm.mdown => raspi_therm.md} (96%) diff --git a/content/raspi_therm.mdown b/content/raspi_therm.md similarity index 96% rename from content/raspi_therm.mdown rename to content/raspi_therm.md index 1566b93..8af0c64 100644 --- a/content/raspi_therm.mdown +++ b/content/raspi_therm.md @@ -13,35 +13,41 @@ Je me suis beaucoup inspiré du site [framboise314][1], avec un ajout de configu [TOC] # Matériel + - une sonde DS18B20 - une nappe IDE (40 fils) pour se brancher sur le port GPIO de la raspi - une [raspberry pi][4] ## Images + Le montage est très bien décrit sur le site de [framboise314][1], je ne le décrirais donc pas à nouveau. J'ai choisi la version "standard" à 3 fils. -Voici une image de la raspi : [![raspi](images/therm_raspi_small.jpg)][5] +Voici une image de la raspi : [![raspi](images/therm_raspi_small.jpg)][5] et une de la breadboard : [![breadboard](images/therm_raspi_bread_small.jpg)][6] et une sans la breadboard : [![without_breadboard](images/therm_raspi_without_breadboard_small.jpg)][7] - # Logiciel ## Ajout de l'overlay (3.18+) + Dans le fichier `/boot/config.txt`, il faut ajouter le chargement d'un overlay pour le DTB. J'en parle très succintement [ici][2] avec un lien vers [devicetree.org][3], c'est une description du matériel qui permet au noyau d'activer et de configurer certaines parties de la carte. Il me semble qu'avant le 3.18 cette description était statique pour la raspi. -``` + +```bash dtoverlay=w1-gpio ``` + Une version `-pullup` est aussi disponible, mais n'est nécessaire que si on branche le capteur en mode parasite (la version 2 fils, en reliant la patte d'alimentation avec la patte data) Ensuite dans `/etc/modules`, on rajoute le chargement des pilotes 1-wire : -``` -w1-gpio + +```bash +w1-gpio w1-therm ``` -Comme pour la DTB, je n'ai pas activé l'option `pullup=1`. + +Comme pour la DTB, je n'ai pas activé l'option `pullup=1`. # Lecture de la valeur @@ -49,33 +55,38 @@ Si le dispositif fonctionne bien et que les pilotes sont chargés, un fichier es En lisant ce fichier, on obtient sur le CRC de la lecture sur la première ligne qui permet de déterminer si la lecture de la valeur et sa transmission au pilote a fonctionné. Voici un exemple d'une sortie en erreur : -``` + +```console cat : /sys/bus/w1/devices/28-001451521dff 00 00 00 00 00 00 00 00 00 : crc=00 NO 00 00 00 00 00 00 00 00 00 t=0 ``` On retrouve alors dans les logs un message : -``` + +```console w1_slave_driver 28-001451521dff: Read failed CRC check ``` J'utilisais alors une nappe IDE de longueur classique, environ 60 cm, cela semble être trop. En utilisant une nappe plus courte (5cm, je ne sais plus du tout dans quelle machine j'ai récupéré ça), j'ai obtenu une sortie correcte : -``` + +```console 78 01 55 00 7f ff 0c 10 57 : crc=57 YES 78 01 55 00 7f ff 0c 10 57 t=23500 ``` La deuxième ligne donne la température en millième de °C. - # Plugin collectd + Dans un premier temps, je vais utiliser un script shell et le plugin [Exec][8] de collectd. J'essaierai de faire une meilleure version du plugin, en C je suppose, plus tard. ## En utilisant le plugin exec + Voici un exemple de script donné sur la page [wiki du plugin][7], adaptée pour ce capteur : + ``` bash #!/bin/bash # script to read DS18B20 temp value and output in collectd format @@ -95,10 +106,10 @@ Voici un exemple de script donné sur la page [wiki du plugin][7], adaptée pour value=$(awk -F "t=" '/t=/ {print $2/1000}' ${probe_path}) echo "PUTVAL \"${HOSTNAME}/exec-temp/gauge-DS18B20\" interval=${INTERVAL} N:${value}" done - ``` Voici la configuration du plugin dans le fichier `collectd.conf`. Notez l'id de la sonde en paramètre du plugin, il sera passé au script de lecture. + ``` bash Exec "pi" "/home/pi/read_temp.sh" "28-001451521dff" From 9bea012cd8509689ef0246ee1a50023347176230 Mon Sep 17 00:00:00 2001 From: kleph Date: Wed, 28 Oct 2020 17:03:01 +0100 Subject: [PATCH 09/10] [lint] lint jouet_fr --- content/{jouet_fr.mdown => jouet_fr.md} | 125 ++++++++++++++---------- 1 file changed, 71 insertions(+), 54 deletions(-) rename content/{jouet_fr.mdown => jouet_fr.md} (85%) diff --git a/content/jouet_fr.mdown b/content/jouet_fr.md similarity index 85% rename from content/jouet_fr.mdown rename to content/jouet_fr.md index 22c0596..9749fc2 100644 --- a/content/jouet_fr.mdown +++ b/content/jouet_fr.md @@ -8,48 +8,56 @@ Slug: Home router with sama5d35 Lang: fr Summary: Un article dans lequel je vais essayer de décrire/documenter comment j'ai installé une debian à côté de l'OS de démo sur la carte sama5d35 gagnée au Fosdem 2013 (merci encore ! ) - Un article dans lequel je vais essayer de décrire/documenter comment j'ai installé une debian à côté de l'OS de démo sur la carte sama5d35 gagnée au Fosdem 2013 (merci encore ! ) L'idée était de ne pas écraser le système de démo et d'essayer d'utiliser le système le plus "normal" possible. C'est à dire le moins de patch noyau et une debian ARM. [TOC] -## Compilation -### Toolchain / sources +# Compilation + +## Toolchain / sources + Je me suis inspiré de ce [wiki][1] pour gcc et u-boot. J'ai aussi pris les patch u-boot en suivant les liens donnés sur le wiki. Une fois le compilateur installé, on exporte la variable `CC` qui contient le chemin et le préfix de l'architecture et en informant make que l'on utilise un autre compilateur : + ``` bash - export CC=`${HOME}/cross/gcc-arm-none-eabi-4_6-2012q4/bin/arm-none-eabi- - ARCH=arm CROSS_COMPILE=${CC} make [...] +export CC=`${HOME}/cross/gcc-arm-none-eabi-4_6-2012q4/bin/arm-none-eabi- +ARCH=arm CROSS_COMPILE=${CC} make [...] ``` + U-boot et le noyau seront compilés de cette manière. Comme je le dirai plus bas, je n'ai pas utilisé at91bootstrap et j'ai laissé celui d'origine dans le firmware. -### u-boot +## u-boot + - Sources - Patches - Configuration : `ARCH=arm CROSS_COPILE=${CC} make sama5d3x_defconfig` - Installation : copie de `u-boot.bin à la racine de la carte SD -### Noyau +## Noyau + - at91 patché [TODO: retrouver l'adresse du git] - Les patch d'at91 ne sont toujours pas intégrés au noyau 3.9. - Peut-être pour le 3.10 ? Oui \o/ à tester ;-) -#### 3.10.1 +### 3.10.1 + - Essai de compilation à partir de la configuration fonctionnelle du 3.6.9 - Freeze au chargement de l'usb - Si je désactive l'USB, ça freeze au chargement des pilotes mmc. - À creuser vu que ces deux sous-systèmes utilisent le DMA et j'ai cru voir que cette partie n'était pas terminée. -#### 3.12 +### 3.12 + - Ça marche ! - Par rapport à la version -rc3, j'ai activé le debug DMA - Activé le thumb2 workaround pour netfilter et rajouté des *_nftables. TODO retester sans le thumb2 workaround - TODO refaire les tests sans les workaround -#### Script de compilation du noyau +### Script de compilation du noyau + Voici un exemple de script de compilation du noyau ``` bash @@ -85,7 +93,8 @@ make ARCH=arm CROSS_COMPILE=${CC} modules_install INSTALL_MOD_PATH=${DEPLOY_PATH make ARCH=arm CROSS_COMPILE=${CC} firmware_install INSTALL_FW_PATH=${DEPLOY_PATH}/firmware ``` -#### Déploiement et tests +### Déploiement et tests + Une fois tous les éléments compilés, il faut copier les fichiers dans `/boot`. Vu que pour l'instant, je n'ai pas réussi à compiler de noyau mainline fonctionnel, je copie les fichiers à côté de ceux du 3.6.9-at91 qui fonctionnent. @@ -96,8 +105,10 @@ rsync -aP arch/arm/boot/dts atmel-host:/boot/dtbs-new rsync -aP arch/arm/boot/zImage atmel-host:/boot/zImage-new ``` -## Configuration -### Firmware +# Configuration + +## Firmware + Je n'ai pas flashé le bootloader ni la NAND pour l'instant. Le chargeur d'amorçage interne [at91bootstrap] vérifie s'il y a une carte SD avant de démarrer sur la NAND. @@ -112,30 +123,32 @@ Pour la configuration, j'ai utilisé le cable µUSB<-> USB pour connecter la car Ensuite, j'ai utilisé `screen` pour me connecter à la console série : - screen /dev/ttyACM0 +```bash +screen /dev/ttyACM0 +``` !!! NOTE: On peut interrompre le démarrage d'U-Boot en frappant une touche avant qu'il ne commence à analyser les différents périphériques d'amorçage. +# Chargeur d'amorçage -## Chargeur d'amorçage Les paramètres d'U-boot On peut configurer les paramètres qu'U-Boot utilisera depuis la ligne de commande. Voici des paramètres pour démarrer le noyau original fourni avec la carte et un système sur la carte SD : -``` +```bash setenv bootargs console=ttyS0,115200 mtdparts=atmel_nand:8M(bootstrap/uboot/kernel)ro,-(rootfs) rw rootfs=ext3 root=/dev/mmcblk0p2 rootdelay=2 ``` Pour les archives, voici les paramètres de démarrage d'origine, pour démarrer depuis la NAND : -``` +```bash console=ttyS0,115200 mtdparts=atmel_nand:8M(bootstrap/uboot/kernel)ro,-(rootfs) rw rootfstype=ubifs ubi.mtd=1 root=ubi0:rootfs ``` - Les paramètres peuvent être aussi être donnés dans un fichier de configuration : `uEnv.txt` Voici le mien : + ``` bash dtb_file=sama5d35ek.dtb @@ -147,6 +160,7 @@ mmcrootfstype=ext2 rootwait fixrtc ``` Voici ma configuration u-boot après l'interruption : + ``` bash baudrate=115200 bootargs=console=ttyS0,115200 earlyprintk root=/dev/mmcblk0p2 rw rootfstype=ext2 rootwait @@ -170,8 +184,7 @@ mmcroot=/dev/mmcblk0p2 ro mmcrootfstype=ext4 rootwait ``` - -La ligne bootcmd va être exécutée lorque l'on tape `boot`. +La ligne bootcmd va être exécutée lorque l'on tape `boot`. Elle est composée de plusieurs autres commandes : - `loadenv` qui charge le fichier `uEnv.txt`(bootenv) en mémoire, puis `importenv` qui lit la configuration @@ -183,30 +196,35 @@ On voit donc que la plupart des noms de fichiers sont paramétrables, on peut do Voici donc les commandes pour booter le noyau de test compilé plus haut : -``` +```bash bootfile=zImage-new loaddtb=load mmc ${mmcdev} ${dtbaddr} /dtbs-new/${dtb_file} boot ``` -## Système d'exploitation +# Système d'exploitation + - debian wheezy armhf installée avec `debootstrap --arch=armhf`, puis en ajoutant `--stage2`une fois la carte sd montée depuis le système ARM existant dans la NAND + TODO: retrouver les commande initiales pour lancer debootstrap -## Mon expérience -### Uname +# Mon expérience + +## Uname + - Linux jouet 3.6.9-sama5-armv7-d0.8 #1 Wed May 8 13:04:54 CEST 2013 armv7l GNU/Linux -### Mon usage -J'utilise la carte comme routeur pour ma connexion internet. -Je l'utilise aussi pour quelques autres services liés au réseau : serveur DHCP, Annonces RA, serveur DNS (comme serveur faisant autorité ainsi que comme resolver/cache pour le lan), pare-feu et serveur NTP pour le lan. +## Mon usage + +J'utilise la carte comme routeur pour ma connexion internet. +Je l'utilise aussi pour quelques autres services liés au réseau : serveur DHCP, Annonces RA, serveur DNS (comme serveur faisant autorité ainsi que comme resolver/cache pour le lan), pare-feu et serveur NTP pour le lan. J'ai une connexion plutôt bonne, FTTH, 100 Mbps / 50 Mbps, d'après le vendeur, et au moins séparément, cela semble vrai. -Le système semble parfaitement stable et n'a pour l'instant jamais planté ni affiché de message d'erreur particulier dans les logs kernel. +Le système semble parfaitement stable et n'a pour l'instant jamais planté ni affiché de message d'erreur particulier dans les logs kernel. J'ai du mal à utiliser toute ma connexion avec la carte, parce que le trafic réseau provoque énormément d'IRQ et celà occupe tout le processeur. J'essaie d'investiguer pour savoir si on ne pourrait pas faire mieux avec les noyaux plus récents. +## Mesures -### Mesures Quelques "mesures" faites avec le noyau 3.6.9-at91, avec routage IPv6 et NAT IPv4 : Métrique | DL Steam | BT | FTPS | HTTP | @@ -215,46 +233,46 @@ eth0 RX (bit/s) | 275k | 25 M | | | eth0 TX (bit/s) | 45 M | 2 M | 65 M | 70 M | eth0 RX (pkt/s) | 500 | 1.4k | 2.7 k | 2.5k | eth0 TX (pkt/s) | 4000 | 2.2k | 5.5 k | 5.5k | ----------- +----------------|----------|-------|--------|--------| eth1 RX (bit/s) | 45 M | 2 M | 65 M | 70 M | eth1 TX (bit/s) | 275 k | 25 M | | | eth1 RX (pkt/s) | 4000 | 2.2k | 5.5 k | 5.5k | eth1 TX (pkt/s) | 500 | 1.4k | 2.7 k | 2.5k | ----------- +----------------|----------|-------|--------|--------| IRQ (%) | 60 | | 65 | 80 | Sys (%) | | | | | User (%) | | | | 4 | Idle (%) | | | 30 | 15 | ----------- -eth0 IRQ | | | | 8k | -eth1 IRQ | | | | 8k | +----------------|----------|-------|--------|--------| +eth0 IRQ | | | 8k | | +eth1 IRQ | | | | 8k | Sur le dernier test, en HTTP, on remarque qu'il semble y avoir autant d'interruptions que de paquets reçus/envoyés. Le mécanisme NAPI qui permet de stocker les interruptions pour passer plusieurs paquets d'un seul coup au noyau ne semble pas activé/disponible. Ce qui serai plutôt une bonne nouvelle et permettrai d'augmenter les performances à l'avenir. -#### 3.6.12 +### 3.6.12 Métrique | HTTP(routé) | HTTP local | ----------------|---------------|--------------| -eth0 RX (bit/s) | | | -eth0 TX (bit/s) | 60 M | | -eth0 RX (pkt/s) | 2.5k | | -eth0 TX (pkt/s) | 5k | | ----------- -eth1 RX (bit/s) | 60 M | 55 M | -eth1 TX (bit/s) | | | -eth1 RX (pkt/s) | 5 k | 4.7k | -eth1 TX (pkt/s) | 2.5k | 1.5k | ----------- -IRQ (%) | 85 | 65 | -Sys (%) | | 12 | -User (%) | 0 | 4 | -Idle (%) | 15 | 17 | ----------- -eth0 IRQ | 8k | | -eth1 IRQ | 8k | 2.2k| - +eth0 RX (bit/s) | | | +eth0 TX (bit/s) | 60 M | | +eth0 RX (pkt/s) | 2.5k | | +eth0 TX (pkt/s) | 5k | | +----------------|---------------|--------------| +eth1 RX (bit/s) | 60 M | 55 M | +eth1 TX (bit/s) | | | +eth1 RX (pkt/s) | 5 k | 4.7k | +eth1 TX (pkt/s) | 2.5k | 1.5k | +----------------|---------------|--------------| +IRQ (%) | 85 | 65 | +Sys (%) | | 12 | +User (%) | 0 | 4 | +Idle (%) | 15 | 17 | +----------------|---------------|--------------| +eth0 IRQ | 8k | | +eth1 IRQ | 8k | 2.2k | # Images + [![atmel et raspi](http://blog.kleph.eu/images/atmel_et_raspi_small.png)][5] [1]: http://www.eewiki.net/display/linuxonarm/SAMA5D3 @@ -263,7 +281,6 @@ eth1 IRQ | 8k | 2.2k| [4]: http://www.devicetree.org/Main_Page [5]: http://blog.kleph.eu/images/atmel_et_raspi.jpg - From 2ea837601eb273068f19190a58ad362c94d2e358 Mon Sep 17 00:00:00 2001 From: kleph Date: Wed, 28 Oct 2020 17:48:13 +0100 Subject: [PATCH 10/10] [lint] lint jouet_en --- content/{jouet_en.mdown => jouet_en.md} | 43 +++++++++++++++++-------- 1 file changed, 29 insertions(+), 14 deletions(-) rename content/{jouet_en.mdown => jouet_en.md} (77%) diff --git a/content/jouet_en.mdown b/content/jouet_en.md similarity index 77% rename from content/jouet_en.mdown rename to content/jouet_en.md index 29b67f1..83297ca 100644 --- a/content/jouet_en.mdown +++ b/content/jouet_en.md @@ -12,7 +12,8 @@ Summary: Here is an article in which I will try to describe/document how I insta Here is an article in which I will try to describe/document how I installed a normal debian beside the original demo OS on the sama5d35 board won at Fosdem 2013 (thanks again !) -## firmware +# firmware + I did not flash the bootloader nor the NAND for now. The internal bootloader [name] checks for SD card before the NAND. @@ -27,48 +28,62 @@ But with U-Boot and a kernel on a FAT(16 or 32) partition on a SD-card, you can For the setup, I used the uUSB to USB cable to connect the board to my desktop. I use screen to connect to the serial console. - screen /dev/ttyACM0 + +```bash +screen /dev/ttyACM0 +``` NOTE: You can interrupt the original U-boot boot process by hitting any key before it starts to scan boot devices. +# Boot loader -## Boot loader Uboot paramaters You may configure U-Boot boot parameters in Uboot shell This one is for booting the original kernel, and rootfs (and /) on ne nor partition - setenv bootargs console=ttyS0,115200 mtdparts=atmel_nand:8M(bootstrap/uboot/kernel)ro,-(rootfs) rw rootfs=ext3 root=/dev/mmcblk0p2 rootdelay=2 - +```bash +setenv bootargs console=ttyS0,115200 mtdparts=atmel_nand:8M(bootstrap/uboot/kernel)ro,-(rootfs) rw rootfs=ext3 root=/dev/mmcblk0p2 rootdelay=2 +``` For the records, the original boot params to boot from the Nand: - console=ttyS0,115200 mtdparts=atmel_nand:8M(bootstrap/uboot/kernel)ro,-(rootfs) rw rootfstype=ubifs ubi.mtd=1 root=ubi0:rootfs - - -#boot +```bash +console=ttyS0,115200 mtdparts=atmel_nand:8M(bootstrap/uboot/kernel)ro,-(rootfs) rw rootfstype=ubifs ubi.mtd=1 root=ubi0:rootfs +``` +# Boot ## kernel + - at91 patched - this at91 still not in 3.9. 15-20 patches need to be added - 3.10 ? Yes ! sama5d35 support has been merge into mainlin kernel 3.10 ! TODO: test it. ## base system + - debian armhf -## uname +## uname + - Linux jouet 3.6.9-sama5-armv7-d0.8 #1 Wed May 8 13:04:54 CEST 2013 armv7l GNU/Linux ## My mileage + I am using the board as a router for my home connection. Also for a few additional services: DHCP server, RA announcer, DNS server (authority and resolver/cache for the lan), firewall and NTP server for the lan. I have a pretty decent connection, FTTH, 100 Mbps / 50 Mbps, vendor stated. - # Images -[![atmel et raspi](http://blog.kleph.eu/images/atmel_et_raspi_small.png)][2] -[2]: http://blog.kleph.eu/images/atmel_et_raspi.jpg + +[![atmel et raspi](http://blog.kleph.eu/images/atmel_et_raspi_small.png)][5] + +[1]: http://www.eewiki.net/display/linuxonarm/SAMA5D3 +[2]: Atmel_11121_32-bit-Cortex-A5-Microcontroller_SAMA5D3_Datasheet.pdf +[3]: Atmel_11180_32-bit-Cortex-A5-Microcontroller_SAMA5D3-Series-EK_User-Guide.pdf +[4]: http://www.devicetree.org/Main_Page +[5]: http://blog.kleph.eu/images/atmel_et_raspi.jpg +