Jak uruchomić własny lokalny HBLink?

Wszystkie poniżej komendy w opisie są wykonywane jako użytkownik ‘root‘ na Rapsberry Pi4, ale na RPi3b+ też działa.

Poniżej opis jak uruchomić podstawowy HBLink3 serwer do którego można będzie się podłączyć hotspotami. Można rozważyć instalacje HBLink serwera na wirtualnym komputerze VPS co zapewni nam stabilność i niezawodność naszego serwera na którym oprócz serwera HBLink możemy uruchomić inne usługi dla naszej lokalnej sieci. Poniższe opisane komendy są wykonywane jako użytkownik root lub komendy sudo -s aby mieć uprawnienia użytkownika root.

apt-get update
apt-get upgrade
apt-get install git python-pip python3-pip python-dev python3-dev libffi-dev libssl-dev

PS.
A dla leniwych proponuje zainstalowanie mc bedzie szybciej i nie bedzie trzeba klikać tyle kodów.

apt-get install mc
włączamy po prostu pisząc mc

Instalujemy HBLink3 który używa python3 i wg opinii autorów ma lepszą wydajność niż HBLink z python2. Obecnie kiedy pisałem ten opis Parrot nie jest jeszcze dostępny w wersji HBLink3.

cd /opt
git clone https://github.com/n0mjs710/HBlink3.git
cd /opt/HBlink3

Uruchamiamy instalacje niezbędnych bibliotek python3 dla HBlink3:

chmod 0755 install.sh
./install.sh

Konfiguracja HBLink3. Robimy kopie przykładowej konfiguracji dla HBLink:

cd /opt/HBlink3
cp hblink-SAMPLE.cfg hblink.cfg

Robimy edycje pliku:

nano hblink.cfg

Poniżej pokazuje fragmenty pliku które należy zmienić wg podanych niżej

[LOGGER]
LOG_FILE: /var/log/hblink.log
LOG_HANDLERS: file-timed
LOG_LEVEL: INFO
LOG_NAME: HBlink

Wyłączamy link OpenBridge który nie używamy na obecnym etapie konfiguracji serwera:

[OBP-1]
MODE: OPENBRIDGE
ENABLED: False

Zmieniamy hasło dostępowe (PASSWORD) oraz numer portu (PORT) na jakim będzie dostępny nasz HBLink serwer, Pole IP pozostawiamy puste. Dane te (PORT, PASSWORD oraz zewnętrzny IP) będą później potrzebne dla użytkowników Pi-Star hotspotów którzy będą chcieli się podłączyć do Twojego Master serwera.

Definicja master serwera dla hotspotów

[MASTER-H]
MODE: MASTER
ENABLED: True
REPEAT: True
MAX_PEERS: 10
EXPORT_AMBE: False
IP:
PORT: 62000
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

Jeśli planujesz że do HBLink serwera będą podłączane hotspoty które tylko będą korzystać z sieci HBLink a nie będą używać innych sieci np Brandmeister itp i nie będą się łączyć przy pomocy “DMRGateway”, można uruchomić dwa master serwery MASTR-S dla hotspotów simplex na porcie 62000 i MASTER-D dla hotspotów duplex na porcie 62001. Dzięki temu będziesz mógł mapować grupy rozmowne dla TS1 i TS2 odpowiednio dla bezpośrednio połączonych hotspotów duplex do MASTER-D. Jeśli hotspoty będą się łączyć zawsze do HBLink jak do drugiej sieci poprzez DMRGateway wystarczy jeden MASTER-H na którym wszystkie grupy będą na TS2 a każdy użytkownik indywidualnie może sobie zmapować na odpowiednie szczeliny czasowe za pomocą TGRewrite w DMRGateway.

Definicja master serwera dla przemienników:

[MASTER-RPT]
MODE: MASTER
ENABLED: True
REPEAT: True
MAX_PEERS: 10
EXPORT_AMBE: False
IP:
PORT: 62002
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

