]> Git — Sourcephile - sourcephile-txt.git/blob - ddc/ddc8-une-infra.md
ddc7: modifs suite aux critiques de sevy
[sourcephile-txt.git] / ddc / ddc8-une-infra.md
1 # Une première infrastructure informatique pour la logiciellerie
2 - Demande de Critiques: 8
3 - De: Julien Moutinho (julm)
4 - À: Zabl
5 - Phase: Écriture
6 - Révision: 1 (2019-11-15)
7 - Licence: Creative Commons BY-SA
8 - Préoccupations: autonomie, compréhension, développement, financement, maintenance, performance, sécurité, service, social
9
10 # Bilan approximatif
11 ## Analyses reconnues
12 - [G] financement
13 - [G] julm: on est sur une dépense de ~500€ de matériel pour une espérance de fonctionnement et d’usage >5ans, et un récurrent de ~60€/an pour l’hébergement. C’est un prix très correct pour ce que c’est.
14 - [T] autonomie
15 - [T] julm: on a la main sur le matériel, le logiciel, mais pas sur l’hébergement (toutefois 15km, ça reste à portée de vélo).
16 - [T] développement
17 - [T] julm: on peut mettre du NixOS, mais ce n’est pas une machine avec beaucoup de CPU et de RAM, mais ça devrait largement suffire et me dépanner tant que je n’ai pas d’élec @home.
18 - [T] performance
19 - [T] julm: la machine peut suffire pour commencer, l’hébergement aussi mais peut rapidement être limitant (ce n’est qu’une VDSL2+).
20 - [A] compréhension
21 - [A] julm: on est en logiciel libre, mais que partiellement en matériel ouvert.
22 - [A] maintenance
23 - [A] julm: on peut mettre du NixOS ce qui me simplifiera la tâche. L’hébergeur n’offre pas (encore) de seconde connexion via le port série et n'est que semi-professionnel, par contre il est proche.
24 - [A] sécurité
25 - [A] julm: on est en logiciel libre, mais que partiellement en matériel ouvert. Mutualiser pleins de services sur une seule machine n’est pas très sécurisant. L’hébergement est semi-professionnel (porte à serrure standard dont il n’est pas clair qui a les clés, et pas (encore) de caméra).
26 - [A] social
27 - [A] Les machines sont fabriquées à l'autre bout de la planète dans des conditions probablement déplorables.
28 - [C] service
29 - [C] julm: aucun service non-lié à la production n’est proposé aux membres.
30 ## Mentions possibles
31 - R: « À rejeter »
32 - C: « À clarifier »
33 - A: « À améliorer »
34 - T: « À tester »
35 - G: « À garder »
36
37 # Explications
38 ## Motivations
39 ### S'émanciper d'autogeree.net
40 Les logiciels que j'écris sont actuellement hébergés sur `chomsky.autogeree.net`, une machine virtuelle (VM) relativement modeste que me fournie Grésille depuis 2011 (en contre-partie d'un Dell R210 surnommé « chomsky » et acquis dans l'enthousiasme naïf de l'essaimage de FDN, puis resurnommé « rouf » par Grenode). Cette VM m'a longtemps servi de bac à sable pour jouer à l'adminsys, qui sert encore à un copain et moi-même pour avoir du mél et de l'IRC.
41
42 `chomsky` est une Debian dans une machine virtuelle Xen (1 CPU, 750Mo de RAM, 50Go de stockage **probablement** HDD), dans une machine hébergée professionnellement en datacenter à Grenoble. Cette machine est actuellement reliée à l'Internet par une autre infrastructure de Grenode à Lyon (au Netcenter via l'association Rézopole).
43 `chomsky` n’a pas vraiment les ressources d’une machine de développement (nixpkgs c’est déjà 10Go de stockage, stack 5Go, et le REPL de GHC ou de PureScript c’est minimum 0.5Go de RAM).
44
45 ### S'émanciper de Debian
46 Depuis que je me suis mis à NixOS, je ne suis plus enthousiasmé par Debian. En tant que dev il est bien plus facile de faire et de partager de manière reproductible et récente des paquets NixOS que des paquets Debian (dans le cas de paquets Haskell tout du moins). Et en tant qu'adminsys il est bien plus facile de maîtriser ce qu'il se passe sur une NixOS que sur une Debian. Le seul avantage de Debian en ce qui me concerne c'est sa plus grande portabilité sur des architectures basse conso ou OSHW comme certaines ARM ou MIPS. Mais ce n'est **certainement** qu'un avantage temporaire.
47 Pour approfondir ces raisons techniques, voir par exemple les tutoriels francophones de Nokomprendo : https://nokomprendo.gitlab.io/
48
49 Cependant, il est **peu probable** que je puisse passer `chomsky` sous NixOS, car mon copain n’envisage pas de se mettre à NixOS, et puis c'est une opération risquée demandant une intervention délicate sur une machine hébergeant actuellement des services en production (essentiellement nos méls persos en MX n°1).
50
51 - https://wiki.debian.org/FreedomBox/Hardware
52 - https://nixos.wiki/wiki/NixOS_on_ARM
53
54 ## Objectif
55 ### Objectif minimal : infra de développement
56 Cette infra adresse en priorité les besoins du développement : dépôts Git publiables et boîtes méls dédiées.
57 - Noms de domaine (nsd4, unbound)
58 - Shell distant SSH (openssh)
59 - Authentification double: yubikey
60 - Pare-feu (shorewall)
61 - Forge logicielle (gitolite, gitweb, nginx)
62 - Adresses méls (postfix, dovecot2, rspamd)
63 - Listes méls internes (aliases postfix)
64
65 ### Objectif modeste : infra de collaboration
66 Cette infra adresse en priorité les besoins de la collaboration en ligne : stockages sécurisés et connexions sécurisées.
67 - Chiffrement du stockage (logiciel par dm-crypt, dropbear)
68 - Certificats X.509 pour du HTTPS (certbot, nginx)
69 - Gestion des accès (unix | openldap)
70 - Partages volumineux en ligne (nextcloud)
71 - Partages jetables (pastebin interne | pastebin externe)
72 - Ecriture collaborative en ligne en temps réel (gobby | etherpad)
73 - Messagerie instantanée (salon IRC type #zabl@irc.freenode.net ou #zabl@irc.oftc.net | prosody interne | serveur Jabber externe)
74 - (optionnel) Calendriers en ligne (davical | nextcloud)
75 - (optionnel) VPN DNS (iodined)
76 - (optionnel) Audioconf (mumble)
77 - (optionnel) VPN (wireguard)
78 - (optionnel) Visioconf (jitsi)
79
80 ### Objectif honorable : infra de communication
81 Cette infra adresse en priorité les besoins de la communication en ligne : sites Web de présentation et réseaux sociaux en ligne.
82 - Site Web de rendu des journaux de bord (nginx)
83 - Site Web de rendu des demandes de critiques (nginx)
84 - Site Web de rendu des documentations (nginx)
85 - Site Web des (futures) démonstrations (zabl-vote, zabl-doc, zabl-compta, zabl-loto)
86 - (optionnel) Microblogging (mastodon | serveur externe)
87
88 ### Objectif ambitieux : infra de mise en commun
89 Cette infra adresse en priorité les besoins de la mise en commun en ligne :
90 - Listes méls publiques (discourse)
91 - Forums publics (discourse)
92
93 ### Objectif maximal : infra de services
94
95
96 # Actions
97 ## Serveur APU2 de PCengines
98 L’APU2 est un routeur conçu par une entreprise suisse (PCengines) et fabriqué à Taïwan.
99 Le CPU est un AMD, dont l'architecture « x86_64 » est officiellement supportée par NixOS et ses caches binaires.
100 Ce n'est pas complètement en matériel ouvert car certains composants clés comme le CPU ne le sont pas, mais PCengines publie ce qu'elle fait elle pour sa part (schémas et code source des modifications à Coreboot).
101
102 L’APU2 est généralement utilisé comme routeur, mais peut aussi servir de petit (en terme de services peu gourmands côté serveur) serveur, voire de petit (en taille de stockage) « NAS » (Network Attached Storage), voire de petite (en puissance de calculs) machine de développement pour dépanner.
103
104 L’APU a plusieurs versions : APU2, APU3 et APU4.
105 L'APU2 est annoncé comme celui consommant le moins : 10W max contre 12W max pour l’APU3 et l’APU4.
106 L’APU3 est optimisé pour faire de la 3G/LTE.
107 Et l’APU4 a un quatrième port Ethernet.
108
109 ### Caractéristiques
110 - Processeur : AMD G series GX-412TC, 1 GHz quad core (Jaguar core) with 64 bit support, AES-NI, 32K data + 32K instruction cache per core, 2MB shared L2 cache
111 - 170€HT, http://store.clemanis.com (PCE-APU2D4)
112 - 148€HT, https://teklager.se/en/products/router-components/pc-engines-apu2d4
113 - Coprocesseur : AMD CCP (pour cryptographie AES-GCM) https://openwrt.org/toh/pcengines/apu2#cryptographic_hardware
114 - Mémoire : 1x 4Go DDR3-DRAM 1333Mhz ECC (soudée !) (4Go permet de rester en 32 bits)
115 - Stockage : Boot from SD card (built-in adapter, connected through USB), USB or m-SATA SSD. 1 SATA data + power connector
116 - Électricité : 12V DC. About 6 to 10W depending on CPU load. Recommend for at least 1.5A to provide margin for peripherals
117 - Extensions : 2 miniPCI express (one with SIM socket for 3G modem), LPC bus, GPIO header, optional I2C bus, COM2 (3.3V RXD/TXD)
118 - Réseau : 3 Gigabit Ethernet (Intel i210AT / i211AT), 1 DB9 serial port (console)
119 - Firmware : CoreBoot open source system BIOS with support for iPXE and USB boot
120 - Taille : 152,4mm x 152,4mm
121 - 35€HT, http://store.clemanis.com (RMT-CASE-S1)
122 - 12€HT, https://teklager.se/en/products/router-components/pc-engines-apu-enclosure
123 - Refroidissement : conductive cooling from the CPU to the enclosure
124 - Conception : Suisse
125 - Fabrication : Taïwan
126
127 ### Mémoire
128 4GB de RAM ce n’est pas énorme, ce serait peut-être même trop peu pour une machine de build, mais pour un serveur hébergeant des choses assez légères c'est pas mal. D’un point de vue sécurité, il semble d'ailleurs préférable d'avoir plusieurs petites machines physiques distinctes qu’une grosse machine blindée hébergeant des machines virtuelles. Machines blindées qu'on ne trouvera d'ailleurs probablement pas de si tôt en matériel ouvert.
129 La RAM a de l’ECC (Error Correcton Code), supportée depuis peu dans le firmware.
130 ### Réseau
131 Quelques commentaires signalent que l’APU2 sature un peu quand il s’agit d’utiliser la pleine connectivité d’une fibre optique via un VPN ne pouvant utiliser qu'un seul coeur de CPU (single thread) type OpenVPN, avec certains types d'algorithmes de chiffrement. L'APU2 aurait un horloge CPU trop lente et un cache L2 trop petit.
132 Mais ici le VPN n'est pas un objectif premier et pas à ces débits là. Et à PTT il n’y a pas de fibre optique pour le moment de toute façon.
133 ### Maintenance
134 La présence d’un port série permet un accès de maintenance plus simple et plus sécurisé que de l’IPMI (qui est un second OS en parallèle).
135 Cependant PTT n'a pas de switch de ports série pour le moment.
136
137 Câbles utiles :
138 - USB to serial port
139 - 17€HT, https://www.ldlc.com/fiche/PB00026389.html
140 - 11€HT, https://teklager.se/en/products/router-components/serial-to-usb-cable
141 - null-modem "DB9" serial cable, 5€HT, https://www.ldlc.com/fiche/PB00170050.html
142 ### Stockage
143 Il est possible de mettre deux disques SSD, un sur le port mSATA et un sur le port SATA.
144 Il est aussi possible de mettre une extension PCIe pour rajouter 4 ports SATA : https://pcengines.ch/howto.htm#add_on_cards
145 Il est également possible de mettre une carte SD, mais les cartes SD tendent à mourrir plus vite et sont plus lentes.
146 ### Enclosure
147 Il existe de nombreuses enclosures.
148 Les noires dissipent mieux la chaleur : https://openwrt.org/toh/pcengines/apu2
149 La RMT-CASE-S1 de Clemanis est 15€ plus chère que d’autres enclosures plus petites, mais permet de stocker deux disques 2.5" sur le côté, ou de mettre une extension : http://store.clemanis.com/en/cases/324-pc-engines-alix-2d22d32d13-apu1apu2-case-with-hdd-wifi-black-3700667301379.html
150
151 ### Espérance de fonctionnement
152 Matériellement, les disques peuvent mourrir assez vite, entre 3 et 5 ans.
153 Une redondance en RAID1 logiciel (mdadm) rendra **probablement** le remplacement assez simple.
154 La carte de l’APU2 devrait pouvoir durer plus de 10 ans.
155 Mais le fait que la RAM soit soudée fait qu'il faudra tout changer si elle vient à avoir des défaillances.
156
157 Concernant l'usage, à court et moyen terme les disques n'ont pas besoin d'être particulièrement grands, 64GB ou 128GB seront largement assez.
158
159 ### Ressources
160 - https://pcengines.ch/howto.htm
161 - https://openwrt.org/toh/pcengines/apu2
162 - https://www.cs.cmu.edu/~davide/howto/apu4c4.html
163 - https://blog.linuxserver.io/2016/12/17/review-pcengines-apu2-c4-prebuilt-by-linitx/#vpnperformance
164 - https://teklager.se/en/knowledge-base/
165
166 ## 120GB de stockage
167 TODO: détailler l’usage
168
169 ## Hébergement chez PTT
170 PTT propose de l’hébergement à Tarnac (Corrèze).
171 L’hébergement se fait dans une petite salle dédiée et climatisée d’un "tier-lieu" (médiathèque, cyberespace) du village.
172 La connexion est derrière une VDSL2+ fournie par l’association Ilico.
173
174 - https://www.fnac.com/mp37714266/Transcend-ts128gmsa230s-ssd-interne-msata-iii-128-go-sata-iii-6-gbps-3d-tlc/w-4
175 - https://www.ldlc.com/fiche/PB00253086.html
176
177 ## Travaux futurs
178 ### Backups automatiques
179 ### Machine de build ARM
180
181 # Critiques
182 ## Inconvénients
183 ### Vulnérabilités Metldown et Spectre
184 Problème : l’AMD GX-412TC de l’APU2 est vulnérable à Meltdown et Spectre. L’atténuation n’est que partielle : https://blog.3mdeb.com/2019/2019-05-29-spectre-and-meltdown-on-apu2/
185
186 Réponse : tous les CPU Intel ou AMD sont plus ou moins affectés par ces vulnérabilités.
187
188 ### nsd4 et iodined nécessitent tous deux le port 53
189 Problème : normalement nsd4 et iodined sont incompatibles sur une seule et même IPv4 (à 3€/mois ici), car ils requièrent tous deux l’écoute sur le port 53 du DNS.
190
191 Réponse : il est possible de mutualiser ce port avec une règle iptables du genre : `-A nat -p udp --dport 53 -m string --algo kmp --from 40 --hex-string |01|i|04|zabl|03|org|00| -j DNAT --to-destination :5353` où iodined écoute maintenant sur le port 5353.
192
193 ## Question non-résolues
194 ## Alternatives
195 ### TLsense
196 - Processeur : Intel i3 | i5 | i7
197 - i7 : https://teklager.se/en/products/routers/tlsense-i7-4lan
198 - Mémoire : 8Go
199 - Réseau : 4x Gigabit Ethernet
200 - Conception : Suède
201 - Fabrication : ?
202
203 ### Helios4
204 - Infos : https://kobol.io/helios4/
205 - Prix : 177€
206 Open hardware mais ARM pas x86, et plus en vente pour le moment.
207
208 ### HPE ProLiant MicroServer
209 - Processeur : AMD Opteron X3416 (2x 1.6–3.0GHz) | X3421 (4x 2.1–3.4GHz)
210 - Mémoire : 1x 8Go (max 2x 16Go) DDR4-SDRAM (X3416: 1600Mhz | X3421: 2400MHz) Unbuffered ECC (non-soudées)
211 - Cache L2 : X3416: 1Mo | X3421: 12Mo
212 - Réseau : 2x Gigabit Ethernet
213 - Électricité : 12-35W
214 - Stockage : 4x SATA 3.5"
215 - Extensions : 2x PCIe 3.0
216 - Prix :
217 - X3416 : 328€HT https://www.senetic.fr/product/873830-421
218 - X3421 : 415€HT https://www.senetic.fr/product/P04923-421
219 - Conception : USA
220 - Fabrication : ?