capabilities = ["CAP_NET_BIND_SERVICE"] is only needed to bind a port below 1024.
Listening on :8080 as an unprivileged user needs no capability at all ā use
capabilities = [] and drop them all. The example keeps it to show the syntax.
# state, PID and healthkeystonectl components
# the process really is confinedPID=$(curl -s localhost:8080/v1/components | jq -r '.[]|select(.name=="api")|.pid')grep -E 'Uid|CapEff|CapBnd|NoNewPrivs' /proc/$PID/status
# the artifact really was verified (no warning in the log)journalctl -u keystone | grep -i "signature\|verif"# re-applying changes nothingkeystonectl apply plan.toml && keystonectl components
That last one is the check people skip: if the PID changed, something in your recipe
is making the agent think it changed. Usually an edited recipe with the same version
ā the digest is what the agent compares, not the version string.