# fleet Идемпотентный провижнинг парка приёмников пеленгации (Raspberry Pi + HackRF). Один прогон приводит новую или старую малинку в рабочее состояние: обновление системы, зависимости сборки, общий deploy-ключ до Gitea, клон и сборка `hackrf-scanner`. Гоняется дома, пока узлы в сети с интернетом. После переноса в изолированную сеть (коммутатор, статические IP) на карте уже есть всё; правки кода дальше идут `rsync` + сборка на месте. Статические IP playbook не трогает. ## Требования - на управляющей машине: `ansible` (Arch: `pacman -S ansible`), доступ по ssh к узлам под `pi` по ключу; - на узлах: Raspberry Pi OS (Debian 13), `pi` с sudo без пароля, интернет. ## Первый запуск scripts/gen-key.sh # пара keys/gitea_deploy (в .gitignore) # добавить keys/gitea_deploy.pub как deploy key (read-only) # в Gitea: IU9/hackrf-scanner ansible-playbook playbook.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 ## Инвентарь `inventory/hosts.yml`: адреса узлов в домашней сети (транзитные), а также справочно -- статический IP для поля, серийник HackRF и координаты x, y (м). Ветка репозитория -- переменная `scanner_branch`. ## Приёмка 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.