Skip to content

linbpq

BPQ32 packet-radio node, BBS and Winlink gateway

What it does

Runs a packet-radio node: a switch that relays AX.25 traffic between RF ports and the internet, with an integrated BBS, a Winlink RMS gateway, chat, and APRS support. It is the software behind a large share of the packet nodes still on the air.

Why you would want it

If you want to operate infrastructure rather than just use it — host a BBS, provide a Winlink gateway for your area, or link a local packet network to the wider one — this is the standard implementation. It has no real alternative on Linux.

Before it will work

A configured AX.25 stack, a TNC or soundmodem such as Direwolf or QtSoundModem, and a callsign in /etc/bpq32.cfg. Running a Winlink gateway additionally requires registration with the Winlink system.

How it installs

  • git (make) — https://github.com/g8bpq/LinBPQ at 25.40
  • build dependencies: build-essential, libpaho-mqtt-dev, libjansson-dev, libminiupnpc-dev, libconfig-dev, libpcap-dev, zlib1g-dev, libi2c-dev
  • the project's build system has no install rule; the binaries listed below are copied into the prefix instead
  • Dependency list derived from the LIBS line of upstream's makefile (-lpaho-mqtt3a -ljansson -lminiupnpc -lm -lz -lpthread -lconfig -lpcap) and verified present on Debian 13 by querying the target container, not by guessing package names. Upstream supports make noi2c to drop the I2C dependency on hardware without it. Re-pinned 25.39 -> 25.40 on 2026-09-13 (#95): the tag built clean on the field laptop with the makefile patch above, and the resulting binary still prints "Version 6.0.25.39" -- upstream's version string lags its tag by one, so a binary_version probe would read wrong here and the tag is the pin.

Binaries this produces:

  • linbpq

What it changes on your machine

  • group_membership — LinBPQ needs serial and audio access for TNCs and soundmodems
  • adds the operating user to the dialout group
  • undo: gpasswd -d dialout
  • file_capability — Optional privileges for LinBPQ Ethernet and tun ports
  • These file capabilities are not needed for AX.25 over KISS or the default web port. Hammunition applies them only after the separate typed consent gate; --yes cannot answer it.
  • undo: sudo setcap -r /usr/local/bin/linbpq

Configuration it writes

  • /etc/bpq32.cfg (written, mode 0644, existing file backed up); filled from the station values callsign, grid_square, node_alias, and not written while one is unset (D-035)

Known problems

Unaffected by Linux 7.1's removal of the kernel AX.25 stack: it carries its own AX.25 implementation and drives Direwolf over KISS or AGW, so no AF_AX25 socket is involved. See docs/reference/kernel-ax25.md. Upstream publishes prebuilt binaries in a directory named Beta with no versioning or checksums; we ignore those and build from a tagged source revision instead. The generated configuration is a minimum viable node and is meant to be edited — read it before transmitting. The build does not grant the binary any capabilities: upstream's makefile would run sudo setcap inside the build, and the engine removes that line (#96). A node on AX.25 over KISS with the web interface on 8008 needs none of them. For BPQ Ethernet or tun ports, or to bind below 1024, approve the typed capability prompt or set HAMMUNITION_ACCEPT_CAPABILITIES_LINBPQ to the exact grant printed in the plan (for example, CAP_NET_ADMIN=ep CAP_NET_RAW=ep CAP_NET_BIND_SERVICE=ep). --yes cannot answer the prompt. A declined grant skips only setcap; the rest installs and the binary remains unprivileged. An accepted grant is cleared by uninstall before the binary is removed.

Keeping it current

  • probe: github tags (g8bpq/LinBPQ)
  • strategy: rebuild
  • Upstream tags frequently and cuts no GitHub releases — 25.39, 25.36, 25.35 within one year. Tag selection is a stability judgement, not "take latest".

Where to get help with the software itself

BPQ32 support group at groups.io/g/BPQ32

Source: catalog/packages/linbpq.yaml