[UPDATE] playbook без клона и сборки, код узла кладёт deploy.yml, README

This commit is contained in:
Arseny
2026-09-24 23:36:10 +03:00
parent c72bea1a5e
commit 0fe490c95e
3 changed files with 49 additions and 86 deletions
+43 -31
View File
@@ -1,47 +1,59 @@
# fleet
Идемпотентный провижнинг парка приёмников пеленгации (Raspberry Pi + HackRF).
Один прогон приводит новую или старую малинку в рабочее состояние: обновление
системы, зависимости сборки, общий deploy-ключ до Gitea, клон и сборка
`hackrf-scanner`.
Гоняется дома, пока узлы в сети с интернетом. После переноса в изолированную
сеть (коммутатор, статические IP) на карте уже есть всё; правки кода дальше
идут `rsync` + сборка на месте. Статические IP playbook не трогает.
Плейбуки ansible, которые приводят любую малинку парка (Raspberry Pi +
HackRF) в рабочее состояние и обслуживают её дальше: домашний Wi-Fi ради
интернета, пакеты, код `hackrf-scanner` со сборкой на месте, выключение.
Управление идёт по проводной сети 11.0.0.0/24 (`ansible_host` в инвентаре),
Wi-Fi нужен только на время установки пакетов и перед работой выключается,
потому что адаптер сидит в 2,4 ГГц рядом с приёмником.
## Требования
- на управляющей машине: `ansible` (Arch: `pacman -S ansible`), доступ по ssh
к узлам под `pi` по ключу;
- на узлах: Raspberry Pi OS (Debian 13), `pi` с sudo без пароля, интернет.
- управляющая машина: `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`.
## Первый запуск
## Новый узел
scripts/gen-key.sh # пара keys/gitea_deploy (в .gitignore)
# добавить keys/gitea_deploy.pub как deploy key (read-only)
# в Gitea: IU9/hackrf-scanner
ansible-playbook playbook.yml # весь парк
```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`, профиль на узлах обновится.
base apt upgrade, зависимости, pi в plugdev
hostname имя узла из инвентаря
key deploy-ключ, ssh config, known_hosts
repo clone/pull ветки scanner_branch (stash локальных правок)
build cmake configure + build
## Плейбуки
ansible-playbook playbook.yml -l node106 --tags repo,build
| Плейбук | Что делает |
|---|---|
| `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` сборка, проверка бинарников |
| `poweroff.yml` | штатное выключение и ожидание, пока узел пропадёт из сети |
Ограничение по узлам и тегам как обычно: `-l node106`, `--tags base`.
## Инвентарь
`inventory/hosts.yml`: адреса узлов в домашней сети (транзитные), а также
справочно -- статический IP для поля, серийник HackRF и координаты x, y (м).
Ветка репозитория -- переменная `scanner_branch`.
`inventory/hosts.yml`: адрес узла в проводной сети, `sdr_id`, серийник HackRF,
координаты x, y в метрах. Координаты и `server_ip` засеваются в `~/node.env`
один раз, полевые правки на узле плейбук не перетирает.
## Приёмка
1. Прогон без `failed`.
2. Второй прогон подряд -- `changed=0` на всех узлах.
3. На узле: `hackrf_info` видит устройство, `~/hackrf-scanner/build/` собран,
`git rev-parse --abbrev-ref HEAD` = `scanner_branch`, `hostname` = имя узла.
4. `ssh -T git@monitor.yss.su` с узла отвечает Gitea.
1. Все плейбуки без `failed`, второй прогон подряд `changed=0`.
2. После `wifi-on.yml` каждый узел печатает адрес в домашней сети и
"интернет есть", после `wifi-off.yml` у `wlan0` нет адреса.
3. На узле `~/hackrf-scanner/build/peleng` и `scan` собраны, `DEPLOYED`
совпадает с `git describe` на управляющей машине, `hostname` = имя узла.