zero-gravity: detect tarball layout — galileo 3.0.8 moved binaries to a shared root bin/ #63
Reference in New Issue
Block a user
Delete Branch "zerog-tarball-layout-tolerant"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Fixes a build break I introduced. vibe-node #2912 (galileo
3.0.3 → 3.0.8, merged asbc4cecf) broke the de-32 build — jobad580587:Root cause
The Dockerfile hardcoded
galileo -> mv <root>/rpc /0g. That held for 3.0.3, where every profile dir carried its own copy of the binaries. 3.0.8 deduplicated them into a shared<root>/bin/— which is why the tarball went 168 MB → 69 MB — leavingrpc/as configs-only. So the move produced configs and no binaries, and the build died two layers later on achmod.Verified by downloading and listing all three:
does <root>/rpc existis not a sufficient test — my first attempt at this fix used exactly that and still failed, because 3.0.8 does shiprpc/; it just no longer holdsbin/. The test run caught it.The change
Take configs from the profile dir when present, then top the binaries up from the shared root
bin/when the profile dir didn't supply them:Then assert both binaries immediately after extraction, naming the chain, the version and the known layouts — so the next upstream reshuffle reports itself at the point of failure instead of as an anonymous
chmoderror two layers downstream.Verification — real artifacts, not synthetic
All three now yield an identical
/0g, so 3.0.8 reaches parity with 3.0.3:The configs the templates reference —
/0g/geth-config.tomland/0g/kzg-trusted-setup.json— are present in every case.Negative case, a synthetic tarball with binaries in neither location:
⚠️ Not built as a container image — no docker daemon on the controller. The extraction path is exercised verbatim against the real tarballs; the surrounding layers are unchanged. The real build happens on de-32 after deploy, and job
ad580587can simply be re-run.What I got wrong
I verified the aristotle 1.0.6 tarball layout end-to-end before merging #3356 — downloaded it, confirmed
bin/0gchaindandbin/geth— and said so explicitly. I did not apply the same check to galileo 3.0.8 when merging #2912, and that check would have caught this before it reached a host.#2912's own verification (a clean
./update.sh) only ever proved the compose renders, never that the image builds. Those are different claims, and I let the first stand in for the second.Impact is contained: 0g has zero dRPC entries and no
rpcs:host assignment, so this is the de-32 bench only — no serving node, no revenue. aristotle 1.0.6 built and exported cleanly in the same job, which independently validates #61 and #3356 on a real build.Related: #61 (merged) made the download fail loudly; this makes the extraction fail loudly. Same lesson, adjacent step.