<feed xmlns='http://www.w3.org/2005/Atom'>
<title>luke/ansible-roles/dendrite, 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-07-31T19:31:51Z</updated>
<entry>
<title>install from the 26.04 archive instead of third-party sources</title>
<updated>2026-07-31T19:31:51Z</updated>
<author>
<name>Luke Hoersten</name>
<email>luke@hoersten.org</email>
</author>
<published>2026-07-31T19:31:51Z</published>
<link rel='alternate' type='text/html' href='https://src.nth.io/luke/ansible-roles/commit/?id=846782c44c1c65e7b755de76fd50d86fc7c9636e'/>
<id>urn:sha1:846782c44c1c65e7b755de76fd50d86fc7c9636e</id>
<content type='text'>
- rpi-base: log2ram from the archive, drop the azlux repo (which still
  pointed at debian buster)
- aws-s3-backup: apt awscli (v2) instead of pip v1; drop boto3, nothing
  used it
- scrypted, koreader-sync: docker.io and docker-compose-v2 instead of
  the docker.com repo pinned to noble; the docker-ce removal lives in
  cleanup-third-party.yaml since the packages collide on files
- miniflux: the archive package with a dbconfig preseed; drops the
  github binary download and the bundled unit
- prometheus/client: note the nginx and postgres exporters are in apt
- dendrite/build, nostr/build: unversioned golang-go instead of pinned
  golang-1.21-go and a hand symlink that shadowed the real go
