Commit Graph
14682 Commits
Author SHA1 Message Date
evangelostsak d4056891c0 fix(wireguard): name the gate after the peers it waits for, not the hub 2026-10-16 03:40:15 +02:00
evangelostsak 8f105bae6a feat(wireguard): gate and size the tunnel against every dialled peer
The handshake gate already waits on every peer a non-hub interface holds.
The MTU probe and the path MTU targets now follow the dialled peers too, which
for a spoke is still its hub and in a full mesh is every peer.
2026-10-16 03:40:15 +02:00
evangelostsak 13f627ba23 feat(wireguard): every member of a full mesh listens and dials its peers
The hub listens and a spoke dials its hub, as before. In a full mesh every
member listens on the mesh port and keeps every peer alive.
2026-10-16 03:40:15 +02:00
evangelostsak 81db994578 test(wireguard): the filters are the mesh SPOT functions 2026-10-16 03:40:15 +02:00
evangelostsak be0dff54a8 test(wireguard): package the filter plugin tests 2026-10-16 03:40:15 +02:00
evangelostsak 0768c673f6 test(wireguard): package the role's unit tests 2026-10-16 03:40:15 +02:00
evangelostsak 7ebba332a7 feat(wireguard): expose the dialled peers and the listen flag as filters 2026-10-16 03:40:15 +02:00
evangelostsak 617879f680 test(mesh-cli): full meshes peer every member with every other
Covers the declarations read from every host, the refusal of differing ones,
every peer pinned to its /32, no hub anywhere, the host of one mesh holding no
peer of the other, and a second run leaving every file alone.
2026-10-16 03:40:15 +02:00
evangelostsak f534c973a7 test(mesh-cli): an inventory without a hub host has no hub 2026-10-16 03:40:15 +02:00
evangelostsak 73d421f70c feat(mesh-cli): write full meshes for an inventory without a hub
The swarm output is byte-identical: the dev layout and the three-mesh example,
each with and without a controller, produced the same host_vars, wg.conf and
stdout before and after, with deterministic keys.
2026-10-16 03:40:15 +02:00
evangelostsak 28468b33d2 feat(mesh-cli): read the declarations of every host when there is no hub
Under a svc-swarm-manager host the declarations stay the hub's own. Without
one, every host may declare the meshes, and hosts declaring different ones are
refused rather than merged, because a member would otherwise render a mesh
its peers do not know.
2026-10-16 03:40:15 +02:00
evangelostsak acef74a150 feat(mesh-cli): plan meshes without a hub
With no hub every joined host is a member, addressed from the same offsets a
spoke takes, and each host is primary on the first declared mesh it joined.
2026-10-16 03:40:15 +02:00
evangelostsak 009f30241c feat(mesh-cli): a mesh without a hub is a full mesh
A topology may carry no hub. Its meshes then peer every member with every
other one, which is what a Compose deployment of several hosts needs: there
is no manager to route through.
2026-10-16 03:40:15 +02:00
evangelostsak 759bb237b4 test(mesh): hub, spoke and full-mesh members listen and dial as planned 2026-10-16 03:40:15 +02:00
evangelostsak d8d59ffdac feat(mesh): tell which peers an interface dials and whether it listens
A spoke dials its hub and does not listen, the hub listens and dials nobody,
and a member of a full mesh, which is neither a hub nor peered with one,
listens and dials every peer. The role reads these instead of testing is_hub
inline, so a full mesh needs no field the swarm inventory does not carry.
2026-10-16 03:40:15 +02:00
evangelostsak 20c42ab48b docs(requirements): 038 full-mesh WireGuard for Compose deployments
Compose hosts of one inventory join full meshes that each role opts into
through its networks.meshes, with no swarm manager and nothing hardcoded into
a role. The vpn axis decides per CI row, on a role's smallest variant only,
and a CLI test proves the shape on three throwaway hosts: I and II reach each
other, II and III reach each other, I and III do not.
2026-10-16 03:40:15 +02:00
evangelostsak 91de85a4d5 docs(requirements): list 037 under the archive 2026-10-16 01:43:33 +02:00
evangelostsak 86745f92ec docs(requirements): archive 037, every criterion closed
Ticked with evidence from the local lab and the fork's CI runs: both VPNs
including the backup host, swarm advertising on the mesh, the prologue and
both passes over the mesh, key rotation converging, the mesh-off arm, the
axis rotation, pin and title, the measured MTU, nothing naming a mesh, the
three-mesh example, the role installing its own tooling, the NFS mount over
the mesh, the controller reaching the hosts it deploys over, the gate, and
swarm control, overlay and NFS carried over the mesh.

