mirror of
https://github.com/n0mjs710/HBlink4.git
synced 2026-11-08 12:26:31 +00:00
HBlink4 draws operators who have never run a network server before, and several things in the install path assumed otherwise. Sample configuration split in two. config_sample.json was a feature showcase, and copying it as documented produced a broken server: its example repeater pattern claimed IDs 310000-312999 with a passphrase of its own, so an operator whose repeater fell in that range was rejected with no way to diagnose it (patterns match first-wins and never fall through to "default"). It also shipped an outbound link and an OpenBridge trunk enabled against hosts that do not exist, and bound both address families to one port, which cannot work. It is now a minimal working config needing one edit -- the passphrase. The full reference moves to config_advanced_sample.json with its link examples disabled and the ID overlap called out. Ship IPv4-only. Dual-stack is fully supported and now documented as four concrete layouts, each verified to bind; it is simply not the default, because most repeaters are IPv4 and the same-port bind conflict is not something a new operator should have to learn first. The built-in default when the key is absent stays false, so existing installs are unaffected. "IPv6 is globally disabled" drops from WARNING to INFO -- it is now the recommended setting and should not read as a fault. install_services.sh: refuse paths containing a space, $ or % (systemd mis-parses them in ExecStart=, and a space previously produced a unit that passed verification and then failed at start); escape & in the path substitution; render and verify units in a temp dir so a failed substitution cannot leave a broken unit in /etc/systemd/system. Check the things that otherwise surface only in the journal: complete checkout, Python 3.9+, server and dashboard dependencies, both config files, and agreement between the two halves of the dashboard event link. readme: seven numbered steps with no diversions, adding the prerequisites (python3-venv, which Debian and Ubuntu users hit constantly) and the firewall ports, neither of which were mentioned. Also: the dashboard logged a hardcoded localhost:8080 regardless of the configured port; run_all.sh now fails clearly on missing config instead of a traceback; pyproject's comment claimed systemd should invoke the console scripts, contradicting how the units actually work. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
HBlink4 Scripts
install_services.sh
Installs the systemd unit files with your user, group and paths filled in.
sudo ./scripts/install_services.sh
Documented in SYSTEMD.md, which is the reference for systemd deployment.
filter_user_csv.py
Filters the DMR user database to only include US and Canada entries, reducing file size and memory usage.
Note
: The dashboard now refreshes
user.csvautomatically on a daily schedule via dashboard/user_db.py, applying configurable country/callsign/ID filters without a restart. This script remains available for manual / one-off filtering when the automated pipeline isn't in use.
Usage
Download latest user database:
# Download from radioid.net or other DMR database source
wget -O user_full.csv https://example.com/user.csv
Filter for US/Canada only:
# Process and save to user.csv
python3 scripts/filter_user_csv.py user_full.csv user.csv
# Or overwrite the original file:
python3 scripts/filter_user_csv.py user.csv
Output:
Processing user_full.csv...
✅ Filtering complete!
Kept: 132,999 entries (45.6%)
- Canada: 7,047
- United States: 125,952
Skipped: 158,969 entries (54.4%)
📊 File sizes:
Input: 14.79 MB
Output: 7.21 MB
Saved: 7.57 MB (51.2%)
✨ Filtered CSV written to: user.csv
Why Filter?
- Memory efficiency: 54% fewer entries to load
- Disk space: 51% smaller file size
- Target audience: Primary users are US/Canada
- Performance: Faster startup time for dashboard
Adding More Countries
To include additional countries, edit filter_user_csv.py line 52:
if country in ('United States', 'Canada', 'United Kingdom'): # Add more here
Automation
To automatically update and filter the user database:
#!/bin/bash
# update_user_database.sh
echo "Downloading latest user database..."
wget -O user_full.csv https://example.com/user.csv
echo "Filtering for US/Canada..."
python3 scripts/filter_user_csv.py user_full.csv user.csv
echo "Cleaning up..."
rm user_full.csv
echo "Done! Restart dashboard to load new database."