From 44b8bb75271ff53537b73ec4125375f503fc4b1f Mon Sep 17 00:00:00 2001 From: Simon Date: Thu, 25 Jun 2026 17:15:01 +0100 Subject: [PATCH] tidy up sample config files and install scripts --- FreeDMR-MINIMAL.cfg | 46 ------- FreeDMR-SAMPLE-commented.cfg | 215 ------------------------------- FreeDMR-SAMPLE.cfg | 102 --------------- docker-configs/docker_install.sh | 187 --------------------------- docs/v1x-codex-changelog.md | 6 + 5 files changed, 6 insertions(+), 550 deletions(-) delete mode 100755 FreeDMR-MINIMAL.cfg delete mode 100755 FreeDMR-SAMPLE-commented.cfg delete mode 100755 FreeDMR-SAMPLE.cfg delete mode 100755 docker-configs/docker_install.sh diff --git a/FreeDMR-MINIMAL.cfg b/FreeDMR-MINIMAL.cfg deleted file mode 100755 index 68c86a3..0000000 --- a/FreeDMR-MINIMAL.cfg +++ /dev/null @@ -1,46 +0,0 @@ -#This empty config file will use defaults for everything apart from OBP and HBP config -#This is usually a sensible choice. - - -[GLOBAL] -SERVER_ID: 0000 -DEBUG_BRIDGES: True - -[REPORTS] - -[LOGGER] - -[ALIASES] - -[ALLSTAR] - -[SYSTEM] -MODE: MASTER -ENABLED: True -REPEAT: True -MAX_PEERS: 1 -EXPORT_AMBE: False -IP: 127.0.0.1 -PORT: 54000 -PASSPHRASE: -GROUP_HANGTIME: 5 -USE_ACL: True -REG_ACL: DENY:1 -SUB_ACL: DENY:1 -TGID_TS1_ACL: PERMIT:ALL -TGID_TS2_ACL: PERMIT:ALL -DEFAULT_UA_TIMER: 60 -TS1_STATIC: -TS2_STATIC: -DEFAULT_DIAL_TS1: 0 -DEFAULT_DIAL_TS2: 0 -DEFAULT_REFLECTOR: 0 -SINGLE_MODE: True -DIAL_A_TG: True -DYNAMIC_TG_ROUTING: True -VOICE_IDENT: True -ANNOUNCEMENT_LANGUAGE: en_GB -GENERATOR: 100 -ALLOW_UNREG_ID: False -PROXY_CONTROL: True -OVERRIDE_IDENT_TG: diff --git a/FreeDMR-SAMPLE-commented.cfg b/FreeDMR-SAMPLE-commented.cfg deleted file mode 100755 index 436d290..0000000 --- a/FreeDMR-SAMPLE-commented.cfg +++ /dev/null @@ -1,215 +0,0 @@ -# PROGRAM-WIDE PARAMETERS GO HERE -# PATH - working path for files, leave it alone unless you NEED to change it -# PING_TIME - the interval that peers will ping the master, and re-try registraion -# - how often the Master maintenance loop runs -# MAX_MISSED - how many pings are missed before we give up and re-register -# - number of times the master maintenance loop runs before de-registering a peer -# -# ACLs: -# -# Access Control Lists are a very powerful tool for administering your system. -# But they consume packet processing time. Disable them if you are not using them. -# But be aware that, as of now, the configuration stanzas still need the ACL -# sections configured even if you're not using them. -# -# REGISTRATION ACLS ARE ALWAYS USED, ONLY SUBSCRIBER AND TGID MAY BE DISABLED!!! -# -# The 'action' May be PERMIT|DENY -# Each entry may be a single radio id, or a hypenated range (e.g. 1-2999) -# Format: -# ACL = 'action:id|start-end|,id|start-end,....' -# --for example-- -# SUB_ACL: DENY:1,1000-2000,4500-60000,17 -# -# ACL Types: -# REG_ACL: peer radio IDs for registration (only used on HBP master systems) -# SUB_ACL: subscriber IDs for end-users -# TGID_TS1_ACL: destination talkgroup IDs on Timeslot 1 -# TGID_TS2_ACL: destination talkgroup IDs on Timeslot 2 -# -# ACLs may be repeated for individual systems if needed for granularity -# Global ACLs will be processed BEFORE the system level ACLs -# Packets will be matched against all ACLs, GLOBAL first. If a packet 'passes' -# All elements, processing continues. Packets are discarded at the first -# negative match, or 'reject' from an ACL element. -# -# If you do not wish to use ACLs, set them to 'PERMIT:ALL' -# TGID_TS1_ACL in the global stanza is used for OPENBRIDGE systems, since all -# traffic is passed as TS 1 between OpenBridges -[GLOBAL] -PATH: ./ -PING_TIME: 10 -MAX_MISSED: 3 -USE_ACL: True -REG_ACL: PERMIT:ALL -SUB_ACL: DENY:1 -TGID_TS1_ACL: PERMIT:ALL -TGID_TS2_ACL: PERMIT:ALL -GEN_STAT_BRIDGES: False -ALLOW_NULL_PASSPHRASE: True -ANNOUNCEMENT_LANGUAGES: -SERVER_ID: 0000 - -# NOT YET WORKING: NETWORK REPORTING CONFIGURATION -# Enabling "REPORT" will configure a socket-based reporting -# system that will send the configuration and other items -# to a another process (local or remote) that may process -# the information for some useful purpose, like a web dashboard. -# -# REPORT - True to enable, False to disable -# REPORT_INTERVAL - Seconds between reports -# REPORT_PORT - TCP port to listen on if "REPORT_NETWORKS" = NETWORK -# REPORT_CLIENTS - comma separated list of IPs you will allow clients -# to connect on. Entering a * will allow all. -# -# ****FOR NOW MUST BE TRUE - USE THE LOOPBACK IF YOU DON'T USE THIS!!!**** -[REPORTS] -REPORT: True -REPORT_INTERVAL: 60 -REPORT_PORT: 4321 -REPORT_CLIENTS: 127.0.0.1 - - -# SYSTEM LOGGER CONFIGURAITON -# This allows the logger to be configured without chaning the individual -# python logger stuff. LOG_FILE should be a complete path/filename for *your* -# system -- use /dev/null for non-file handlers. -# LOG_HANDLERS may be any of the following, please, no spaces in the -# list if you use several: -# null -# console -# console-timed -# file -# file-timed -# syslog -# LOG_LEVEL -# TRACE - Low-Level logging and packet data -# DEBUG - self explanatory -# INFO - normal log level -# WARNING - only abnormal states -# ERROR - only errors -# CRITICAL - only serious events - -[LOGGER] -LOG_FILE: /tmp/hblink.log -LOG_HANDLERS: console-timed -LOG_LEVEL: DEBUG -LOG_NAME: FreeDMR - -# DOWNLOAD AND IMPORT SUBSCRIBER, PEER and TGID ALIASES -# Ok, not the TGID, there's no master list I know of to download -# This is intended as a facility for other applcations built on top of -# HBlink to use, and will NOT be used in HBlink directly. -# STALE_DAYS is the number of days since the last download before we -# download again. Don't be an ass and change this to less than a few days. -[ALIASES] -TRY_DOWNLOAD: True -PATH: ./ -PEER_FILE: peer_ids.json -SUBSCRIBER_FILE: subscriber_ids.json -TGID_FILE: talkgroup_ids.json -PEER_URL: https://www.radioid.net/static/rptrs.json -SUBSCRIBER_URL: https://www.radioid.net/static/users.json -TGID_URL: http://downloads.freedmr.uk/downloads/talkgroup_ids.json -LOCAL_SUBSCRIBER_FILE: local_subcriber_ids.json -STALE_DAYS: 1 -SERVER_ID_URL: http://downloads.freedmr.uk/downloads/FreeDMR_Hosts.csv -SERVER_ID_FILE: server_ids.tsv - - -#Control server shared allstar instance via dial / AMI -[ALLSTAR] -ENABLED: False -USER:llcgi -PASS: mypass -SERVER: my.asl.server -PORT: 5038 -NODE: 0000 - - -#Read further repeater configs from MySQL -[MYSQL] -USE_MYSQL: False -USER: hblink -PASS: mypassword -DB: hblink -SERVER: 127.0.0.1 -PORT: 3306 -TABLE: repeaters - -# OPENBRIDGE INSTANCES - DUPLICATE SECTION FOR MULTIPLE CONNECTIONS -# OpenBridge is a protocol originall created by DMR+ for connection between an -# IPSC2 server and Brandmeister. It has been implemented here at the suggestion -# of the Brandmeister team as a way to legitimately connect HBlink to the -# Brandemiester network. -# It is recommended to name the system the ID of the Brandmeister server that -# it connects to, but is not necessary. TARGET_IP and TARGET_PORT are of the -# Brandmeister or IPSC2 server you are connecting to. PASSPHRASE is the password -# that must be agreed upon between you and the operator of the server you are -# connecting to. NETWORK_ID is a number in the format of a DMR Radio ID that -# will be sent to the other server to identify this connection. -# other parameters follow the other system types. -# -# ACLs: -# OpenBridge does not 'register', so registration ACL is meaningless. -# OpenBridge passes all traffic on TS1, so there is only 1 TGID ACL. -# Otherwise ACLs work as described in the global stanza -[OBP-TEST] -MODE: OPENBRIDGE -ENABLED: False -IP: -PORT: 62044 -NETWORK_ID: 1 -PASSPHRASE: mypass -TARGET_IP: -TARGET_PORT: 62044 -USE_ACL: True -SUB_ACL: DENY:1 -TGID_ACL: PERMIT:ALL -RELAX_CHECKS: False -ENHANCED_OBP: False -PROTO_VER: 2 - -# MASTER INSTANCES - DUPLICATE SECTION FOR MULTIPLE MASTERS -# HomeBrew Protocol Master instances go here. -# IP may be left blank if there's one interface on your system. -# Port should be the port you want this master to listen on. It must be unique -# and unused by anything else. -# Repeat - if True, the master repeats traffic to peers, False, it does nothing. -# -# MAX_PEERS -- maximun number of peers that may be connect to this master -# at any given time. This is very handy if you're allowing hotspots to -# connect, or using a limited computer like a Raspberry Pi. -# -# ACLs: -# See comments in the GLOBAL stanza -[G9XYZ] -MODE: MASTER -ENABLED: False -REPEAT: True -MAX_PEERS: 1 -EXPORT_AMBE: False -IP: -PORT: 54001 -PASSPHRASE: passw0rd -GROUP_HANGTIME: 5 -USE_ACL: True -REG_ACL: DENY:1 -SUB_ACL: DENY:1 -TGID_TS1_ACL: PERMIT:ALL -TGID_TS2_ACL: PERMIT:ALL -DEFAULT_UA_TIMER: 10 -SINGLE_MODE: True -VOICE_IDENT: True -DIAL_A_TG: True -DYNAMIC_TG_ROUTING: True -#the next three lines no longer have any effect -TS1_STATIC: -TS2_STATIC: -DEFAULT_DIAL_TS1: 0 -DEFAULT_DIAL_TS2: 0 -DEFAULT_REFLECTOR: 0 -ANNOUNCEMENT_LANGUAGE: en_GB -GENERATOR: 1 -ALLOW_UNREG_ID: False -PROXY_CONTROL: True diff --git a/FreeDMR-SAMPLE.cfg b/FreeDMR-SAMPLE.cfg deleted file mode 100755 index d0d87b4..0000000 --- a/FreeDMR-SAMPLE.cfg +++ /dev/null @@ -1,102 +0,0 @@ -[GLOBAL] -PATH: ./ -PING_TIME: 10 -MAX_MISSED: 3 -USE_ACL: True -REG_ACL: PERMIT:ALL -SUB_ACL: DENY:1 -TGID_TS1_ACL: PERMIT:ALL -TGID_TS2_ACL: PERMIT:ALL -GEN_STAT_BRIDGES: True -ALLOW_NULL_PASSPHRASE: True -ANNOUNCEMENT_LANGUAGES: -SERVER_ID: 0000 -DATA_GATEWAY: False -VALIDATE_SERVER_IDS: True - - -[REPORTS] -REPORT: True -REPORT_INTERVAL: 60 -REPORT_PORT: 4321 -REPORT_CLIENTS: 127.0.0.1 - -[LOGGER] -LOG_FILE: freedmr.log -LOG_HANDLERS: console-timed -LOG_LEVEL: INFO -LOG_NAME: FreeDMR - -[ALIASES] -TRY_DOWNLOAD: True -PATH: ./ -PEER_FILE: peer_ids.json -SUBSCRIBER_FILE: subscriber_ids.json -TGID_FILE: talkgroup_ids.json -PEER_URL: https://freedmr-lh.gb7fr.org.uk/json/peer_ids.json -SUBSCRIBER_URL: https://freedmr-lh.gb7fr.org.uk/json/subscriber_ids.json -TGID_URL: https://freedmr-lh.gb7fr.org.uk/json/talkgroup_ids.json -LOCAL_SUBSCRIBER_FILE: local_subcriber_ids.json -STALE_DAYS: 1 -SUB_MAP_FILE: -SERVER_ID_URL: https://freedmr-lh.gb7fr.org.uk/json/server_ids.tsv -SERVER_ID_FILE: server_ids.tsv -CHECKSUM_URL: https://freedmr-lh.gb7fr.org.uk/file_checksums.json -CHECKSUM_FILE: file_checksums.json - - -#Control server shared allstar instance via dial / AMI -[ALLSTAR] -ENABLED: False -USER:llcgi -PASS: mypass -SERVER: my.asl.server -PORT: 5038 -NODE: 0000 - -[OBP-TEST] -MODE: OPENBRIDGE -ENABLED: False -IP: -PORT: 62044 -NETWORK_ID: 1 -PASSPHRASE: mypass -TARGET_IP: -TARGET_PORT: 62044 -USE_ACL: True -SUB_ACL: DENY:1 -TGID_ACL: PERMIT:ALL -RELAX_CHECKS: True -ENHANCED_OBP: True -PROTO_VER: 2 - -[SYSTEM] -MODE: MASTER -ENABLED: True -REPEAT: True -MAX_PEERS: 1 -EXPORT_AMBE: False -IP: 127.0.0.1 -PORT: 54000 -PASSPHRASE: -GROUP_HANGTIME: 5 -USE_ACL: True -REG_ACL: DENY:1 -SUB_ACL: DENY:1 -TGID_TS1_ACL: PERMIT:ALL -TGID_TS2_ACL: PERMIT:ALL -DEFAULT_UA_TIMER: 60 -SINGLE_MODE: True -VOICE_IDENT: True -DIAL_A_TG: True -DYNAMIC_TG_ROUTING: True -TS1_STATIC: -TS2_STATIC: -DEFAULT_DIAL_TS1: 0 -DEFAULT_DIAL_TS2: 0 -DEFAULT_REFLECTOR: 0 -ANNOUNCEMENT_LANGUAGE: en_GB -GENERATOR: 100 -ALLOW_UNREG_ID: False -PROXY_CONTROL: True -OVERRIDE_IDENT_TG: diff --git a/docker-configs/docker_install.sh b/docker-configs/docker_install.sh deleted file mode 100755 index eecaa21..0000000 --- a/docker-configs/docker_install.sh +++ /dev/null @@ -1,187 +0,0 @@ -#!/bin/bash - -echo FreeDMR Docker installer... - -echo Installing required packages... -apt-get -y install docker.io && -#apt-get -y install docker-compose && -apt-get -y install conntrack && - -echo Set userland-proxy to false... -echo '{ "userland-proxy": false}' > /etc/docker/daemon.json && - -echo Restart docker... -systemctl restart docker && - -echo Pull FreeDMR latest image... -docker pull hacknix/freedmr:latest && - -echo Make config directory... -mkdir /etc/freedmr && -chmod 755 /etc/freedmr && - -echo Install /etc/freedmr/freedmr.cfg ... -cat << EOF > /etc/freedmr/freedmr.cfg -[GLOBAL] -PATH: ./ -PING_TIME: 10 -MAX_MISSED: 3 -USE_ACL: True -REG_ACL: DENY:0-100000 -SUB_ACL: DENY:0-100000 -TGID_TS1_ACL: PERMIT:ALL -TGID_TS2_ACL: PERMIT:ALL -GEN_STAT_BRIDGES: True -ALLOW_NULL_PASSPHRASE: True -ANNOUNCEMENT_LANGUAGES: -SERVER_ID: 0 -DATA_GATEWAY: False - -[REPORTS] -REPORT: True -REPORT_INTERVAL: 60 -REPORT_PORT: 4321 -REPORT_CLIENTS: * - -[LOGGER] -LOG_FILE: freedmr.log -LOG_HANDLERS: file-timed -LOG_LEVEL: INFO -LOG_NAME: FreeDMR - -[ALIASES] -TRY_DOWNLOAD: False -PATH: ./ -PEER_FILE: peer_ids.json -SUBSCRIBER_FILE: subscriber_ids.json -TGID_FILE: talkgroup_ids.json -PEER_URL: https://www.radioid.net/static/rptrs.json -SUBSCRIBER_URL: https://www.radioid.net/static/users.json -TGID_URL: TGID_URL: http://downloads.freedmr.uk/downloads/talkgroup_ids.json -STALE_DAYS: 1 -SERVER_ID_URL: http://downloads.freedmr.uk/downloads/FreeDMR_Hosts.csv -SERVER_ID_FILE: server_ids.tsv - - -#Control server shared allstar instance via dial / AMI -[ALLSTAR] -ENABLED: False -USER:llcgi -PASS: mypass -SERVER: my.asl.server -PORT: 5038 -NODE: 0000 - - -[MYSQL] -USE_MYSQL: False -USER: hblink -PASS: mypassword -DB: hblink -SERVER: 127.0.0.1 -PORT: 3306 -TABLE: repeaters - -[OBP-TEST] -MODE: OPENBRIDGE -ENABLED: False -IP: -PORT: 62044 -NETWORK_ID: 1 -PASSPHRASE: mypass -TARGET_IP: -TARGET_PORT: 62044 -USE_ACL: True -SUB_ACL: DENY:1 -TGID_ACL: PERMIT:ALL -RELAX_CHECKS: True -ENHANCED_OBP: True -PROTO_VER: 4 - - -[SYSTEM] -MODE: MASTER -ENABLED: True -REPEAT: True -MAX_PEERS: 1 -EXPORT_AMBE: False -IP: 127.0.0.1 -PORT: 54000 -PASSPHRASE: -GROUP_HANGTIME: 5 -USE_ACL: True -REG_ACL: DENY:1 -SUB_ACL: DENY:1 -TGID_TS1_ACL: PERMIT:ALL -TGID_TS2_ACL: PERMIT:ALL -DEFAULT_UA_TIMER: 10 -SINGLE_MODE: True -VOICE_IDENT: True -TS1_STATIC: -TS2_STATIC: -DEFAULT_DIAL_TS1: 0 -DEFAULT_DIAL_TS2: 0 -DEFAULT_REFLECTOR: 0 -ANNOUNCEMENT_LANGUAGE: en_GB_2 -GENERATOR: 100 - -[ECHO] -MODE: PEER -ENABLED: True -LOOSE: False -EXPORT_AMBE: False -IP: 127.0.0.1 -PORT: 54916 -MASTER_IP: 127.0.0.1 -MASTER_PORT: 54915 -PASSPHRASE: passw0rd -CALLSIGN: ECHO -RADIO_ID: 1000001 -RX_FREQ: 449000000 -TX_FREQ: 444000000 -TX_POWER: 25 -COLORCODE: 1 -SLOTS: 1 -LATITUDE: 00.0000 -LONGITUDE: 000.0000 -HEIGHT: 0 -LOCATION: Earth -DESCRIPTION: ECHO -URL: www.freedmr.uk -SOFTWARE_ID: 20170620 -PACKAGE_ID: MMDVM_FreeDMR -GROUP_HANGTIME: 5 -OPTIONS: -USE_ACL: True -SUB_ACL: DENY:1 -TGID_TS1_ACL: PERMIT:ALL -TGID_TS2_ACL: PERMIT:ALL -ANNOUNCEMENT_LANGUAGE: en_GB_2 -EOF - -echo Install rules.py ... -echo "BRIDGES = {'9990': [{'SYSTEM': 'ECHO', 'TS': 2, 'TGID': 9990, 'ACTIVE': True, 'TIMEOUT': 2, 'TO_TYPE': 'NONE', 'ON': [], 'OFF': [], 'RESET': []},]}" > /etc/freedmr/rules.py && - -echo Set perms on config directory... -chown -R 54000 /etc/freedmr && - -echo Setup logging... -mkdir -p /var/log/freedmr && -touch /var/log/freedmr/freedmr.log && -chown -R 54000 /var/log/freedmr && - -echo Run FreeDMR container... -docker run --name=freedmr -d --read-only -v /etc/freedmr/freedmr.cfg:/opt/freedmr/freedmr.cfg \ --v /var/log/freedmr/freedmr.log:/opt/freedmr/freedmr.log \ --v /etc/freedmr/rules.py:/opt/freedmr/rules.py -p 62031:62031/udp -p 62036-62046:62036-62046/udp \ --p 4321:4321/tcp hacknix/freedmr:latest && - -echo Set to restart on boot and when it dies... -docker update --restart unless-stopped freedmr && - -echo Download update script for future use... -curl https://raw.githubusercontent.com/hacknix/FreeDMR/master/docker-configs/update_freedmr.sh -o update_freedmr.sh && -chmod 700 ./update_freedmr.sh - -echo FreeDMR setup complete! - diff --git a/docs/v1x-codex-changelog.md b/docs/v1x-codex-changelog.md index d0c338f..b3e5088 100644 --- a/docs/v1x-codex-changelog.md +++ b/docs/v1x-codex-changelog.md @@ -81,6 +81,12 @@ - Fixed outbound FBP `DMRE` version bytes to use the negotiated OpenBridge session version rather than the module default version constant. BCVE remains an advertisement of the local maximum supported version. +- Removed obsolete top-level sample configs with invalid `PROTO_VER: 2` + examples, and removed the old non-compose Docker installer. Docker Compose is + the recommended Docker install path. +- Renamed the minimal top-level config to `FreeDMR.cfg`, aligned its default + timer with the Docker Compose install config, and added current OBP/FBP and + ECHO examples. - Added tests for FBP keepalive gating, wrong network ID, bad hashes, stale timestamps, max-hop handling, v4 characterization and v1 refusal on v5 links.