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. Делистнат е и се ползва като личен сървър. Дашборда му се вижда тук.  

За FreeDMR

FreeDMR

Широко се рекламира сред радиолюбителите един нов DMR сървър - FreeDMR.

Бил свободен стабилен сървър.

Първообразът на този сървър е HBlink. Свободен DMR сървър който може да се използва за изграждане на малки DMR мрежи от няколко репитера или хотспота и позволява да се регулира трафика идващ от различни сървъри като IPSC2, XLX, BrandMeister. Pi-Star също има подобни възможности но HBlink притежава някои екстри в повече.

И така реших да го пробвам.

След доста ровене из нета попаднах на описание за инсталация и конфигурация на този сървър. Там имаше линк от където можеше да се свали имидж на сървъра. (Това описание за инсталация вече не е валидно.)

Какво представлява инсталацията на този сървър? В имиджа има един файл install.sh който инсталира група от пакети необходими на имиджа за да работи. След което сървърът се стартира от един файл в имиджа.

Дашборда се инсталира по подобен начин.

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

След доста борба със грешките в крайна сметка сървърът тръгна.

Опитах да свържа Pi-Star към него. Pi-Star отчита, че е свързан но сървърът не отчита подобна връзка.

Тогава пробвах да свържа HBlink. Връзката се оказа успешна но до тук.

Инсталирах ехотест. Ехотеста е самостоятелен процес който работи на определен порт и слуша за определена толк група. Ехотеста работи но няма комуникация между ехотеста и сървъра.

Очевидно и тук разработчиците са заложили капанчета които за сега не успявам да открия.

Накрая реших да инсталирам сървъра от нулата на друга машина която е свързана към друг доставчик на Интернет и тук вече ударих на камък.

Оказа се че мястото от което свалих имиджа вече не съществува. Вече не може да се свали имиджа на този сървър и да се инсталира.

След проверка се оказа, че има друг метод на инсталация чрез Docker. Какво е това чудо? Ами това е (образно казано) кутия във която е поставен сървърът и в която той работи. Извън кутията се намират само някои от конфигурационните файлове и са достъпни без да има нужда кутията да се отваря.

Позаинтересувах се от въпросният Docker и останах направо шокиран. Docker се използва от приложения като Adobe, PayPal, Netflix... Приложения които използват затворен код.

Значи, апапите които разработват „свободният“ сървър за DMR са взели свободният HBlink преработили са го и сега го набутват в кутия в която не всеки може да види какво има и да го промени и настрои към собствените си нужди.

Е това вече не е свободен софтуер. Това е софтуер който е достъпен само за тесен кръг от посветени хора. На страницата за инсталиране на сървъра има въпрос, има ли FreeDMR сървър във вашата страна? Ако има не е необходимо да инсталирате друг... С други думи казано, ще работим само с един представител на държава...

Такова е положението и в IPSC2 и във BrandMeister. И така за нашего брата остава само HBlink.

В момента може да се инсталира FreeDMR чрез докер НО!!! За целта ще ви трябва самостоятелна машина без никакви други сървъри инсталирани на нея, отделен IP адрес и домейн.

Е... мерси съм ама няма да отделям машина и домейн само за един сървър. Към момента Българският „FreeDMR“ е бриджнат с мрежата IPSC2 BG. Какво означава това? Ами това вече не е свободен самостоятелен сървър а просто една толк група от мрежата на IPSC2 BG. Към този сървър няма свързани репитри а само спотове. Използва се репитерната мрежа на IPSC2 BG.

При това положение за какво ми е да правя връзка към българският „FreeDMR“ който използва репитерната мрежа на IPSC2 BG? За какво да тормозя малкият Pi-Star с още мрежи? За България е достатъчно на Pi-Star да се активират само две DMR мрежи - IPSC2 BG (която е бриджната с FreeDMR) и BrandMeister (която е бриджната с XLX 359) Дето има една дума с един куршум два заека, е в случая четири.

 

Борбата за пускане на FreeDMR сървъра продъжава да видим до къде ще стигна. 

п.п.

Оказа се, че нещата са преместени, вижте следващата статия. Все още може да се инсталира без Докер но няма добри инструкции как това се прави.


73 de LZ5PN