Inhaltsverzeichnis

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:

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:

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:

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:

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:

Test

Nach Neustart ist der Futro einsatzbereit:

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: