Opis instalacji HBLink3 chciałem wykonać przekierowanie do strony http://sp2ong.noip.pl/pl/blog/stworz-swoj-wlasny-serwer-dmr niestety okazuje się to już niemożliwe ponieważ opisane repozytorium zostało zamknięte lub jest ograniczony dostęp - nie wiem.
Dlatego niniejszy opis wykonam na innym źródle HBLink lecz odsyłam na w/w stronę bo to kopalnia wiedzy jak ktoś chce się w to bawić.
cd /opt
git clone https://github.com/HBLink-org/hblink3.git
cd hblink3
pip3 install -r requirements.txt
Konieczne jest jeszcze utworzenie pliku z konfiguracją oraz z regułami
cp hblink-SAMPLE.cfg hblink.cfg
cp rules_SAMPLE.py rules.py
Zanim zaczniemy konfigurację serwera warto jeszcze wykonać plik startowy
nano /lib/systemd/system/hblink.service
I wklejamy do niego
[Unit]
Description=HBLink
After=network-online.target syslog.target
Wants=network-online.target
[Service]
StandardOutput=null
WorkingDirectory=/opt/hblink3
RestartSec=3
ExecStart=/usr/bin/python3 /opt/hblink3/bridge.py
Restart=on-abort
[Install]
WantedBy=multi-user.target
Teraz można poprzez komendy systemctl start/stop/restart hblink sterować programem
Można zająć się konfiguracją samego serwera i jego testowym uruchomieniem. W konfiguracji najważniejsze są na poczatku dwa pliki.
hblink.cfg - odpowiedzialny za konfigurację serwera
rules.py - zawierający instrukcje co z czym łączyć i na jakich zasadach
Edytujemy plik hblink.cfg
nano /opt/hblink3/hblink.cfg
[GLOBAL]
PATH: ./
PING_TIME: 5
MAX_MISSED: 3
USE_ACL: True
REG_ACL: PERMIT:ALL
SUB_ACL: DENY:1
TGID_TS1_ACL: PERMIT:ALL
TGID_TS2_ACL: PERMIT:ALL
[REPORTS]
REPORT: True
REPORT_INTERVAL: 60
REPORT_PORT: 4321
REPORT_CLIENTS: 127.0.0.1
[LOGGER]
LOG_FILE: /tmp/hblink.log
LOG_HANDLERS: console-timed
LOG_LEVEL: DEBUG
LOG_NAME: HBlink
[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
STALE_DAYS: 7
[OBP-1]
MODE: OPENBRIDGE
ENABLED: True
IP:
PORT: 62035
NETWORK_ID: 3129100
PASSPHRASE: password
TARGET_IP: 1.2.3.4
TARGET_PORT: 62035
BOTH_SLOTS: True
USE_ACL: True
SUB_ACL: DENY:1
TGID_ACL: PERMIT:ALL
[MASTER-1]
MODE: MASTER
ENABLED: True
REPEAT: True
MAX_PEERS: 10
EXPORT_AMBE: False
IP:
PORT: 54000
PASSPHRASE: s3cr37w0rd
GROUP_HANGTIME: 5
USE_ACL: True
REG_ACL: DENY:1
SUB_ACL: DENY:1
TGID_TS1_ACL: PERMIT:ALL
TGID_TS2_ACL: PERMIT:ALL
[REPEATER-1]
MODE: PEER
ENABLED: True
LOOSE: False
EXPORT_AMBE: False
IP:
PORT: 54001
MASTER_IP: 172.16.1.1
MASTER_PORT: 54000
PASSPHRASE: homebrew
CALLSIGN: W1ABC
RADIO_ID: 312000
RX_FREQ: 449000000
TX_FREQ: 444000000
TX_POWER: 25
COLORCODE: 1
SLOTS: 1
LATITUDE: 38.0000
LONGITUDE: -095.0000
HEIGHT: 75
LOCATION: Anywhere, USA
DESCRIPTION: This is a cool repeater
URL: www.w1abc.org
SOFTWARE_ID: 20170620
PACKAGE_ID: MMDVM_HBlink
GROUP_HANGTIME: 5
OPTIONS:
USE_ACL: True
SUB_ACL: DENY:1
TGID_TS1_ACL: PERMIT:ALL
TGID_TS2_ACL: PERMIT:ALL
Szczegułowe opisy konfiguracji i wyjaśnienie poszczególnych opcji znajdziecie w internecie, ja tylko przedstawię parę z nich w wariancie SERWER TESTOWY w pełni otwarty bez zabezpieczeń DMRiD
[GLOBAL]
PATH: ./
PING_TIME: 10
MAX_MISSED: 5
USE_ACL: False
REG_ACL: PERMIT:ALL
SUB_ACL: PERMIT:ALL
TGID_TS1_ACL: PERMIT:ALL
TGID_TS2_ACL: PERMIT:ALL
[REPORTS]
REPORT: True
REPORT_INTERVAL: 20
REPORT_PORT: 4321
REPORT_CLIENTS: 127.0.0.1
[LOGGER]
LOG_FILE: /var/log/hblink.log
LOG_HANDLERS: file-timed
LOG_LEVEL: DEBUG
LOG_NAME: HBlink
[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
STALE_DAYS: 7
[OBP-1]
MODE: OPENBRIDGE
ENABLED: False
IP:
PORT: 62035
NETWORK_ID: 3129100
PASSPHRASE: password
TARGET_IP: 1.2.3.4
TARGET_PORT: 62035
BOTH_SLOTS: True
USE_ACL: True
SUB_ACL: DENY:1
TGID_ACL: PERMIT:ALL
[MASTER-1]
MODE: MASTER
ENABLED: True
REPEAT: True
MAX_PEERS: 2
EXPORT_AMBE: False
IP:
PORT: 54001
PASSPHRASE: s3cr37w0rd
GROUP_HANGTIME: 5
USE_ACL: False
REG_ACL: PERMIT:ALL
SUB_ACL: PERMIT:ALL
TGID_TS1_ACL: PERMIT:ALL
TGID_TS2_ACL: PERMIT:ALL
Dopisujemy kolejnego MASTER
[MASTER-2]
MODE: MASTER
ENABLED: True
REPEAT: True
MAX_PEERS: 2
EXPORT_AMBE: False
IP:
PORT: 54002
PASSPHRASE: s3cr37w0rd2
GROUP_HANGTIME: 5
USE_ACL: False
REG_ACL: PERMIT:ALL
SUB_ACL: PERMIT:ALL
TGID_TS1_ACL: PERMIT:ALL
TGID_TS2_ACL: PERMIT:ALL
[REPEATER-1]
MODE: PEER
ENABLED: False
LOOSE: False
EXPORT_AMBE: False
IP:
PORT: 54001
MASTER_IP: 172.16.1.1
MASTER_PORT: 54000
PASSPHRASE: homebrew
CALLSIGN: W1ABC
RADIO_ID: 312000
RX_FREQ: 449000000
TX_FREQ: 444000000
TX_POWER: 25
COLORCODE: 1
SLOTS: 1
LATITUDE: 38.0000
LONGITUDE: -095.0000
HEIGHT: 75
LOCATION: Anywhere, USA
DESCRIPTION: This is a cool repeater
URL: www.w1abc.org
SOFTWARE_ID: 20170620
PACKAGE_ID: MMDVM_HBlink
GROUP_HANGTIME: 5
OPTIONS:
USE_ACL: True
SUB_ACL: DENY:1
TGID_TS1_ACL: PERMIT:ALL
TGID_TS2_ACL: PERMIT:ALL
Dzięki takim zmianom mamy dwa konta MASTER dla dwóch hotspotów, wyłączyliśmy OpenBridge oraz Repeter a także zabroniliśmy pobierać aktualną bazę MARC-DMR ID bo jest ona zbyteczna, utworzylismy plik LOG i kilka innych funkcji.
Tak wstępnie przygotowany serwer pozwala na uruchomienie i testy. Lecz aby można rozmawiać na nim konieczne jest napisanie komend co ma robić gdy
nano /opt/hblink3/rules.py
Interesujący nas fragment wygląda tak:
BRIDGES = {
'WORLDWIDE': [
{'SYSTEM': 'MASTER-1', 'TS': 1, 'TGID': 1, 'ACTIVE': True, 'TIMEOUT': 2, 'TO_TYPE': 'ON', 'ON': [2,], 'OFF': [9,10], 'RESET': []},
{'SYSTEM': 'CLIENT-1', 'TS': 1, 'TGID': 3100, 'ACTIVE': True, 'TIMEOUT': 2, 'TO_TYPE': 'ON', 'ON': [2,], 'OFF': [9,10], 'RESET': []},
],
'ENGLISH': [
{'SYSTEM': 'MASTER-1', 'TS': 1, 'TGID': 13, 'ACTIVE': True, 'TIMEOUT': 2, 'TO_TYPE': 'NONE', 'ON': [3,], 'OFF': [8,10], 'RESET': []},
{'SYSTEM': 'CLIENT-2', 'TS': 1, 'TGID': 13, 'ACTIVE': True, 'TIMEOUT': 2, 'TO_TYPE': 'NONE', 'ON': [3,], 'OFF': [8,10], 'RESET': []},
],
'STATEWIDE': [
{'SYSTEM': 'MASTER-1', 'TS': 2, 'TGID': 3129, 'ACTIVE': True, 'TIMEOUT': 2, 'TO_TYPE': 'NONE', 'ON': [4,], 'OFF': [7,10], 'RESET': []},
{'SYSTEM': 'CLIENT-2', 'TS': 2, 'TGID': 3129, 'ACTIVE': True, 'TIMEOUT': 2, 'TO_TYPE': 'NONE', 'ON': [4,], 'OFF': [7,10], 'RESET': []},
]
A opis znajdziecie na stronie http://sq9lm.lukaszmisiura.com/hblink-opis-pliku-rules-py/
Musicie zrozumieć zależności występujące bo inaczej wysypie się cały serwer. Mając w pamięci że podczas edycji pliku hblink.cfg mamy taki status:
OPB - openbridge - Enable=False czyli wyłaczony
MASTER-1 Enable=True czyli włączony
MASTER-2 Enable=True czyli włączony
REPEATER-1 Enable=False czyli wyłaczony
To konfiguracji wymagają jedynie elementy włączone czyli MASTER-1 oraz MASTER-2. Przykładowo napiszemy regułe dla 3 grup rozmownych TG 10,20 i 30
Przy założeniu że mamy tylko SIMPLEX hotspot pracujące na TS2 i że chcemy mieć wszystkie grupy nieaktywne po restarcie serwera a aktywacja jakiejś grupy przez użytkownika jest na stałe do momentu gdy on sam nie zdecyduje się na zmianę grupy rozmownej
BRIDGES = {
'TG10': [
{'SYSTEM': 'MASTER-1', 'TS': 2, 'TGID': 10, 'ACTIVE': False, 'TIMEOUT': 2, 'TO_TYPE': 'NONE', 'ON': [10,], 'OFF': [20,30], 'RESET': []},
{'SYSTEM': 'MASTER-2', 'TS': 2, 'TGID': 10, 'ACTIVE': False, 'TIMEOUT': 2, 'TO_TYPE': 'NONE', 'ON': [10,], 'OFF': [20,30], 'RESET': []},
],
'TG20': [
{'SYSTEM': 'MASTER-1', 'TS': 2, 'TGID': 20, 'ACTIVE': False, 'TIMEOUT': 2, 'TO_TYPE': 'NONE', 'ON': [20,], 'OFF': [10,30], 'RESET': []},
{'SYSTEM': 'MASTER-2', 'TS': 2, 'TGID': 20, 'ACTIVE': False, 'TIMEOUT': 2, 'TO_TYPE': 'NONE', 'ON': [20,], 'OFF': [10,30], 'RESET': []},
],
'TG30': [
{'SYSTEM': 'MASTER-1', 'TS': 2, 'TGID': 30, 'ACTIVE': False, 'TIMEOUT': 2, 'TO_TYPE': 'NONE', 'ON': [30,], 'OFF': [10,20], 'RESET': []},
{'SYSTEM': 'MASTER-2', 'TS': 2, 'TGID': 30, 'ACTIVE': False, 'TIMEOUT': 2, 'TO_TYPE': 'NONE', 'ON': [30,], 'OFF': [10,20], 'RESET': []},
]
Aby zobaczyć wizualnie efekty naszych zmagań konieczny jest program HBMonitor którego instalacja w nastepnej części.