<feed xmlns='http://www.w3.org/2005/Atom'>
<title>luke/bitcoin-ansible-roles, branch main</title>
<subtitle>Ansible roles for Bitcoin and Lightning Network node
</subtitle>
<id>https://src.nth.io/luke/bitcoin-ansible-roles/atom?h=main</id>
<link rel='self' href='https://src.nth.io/luke/bitcoin-ansible-roles/atom?h=main'/>
<link rel='alternate' type='text/html' href='https://src.nth.io/luke/bitcoin-ansible-roles/'/>
<updated>2026-07-31T19:30:30Z</updated>
<entry>
<title>lnurld/build: use unversioned golang-go</title>
<updated>2026-07-31T19:30:30Z</updated>
<author>
<name>Luke Hoersten</name>
<email>luke@hoersten.org</email>
</author>
<published>2026-07-31T19:30:30Z</published>
<link rel='alternate' type='text/html' href='https://src.nth.io/luke/bitcoin-ansible-roles/commit/?id=4a881bd72dceb1d595b5f73554f466bc4540c739'/>
<id>urn:sha1:4a881bd72dceb1d595b5f73554f466bc4540c739</id>
<content type='text'>
The pinned golang-1.21-go was a noble leftover; the hand symlink
shadowed the real go on 26.04.
</content>
</entry>
<entry>
<title>lnd: verify release tarballs against pinned sha256s</title>
<updated>2026-07-31T19:30:30Z</updated>
<author>
<name>Luke Hoersten</name>
<email>luke@hoersten.org</email>
</author>
<published>2026-07-31T19:30:30Z</published>
<link rel='alternate' type='text/html' href='https://src.nth.io/luke/bitcoin-ansible-roles/commit/?id=9082f4e78d3d948b38d6030564ea82056168165d'/>
<id>urn:sha1:9082f4e78d3d948b38d6030564ea82056168165d</id>
<content type='text'>
lnd sums come from the signed release manifest. lndconnect publishes
no checksums, so its pin is the tarball hash cross-checked against the
binary in production since 2020.
</content>
</entry>
<entry>
<title>bitcoind: verify the release tarball against a pinned sha256</title>
<updated>2026-07-31T19:30:29Z</updated>
<author>
<name>Luke Hoersten</name>
<email>luke@hoersten.org</email>
</author>
<published>2026-07-31T19:30:29Z</published>
<link rel='alternate' type='text/html' href='https://src.nth.io/luke/bitcoin-ansible-roles/commit/?id=960d14f9f2af1990dac0ae887c150d8a9ea00dce'/>
<id>urn:sha1:960d14f9f2af1990dac0ae887c150d8a9ea00dce</id>
<content type='text'>
Pinned per arch from the official SHA256SUMS; download and unarchive
are split so nothing extracts unless the tarball matches. Update the
pins when bumping bitcoind_version.
</content>
</entry>
<entry>
<title>bitcoind-prometheus-exporter: grant read access to bitcoin.conf</title>
<updated>2026-07-30T23:19:43Z</updated>
<author>
<name>Luke Hoersten</name>
<email>luke@hoersten.org</email>
</author>
<published>2026-07-30T23:19:43Z</published>
<link rel='alternate' type='text/html' href='https://src.nth.io/luke/bitcoin-ansible-roles/commit/?id=81809160f41aed1161070148d8cf60a1ed24a6f3'/>
<id>urn:sha1:81809160f41aed1161070148d8cf60a1ed24a6f3</id>
<content type='text'>
The exporter reads rpc credentials from bitcoin.conf but the bitcoind
role writes it 0600 bitcoin:bitcoin, so the prometheus user could
never read it (only long-lived processes predating the tightened mode
kept working). Make the conf group-readable and add prometheus to the
bitcoin group.
</content>
</entry>
<entry>
<title>bitcoind: harden the service unit for boot and shutdown</title>
<updated>2026-07-30T23:19:43Z</updated>
<author>
<name>Luke Hoersten</name>
<email>luke@hoersten.org</email>
</author>
<published>2026-07-30T23:19:43Z</published>
<link rel='alternate' type='text/html' href='https://src.nth.io/luke/bitcoin-ansible-roles/commit/?id=4d15c92944280312d47198d6861918b3316784bf'/>
<id>urn:sha1:4d15c92944280312d47198d6861918b3316784bf</id>
<content type='text'>
- order after network-online: rpcbind fails with getaddrinfo errors
  when bitcoind starts before addresses are configured
- restart on failure so a transient bad start heals itself
- 30min stop timeout: the chainstate flush can far exceed systemd's
  90s default, and a SIGKILL there risks a slow replay or a reindex
</content>
</entry>
<entry>
<title>lnurld/build: create build_work_dir and redirect Go caches</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/bitcoin-ansible-roles/commit/?id=f0d085279b2b5310c6f175d01f0d20afdad85e0e'/>
<id>urn:sha1:f0d085279b2b5310c6f175d01f0d20afdad85e0e</id>
<content type='text'>
Create the work dir and set GOPATH/GOCACHE/GOMODCACHE on the build task, so the
role is self-contained rather than relying on the playbook's environment.
</content>
</entry>
<entry>
<title>lnurld/build: force a real tarball for the single-file artifact</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/bitcoin-ansible-roles/commit/?id=45f9acddf48de0e6e1e05aaf4a37e77552c5324c'/>
<id>urn:sha1:45f9acddf48de0e6e1e05aaf4a37e77552c5324c</id>
<content type='text'>
community.general.archive (&gt;=10) compresses a lone file into a bare .gz instead
of a tarball, which the server can't unarchive. Set force_archive: true.
</content>
</entry>
<entry>
<title>lnurld/build: stage checkout under build_work_dir instead of /tmp</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/bitcoin-ansible-roles/commit/?id=a7ea89331b44f506e1d0d617065b3faaff06ebd8'/>
<id>urn:sha1:a7ea89331b44f506e1d0d617065b3faaff06ebd8</id>
<content type='text'>
</content>
</entry>
<entry>
<title>bitcoind: bump to 31.0</title>
<updated>2026-07-21T00:01:32Z</updated>
<author>
<name>Luke Hoersten</name>
<email>luke@hoersten.org</email>
</author>
<published>2026-07-21T00:01:32Z</published>
<link rel='alternate' type='text/html' href='https://src.nth.io/luke/bitcoin-ansible-roles/commit/?id=f7ac758286927494d8238a28702b85386a80478e'/>
<id>urn:sha1:f7ac758286927494d8238a28702b85386a80478e</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Bind lnd restlisten to LAN interface instead of loopback</title>
<updated>2026-05-26T12:29:24Z</updated>
<author>
<name>Luke Hoersten</name>
<email>luke@hoersten.org</email>
</author>
<published>2026-05-26T12:29:24Z</published>
<link rel='alternate' type='text/html' href='https://src.nth.io/luke/bitcoin-ansible-roles/commit/?id=272788e6107e8353b7b21a3a8363be9e8ac62541'/>
<id>urn:sha1:272788e6107e8353b7b21a3a8363be9e8ac62541</id>
<content type='text'>
Nginx reverse proxy on btc.nth.io runs on a separate host from lnd,
so 127.0.0.1 binding broke cross-host proxying (502 Bad Gateway).
Bind to default_ipv4 to keep REST off other interfaces while still
reachable from the proxy host.
</content>
</entry>
</feed>
