Docker Stack für openBCM 2.x mit AXUDP (TheNetNode-CB) – Portainer-kompatibel
  • Dockerfile 87.5%
  • Shell 12.5%
Find a file
2026-03-27 11:46:19 +00:00
ax25ip.cfg.example Initial commit: openBCM Docker Stack mit AXUDP/TNN-CB 2026-03-27 11:46:19 +00:00
docker-compose.yml Initial commit: openBCM Docker Stack mit AXUDP/TNN-CB 2026-03-27 11:46:19 +00:00
Dockerfile Initial commit: openBCM Docker Stack mit AXUDP/TNN-CB 2026-03-27 11:46:19 +00:00
init-data.sh Initial commit: openBCM Docker Stack mit AXUDP/TNN-CB 2026-03-27 11:46:19 +00:00
init.bcm.example Initial commit: openBCM Docker Stack mit AXUDP/TNN-CB 2026-03-27 11:46:19 +00:00
README.md Initial commit: openBCM Docker Stack mit AXUDP/TNN-CB 2026-03-27 11:46:19 +00:00
tnn.ini.example Initial commit: openBCM Docker Stack mit AXUDP/TNN-CB 2026-03-27 11:46:19 +00:00

openBCM Docker Setup

Dockerisierung von ppfeiffer/openBCM (v2.x, Linux-only).

Voraussetzungen

  • Docker >= 20.x
  • Docker Compose >= 2.x
  • Internetzugang beim Build (klont das Repo, lädt style.css)

Schnellstart

docker compose up -d --build
docker compose logs -f

Erster Start

Beim ersten Start legt BCM automatisch die benötigten Dateien und Verzeichnisse im Volume (/bcm/data) an. Danach init.bcm konfigurieren und neu starten:

docker compose exec openbcm bash
vi /bcm/data/init.bcm
# -> exit
docker compose restart openbcm

Ports

Port Dienst Aktiv
4719 Telnet
8080 HTTP
9300/udp AXUDP RX
4721 SMTP auskommentiert
4722 POP3 auskommentiert
4723 NNTP auskommentiert
4724 FTP auskommentiert

Persistente Daten / Backup

docker run --rm -v openbcm_data:/data -v $(pwd):/backup \
  debian:bookworm-slim tar czf /backup/openbcm-backup-$(date +%Y%m%d).tar.gz /data

AXUDP mit TheNetNode-CB (DeltaLima/TheNetNode-CB)

openBCM und TNN sprechen AXUDP nativ kein Kernel-AX.25, kein ax25ipd, kein socat, keine speziellen Capabilities nötig.

Wie TNN-CB AXUDP konfiguriert (aus dem Quellcode)

TNN-CB konfiguriert seinen AX25IP-Port über zwei Textdateien:

Datei Inhalt
tnn.ini Ports/Devices: welches Device hat welchen kisstype
tnn179.pas Node-Parameter: Rufzeichen, Passwörter, Pfade
ax25ip.cfg Routing-Tabelle und UDP-Socket-Einstellungen für AX25IP

Der Default-UDP-Port in TNN-CB ist 10093 (hardcoded in ax25ip.h).

Datenfluss

                    UDP <TNN-localport> (TNN lauscht hier)
  ┌──────────────────────────────────────────────────────┐
  │  TheNetNode-CB                                       │
  │  tnn.ini:     device ax25ip / kisstype 8             │
  │  ax25ip.cfg:  socket udp <localport>                 │
  │               route DL0XYZ-8 <Docker-Host-IP> udp <remoteport> │
  └─────────────────┬────────────────────────────────────┘
                    │  AXUDP
                    ▼  UDP <rxport> (openBCM lauscht hier)
  ┌──────────────────────────────────────────────────────┐
  │  openBCM (Docker-Container)                          │
  │  init.bcm: l1axip <TNN-IP> rxport=9300 txport=9301  │
  └──────────────────────────────────────────────────────┘

1. openBCM init.bcm

; TNN auf dem gleichen Docker-Host:
l1axip    host.docker.internal rxport=9300 txport=9301

