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


За цифровизацията и авторитаризма в радио-любителското движение

В началото бе Ехолинк.

Сървър който позволяваше свързването на аналогов ретранслатор към софтуерен клиент. По този начин радиолюбителите придобиха възможността да използват компютър свързан към интернет за да комуникират помежду си.

Следващото нещо бе Зело.

Софтуерно радио при което идеята бе сходна с тази на Ехолинк.

Накрая дойдоха Д-Стар, ДМР, Фюжън радиостацийте които имат цифров режим на работа.

С тях се появиха и сървъри които свързваха ретранслаторите в мрежа подобно на GSM мрежите.

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

Но цифровите системи така също дават възможност и за контрол. Контролът от своя страна води до цензура. Цензурата е инструмент на авторитарните управления.

И така някои радиолюбители стоящи в управлението на БФРЛ решават да определят кой с кого да прави радио връзки което противоречи на принципите на радиолюбителското движение.

Стигна се до там, да се отказва провеждането на изпити организирани от групи радиолюбители и да се налага провеждането на изпитите да става под контрола на БФРЛ и само в столицата.

Администраторите на сървъри започнаха да банват радиолюбители за щяло и нещяло. За изказвания в публичното пространство противоречащи на мнението на опеделени хора в БФРЛ.

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

Тогава започна търсенете на алтернативи.

Една такава бе ХБлинк. За нещастие много админи на БрандМастер предимно от САЩ се опитаха да нап

 цифровизацията

равят ХБлинк система извън "закона" С непрекъснати атаки срещу създателя на ХБлинк го принудиха да затвори хранилището в ГитХъб.

Отговорът бе създаване на копия на този софтуер в ГитХъб. И така ХБлинк не умря но остана без съпорт.

По това време админа на Английският БрандМастер който набриджвал света към ХБлинк бива изгонен от БрандМастер и създава на базата на ХБлинк ФриДМР.

Ние помислихме, че това е продължението на ХБлинк и аз заедно с още двама колеги го пробвахме. За мен лично се оказа че разлика във функционалността почти няма и се отказах от този проект.

Остана само сървърът на LZ1GSP.

Радиолюбителите обаче не обичат ограниченията налагани от разни авторитарни личности. В търсене на свобода те обаче се разделиха на фракции които започнаха война за надмощие и така се стигна до така наречените репитерни войни.

БФРЛ като собственик на по-голяма част от ретранслаторите разположени по високи върхове и обекти на НУРТС започна да използва ИПСЦ2 сървър отделяйки се от БрандМастер.

Радиолюбителите които си комуникираха през БрандМастер бяха оставени без ретранслатори и се наложи да работят през персонални спотове (микро ретранслатори)

Ограничаването на свободата доведе до използването на ХБлинк а в последствие на ФриДМР но ретранслаторите поддържащи връзка към тези сървъри се брояха на пръстите на едната ръка.

Това разцепление доведе до това основно комуникацията да става чрез персонални спотове на ФриДМР.

И така имаме мрежа от ретранслатори свързани към ИПСЦ2 сървър но там не е интересно и се комуникира на сървър без ретранслатори. Тогава от БФРЛ собствениците на ИПСЦ2 сървъра и ретранслаторната мрежа влизат в съглашателство със ФриДМР и правят обединение.

Тук именно е грешката на админа на ФриДМР който прави бридж между ИПСЦ2 и ФриДМР на националната група на ФриДМР ТГ284. Това довежда до насилствено обединение което като отговор довежда до загубата на един от деата ретранслатора на които имаше ФриДМР. Но на война като на война. Губиш един за да спечелиш много.

От авторитаризъм към тоталитаризъм.

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

Когато на времето БФРЛ се отцепи от БМ и премина към ИПСЦ2 се получи затихване на комуникацийте на ИПСЦ2. БФРЛ чрез техният сървър ИПСЦ2 погълнаха независимите ретранслатори които бяха към БМ но не успяха да погълнат отделните радиолюбители. Сливането на ИПСЦ2 и ФриДМР се очкваше да присъедини отцепилите се по други сървъри радиолюбители. След първоначалната еуфория и краткият бум на комуникация, въпреки неистовите опити на някои радиолюбители стоящи в основата на това "обединение", комуникацията започна да затихва. Така както на времето затихна след отделянето на БФРЛ от БМ.

Какви изводи можем да направим?

Налагането на авторитарно управление на хора които имат свободен дух в крайна сметка води до разпад на това авторитарно управление.

Ако погледнем назад в историята, робовладелският строй отстъпва място на по-либералният феодален строй, който от своя страна отстъпва място на капиталистическият строй. Комунистическата диктатура се явява съвременен опит за възстановяване на феодалният строй със някакви псевдосоциални нюанси. Но тази утопия също търпи крах.

И така нещата се повтарят много сходни и във радиолюбителското движение.

Не може да има обедидение базирано на диктатура. Това не е обедидинение, това е тоталитарна диктатура.

Ако някой иска обединение най-лесно това може да стане през БрандМастер като се направят бриджове между мрежите. Такъв успешен бридж работи от преди началото на репитерните войни между сървърът ХЛХ359 и БрандМастер на ТГ284359.

Нищо не пречи на админите на сървърите ако понамалят малко егото си и обединят ИПСЦ2 на БФРЛ които имат и ХЛХ сървър 023 на ТГ284023 на БМ. Сървърът ФриДМР също има ХЛХ - 799, могат да го обединят на ТГ284799.

Технически е възможно.

Няма директна връзка, мрежите запазват своята независимост и функционалност но има врата през която може да се комуникира. По същият начин може да се изградят кръстосани връзки между мрежите и накрая неизбежно всички може да се обединят на националната група ТГ284.

Този сценарий е възможен. Единственото което пречи на изпълнението му е егото и авторитаризма на някои админи и някои ръководители на БФРЛ.

Дано разумът надделее и в крайна сметка да получим свободна комуникация между сървърите и тази репитерна война най-после да приключи.

73 de LZ5PN

73 de LZ5PN

 Този блог се явява продължение на старият ми блог https://lz5pn.blog.bg/

Ако ми остане време ще копирам статийте тук.

73 de LZ5PN