Wyłączamy definicje dla REPEATER-1 i XLX-1 (nie będziemy używali tego)

[REPEATER-1]
MODE: PEER
ENABLED: False
.....

[XLX-1]
MODE: XLXPEER
ENABLED: False
.....

Zapisujemy konfiguracje.

Robimy kopie pliku z regułami mapowania grup:

cp rules_SAMPLE.py  rules.py

Zrobić edycje pliku rules.py

nano rules.py

I należy skasować przykładowe mapowania grup w BRIDGES i zostawić zawartość taką jak niżej:

BRIDGES = {
'TG7': [
   {'SYSTEM': 'MASTER-S',    'TS': 2, 'TGID': 7,    'ACTIVE': True, 'TIMEOUT': 2, 'TO_TYPE': 'NONE',  'ON': [], 'OFF': [], 'RESET': []},
   {'SYSTEM': 'MASTER-RPT',    'TS': 2, 'TGID': 7, 'ACTIVE': True, 'TIMEOUT': 2, 'TO_TYPE': 'NONE',  'ON': [], 'OFF': [], 'RESET': []},
        ]
 }

Więcej o funkcjach w pliku rules.py w opisie

Zapisać plik.

Tworzymy plik do uruchamiania automatycznie podczas startu systemu HBlink3

nano /lib/systemd/system/hblink.service

wklejamy zawartość do pliku:

[Unit]
Description=HB bridge all Service

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

Zapisujemy plik i następnie aktywujemy HBLink:

systemctl enable hblink.service
systemctl start hblink.service

Sprawdzamy czy HBLink wystartował:

systemctl status hblink.service

Jeśli wszystko jest poprawnie, nasz serwer działa będziemy mieli wynik:

