- Dockerfile 87.5%
- Shell 12.5%
| ax25ip.cfg.example | ||
| docker-compose.yml | ||
| Dockerfile | ||
| init-data.sh | ||
| init.bcm.example | ||
| README.md | ||
| tnn.ini.example | ||
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.