9.1 KiB
pistar — скрипты интеграции Pi-Star с XLX-рефлекторами
Набор bash-скриптов для хотспотов на Pi-Star (Raspberry Pi + MMDVM). Скрипты прописывают в системные host-файлы Pi-Star адреса частных XLX-рефлекторов (YKT — Якутия, SMK — Смоленск, ARK — Москва), подменяют базу DMR ID на сборку с локальными якутскими записями и ставят systemd-таймер, который обновляет всё это каждые 10 минут. Предназначены для конечных пользователей хотспотов, которых подключают к этим рефлекторам: пользователь один раз выполняет одну команду по SSH, дальше обновления идут автоматически.
Скрипты рассчитаны на распространение через HTTP: рабочая копия лежит на https://xlx.dmrykt.ru/pistar/, репозиторий — исходник для этой публикации. Скрипты скачивают друг друга с того же адреса, поэтому локальный git clone сам по себе установку не выполняет.
Стек
- Bash (Pi-Star / Raspberry Pi OS, работа от root).
- systemd (
.service+.timer). wget,sed,mount -o remount,rw(Pi-Star держит корень в read-only).- Внешняя зависимость: HTTP-хранилище
https://xlx.dmrykt.ru/pistar/с этими же скриптами и файламиDMRIds.dat,DMRIdsYKT.dat. - Изменяемые файлы Pi-Star:
/usr/local/etc/XLXHosts.txt,YSFHosts.txt,DMR_Hosts.txt,P25Hosts.txt,DMRIds.dat,/usr/local/sbin/pistar-daily.cron.
Структура
| Файл | Назначение |
|---|---|
xlx.sh |
Точка входа для пользователя. Качает xlx-del.sh и xlx-get.sh с сервера, запускает их, затем последовательно xlx-cron, xlx-gethost, xlx-getdmrid, xlx-update, печатает прогресс 1/5…5/5 и FINISH. |
get.sh |
Создаёт /xlx/{scripts,temp,data,unit}, качает скрипты и unit-файлы, делает симлинки в /usr/local/bin/ (xlx-cron, xlx-gethost, xlx-getdmrid, xlx-update, xlx-del). |
cron.sh |
Дописывает вызовы xlx-gethost;xlx-rw;xlx-getdmrid-force в /usr/local/sbin/pistar-daily.cron, создаёт симлинки на xlx.service и xlx.timer в /etc/systemd/system, включает и запускает таймер. |
gethost.sh |
Основная логика. Через sed+echo прописывает записи рефлекторов в host-файлы Pi-Star: XLX 114/391/780 и алиасы YKT/SMK/ARK (порт 4004), YSF-рефлекторы (порт 42000), DMR-мастера (порты 62030/62032), P25 (порт 41000). Дублирует те же строки в /root/. |
getdmrid.sh |
Качает DMRIds.dat и DMRIdsYKT.dat, вырезает из общей базы записи с префиксом 103, склеивает с локальной якутской базой в /usr/local/etc/DMRIds.dat. |
update.sh |
Обновляет сами скрипты и unit-файлы из HTTP-хранилища. |
del.sh |
Деинсталлятор: выключает и удаляет юниты, откатывает pistar-daily.cron, удаляет симлинки ykt-* и старые файлы прошлой версии (ykt-*, DMRIdsYKT.dat), возвращает стоковый DMRIds.dat. |
unit/xlx.service |
oneshot-юнит: xlx-update, xlx-getdmrid, xlx-gethost. |
unit/xlx.timer |
Таймер OnCalendar=*-*-* *:00/10:00 — запуск каждые 10 минут. |
index.html |
HTML-инструкция для пользователя (публикуется рядом со скриптами): как зайти в Pi-Star, включить SSH и выполнить установочную команду. |
unit/index.html |
Заглушка-индекс для каталога unit/ на веб-сервере. |
Как запустить
Установка на хотспоте (из index.html, выполняется по SSH под pi-star):
rpi-rw
wget --user=yktsrv --ask-password https://xlx.dmrykt.ru/pistar/xlx.sh
chmod +x ./xlx.sh
sudo /home/pi-star/xlx.sh
Пароль для скачивания выдаётся владельцем при регистрации на рефлекторе, в репозитории его нет.
Отдельные операции после установки:
sudo xlx-gethost # переписать host-файлы Pi-Star
sudo xlx-getdmrid # обновить базу DMR ID
sudo xlx-update # обновить сами скрипты
sudo xlx-del # удалить всё, откатить настройки
Проверка автообновления:
systemctl status xlx.timer
systemctl list-timers xlx.timer
Установка напрямую из этого репозитория не восстанавливается: xlx.sh и get.sh жёстко скачивают файлы с xlx.dmrykt.ru, а не используют локальные копии.
Конфигурация
Переменных окружения нет, конфигурационных файлов нет. Все параметры зашиты в код:
| Параметр | Где | Значение |
|---|---|---|
| Каталог установки | все скрипты | XLXFOLDER=/xlx |
| Источник скриптов и данных | get.sh, update.sh, getdmrid.sh, xlx.sh |
https://xlx.dmrykt.ru/pistar/ |
| Адреса рефлекторов | gethost.sh |
XLX 114 / YKT — 89.111.154.99, XLX 391 / SMK — 212.3.149.253, XLX 780 / ARK — 46.138.248.163 |
| Порты | gethost.sh |
XLX 4004, YSF 42000, P25 41000, DMR master 62030 и 62032 |
| Префикс, вырезаемый из общей базы DMR ID | getdmrid.sh |
103 (заменяется записями из DMRIdsYKT.dat) |
| Пароль DMR-мастера | gethost.sh |
строка passw0rd в DMR_Hosts.txt — значение по умолчанию, которое Pi-Star подставляет в MMDVMHost |
Состояние
Рабочий, но замороженный набор скриптов. Последний коммит — 2025-07-31, всего 10 коммитов. Первый коммит — массовая загрузка файлов, остальные девять — переименование xlx-*.sh в короткие имена и мелкие правки. После июля 2025 работа не велась.
Развитие темы перешло в репозиторий xlx (собственный XLX-сервер с веб-панелью и платной регистрацией), который делает то же самое со стороны сервера, а не хотспота.
Что не доделано
- Переименование файлов не доведено до конца:
get.shиxlx.shпо-прежнему качают старые именаxlx-cron.sh,xlx-getdmrid.sh,xlx-gethost.sh,xlx-update.sh,xlx-del.sh, аupdate.sh— уже новые (cron.sh,del.sh, …). На сервере должны лежать оба комплекта, иначе первичная установка или обновление сломаются. del.shнаписан под прошлое поколение скриптов: выключает юнитыykt.service/ykt.timerи удаляет симлинкиykt-*, тогда как текущая версия ставитxlx.service/xlx.timerиxlx-*. Полной деинсталляции текущей версии он не делает.- В
del.shесть строкаif [ -d /xlx ]; then rm -rf /tmp; fi— судя по контексту, имелся в виду/xlx/temp. В текущем виде удаляется системный каталог/tmp. cron.shпрописывает вpistar-daily.cronкомандыxlx-rwиxlx-getdmrid-force, которых в репозитории нет — либо они существуют только на сервере, либо вызовы нерабочие.- В
gethost.shесть заведомо неточные шаблоныsed:/^114*/d,/^391*/d,/^780*/dвP25Hosts.txt(без точки перед*) удаляют больше строк, чем задумано. - Нет проверок ошибок
wget, нет тестов, нет версионирования скриптов. - TODO/FIXME в коде отсутствуют.