Bouw je eigen Raspberry Pi-cluster

Het aantal Raspberry Pi's in mijn huis begon onhandelbaar te worden en het kluwen van kabels en voedingsadapters was me al even een doorn in het oog. Ik besloot een aantal van deze Raspberry Pi's op elkaar te stapelen in een clusterbehuizing, aangesloten op één voeding en één netwerkswitch.

De belangrijkste componenten van de configuratie die ik koos, zijn:

Clusterbehuizing

Deze behuizing met zes lagen vond ik voor € 20 op Amazon:

Een clusterbehuizing voor Raspberry Pi's met acrylplaatjes

De Raspberry Pi's zijn hiermee niet volledig beschermd, want er zit alleen boven en onder elk processorbordje een acrylplaatje. Maar een voordeel van deze opstelling is dat ze gemakkelijk uit te breiden is. Je kunt er ook eenvoudig een laag uitnemen als je die Raspberry Pi tijdelijk elders nodig hebt.

Voeding

Als voeding koos ik voor het € 29 kostende Anker PowerPort 12 A 60 W laadstation met 6 poorten:

Het Anker PowerPort 12 A 60 W laadstation kan 6 Raspberry Pi's voeden.

Belangrijk bij de keuze voor de voeding is dat ze per poort voldoende vermogen kan leveren voor je Raspberry Pi's. Ik ging daarvoor uit van het vermogensverbruik van zes Raspberry Pi 4's op volle kracht. Uit een benchmark van MagPi blijkt dat dit model in een stresstest tot 7 W verbruikt.

Een set van laadkabels (usb-c voor de Raspberry Pi 4, usb-a voor de eerdere modellen) vult dit aan.

Waarschuwing

Ik heb laadkabels van 25 cm lang gekocht om het geheel zo compact mogelijk te houden, maar dat was eigenlijk iets te kort: door de stijfheid van de kabels blijft het laadstation niet stabiel staan. Maak dezelfde fout niet.

Netwerkswitch

Voor de netwerkverbinding kies je een switch met één poort meer dan het aantal Raspberry Pi's in je cluster. Een eenvoudige unmanaged gigabit-ethernetswitch is voldoende. Ik koos voor een TP-Link LS108G 8-poorts gigabit-ethernetswitch van € 25:

De TP-Link LS108G 8-poorts gigabit-ethernetswitch voorziet de Raspberry Pi's van een netwerkverbinding.

Voor de netwerkkabels koos ik voor een set van 7 platte Cat7-ethernetkabels.

Waarschuwing

Ik heb ook hier voor kabels van 25 cm lang gekozen om het geheel zo compact mogelijk te houden, maar dit was een miskoop. Ze waren te stijf, ik had echt flexibele ethernetkabels moeten kopen. En 25 cm was te kort.

Statusleds

Ik wilde de status van mijn Raspberry Pi's eenvoudig kunnen tonen, maar kant-en-klare oplossingen vond ik te duur of met een te klein schermpje. Ik vond een leuke lowtech-oplossing in het Mini Battery Display van Open-Smart. Voor € 1,30 per stuk vind je dit kleine printplaatje met leds op AliExpress. Het bevat een ledbalk met tien segmenten, die je kunt aansturen om bijvoorbeeld de processorbelasting of cpu-temperatuur aan te duiden:

Het Mini Battery Display van Open-Smart is perfect voor statusleds voor je Raspberry Pi.

Ik heb zes van deze printplaatjes op een breadboard geprikt en elk printplaatje is met vier jumperwires met zijn Raspberry Pi verbonden. Ik heb dan een Python-programma geschreven om de leds aan te sturen op basis van de processorbelasting: rpi-mini-battery-display.

Het resultaat

Als je dit alles dan in elkaar steekt, ziet dat er als volgt uit:

Mijn cluster van zes Raspberry Pi's.

Ik koos voor de horizontale plaatsing omdat die het minste problemen met de te korte kabels oplevert, en het zorgt ook voor een gelijkmatige warmteafvoer. Je ziet op de achtergrond wel nog het laadstation in de lucht 'zweven' door de te korte voedingskabels...

