# xlxd-debian-installer (форк) Bash-установщик XLX-рефлектора на Debian: ставит зависимости, собирает демон `xlxd` из исходников, разворачивает PHP-дашборд, прописывает init-скрипт и виртуальный хост Apache. XLX — мультирежимный рефлектор для любительской цифровой радиосвязи (DMR, D-Star, C4FM/YSF), к нему подключаются хотспоты Pi-Star и репитеры. Это форк установщика Бена Фогта (N5AMD), взятый по цепочке: оригинал `n5amd/xlxd-debian-installer` → `vaikcode` (Vlad) → `sever83` → текущая копия. Форк взят ради модификаций, превращающих публичный рефлектор в **закрытый (частный) с собственной базой DMR ID**: сборка ведётся не из апстрима LX3JL, а из форка `xlxd`, база позывных не тянется с внешнего сервера, «звонок домой» (регистрация в глобальных host-файлах) отключён. Документация оригинала сохранена в [README.upstream.md](README.upstream.md). ## Отличия от оригинала Правки владельца этой копии: - `2025-07-06` — единственный собственный коммит: в инструкции по установке адрес клонирования заменён на свой репозиторий (`viktor138irk/xlxd-debian-installer` вместо `sever83/...`). Код скрипта не менялся. Изменения, унаследованные от предыдущих форков (Vlad/`vaikcode`, `sever83`) и присутствующие в этой копии — именно они отличают её от оригинала N5AMD: - `XLXDREPO` указывает на форк `https://github.com/sever83/xlxd.git` вместо апстрима `https://github.com/LX3JL/xlxd.git`. - Отключено скачивание базы DMR ID с `xlxapi.rlx.lu` (`wget ... $DMRIDURL` закомментирован). Вместо этого создаётся пустой `/xlxd/dmrid.dat` и в него засеваются три тестовых локальных ID: `7700001;RADIST1;`, `7700002;RADIST2;`, `7700003;RADIST3;` — база позывных ведётся локально (в связке с панелью регистрации, см. репозиторий `XLX-Pistarscript-panel-Install`). - Закомментирована правка `main.h` (`DMRIDDB_USE_RLX_SERVER 1 → 0`) — переключение источника базы ID теперь берётся из самого форка `xlxd`, а не патчится установщиком. - Закомментирован блок постнастройки дашборда: скрытие IP (`ShowFullIP → HideIP` на страницах репитеров и пиров) и включение `CallingHome['Active'] = true`. То есть рефлектор не регистрируется в глобальном списке XLX и показывает IP как есть. - Убрана ветвление по версии Debian (`php7.0/7.3/7.4-mbstring`): блок `if [ $VERSION = 9|10|11 ]` закомментирован, ставится общий набор пакетов `$APPS` с метапакетами `php-*`. ## Стек - Bash, Debian (проверялось на x64), `apt`. - Собирает C++-демон `xlxd` (`make && make install`) — нужен `build-essential`. - Веб-часть: Apache2 + PHP (`php-cli`, `php-xml`, `php-mbstring`, `php-curl`, `libapache2-mod-php`). - Запуск через SysV-init скрипт + `update-rc.d`, управление через `systemctl`. ## Структура - `xlxd-debian-installer.sh` — весь установщик: диалог с оператором, установка пакетов, сборка `xlxd`, разворачивание дашборда, настройка Apache, старт сервиса. - `templates/apache.tbd.conf` — шаблон виртуального хоста Apache; `apache.tbd` заменяется на FQDN, `ysf-xlxd` — на `xlxd`, файл кладётся в `/etc/apache2/sites-available/.conf`. - `README.upstream.md` — документация оригинального проекта N5AMD. ## Как запустить/установить Требуется чистый Debian, root, заранее известные FQDN дашборда и трёхзначный номер XLX. ```sh git clone /xlxd-debian-installer cd xlxd-debian-installer ./xlxd-debian-installer.sh ``` Скрипт интерактивно спросит: трёхзначный номер рефлектора (`XRFDIGIT` → имя `XLX`), FQDN дашборда, e-mail для связи, позывной администратора. Управление после установки: ```sh systemctl start|stop|status|restart xlxd ``` ## Конфигурация Переменные в начале `xlxd-debian-installer.sh`: - `XLXDREPO` — репозиторий исходников `xlxd` (в этой копии — форк `sever83/xlxd`). - `DMRIDURL` — `http://xlxapi.rlx.lu/api/exportdmr.php`; объявлена, но не используется (загрузка отключена). - `WEBDIR` — `/var/www/xlxd`, веб-корень дашборда. - `XLXINSTDIR` — `/root/reflector-install-files/xlxd`, каталог сборки. - `APPS` / `DEP`, `DEP2`, `DEP3` — наборы пакетов (`DEP*` не используются). - `LOCAL_IP` — определяется через `hostname -I`, подставляется в init-скрипт вместо `192.168.1.240`. Что правится автоматически: - `/etc/init.d/xlxd` — строка запуска `XLX999 192.168.1.240 127.0.0.1` → `XLX 127.0.0.1`. - `/var/www/xlxd/pgs/config.inc.php` — e-mail, позывной администратора, URL дашборда, путь к `callinghome.php` (`/tmp/` → `/xlxd/`). - Владелец `/var/www/xlxd` и `/xlxd` — `www-data`. - Включается сайт ``, отключается `000-default`. Рабочие расположения: рефлектор — `/xlxd`, база ID — `/xlxd/dmrid.dat`, основной конфиг дашборда — `/var/www/xlxd/pgs/config.inc.php`, логи — `journalctl`/`systemctl status xlxd` и `/var/log/messages`. ## Состояние Рабочий, но привязан к устаревшему окружению. Последний коммит 2025-07-06, всего 40 коммитов (из них 1 собственный, остальные — история оригинала и промежуточных форков). ## Что не доделано - Явных TODO/FIXME нет; вместо этого крупные блоки логики просто закомментированы (правка `main.h`, скачивание базы ID, скрытие IP, `CallingHome`, установка версионных PHP-пакетов) — «выключено», а не удалено. - В `/xlxd/dmrid.dat` засеваются тестовые записи `RADIST1..3` с ID `7700001..3`, они остаются в базе после установки. - Проверка версии Debian отключена, при этом `VERSION` вычисляется и не используется; на современных Debian корректность набора пакетов не проверялась. - Шаблон Apache — только HTTP (порт 80), без TLS; `ServerName` подставляется sed'ом, отдельного `DocumentRoot`-параметра нет (жёстко `/var/www/xlxd` после замены). - Установщик не идемпотентен: повторный запуск при уже собранном `xlxd` прерывается с требованием вручную удалить `/root/reflector-install-files/xlxd`. - Управление заявлено через `systemctl`, а ставится SysV init-скрипт через `update-rc.d` (работает через systemd-generator).