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.