Files
command-center/agent/managed-skills/gluetun-dependent-boot-race-recovery/SKILL.md
T

2.9 KiB

name, description
name description
gluetun-dependent-boot-race-recovery Diagnose the Dankclaw pattern where gluetun is active but its netns-sharing dependents (searxng, marreta, marreta-browser) are inactive (dead) with "Dependency failed" after a reboot — cascade-recover them and tie it to e2e 502/SSO failures.

Gluetun boot-race: netns dependents dead at boot, service is active

Signature

After a dankclaw reboot, gluetun.service is ACTIVE, yet e2e fails on search.franksdank.cloud (502 on the authenticated pass), the Marreta tile shows a blank interstitial, and the homepage crawl reports vhost resets. systemctl --user status <dep> --no-pager shows:

Active: inactive (dead)
<host> systemd[2224]: Dependency failed for <dep>.service
<host> systemd[2224]: <dep>.service: Job ... failed with result 'dependency'

Cause

Quadlet Network=gluetun.container emits Requires=/After= on gluetun.service. When gluetun's start job fails once transiently at boot and Restart= re-arms it seconds later, the dependents' start jobs are already consumed and are NEVER re-armed — they sit inactive (dead) indefinitely while gluetun runs. Restart=always on the dependent does not help: the service never ran, so the restart policy never armed.

Diagnosis census (rootless, run as dank, NO sudo)

export XDG_RUNTIME_DIR=/run/user/$(id -u)
uptime   # reboot is the trigger
systemctl --user is-active gluetun searxng searxng-valkey marreta marreta-browser
systemctl --user status <dep> --no-pager | head  # "Dependency failed" line
journalctl --user --since "<boot>" | grep -iE "<dep>|dependency"

Dependents of the gluetun netns on dankclaw: searxng, marreta, marreta-browser (valkey is plain-networked and survives).

Recovery (order matters: browser before marreta)

systemctl --user start marreta-browser marreta
systemctl --user start searxng

Verify: podman ps shows them; curl http://127.0.0.1:8081/healthz (searxng) and gluetun-published 8082 (marreta) answer; then rerun the Playwright gate (tests/e2e/run.sh) — the 12-crawl / 13-sso / 16-marreta specs are the trip wires for this fault.

Distinguish from the dead-pause-process failure

The 2026-09-16 rootless-pause-process death breaks ALL podman commands and every quadlet loops; this fault leaves podman fully functional and only the gluetun-dependency chain is dead. The reboot repairs the former; manual cascade-start repairs this one.

Open gap (dankclaw, as of 2026-10-15)

The race recurred (observed 2026-10-15 boot 01:41). Quadlet law for these units has no cure inside the .container files themselves; options are a systemd user-level drop-in on gluetun (ExecStartPost=/usr/bin/systemctl --user restart searxng marreta) or converting the dependents' dependency to BindsTo + StartLimit retry semantics. Fleet precedent for boot-order pain: searxng/gluetun ordering, observability reboot gaps (AGENTS.md).