v0.4.7
Signedpublished August 18, 2026What changed
Fixed
- Installing with userns-remap enabled left the server crash-looping on
unable to open database file (14). With daemon-level userns-remap on, Docker creates new named-volume directories owned by the remapped root (100000:100000), not by0:0.devgrail-serverdeliberately opts out of the remap (userns_mode: host, so it is real uid 0) and runscap_drop: ALL— and root withoutCAP_DAC_OVERRIDEgets no permission bypass, so it could not write a directory it did not own. Every SQLite open returnedSQLITE_CANTOPEN, the server never reached healthy, andinstall.shgave up after 180s. A one-shotdevgrail-data-initservice now chowns the volume to0:0beforedevgrail-serverstarts (condition: service_completed_successfully), holding onlyCAP_CHOWN. It re-runs on everycompose up, so the fixup is self-healing rather than install-time-only, and is a no-op on a host without remap, where the directory is already0:0. Only volumes created while remap is active were affected — a fresh install or a reinstall after enabling it.
Container images
Installer files
Signature
ecdsa-p256-sha256key f1f1eaf642454d65
One signature covers every artifact above. It is made off this host, and neither this site nor the registry behind it can check it — that is the point, and it is why verifying it catches things a checksum from the same server cannot. How to verify it.
Verify devgrail-container (amd64)
curl -fsSL https://web-dev.trixibot.com/api/registry/releases/v0.4.7 -o release.json
# -j, not -r: -r appends a newline the signer never saw, and the check fails.
jq -j '.signature.payload' release.json > payload
jq -r '.signature.signature' release.json | base64 -d > payload.sig
openssl dgst -sha256 -verify devgrail-release.pem -signature payload.sig payload
# -> Verified OK
# The payload must name this release, so an older signed one cannot be replayed.
head -2 payload
# ...and it must name this exact file. -qxF: whole line, literal.
grep -qxF 'image devgrail-container 15 amd64 1d8672a3e1dcf83d85ba670e6ff01cf4e3a445234b088ef9a08bf2a2c22f4e4f' payload && echo "digest is covered by the signature"The signed payload — shown for reading, not for verifying
Copy this from the manifest with jq -j, never from this page: the signature covers exact bytes, and rendering here drops the trailing newline the signer included.
devgrail-release-signature-v1
release v0.4.7
asset docker-compose.yml 14 bcf8204407e998b2d3a7beddecf741d83446b5d59d152d2a9562450eafb92e99
asset install.sh 14 0778997357114bc291f9f1c05084fa871bc92e2c80723ff9648c9fd13068002c
asset traefik-dynamic-http.yml 13 e344c8efd13c7d84996e2ebfbc75dcee2d995d8538c8a245c89c0e44fad0089b
asset traefik-dynamic.yml 14 d18fa561b8eb7d53b015284e0246b2d05953bf281b65269c1fae3d6883530db6
asset uninstall.sh 14 d8dc586f38e0cf33eadc126d75b303c660e970e55028f60ad4e2872c40cbaa71
image devgrail-container 15 amd64 1d8672a3e1dcf83d85ba670e6ff01cf4e3a445234b088ef9a08bf2a2c22f4e4f
image devgrail-container 15 arm64 0b1f4eae66086445f8088d101177282ef4d8a255a020c9657502d430afe76ec7
image devgrail-server 15 amd64 f7a09e32bb991686b4e683a16746ff6c2d62b277281b507bd66fd15e309e5e8d
image devgrail-server 15 arm64 35d1594e54444818940a70187f83b5f00a4f6433696abab9fb01d439beedc020