<feed xmlns='http://www.w3.org/2005/Atom'>
<title>luke/ansible-roles/openhop/repeater/templates, branch main</title>
<subtitle>Ansible roles for nth.io infrastructure
</subtitle>
<id>https://src.nth.io/luke/ansible-roles/atom?h=main</id>
<link rel='self' href='https://src.nth.io/luke/ansible-roles/atom?h=main'/>
<link rel='alternate' type='text/html' href='https://src.nth.io/luke/ansible-roles/'/>
<updated>2026-08-11T02:11:03Z</updated>
<entry>
<title>openhop/repeater: gate service start on the data-dir mount</title>
<updated>2026-08-11T02:11:03Z</updated>
<author>
<name>Luke Hoersten</name>
<email>luke@hoersten.org</email>
</author>
<published>2026-08-11T02:11:03Z</published>
<link rel='alternate' type='text/html' href='https://src.nth.io/luke/ansible-roles/commit/?id=440f01ea7de8dabf01480c381ff53c67922720b2'/>
<id>urn:sha1:440f01ea7de8dabf01480c381ff53c67922720b2</id>
<content type='text'>
Add RequiresMountsFor to the systemd unit so the daemon does not start
before the storage backing the data dir (and thus the identity file) is
mounted, which would make it generate a fresh keypair onto the bare
mountpoint. Derives from the data dir path, so it resolves to the root
mount (a no-op) when the data dir lives on the SD card.
</content>
</entry>
<entry>
<title>openhop/repeater: fixes from first real deploy on ubuntu</title>
<updated>2026-08-02T00:24:23Z</updated>
<author>
<name>Luke Hoersten</name>
<email>luke@hoersten.org</email>
</author>
<published>2026-08-02T00:24:23Z</published>
<link rel='alternate' type='text/html' href='https://src.nth.io/luke/ansible-roles/commit/?id=254577c537e20dbd2e365c63773e2010f3c8374d'/>
<id>urn:sha1:254577c537e20dbd2e365c63773e2010f3c8374d</id>
<content type='text'>
- create spi/gpio groups and udev device rules (Raspberry Pi OS ships them, Ubuntu does not)
- hardware CS via spidev (cs_pin -1); a manual cs_pin on a kernel-owned CE line fails EBUSY
- align RAK6421 pin maps with upstream's hardware catalog: en_pins for the FEM enables,
  gpiod backend on chip 0 (catalog says chip 1, wrong for Pi 4)
- us RF preset is now MeshCore USA/Canada (Recommended): 910.525 / SF7 / BW62.5 / CR5
- set storage.storage_dir; omit mqtt_brokers entirely (any key enables the MQTT pusher)
- fetch radio-settings/radio-presets json into the data dir (pip omits them and the web
  setup wizard's hardware step is empty without them)
- config deployed 0660 with a vaultable repeater.security block so the daemon can persist
  credentials and re-templates no longer wipe them
- sudoers rule so the web UI can restart the service after config changes
</content>
</entry>
<entry>
<title>openhop/repeater: add MeshCore repeater role</title>
<updated>2026-07-26T15:36:29Z</updated>
<author>
<name>Luke Hoersten</name>
<email>luke@hoersten.org</email>
</author>
<published>2026-07-26T15:36:29Z</published>
<link rel='alternate' type='text/html' href='https://src.nth.io/luke/ansible-roles/commit/?id=38323823b85b2ae8deef788a0f49e36c789c12f4'/>
<id>urn:sha1:38323823b85b2ae8deef788a0f49e36c789c12f4</id>
<content type='text'>
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).
</content>
</entry>
</feed>