Dropped: rotating over a live mesh connection, which the prologue avoids by
rotating before the transport moves; the role being inert in compose, which
the backup host now contradicts; the failing-mount half of the NFS
criterion; and the port-reachability criterion with its claim in the user
story.

With nothing left open, make requirements-archive moved its heading into the
README and deleted the file.
2026-10-16 01:43:33 +02:00
evangelostsak 72fdce6aa0 test(wireguard): the layer runs in swarm and on hosts given a mesh
Swarm always runs it, a compose host owning a mesh address runs it, a
compose host without one stays untouched, and an entry another host owns,
as the lab's credential reset leaves behind, does not count.
2026-10-16 01:43:33 +02:00
evangelostsak 7e8457f84c docs(wireguard): the role acts outside swarm on a host given a mesh 2026-10-16 01:43:33 +02:00
evangelostsak 57f86ba17b fix(wireguard): bring the mesh up on every host the CLI gave one
WIREGUARD_ENABLED followed the deployment mode alone. A swarm's backup host
is deployed in its own play, which resolves to compose mode, so the role was
included there and skipped: the hub listed it as a data peer and no tunnel
ever answered for it.

The layer now runs in swarm, as before, and on any host that owns a mesh
address the CLI wrote for it, read through the mesh_address lookup. A
compose host without a mesh stays untouched.

Proven on the local swarm lab (svc-dns-unbound, development layout): the
backup host brought up data at 10.100.1.12, passed the handshake and MTU
gate against the hub, the hub saw both data peers handshake, the backup host
reached a worker on the swarm mesh through the manager, and the drill and
both passes stayed green.
2026-10-16 01:43:33 +02:00
kevinveenbirkenbach 89deb3b7ea Merge pull request #968 from infinito-nexus/fix/workspace/distro-ca-and-minitest
style: apply the autoformat output main drifted from
2026-10-16 01:36:15 +02:00
kevinveenbirkenbachandClaude Opus 5.5 1c35cdef91 style: apply the autoformat output main drifted from
`make quality-high` on main (fea6f31d9f) rewrote two files in its
autoformat step:

- roles/sys-service/handlers/refresh_systemctl_service.yml: the
  handler's `when` was wrapped by hand; the formatter wraps it at line
  width. Both forms parse to the same YAML.
- tests/unit/python/roles/web-app-nextcloud/test_onlyoffice_check_deadline.py:
  two over-long assertIn calls that ruff format splits.

A second autoformat run leaves the tree unchanged, so main is stable
under the formatter again.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-16 01:35:21 +02:00
Prageeth Panicker 4f1304b3b4 Merge remote-tracking branch 'origin/main' into feature/web-app-wazuh/add-role 2026-10-15 22:16:39 +00:00
Prageeth Panicker 8e4ba0f8a9 Merge remote-tracking branch 'origin/main' into feature/web-app-wazuh/add-role 2026-10-15 21:58:47 +00:00
kevinveenbirkenbach 20b2750b9d Merge branch 'main' of github.com:infinito-nexus/core 2026-10-15 23:51:25 +02:00
kevinveenbirkenbach fea6f31d9f Merge pull request #967 from infinito-nexus/fix/workspace/distro-ca-and-minitest
fix(workspace): CA anchors, minitest and mmdc's browser on non-Debian distros
2026-10-15 23:51:10 +02:00
kevinveenbirkenbachandClaude Opus 5.5 fad0c60e52 fix(lint): provision mmdc's browser libraries off apt and fail hard
On the Fedora, CentOS Stream and Manjaro workspace jobs install-lint
ran `puppeteer browsers install chrome-headless-shell --install-deps`
as root, and puppeteer rejected it with "apt-get does not seem to be
available". The installer only warned ("optional lint tool"), so
install-lint passed while mmdc had no browser.

