From 38323823b85b2ae8deef788a0f49e36c789c12f4 Mon Sep 17 00:00:00 2001 From: Luke Hoersten Date: Sun, 26 Jul 2026 10:36:29 -0500 Subject: openhop/repeater: add MeshCore repeater role Deploys the openHop MeshCore repeater on a Raspberry Pi with a RAK6421 WisMesh Pi HAT: installs the daemon into a venv from a versioned git tag, templates config.yaml and a systemd unit, and loads board pin maps and RF region presets by name from vars/. identity_file is configurable and defaults to null (daemon generates its own keypair). --- openhop/repeater/tasks/main.yaml | 102 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 openhop/repeater/tasks/main.yaml (limited to 'openhop/repeater/tasks/main.yaml') diff --git a/openhop/repeater/tasks/main.yaml b/openhop/repeater/tasks/main.yaml new file mode 100644 index 0000000..b24044c --- /dev/null +++ b/openhop/repeater/tasks/main.yaml @@ -0,0 +1,102 @@ +--- + +- name: load board pin preset + include_vars: "boards/{{repeater_board}}.yaml" + +- name: load RF region preset + include_vars: "rf/{{repeater_rf_preset}}.yaml" + +- name: enable SPI for the LoRa HAT + become: yes + lineinfile: + path: "/boot/firmware/config.txt" + line: "dtparam=spi=on" + regexp: "^#?dtparam=spi=" + register: spi_result + +- name: remind to reboot for SPI to take effect + debug: + msg: "config.txt updated — reboot {{inventory_hostname}} for dtparam=spi=on to take effect" + when: spi_result.changed + +- name: apt install openhop repeater dependencies + become: yes + apt: + name: + - "git" + - "python3-venv" + - "python3-dev" + - "build-essential" + +- name: add openhop repeater user + become: yes + user: + name: "{{repeater_user}}" + system: "yes" + shell: "/bin/false" + home: "{{repeater_data_dir}}" + create_home: "no" + groups: "spi,gpio" + append: "yes" + +- name: create openhop repeater directories + become: yes + file: + path: "{{item.path}}" + state: "directory" + owner: "{{item.owner}}" + group: "{{item.owner}}" + mode: "{{item.mode}}" + loop: + - { path: "/opt/openhop_repeater", owner: "root", mode: "0755" } + - { path: "{{repeater_config_dir}}", owner: "root", mode: "0755" } + - { path: "{{repeater_data_dir}}", owner: "{{repeater_user}}", mode: "0750" } + +- name: check installed openhop_repeater version + become: yes + stat: + path: "{{repeater_venv_dir}}/.installed-{{repeater_version}}" + register: repeater_installed + +- name: install openhop_repeater into venv + become: yes + pip: + name: "git+{{repeater_repo}}@{{repeater_version}}" + virtualenv: "{{repeater_venv_dir}}" + virtualenv_command: "python3 -m venv" + when: not repeater_installed.stat.exists + notify: restart openhop-repeater + +- name: stamp installed openhop_repeater version + become: yes + copy: + dest: "{{repeater_venv_dir}}/.installed-{{repeater_version}}" + content: "{{repeater_version}}\n" + mode: "0644" + when: not repeater_installed.stat.exists + +- name: configure openhop repeater + become: yes + template: + src: "config.yaml.j2" + dest: "{{repeater_config_dir}}/config.yaml" + owner: "root" + group: "{{repeater_user}}" + mode: "0640" + notify: restart openhop-repeater + +- name: install openhop-repeater systemd service + become: yes + template: + src: "openhop-repeater.service.j2" + dest: "/lib/systemd/system/openhop-repeater.service" + mode: "0644" + notify: restart openhop-repeater + +- name: ensure openhop-repeater service is started + become: yes + systemd: + name: "openhop-repeater.service" + enabled: "yes" + state: "started" + daemon_reload: "yes" -- cgit v1.2.3