lint-all #3
9 changed files with 185 additions and 118 deletions
|
@ -1,3 +1,4 @@
|
||||||
all
|
all
|
||||||
exclude_rule 'MD013'
|
exclude_rule 'MD013'
|
||||||
|
exclude_rule 'MD024' # multiple headers with the same content
|
||||||
exclude_rule 'MD041' # help with pelican format
|
exclude_rule 'MD041' # help with pelican format
|
||||||
|
|
|
@ -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
|
# Détection
|
||||||
|
|
||||||
À l'insertion de la clé, le noyau semble la détecter correctement, avec sa taille annoncée de 128 Go
|
À 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
|
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: Attached scsi generic sg2 type 0
|
||||||
sd 14:0:0:0: [sdc] 262144000 512-byte logical blocks: (134 GB/125 GiB)
|
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.
|
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
|
# ./f3probe /dev/sdc
|
||||||
F3 probe 5.0
|
F3 probe 5.0
|
||||||
Copyright (C) 2010 Digirati Internet LTDA.
|
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.
|
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
|
# 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
|
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.
|
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.
|
`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 :
|
Dans mon cas :
|
||||||
```
|
|
||||||
|
``` console
|
||||||
f3fix --last-sec=26984447 /dev/sdc
|
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.
|
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.
|
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.
|
||||||
|
|
|
@ -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 :-)
|
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.
|
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.
|
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)
|
![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.
|
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.
|
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 :-)
|
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.
|
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)
|
![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.
|
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.
|
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.
|
|
@ -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 !)
|
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.
|
I did not flash the bootloader nor the NAND for now.
|
||||||
|
|
||||||
The internal bootloader [name] checks for SD card before the NAND.
|
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.
|
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.
|
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.
|
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
|
Uboot paramaters
|
||||||
|
|
||||||
You may configure U-Boot boot parameters in Uboot shell
|
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
|
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:
|
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
|
```bash
|
||||||
|
console=ttyS0,115200 mtdparts=atmel_nand:8M(bootstrap/uboot/kernel)ro,-(rootfs) rw rootfstype=ubifs ubi.mtd=1 root=ubi0:rootfs
|
||||||
|
```
|
||||||
#boot
|
|
||||||
|
|
||||||
|
# Boot
|
||||||
|
|
||||||
## kernel
|
## kernel
|
||||||
|
|
||||||
- at91 patched
|
- at91 patched
|
||||||
- this at91 still not in 3.9. 15-20 patches need to be added
|
- 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.
|
- 3.10 ? Yes ! sama5d35 support has been merge into mainlin kernel 3.10 ! TODO: test it.
|
||||||
|
|
||||||
## base system
|
## base system
|
||||||
|
|
||||||
- debian armhf
|
- 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
|
- Linux jouet 3.6.9-sama5-armv7-d0.8 #1 Wed May 8 13:04:54 CEST 2013 armv7l GNU/Linux
|
||||||
|
|
||||||
## My mileage
|
## My mileage
|
||||||
|
|
||||||
I am using the board as a router for my home connection.
|
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.
|
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.
|
I have a pretty decent connection, FTTH, 100 Mbps / 50 Mbps, vendor stated.
|
||||||
|
|
||||||
|
|
||||||
# Images
|
# 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
|
||||||
|
|
||||||
<!---
|
<!---
|
||||||
vim: bg=light
|
vim: bg=dark
|
||||||
--->
|
--->
|
|
@ -8,48 +8,56 @@ Slug: Home router with sama5d35
|
||||||
Lang: fr
|
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 ! )
|
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 ! )
|
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.
|
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]
|
[TOC]
|
||||||
|
|
||||||
## Compilation
|
# Compilation
|
||||||
### Toolchain / sources
|
|
||||||
|
## 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.
|
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 :
|
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
|
``` bash
|
||||||
export CC=`${HOME}/cross/gcc-arm-none-eabi-4_6-2012q4/bin/arm-none-eabi-
|
export CC=`${HOME}/cross/gcc-arm-none-eabi-4_6-2012q4/bin/arm-none-eabi-
|
||||||
ARCH=arm CROSS_COMPILE=${CC} make [...]
|
ARCH=arm CROSS_COMPILE=${CC} make [...]
|
||||||
```
|
```
|
||||||
|
|
||||||
U-boot et le noyau seront compilés de cette manière.
|
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.
|
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
|
- Sources
|
||||||
- Patches
|
- Patches
|
||||||
- Configuration : `ARCH=arm CROSS_COPILE=${CC} make sama5d3x_defconfig`
|
- Configuration : `ARCH=arm CROSS_COPILE=${CC} make sama5d3x_defconfig`
|
||||||
- Installation : copie de `u-boot.bin à la racine de la carte SD
|
- Installation : copie de `u-boot.bin à la racine de la carte SD
|
||||||
|
|
||||||
### Noyau
|
## Noyau
|
||||||
|
|
||||||
- at91 patché [TODO: retrouver l'adresse du git]
|
- at91 patché [TODO: retrouver l'adresse du git]
|
||||||
- Les patch d'at91 ne sont toujours pas intégrés au noyau 3.9.
|
- Les patch d'at91 ne sont toujours pas intégrés au noyau 3.9.
|
||||||
- Peut-être pour le 3.10 ? Oui \o/ à tester ;-)
|
- 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
|
- Essai de compilation à partir de la configuration fonctionnelle du 3.6.9
|
||||||
- Freeze au chargement de l'usb
|
- Freeze au chargement de l'usb
|
||||||
- Si je désactive l'USB, ça freeze au chargement des pilotes mmc.
|
- 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.
|
- À 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 !
|
- Ça marche !
|
||||||
- Par rapport à la version -rc3, j'ai activé le debug DMA
|
- 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
|
- Activé le thumb2 workaround pour netfilter et rajouté des *_nftables. TODO retester sans le thumb2 workaround
|
||||||
- TODO refaire les tests sans les 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
|
Voici un exemple de script de compilation du noyau
|
||||||
|
|
||||||
``` bash
|
``` 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
|
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`.
|
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.
|
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
|
rsync -aP arch/arm/boot/zImage atmel-host:/boot/zImage-new
|
||||||
```
|
```
|
||||||
|
|
||||||
## Configuration
|
# Configuration
|
||||||
### Firmware
|
|
||||||
|
## Firmware
|
||||||
|
|
||||||
Je n'ai pas flashé le bootloader ni la NAND pour l'instant.
|
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.
|
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 :
|
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.
|
!!! 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
|
Les paramètres d'U-boot
|
||||||
|
|
||||||
On peut configurer les paramètres qu'U-Boot utilisera depuis la ligne de commande.
|
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 :
|
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
|
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 :
|
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
|
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`
|
Les paramètres peuvent être aussi être donnés dans un fichier de configuration : `uEnv.txt`
|
||||||
Voici le mien :
|
Voici le mien :
|
||||||
|
|
||||||
``` bash
|
``` bash
|
||||||
dtb_file=sama5d35ek.dtb
|
dtb_file=sama5d35ek.dtb
|
||||||
|
|
||||||
|
@ -147,6 +160,7 @@ mmcrootfstype=ext2 rootwait fixrtc
|
||||||
```
|
```
|
||||||
|
|
||||||
Voici ma configuration u-boot après l'interruption :
|
Voici ma configuration u-boot après l'interruption :
|
||||||
|
|
||||||
``` bash
|
``` bash
|
||||||
baudrate=115200
|
baudrate=115200
|
||||||
bootargs=console=ttyS0,115200 earlyprintk root=/dev/mmcblk0p2 rw rootfstype=ext2 rootwait
|
bootargs=console=ttyS0,115200 earlyprintk root=/dev/mmcblk0p2 rw rootfstype=ext2 rootwait
|
||||||
|
@ -170,7 +184,6 @@ mmcroot=/dev/mmcblk0p2 ro
|
||||||
mmcrootfstype=ext4 rootwait
|
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 :
|
Elle est composée de plusieurs autres commandes :
|
||||||
|
|
||||||
|
@ -183,21 +196,26 @@ 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 :
|
Voici donc les commandes pour booter le noyau de test compilé plus haut :
|
||||||
|
|
||||||
```
|
```bash
|
||||||
bootfile=zImage-new
|
bootfile=zImage-new
|
||||||
loaddtb=load mmc ${mmcdev} ${dtbaddr} /dtbs-new/${dtb_file}
|
loaddtb=load mmc ${mmcdev} ${dtbaddr} /dtbs-new/${dtb_file}
|
||||||
boot
|
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
|
- 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
|
TODO: retrouver les commande initiales pour lancer debootstrap
|
||||||
|
|
||||||
## Mon expérience
|
# Mon expérience
|
||||||
### Uname
|
|
||||||
|
## Uname
|
||||||
|
|
||||||
- Linux jouet 3.6.9-sama5-armv7-d0.8 #1 Wed May 8 13:04:54 CEST 2013 armv7l GNU/Linux
|
- Linux jouet 3.6.9-sama5-armv7-d0.8 #1 Wed May 8 13:04:54 CEST 2013 armv7l GNU/Linux
|
||||||
|
|
||||||
### Mon usage
|
## Mon usage
|
||||||
|
|
||||||
J'utilise la carte comme routeur pour ma connexion internet.
|
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.
|
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.
|
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.
|
||||||
|
@ -205,8 +223,8 @@ J'ai une connexion plutôt bonne, FTTH, 100 Mbps / 50 Mbps, d'après le vendeur,
|
||||||
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.
|
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 :
|
Quelques "mesures" faites avec le noyau 3.6.9-at91, avec routage IPv6 et NAT IPv4 :
|
||||||
|
|
||||||
Métrique | DL Steam | BT | FTPS | HTTP |
|
Métrique | DL Steam | BT | FTPS | HTTP |
|
||||||
|
@ -215,23 +233,23 @@ eth0 RX (bit/s) | 275k | 25 M | | |
|
||||||
eth0 TX (bit/s) | 45 M | 2 M | 65 M | 70 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 RX (pkt/s) | 500 | 1.4k | 2.7 k | 2.5k |
|
||||||
eth0 TX (pkt/s) | 4000 | 2.2k | 5.5 k | 5.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 RX (bit/s) | 45 M | 2 M | 65 M | 70 M |
|
||||||
eth1 TX (bit/s) | 275 k | 25 M | | |
|
eth1 TX (bit/s) | 275 k | 25 M | | |
|
||||||
eth1 RX (pkt/s) | 4000 | 2.2k | 5.5 k | 5.5k |
|
eth1 RX (pkt/s) | 4000 | 2.2k | 5.5 k | 5.5k |
|
||||||
eth1 TX (pkt/s) | 500 | 1.4k | 2.7 k | 2.5k |
|
eth1 TX (pkt/s) | 500 | 1.4k | 2.7 k | 2.5k |
|
||||||
----------
|
----------------|----------|-------|--------|--------|
|
||||||
IRQ (%) | 60 | | 65 | 80 |
|
IRQ (%) | 60 | | 65 | 80 |
|
||||||
Sys (%) | | | | |
|
Sys (%) | | | | |
|
||||||
User (%) | | | | 4 |
|
User (%) | | | | 4 |
|
||||||
Idle (%) | | | 30 | 15 |
|
Idle (%) | | | 30 | 15 |
|
||||||
----------
|
----------------|----------|-------|--------|--------|
|
||||||
eth0 IRQ | | | | 8k |
|
eth0 IRQ | | | 8k | |
|
||||||
eth1 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.
|
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 |
|
Métrique | HTTP(routé) | HTTP local |
|
||||||
----------------|---------------|--------------|
|
----------------|---------------|--------------|
|
||||||
|
@ -239,22 +257,22 @@ eth0 RX (bit/s) | | |
|
||||||
eth0 TX (bit/s) | 60 M | |
|
eth0 TX (bit/s) | 60 M | |
|
||||||
eth0 RX (pkt/s) | 2.5k | |
|
eth0 RX (pkt/s) | 2.5k | |
|
||||||
eth0 TX (pkt/s) | 5k | |
|
eth0 TX (pkt/s) | 5k | |
|
||||||
----------
|
----------------|---------------|--------------|
|
||||||
eth1 RX (bit/s) | 60 M | 55 M |
|
eth1 RX (bit/s) | 60 M | 55 M |
|
||||||
eth1 TX (bit/s) | | |
|
eth1 TX (bit/s) | | |
|
||||||
eth1 RX (pkt/s) | 5 k | 4.7k |
|
eth1 RX (pkt/s) | 5 k | 4.7k |
|
||||||
eth1 TX (pkt/s) | 2.5k | 1.5k |
|
eth1 TX (pkt/s) | 2.5k | 1.5k |
|
||||||
----------
|
----------------|---------------|--------------|
|
||||||
IRQ (%) | 85 | 65 |
|
IRQ (%) | 85 | 65 |
|
||||||
Sys (%) | | 12 |
|
Sys (%) | | 12 |
|
||||||
User (%) | 0 | 4 |
|
User (%) | 0 | 4 |
|
||||||
Idle (%) | 15 | 17 |
|
Idle (%) | 15 | 17 |
|
||||||
----------
|
----------------|---------------|--------------|
|
||||||
eth0 IRQ | 8k | |
|
eth0 IRQ | 8k | |
|
||||||
eth1 IRQ | 8k | 2.2k|
|
eth1 IRQ | 8k | 2.2k |
|
||||||
|
|
||||||
|
|
||||||
# Images
|
# Images
|
||||||
|
|
||||||
[![atmel et raspi](http://blog.kleph.eu/images/atmel_et_raspi_small.png)][5]
|
[![atmel et raspi](http://blog.kleph.eu/images/atmel_et_raspi_small.png)][5]
|
||||||
|
|
||||||
[1]: http://www.eewiki.net/display/linuxonarm/SAMA5D3
|
[1]: http://www.eewiki.net/display/linuxonarm/SAMA5D3
|
||||||
|
@ -263,7 +281,6 @@ eth1 IRQ | 8k | 2.2k|
|
||||||
[4]: http://www.devicetree.org/Main_Page
|
[4]: http://www.devicetree.org/Main_Page
|
||||||
[5]: http://blog.kleph.eu/images/atmel_et_raspi.jpg
|
[5]: http://blog.kleph.eu/images/atmel_et_raspi.jpg
|
||||||
|
|
||||||
|
|
||||||
<!---
|
<!---
|
||||||
vim: spelllang=fr
|
vim: spelllang=fr
|
||||||
--->
|
--->
|
|
@ -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.
|
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.
|
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 :
|
Voici le script précédent que je vais remplacer, c'est de la masquarade simple :
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
@ -39,7 +39,8 @@ echo "1" > /proc/sys/net/ipv4/ip_forward
|
||||||
iptables -t nat -o tun0 -A POSTROUTING -j MASQUERADE
|
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]
|
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.
|
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.
|
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.
|
|
@ -7,7 +7,6 @@ Tags: manger
|
||||||
Lang: fr
|
Lang: fr
|
||||||
Summary: J'ai fait une ouiche il y a pas longtemps et elle semble avoir eu pas mal de succès.
|
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.
|
J'ai fait une ouiche il y a pas longtemps et elle semble avoir eu pas mal de succès.
|
||||||
|
|
||||||
Voici donc la recette.
|
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)
|
- 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
|
# Réalisation
|
||||||
|
|
||||||
Étaler la pâte dans un plat à tarte puis la piquer, avec une fourchette par exemple.
|
É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.
|
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é.
|
Saupoudrer d'emmental rapé.
|
||||||
|
|
||||||
# Cuisson
|
# 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.
|
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.
|
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.
|
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 :-)
|
Laisser refroidir un peu ou beaucoup selon si on veut la manger chaude ou l'emmener en picnic :-)
|
|
@ -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 :'(
|
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
|
# 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).
|
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.
|
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
|
# En pratique
|
||||||
|
|
||||||
## Prérequis
|
## Prérequis
|
||||||
|
|
||||||
La mise en place du VPN n'est pas décrite ici, ce n'est pas l'objet.
|
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)
|
N'importe quel type de VPN routable devrait faire l'affaire. (j'utilise openvpn)
|
||||||
|
|
||||||
Il faut aussi un noyau supportant le routage avancé.
|
Il faut aussi un noyau supportant le routage avancé.
|
||||||
TODO: config kernel
|
TODO: config kernel
|
||||||
|
|
||||||
## Marquage des paquets
|
## 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].
|
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.
|
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).
|
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
|
# 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.
|
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 :
|
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 :
|
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 :
|
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
|
# 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...
|
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.
|
NOTE: Les marques sont locales à la machine et ne sont pas transmises sur le réseau.
|
||||||
|
|
||||||
## Sur la passerelle VPN
|
## Sur la passerelle VPN
|
||||||
|
|
||||||
Cette passerelle me sert aussi de point d'accès wifi, avec la passerelle par défaut normale.
|
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])
|
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
|
# Le script
|
||||||
|
|
||||||
Voici le script que j'utilise pour faire tout ça. Finalement il est plutôt simple.
|
Voici le script que j'utilise pour faire tout ça. Finalement il est plutôt simple.
|
||||||
|
|
||||||
:::bash
|
```bash
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
# route some ports/applications through the VPN
|
# route some ports/applications through the VPN
|
||||||
|
|
||||||
VPN_GATEWAY=192.168.1.1
|
VPN_GATEWAY=192.168.1.1
|
||||||
|
|
||||||
# mark the packets
|
# mark the packets
|
||||||
# RTMP
|
# RTMP
|
||||||
iptables -t mangle -A OUTPUT -p udp --dport 1935 -j MARK --set-mark 0x9
|
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
|
iptables -t mangle -A OUTPUT -p tcp --dport 1935 -j MARK --set-mark 0x9
|
||||||
|
|
||||||
# add route to redirect these packets
|
# add route to redirect these packets
|
||||||
ip route add default via ${VPN_GATEWAY} table vpn
|
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
|
|
||||||
|
|
||||||
|
# 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
|
# Liens
|
||||||
|
|
||||||
Les quelques liens cités dans cet article.
|
Les quelques liens cités dans cet article.
|
||||||
|
|
||||||
[1]: http://www.inetdoc.net/guides/iptables-tutorial/marktarget.html "MARK target"
|
[1]: http://www.inetdoc.net/guides/iptables-tutorial/marktarget.html "MARK target"
|
|
@ -13,11 +13,13 @@ Je me suis beaucoup inspiré du site [framboise314][1], avec un ajout de configu
|
||||||
[TOC]
|
[TOC]
|
||||||
|
|
||||||
# Matériel
|
# Matériel
|
||||||
|
|
||||||
- une sonde DS18B20
|
- une sonde DS18B20
|
||||||
- une nappe IDE (40 fils) pour se brancher sur le port GPIO de la raspi
|
- une nappe IDE (40 fils) pour se brancher sur le port GPIO de la raspi
|
||||||
- une [raspberry pi][4]
|
- une [raspberry pi][4]
|
||||||
|
|
||||||
## Images
|
## Images
|
||||||
|
|
||||||
Le montage est très bien décrit sur le site de [framboise314][1], je ne le décrirais donc pas à nouveau.
|
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.
|
J'ai choisi la version "standard" à 3 fils.
|
||||||
|
|
||||||
|
@ -25,22 +27,26 @@ 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 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]
|
et une sans la breadboard : [![without_breadboard](images/therm_raspi_without_breadboard_small.jpg)][7]
|
||||||
|
|
||||||
|
|
||||||
# Logiciel
|
# Logiciel
|
||||||
|
|
||||||
## Ajout de l'overlay (3.18+)
|
## 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.
|
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.
|
Il me semble qu'avant le 3.18 cette description était statique pour la raspi.
|
||||||
```
|
|
||||||
|
```bash
|
||||||
dtoverlay=w1-gpio
|
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)
|
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 :
|
Ensuite dans `/etc/modules`, on rajoute le chargement des pilotes 1-wire :
|
||||||
```
|
|
||||||
|
```bash
|
||||||
w1-gpio
|
w1-gpio
|
||||||
w1-therm
|
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
|
# 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é.
|
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 :
|
Voici un exemple d'une sortie en erreur :
|
||||||
```
|
|
||||||
|
```console
|
||||||
cat : /sys/bus/w1/devices/28-001451521dff
|
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 : crc=00 NO
|
||||||
00 00 00 00 00 00 00 00 00 t=0
|
00 00 00 00 00 00 00 00 00 t=0
|
||||||
```
|
```
|
||||||
|
|
||||||
On retrouve alors dans les logs un message :
|
On retrouve alors dans les logs un message :
|
||||||
```
|
|
||||||
|
```console
|
||||||
w1_slave_driver 28-001451521dff: Read failed CRC check
|
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.
|
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 :
|
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 : crc=57 YES
|
||||||
78 01 55 00 7f ff 0c 10 57 t=23500
|
78 01 55 00 7f ff 0c 10 57 t=23500
|
||||||
```
|
```
|
||||||
|
|
||||||
La deuxième ligne donne la température en millième de °C.
|
La deuxième ligne donne la température en millième de °C.
|
||||||
|
|
||||||
|
|
||||||
# Plugin collectd
|
# 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.
|
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
|
## En utilisant le plugin exec
|
||||||
|
|
||||||
Voici un exemple de script donné sur la page [wiki du plugin][7], adaptée pour ce capteur :
|
Voici un exemple de script donné sur la page [wiki du plugin][7], adaptée pour ce capteur :
|
||||||
|
|
||||||
``` bash
|
``` bash
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
# script to read DS18B20 temp value and output in collectd format
|
# 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})
|
value=$(awk -F "t=" '/t=/ {print $2/1000}' ${probe_path})
|
||||||
echo "PUTVAL \"${HOSTNAME}/exec-temp/gauge-DS18B20\" interval=${INTERVAL} N:${value}"
|
echo "PUTVAL \"${HOSTNAME}/exec-temp/gauge-DS18B20\" interval=${INTERVAL} N:${value}"
|
||||||
done
|
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.
|
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
|
``` bash
|
||||||
<Plugin exec>
|
<Plugin exec>
|
||||||
Exec "pi" "/home/pi/read_temp.sh" "28-001451521dff"
|
Exec "pi" "/home/pi/read_temp.sh" "28-001451521dff"
|
Loading…
Reference in a new issue