Yanic installieren. Wie?

Ich wollte unsere Knotenkarte mal modernisieren, und dafür von ffmap-backend auf yanic umsteigen. Ich habe versucht der Anleitung zu folgen,
aber entweder bin ich zu blöd Yanic zu installieren, oder die Anleitung ist falsch.

go install github.com/FreifunkBremen/yanic@latest

endet mit

go: downloading github.com/aymerick/douceur v0.2.0
go: downloading github.com/vmihailenco/tagparser/v2 v2.0.0
go: downloading github.com/CloudyKit/fastprinter v0.0.0-20200109182630-33d98a066a53
go: downloading github.com/sirupsen/logrus v1.9.3
go: downloading github.com/russross/blackfriday/v2 v2.1.0
go: downloading github.com/josharian/intern v1.0.0
go: downloading github.com/gorilla/css v1.0.0
# github.com/kataras/iris/v12/context
/root/go/pkg/mod/github.com/kataras/iris/v12@v12.2.6-0.20230908161203-24ba4e8933b9/context/context.go:4185:29: undefined: unsafe.StringData
note: module requires Go 1.20

Nun weiß ich nicht ob das nur eine Info oder ein Fehler ist. Ich habe noch nie zuvor irgendwas mit go gemacht.

als nächstes scheitere ich an cp /opt/go/src/github.com/FreifunkBremen/yanic/config_example.toml /etc/yanic.conf da es in /opt/go/ gar kein src gibt.
Ich habe die Ordner dann selbst angelegt und ein git clone da rein gemacht.

Danach scheitere ich aber daran das in der /opt/hopglass/server/hopglass-server@.service ein Pfad zu /opt/go/bin angeben ist, aber es gibt dort kein bin. Da liegt nur ein pkg Verzeichnis.

1 „Gefällt mir“

Du hast Glück:

Seit der vor ein paar Tagen erschienen 1.6.2 kannst du dir auch einfach eine fertige gebaute executable für x86-64 von GitHub herunterladen: Release v1.6.2 · FreifunkBremen/yanic · GitHub

Ansonsten ist yanic auch in nixpkgs paketiert. Ich vermute das hilft dir aber weniger :sweat_smile: :see_no_evil:

Beim selber bauen sieht das für mich nach falscher go version aus. Ggf. musst du da noch irgendwie eine passende installieren oder mit Ungebungsvariablen setzten welche du nutzen willst oder dergleichen. Aber so genau weiß ich es auch gerade nicht.

4 „Gefällt mir“

Das x86-64 bin hat mein Installations Problem gelöst.
Wenn es jetzt noch möglich wäre irgendwie nach Domäne zu filtern bin ich glücklich. Ich habe nur eine Option zum filtern nach site gefunden.

Es gibt im Output Context eine domain_as_site (boolean) Option. Wie genau du das dann machen würdest weiß ich gerade auch nicht auswendig. Am besten experimentierst du einfach etwas rum und wenn du nicht weiter kommst wäre eine möglichst ausführliche Beschreibung des Problems sicherlich hilfreich.


Nur als Nebenbemerkung:

Du kannst im übrigen bei den Outputs auch mehrere des gleichen Typs mit unterschiedlichen Filtern anlegen:

https://gist.github.com/herbetom/f8eae6fde7a00c59f4333b49c189c784

Damit scheint es zu funktionieren. Aber insgesamt eine unverständliche Konfiguration. Schade das es keine richtige Doku dazu gibt.

Diese Konfiguration scheint soweit zu funktionieren.

[[nodes.output.meshviewer]]
enable = true
version = 2
nodes_path = "/var/www/vhosts/meshviewer.pinneberg.freifunk.net/data/nodes.json"
graph_path = "/var/www/vhosts/meshviewer.pinneberg.freifunk.net/data/graph.json"
no_owner = false
domains = ["ffpi_ibss", "ffpi_80211s", "ffpi"]

