4.4 KiB
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.
Новый узел
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
Приёмка
- Все плейбуки без
failed, второй прогон подрядchanged=0. - После
wifi-on.ymlкаждый узел печатает адрес в домашней сети и "интернет есть", послеwifi-off.ymlуwlan0нет адреса. - На узле
~/hackrf-scanner/build/pelengиscanсобраны,DEPLOYEDсовпадает сgit describeна управляющей машине,hostname= имя узла.