Futro S900
Einleitung
Dieser Beitrag ist löst die veraltete Seite Futro S550 und Futro S550-2 ab.
Im Sommer 2022 entstand dieser Beitrag für Gluon bis 2.5. Mit Gluon 2.6 haben sich wesentliche Änderungen ergeben, die hier eingearbeitet sind. Unwesentlichen Teilen sind noch Spuren von Gluon 2.3 anzusehen, z.B. in den unverändert gültigen Konsolen-Dumps.
Diese Anleitung gilt dementsprechend ab Gluon 2.6. Mit dieser Version sind die hier ausgewiesenen Modifikationen in der Netzwerkonfiguration erstmals updatefest!
Die Futros sind im Herbst 2022 zwar schon relativ alt, bieten aber dennoch eine preiswerte Möglichkeit für einen potenten, lautlosen Offloader mit großer Flexibilität. Nachteil ist der vergleichsweise große Stromverbrauch von gemessenen 15 Watt (inklusive Erweiterung einer Dual-NIC HP NC7170).
Der Futro S900 steht exemplarisch für die Futro-Baureihe oder auch jeden anderen x86-PC (oder auch Futro S550). Vom Prinzip her läßt sich diese Anleitung direkt auf andere Hardware-Plattformen übertragen.
Vorbereitung
Als „Handwerkszeug“ werden vorübergehend benötigt:
- ein Standard-PC mit Browser (zur Konfiguration das Futro im Config-Mode)
- ein Monitor mit DVI- oder Displayport-Anschluß (für die lokale Konsole des Futro)
- eine USB-Tastatur (für die lokale Konsole des Futro)
- ein USB-Stick mit aufgespieltem Live-Linux (für das „Flashen“ des Image auf dem Futro)
- alternativ ein USB-CDROM-Laufwerk mit Live-Linux CDROM
- ein zweiter USB-Stick mit dem FFS-Image „x86 Generic 64 Bit; Erstinstallation“
Welches Live-Linux verwendet wird, ist völlig egal. In den Beispielen fand Desinfec't vom Heise-Verlag Anwendung.
Benötigte Hardware
Generell bietet Ebay eine gute Auswahl an gebrauchter Hardware. Die angegebenen Geräte sind im Herbst 2022 dort zu den angegebenen Preisen gut erhältlich.
Der Futro S900 hat ein Netzwerkinterface (NIC; Netzwerkschnittstelle) auf dem Mainboard. Dazu kommen die Futros häufig mit einer mSATA-SSD von 2 GByte sowie 2 GByte RAM. Dieser Speicherausbau reicht dicke, ein Massenspeicher mit 250 MByte sowie 1 GByte RAM reichen vollkommen. Neben dem Futro wird ein zugehöriges Netzteil (19 Volt, 2 Ampere, Hohlstecker 5.5/2.1mm mit innen + und außen -) benötigt. Ein Ständer ist nützlich, aber kein Muß.
Dazu wird eine zweite NIC benötigt. Auf Ebay gibt es manchmal Futros mit bereits eingebauter zweiter NIC. Dann kann der Futro ohne Modifikation direkt als Offloader verwendet werden.
Wenn nicht bereits eine zweite NIC eingebaut ist, muß diese in den Erweiterungsslot des Futro eingebaut werden. Aber Achtung: es passt nur eine Karte mit Low Profile in den Futro! Wer Übung z.B. im Umgang mit einem Dremel hat, kann Full Profile Slotbleche auch recht problemlos nachträglich kürzen. PCI- und PCI-X-NICs mit dem benötigten Low Profile sind sehr rar! Wer vor der Anpassung der Slotbleche zurückschreckt, sollte einen Futro mit bereits eingebauter zweiter NIC aussuchen.
Um die PCI-Karte einzubauen, wird zudem eine PCI-Riser-Card benötigt. Da es diese links- und rechtsgewinkelt sowie auch sonst in unterschiedlichen mechanischen Maßen gibt, sollte man Riser-Cards besorgen, die passend für die Futros beworben werden.
Das führt zu folgender Stückliste:
- Futro S900: min. 256 MByte RAM, Massenspeicher >256 MByte. Dazu Netzteil und ggf. Ständer (ca. 15 bis 25 Euro)
- Ggf. zweite NIC: PCI oder PCI-X Single-NIC, z.B. mit Reaktek 8139D Chipsatz (ab 3 Euro), oder Intel Pro/100 (ab 5 Euro), oder Intel Pro/1000 XT (ab 10 Euro)
- Alternativ PCI-X Dual-NIC, z.B. HP NC7170 (ab 10 Euro)
- PCI Riser Card für Futro (ab 8 Euro)
Der Ein- und Zusammenbau sollte mit Ausnahme der Anpassung des Slotbleches für PC-Bastler kein Problem sein.
Installation
Vorbereitung USB-Stick mit FFS-Image
Zu Beginn das passende Gluon-Image von https://firmware.freifunk-stuttgart.de/ herunterladen. Dazu das x86 Generic 64Bit Image auswählen. Achtung: das Image für die Erstinstallation verwenden! Achtung! Ladet Gluon 2.6 oder höher herunter und verwendet dieses. Der folgende Text ist unter Gluon 2.3 entstanden, ansonsten aber unverändert anwendbar.
Das Image ist gz-komprimiert. Dieses Image mit einem geeigneten Programm entpacken (auf der Konsole mit gunzip, in grafischer Benutzeroberfläche mit beliebigem anderen Tool). Danach liegt das entpackte Image im Beispiel als gluon-ffs-2.3+2021-06-03-g.d9632c77-s.0ec0f66-x86-64.img vor. Diese Datei auf den zweiten USB-Stick kopieren.
Konfiguration des BIOS
Bevor der Futro mit Software bespielt wird, sollten ein paar Einstellungen im BIOS vorgenommen werden. Den Futro nun startklar machen mit USB-Tastatur und DVI- oder DP-Monitor. Dazu USB-Stick oder -CDROM mit Live-Linux anstecken. Achtung: ohne angesteckten USB-Stick oder -CDROM kann die Bootreihenfolge nicht passend eingestellt werden, weil diese Geräte im BIOS für die Bootreihenfolge nur in gestecktem Zustand angezeigt werden!
Nun Futro einschalten und die BIOS-Einstellungen mit <Entf> bzw. <Del> aufrufen. Danach BIOS nach Wunsch und Bedarf einstellen. Folgende Empfehlungen:
- Advanced / SATA Configuration / OnChip SATA-Type: „AHCI“ („AHCI“ ist Default)
- Security / User Password on Boot: „Disabled“ („On every Boot“ ist Default)
- Security / HDD Password on Boot: „Disabled“ („Enabled“ ist Default)
- Power / Power Failure Recovery: „Always On“ („Previous State“ ist Default) –> damit schaltet sich der Futro nach Ausfall der Stromversorgung wieder ein
- Boot / Quiet Boot: „Disabled“ („Enabled“ ist Default)
- Boot / POST Errors: „Enabled“ („Enabled“ ist Default)
- Boot / Boot error handling: „Continue“ („Pause and wait for key“ ist Standard) –> damit bootet der Futro auch ohne angeschlossene Tastatur
- Boot / Boot Option Priorities: <so einstellen, dass USB-Stick bzw. USB-CDROM an erster Stelle steht>
- Save & Exit / Save as User Defaults: <durchführen>
- Save & Exit / Save Changes & Exit: <durchführen>
Installation mit Live-Linux
Hinweis
Der hier angegebene Installationsweg ist verwendbar, egal ob zwei, drei oder noch mehr NICs im Futro installiert sind.
NICs testen und MACs zuordnen
Nun alle ggf. noch gesteckten LAN-Kabel entfernen und dann den Futro mit dem Live-Linux starten. Zu Beginn wird geprüft, welche NIC welche MAC-Adresse hat. Konsole des Live-Linux aufrufen und mit ip addr prüfen, dass alle NICs erkannt werden und welche MAC-Adressen diese haben:
desinfect@desinfect:~$ ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: enp1s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000 link/ether 90:1b:0e:04:66:e8 brd ff:ff:ff:ff:ff:ff 3: enp2s7f0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000 link/ether 00:11:0a:55:3c:fc brd ff:ff:ff:ff:ff:ff 4: enp2s7f1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000 link/ether 00:11:0a:55:3c:fd brd ff:ff:ff:ff:ff:ff desinfect@desinfect:~$
In dem o.g. Beispiel sind drei NICs zu sehen. Die MAC 90:1b:0e:04:66:e8 (enp1s0) gehört zur Onboard-NIC des Futro. Die zwei anderen (enp2s7f0 mit MAC 00:11:0a:55:3c:fc und enp2s7f1 mit MAC 00:11:0a:55:3c:fd) gehören zu einer Dual-NIC HP NC7170. Nun die erste NIC per LAN-Kabel mit dem LAN im häuslichen Routers verbinden und erneut ip addr eingeben:
desinfect@desinfect:~$ ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: enp1s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000 link/ether 90:1b:0e:04:66:e8 brd ff:ff:ff:ff:ff:ff 3: enp2s7f0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000 link/ether 00:11:0a:55:3c:fc brd ff:ff:ff:ff:ff:ff 4: enp2s7f1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 00:11:0a:55:3c:fd brd ff:ff:ff:ff:ff:ff inet 192.168.100.37/24 brd 192.168.100.255 scope global dynamic noprefixroute enp2s7f1 <--- ganz vorne die IP-Adresse valid_lft 3580sec preferred_lft 3580sec inet6 fe80::6db:732:992c:b7cb/64 scope link noprefixroute valid_lft forever preferred_lft forever desinfect@desinfect:~$
Die NIC-Schnittstelle enp2s7f1 hat die IP-Adresse 192.168.100.37 vom häuslichen Router erhalten, die NIC funktioniert. Nun die MAC für diese NIC notieren, ggf. auf das Gehäuse schreiben, abschließend das LAN-Kabel bei der ersten NIC entfernen.
Diese Schritte Stecken des LAN-Kabels und ip addr zur Bestimmung der MACs und Zuordnung zu den Buchsen für alle anderen NICs wiederholen, die Schnittstellen auf Funktion testen und die jeweilige MAC notieren.
Der Erfahrung nach wird später bei der Installation von Gluon bei drei NICs folgende Zuordnung vorgenommen:
- eth0: <niedrigste MAC> –> LAN-Anschluß, wird als Client konfiguriert
- eth1: <nächst höhere MAC> –> WAN-Anschluß
- eth2: <höchste MAC> –> in der Standardkonfiguration ohne Verwendung
Massenspeicher zuordnen
Nun noch prüfen, unter welchem Device-Namen der Massenspeicher im Futro ansprechbar ist, meist /dev/sda . Dazu in der Konsole sudo fdisk /dev/sda aufrufen:
desinfect@desinfect:~$ sudo fdisk /dev/sda Willkommen bei fdisk (util-linux 2.34). Änderungen werden vorerst nur im Speicher vorgenommen, bis Sie sich entscheiden, sie zu schreiben. Seien Sie vorsichtig, bevor Sie den Schreibbefehl anwenden. Befehl (m für Hilfe): p Festplatte /dev/sda: 1,87 GiB, 1987051520 Bytes, 3880960 Sektoren <--- Größe des Massenspeichers Festplattenmodell: InnoDisk Corp. D <--- Typ des Massenspeichers Einheiten: Sektoren von 1 * 512 = 512 Bytes Sektorgröße (logisch/physikalisch): 512 Bytes / 512 Bytes E/A-Größe (minimal/optimal): 512 Bytes / 512 Bytes Festplattenbezeichnungstyp: dos Festplattenbezeichner: 0xf721aeb1 Gerät Boot Anfang Ende Sektoren Größe Kn Typ /dev/sda1 * 512 33279 32768 16M 83 Linux /dev/sda2 33792 246783 212992 104M 83 Linux Befehl (m für Hilfe): q desinfect@desinfect:~$
Im Futro aus dem Beispiel ist eine InnoDisk mit 2 GByte eingebaut, die hier tatsächlich unter /dev/sda zu erreichen ist, was „zu beweisen“ war.
Image mit dd schreiben
Nun den Stick mit der Image-Datei gluon-ffs-2.3+2021-06-03-g.d9632c77-s.0ec0f66-x86-64.img zusätzlich an den Futro anstecken. Anschließend eine Linux-Konsole öffnen und mit cd in das Verzeichnis wechseln, wo die Image-Datei liegt. Mit ls -l nachschauen, dass die Datei tatsächlich dort liegt:
desinfect@desinfect:/media/desinfect/INTENSO/Freifunk/Gluon$ ls -l insgesamt 252064 -rw-r--r-- 1 desinfect desinfect 5373956 Apr 18 2021 gluon-ffs-2.1+2020-12-11-g.90d0e33c-s.de75272-ubiquiti-unifi-ac-mesh-sysupgrade.bin -rw-r--r-- 1 desinfect desinfect 126353408 Apr 9 07:25 gluon-ffs-2.3+2021-06-03-g.d9632c77-s.0ec0f66-x86-64.img -rw-r--r-- 1 desinfect desinfect 126353408 Apr 8 16:53 gluon-ffs-2.4+2022-02-26-g.75bd58bc-s.fc98d5f-x86-64.img desinfect@desinfect:/media/desinfect/INTENSO/Freifunk/Gluon$
Im obigen Beispiel sind neben dem gewünschten Image zwei weitere Images vorhanden. Dann mit sudo dd das Image nach /dev/sda (bzw. auf den oben identifizierten) Massenspeicher schreiben und anschließend mit sync die Datenträger synchronisieren:
desinfect@desinfect:/media/desinfect/INTENSO/Freifunk/Gluon$ sudo dd status=progress bs=5M if=gluon-ffs-2.3+2021-06-03-g.d9632c77-s.0ec0f66-x86-64.img of=/dev/sda 115343360 Bytes (115 MB, 110 MiB) kopiert, 6 s, 19,1 MB/s 24+1 Datensätze ein 24+1 Datensätze aus 126353408 Bytes (126 MB, 120 MiB) kopiert, 9,24782 s, 13,7 MB/s desinfect@desinfect:/media/desinfect/INTENSO/Freifunk/Gluon$ sync desinfect@desinfect:/media/desinfect/INTENSO/Freifunk/Gluon$
Das Live-Linux nun herunterfahren und anschließend die beiden USB-Sticks entfernen. Damit ist der Futro mit der Freifunk-Firmware fertig „betankt“.
Alternative: Betanken des Massenspeichers ohne Live-Linux
Der Massenspeicher kann alternativ auch ohne Live-Linux betankt werden, wenn der Massenspeicher ausgebaut wird und z.B. über einen USB-Adapter an ein Linux-System angesteckt wird. Auch über diese Weise kann das heruntergeladene Gluon-Image (analog zu oben mit dem Live-Linux auf dem Futro) mit dd auf den Massenspeicher geschrieben werden. Nach Ende des Schreibens den Massenspeicher abstecken und wieder in den Futro einbauen.
Im Configmodus starten
Nun folgende Schritte durchführen:
- Den Futro mit entfernten USB-Sticks und entferntem LAN-Kabeln, aber gesteckter USB-Tastatur und gestecktem Monitor starten. Der Futro bootet nun mit dem Freifunk-Image. Auf dem Monitor tauchen die Kernelmeldungen auf. Nach ca. 15 Sekunden ist das Image komplett gestartet und es tauchen keine neuen Kernelmeldungen mehr auf.
- Einmal die <Enter> Taste drücken, es taucht die OpenWRT-Konsole auf. Hier kann man später beliebig „spielen“.
- Den Standard-PC ohne gestecktes LAN-Kabel starten. Die im PC eingebaute NIC in den DHCP-Modus bringen.
- Konsole im PC öffnen und schauen, dass die die NIC keine IP-Adresse zugewiesen bekommen hat. Das geht in Windows mit ipconfig, in Linux mit ip addr.
- Nun den PC per LAN-Kabel mit der NIC des Futro mit der niedrigsten NIC verbinden. Auf der Konsole des Futro taucht eine Kernel-Meldung auf, dass „eth0 NIC Link is Up…“
- Einen Moment später am Standard-PC erneut prüfen, ob der NIC im PC nun eine IP-Adresse aus dem Bereich 192.168.1.0/24 zugewiesen wurde. Dazu erneut in Windows ipconfig bzw. in Linux ip addr eingeben.
- Nun den Browser des PC starten und http://192.168.1.1/ aufrufen und den Futro im Config-Mode konfigurieren.
- Zum Schluß die Konfiguration abspeichern und den Futro neu starten.
Test
Nach Neustart ist der Futro einsatzbereit:
- die NIC mit der niedrigsten MAC-Adresse (eth0) ist die LAN-Schnittstelle. Über diese wurde per Configmode der Futro auch konfiguriert. Diese je nach Konfiguration nun für ein Client- oder Mesh-Netzwerk einsetzen und mit den weiteren Nodes verbinden.
- die NIC mit der zweitniedrigsten MAC-Adresse (eth1) ist die WAN-Schnittstelle. Diese Schnittstelle z.B. mit dem Heimrouter mit Internetzugang verbinden.
Nach einigen Minuten sollte der Futro einsatzbereit sein und z.B. über https://map.freifunk-stuttgart.de/ auf der Karte lokalisieren.
Besonderheiten bei dritter NIC
Eine dritte und alle weiteren NICs sind unter Gluon im Standard funktionslos. Bis Gluon 2.5 waren manuell durchgeführte Modifikationen in der Netzwerkonfiguration (z.B. für eine dritte Netzwerkkarte) nicht garantiert updatefest. Das hat sich ab Gluon 2.6 geändert: die Änderungen sind updatefest, wenn die richtigen Konfigurationsdateien geändert werden. Achtung: nicht die Datei /etc/config/network direkt manuell ändern!
Mit ein klein wenig Mehraufwand kann man eine dritte NIC in die Konfiguration integrieren und sowohl Client- als auch Mesh-Netzwerk d.h. parallel aus dem Futro herausführen. Die dafür nötigen manuellen Eingriffe werden im Weiteren dargestellt, so dass die dritte NIC (eth2) für Mesh-Netzwerk genutzt wird, während dem Default entsprechend die erste NIC (eth0) für Client-Netzwerk genutzt wird.
Für die Dateibearbeitungen verwenden wir die lokale Konsole des Futro und den integrierten Editor VI. Dieser Editor ist gewöhnungsbedürftig, aber sehr mächtig. Eine Kurzbeschreibung findet sich z.B. hier: https://www.cs.colostate.edu/helpdocs/vi.html
Für die Bearbeitung auf der lokalen Konsole ist zudem zu beachten, dass als Default-Keyboard-Layout eine US-Tastatur eingestellt ist. Bitte z.B. hier nachlesen, wie die Tastenbelegung ist: https://en.wikipedia.org/wiki/QWERTY
Manuelle Eingriffe für die dritte NIC als Mesh
Futro starten. Entweder über SSH oder lokal auf der Konsole des Futro einloggen. Nun folgende Befehle eingeben:
root@71522-aspacher-strasse-70-uplink-neu:~# root@71522-aspacher-strasse-70-uplink-neu:~# uci set gluon.iface_lan_mesh=interface root@71522-aspacher-strasse-70-uplink-neu:~# uci set gluon.iface_lan_mesh.name='eth2' root@71522-aspacher-strasse-70-uplink-neu:~# uci add_list gluon.iface_lan_mesh.role='mesh' root@71522-aspacher-strasse-70-uplink-neu:~# uci commit gluon root@71522-aspacher-strasse-70-uplink-neu:~# gluon-reconfigure Configuring: 001-reset-uci cfg030f15 cfg01e48a Configuring: 002-migrate-system Configuring: 005-set-domain Configuring: 005-wireless-migration Configuring: 010-primary-mac Configuring: 020-interfaces Configuring: 021-interface-roles Configuring: 030-system Configuring: 100-lock-password Configuring: 110-network Configuring: 115-swconfig Configuring: 120-ntp-servers Configuring: 150-poe-passthrough Configuring: 180-outdoors Configuring: 190-preserve-wireless-channels Configuring: 200-wireless Configuring: 210-interface-mesh Configuring: 300-firewall-rules Configuring: 300-gluon-client-bridge-network Configuring: 300-setup-mode Configuring: 310-gluon-client-bridge-local-node Configuring: 310-gluon-mesh-batman-adv-mesh Configuring: 320-gluon-client-bridge-wireless Configuring: 320-gluon-mesh-batman-adv-client-bridge Configuring: 320-setup-ifname Configuring: 325-gluon-private-wifi Configuring: 330-gluon-mesh-batman-adv-mac-addresses Configuring: 400-mesh-vpn-fastd Configuring: 400-neighbour-info-firewall Configuring: 400-respondd-firewall Configuring: 500-autoupdater Configuring: 500-mesh-vpn Configuring: 500-node-info-system Configuring: 500-opkg Configuring: 500-ssid-changer Configuring: 500-status-page Configuring: 510-node-info-role Configuring: 820-dns-config Configuring: 997-migrate-preserved Configuring: 998-commit Configuring: 999-version root@71522-aspacher-strasse-70-uplink-neu:~#
Der Befehl gluon-reconfigure schreibt dabei (auch) die /etc/config/network neu. (Dies passiert auch beim Upgrade auf eine neue Gluon-Version.) Dadurch ist der Futro auch erst einen Moment offline und muß sich erneut mit den Gateways verbinden.
Nun erneutes Verbinden mit den Gateways prüfen:
root@71522-obere-bahnhofstr-26-uplink:~# batctl gwl [B.A.T.M.A.N. adv 2022.0-openwrt-5, MainIF/MAC: primary0/8a:b8:94:22:66:0b (bat0/00:11:0a:63:1a:3a BATMAN_IV)] Router ( TQ) Next Hop [outgoingIf] Bandwidth 02:00:35:11:01:03 (225) 02:00:33:11:04:03 [ mesh-vpn]: 96.0/96.0 MBit * 02:00:35:11:04:03 (255) 02:00:33:11:04:03 [ mesh-vpn]: 64.0/64.0 MBit 02:00:35:11:09:03 (225) 02:00:33:11:04:03 [ mesh-vpn]: 64.0/64.0 MBit 02:00:35:11:05:03 (225) 02:00:33:11:04:03 [ mesh-vpn]: 64.0/64.0 MBit root@71522-obere-bahnhofstr-26-uplink:~#
Mesh-VPN ist mit einem Gateway verbunden.
brctl show muss die entsprechenden Interfaces in br-wan und br-client haben:
root@71522-obere-bahnhofstr-26-uplink:~# brctl show bridge name bridge id STP enabled interfaces br-client 7fff.00110a631a3a no eth0 bat0 local-port br-wan 7fff.8ab894226608 no eth1 root@71522-obere-bahnhofstr-26-uplink:~#
Nun mit batctl if prüfen, ob das entsprechende Interface für Mesh (im Beispiel eth2) enthalten ist. Achtung: Das Interface taucht nur auf, das Interface auch einen Link hat, also tatsächlich oder virtuell eingestöpselt ist. Beispiel:
root@71522-obere-bahnhofstr-26-uplink:~# batctl if eth2: active primary0: active mesh-vpn: active root@71522-obere-bahnhofstr-26-uplink:~#
Abschließend den Futro mit der gesamten Konfiguration testen:
- eth0: Client-Netzwerk
- eth1: WAN (Uplink)
- eth2: Mesh-on-LAN-Netzwerk