1 # Une première infrastructure informatique pour Sourcephile
2 - Demande de Critiques: 8
3 - De: Julien Moutinho (julm)
6 - Révision: 1 (2019-12-09)
7 - Licence: Creative Commons BY-SA
10 ## Boussoles analytiques
13 - [G] julm: on est sur une dépense de ~300€ 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.
15 - [C] julm: aucun service non-lié à la production n’est proposé aux membres.
17 - [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).
19 - [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.
21 - [T] julm: la machine peut suffire pour commencer, l’hébergement aussi mais peut rapidement être limitant (ce n’est qu’une VDSL2+). Côté sécurité on est en open-source, mais que partiellement en matériel ouvert. Mutualiser pleins de services sur une seule machine n’est pas l'idéal mais un cloisonnement LXC (sans virtualisation) devrait suffire puisque tous les services seront sous GNU/Linux et contrôlés par nous. L’hébergement est semi-professionnel, sécurité raisonnable vue les enjeux. Côté maintenance 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.
23 - [A] julm: on est en logiciel libre, mais que partiellement en matériel ouvert. Deux raisons bloquantes à cela : le manque de support de NixOS (quid de Guix ? et plus gravement de Haskell pour les architectures ARM.
25 - [A] Les machines sont fabriquées à l'autre bout de la planète dans des conditions probablement déplorables.
36 ### S'émanciper d'autogeree.net
37 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.
39 `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).
40 `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).
42 ### S'émanciper de Debian
43 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.
44 Pour approfondir ces raisons techniques, on peut voir par exemple les tutoriels francophones de Nokomprendo : https://nokomprendo.gitlab.io/
46 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).
48 - https://www.fsf.org/resources/hw
49 - https://wiki.debian.org/FreedomBox/Hardware
50 - https://nixos.wiki/wiki/NixOS_on_ARM
53 ### Objectif minimal : infra de publication
54 Cette infra adresse en priorité la diffusion au public des logiciels produits : dépôts des sources, dépôts des binaires, pages Web d'informations. Le public n'ya que des accès en lecture seule.
55 - Noms de domaine (nsd4, unbound)
56 - Shell distant SSH (openssh)
57 - Pare-feu (shorewall)
58 - Forge logicielle (gitolite, gitweb, nginx)
59 - Dépôts binaires (cachix, apt)
60 - Site Web de rendu des journaux de bord (nginx)
61 - Site Web de rendu des demandes de critiques (nginx)
62 - Site Web de rendu des documentations (nginx)
63 - Certificats X.509 pour du HTTPS (certbot, nginx)
64 - Clés de signature et d'authentification dédiées OpenPGP (gnupg, openpgp2ssh)
65 - Authentifications secondaires dédiées (yubikey)
66 - Monitoring (monit | nagios)
68 ### Objectif modeste : infra d'équipement interne
69 Cette infra adresse en priorité les besoins d'équipement des membres coopérants : stockages sécurisés et connexions sécurisées. Le public n'y a aucun accès d'usage, mais peut avoir des accès en écriture ou lecture selon des interfaces restreintes et contrôlées.
70 - Adresses méls (postfix, dovecot2, rspamd)
71 - Listes méls internes (aliases postfix)
72 - Écriture collaborative en ligne en temps réel (gobby | etherpad-lite | prose)
73 - Messagerie instantanée (prosody | matrix)
74 - Chiffrement du stockage (dm-crypt, dropbear)
75 - Gestion des accès (unix | openldap | ad hoc)
76 - Partages volumineux en ligne (nextcloud)
77 - Partages textuels jetables (pastebin)
78 - (optionnel) Calendriers en ligne (davical | nextcloud)
79 - (optionnel) VPN DNS (iodined)
80 - (optionnel) VPN (wireguard)
81 - (optionnel) Audioconf (mumble)
82 - (optionnel) Visioconf (jitsi)
83 - (optionnel) Partages binaires jetables (coquelicot)
85 ### Objectif honorable : infra de contribution publique
86 Cette infra adresse en priorité les besoins de la communication en ligne : sites Web de présentation et réseaux sociaux en ligne.
87 - Rapports de bugs (gitlab | gitea)
88 - Messagerie instantanée (salon IRC type #plurasoft@irc.freenode.net ou #plurasoft@irc.oftc.net | prosody interne | serveur Jabber externe)
90 - Site Web des (futures) démonstrations (pluravote, pluradoc, pluracompta, plureloto)
91 - Listes méls publiques (discourse)
92 - Forums publics (discourse)
94 ### Objectif ambitieux : infra de mise en commun
95 Cette infra adresse en priorité les besoins de la mise en commun en ligne :
96 - (optionnel) Microblogging (mastodon | serveur externe)
98 ### Objectif maximal : infra de services
101 ## Machine de services : APU2D4 de PCengines
102 L’APU2 est un routeur conçu par une entreprise suisse (PCengines) et fabriqué à Taïwan. Le CPU est un AMD, dont l'architecture « x86_64 » est officiellement supportée par GHC, NixOS et ses caches binaires. 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).
104 PCengines a une renommée (adrien en utilise depuis des années a son taff) et une maturité certaine dans la conception de machines (ce n'est pas leur première), il ne s'agit donc de produits issus d'une random startup d'amateur.rices, ou autres personnes davantage préoccupées par le time-to-market plutôt que par le long-time-support.
106 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.
108 L’APU a plusieurs versions : APU2, APU3 et APU4.
109 L'APU2 est annoncé comme celui consommant le moins : 10W max contre 12W max pour l’APU3 et l’APU4, et la version 4Go de RAM de l'APU2 a une NIC i210AT légèrement meilleure que la i211AT des autres.
110 L’APU3 est optimisé pour faire de la 3G/LTE.
111 Et l’APU4 a un quatrième port Ethernet.
114 - Processeur : AMD G series GX-412TC (Turbo Core), 4x 1GHz Jaguar core with 64 bit support
116 - http://www.cpu-world.com/CPUs/Puma/AMD-G-Series%20GX-412TC.html
117 - http://support.amd.com/TechDocs/52740_16h_Models_30h-3Fh_BKDG.pdf
118 - 170€HT, http://store.clemanis.com (PCE-APU2D4)
119 - 148€HT, https://teklager.se/en/products/router-components/pc-engines-apu2d4
120 - 128€HT, https://www.wispmax.com/pc-engines-apu2b4-system-board.html
121 - Coprocesseur : AMD CCP avec AES-NI
122 - https://openwrt.org/toh/pcengines/apu2#cryptographic_hardware
123 - Cache L1 : 32K data cache + 32K instruction cache per core
124 - Cache L2 : 2MB shared
125 - Mémoire : 1x 4Go DDR3-DRAM 1333Mhz ECC (soudée !) (4Go permet de rester en 32 bits)
126 - Stockage : Boot from SD card (built-in adapter, connected through USB), USB or m-SATA SSD. 1 SATA data + power connector
127 - Électricité : 12V DC. About 6 to 10W depending on CPU load. Recommend for at least 1.5A to provide margin for peripherals
128 - Extensions : 2 miniPCI express (one with SIM socket for 3G modem), LPC bus, GPIO header, optional I2C bus, COM2 (3.3V RXD/TXD)
129 - Réseau : 3x Gigabit Ethernet (Intel i210AT), 1 DB9 serial port (console)
130 - https://www.intel.com/content/dam/www/public/us/en/documents/faqs/ethernet-controller-i210-i211-faq.pdf
131 - the i210AT is better, as it has 4 transmit and 4 receive queues, where the i211AT only has 2/2
132 - Firmware : CoreBoot open source system BIOS with support for iPXE and USB boot
134 - 35€HT, 245mm x 157mm x 39mm, espace pour 3 disques 2.5" (2 dedans, 1 dehors), http://store.clemanis.com (RMT-CASE-S1)
135 - 12€HT, 152,4mm x 152,4mm, aucun espace pour le moindre disque 2.5", https://teklager.se/en/products/router-components/pc-engines-apu-enclosure
136 - Refroidissement : conductive cooling from the CPU to the enclosure
137 - Conception : Suisse
138 - Fabrication : Taïwan
141 4GB de RAM ce n’est pas énorme, c'est trop peu pour une machine de dév (surtout si elle n'est pas dédiée) ou de build, mais pour un serveur hébergeant des services de base 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.
142 La RAM a de l’ECC (Error Correcton Code), supportée depuis peu dans le firmware.
145 À PTT le réseau est une VDSL2, soit environ 40Mbps descendant et 12Mpbs montant (pour l'ensemble de l'hébergement !).
147 > The throughput depends very much on the OS, Linux based distributions perform much better than BSD based. Under Linux forwarding packets without filtering etc. a throughput of about 900-950Mbps can be achieved. Under BSD based OS, like pfSense, OPNSense, etc the max. throughput is about 600-650Mbps.
149 Quelques commentaires signalent que l’APU2 sature à 45Mpbs avec OpenVPN en AES, OpenVPN ne pouvant utiliser qu'un seul coeur de CPU (single thread). L'APU2 aurait un horloge CPU trop lente et un cache L2 trop petit. Mais ici le VPN n'est pas un objectif.
150 - https://www.reddit.com/r/PFSENSE/comments/4nmuu4/my_pc_engines_apu2c4_experience/
152 Comme AES peut également être utilisé lors de connexion en HTTPS, on peut peut-être s'attendre au même genre de performances.
155 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).
156 Cependant PTT n'a pas de switch de ports série pour le moment.
160 - 17€HT, https://www.ldlc.com/fiche/PB00026389.html
161 - 11€HT, https://teklager.se/en/products/router-components/serial-to-usb-cable
162 - null-modem "DB9" serial cable, 5€HT, https://www.ldlc.com/fiche/PB00170050.html
165 Il est possible de mettre facilement deux disques SSD : un sur le port mSATA et un sur le port SATA. Le port d'alimentation à 2 broches est un peu atypique et peut poser des problèmes (mauvaise connexion sur un modèle reçu par Franciliens). Le port mSATA est entrain d'être remplacé par le port M.2, ce qui pose la question de pouvoir trouver de bons SSD mSATA dans un futur proche.
167 Il est aussi possible de mettre une extension PCIe pour rajouter 4 ports SATA : https://pcengines.ch/howto.htm#add_on_cards
168 Il est également possible de mettre une carte SD, mais les cartes SD tendent à mourrir plus vite et sont plus lentes.
171 > dd if=/dev/zero of=/path/to/disk/tempfile bs=1M count=1024 conv=fdatasync,notrunc status=progress
173 Un RAID1 entre deux disques ou plus permet de se prémunir contre la défaillance matérielle d'un des deux disques. Le coût à payer au delà d'acheter un deuxième disque est un temps de lecture qui peut aller jusqu'à la somme de celui de chaque disque, et un temps d'écriture qui égal à celui du disque le plus lent. Si cette pénalité devient trop importante, un RAID5 voire RAID6 pourra être envisagé : https://serverfault.com/questions/830708/raid-1-to-raid-5-using-mdadm
174 Cependant comme les disques sont des SSD et non des HDD, en arriver là semble très improbable vu l'usage actuellement souhaité.
177 Il existe de nombreuses enclosures, mais essentiellement deux modèles.
178 Les noires dissipent mieux la chaleur : https://openwrt.org/toh/pcengines/apu2
179 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" dans l'enclosure et un sur le dessus pour un total de 4 disques avec le mSATA, ou de mettre une extension : http://store.clemanis.com/en/cases/324-pc-engines-alix-2d22d32d13-apu1apu2-case-with-hdd-wifi-black-3700667301379.html
182 Le coprocesseur AMD CCP (pour cryptographie AES) peut améliorer un peu le VPN, le HTTPS et le chiffrement du stockage lorsque de l'AES est utilisé.
185 > cryptsetup benchmark
187 - https://unix.stackexchange.com/questions/254017/how-to-interpret-cryptsetup-benchmark-results
189 En considŕant AES-128 (donc une keysize double avec XTS) comme suffisamment sécurisant, on obtient :
190 > cryptsetup luksFormat --iter-time 2s --hash sha512 --cipher aes-xts-plain64 --keysize 256 /dev/sdX
192 ### Espérance de fonctionnement
193 Matériellement, les disques peuvent mourrir assez vite, entre 3 et 5 ans.
194 Une redondance en RAID1 logiciel (mdadm) rendra **probablement** le remplacement assez simple.
195 La carte de l’APU2 devrait pouvoir durer plus de 10 ans.
196 Mais le fait que la RAM soit soudée fait qu'il faudra changer toute la carte mère si elle vient à avoir des défaillances.
199 - https://pcengines.ch/howto.htm
200 - https://openwrt.org/toh/pcengines/apu2
201 - https://www.cs.cmu.edu/~davide/howto/apu4c4.html
202 - https://blog.linuxserver.io/2016/12/17/review-pcengines-apu2-c4-prebuilt-by-linitx/#vpnperformance
203 - https://teklager.se/en/knowledge-base/
206 Concernant l'usage, à court et moyen terme les disques n'ont pas besoin d'être particulièrement grands, 64GB ou 128GB seront largement assez. Cependant il faut savoir que les petits SSD ont une vitesse d'écriture plus lente, dans la mesure où il y a plus de puces pour paralléliser les écritures (mais cela ne marche que pour des opérations parallélisables, cela ne s'applique à priori pas quant on a un seul processus).
207 - https://www.tweaktown.com/reviews/5993/samsung-840-evo-128gb-msata-ssd-review/index.html
210 Ainsi un 128Go écrira séquentiellement à 320Mo/s (Kingston) ou 410Mo/s (Samsung). Mais un 250Go écrira séquentiellement à 500Mo/s (Kingston) ou 520Go/s (Samsung).
221 ## Machine de compilations
222 - http://wiki.ant-computing.com/Choosing_a_processor_for_a_build_farm
223 > The intel Core as found in the Core i5 is performing very well, but hyperthreading brings little benefit here (13%). Thus a CPU should be chosen with real cores
225 > In this test, the AMD was the fastest of all systems, and the ARM was the fastest fanless system and also the one delivering the highest throughput per cubic centimeter.
227 > Some tests run with the ramlat utility showed that the build time almost solely depends on the L1 cache speed, then a little bit on the L2 cache speed and then finally on the DRAM speed. It does not exactly depend on the memory bandwidth but rather latency.
229 ## Hébergement chez PTT
230 PTT propose de l’hébergement à Tarnac (Corrèze).
231 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.
232 La connexion est derrière une VDSL2+ fournie par l’association Ilico.
234 - https://www.fnac.com/mp37714266/Transcend-ts128gmsa230s-ssd-interne-msata-iii-128-go-sata-iii-6-gbps-3d-tlc/w-4
235 - https://www.ldlc.com/fiche/PB00253086.html
238 ### Machine de sauvegardes
239 ### Machine de compilations
243 ### Vulnérabilités Metldown et Spectre
244 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/
246 Réponse : tous les CPU Intel ou AMD sont plus ou moins affectés par ces vulnérabilités.
248 ### L'APU2 n'a pas une alimentation redondée
249 Problème : l'alimentation est l'un des composants les plus susceptibles de ne plus fonctionner.
251 Réponse : entreposer une seconde alimentation à côté du serveur, de sorte à minimiser le temps de hors-service et que cela puisse éventuellement être fait par l'hébergeur.
253 ### L'APU2 n'est pas adapté à la virtualisation
254 Problème : pour faire de la virtualisation il est préférable d'avoir des CPU avec des instructions adaptées (VT) et de la RAM en quantité (~512Mio/VM).
256 Réponse : la virtualisation est surtout adaptée lorsque ce ne sont pas les mêmes personnes qui gèrent les services, ou lorsqu'il faut faire tourner des OS différents. Mais dans le cas présent ce n'est pas le cas, donc des containers type LXC devraient suffire du point de vue d'une compartimentation sécuritaire.
258 ### nsd4 et iodined nécessitent tous deux le port 53
259 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.
261 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|05|plura|02|fr|00| -j DNAT --to-destination :5353` où iodined écoute maintenant sur le port 5353.
263 ## Question non-résolues
266 - Processeur : Intel i3 | i5 | i7
267 - i7 : https://teklager.se/en/products/routers/tlsense-i7-4lan
269 - Réseau : 4x Gigabit Ethernet
274 - Infos : https://kobol.io/helios4/
276 Open hardware mais ARM pas x86, et plus en vente pour le moment.
278 ### HPE ProLiant MicroServer
279 - Processeur : AMD Opteron X3416 (2x 1.6–3.0GHz) | X3421 (4x 2.1–3.4GHz)
280 - Mémoire : 1x 8Go (max 2x 16Go) DDR4-SDRAM (X3416: 1600Mhz | X3421: 2400MHz) Unbuffered ECC (non-soudées)
281 - Cache L2 : X3416: 1Mo | X3421: 12Mo
282 - Réseau : 2x Gigabit Ethernet
283 - Électricité : 12-35W
284 - Stockage : 4x SATA 3.5"
285 - Extensions : 2x PCIe 3.0
287 - X3416 : 328€HT https://www.senetic.fr/product/873830-421
288 - X3421 : 415€HT https://www.senetic.fr/product/P04923-421