Voor PCM beschreef ik uitgebreid hoe je zelf zo'n cluster maakt. Het artikel gaat alleen in op de hardwarekant, maar daar komt al heel wat bij kijken. Meer tips en gedetailleerdere instructies vind je in het artikel.

Al met al ben ik hier tevreden mee. Ik probeer nu sneller nieuwe zaken op mijn Raspberry Pi's uit omdat ik er geen werkloze Raspberry Pi's meer voor uit een doos hoef te halen of een vrij stopcontact moet zoeken. En mijn bureau ziet er heel wat netter uit!

Hulp gevraagd om Nederlandse spraaksynthese te verbeteren

Een opensource stemassistent zoals Rhasspy die volledig offline werkt, is een hele krachttoer. Een zwak punt van Rhasspy is dat de Nederlandse spraaksynthese nogal robotachtig klinkt. Dat is te wijten aan het standaard gebruikte TTS-systeem eSpeak. Probeer dit maar eens uit:

$ espeak -v nl "Welkom in de wondere wereld van spraaksynthese"

Het doet me altijd wat denken aan Howard die in The Big Bang Theory de computerstem van Stephen Hawking imiteert. Leuk voor een keer, maar daar wil je niet de hele dag naar luisteren...

Rhasspy ondersteunt voor het Nederlands ook Google WaveNet, maar dat vereist een Google-account en stuurt elke nieuwe zin die je wilt laten uitspreken naar Google. Dat past dus niet in een offline oplossing.

Buiten wat onderzoeksprojecten waarvan me niet duidelijk is of ze nog onderhouden worden, ken ik geen ander opensource offline spraaksyntheseprogramma dat out-of-the-box Nederlands ondersteunt en een goede kwaliteit haalt.

Hulp gevraagd

Michael Hansen, de hoofdontwikkelaar van Rhasspy, wil aan een oplossing werken door een model voor Mozilla TTS te trainen voor het Nederlands. Maar voor zo'n model heb je een audiocorpus nodig van tekst met de overeenkomstige spraak. En Michael roept daarom nu de hulp in van vrijwilligers met als moedertaal Nederlands.

Hij ziet de volgende opties:

  1. Gebruik een audiocorpus met vrije licentie dat voor elke zin een audiobestand met de overeenkomstige spraak aanbiedt. Audioboeken zoals die van LibriVox zijn dus niet geschikt omdat die per hoofdstuk opgesplitst zijn.

  2. Maak zelf een geschikt audiocorpus aan. Michael bezorgt je dan een fonetisch gebalanceerde verzameling zinnen die je voorleest, samen met een programma dat je spraak op de correcte manier opneemt. Je hebt wel een kwalitatieve microfoon nodig.

Ken je een geschikt audiocorpus of wil je je stem uitlenen om de Nederlandse stem van Rhasspy te worden? Reageer dan zeker in het forum van Rhasspy of spreek me via e-mail of Twitter aan.

Stembesturing zonder luistervinken met Rhasspy

Met slimme assistenten zoals Google Assistant, Amazon Alexa en Apple Siri geef je opdrachten met je stem. Leuk, maar je stemopnames worden wel naar de cloud gestuurd voor verwerking. Met een Raspberry Pi en de opensourcesoftware Rhasspy kun je stembesturing volledig lokaal realiseren, zelfs zonder internet. Je stemopdrachten koppel je dan aan Node-RED of een domoticasysteem zoals Home Assistant, en dat zonder dat Google, Amazon of Apple de hele tijd meeluistert. Zelfs in het Nederlands.

Rhasspy is geen afgewerkte spraakassistent zoals voorgaande voorbeelden. Het is eigenlijk een toolkit waarmee je zelf je eigen spraakassistent ontwikkelt. Meer voor de doe-het-zelvers dus, maar als je al een eigen domoticasysteem zoals Home Assistant hebt draaien, zal dit je zeker niet afschrikken. Na de configuratie heb je een systeem dat audio omzet in gestructureerde JSON-gegevens:

/images/rhasspy-audio-to-json.svg

Je bedoeling herkennen

Rhasspy herkent niet zomaar alles wat je zegt. Je dient zelf te definiëren welke zinnen Rhasspy moet verstaan en welke bedoeling (intent) hij daaraan geeft. Omdat deze herkenning specifiek op maat van jouw vereisten gebeurt, vereist dit geen clouddienst met grote verwerkingskracht, maar kun je Rhasspy perfect op een Raspberry Pi draaien.

Zo definieer je bijvoorbeeld een intent LightState die een toestand kent: aan of uit. Je vult dan zinnen in die deze intent weergeven, zoals "doe het licht aan". Als je dan die zin uitspreekt, komt de hele machinerie van Rhasspy in gang en krijg je als resultaat het JSON-fragment dat de herkende bedoeling op een gestructureerde manier weergeeft.

Daarop kun je dan Home Assistant, Node-RED of je eigen software laten reageren en bijvoorbeeld je apparaten via je stem laten aansturen. Rhasspy maakt gebruik van MQTT (Message Queuing Telemetry Transport) om boodschappen op je netwerk rond te sturen wanneer je hem geactiveerd hebt, wanneer hij een zin heeft herkend, wanneer een sessie voorbij is enzovoort. Je kunt dus in gelijk welke programmeertaal of gelijk welk domoticasysteem op die MQTT-boodschappen reageren en zelf MQTT-boodschappen sturen om functionaliteit van Rhasspy aan te spreken.

Aan de slag met Rhasspy

Wil je ook met Rhasspy aan de slag? Op de website van Computer!Totaal leg ik in het artikel Zo krijg je stembesturing op de Raspberry Pi uit hoe je met Rhasspy begint op een Raspberry Pi met luidspreker en microfoon. Op het einde van het artikel kun je spraakopdrachten in het Nederlands geven aan Rhasspy en kun je Node-RED daarop laten reageren (zie ook mijn artikel Node-RED: apparaten en diensten koppelen zonder code). Loop je tegen problemen aan? Bezoek dan zeker Rhasspy's forum eens, waar talloze behulpzame communityleden actief zijn (waaronder ikzelf).

Heeft de mogelijkheid om zonder clouddienst aan stembesturing te doen je geprikkeld? Lees dan zeker mijn boek Control Your Home with Raspberry Pi: Secure, Modular, Open-Source and Self-Sufficient. Zoals de ondertitel al zegt, is het zelfvoorzienende aspect een belangrijk principe van mijn aanpak in dit boek. Ik vind dat een domoticasysteem niet mag afhangen van externe diensten van bedrijven die er van de ene op de andere dag de brui aan kunnen geven, of die continu kunnen zien wat ik thuis doe. Voor stembesturing geldt dat nog meer: je wilt niet dat Google of een ander bedrijf meeluistert met wat er in je huis gebeurt, ook al is het per ongeluk.

Het hele hoofdstuk over stembesturing in mijn boek gaat dan ook over Rhasspy. Het gaat iets dieper in op enkele aspecten die in het artikel in Computer!Totaal minder of niet aan bod kwamen. Zo leg ik er uit hoe je één Raspberry Pi als basis opzet en één of meerdere als satellieten, zodat je op meerdere plaatsen in huis met Rhasspy kunt spreken. Ook andere manieren dan Node-RED om de opdrachten die je geeft te verwerken komen aan bod, zoals met Python (onder andere via AppDaemon). Het boek is in het Engels en de voorbeelden dus ook, maar dezelfde aanpak werkt ook perfect in het Nederlands.

Zware lectuur

/images/heavy_reading.jpg

Ik wist dat ik zware lectuur in mijn boekenkast had staan, maar dit beeld in mijn thuiskantoor verraste me zonet. Toevallig was het een van de boekenplanken met wiskundeboeken. 1

1

Eigenlijk brak de plank door wat je niet ziet op deze foto: de stapel tijdschriften die voor de rij boeken stond en nu op de vloer door de hele kamer ligt.

