FreeDMR install

Инсталация на FreeDMR сървър.


В това описание може и да има и неумишлени грешки.

Бакъп на версията която работи и която беше FreeDMR ID: 2842 тук.


Следва описанието което съм следвал. Имайте в предвид че линковете може и да не са активни.

Сваляме сървърът от тук като tar.gz файл.

Аз използвам FileZilla за ъплоудването в сървъра.

cd /opt/

tar zxvf FreeDMR-master.tar.gz 

или може да се използва командата git.

apt update

apt upgrade

apt install git

Работната директория е /opt/ 

cd /opt/

git clone https://gitlab.hacknix.net/hacknix/FreeDMR.git

cd /opt/FreeDMR/
sh ./install.sh

python3 -m pip install -U pyOpenSSL cryptography

mkdir /var/log/freedmr/
mkdir config
cp FreeDMR-SAMPLE-commented.cfg config/FreeDMR.cfg
cp rules_SAMPLE.py config/rules.py

Аз предпочитам конфигурационните файлове да имат коментари но за да спестя място тук няма да публикувам коментарите във конфигурационните файлове.

 nano /opt/FreeDmr/config/FreeDMR.cfg

 --------------------------------------

[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: en_GB,en_US,es_ES,fr_FR,de_DE,dk_DK,it_IT,no_NO,pl_PL,se_SE,pt_PT,CW
SERVER_ID: 0000
VALIDATE_SERVER_IDS: False
DATA_GATEWAY: False

[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: FreeDMR

[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
SUB_MAP_FILE:
SERVER_ID_URL: http://downloads.freedmr.uk/downloads/FreeDMR_Hosts.csv
SERVER_ID_FILE: server_ids.tsv

[ALLSTAR]
ENABLED: False
USER:llcgi
PASS: mypass
SERVER: my.asl.server
PORT: 5038
NODE: 0000

[MYSQL]

ENABLED: False
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: False
ENHANCED_OBP: False
PROTO_VER: 2

[SYSTEM]
MODE: MASTER
ENABLED: True
REPEAT: True
MAX_PEERS: 1
EXPORT_AMBE: False
IP: 127.0.0.1
PORT: 54000
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: 60
SINGLE_MODE: True
VOICE_IDENT: True
TS1_STATIC:
TS2_STATIC:
DEFAULT_REFLECTOR: 0
ANNOUNCEMENT_LANGUAGE: en_GB
GENERATOR: 100
ALLOW_UNREG_ID: True
PROXY_CONTROL: True
OVERRIDE_IDENT_TG:

[ECHO]
MODE: PEER
ENABLED: False
LOOSE: False
EXPORT_AMBE: False
IP:
PORT: 54916
MASTER_IP: 127.0.0.1
MASTER_PORT: 54915
PASSPHRASE: passw0rd
CALLSIGN: ECHO
RADIO_ID: 9990
RX_FREQ: 430500000
TX_FREQ: 439900000
TX_POWER: 25
COLORCODE: 1
SLOTS: 1
LATITUDE: 45.000000
LONGITUDE: 004.00000
HEIGHT: 320
LOCATION: FreeDMR-Echo:TG-9990
DESCRIPTION: ECHO
Url:
SOFTWARE_ID: 20170620
PACKAGE_ID: MMDVM_FreeDMR
GROUP_HANGTIME: 5
OPTIONS:
USE_ACL: False
SUB_ACL: PERMIT:ALL
TGID_TS1_ACL: PERMIT:ALL
TGID_TS2_ACL: PERMIT:ALL
TS1_STATIC:
TS2_STATIC:9990
DEFAULT_REFLECTOR: 0
ANNOUNCEMENT_LANGUAGE: en_GB
GENERATOR: 1
DEFAULT_UA_TIMER: 999
SINGLE_MODE: True
VOICE_IDENT: False

--------------------------------------

nano /opt/FreeDMR/config/rules.py

 --------------------------------------

BRIDGES = {
#'9990': [
#           {'SYSTEM': 'ECHO',   'TS': 2, 'TGID': 9990, 'ACTIVE': True, 'TIMEOUT': 2, 'TO_TYPE': 'NONE', 'ON': [9990], 'OFF': [],'RESET': []},
#        ],
}

if __name__ == '__main__':
    from pprint import pprint
    pprint(BRIDGES)

 --------------------------------------

Стартираме сървъра за да проверим дали няма някаква грешка в конфигурацията:

python3 ./bridge_master.py -c ./config/FreeDMR.cfg -r ./config/rules.py

Пускаме сървъра като системен процес:

nano /lib/systemd/system/freedmr.service


--------------------------------------
[Unit]
Description=Start FreeDMR
After=multi-user.target

[Service]
ExecStart=/usr/bin/python3 /opt/FreeDMR/bridge_master.py -c /opt/FreeDMR/config/FreeDMR.cfg -r /opt/FreeDMR/config/rules.py

[Install]
WantedBy=multi-user.target
--------------------------------------

systemctl daemon-reload
systemctl start freedmr
systemctl status freedmr

Пускаме hotspot_proxy за да може автоматично да се пуска мастер за всеки спот или репитер които се закачат към сървъра. По подразбиране имаме 100 устройства които могат да се закачат към сървъра.

nano /lib/systemd/system/hotspot_proxy.service

--------------------------------------
[Unit]
Description=Start hotspot_proxy
After=multi-user.target

[Service]
ExecStart=/usr/bin/python3 /opt/FreeDMR/hotspot_proxy_v2.py

[Install]
WantedBy=multi-user.target
--------------------------------------

systemctl daemon-reload
systemctl start hotspot_proxy
systemctl status hotspot_proxy

Добавяме папагал за ехотест.

nano /opt/FreeDmr/config/FreeDMR.cfg

В секция  [ECHO] променяме ENABLED: False на ENABLED: True

nano /opt/FreeDMR/playback.cfg

 --------------------------------------

[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: False
ANNOUNCEMENT_LANGUAGES: es_ES
SERVER_ID: 9990
DATA_GATEWAY: False
VALIDATE_SERVER_IDS: False

[REPORTS]
REPORT: False
REPORT_INTERVAL: 60
REPORT_PORT: 4821
REPORT_CLIENTS: 127.0.0.1

[LOGGER]
LOG_FILE: /dev/null
LOG_HANDLERS: console-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
TGID_URL: http://downloads.freedmr.uk/downloads/talkgroup_ids.json
LOCAL_SUBSCRIBER_FILE: local_subscriber_ids.json
STALE_DAYS: 7
SUB_MAP_FILE:
SERVER_ID_FILE:
SERVER_ID_URL:

[MYSQL]

ENABLED: False
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: False

[PARROT]
MODE: MASTER
ENABLED: False
REPEAT: True
MAX_PEERS: 1
EXPORT_AMBE: False
IP: bmproject.freedmr.uk
PORT: 54915
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: False
TS1_STATIC:
TS2_STATIC:
DEFAULT_REFLECTOR: 0
GENERATOR: 1
ANNOUNCEMENT_LANGUAGE:es_ES
ALLOW_UNREG_ID: True
PROXY_CONTROL: False


[PLAY]
MODE: PEER
ENABLED: True
LOOSE: False
EXPORT_AMBE: False
IP:
PORT: 54002
MASTER_IP: localhost
MASTER_PORT: 54001
PASSPHRASE: homebrew
CALLSIGN: M0XFD
RADIO_ID: 2340210
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: play_file.py
URL: www.w1abc.org
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

 --------------------------------------

nano /opt/FreeDMR/config/rules.py

 --------------------------------------

BRIDGES = {
'9990': [
           {'SYSTEM': 'ECHO',   'TS': 2, 'TGID': 9990, 'ACTIVE': True, 'TIMEOUT': 2, 'TO_TYPE': 'NONE', 'ON': [9990], 'OFF': [],'RESET': []},
        ],
}

if __name__ == '__main__':
    from pprint import pprint
    pprint(BRIDGES)

 --------------------------------------

Пускаме папагала като системна услуга:

nano /lib/systemd/system/parrot.service

 --------------------------------------

[Unit]
Description = HB bridge all Service
After = network-online.target syslog.target
Wants = network-online.target

[Service]
StandardOutput = null
WorkingDirectory = /opt/FreeDMR
RestartSec = 3
ExecStart = /usr/bin/python3 /opt/FreeDMR/playback.py -c /opt/FreeDMR/playback.cfg
Restart = on-abort
 

[Install]
WantedBy = multi-user.target

 --------------------------------------

systemctl enable parrot
systemctl start parrot
systemctl status parrot

Инсталираме дашборд.

За да виждаме какво става във сървъра инсталираме дашборд който работи със Apache2 или webserver-python:

cd /opt/
git clone https://github.com/sp2ong/HBMonv2.git
cd HBMonv2
git checkout webserver-python
chmod +x install.sh
./install.sh
cp config_SAMPLE.py config.py

Редактираме config.py където може да променим порта и паролата за достъп до дашборда а и други неща ;)

nano /opt/HBMonv2/config.py

Пускаме монитора като сървис на системата:

cp utils/hbmon.service /lib/systemd/system/
systemctl enable hbmon
systemctl start hbmon
systemctl status hbmon

Пренасочваме TCP port 9000 и web server port 8080 във firewall на рутера за да се виждат отвън а така също и UDP port 62031 на който се извършва комуникацията между клиентите и сървъра.

Друга версия за дашборд:

https://github.com/yuvelq/FDMR-Monitor

 

Бакъп на моят FreeDMR сървър

Сървърът вече не е част от мрежата FreeDMR. Делистнат е и се ползва като личен сървър. Дашборда му се вижда тук.