Raspberry Pi als serverOp deze paginaRaspberry Pi, de $25 Linux computer? OK, de zaak ligt iets genuanceerder, maar het is toch een heel interessant project. Meer info op mijn algemene RaspberryPi pagina (ook over instellingen, eerste gebruik, en zo voort), deze pagina is specifiek voor het gebruik als home server (files, veilig toegang via internet, etc) en niet echt bedoeld voor beginners. Voor I/O-experimenten zie mijn Raspberry hardware pagina. Draait stabiel ook... 650 dagen non-stop aan (uptime) zonder reboot (tot februari
2021)! En toen was het dan dus ook tijd voor eens een grote update; van Devian Jessie (8) naar Debian Stretch (9) en
hopelijk naar Debian Buster (10)... In de tussentijd (mid 2022) door naar Debian Bullseye (11) en
zo zijn we weer helemaal up-to-date. Deze pagina is gestart met de Raspberry Pi 1, ondertussen overgegaan naar de Raspberry Pi 3, Niet alles is al aan de 3 aangepast! Zullen kleine verschillen zijn, ook door nieuwe versies van SW pakketten. Niet over naar de 4, rekenkracht niet nodig en gebruikt 2x zo veel stroom. Ik heb nu onder andere de volgende services draaien (met nog genoeg ruimte voor meer):
Raspberry Pi is voor mij ideaal als een server, want:
SD slijtage voorkomenEen server staat continue te werken. Je wilt niet dat de SD-card snel slijt, doordat er te veel
te vaak naar toe geschreven wordt. Ditzelfde probleem had ik ook al bij de USB-flash op de NSLU2, waar ik een aantal stappen genomen heb om
het schrijven naar de systeemdisk te verminderen. Het goede bij de Raspberry Pi is dat
Oops, met de recentere versies van raspbian is Huidige grootte van Hoe veel wordt er nu daadwerkelijk geschreven? Dat is te checken met while [ 1 ]; do cat /proc/diskstats | grep mmcblk0p2; sleep 600; done Vinden welke files er recentelijk geschreven zijn kan door eerst een marker-file te maken
( sudo find /var/ -xdev -newer marker.txt -print Met het programma
iotop (vergelijkbaar met top voor CPU/memorygebruik) kan je (soms) terugvinden welk
programma daadwerkelijk naar disk bezig is (tip: gebruik opties Veiligheid en HackersLet op: als je je Raspberry van buitenaf toegankelijk maakt (zoals ik gedaan heb voor mijn SSH
en VPN-server), dan heb je kans dat mensen proberen in te breken in je systeem... Zorg dat je een
goed geconfigureerde firewall hebt, werk met key files in plaats van wachtwoorden, en zo voort (zie
ook mijn SSH en Firewall stukjes
verderop). En zelfs dan weten ze je te vinden, zoals in onderstaande log (uittreksel uit
Auth.log invalid login attempts: Ik heb nu 'port knocking' ingesteld met behulp van iptables, dat wil zeggen dat je eerst aan enkele andere poorten moet kloppen voordat de SSH-poort opengaat. OK, ik weet het, 'security through obscurity' is schijnveiligheid, maar het houdt wel een aantal hackers tegen, krijg ik niet zo veel meldingen in mijn logfile. Maar voor echte veiligheid moet je toch echte maatregelen nemen, zoals het inloggen met key files (zoals ik heb). Opzetten als Samba file serverEen van de belangrijkste taken is het werken als netwerkdisk, met name voor backup maar ook voor centrale opslag van bijvoorbeeld foto's. De eerste stap hiervoor is het opzetten van een server om de files op de disk via het netwerk te benaderen (maar niet van buitenaf, alleen lokaal), voor zowel Windows als Linux. Ik installeer hiervoor een 'samba server, net als eerder op mijn NSLU2: zie mijn samba en NSLU2 pagina's, de eLinux R-Pi NAS pagina en ook deze Raspberry Samba pagina. Eerste stap is natuurlijk het installeren en configureren van de server: Vervanging voor NSLU2Veel van de configuratie lijkt op die van mijn oude NSLU2, dus kijk daar voor meer gegevens sudo mkdir /mnt/data Vergeet niet de (vanwege Toevoegen extra Linux users gaat met (evt met Wil je zonder wachtwoord in kunnen loggen? Zie Samba: How to share files without user/password Samba configuratieIn de [shared] NetBIOS uitzettenNetbios is niet echt veilig, en ook niet meer nodig... Kan je uitschakelen met in de global sectie op te nemen: [global] De folder Snelheid: 6.8 MB/s (55 Mbit/s) lezen en 5.8 MB/s schrijven van grote files, denk dat dit met name door mijn lokale netwerk bepaald wordt (100 mbit/s) gezien de USB disk 27 MB/s leessnelheid heeft op de Raspberry, en de CPU belasting op de raspberry maar 55% is (bij schrijven). Disk encryptieWil je niet dat mensen er zo maar met je data vandoor gaan, bijvoorbeeld bij diefstal van de schijf? Encrypt je disk dan. Dit kan op meerdere manieren, bijvoorbeeld met het encrypten van de hele disk met bijvoorbeeld LUKS/dm-crypt of TrueCrypt, of alleen bepaalde directories met eCryptFS of encFS. Heb voor het laatste gekozen omdat ik er al veel op heb staan, en geen reservedisk bij de hand heb om de data tijdelijk op te zetten terwijl ik de disk encrypt (data gaat daarbij verloren). Bij installatie wordt gevraagd om wachtwoord en opties, voor mij: cipher:<aes>, key:<32-bit>, plaintext passthrough:<no>, file name encryption:<kies maar>; hangt van je doel af maar bedenk dat filenamen gevoelige info kunnen bevatten, omdat ze aangeven om welke file het gaat (dus non-encrypted file names 'lekken' informatie). De commando's voor het opzetten: mkdir /path/to/encrypted; # als die nog niet
bestaat By eCryptfs file system hoef je niet van te voren ruimte te reserveren, de files staan 'gewoon' per stuk op disk. Je kan ze ook gewoon kopieren, bijvoorbeeld voor backup. Let wel op: per file is er een verschillende random seed gebruikt (due in een stukje 'metadata' aan het begin van de file bewaard wordt, zie deze heel technische eCryptfs design beschrijving, sectie 4.3); zo hebben twee dezelfde files in gecrypte vorm niet dezelfde checksum (als je ze ontcijfert bekijkt natuurlijk weer wel). Unmounten gaat gewoon met sudo mount -t ecryptfs "/path/to/encrypted" "/path/to/decrypted" -o ecryptfs_sig=<fnek_signature>,ecryptfs_fnek_sig=<fnek_signature>,ecryptfs_cipher=aes, ecryptfs_key_bytes=32,ecryptfs_unlink_sigs,ecryptfs_passthrough=no,key=passphrase En er wordt uiteraard om het wachtwoord gevraagd... Kan ik dus alleen doen als ik ben ingelogd op de Raspberry, want ik wil het wachtwoord niet in een file zetten. Let op; iemand met fysieke toegang tot je systeem kan alles, zolang het systeem aan staat is niets veilig. Maar als de disk wordt gejat en/of als het systeem wordt uitgezet zijn de gecrypte folders voor anderen onbruikbaar. Je kunt de ge-encrypte folder back-uppen; maar ik backup de unencrypted versie omdat mijn long-term backup disk zelf een encrypted partitie heeft. Het heeft overigens wel behoorlijk performance impact, schrijfsnelheid over het netwerk gaat omlaag van 5.8 MB/s naar 2.4 MB/s (2.75 MB/s bij een 16-bit key). Maar, omdat het hier vooral om de korte-termijn backups gaat is dat voor mij niet zo'n punt. Whole-disk encryptie met LUKS/dm-crypt heeft wat dat betreft betere performance, heb ik begrepen. Heb overigens de SD-card niet gecrypt, alleen dus (gedeelten van) de USB disk. DNS/DHCP Server dnsmasqEn toen was ik verhuisd, en had een nieuw modem/router (Docsis 3 van UPC). Mooi, met wireless en zo, maar met veel minder mogelijkheden voor instellingen vergeleken met mijn vorige gepimpte LinkSys (met Tomato software). Wat ik het meest mis is is het uitdelen van vaste IP-adressen aan de hand van het MAC-adres, en het geven van duidelijke apparaatnamen aan de hand van het IP-adres. Zo wil ik dat mijn Raspberry niet 192.168.1.5 heet, maarraspberry
(of raspberry.lan )...
Nu kan ik het UPC modem niet zo makkelijk upgraden qua software. En ik heb ook geen zin mijn
oude Linksys router achter het UPC modem te hangen (weer een apparaat dat 24/7 aan moet staan)...
Kan mijn Raspberry daar niet helpen? Jawel, door die als DNS (Domain
name Server, koppelt IP-adressen aan namen en zoekt ze zo nodig op internet op) en DHCP server (Dynamic Host Configuration Protocol, deelt de IP-adressen uit)
te laten werken. En daarvoor is er een programma beschikbaar: Nu moet sudo apt-get install dnsmasq Welke services lopen er eigenlijk? Met Dan de instellingen in # De lokale domainnaam Je kan de correctheid van de configuratiefile testen met de Nu natuurlijk nog op je systemen instellen dat ze de Raspberry gebruiken als DNS server, in
plaats van bijvoorbeeld je router. Dit gaat in in Ubuntu
in de DNS slaat ook eerdere zoekopdrachten op in een cache zodat een volgende opdracht sneller gaat.
geprobeerd (met Veilig Access van Buiten
Veilig internetten op reis is belangrijk, bijvoorbeeld als je op een terras of in een hotel wilt internet-bankieren. Het schijnt vrij makkelijk te zijn om een 'access point' over te nemen of na te maken, en daarmee je verbinding af te tappen. Met een beveiligde internetpagina (https) is dit iets moeilijker, maar een 'man-in-the-middle' attack is soms toch mogelijk. Ik zet dan liever zelf een beveiligde verbinding op naar mijn huisnetwerk, en laat mijn internetverkeer daarover lopen, als extra beveiliging. Daar zijn verschillende mogelijkheden voor, waaronder:
Zie ook het plaatje rechts, met rood de onveilige situatie, en daarnaast groen als beveiligde tunnel met in geel het verkeer daarover: gaat pas vanaf mijn vertrouwde thuisnetwerk het internet op. OpenVPN serverMet een VPN zet je een beveiligde (encrypted) tunnel op naar je huisnetwerk, en laat alle internetverkeer over die tunnel gaan. Ik heb hiervoor OpenVPN gebruikt, omdat dit goed ondersteund wordt op zowel de Raspberry (als server) als op Android (als client). FirewallIndien van toepassing: Zorg wel dat op je Raspberry de firewall goed
ingesteld staat, met name voor forwarding van Ook moet je op je modem/router de gekozen VPN poort (standaard udp port 1194) forwarden naar je Raspberry. Een uitgebreid artikel over OpenVPN/Raspberry met handleiding (in de appendix) en
achtergrondinformatie over security etc is te vinden als "SOHO
Remote Access VPN. Easy as Pie, Raspberry Pi..." al zitten er wat kleine foutjes in; dus goed
lezen en bij foutmeldingen nadenken. Ook op de openVPN how-to pages (en
de FAQ) en op 16 tips on OpenVPN security staat veel
uitleg. Na installatie (of op andere momenten) checken dat alles goed werkt: kijk in de logfile
Nu nog een nieuwe gebruiker aanmaken en de resulterende
sudo su; # gebruiker maken; handigst dit als
super-user te doen Is de folder Je kan OpenVPN normaal al op je lokale netwerk testen dus je kunt checken of alles qua
keys en zo goed is geïnstalleerd. Wel moet je in je Certificaat terugtrekken ('revoke'), bijvoorbeeld omdat je denkt dat iemand er ten onrechte
gebruik van maakt? Zorg wel dat je eerst (een keer) aan de hand van de handleiding dit goed
hebt geconfigureerd en openvpn hebt gerestart ( sudo su; # Revoke: handigst dit als super-user te
doen WireGuardEen recent alternatief voor OpenVPN is WireGuard. Sneller, moderner, en in de Linux kernel geintegreerd. Ook voor Android, Windows, etc. O ja, ik heb onderstaande regels aangepast in de # De 'push' meldt de client netjes af (minder foutmeldingen
in de log), 'mute' houdt kopiën van dezelfde melding beperkt, en 'verb' zet het loglevel op
4 Test! Hoe weet je nu of het goed werkt? Test onderweg in je browser door je IP-adres op te vragen via bijvoorbeeld WhatIsMyIP (ook voor https). Je zou nu het externe IP-adres van je netwerk thuis te zien moeten krijgen, omdat het verkeer daar pas het internet op gaat (moet je je IP-adres natuurlijk wel een keer thuis opgevraagd hebben, of met een Dynamic DNS service op naam op kunnen vragen). En verstuur eens een test-mail en kijk thuis in de headers (bijvoorbeeld in Thunderbird: View -> Message Source): hier zou je in de eerste 'Received:'-regel in de header ook weer je eigen IP-adres als afzender moeten herkennen. Update voor OpenVPN 2.4: en toen ging het mis, bij de update van Raspbian
Jessie naar Stretch, en daarmee van OpenVPN 2.3 naar OpenVPN 2.4. In de OpenVPN log file
SSH serverSSH en AndroidVoor Android gebruik ik ConnectBot om de SSH tunnel op te zetten, inclusief proxy port forwarding. Met ProxyDroid kan ik vervolgens de proxy aanzetten (zie mijn HTC pagina). SSH staat voor Secure SHell. Secure (veilig) betekent hier dat alle communicatie versleuteld (encrypted) is; zelfs het inlogproces. Meer info op mijn SSH pagina en natuurlijk op de SSH manual pages, en zie ook mijn tekst bovenaan deze pagina over veiligheid. SSH biedt een aantal mogelijkheden:
SSH configuratie moet ik nog in detail beschrijven (meer details op de sshd_config man page), maar in het kort de belangrijkste stappen: in de
Squid Proxy server (met SSH)Voor veilig internet-browsen vanaf een terrasje is OpenVPN de makkelijkste methode. Een alternatief is surfen over een veilige tunnel opgezet met SSH (zie plaatje hierboven). Gaat niet zo maar, je hebt hiervoor ook een 'proxy' nodig, een programma waartegen een browser aanpraat alsof het het werkelijke internet is. Alle verkeer gaat dan gecodeerd naar huis, en pas vanaf daar normaal het internet op. Dit kan met de combi SSH en squid, een proxy-pakket. De opzet hiervan is nog aardig gelijk aan die op mijn oude NSLU, zie mijn NSLU2 pagina... Het idee is een veilige SSH tunnel op te zetten waarbij je de poort naar
de proxy als port-forwarding opzet ( ssh -p 11122 -L 3128:localhost:3128 -L 12345:localhost:445
<username>@<je_huis-ip_adres> Hoe weet je of squid goed werkt? Om dit echt te testen moet je op een ander netwerk dan je normale netwerk zitten (bijvoorbeeld op je werk), en vanaf daar de SSH-verbinding naar huis opzetten. Ga dan naar je browser en stel deze zo in (via opties -> netwerk) dat deze via de proxy naar het internet gaat. Check dan met bijvoorbeeld WhatIsMyIP wat je IP-adres is (en hier voor https). Dit zou het IP adres van je huisnetwerk (waar je raspberry staat) moeten zijn, en niet dat van het netwerk vanaf waar je test... Enige probleem: Android op mijn oudste mobiel kent standaard geen proxies, in ieder geval niet in Android versie 2.x... En dat voor een Linux-based OS, slordig. Hebben meer mensen al over geklaagd maar geen antwoord van Google. Firefox op Android kan er wel mee overweg; en met de Proxy Mobile extensie is er redelijk snel te wisselen. Om alle Android 2.x apps via de proxy te laten lopen moet je een proxy-app als ProxyDroid hebben, en daarvoor heb je wel een geroote Android nodig. In latere Androids (in ieder geval 4.x) zijn proxies wel mogelijk, en gebruik ik Proxy Settings om makkelijk tussen met en zonder te wisselen. Ps: een SSH tunnel opzetten gaat handig met het gratis ConnectBot. JailkitVoor gevorderden: Om anderen bij de harde schijf te laten (met sftp), maar niet ook gelijk alles met het systeem te kunnen laten doen is een 'chroot jail' handig. Als iemand hiermee via SSH op je Raspberry inlogt krijgt diegene beperkte mogelijkheden. Je kan zelf bijvoorbeeld instellen welke programma's wel of niet beschikbaar zijn, de gebruiker zit dus als het ware in een 'jail' (gevangenis) op de Raspberry, waarvan jij de bewaker bent. Ik gebruik dit om mijn studerende zonen 'op afstand' veilig de netwerk/backup disk te laten benaderen. Download jailkit en pak uit op je
Raspberry ( Helaas ging dit niet helemaal zonder problemen:
Nu kan een jailed user natuurlijk niet uit de jail, en dus (ook al is sftp toegestaan)
nog steeds niet bij de harde schijf... En, je kan geen link leggen naar een map buiten de jail.
Moet dus net andersom (zie ook de jailkit
FAQ): mount als root de disk (of map) binnen de jail. In mijn geval gaat het om de map
Om echt een ssh prompt met beperkte toegang te geven moet je nog
wat meer doen: FirewallAls je Raspberry de ingang tot je thuisnetwerk is, is het goed er ook een firewall op te zetten (zie mijn bovenstaande tekst over veiligheid...). Hiermee heb je controle over wat er via Ethernet (en internet) in en uit gaat. Sluit jezelf niet buiten!Zorg wel dat je jezelf niet buitensluit tijdens het configureren; is bijvoorbeeld slim om in een aparte shell een commando te starten dat na een half uur de firewall uitzet... Zie mijn firewall pagina voor meer details (kijk bij 'in noodgevallen'). In eerste instantie gekozen voor ufw, Uncomplicated FireWall. Maar later overgegaan naar het direct instellen van iptables, heb je toch een beter gevoel wat er gebeurt, en kan je preciezer instellen (was ook handig omdat ik een VPN wilde gaan opzetten, heeft specifieke regels nodig). iptables is iets lastiger, ik heb er daarom een stuk aan gewijd op mijn firewall pagina. Handig om je commando's in een script te zetten, kan je snel je default configuratie weer terug zetten. File Synchronisatie en BackupEr zijn nogal wat methodes om backups te maken. Een tijd lang heb ik rsync gebruikt, die een backup van mijn 'Documents' folder op mijn desktop naar de Raspberry maakte. Maar, nu ik ook meer mijn laptop gebruik, heb ik behoefte aan een tool die meerdere computers in sync kan houden. Ik heb daarvoor unison gekozen. Deze houdt van de opgegeven mappen per computer de wijzigingen bij, en ziet zo wanneer files gewijzigd zijn; en stuurt dan de juiste files heen en weer. Ook als files weggegooid worden wordt dit goed afgehandeld. Probleem is wel dat op alle systemen dezelfde versie van unison moet worden gebruikt...
In oudere versies (Raspbian debian-Jessie) was alleen nog versie 2.40 beschikbaar, de meest
recentere versie 2.48 (zoals in Ubuntu de standaard) is blijkbaar moeilijk op de oudere Raspberry
werkend te krijgen. Ik had er voor gekozen overal de versie 2.40.102 als op
de Raspberry te draaien, en deze versie 'vast te zetten' om te voorkomen dat een computer door een
update uit de pas gaat lopen. 'How
to install Unison 2.40 on Ubuntu 16.04' heeft geholpen [link naar binary]. Gedownload op Ubuntu (op
Raspberry kan je gewoon ' sudo dpkg --install ./unison-gtk_2.40.102-2ubuntu1_amd64.deb Met de overgang naar een nieuwere versie van Raspbian (gebaseerd op Debian Stretch) hoopte ik
dat dit opgelost zou zijn, en ik met 2.48 zou kunnen werken... Helaas, ook hier
problemen ( wget
http://ftp.nl.debian.org/debian/pool/main/u/unison/unison-gtk_2.48.4-1+b1_amd64.deb Je kan unison via SSH laten werken (een beveiligde verbinding,
nuttig als een van je computers elders op de wereld staat), of via een lokale tcp socket (niet
beveilidg dus!). Gekozen voor de simpeler tcp-socket op poort 12345. Wel de firewall op je lokale netwerk/PC's openzetten, maar uiteraard niet die naar de
buitenwereld/het internet toe! Configuratiefile unison -socket 12345 & Media Server mediatombUPnP InspectorMet upnp-inspector is het mogelijk te scannen op upnp servers, mocht je de Raspberry niet vinden (ziet daarnaast ook bv mijn TV als zowel een mediaRenderer als een RemoteControlReceiver) Ik ben niet direct van plan er ook een volwaardige media-player als XBMC (zie bv Raspbmc, XBian en OpenELEC) van te maken, maar het serveren van media (met name audio en foto's aan mijn 'slimme' TV met Samsung AllShare) is zeker iets wat ik van plan ben (via DNLA/UPnP met de mediatomb server. Installatie gaat op de standaard manier met apt-get, en daarna kan je vanuit je web
browser op je lokale netwerk mediatomb vertellen welke media hij beschikbaar moet stellen
als server (standaard op Maar, toen werkte het nog niet. Ik had blijkbaar op een of andere manier tijdens het proberen
mijn mediatomb database om zeep gekregen, want na het verwijderen en opnieuw laten maken
werkte het opeens wel: zowel op mijn TV, mijn Android phone (MediaHouse),
en mijn PC met VLC (al vind die mediatomb soms pas na een lange tijd). Door de
autoscan optie in mijn sudo /etc/init.d/mediatomb stop VLC en DLNAMet VLC kan je met een DLNA server als mediatomb verbinden via View --> Playlist -->Local Network -->Universal Plug’n Play. Wel even geduld hebben, duurt even voordat de servers gevonden worden. Zowel een mpeg4 als een avi video speelden nu goed af (ondanks verhalen dat Samsung TV's met AllShare nogal kritisch zijn wat betreft ondersteunde DLNA formaten, ik had blijkbaar geluk en hoef niet te transcoden). Streamen van een 1280 x 720 H.264 movie (1.5 Mb/s) koste slechts rond de 2% CPU load. MP3 audio gaat ook prima (mijn TV kan geen wma files aan: omzetten naar MP3 met wma2mp3). Alleen de folderstructuur op mijn TV is niet helemaal duidelijk, vooral met foto's... Sommige series lijken op verschillende plaatsen voor te komen, maar soms met maar een gedeelte van de foto's. In een andere folder is die serie dan wel weer helemaal te zien. Vreemd, nog eens uitzoeken. Home Control en MQTTGeel is elektra groen is gas Een van de taken van mijn home server is ook home control en automation (domotica). Maar, voor je wilt controleren: meten is weten... Vandaar mijn interesse om ook bijvoorbeeld I²C sensoren (als een temperatuursensor in de huiskamer) aan te kunnen sluiten. Meer op mijn Home Control pagina: slimme electriciteitsmeter, CO2/luchtkwaliteitsmeter, etc aangesloten op mijn lokale netwerk. Hoe komen alle gegevens bij elkaar? Dit kan het handigst via een 'data broker', waar sensoren de gegevens kunnen publiceren, en toepassingen zich op gegevens kunnen abonneren. De distributie wordt dan automatisch via de broker gedaan. Ik gebruik hiervoor de mosquitto (open source MQTT message broker) server. mosquitto implementeerd het standaard "Message Queuing Telemetry Transport" protocol, dat door veel systemen ondersteund wordt. Zie voor installatie bijvoorbeeld de Youtube MQTT basics video. Er zijn ook bijvoorbeeld Android app's om de data te bekijken/te wijzigen, zodat ik ook een makkelijker user interface heb (in plaats van mijn simpele lighttpd web interface). Het geheel is wel bewust alleen vanaf mijn lokale netwerk te benaderen, dus minder risico voor 'inbraak'. Via MQTT (en bijvoorbeeld MQTT Dash) kan ik diverse modules besturen, zoals ook mijn Sonoff wifi-gestuurde switch met eigen software (zie mijn Arduino pagina), en mijn 'IoT Energieverklikker'-lamp, waarvan de kleur zich aanpast aan het energiegebruik op dat moment. Android MQTT Dash, met de kerstboom op de Sonoff1 module Het leuke van MQTT is dat je zo makkelijk allerlei losse componenten/programma's aan elkaar kan knopen. Ik heb bijvoorbeeld de Sonoff WiFi 220V schakelaar. Op de Raspberry heb ik een 'timer' script gemaakt (als in een digitale tijdschakelklok) in Python. Dit script publiceert de aan/uit stand van de timer naar onderwerp 'Timer1'. De Sonoff1 (met de kerstboom) luistert naar dit onderwerp, en schakelt dus aan en uit op basis van deze timer. Via Android MQTT Dash kan ik een string naar de MQTT server sturen, die deze naar het Python script doorstuurt: zie plaatje rechts 'Sonoff1Timer'. Nu heb ik een kerst-ster op een tweede module aangesloten: deze ook naar diezelfde Sonoff timer laten luisteren, en hij schakelt braaf mee. Op beide modules zit ook een drukknopje, deze laat ik ook de lamp schakelen: en ze publiceren ook naar het timer-kanaal, luisteren zo met elkaar mee. Minimale Mail Server exim4Soms is het ook handig als je Raspberry server je een emailtje kan sturen, voor wekelijkse
statusrapporten of als er bijvoorbeeld iets mis is. Heb een scriptje in
sudo apt-get install mailutils Problemen: zie de logfile exim -bp | awk '/^ *[0-9]+[mhd]/{print "exim -Mrm " $3}' | sh (als root). xxxexim4-config stelt een aantal vragen; zie hiervoor Send-only
Mail Server maar kies 'mail send by smarthost; no local mail' en verwijder het IPv6
adres in 'IP addresses to listen on...'. Na configuratie moet je ook de file
echo "Dit is een test" | mail -s Testing <mijn_emailadres>@keesmoerman·nl Om disk-access te reduceren misschien goed om het interval waarmee exim4 de queue
verwerkt wat hoger te zetten (bv van 30 minuten naar 4 uur), als je geen tijd-kritische mail hebt:
sudo mv /var/log/exim4 /var/log/exim4_old Wil je de configuratie handmatig aanpassen (zonder sudo service exim4 stop Web server lighttpdAls web-server (dus om webpagina's beschikbaar te maken) gebruik ik het lichtgewicht lighttpd. Apache is uiteraard krachtiger, maar ook zwaarder voor die arme Pi... Mooi is dat lighttpd ook naar Python (en Perl) kan interfacen volgens de CGI-standaard, zodat ik dynamische webpages kan maken met Python scripts om zo ook een interface te hebben naar mijn home control systeem. Installatie staat goed uitgelegd op 'Installing Lighttpd with Python CGI support' en op 'How to get Python to work with Lighttpd?' (inclusief Python voorbeeldje). Had natuurlijk ook een Python server kunnen gebruiken, maar dit is denk ik toch minder werk. Ps: ik heb deze webpages alleen beschikbaar op mijn lokale netwerk; niet direct van buitenaf (maar zie SSH met port forwarding) dus aanvallen heeft geen zin.
En dan natuurlijk: hoe werkt Python met
CGI (meer uitleg)? Ik heb nog weinig
ervaring met Python, maar wel veel met Perl CGI programming. Blijkt
niet zo heel veel verschil in te zitten, CGI is natuurlijk toch een standaard interface. Enige
lastige is dat fouten niet in de error log ( import cgi # Dit
natuurlijk sowieso voor cgi programming Dynamic IP adresTja, nu heb je je server netjes ingesteld, maar hoe kunnen anderen die nu van buitenaf vinden?
Normaal hebben servers een domeinnaam (b.v. Er zijn heel wat providers voor Dynamic
DNS. Ik ben zelf nu overgestapt naar een gratis dynamic IP address updater van dynu.com (dyndns is niet meer gratis), dus mijn thuissysteem is nu van
buitenaf te bereiken via sudo apt-get install ddclient #
installeren OnderhoudVoor normaal onderhoud (bijwerken van software naar de laatste updates en security-patches): zie mijn algemene Raspberry pagina. Soms moet er meer gebeuren: tijdens een eerdere migratie was het tijd om alle services over te zetten van een Raspberry Pi 1B naar een 3B. Ach, na 4 jaar eens alles wat nodig is 'vers' installeren kan geen kwaad. Maar, soms is het handig dat je de oude configuratie kan kopiëren... Normaal zijn configuratiefiles te vinden in
En, als alles werkt een backup maken van de SD-card, nu ik weer een werkende basis-configuratie heb... Er lopen ook vast services die niet nodig zijn. Zo kwam ik modem-manager tegen, die zorgt
voor telefooncommunicatie via USB. Ik hang toch geen GSM modem aan mijn raspberry, dus die heb ik
gestopt met de onderstaande regel (één regel). Alleen sudo mv /usr/share/dbus-1/system-services/org.freedesktop.ModemManager.service /usr/share/dbus-1/system-services/org.freedesktop.ModemManager.service.disabled |
op mijn site |