[nodes.output.meshviewer.filter]
# Filtern nach den spezifischen Domains
domain_append_site = true
sites = ["ffpi.ffpi_ibss", "ffpi.ffpi_80211s", ".ffpi"]

Das interesante/merkwürdige. Lasse ich domains = ["ffpi_ibss", "ffpi_80211s", "ffpi"] weg, wird gar nichts ausgegeben. Lasse ich statdessen den Filter weg werden auch Domains ausgegeben die nicht mit in der Liste stehen.
Für die Gateways die keine Domain haben, musste ich das ffpi mit einem vorangestellten Punkt angeben.

Schön wäre noch wenn es eine Möglichkeit gäbe Knoten die lange offline sind ganz auszublenden, ohne deren Historie zu löschen.

Und ich vermisse im Meshviewer die Airtime. Hatte ich schon öfters bei anderen Communities gesehen, konnte die angaben hier aber nicht in den json Daten finden.

Im gesamten sieht meine config bisher so aus.

# outputs all nodes as points into nodes.geojson
[[nodes.output.geojson]]
enable   = true
path = "/var/www/vhosts/meshviewer.pinneberg.freifunk.net/data.global/nodes.geojson"

# definition for the new more compressed meshviewer.json
[[nodes.output.meshviewer-ffrgb]]
enable   = true
path = "/var/www/vhosts/meshviewer.pinneberg.freifunk.net/data.global/meshviewer.json"

# definition for nodes.json
[[nodes.output.meshviewer]]
enable = true
# The structure version of the output which should be generated (i.e. nodes.json)
# version 1 is accepted by the legacy meshviewer (which is the master branch)
#   i.e. https://github.com/ffnord/meshviewer/tree/master
# version 2 is accepted by the new versions of meshviewer (which are in the legacy develop branch or newer)
#   i.e. https://github.com/ffnord/meshviewer/tree/dev
#        https://github.com/ffrgb/meshviewer/tree/develop
version    = 2
# path where to store nodes.json
nodes_path = "/var/www/vhosts/meshviewer.pinneberg.freifunk.net/data.global/nodes.json"
# path where to store graph.json
graph_path = "/var/www/vhosts/meshviewer.pinneberg.freifunk.net/data.global/graph.json"

no_owner = false

# definition for nodelist.json
[[nodes.output.nodelist]]
enable   = true
path = "/var/www/vhosts/meshviewer.pinneberg.freifunk.net/data.global/nodelist.json"

# definition for prometheus-sd.json
[[nodes.output.prometheus-sd]]
enable  = true
path    = "/var/www/vhosts/meshviewer.pinneberg.freifunk.net/data.global/prometheus-sd.json"
# ip = lates recieved ip, node_id = node id from host
target_address = "ip"


# definition for raw.json
[[nodes.output.raw]]
enable   = true
path = "/var/www/vhosts/meshviewer.pinneberg.freifunk.net/data.global/raw.json"


################
# PINNEBERG
# ##############
[[nodes.output.meshviewer]]
enable = true
version = 2
nodes_path = "/var/www/vhosts/meshviewer.pinneberg.freifunk.net/data/nodes.json"
graph_path = "/var/www/vhosts/meshviewer.pinneberg.freifunk.net/data/graph.json"
no_owner = false
domains = ["ffpi_ibss", "ffpi_80211s", "ffpi"]

[nodes.output.meshviewer.filter]
# Filtern nach den spezifischen Domains
domain_append_site = true
sites = ["ffpi.ffpi_ibss", "ffpi.ffpi_80211s", ".ffpi"]


[[nodes.output.meshviewer-ffrgb]]
enable = true
no_owner = false
path = "/var/www/vhosts/meshviewer.pinneberg.freifunk.net/data/meshviewer.json"
domains = ["ffpi_ibss", "ffpi_80211s", "ffpi"]