</content>
</entry>
<entry>
<title>dendrite, relayer: percent-encode db passwords in connection urls</title>
<updated>2026-07-30T23:19:08Z</updated>
<author>
<name>Luke Hoersten</name>
<email>luke@hoersten.org</email>
</author>
<published>2026-07-30T23:19:08Z</published>
<link rel='alternate' type='text/html' href='https://src.nth.io/luke/ansible-roles/commit/?id=00e966edfe45e594e8491bda3a235b7a7964f759'/>
<id>urn:sha1:00e966edfe45e594e8491bda3a235b7a7964f759</id>
<content type='text'>
Passwords containing '/' are invalid unencoded in a url authority and
break Go's url.Parse (invalid port after host). Latent until a restart
forced a config re-read. jinja urlencode leaves '/' unescaped, hence
the extra replace.
</content>
</entry>
<entry>
<title>build roles: create build_work_dir and redirect caches per-role</title>
<updated>2026-07-26T21:46:21Z</updated>
<author>
<name>Luke Hoersten</name>
<email>luke@hoersten.org</email>
</author>
<published>2026-07-26T21:46:21Z</published>
<link rel='alternate' type='text/html' href='https://src.nth.io/luke/ansible-roles/commit/?id=0dfd81ca1696053b366a39cab02e54205a09fb20'/>
<id>urn:sha1:0dfd81ca1696053b366a39cab02e54205a09fb20</id>
<content type='text'>
Each build role now creates build_work_dir itself and sets its own toolchain's
cache env (GOPATH/GOCACHE/GOMODCACHE, CARGO_HOME, npm cache, MIX/HEX) on its
build tasks, so the roles are self-contained instead of relying on a play-level
environment and pre_task.
</content>
</entry>
<entry>
<title>build roles: stage checkouts + artifacts under build_work_dir</title>
<updated>2026-07-26T21:05:40Z</updated>
<author>
<name>Luke Hoersten</name>
<email>luke@hoersten.org</email>
</author>
<published>2026-07-26T21:05:40Z</published>
<link rel='alternate' type='text/html' href='https://src.nth.io/luke/ansible-roles/commit/?id=a173d5c8f149b4dde505fd4ab5257fb4cbc6911e'/>
<id>urn:sha1:a173d5c8f149b4dde505fd4ab5257fb4cbc6911e</id>
<content type='text'>
Move every build role's working dir off /tmp (the SD card) to {{build_work_dir}},
which the playbook points at the SSD on the build host. nostr and pleroma stage
their artifacts inside their own build dirs so the shared work dir can't collide,
while preserving the archive top-level names (relayer, release) that the server
roles depend on.
</content>
</entry>
<entry>
<title>Build all roles from source with versioned artifacts</title>
<updated>2026-04-26T00:54:49Z</updated>
<author>
<name>Luke Hoersten</name>
<email>luke@hoersten.org</email>
</author>
<published>2026-04-26T00:54:49Z</published>
<link rel='alternate' type='text/html' href='https://src.nth.io/luke/ansible-roles/commit/?id=6a8cb5f10557733f1521035d57a191b12832d634'/>
<id>urn:sha1:6a8cb5f10557733f1521035d57a191b12832d634</id>
<content type='text'>
- Add pleroma/build role to compile from source (OTP binaries no longer published)
- Install Elixir 1.18.3 manually on Ubuntu Noble (ships 1.14, needs 1.15+)
- Standardize all build roles to produce versioned .tar.gz artifacts
- Add version defaults to all server roles (bin, dendrite, nostr/relayer)
- Switch server roles from get_url to unarchive for .tar.gz installs
- Add build_srv_dir variable to all build roles
- Deploy pleroma styles.json so custom FE themes appear in picker
- Fix pleroma OTP install: version check, root ownership, auto-cleanup old releases
- Fix pleroma config: log level :warn -&gt; :warning, remove availableStyles
- Add wait_for grafana readiness before dashboard install
- Set minecraft ops changed_when: false
</content>
</entry>
<entry>
<title>Harden role security: file permissions, service binding, no_log, strict defaults</title>
<updated>2026-04-06T02:19:55Z</updated>
<author>
<name>Luke Hoersten</name>
<email>luke@hoersten.org</email>
</author>
<published>2026-04-06T02:19:55Z</published>
<link rel='alternate' type='text/html' href='https://src.nth.io/luke/ansible-roles/commit/?id=06b69bd8def0aae07d3fb565d19193be1a8dfe20'/>
<id>urn:sha1:06b69bd8def0aae07d3fb565d19193be1a8dfe20</id>
<content type='text'>
- Add no_log: true to tasks that handle passwords/secrets
- Tighten config file permissions (0644 -&gt; 0600/0640 where appropriate)
- Bind pleroma to 127.0.0.1 instead of 0.0.0.0
- Tighten ergo unix socket mode 0777 -&gt; 0770
- Remove weak defaults; roles now fail explicitly if required vars not set
</content>
</entry>
<entry>
<title>Added soju role.</title>
<updated>2026-03-28T18:42:08Z</updated>
<author>
<name>Luke Hoersten</name>
<email>luke@hoersten.org</email>
</author>
<published>2026-03-28T18:42:08Z</published>
<link rel='alternate' type='text/html' href='https://src.nth.io/luke/ansible-roles/commit/?id=45da5bca82200af63b0ee16479b267eb209386f3'/>
<id>urn:sha1:45da5bca82200af63b0ee16479b267eb209386f3</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Update versions and fix nginx logging.</title>
<updated>2026-03-26T02:42:49Z</updated>
<author>
<name>Luke Hoersten</name>
<email>luke@hoersten.org</email>
</author>
<published>2026-03-26T02:42:49Z</published>
<link rel='alternate' type='text/html' href='https://src.nth.io/luke/ansible-roles/commit/?id=58d4444b06de49587417791bb06a4fe1aeda571d'/>
<id>urn:sha1:58d4444b06de49587417791bb06a4fe1aeda571d</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Fixed log rotation and log2ram sizing.</title>
<updated>2026-03-24T03:22:36Z</updated>
<author>
<name>Luke Hoersten</name>
<email>luke@hoersten.org</email>
</author>
<published>2026-03-24T03:22:36Z</published>
<link rel='alternate' type='text/html' href='https://src.nth.io/luke/ansible-roles/commit/?id=1859f62813f0c586ea49f912944fb25efd60520f'/>
<id>urn:sha1:1859f62813f0c586ea49f912944fb25efd60520f</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Updated versions.</title>
<updated>2025-05-29T00:24:44Z</updated>
<author>
<name>Luke Hoersten</name>
<email>luke@hoersten.org</email>
</author>
<published>2025-05-29T00:24:44Z</published>
<link rel='alternate' type='text/html' href='https://src.nth.io/luke/ansible-roles/commit/?id=cb74bdc5ae5194ceeda48aa92ca26ca685c737f9'/>
<id>urn:sha1:cb74bdc5ae5194ceeda48aa92ca26ca685c737f9</id>
<content type='text'>
</content>
</entry>
</feed>