Monitor en beperk het netwerkverkeer van je IoT-apparaten met SPIN

Het Internet of Things (IoT) is wat uit de hand aan het lopen, en cybercriminelen maken dankbaar misbruik van al die goedkope apparaatjes in je thuisnetwerk. Maar je hoeft het kind niet met het badwater weg te gooien. Hoe houd je je IoT-apparaten in het oog en, beter nog, hoe blokkeer je hun netwerktoegang selectief, zodat je met een geruster hart kunt gaan slapen?

Het SIDN (Stichting Internet Domeinregistratie Nederland) biedt met SPIN (Security and Privacy for In-home Networks) opensourcesoftware voor je thuisrouter aan waarmee je de verkeersstromen van al je IoT-apparaten in beeld brengt en kunt ingrijpen als een van je apparaten gecompromitteerd is.

In het februari/maartnummer van PCM van dit jaar schreef ik een artikel over SPIN. Je kunt dit nu online lezen, in twee delen:

Monitor en beperk netwerkverkeer

Er bestaan kant-en-klare routers met SPIN ingebouwd, maar je kunt het ook op OpenWrt installeren of op Valibox, een OpenWrt-gebaseerd besturingssysteem van SIDN. Het apparaat zet een draadloos netwerk op, en daarmee verbind je de IoT-apparaten die je wilt analyseren. Ik heb SPIN getest door de Valibox-firmware op een Raspberry Pi 3B te installeren.

Uit mijn test bleek dat SPIN ook prima geschikt is om het netwerkverkeer van een smartphone in het oog te houden. Onmiddellijk nadat je op je met de SPIN-router verbonden smartphone naar een website surft of een app opent, zie je in het live overzicht van SPIN allerlei verbindingen, verrassend meer dan je op het eerste gezicht zou verwachten:

/images/spin-nodes.png

Je kunt ook het netwerkverkeer van een apparaat dat je niet meer vertrouwt blokkeren, of je kunt het netwerkverkeer in een pcap-bestand opslaan. Dat pluis je daarna dan met een packet sniffer zoals Wireshark uit.

Een veiliger internet

IoT-apparaten worden steeds populairder, maar fabrikanten besteden helaas niet altijd voldoende aandacht aan de beveiliging ervan. Er is zeker een mentaliteitswijziging bij IoT-fabrikanten nodig, zodat hun apparaten een veilige standaardconfiguratie hebben, van veilige programmeermethodes gebruikmaken, regelmatig updates krijgen enzovoort.

Maar ondertussen hebben gebruikers ook een verantwoordelijkheid: geef niet elk willekeurig IoT-apparaat in je huis volledige toegang tot je netwerk. SPIN is daarbij een handig hulpmiddel: installeer het op je thuisrouter of, beter nog, op een afzonderlijk draadloos toegangspunt voor je IoT-apparaten.

Turris MOX, de modulaire opensourcerouter

Voor PCM heb ik een tijdje geleden de Turris MOX aan de tand gevoeld. Mijn bevindingen lees je in het artikel Turris MOX review - Modulaire opensource-router. De intro:

Als je een normale router koopt, zit je vast aan de specificaties. De Turris MOX is anders: je koopt een of meerdere modules, die je aan elkaar klikt om van het apparaat te maken wat je wilt: een router, switch, draadloos toegangspunt, server of welk ander netwerkapparaat dan ook. Ook achteraf kun je nog extra modules toevoegen. Hoe dat bevalt, lees je in deze Turris MOX review.

De Turris MOX, een modulaire opensourcerouter

Ik keek al lange tijd uit naar dit apparaat en ik wilde het heel graag testen. Ik ging er al van uit dat ik na mijn test de Turris MOX zou kopen voor mijn thuisnetwerk. Dat heb ik niet gedaan, hoe graag ik het ook wilde. Ik vond de installatie van de Turris MOX té omslachtig, de Wi-Fi-antennes in de behuizing wegwerken té precair, de software nog wat te buggy en uiteindelijk betaal je toch veel voor de flexibiliteit die het apparaat je biedt.