[nodes.output.meshviewer-ffrgb.filter]
# Filtern nach den spezifischen Domains
domain_append_site = true
sites = ["ffpi.ffpi_ibss", "ffpi.ffpi_80211s", ".ffpi"]


[[nodes.output.geojson]]
enable = true
path = "/var/www/vhosts/meshviewer.pinneberg.freifunk.net/data/nodes.geojson"
domains = ["ffpi_ibss", "ffpi_80211s", "ffpi"]

[nodes.output.geojson.filter]
# Filtern nach den spezifischen Domains
domain_append_site = true
sites = ["ffpi.ffpi_ibss", "ffpi.ffpi_80211s", ".ffpi"]


# definition for nodelist.json
[[nodes.output.nodelist]]
enable   = true
path = "/var/www/vhosts/meshviewer.pinneberg.freifunk.net/data/nodelist.json"
domains = ["ffpi_ibss", "ffpi_80211s", "ffpi"]

[nodes.output.nodelist.filter]
domain_append_site = true
sites = ["ffpi.ffpi_ibss", "ffpi.ffpi_80211s", ".ffpi"]


[[nodes.output.raw]]
enable = true
path = "/var/www/vhosts/meshviewer.pinneberg.freifunk.net/data/raw.json"
domains = ["ffpi_ibss", "ffpi_80211s", "ffpi"]

[nodes.output.raw.filter]
# Filtern nach den spezifischen Domains
domain_append_site = true
sites = ["ffpi.ffpi_ibss", "ffpi.ffpi_80211s", ".ffpi"]


###############
# HELGOLAND
###############
[[nodes.output.meshviewer]]
enable = true
version = 2
nodes_path = "/var/www/vhosts/meshviewer.helgoland.freifunk.net/data/nodes.json"
graph_path = "/var/www/vhosts/meshviewer.helgoland.freifunk.net/data/graph.json"
no_owner = false

[nodes.output.meshviewer.filter]
domain_append_site = true
sites = ["ffpi.helgoland", "ffpi.helgoland_old", ".ffpi"]


[[nodes.output.meshviewer-ffrgb]]
enable = true
no_owner = false
path = "/var/www/vhosts/meshviewer.helgoland.freifunk.net/data/meshviewer.json"

[nodes.output.meshviewer-ffrgb.filter]
# Filtern nach den spezifischen Domains
domain_append_site = true
sites = ["ffpi.helgoland", "ffpi.helgoland_old", ".ffpi"]


[[nodes.output.geojson]]
enable = true
path = "/var/www/vhosts/meshviewer.helgoland.freifunk.net/data/nodes.geojson"

[nodes.output.geojson.filter]
domain_append_site = true
sites = ["ffpi.helgoland", "ffpi.helgoland_old", ".ffpi"]


[[nodes.output.nodelist]]
enable   = true
path = "/var/www/vhosts/meshviewer.helgoland.freifunk.net/data/nodelist.json"

[nodes.output.nodelist.filter]
domain_append_site = true
sites = ["ffpi.helgoland", "ffpi.helgoland_old", ".ffpi"]


[[nodes.output.raw]]
enable = true
path = "/var/www/vhosts/meshviewer.helgoland.freifunk.net/data/raw.json"

[nodes.output.raw.filter]
domain_append_site = true
sites = ["ffpi.helgoland", "ffpi.helgoland_old", ".ffpi"]

Airtime braucht das respondd-module-airtime Package in der Firmware: packages/net/respondd-module-airtime at main · freifunk-gluon/packages · GitHub.

Sofern die gluon Version neu genug ist einfach das folgende in die image-customization.lua in der site einfügen:

packages({'respondd-module-airtime'})

Falls das was älteres ist über die site.mk hinzufügen.

ein paar wenige Knoten gibt es bereits in freier Wildbahn die das Paket installiert haben. z.b. dieser.
https://2.meshviewer.pinneberg.freifunk.net/#!/de/map/6466b32f1a40