● hblink.service - HB bridge all Service
   Loaded: loaded (/lib/systemd/system/hblink.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2019-06-10 13:44:38 CEST; 2h 11min ago
 Main PID: 29582 (python3)
    Tasks: 1 (limit: 4915)
   CGroup: /system.slice/hblink.service
           └─29582 /usr/bin/python3 /opt/HBlink3/bridge.py

cze 10 13:44:38 dmr-torun systemd[1]: Started HB bridge all Service.

Możemy zobaczyć do logu:

more /var/log/hblink.log

Instalujemy HBmonitor który służy do monitorowania na stronie internetowej ruchu na HBLink.

UWAGA! HBmonitor jest w wersji bardzo rozwojowej i niechętnie jest wsparcie do napotkanych problemów z tym narzędziem przez grupę DVSwitch. Dlatego jeśli będziesz miał problemy z HBmonitor raczej nie wysyłaj zapytań do DVSwitch bo możesz spotkać się uwagami że to narzędzie obecnie ma ma supportu. Będziesz musiał sam rozwiązać problem.

Poniżej instalacja mojej wersji HBmonitora która ma zmienioną kolorystykę, dołożona funkcja wyświetlania nazw grup z talkgroup_ids.json itp.

cd /opt
git clone https://github.com/sp2ong/HBmonitor.git
cd HBmonitor
chmod 0755 install.sh
./install.sh
cp config_SAMPLE.py config.py
nano config.py
REPORT_NAME     = 'Dashboard lokalnej sieci DMR'  # Name of the monitored HBlink system
CONFIG_INC      = True                # Include HBlink stats
LASTHERAD_INC   = True
HOMEBREW_INC    = True                  # Include HomeBrew Peers stats
BRIDGES_INC     = True                 # Include Bridge stats (confbrige.py)
HBLINK_IP       = '127.0.0.1'           # HBlink's IP Address
HBLINK_PORT     = 4321                  # HBlink's TCP reporting socket
FREQUENCY       = 10                    # Frequency to push updates to web clients
WEB_SERVER_PORT = 8888                 # Has to be above 1024 if you're not running as root
CLIENT_TIMEOUT  = 0                  # Clients are timed out after this many seconds, 0 to disable

# Files and stuff for loading alias files for mapping numbers to names
PATH            = './'                                                             # MUST END IN '/'
PEER_FILE       = 'peer_ids.json'                              # Will auto-download from DMR-MARC
SUBSCRIBER_FILE = 'subscriber_ids.json'          # Will auto-download from DMR-MARC
TGID_FILE       = 'talkgroup_ids.json'                          # User provided, should be in "integer TGID, TGID name" format
LOCAL_SUB_FILE  = 'local_subscriber_ids.json'    # User provided (optional, leave '' if you don't use it), follow the format of DMR-MARC
LOCAL_PEER_FILE = 'local_peer_ids.json'           # User provided (optional, leave '' if you don't use it), follow the format of DMR-MARC
FILE_RELOAD     = 7                                                   # Number of days before we reload DMR-MARC database files
PEER_URL        = 'https://www.radioid.net/static/rptrs.json'
SUBSCRIBER_URL  = 'https://www.radioid.net/api/dmr/user/?country=Poland'

# Settings for log files
LOG_PATH        = './log/'
LOG_NAME        = 'hbmon.log'

W pliku talkgroup_ids.json możesz dopisać nazwy grup rozmownych które masz zdefiniowane wg formatu który znajdziesz już w wpisanych grupach w tym pliku. Blędy składni w tym pliku mogą skutkować że HBMonitor nie uruchomi się. Podobnie możesz zrobić lokalne własne wpisy w plikach local_subscriber_ids.json (użytkownicy, OPB Linki itp) i local_peer_ids.json (przemienniki)

Zwróć uwagę na LOG_PATH, CLIENT_TIMEOUT, SUBSCRIBER_URL, FILE_RELOAD , WEB_SERVER_PORT (port na którym dostępny jest nasz monitor: http://ip_adres_hblink:8080

Warto mieć na uwadze że HBmonitor używa też portu 9000 do komunikacji (konsola logu), jeśli więc mamy serwer za firewall musimy też ten port zmapować aby był dostępny z zewnątrz.

Tworzymy plik do uruchamiania automatycznie podczas startu systemu HBmonitor

nano /lib/systemd/system/hbmon.service

wklejamy zawartość do pliku:

[Unit]
Description=HBmon Service

After=network-online.target syslog.target
Wants=network-online.target

[Service]
StandardOutput=null
WorkingDirectory=/opt/HBmonitor
RestartSec=3
ExecStart=/usr/bin/python3 /opt/HBmonitor/monitor.py
Restart=on-abort

[Install]
WantedBy=multi-user.target

Zapisać plik i następnie aktywujemy HBmonitor:

systemctl enable hbmon.service
systemctl start hbmon.service

Sprawdzamy czy HBLink wystartował:

systemctl status hbmon.service

Jeśli całość działa poprawnie wynik statusu będzie wyglądał:

● hbmon.service - HBmon
   Loaded: loaded (/lib/systemd/system/hbmon.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2019-06-10 13:42:06 CEST; 2h 18min ago
 Main PID: 29543 (python)
    Tasks: 1 (limit: 4915)
   CGroup: /system.slice/hbmon.service
           └─29543 /usr/bin/python3 /opt/HBmonitor/monitor.py

cze 10 13:42:06 dmr-torun systemd[1]: Started HBmon Service.

Możemy teraz sprawdzić jak działa nasz monitor sieci HBLinkhttp://ip_adrres_hblink:8080

Używając HBLink Master serwera który nie jest podłączony do innej sieci DV możemy używać tych samych grup które używaliśmy w sieci BM.
Kiedy nasz Master serwer HBlink będzie miał połączenia do innych sieci np Brandmeister możemy w pliku /opt/HBlink3/rules.py zmapować nasze grupy do grup w sieci Brandmeister

to tyle…
Podziękowania dla SP2ONG za pomoc i poprawki oraz za cały wkład w projekt sieci HBLinków w Polsce