Nachdem ich durch diesen Thread auf das Thema aufmerksam geworden bin, habe ich mal nach Möglichkeiten gesucht, dass auf einem möglichst sparsamen minimalistischen System zum Laufen zu bekommen.
A) Das System
System ist, anstelle des weit verbreiteten Raspberry Pi, ein Beaglebone geworden: http://beagleboard.org/bone-original - das hat den hauptsächlichen Grund, dass der Beaglebone aufgrund seiner äußerst geringen Stromaufnahme einfach mit dem USB Anschluss des Routers mit Strom versorgt werden kann, was ein weiteres Netzteil überflüssig macht, und nebenbei soll das Teil ja auch 24/7 laufen.
Da isser nun:
Im Lieferumfang des Beaglebone ist in meinem Fall gleich eine 8GB microSD Karte mit einem vorinstalliertem System dabei gewesen. Der neuere "Beaglebone Black" bringt sogar 4GB onboard Speicher mit, womit keine extra SD Karte mehr nötig wäre.
Ansonsten ist nur ein USB Kabel dabei, um die Platine in Betrieb nehmen zu können. Mehr braucht es auch erstmal nicht direkt.
Bei Reichelt hab ich mir dann noch passendes Zubehör dazu bestellt, ein "Hammond" Gehäuse, sowie ein passendes USB->Hohlstecker Kabel und ein 0,5m Netzwerkkabel, das Gerät soll ja direkt neben dem Router seinen Platz finden.
Das Gehäuse macht einen sehr guten, robusten Eindruck und es sind alle Schrauben dabei, die man für die Montage braucht.
B) Die Installation als "Pi-hole"
Beaglebone / Pi-hole Installation: Für den Beaglebone gibt es verschiedene SD-Images, siehe https://beagleboard.org/latest-images - ich habe mich für Debian 8.7 / "Jessie IoT (non-GUI)" entschieden, weil ich keine GUI brauche und mit Debian bisher sehr gute Erfahrungen gemacht hab
Im Folgenden werden die einzelnen Installationsschritte beschrieben, ggf. sind die nicht perfekt ausformuliert und noch etwas erklärungsbedürftig - bitte einfach nachfragen, wenn was nicht klar ist - ich hatte mir das alles nur stichpunktartig mitgeschrieben und die wesenltichen Konsolenein- und ausgaben aus dem Terminal kopiert.
Ausgaben des Terminals sind hier als Zitate eingefügt, ich hoffe das ist dann einigermaßen nachvollziehbar.
1) OS Image auf SD Karte installieren, siehe Anleitung unter https://beagleboard.org/getting-started#update
Anschließend den Beaglebone mit dem Netzwerk verbinden, SD Karte einlegen und mit Strom versorgen, damit er bootet und eine IP Adresse bekommt. Die folgenden Schritte sind dann per Remote-Zugriff via putty zu erledigen. Welche IP das System bekommen hat, müsste dem Router entnommen werden - Hinweis an der Stelle: es bringt nichts, über die MAC eine feste IP zuzuweisen, eine feste IP muss später direkt am Beaglebone eingerichtet werden.
(Sollte ein modernerer "Beaglebone Black" mit per HDMI angeschlossenem Monitor zum Einsatz kommen und die Installation direkt am Gerät mit USB Peripherie vorgenommen werden, muss ein extra Netzteil verwendet werden, da der Strombedarf dann deutlich über den 0,5A liegen dürfte, die ein USB Anschluss dann nicht mehr hergibt)
2) SSH Login von einem beliebigen anderen, im gleichen Netzwerk befindlichen Rechner / mit User debian, Passwort temppwd:
Zitatlogin as: debian
Debian GNU/Linux 8BeagleBoard.org Debian Image 2017-03-19
Support/FAQ: http://elinux.org/Beagleboard:BeagleBoneBlack_Debian
default username:password is [debian:temppwd]
debian@beaglebone:~$
3) Sicherstellen, dass eine Internetverbindung vorhanden ist und die Paketquellen mit sudo apt update aktualisieren (erforderlich für 4)):
Zitatdebian@beaglebone:~$ sudo apt update
4) Optional, wenn eine SD Karte >4GB verwendet wird (die Images sind auf 4GB ausgelegt)
4.1) Partition auf volle Größe der SD Karte erweitern, dazu wird zuerst parted installiert:
Zitatdebian@beaglebone:~$ sudo apt-get install parted
Anschließend sudo parted ausführen:
Zitatdebian@beaglebone:~$ sudo parted
GNU Parted 3.2
Using /dev/mmcblk0
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted)
und mit print free die aktuelle Plattenbelegung anzeigen lassen:
ZitatAlles anzeigen
(parted)print free
Model: SD SD8GB (sd/mmc)
Disk /dev/mmcblk0: 7860MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:Number Start End Size Type File system Flags
32.3kB 4194kB 4162kB Free Space
1 4194kB 3565MB 3561MB primary ext4 boot
3565MB 7860MB 4295MB Free Space
Die zu bearbeitende Platte (Disk) mit select auswählen und anschließend mit resizepart 1 (siehe Number in der Liste zuvor) auf das gewünschte Partitionsende erweitern (in diesem Fall auf MB 7800):
Zitat(parted) select /dev/mmcblk0
Using /dev/mmcblk0
Zitat(parted) resizepart 1
End? [3565MB]? 7800
Erneuter Blick in print free zeigt die erfolgreiche Erweiterung der Partition auf nun 7800MB:
ZitatAlles anzeigen
(parted) print free
Model: SD SD8GB (sd/mmc)
Disk /dev/mmcblk0: 7860MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:Number Start End Size Type File system Flags
32.3kB 4194kB 4162kB Free Space
1 4194kB 7800MB 7796MB primary ext4 boot
7800MB 7860MB 60.1MB Free Space
Die letzten 60,1 MB unbenutzer Speicher werden erstmal ignoriert.
parted mit quit wieder verlassen:
Zitat(parted) quit
Information: You may need to update /etc/fstab.
Die letzte Information bzgl. fstab kann ignoriert werden.
4.2) Dateisystem auf volle Größe der vergrößerten Partition erweitern:
Mit sudo fdisk -l überprüfen wir noch einmal, dass unser Device nun 7,3GB anstatt der 3,3GB hat:
ZitatAlles anzeigen
debian@beaglebone:~$ sudo fdisk -l
[sudo] password for debian:Disk /dev/mmcblk0: 7.3 GiB, 7860125696 bytes, 15351808 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x54e517e9Device Boot Start End Sectors Size Id Type
/dev/mmcblk0p1 * 8192 15234375 15226184 7.3G 83 Linux
Das Filesystem kennt aber nach wie vor nur die 3,3GB Größe, wie mittels mit df -h festzustellen ist:
Zitat
debian@beaglebone:~$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/root 3.3G 1.5G 1.6G 50% /
Das Filesystem muss noch auf volle Größe der nun verfügbaren 7,1GB Partition erweitert werden, was mit resize2fs -p gemacht wird:
Zitatdebian@beaglebone:~$ sudo resize2fs -p /dev/mmcblk0p1
Es muss keine Größe angegeben werden, das Programm erkennt das von alleine.
Anschließend kann mittels df -h der neue verfügbare Speicher begutachtet werden:
Zitat
debian@beaglebone:~$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/root 7.1G 1.5G 5.3G 23% /
Schritt 4) ist somit abgeschlossen, es wurde erfolgreich der ungenutzte Speicher der 8GB SD Karte für den Beaglebone verfügbar gemacht!
5) Einrichten eines Swap-Files (Vielen Dank an den User "kenorb", der diese Anleitung für Swapfiles hier gepostet hat: https://askubuntu.com/questions/3369…em-installation)
Ein erster Blick in die Systemressourcen per top und wir sehen ca. 166MB von 240MB RAM sind in Benutzung und es ist kein Swap eingerichtet:
ZitatKiB Mem: 240140 total, 166312 used, 73828 free, 10824 buffers
KiB Swap: 0 total, 0 used, 0 free. 64832 cached Mem
Auch wenn man nicht Gefahr läuft, den vorhandenen physikalischen RAM voll auszureizen, sollte immer ein ausreichender Swap-Speicher für das System zur Verfügung stehen.
Um dies zu tun, könnte man eine eigene Swap Partition anlegen, oder eine Swap-Datei wie folgt:
Verzeichnis für Swap anlegen mittels sudo mkdir -v /var/cache/swap
Zitat
debian@beaglebone:~$ sudo mkdir -v /var/cache/swap
[sudo] password for debian:
mkdir: created directory ‘/var/cache/swap’
In das gerade erstellte Verzeichnis wechseln und die Swap Datei erzeugen, in diesem Fall 1GB (1K * 1M = 1 GiB) sudo dd if=/dev/zero of=swapfile bs=1K count=1M:
Zitat
debian@beaglebone:~$ cd /var/cache/swap
debian@beaglebone:/var/cache/swap$ sudo dd if=/dev/zero of=swapfile bs=1K count=1M
1048576+0 records in
1048576+0 records out
1073741824 bytes (1.1 GB) copied, 86.2506 s, 12.4 MB/s
Swap-Datei mit nötigen Berechtigungen ausstatten via chmod:
Zitatdebian@beaglebone:/var/cache/swap$ sudo chmod 600 swapfile
Swap-Datei mittels mkswap als Swap definieren:
Zitat
debian@beaglebone:/var/cache/swap$ sudo mkswap swapfile
Setting up swapspace version 1, size = 1048572 KiB
no label, UUID=64cd7930-718b-432e-8911-ea8f7b2149b6
Swap-Speicher auf dem System mit swapon aktivieren:
Zitatdebian@beaglebone:/var/cache/swap$ sudo swapon swapfile
Mit top prüfen, ob der Swap nun verfpgbar ist:
ZitatKiB Swap: 1048572 total, 0 used,
Zu guter Letzt das Swap-File in fstab eintragen, damit es nach einem Reboot gleich wieder verfügbar ist und nicht per Hand aktiviert werden muss:
Zitatdebian@beaglebone:/var/cache/swap$ echo "/var/cache/swap/swapfile none swap sw 0 0" | sudo tee -a /etc/fstab
Und einmal mit poweroff --reboot neu starten, um das Ganze zu prüfen, das es nach einem Neustart noch funktioniert:
Zitat#debian@beaglebone:/var/cache/swap$ sudo poweroff --reboot
Hinweis: es kann sein, dass der Beaglebone nach dem Reboot eine andere IP bekommen hat!
6) Bereinigung der installierten Pakete
Da einige vorinstallierte Pakete für die Verwendung als "Pi-hole" nicht gebraucht werden und unnötig RAM belegen, werden folgende Pakete deinstalliert:
Zitatdebian@beaglebone:~$ sudo apt remove bonescript bone101 bb-cape-overlays bb-customizations bb-node-red-installer apache2 apache2-bin apache2-data apache2-utils nodejs
(Pi-hole bringt mit lightppd einen eigenen Webserver mit, daher kann der Apache auch weg)
Nach einem weiteren Reboot haben wir nun wesentlich mehr freien RAM, es werden nur noch ca. 64MB vom System belegt, siehe top:
ZitatKiB Mem: 240136 total, 65420 used
KiB Swap: 1048572 total, 0 used
7) Feste IP vergeben
Da das System der DNS Server für das eigene Netzwerk werden soll, braucht es auch eine feste IP.
Mit connmanctl services Ermitteln, wie die eigene Verbindung heißt:
Zitatdebian@beaglebone:/home$ connmanctl services
*AO Wired ethernet_d0397297b63c_cable
Statische IP zuweisen (bleibt auch nach reboot erhalten):
sudo connmanctl config ethernet_d0397297b63c_cable --ipv4 manual [statische IP des Beaglebone] [Subnetmask] [Gateway] --nameservers [Gateway]
z.B.:
Zitatdebian@beaglebone:~$ sudo connmanctl config ethernet_d0397297b63c_cable --ipv4 manual 192.168.1.2 255.255.255.0 192.168.1.1 --nameservers 192.168.1.1
Pi-hole installieren (Eine sehr gute Anleitung dazu gibt es hier: https://www.kuketz-blog.de/pi-hole-schwar…berry-pi-teil1/)
ACHTUNG: Da bei mir eine "SoftAP" Konfigurationsdatei immer das Starten des dnsmasq Service verhinderte, gleich der Hinweis folgende Datei vor der Pi-hole Installation zu löschen: /etc/dnsmasq.d/SoftAp0
Zitatdebian@beaglebone:/etc/dnsmasq.d$ sudo rm SoftAp0
Sollte "curl" noch nicht installiert sein (bei dem Debian Image, das ich von eingangs genannter Quelle bezogen habe, war es bereits drin), einfach noch nachinstallieren:
Zitatdebian@beaglebone:~$ sudo apt-get install curl
Anschließend das Setup des Pi-hole aufrufen:
sudo curl -sSL https://install.pi-hole.net | bash
Die Anweisungen befolgen und schließlich hat man unter der vergebenen IP Adresse (oder auch http://pi.hole/admin/index.php) einen eigenen Pi-hole am Laufen.
Abschließende und ergänzende Schritte
9) Zeitzone einstellen, sollte die nicht stimmen
Die aktuelle Zeit lässt sich mit date prüfen:
Zitatdebian@beaglebone:~$ date
Sollte die Zeitzone nicht korrekt eingestellt sein, lässt diese sich mit dpkg-reconfigure tzdata ändern:
Zitatdebian@beaglebone:~$ sudo dpkg-reconfigure tzdata
10) Passwörter ändern!
Wichtiger Schritt zum Abschluss (kann natürlich auch schon vorher gemacht werden), per passwd ein neues, sicheres Passwort für den User debian vergeben:
Zitatdebian@beaglebone:~$ passwd
Oder eigene User anlegen, wurde hier aber noch nicht gemacht
Passwort des Admin-Webinterfaces von Pi-hole ändern:
Zitatdebian@beaglebone:~$ sudo pihole -a -p [newpassword]
11) Beaglebone in "Energiesparmodus" betreiben
Standardmäßig taktet die CPU mit bis zu 1000MHz, was etwas zu viel sein kann, wenn man den Beaglebone nur durch den Strom einer USB-Buchse des Routers betreiben will ohne extra Netzteil.
Die aktuellen CPU Eigenschaften können mit lscpu ausgelesen werden:
ZitatAlles anzeigen
debian@beaglebone:/etc/init.d$ lscpu
Architecture: armv7l
Byte Order: Little Endian
CPU(s): 1
On-line CPU(s) list: 0
Thread(s) per core: 1
Core(s) per socket: 1
Socket(s): 1
Model name: ARMv7 Processor rev 2 (v7l)
CPU max MHz: 1000.0000
CPU min MHz: 300.0000
Man sieht, er arbeitet minimal mit 300MHz und max. mit 1000MHz.
Die einzelnen möglichen Taktstufen kann man sich dann noch im Detail mit cpufreq-info ansehen:
ZitatAlles anzeigen
debian@beaglebone:~$ cpufreq-info
cpufrequtils 008: cpufreq-info (C) Dominik Brodowski 2004-2009
Report errors and bugs to cpufreq@vger.kernel.org, please.
analyzing CPU 0:
driver: cpufreq-dt
CPUs which run at the same hardware frequency: 0
CPUs which need to have their frequency coordinated by software: 0
maximum transition latency: 300 us.
hardware limits: 300 MHz - 1000 MHz
available frequency steps: 300 MHz, 600 MHz, 720 MHz, 800 MHz, 1000 MHz
available cpufreq governors: conservative, ondemand, userspace, powersave, performance
current policy: frequency should be within 600 MHz and 600 MHz.
The governor "userspace" may decide which speed to use
within this range.
current CPU frequency is 600 MHz.
cpufreq stats: 300 MHz:0.00%, 600 MHz:99.99%, 720 MHz:0.00%, 800 MHz:0.00%, 1000 MHz:0.01% (1)
Bei dieser CPU wären also 300, 600, 720, 800 oder 1000 MHz einstellbar.
Um den Energieverrbauch so gering wie möglich zu halten (und unter 500mA per USB Power zu bleiben) kann man nun den maximalen CPU Takt begrenzen, das geschieht in der /etc/init.d/cpufrequtils Datei:
Zitatdebian@beaglebone:/etc/init.d$ sudo nano cpufrequtils
Folgende Stelle suchen (Zum Zeitpunkt des Verfassens dieses Textes zu finden ab Zeile 42):
Zitat
ENABLE="true"
GOVERNOR="ondemand"
MAX_SPEED="0"
MIN_SPEED="0"
Unter "MIN_SPEED" und "MAX_SPEED" einfach 600000 eingeben, den "GOVERNOR" auf "userspace" ändern und schon hat man die CPU auf 600MHz festgesetzt, was für die Aufgabe als DNS Filter ausreichend ist.
12) Im Router oder an den einzelnen PCs muss nun noch logischerweise die Beaglebone IP als primärer DNS Server eingetragen werden
C) Fertig -> unter http://pi.hole/admin sollte nun euer Müllfilter fürs Web erreichbar sein