Profile: packet¶
AX.25, APRS, Winlink and the EMCOMM stack
Stage: 1.0
Who it is for¶
An operator who wants Winlink email by radio, APRS, packet BBS or node work, or EMCOMM readiness without the internet.
At a glance¶
| Stage | 1.0 |
| Units | 24 |
| Disk | about 500 MB, plus 220 MB for FreeDATA's venv |
| Hardware | A VHF or HF transceiver with an audio path to the computer for the soundcard TNC route, or a hardware TNC. APRS-IS and Pat's telnet mode work with no radio, which is the right way to test first. |
| Consent | none |
| Install | hammunition install packet |
What it installs¶
Two soundcard TNCs — one headless and one with a scope — three packet terminals (one of them, Paracon, speaking AGWPE to Direwolf and needing no kernel stack at all), a node front end, a BBS and Winlink gateway, the Winlink client, three HF data modems, the full-featured APRS client, a digipeater and an internet gateway, mail tools, AMPRnet routing, a GRIB weather viewer, and, where the running kernel still carries it, the kernel AX.25 stack's configuration and user tools.
The free HF modems are ardopcf, Mercury and FreeDATA. ardopcf speaks ARDOP and Mercury speaks VARA HF's TCP interface; Pat drives either one (ardop:// and varahf://). Mercury on the air talks to other Mercury stations, not to VARA ones. FreeDATA is its own messaging and file-transfer system with a browser interface, station to station, and is not a Winlink path. All three transmit on HF when a client keys them: a licence and the band plan apply, and nothing here keys the rig without your rig-control setup. FreeDATA is x86-64 only; the codec2 library it ships has no arm64 build.
The station is userspace-primary (D-045). Direwolf or QtSoundModem turns the radio into a modem; pat, LinBPQ, YAAC and Xastir talk to it over KISS or AGW and never touch the kernel. That is the whole station on every kernel, and the path a new operator should learn first. The kernel stack — axports, kissattach, ax25d, NET/ROM, and packet connections as sockets — is the fuller station where the kernel has it, and a bonus rather than the foundation.
On a kernel without AX.25 the kernel-side members are withheld, by name. Linux 7.1 removed the AX.25 stack (2026-04-24); Kali rolling and Pop!_OS on their 7.1 kernels no longer have it, measured 2026-09-04. The plan reads the running kernel and defers ax25-tools, ax25-apps, ax25-xtools, ax25mail-utils, axmail, aprsdigi, linpac and uronode with the reason, and the rest installs: Direwolf, pat over ax25+agwpe, LinBPQ, YAAC and Xastir's AGWPE interface work with no kernel stack. What such a machine cannot have is a kernel port — no axports, kissattach, ax25d or NET/ROM. docs/reference/kernel-ax25.md has the measurements.
Disk footprint: Around 500 MB, plus about 220 MB for FreeDATA's venv (219 MB measured on Parrot). LinBPQ, ardopcf and Mercury are source builds from pinned upstream tags (Mercury is apt on Kali); FreeDATA is a hash-pinned venv; everything else is apt.
Why these belong together¶
This is a network, not a set of programs. Direwolf turns a radio into a modem, the applications speak to it over KISS or AGW, and ax25-tools brings a kernel port up where there is a kernel to bring it up on. Installing half of it gives you something that connects to nothing. The weather viewer belongs here and looks like it does not. A GRIB file for one region is small enough to move over HF where a weather website is not, which is why sailors and emergency operators request them over Winlink. It is the thing the link is often carrying. Most of the 73Linux delta lands in this profile whole, and AHRL has none of it — this is the clearest example of what the five-source union bought.
Packages (24)¶
direwolf, qtsoundmodem, qttermtcp, paracon, ax25-tools, ax25-apps, ax25-xtools, linpac, uronode, linbpq, pat, ardopcf, mercury, freedata, xastir, aprsdigi, aprx, a2d, axmail, ax25mail-utils, ampr-ripd, minimodem, xygrib, tmd710-tncsetup
What it deliberately excludes¶
Pi-APRS, which is the last of D-008's eight packet-core units without a manifest. QtTermTCP and QtSoundModem are now IN, and not through the binary backend: 73Linux fetches unversioned prebuilt executables from a directory called Beta, and upstream tags source on GitHub, so both are ordinary pinned qmake builds. Neither is packaged on any of our six targets, which was measured. VARA and its messaging client are post-1.0 — closed software needing a configured Wine prefix — and optional since Mercury joined (Q-022 #6): Pat reaches a Mercury station through the same varahf transport, and what VARA still adds is gateways that run only VARA. fbb, the classic packet BBS, is in Ubuntu and Mint and not in Debian, Kali or Parrot, so including it would half-install the profile on the primary target; its client-side tools are here and the BBS you forward with will be somebody else's.
Install it¶
Read the plan first. It changes nothing and prints every package, build, file and system change, and every consent gate you will meet:
Then do it. The engine asks for your sudo password once, near the start,
and shows the same plan again before it asks you to confirm:
A member your machine cannot take is deferred by name and the rest installs (D-039); the plan lists each under Will NOT happen, with the reason and the command that fixes it. Installation explains how to read every part of the plan.
What you configure by hand afterward¶
This profile installs a working packet stack that does nothing until you write your callsign into two files, and that is the largest manual step in this catalog. /etc/ax25/axports needs a port line naming your callsign, the device and the speed; direwolf.conf needs your callsign, the audio device and the PTT method. Neither is generated yet — station-local configuration is the open design question, and linbpq is the one manifest that already templates it. The shipped direwolf example is heavily commented and is the right starting point. Pat is configured with pat configure, which writes your Winlink credentials. Pat's own web interface is the menu — pat http serves it at localhost:8080 for composing, reading and posting Winlink mail. 73Linux wraps Pat in its PATMENU3 script; that wrapper is licence-blocked and unneeded here, because the web UI it fronts ships with Pat itself. ardopcf's web interface is the ARDOP GUI — start the modem with -G 8514 and open localhost:8514 for its spectrum, waterfall, levels and drive-level slider. 73Linux installs John Wiseman's separate ARDOPGUI binary for this; it is superseded here because the modem ships the interface itself. It listens on every interface, as the modem's host port does.
The HF modems take their callsign from somewhere different each. ardopcf and Mercury are told it by Pat when it connects, so they need no file. FreeDATA keeps its own, in its browser settings page, and its first start copies upstream's example station AA1AAA into ~/.config/FreeDATA/config.ini: change it before transmitting. Each modem is started by hand with its sound device and keying method; the packet-and-Winlink guide has the commands.
Serial and audio access need the dialout group, and a session already open does not gain it. Transmit audio level decides whether anyone decodes you; direwolf reports its own receive levels and that is where to start. Running a digipeater or an igate puts traffic on a shared network under your callsign — the example configurations are deliberately not digipeaters, and turning that on is a decision about a resource other people depend on.
Your first ten minutes¶
- Set your callsign first:
hammunition station set --callsign N0CALL --grid-square FN31pr. A packet node transmits, and its identity is yours, so the engine will not invent one. - Read the plan:
hammunition install packet --dry-run. The profile offers a mail client only if none of thunderbird, claws-mail, evolution, geary, mutt, neomutt or kmail is found;--yesskips the question. - Install:
hammunition install packet. LinBPQ, ardopcf and Mercury build from pinned upstream tags, so it is not quick. - Check what the kernel offers: the kernel AX.25 stack is not in every kernel any more (Linux 7.1 removed it). The userspace route (Direwolf with Pat, YAAC or Xastir over KISS or AGW) needs none of it. The kernel AX.25 page says what was measured.
- Write your callsign into
direwolf.conf, starting from the commented example the package ships, and choose the audio device and PTT method. Packet and Winlink walks it line by line. - Run
pat configureto store your Winlink account, thenpat httpand openhttp://localhost:8080. Send a message over the internet first to prove the account before you involve a radio. - For APRS, start with the APRS guide: receive only, then APRS-IS, then beaconing, which is a decision about the air you share.
Optional: mail-client (recommended: thunderbird)¶
Winlink messages fetched by PAT land in a local mailbox, and a mail client is how a human reads and writes them. If you already have one, it is respected and nothing is installed. The engine detects an existing one (thunderbird, claws-mail, evolution, geary, mutt, neomutt, kmail) and respects it; only when none is found does an interactive install offer: thunderbird, claws-mail, evolution, geary. Never installed silently; --yes skips with a note.
Take it off again¶
This removes what Hammunition itself installed and nothing else. It does not remove dependencies apt pulled in, group memberships or configuration files it wrote; the plan says so and the transaction log records them (D-004).