2026-09-14 23:58:26 +03:00
|
|
|
- name: Провижнинг приёмников пеленгации
|
|
|
|
|
hosts: all
|
|
|
|
|
tasks:
|
|
|
|
|
|
2026-09-15 00:20:14 +03:00
|
|
|
- name: Обновить кэш apt (не считается изменением)
|
2026-09-14 23:58:26 +03:00
|
|
|
become: true
|
|
|
|
|
ansible.builtin.apt:
|
|
|
|
|
update_cache: true
|
|
|
|
|
cache_valid_time: 3600
|
2026-09-15 00:20:14 +03:00
|
|
|
changed_when: false
|
|
|
|
|
tags: [base]
|
|
|
|
|
|
|
|
|
|
- name: apt full-upgrade
|
|
|
|
|
become: true
|
|
|
|
|
ansible.builtin.apt:
|
2026-09-14 23:58:26 +03:00
|
|
|
upgrade: full
|
|
|
|
|
tags: [base]
|
|
|
|
|
|
|
|
|
|
- name: Зависимости сборки и утилиты HackRF
|
|
|
|
|
become: true
|
|
|
|
|
ansible.builtin.apt:
|
2026-09-15 00:45:19 +03:00
|
|
|
name: [cmake, g++, pkg-config, git, rsync, libhackrf-dev, libusb-1.0-0-dev, libfftw3-dev, hackrf, fish]
|
2026-09-14 23:58:26 +03:00
|
|
|
state: present
|
|
|
|
|
tags: [base]
|
|
|
|
|
|
2026-09-15 00:45:19 +03:00
|
|
|
- name: pi в группе plugdev, login-shell fish
|
2026-09-14 23:58:26 +03:00
|
|
|
become: true
|
|
|
|
|
ansible.builtin.user:
|
|
|
|
|
name: pi
|
|
|
|
|
groups: plugdev
|
|
|
|
|
append: true
|
2026-09-15 00:45:19 +03:00
|
|
|
shell: /usr/bin/fish
|
|
|
|
|
tags: [base]
|
|
|
|
|
|
|
|
|
|
- name: Права udev на уже подключённый HackRF (устройство старше правил)
|
|
|
|
|
become: true
|
|
|
|
|
ansible.builtin.shell: |
|
|
|
|
|
bad=0
|
|
|
|
|
for d in /sys/bus/usb/devices/*; do
|
|
|
|
|
[ -f "$d/idVendor" ] || continue
|
|
|
|
|
case "$(cat "$d/idVendor"):$(cat "$d/idProduct")" in 1d50:6089|1d50:604b) ;; *) continue;; esac
|
|
|
|
|
node=/dev/bus/usb/$(printf %03d "$(cat "$d/busnum")")/$(printf %03d "$(cat "$d/devnum")")
|
|
|
|
|
[ "$(stat -c %G "$node")" = plugdev ] || bad=1
|
|
|
|
|
done
|
|
|
|
|
if [ "$bad" = 1 ]; then
|
|
|
|
|
udevadm control --reload-rules && udevadm trigger --subsystem-match=usb && echo FIXED
|
|
|
|
|
else
|
|
|
|
|
echo OK
|
|
|
|
|
fi
|
|
|
|
|
register: usb
|
|
|
|
|
changed_when: "'FIXED' in usb.stdout"
|
2026-09-14 23:58:26 +03:00
|
|
|
tags: [base]
|
|
|
|
|
|
|
|
|
|
- name: Имя узла
|
|
|
|
|
become: true
|
|
|
|
|
ansible.builtin.hostname:
|
|
|
|
|
name: "{{ inventory_hostname }}"
|
|
|
|
|
tags: [hostname]
|
|
|
|
|
|
|
|
|
|
- name: Имя узла в /etc/hosts
|
|
|
|
|
become: true
|
|
|
|
|
ansible.builtin.lineinfile:
|
|
|
|
|
path: /etc/hosts
|
|
|
|
|
regexp: '^127\.0\.1\.1'
|
|
|
|
|
line: "127.0.1.1\t{{ inventory_hostname }}"
|
|
|
|
|
tags: [hostname]
|
|
|
|
|
|
|
|
|
|
- name: Deploy-ключ есть в keys/
|
|
|
|
|
delegate_to: localhost
|
|
|
|
|
run_once: true
|
|
|
|
|
ansible.builtin.stat:
|
|
|
|
|
path: "{{ playbook_dir }}/keys/gitea_deploy"
|
|
|
|
|
register: deploy_key
|
|
|
|
|
tags: [key]
|
|
|
|
|
|
|
|
|
|
- name: Ключа нет
|
|
|
|
|
run_once: true
|
|
|
|
|
ansible.builtin.fail:
|
|
|
|
|
msg: "[!] нет keys/gitea_deploy -- запустите scripts/gen-key.sh"
|
|
|
|
|
when: not deploy_key.stat.exists
|
|
|
|
|
tags: [key]
|
|
|
|
|
|
|
|
|
|
- name: ~/.ssh
|
|
|
|
|
ansible.builtin.file:
|
|
|
|
|
path: ~/.ssh
|
|
|
|
|
state: directory
|
|
|
|
|
mode: "0700"
|
|
|
|
|
tags: [key]
|
|
|
|
|
|
|
|
|
|
- name: Приватный deploy-ключ
|
|
|
|
|
ansible.builtin.copy:
|
|
|
|
|
src: "{{ playbook_dir }}/keys/gitea_deploy"
|
|
|
|
|
dest: ~/.ssh/gitea_deploy
|
|
|
|
|
mode: "0600"
|
|
|
|
|
tags: [key]
|
|
|
|
|
|
|
|
|
|
- name: ssh config для Gitea
|
|
|
|
|
ansible.builtin.blockinfile:
|
|
|
|
|
path: ~/.ssh/config
|
|
|
|
|
create: true
|
|
|
|
|
mode: "0600"
|
|
|
|
|
marker: "# {mark} fleet gitea"
|
|
|
|
|
block: |
|
|
|
|
|
Host {{ gitea_host }}
|
|
|
|
|
Port {{ gitea_port }}
|
|
|
|
|
User git
|
|
|
|
|
IdentityFile ~/.ssh/gitea_deploy
|
|
|
|
|
IdentitiesOnly yes
|
2026-09-15 00:21:53 +03:00
|
|
|
StrictHostKeyChecking accept-new
|
2026-09-14 23:58:26 +03:00
|
|
|
tags: [key]
|
|
|
|
|
|
2026-09-15 00:26:55 +03:00
|
|
|
- name: ~/node.env для обёртки node.sh
|
|
|
|
|
ansible.builtin.copy:
|
|
|
|
|
dest: ~/node.env
|
|
|
|
|
mode: "0644"
|
|
|
|
|
content: |
|
|
|
|
|
SDR_ID={{ sdr_id }}
|
|
|
|
|
X={{ x }}
|
|
|
|
|
Y={{ y }}
|
|
|
|
|
SERVER={{ server_ip }}
|
|
|
|
|
tags: [env]
|
|
|
|
|
|
2026-09-15 00:49:29 +03:00
|
|
|
- name: Репозиторий уже клонирован?
|
|
|
|
|
ansible.builtin.stat:
|
|
|
|
|
path: ~/hackrf-scanner/.git
|
|
|
|
|
register: repo_dir
|
|
|
|
|
tags: [repo]
|
|
|
|
|
|
2026-09-14 23:58:26 +03:00
|
|
|
- name: Локальные правки в репо (rsync-разработка)?
|
|
|
|
|
ansible.builtin.command: git status --porcelain
|
|
|
|
|
args:
|
|
|
|
|
chdir: ~/hackrf-scanner
|
|
|
|
|
register: dirty
|
|
|
|
|
changed_when: false
|
2026-09-15 00:49:29 +03:00
|
|
|
when: repo_dir.stat.exists
|
2026-09-14 23:58:26 +03:00
|
|
|
tags: [repo]
|
|
|
|
|
|
|
|
|
|
- name: Stash локальных правок перед обновлением
|
|
|
|
|
ansible.builtin.command: git stash push -m fleet-provision
|
|
|
|
|
args:
|
|
|
|
|
chdir: ~/hackrf-scanner
|
2026-09-15 00:49:29 +03:00
|
|
|
when: repo_dir.stat.exists and dirty.stdout != ""
|
2026-09-14 23:58:26 +03:00
|
|
|
tags: [repo]
|
|
|
|
|
|
|
|
|
|
- name: Репозиторий hackrf-scanner
|
|
|
|
|
ansible.builtin.git:
|
|
|
|
|
repo: "{{ scanner_repo }}"
|
|
|
|
|
dest: ~/hackrf-scanner
|
|
|
|
|
version: "{{ scanner_branch }}"
|
|
|
|
|
update: true
|
2026-09-15 00:24:30 +03:00
|
|
|
force: true
|
2026-09-14 23:58:26 +03:00
|
|
|
register: repo
|
|
|
|
|
tags: [repo]
|
|
|
|
|
|
|
|
|
|
- name: Сборка
|
|
|
|
|
ansible.builtin.shell: |
|
|
|
|
|
cmake -B build -DCMAKE_BUILD_TYPE=RelWithDebInfo >/dev/null
|
|
|
|
|
cmake --build build -j4
|
|
|
|
|
args:
|
|
|
|
|
chdir: ~/hackrf-scanner
|
|
|
|
|
register: build
|
|
|
|
|
changed_when: "'Building CXX' in build.stdout or 'Linking' in build.stdout"
|
|
|
|
|
tags: [build]
|