<feed xmlns='http://www.w3.org/2005/Atom'>
<title>luke/ansible-roles/nostr, 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>relayer, soju: order services after postgresql at boot</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=6f573b9d12e6fa2f6a7dbebb41ccfbbd966c82e7'/>
<id>urn:sha1:6f573b9d12e6fa2f6a7dbebb41ccfbbd966c82e7</id>
<content type='text'>
relayer had Requires= without After=, which does not order startup;
soju's packaged unit has no postgres ordering at all, so both raced
the postgres socket at boot and stayed failed. Adds After= to the
relayer unit and a systemd drop-in for soju.
</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: force real tarballs for single-file artifacts</title>
<updated>2026-07-26T21:31:56Z</updated>
<author>
<name>Luke Hoersten</name>
<email>luke@hoersten.org</email>
</author>
<published>2026-07-26T21:31:56Z</published>
<link rel='alternate' type='text/html' href='https://src.nth.io/luke/ansible-roles/commit/?id=28c1fc8ea39f0fdb244f08f386ed81a2c68c0f5c'/>
<id>urn:sha1:28c1fc8ea39f0fdb244f08f386ed81a2c68c0f5c</id>
<content type='text'>
community.general.archive (&gt;=10) compresses a lone file into a bare .gz instead
of a tarball, so the mattertimesync/bin/nostr artifacts failed the server-side
unarchive. Set force_archive: true so the archive module emits a real
single-member .tar.gz, consistent with the multi-file dendrite/pleroma builds.
</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>Add no_log to nostr relayer DB schema task</title>
<updated>2026-04-06T02:24:22Z</updated>
<author>
<name>Luke Hoersten</name>
<email>luke@hoersten.org</email>
</author>
<published>2026-04-06T02:24:22Z</published>
<link rel='alternate' type='text/html' href='https://src.nth.io/luke/ansible-roles/commit/?id=121f23c67f10a0ea3e8bff476f46fdec13112696'/>
<id>urn:sha1:121f23c67f10a0ea3e8bff476f46fdec13112696</id>
<content type='text'>
</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>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>
</feed>
