Files
fleet/README.md
T

64 lines
4.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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` = имя узла.