--install-deps is now passed only where apt-get exists. Everywhere else
the libraries `ldd` reports missing are installed by soname: dnf and
yum through the RPM provide `<soname>()(64bit)`, pacman through the
first package `pacman -F usr/lib/<soname>` names (libgbm.so.1 is owned
by both mesa and mesa-amber, which conflict). browser_installed() also
requires every library to resolve, so the install-lint stamp stays
stale until the browser can actually load.

A failed npm install, a missing mmdc, a failed or timed-out browser
download and unresolved libraries now raise instead of warning.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-15 23:45:54 +02:00
kevinveenbirkenbachandClaude Opus 5.5 e6f552ca0a fix(install): provision minitest next to ruby on Arch and the RedHat family
The Manjaro workspace job failed test-unit-ruby with "cannot load such
file -- minitest". Debian vendors minitest in libruby, but Arch ships it
as ruby-minitest and Fedora and CentOS Stream as rubygem-minitest, none
of which ruby pulls in. ensure_ruby_present now probes
`require "minitest"` and installs the distro package when the probe
fails, then fails loudly if minitest is still missing.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-15 23:45:54 +02:00
kevinveenbirkenbachandClaude Opus 5.5 2756fd56f1 fix(cache): install CA anchors where every update-ca-trust family reads them
The Fedora and CentOS Stream workspace jobs failed TLS to pypi.org,
registry.npmjs.org and repo.packagist.org (CERTIFICATE_VERIFY_FAILED,
curl error 7). package-frontend/ca.sh put the frontend CA into the Arch
anchor dir /etc/ca-certificates/trust-source/anchors, which p11-kit on
the RedHat family never reads.

Probing for the anchor dir does not fix it: with-ca-trust.sh creates
both /etc/pki/ca-trust/source/anchors and
/etc/ca-certificates/trust-source/anchors on every update-ca-trust host,
so the probe in registry-ca.sh already picks the RedHat dir on a reused
Arch runner. Both scripts now install into both dirs, rebuild only when
one of them changed, and take CA_ROOT so unit tests run them against a
fake root.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-15 23:45:53 +02:00
Prageeth Panicker e844ba9022 fix(web-app-wazuh): keep the vulnerability scanner data out of the backup
Mount queue/vd as its own volume with backup: false. The scanner removes its folders at start, so the mount sits on queue/vd and not on queue/vd/feed.
2026-10-15 21:42:55 +00:00
Prageeth Panicker 86cc6b03d2 fix(web-app-wazuh): raise dashboard memory limit to 1g
The kernel OOM-killed the dashboard node process at the 256m limit, which caused HTTP 502 and a failing Playwright test.
2026-10-15 21:41:59 +00:00
kevinveenbirkenbach 9114478dd2 Merge remote-tracking branch 'origin/main' into fix/web-app-bluesky-pds-lxm 2026-10-15 22:56:22 +02:00
kevinveenbirkenbachandClaude Opus 5.5 a59eb5d347 docs(web-app-bluesky): escape the PDS admin password for curl's config
curl reads backslash escapes inside a quoted config value, so a password
with `"` or `\` reached the PDS altered (`a"b` as `admin:a`, `a\b` as
`admin:ab`). The sed step now escapes both characters before it builds
the `user` line.

