# fleet Плейбуки ansible, которые приводят любую малинку парка (Raspberry Pi + HackRF) в рабочее состояние и обслуживают её дальше: домашний Wi-Fi ради интернета, пакеты, код `hackrf-scanner` со сборкой на месте, выключение. Управление идёт по проводной сети 11.0.0.0/24 (`ansible_host` в инвентаре), Wi-Fi нужен только на время установки пакетов и перед работой выключается, потому что адаптер сидит в 2,4 ГГц рядом с приёмником. ## Требования - управляющая машина: `ansible` с коллекциями `community.general` и `ansible.posix`, `rsync`, `sshpass` (только для `bootstrap.yml`), рядом лежит каталог `../hackrf-scanner` (переменная `scanner_src`); - узлы: Raspberry Pi OS Lite (Debian 13, NetworkManager), пользователь `pi` с sudo без пароля, статический адрес 11.0.0.x на eth0; на полном образе с рабочим столом первый `full-upgrade` по Wi-Fi идёт больше часа; - `vars/wifi.yml` (в `.gitignore`) по образцу `vars/wifi.yml.example`. ## Новый узел ```bash nmap -sn 11.0.0.0/24 # какие узлы в сети ansible-playbook bootstrap.yml -l node107 # ключ по паролю pi/raspberry ansible-playbook wifi-on.yml # Wi-Fi и проверка интернета ansible-playbook playbook.yml # пакеты, права, имя, паспорт ansible-playbook wifi-off.yml # Wi-Fi выключен до следующего раза ansible-playbook deploy.yml # код с этой машины, сборка на узле ``` Новый узел сначала вписывается в `inventory/hosts.yml`. Смена роутера: правка `vars/wifi.yml` и `wifi-on.yml`, профиль на узлах обновится. ## Плейбуки | Плейбук | Что делает | |---|---| | `bootstrap.yml` | ключ управляющей машины в `authorized_keys`, вход по паролю | | `wifi-on.yml` | радио включено, профиль `fleet-wifi` с кредами из `vars/wifi.yml`, подключение, проверка DNS и HTTPS | | `playbook.yml` | теги `base` (apt, зависимости, plugdev, udev для HackRF, fish), `hostname`, `key` (deploy-ключ Gitea), `env` (`~/node.env`, только засев) | | `wifi-off.yml` | радио выключено, NetworkManager помнит это через перезагрузку | | `deploy.yml` | `rsync` исходников без `.git` и `build`, ревизия в `~/hackrf-scanner/DEPLOYED`, `cmake` сборка, проверка бинарников | | `reboot.yml` | перезагрузка с ожиданием возврата, печатает ядро | | `poweroff.yml` | штатное выключение и ожидание, пока узел пропадёт из сети | Ограничение по узлам и тегам как обычно: `-l node106`, `--tags base`. ## Инвентарь `inventory/hosts.yml`: адрес узла в проводной сети, `sdr_id`, серийник HackRF, координаты x, y в метрах. Координаты и `server_ip` засеваются в `~/node.env` один раз, полевые правки на узле плейбук не перетирает. После смены расстановки в инвентаре паспорта перезаписываются явно: ansible-playbook playbook.yml --tags env -e env_force=true ## Приёмка 1. Все плейбуки без `failed`, второй прогон подряд `changed=0`. 2. После `wifi-on.yml` каждый узел печатает адрес в домашней сети и "интернет есть", после `wifi-off.yml` у `wlan0` нет адреса. 3. На узле `~/hackrf-scanner/build/peleng` и `scan` собраны, `DEPLOYED` совпадает с `git describe` на управляющей машине, `hostname` = имя узла.