infra-edge-lab · v0.1.0
0017. node_exporter from the release archive with a pinned checksum
- Status: accepted
- Date: 2026-10-21
Context
Every host exports its metrics with node_exporter, which a Prometheus server, the observability pack and the backup jobs (through the textfile collector) build on. The version must be the same on Debian 13 and Ubuntu 24.04, the download must be checked, and the exporter must never listen on a public address.
Considered options
- The release archive from GitHub, checked against a sha256 pinned in the role, unpacked into a versioned folder and run by a unit the role writes.
- The
prometheus.prometheus.node_exporterrole. - The distribution package
prometheus-node-exporter.
Decision
Chosen option: 1, version 1.12.1, because it gives one version on both platforms and a checksum
that a reviewer can compare with the release’s sha256sums.txt.
- The role pins
monitoring_node_exporter_versionand a sha256 per architecture (amd64, arm64), checked on 2026-10-21 against the release’ssha256sums.txtand GitHub’s asset digests.get_urlrefuses an archive with another checksum. /usr/local/bin/node_exporterlinks to the unpacked version, so an upgrade or a rollback is a change of the version and the checksums, and a restart.- The unit runs as its own system user without login, with
NoNewPrivileges,ProtectSystem=strict, no capabilities and restricted address families. - The listen address must be loopback or private; a firewall drop-in opens the port for named sources only.
Option 2 checks the archive against a checksum file fetched from the same release at run time,
which only proves the transfer, and adds a collection that the ansible package does not bundle
(ADR 0016). Option 3 gives different
versions per distribution (Debian 13 and Ubuntu 24.04 ship different releases) and older
collectors.
Consequences
- Good: the same binary everywhere, verified against a value under review.
- Bad: updates are manual: version and both checksums change together in one pull request.
- Bad: the role keeps a unit file of its own instead of the one a package or a shared role would maintain.
docs/adr/0017-node-exporter-from-the-release-archive.md on GitHub
Licensed under Apache-2.0. Source: luminare-dev/infra-edge-lab at v0.1.0.