BlackOut Secure · OpenWrt Package Feed 23.05-SNAPSHOT

Unofficial test opkg feed for readsb-wiedehopf. Built once against upstream OpenWrt 23.05.6 (Cortex-A53) and republished under multiple ABI-compatible arch labels so the same base URL works on mainline OpenWrt and on GL.iNet ApNos firmware.

Install on a router

Pick the snippet that matches your router's firmware. The opkg arch label is a literal-string match, so the right URL matters even though the binaries are identical across labels.

Mainline OpenWrt on Cortex-A53 (e.g. ipq60xx, ipq807x)

echo 'src/gz blackoutsecure https://openwrt.blackoutsecure.dev/23.05-SNAPSHOT/packages/aarch64_cortex-a53/blackoutsecure' >> /etc/opkg/customfeeds.conf
opkg update
opkg install readsb-wiedehopf

GL.iNet ApNos firmware (AXT1800 / AX1800, 23.05-based)

echo 'src/gz blackoutsecure https://openwrt.blackoutsecure.dev/23.05-SNAPSHOT/packages/aarch64_cortex-a53_neon-vfpv4/blackoutsecure' >> /etc/opkg/customfeeds.conf
opkg update
opkg install readsb-wiedehopf

Architectures published

Each arch directory carries the same set of .ipk files plus a signed Packages index. The build is native for aarch64_cortex-a53; other labels are repacks (control.tar.gz rewritten with the new Architecture: line, data tarball untouched).

ArchIndexCompressed
aarch64_cortex-a53PackagesPackages.gz
aarch64_cortex-a53_neon-vfpv4PackagesPackages.gz

Configuring readsb-wiedehopf

This page only documents the OpenWrt-specific layer (UCI, init, hotplug, geoip). For the readsb daemon itself — every CLI flag, the autogain algorithm, BeastReduce, MLAT, pushing to aggregators, tar1090, the JSON/API outputs — see upstream:

github.com/wiedehopf/readsb

The mapping is direct: each UCI option in /etc/config/readsb translates to the same-named --flag on the daemon command line (underscores become dashes). So upstream's --net-connector=... is option net_connector '...' here, --net-beast-reduce-filter-dist=... is option net_beast_reduce_filter_dist '...', etc.

Naming. The package is readsb-wiedehopf but PROVIDES:=readsb, so the binary is /usr/bin/readsb, the init script is /etc/init.d/readsb, and the UCI config is /etc/config/readsb. Either name satisfies a readsb dependency.

What the OpenWrt glue adds on top of upstream readsb

The init script and hotplug helper handle the things upstream's Debian package does via /etc/default/readsb plus hand-editing — automated for OpenWrt:

So for a typical RTL-SDR install: plug it in, install the package, done.

UCI cheatsheet

The shipped /etc/config/readsb defaults to net_only=1 with net=1 so the daemon comes up as a feeder/passthrough; the hotplug helper flips it into SDR mode the moment a known USB radio is attached. Common overrides:

uci show readsb                          # current effective config
# cat /etc/config/readsb                 # raw file view

# Override the geoip-detected location with your real receiver coordinates.
# uci set readsb.main.lat='12.3456'
# uci set readsb.main.lon='-65.4321'

# Gain. 'auto' is upstream's ADS-B autogain (see upstream README § Autogain).
# With system log_level=debug the init script promotes this to 'auto-verbose'
# automatically. Or pin a manual dB value from the list in `readsb --help`.
uci set readsb.main.gain='auto'
# uci set readsb.main.gain='49.6'

uci set readsb.main.mlat='1'             # emit MLAT timestamps in Beast OUT
# uci add_list readsb.main.net_connector='feed.adsbexchange.com,30005,beast_reduce_out'

# Manual SDR / net-only setup — only needed if hotplug didn't fire
# (non-RTL-SDR receiver, hotplug disabled, or pure net-only ingest).
# uci set readsb.main.enabled='1'
# uci set readsb.main.device_type='rtlsdr'   # rtlsdr | modesbeast | gnshulc | ifile
# uci set readsb.main.device='00001090'      # USB serial of a specific dongle
# uci set readsb.main.net_only='1'           # net-only (no SDR)

uci commit readsb                        # procd reload trigger picks it up
/etc/init.d/readsb status
logread -e readsb -f
viewadsb                                 # text UI of live aircraft
# readsb-geoip --force                   # re-run geoip lookup (overwrite lat/lon)

For the meaning of every option, search upstream readsb --help for the dash-form name (UCI net_beast_reduce_filter_dist--net-beast-reduce-filter-dist).

Default network listeners

As shipped in /etc/config/readsb:

PortUCI optionDirectionNotes
30001net_ri_portRaw INAVR-format raw input
30002net_ro_portRaw OUTAVR-format raw output
30003net_sbs_portSBS BaseStation OUTfor Virtual Radar Server etc.
30004,30104net_bi_portBeast INfeed raw Beast frames in
30005net_bo_portBeast OUTfor piaware / fr24feed / tar1090
30006net_beast_reduce_out_portBeastReduce OUTfor aggregators (see upstream § BeastReduce)

net_api_port, net_json_port, write_globe_history, heatmap, and the rest are unset by default — enable them in /etc/config/readsb as described upstream.

To feed an aggregator (FlightAware, ADS-B Exchange, FR24, airplanes.live, adsb.lol, …): either install the aggregator's own client and point it at localhost:30005 (Beast), or add a net_connector directly per upstream § BeastReduce output.

Stubborn leftovers after opkg remove

If opkg remove reports Not found even though the package was previously installed, opkg's status DB no longer tracks it but the package-shipped files may still be on disk. Check and clean manually:

pgrep -af readsb     # nothing should be running; if it is: kill it first
ls -l /usr/bin/readsb /usr/bin/viewadsb /usr/sbin/readsb-geoip \
      /etc/init.d/readsb /etc/hotplug.d/usb/30-readsb \
      /usr/lib/readsb/functions.sh 2>/dev/null
rm -f /usr/bin/readsb /usr/bin/viewadsb /usr/sbin/readsb-geoip \
      /etc/init.d/readsb /etc/hotplug.d/usb/30-readsb
rm -rf /usr/lib/readsb

The bundled deps librtlsdr and libzstd are not removed automatically. Confirm nothing else needs them before dropping:

opkg whatdepends librtlsdr
opkg whatdepends libzstd
opkg remove librtlsdr libzstd     # only if no other dependents

Uninstall

Removes the package(s) installed from this feed and detaches the custom feed entry. The package's prerm stops and disables the service for you, and its postrm cleans up /var/run/readsb, so you don't need to touch /etc/init.d/ or wipe runtime state by hand:

opkg remove readsb-wiedehopf viewadsb-wiedehopf
sed -i '/blackoutsecure/d' /etc/opkg/customfeeds.conf
opkg update
Note on Command failed: Not found. opkg prints this when a named package isn't in its status DB (e.g. you only ever installed readsb-wiedehopf and not its sub-packages) or when a prerm exits non-zero. Either way the rest of the removal still proceeds — opkg processes args in order and reports per-arg.

Optional — also discard the conffile. opkg deliberately preserves your edits on remove (and saves the package default as *-opkg if it differs):

rm -f /etc/config/readsb /etc/config/readsb-opkg

About this feed