Odwiedza nas 38 gości oraz 0 użytkowników.

RaspberryPi - od podstaw (MULTI-RoIP_v2) - DMR serwer FreeDMR

Spis treści

 FreeDMR to odmiana lub wariant programu HBLink3. (edycja 30.06.2021 - opis powstał na początku 2021roku i może być już nieaktualny. Proszę śledzić zmiany na stronach developer'ów )

Zanim przejdziemy do instalacji proszę abyście zapoznali się z tym projektem na stronach

http://www.freedmr.uk/

https://github.com/hacknix/FreeDMR

https://github.com/hacknix/FreeDMR/wiki

 

Instalacja

 

sudo -s
cd /opt
wget https://github.com/hacknix/FreeDMR/archive/v1.0.tar.gz
tar zxvf v1.0.tar.gz
mv FreeDMR-1.0 FreeDMR
cd FreeDMR
sh ./install.sh

 

Kolejnym krokiem jest konfiguracja bazy danych MySQL i przyznam się że to chyba mój pierwszy kontakt z MySQL i przyspożyło mi to wielu problemów. Dlatego zapoznanie się z działaniem MySQL jest ważne aby zrozumieć jak to działa i jak rozwiazywać problemy które nas napotkają. Mam nadzieję iż niedługo kompetentniejsze osoby opiszą instalację lepiej tak aby przy okazji nauczyć innych a nie tylko CTRL+C / CTRL+V.

Dlatego proszę tego opisu nie traktować jako wykładnika - z powodów ograniczonej wiedzy w tym temacie, "rosyjskim" sposobem prób i błedów udało mi sie przebrnąć przez ten etap instalacji.

 

W moim przypadku  wydanie komendy

mysql -u root -p

Dało wynik 

root@raspberrypi:/opt/FreeDMR# mysql -u root -p
bash: mysql: command not found

 

Co oznacza że mój system nie ma zainstalowanej bazy danych MySQL. Dla systemów raspbian odpowiednikiem MySQL jest mariadb-server-10.0 którą musimy zainstalować.

apt update
apt install mariadb-server-10.0

 

Po tej czynności możeny przejść do   Create database (recommended)  opisanej instrukcji  instalacji https://github.com/hacknix/FreeDMR/wiki/Installation-guide

Opis oworzenia użytkownika zaczerpnięty z https://linuxize.com/post/how-to-create-mysql-user-accounts-and-grant-privileges/

 
mysql -u root
CREATE USER 'freedmr'@'localhost' IDENTIFIED BY 'passw0rd';
CREATE DATABASE freedmr;

GRANT ALL PRIVILEGES ON freedmr.* TO 'freedmr'@'localhost';
USE freedmr;
 

Teraz zgodnie z opisem musimy wkleić zawartość pliku repeaters.sql która wygląda tak:

CREATE TABLE `repeaters` (
  `CALLSIGN` varchar(8) NOT NULL,
  `MODE` varchar(8) NOT NULL,
  `ENABLED` tinyint(1) NOT NULL,
  `_REPEAT` tinyint(1) NOT NULL,
  `MAX_PEERS` int(11) NOT NULL,
  `EXPORT_AMBE` tinyint(1) NOT NULL,
  `IP` varchar(255) DEFAULT NULL,
  `PORT` int(11) NOT NULL,
  `PASSPHRASE` varchar(255) NOT NULL,
  `GROUP_HANGTIME` int(11) NOT NULL,
  `USE_ACL` tinyint(1) NOT NULL,
  `REG_ACL` varchar(255) NOT NULL,
  `SUB_ACL` varchar(255) NOT NULL,
  `TGID_TS1_ACL` varchar(255) NOT NULL,
  `TGID_TS2_ACL` varchar(255) NOT NULL,
  `DEFAULT_UA_TIMER` int(11) NOT NULL,
  `SINGLE_MODE` tinyint(1) NOT NULL,
  `VOICE_IDENT` tinyint(1) NOT NULL,
  `TS1_STATIC` varchar(255) DEFAULT NULL,
  `TS2_STATIC` varchar(255) DEFAULT NULL,
  `DEFAULT_REFLECTOR` int(11) NOT NULL,
  PRIMARY KEY (`CALLSIGN`),
  KEY `PORT` (`PORT`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4`

Tylko coś tu nie pasuje, ponieważ baza nie chce przyjąć tego wpisu. Mi osobiście wychodzi na to że ów wpis będzie działał ale po zamianie ostatniego znaku ' zawartego w nim na ; wszystko działa. Czyli kończy się linijką

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

 Nie wiem czym to jest spowodowane lecz kiedyś może się dowiem :)

Tak więc wklejamy zmodyfikowaną zawartość pliku repeaters.sql

CREATE TABLE `repeaters` (
  `CALLSIGN` varchar(8) NOT NULL,
  `MODE` varchar(8) NOT NULL,
  `ENABLED` tinyint(1) NOT NULL,
  `_REPEAT` tinyint(1) NOT NULL,
  `MAX_PEERS` int(11) NOT NULL,
  `EXPORT_AMBE` tinyint(1) NOT NULL,
  `IP` varchar(255) DEFAULT NULL,
  `PORT` int(11) NOT NULL,
  `PASSPHRASE` varchar(255) NOT NULL,
  `GROUP_HANGTIME` int(11) NOT NULL,
  `USE_ACL` tinyint(1) NOT NULL,
  `REG_ACL` varchar(255) NOT NULL,
  `SUB_ACL` varchar(255) NOT NULL,
  `TGID_TS1_ACL` varchar(255) NOT NULL,
  `TGID_TS2_ACL` varchar(255) NOT NULL,
  `DEFAULT_UA_TIMER` int(11) NOT NULL,
  `SINGLE_MODE` tinyint(1) NOT NULL,
  `VOICE_IDENT` tinyint(1) NOT NULL,
  `TS1_STATIC` varchar(255) DEFAULT NULL,
  `TS2_STATIC` varchar(255) DEFAULT NULL,
  `DEFAULT_REFLECTOR` int(11) NOT NULL,
  PRIMARY KEY (`CALLSIGN`),
  KEY `PORT` (`PORT`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

I efektem jest taki komunikat 

Query OK, 0 rows affected (0.22 sec)

Kolejny krok narazie sobie odpuszczam, ponieważ ten warian serwera będzie konfigurowany tak aby każdy użytkownik wchodził na serwer poprzez port 62031 z hasłem passw0rd,

dlatego ten wpis jest mi zbyteczny

insert into repeaters VALUES ('<yourcall>','MASTER',1,1,1,0,'',54001,'passw0rd',5,1,'DENY:1','DENY:1','PERMIT:ALL','PERMIT:ALL',10,1,1,'','',0);

 

I wychodzę z bazy danych komendą

quit

 

Kolejnymi krokami opisanymi w instrukcji jest utworzenie folderu konfiguracyjnego oraz przekopiowanie do niego pliku konfiguracji i pliku reguł

mkdir config
cp FreeDMR-SAMPLE.cfg config/FreeDMR.cfg
cp rules_SAMPLE.py config/rules.py

 

Konfiguracja odbywa się poprzez edycję pliku FreeDMR.cfg

nano /opt/FreeDMR/config/FreeDMR.cfg

 

Plik jest taki jak w przypadku HBLink'a standardowego z paroma dodatkami.

[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
[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
[MYSQL]
USE_MYSQL: False
USER: hblink
PASS: mypassword
DB: hblink
SERVER: 127.0.0.1
PORT: 3306
[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
[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
TS1_STATIC:
TS2_STATIC:
DEFAULT_REFLECTOR: 0
[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

 

Pojawił się dodatkowy wpis

[MYSQL]
USE_MYSQL: False
USER: hblink
PASS: mypassword
DB: hblink
SERVER: 127.0.0.1
PORT: 3306

A także trochę więcej opcji przy kontach MASTER

[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
TS1_STATIC:
TS2_STATIC:
DEFAULT_REFLECTOR: 0

 

W zakładce MYSQL wpisujemy dane z konta jakie utworzyliśmy  w bazie MySQL, jak ktoś nie pamieta to przypomnę

CREATE USER 'freedmr'@'localhost' IDENTIFIED BY 'passw0rd';

 

Czyli wpis powinien wygladać tak

[MYSQL]
USE_MYSQL: True
USER: freedmr
PASS: passw0rd
DB: freedmr
SERVER: 127.0.0.1
PORT: 3306

Natomiast MASTER powielamy na przykład 3 razy lub 30 razy w zależności kto ile chce hotspotów przyjąc na serwer. Nie zapominany o nadaniu każdemu MASTER innej nazwy i portu

[HOTSPOT-1]
MODE: MASTER
ENABLED: True
REPEAT: True
MAX_PEERS: 1
EXPORT_AMBE: False
IP:
PORT: 54001
PASSPHRASE: passw0rd
GROUP_HANGTIME: 5
USE_ACL: False
REG_ACL: PERMIT:ALL
SUB_ACL: PERMIT:ALL
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_REFLECTOR: 0
[HOTSPOT-2]
MODE: MASTER
ENABLED: True
REPEAT: True
MAX_PEERS: 1
EXPORT_AMBE: False
IP:
PORT: 54002
PASSPHRASE: passw0rd
GROUP_HANGTIME: 5
USE_ACL: False
REG_ACL: PERMIT:ALL
SUB_ACL: PERMIT:ALL
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_REFLECTOR: 0
[HOTSPOT-3]
MODE: MASTER
ENABLED: True
REPEAT: True
MAX_PEERS: 1
EXPORT_AMBE: False
IP:
PORT: 54003
PASSPHRASE: passw0rd
GROUP_HANGTIME: 5
USE_ACL: False
REG_ACL: PERMIT:ALL
SUB_ACL: PERMIT:ALL
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_REFLECTOR: 0

 

Ponieważ posiadamy juz HBMonitor zainstalowany to można go uruchomić, a sam FreeDMR serwer można testowo uruchomić komendą w terminalu

systemctl restart hbmon
cd /opt/FreeDMR
python3 ./bridge_master.py -c ./config/FreeDMR.cfg -r ./config/rules.py

Naszym oczom na terminalu powinien się ukazać taki komunikat

 

 

Teraz przechodzimy do konfiguracji naszego PROXY które będzie odpowiedzialne za przyjmowanie od wszystkich klientów połączenia na porcie 62031 i przekierowywanie ich na porty zapisane w kontach MASTER w naszym przypadku 54001-54003.

Na stronie WIKI jest opis https://github.com/hacknix/FreeDMR/wiki/Hotspot-Proxy

 

Otwieramy drugie okno terminala i przechodzimy do edycji pliku proxy

sudo -s
cd /opt/FreeDMR
nano hotspot_proxy_v2.py

 

Odnajdujemy fragment z opisem CONFIG HERE

#*** CONFIG HERE ***
    
    Master = "127.0.0.1"
    ListenPort = 62031
    DestportStart = 54000
    DestPortEnd = 54001
    Timeout = 30
    Stats = True
    Debug = True
    BlackList = [1234567]
    
#*******************

 Zmieniamy wartości w rubryce DestPortStar oraz DestPortEnd. W naszym przypadku MASTER jakie mamy już zaprogramowane mają porty 54001 do 54003

#*** CONFIG HERE ***
    
    Master = "127.0.0.1"
    ListenPort = 62031
    DestportStart = 54000
    DestPortEnd = 54003
    Timeout = 30
    Stats = True
    Debug = True
    BlackList = [1234567]
    
#*******************

Możemy zapisać i uruchomić ten plik

 python3 hotspot_proxy_v2.py

Niestety w moim przypadku mam komunikat o brakującym elemencie o nazwie resettabletimer , dlatego musimy go zainstalować

pip3 install resettabletimer

Ponawiamy próbe uruchomienia i powinniśmy zaobserwować komunikat

0 ports out of 3 in use (3 free)

 

 W momencie podłączania hotspot PROXY powinien w logach pokazać coś takiego

 

 

Program działa i można przejść do napisania skryptu startowego oraz ikon w menu.

Nie jest to może jakiś dobry poradnik lecz starałem się krok po kroku przedstawić proces instalacji jaki ja przechodziłem.

 

© est. 2006 Digit4all_GROUP. Designed By WebKomp

Logowanie