; TNN auf einem anderen Rechner im LAN:
; l1axip  192.168.1.50 rxport=9300 txport=9301

Bedeutung:

  • rxport=9300 openBCM öffnet UDP/9300 zum Empfangen (TNN sendet hierhin)
  • txport=9301 openBCM sendet an Port 9301 der Gegenstelle (TNN lauscht dort)

2. TNN-CB tnn.ini (Device-Eintrag)

Der AX25IP-Port wird als eigenes Device mit kisstype 8 eingetragen. Pro TNN-Instanz ist nur ein AX25IP-Device möglich.

# Normales KISS/SMACK-TNC (Beispiel)
device /dev/ttyS0
tnn_lockfile /var/lock/LCK..ttyS0
speed 9600
kisstype 1
port 0

# AX25IP-Device für openBCM
# Das "Device" heißt fix "ax25ip", die Geschwindigkeit ist irrelevant
device ax25ip
speed 0
kisstype 8
port 1

3. TNN-CB ax25ip.cfg (UDP + Routing)

Die Datei liegt im TNN-Arbeitsverzeichnis (Standard: /usr/local/tnn/).

# UDP-Socket aktivieren, TNN lauscht auf diesem Port
# Das ist der txport von openBCM (9301)
socket udp 9301

# Loglevel: 0=kein, 2=Events+Fehler, 4=alles
loglevel 2

# Route zur openBCM-Mailbox:
# Syntax: route <call> <ip-oder-hostname> udp [udp-zielport]
# Der udp-Zielport = rxport von openBCM (9300)
route DL0XYZ-8 192.168.1.100 udp 9300

# Broadcast-Routen (NODES/FBB) ebenfalls zur openBCM schicken:
# route FBB-0   192.168.1.100 udp 9300
# route NODES-0 192.168.1.100 udp 9300

Wenn TNN und Docker auf demselben Host laufen:

socket udp 9301
loglevel 2
route DL0XYZ-8 127.0.0.1 udp 9300

4. tnn179.pas Rufzeichen und Passwörter

Die Datei ist positionsabhängig Reihenfolge nicht ändern, keine Zeilen löschen:

; NET/ROM-Sysop-Passwort (80 Zeichen)
DEIN_SYSOP_PASSWORT_80ZEICHEN_PADDED_AUF_80_MIT_LEERZEICHEN_ODER_ZAHLEN
;
; Console-Passwort
KonsolenPasswort
;
; Node-Ident (kurz, max 6 Zeichen)
DRESDE
;
; Node-Rufzeichen
DL0XYZ-0
;
; Arbeitsverzeichnis (Pfad mit abschliessendem /)
/usr/local/tnn/
;
; Pfad textcmd/
/usr/local/tnn/textcmd/
;
; Pfad userexe/
/usr/local/tnn/userexe/
;
; Pfad sysexe/
/usr/local/tnn/sysexe/
;
; Pfad pacsat/
/usr/local/tnn/pacsat/

5. Port-Zuordnung Übersicht

Parameter Wert Bedeutung
openBCM rxport 9300 openBCM lauscht, TNN sendet hierhin
openBCM txport 9301 openBCM sendet hierhin, TNN lauscht
TNN socket udp 9301 TNN lauscht (= openBCM txport)
TNN route ... udp 9300 TNN sendet hierhin (= openBCM rxport)

6. Testen

openBCM-Startlog:

docker compose logs | grep l1axip
# Erwartet:
# l1axip: <IP> rxport=9300 txport=9301
# l1axip: initialised to channel 0

UDP-Traffic mitschneiden:

sudo tcpdump -n -i any udp port 9300 or udp port 9301

Aus TNN verbinden:

C DL0XYZ-8

Neubauen nach Repo-Update

docker compose build --no-cache
docker compose up -d

Architektur-Hinweis

Das Binary wird als 32-Bit-x86 kompiliert. Der Container benötigt daher libc6-i386 und libcrypt1:i386. ARM-Builds (Raspberry Pi) sind möglich die Cross-Compile-Zeilen aus dem Upstream-README in den Dockerfile übernehmen.