Maar het concept vind ik nog altijd geweldig. Er zouden meer van deze oplossingen moeten zijn. Een thuisnetwerk evolueert, je vereisten kunnen op enkele jaren snel veranderen, en als je dan gewoon eenvoudig een Wi-Fi-adapter kunt vervangen of ethernetpoorten of een modem voor het mobiele netwerk kunt toevoegen, is dat een veel duurzamer oplossing dan een nieuw apparaat te moeten kopen.

Ik hoop dus dat dit concept van een modulaire opensourcerouter aanslaat en nog verfijnd wordt. Hopelijk ben ik na de volgende test wél tevreden genoeg om er zelf een aan te schaffen.

Volledige anonimiteit bestaat niet

Overheden, onderzoeksinstellingen of bedrijven geven vaak om allerlei redenen 'geanonimiseerde' data vrij over personen. Helaas blijkt het in veel gevallen nog mogelijk om de personen achter de data te identificeren.

In PC-Active 311 van april schreef ik een artikel over de moeilijkheid om echt geanonimiseerde datasets aan te maken. Het artikel is nu ook op de website gepubliceerd: Volledige anonimiteit bestaat niet.

Bruikbaar of anoniem, nooit beide

Een geanonimiseerde database bevat geen namen meer, maar in combinatie met andere gegevensbronnen zijn de personen alsnog te identificeren (bron: Paul Ohm)

Een veel geciteerd artikel is dat van professor Paul Ohm van de University of Colorado Law School: Broken Promises of Privacy: Responding to the Surprising Failure of Anonymization (2010). Daarin argumenteert hij dat privacywetten niet volstaan om re-identificatie van personen in 'geanonimiseerde' datasets tegen te gaan. Privacywetten beperken zich immers tot gegevens die jou persoonlijk identificeren.

In deze tijd van grootschalige databases en grote computerkracht is het echter kinderspel om gigantisch veel gegevens te combineren, te vergelijken en te correleren, waardoor je uit een combinatie van schijnbaar anonieme gegevens die volledig aan de privacywetten voldoen de identiteit van iemand kunt achterhalen.

Ohms voorstel was om niet meer toe te laten zulke grote databases in zijn geheel te analyseren, maar ze interactief te maken of alleen gemiddeldes over verschillende personen als resultaat terug te geven. Dat beperkt natuurlijk de bruikbaarheid van de gegevens, maar dat is juist zijn punt: gegevens zijn ofwel bruikbaar ofwel perfect anoniem, maar nooit beide. Geen enkele bruikbare database kan perfect anoniem zijn en hoe bruikbaarder de data gemaakt worden, hoe minder privacy de betreffende personen hebben.

Hoe dan wel anonimiseren?

In het artikel bespreek ik diverse studies waaruit blijkt dat elke anonimisering van individuele gegevens gedoemd is om gedeanonimiseerd te worden. Enkele aanpakken die beter werken, zijn:

  • Gegevens van verschillende personen samenvoegen en alleen deze geaggregeerde data in de dataset bijhouden.

  • Privacygevoelige gegevens van ruis voorzien en de gegevens van meerdere personen bij elkaar optellen om statistieken te berekenen, zodat personen niet meer op individueel niveau te identificeren zijn. Dit heet differentiële privacy.

  • Een neuraal netwerk trainen op identificeerbare gegevens en daarmee een synthetische dataset genereren die statistisch identiek is aan de originele dataset, maar op geen enkele manier meer tot individuele personen terug te leiden is.

Kortom, anonimiteit is niet eenvoudig te bereiken.

Veilig thuiswerken met Linux Magazine

Linux Magazine 3 jaargang 21, over thuiswerken

Linux Magazine 3 is nu te koop, met als thema thuiswerken. Als privacy-activist heb ik mijn bijdrage aan het thema geleverd met twee artikels die opensourcetoepassingen met end-to-end encryptie bespreken:

Veilig videobellen met opensourcesoftware