Addresses the CodeRabbit review on #961.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-15 22:56:20 +02:00
kevinveenbirkenbach da537652c5 Merge branch 'main' of github.com:infinito-nexus/core 2026-10-15 22:46:00 +02:00
kevinveenbirkenbach ec2a4b96f0 Merge pull request #930 from infinito-nexus/fix/web-app-nextcloud/onlyoffice-settings-race
fix(web-app-nextcloud): write onlyoffice's server URL last and recheck it
2026-10-15 22:36:45 +02:00
kevinveenbirkenbach 92a990f185 Merge pull request #964 from infinito-nexus/update/version-sources-web-app-xwiki-20261015-7814da8
update(versions): update pins with a declared source (web-app-xwiki)
2026-10-15 22:19:03 +02:00
kevinveenbirkenbach 27093aa214 Merge pull request #965 from infinito-nexus/update/docker-image-versions-svc-ai-ollama-20261015-3532577
update(images): update Docker image versions (svc-ai-ollama)
2026-10-15 22:18:27 +02:00
kevinveenbirkenbach 246757434a Merge pull request #966 from infinito-nexus/update/docker-image-versions-web-app-erpnext-20261015-d83407b
update(images): update Docker image versions (web-app-erpnext)
2026-10-15 22:17:40 +02:00
infinito-nexus-updater[bot] 5b1c04ccb6 update(images): update Docker image versions (web-app-erpnext) 2026-10-15 20:01:00 +00:00
infinito-nexus-updater[bot] 284961aa2b update(images): update Docker image versions (svc-ai-ollama) 2026-10-15 20:00:54 +00:00
infinito-nexus-updater[bot] 279aae5713 update(versions): update pins with a declared source (web-app-xwiki) 2026-10-15 19:54:46 +00:00
evangelostsak 1c5ba164f2 Merge remote-tracking branch 'upstream/main' into feature/svc-net-wireguard
No conflicts across 121 incoming commits. The one file both sides changed is
tasks/stages/01_constructor.yml: upstream parks an applications carrier for
the swarm bootstrap roles after the add_host tasks, and keys the carrier on
the tokens file as well. This branch's mesh bootstrap opens and drops its own
block-scoped carrier before that point, so both keep working as written.

Upstream also brings ruff 0.17.0, distro-derived env keys, a scoped act outer
teardown, the stalwart relay rule, the onion apex redirect and image and
version updates; ruff 0.17 reformats nothing on this branch.
2026-10-15 21:27:11 +02:00
kevinveenbirkenbach 42cf70f7d6 Merge pull request #956 from infinito-nexus/fix/sys-ctl-hlth-csp/crawl-redirects/929
fix(sys-ctl-hlth-csp): crawl redirect sources whose target this node serves
2026-10-15 21:25:46 +02:00
kevinveenbirkenbach 0af57ff552 Merge branch 'main' of github.com:infinito-nexus/core 2026-10-15 20:25:27 +02:00
kevinveenbirkenbach 8b561740b6 Merge remote-tracking branch 'origin/main' into fix/web-app-bluesky-pds-lxm 2026-10-15 18:13:57 +02:00
kevinveenbirkenbach 02569bced5 Merge pull request #962 from infinito-nexus/update/docker-image-versions-web-app-funkwhale-20261015-a196230
update(images): update Docker image versions (web-app-funkwhale)
2026-10-15 18:10:25 +02:00
kevinveenbirkenbach dd71055c4f Merge pull request #963 from infinito-nexus/update/docker-image-versions-web-app-gitlab-20261015-dffb7dd
update(images): update Docker image versions (web-app-gitlab)
2026-10-15 18:09:54 +02:00
kevinveenbirkenbach 37e5f04208 Merge remote-tracking branch 'origin/main' into fix/sys-ctl-hlth-csp/crawl-redirects/929 2026-10-15 18:04:29 +02:00
kevinveenbirkenbach cf263b28a3 Merge remote-tracking branch 'origin/main' into fix/web-app-bluesky-pds-lxm 2026-10-15 18:04:19 +02:00