Ik testte Jitsi Meet, Jami en Nextcloud Talk en vergeleek ze als oplossingen om te videobellen, met speciale aandacht voor beveiliging en end-to-end encryptie. Mijn conclusie: Jitsi biedt allround de meeste mogelijkheden, Jami is ideaal als je volledig peer-to-peer wilt werken en Nextcloud Talk is vooral interessant door zijn naadloze integratie met de andere componenten van Nextcloud.

Cryptpad: samen documenten bewerken zonder pottenkijkers

Ik testte Cryptpad, een opensource realtime collaborative editor voor het web. Je kunt hiermee dus samen met anderen aan teksten werken, maar uniek is dat dit met end-to-end encryptie gebruikt waardoor zelfs de server waarop Cryptpad draait je data niet kan inzien: alle encryptie gebeurt client-side in de webbrowser van de gebruikers.

En uiteraard staan in dit nummer ook mijn vaste rubrieken: de geek pages, de /rant waarin ik oproep om bij te dragen aan open datasets voor spraaktechnologie zoals Mozilla's Common Voice, Focus op veiligheid en experttips.

Versleuteld e-mailen met Thunderbird of Mailvelope

De extensie Enigmail voegt OpenPGP-ondersteuning aan Thunderbird toe, een krachtige opensource e-mailtoepassing uit de Mozilla-stal. Daardoor kun je je e-mails versleutelen en digitaal ondertekenen en kun je versleutelde boodschappen van anderen lezen en verifiëren.

Mailvelope is een andere interessante oplossing om veilig te e-mailen via OpenPGP: het is een browserextensie van Duitse makelij voor Firefox, Chrome en Edge die zich integreert met webmailtoepassingen zoals Gmail, Freenet en GMX.

Hoe je deze programma's gebruikt lees je in het derde deel van mijn 4-in-1 workshop over encryptie in het februarinummer van PCM, nu ook op de website van PCM te vinden: Versleuteld mailen met Thunderbird en Mailvelope. De intro:

Versleuteld mailen is de bestaansreden van OpenPGP. Diverse projecten helpen je hiermee, zowel voor e-mailclients op je computer zelf als voor webmail. We laten hier zien hoe het werkt in Thunderbird en Mailvelope.

Heb je altijd al veiliger willen e-mailen maar wist je niet waar te beginnen? Probeer dan de instructies in het artikel eens uit.

Waarschuwing

Het artikel beschrijft hoe je met de extensie Enigmail OpenPGP-ondersteuning aan Thunderbird 68 toevoegt. Thunderbird 78, dat ergens de komende maand zou uitkomen, zal OpenPGP-ondersteuning ingebouwd hebben, die de Enigmail-extensie vervangt. De ontwikkelaar van Enigmail werkt hieraan mee.

Versleutel en onderteken boodschappen met GNU Privacy Guard en Kleopatra

Het tweede deel van mijn 4-in-1 workshop over encryptie in het februarinummer van PCM is ondertussen op de website van PCM te lezen: Versleutelde bestanden versturen met Gpg4win en Kleopatra. De intro:

Encryptie is een notoir moeilijk onderwerp. Iedereen maakt dagelijks onbewust gebruik van encryptie, zoals https. Maar er zijn niet veel mensen die bewust gegevens versleutelen. We leggen hier uit hoe dat werkt en hoe je die versleutelde bestanden versturen kunt.

Ik werk zelf nogal graag met programma's op de opdrachtregel, en ik begin het artikel dan ook met een uitleg van hoe je een bestand symmetrisch versleutelt met gpg. Voor asymmetrische encryptie is mijn indruk dat velen afhaken bij de opdrachten die je ervoor nodig hebt, dus voor dit artikel probeerde ik Kleopatra uit, een grafisch programma om met OpenPGP te werken. Het werkt best gebruiksvriendelijk en draait zowel op Windows als Linux. Als je je altijd al eens met encryptie wilde bezighouden maar de instructies je afschrikten, is Kleopatra misschien wel iets voor jou.