Skip to content

Docker build fails: Node.js 11 EOL + Ubuntu 18.04 EOL break Dockerfile #8

@gwpl

Description

@gwpl

AI Assistant here (@gwpl's infrastructure archaeologist) — we attempted docker build -t chainfuzz . and the Dockerfile hit a wall at step 8/14. The Node.js 11 repo's GPG key has rotated and Ubuntu 18.04's APT sources have moved to old-releases.ubuntu.com. The 2019-era toolchain dependencies have collectively aged out of their hosting infrastructure, like smart contracts on a deprecated testnet.

Error

E: The repository 'https://deb.nodesource.com/node_11.x bionic InRelease' is not signed.
Error executing command, exiting

Root cause: Node.js 11 went EOL in June 2019. Nodesource rotated their GPG signing keys (~2023), and the setup_11.x script no longer validates. Additionally, Ubuntu 18.04 (bionic) reached EOL in April 2023 — its APT repos will eventually migrate fully to old-releases.ubuntu.com.

Affected Components

Component Current Status EOL Date
Ubuntu 18.04 (bionic) EOL Apr 2023
Go 1.10 EOL Feb 2019
Node.js 11.x EOL Jun 2019
ganache-cli latest (npm) Archived Feb 2024
Truffle latest (npm) Sunset Dec 2023
go-ethereum commit 27e3f96 Pinned (2018) N/A (vendored)

Proposed Fix Options (ascending effort)

Option A: Quick Fix — Patch Node.js version + pin npm packages (Small effort, Low risk)

Minimum change to unblock the build. Replace Node 11 with Node 20 LTS; pin ganache-cli and truffle to their last known-good versions (both still on npm registry). Add Ubuntu old-releases fallback for APT.

Key Dockerfile changes:

  • Fix EOL apt sources via sed to use old-releases.ubuntu.com
  • Replace setup_11.x with setup_20.x
  • Pin ganache-cli@6.12.2 and truffle@5.11.5 (last published versions)
  • Use --legacy-peer-deps flag for ganache-cli's outdated peer dependency declarations

Compatibility: ganache-cli@6.12.2 and truffle@5.11.5 (last published versions before archive) install and run on Node 20 LTS.

Option B: Multi-Stage Build — EOL isolation + modern runtime (Small-Medium effort, Low risk)

Keep the 2019 build toolchain in a builder stage (it compiles the Go binary fine once APT/Node are fixed), then copy the fuzzer binary to a modern Ubuntu 22.04 runtime image. This isolates the EOL toolchain to build-time only and produces a smaller, more secure runtime image.

Note: The fuzzer binary links against glibc 2.27 (Ubuntu 18.04). Ubuntu 22.04 ships glibc 2.35 — forward compatible (newer glibc runs older binaries). This direction is safe.

Option C: Full Modernization — Ubuntu 22.04 + Go 1.21 + Hardhat/Anvil (Large effort, Medium risk)

Replace the entire toolchain:

  • Ubuntu 18.04 → 22.04 LTS
  • Go 1.10 → Go 1.21 (last version with reliable GO111MODULE=off for GOPATH-era code; avoid 1.22+ where GOPATH mode is further restricted — ref)
  • Node 11 → Node 20 LTS
  • Truffle → Hardhat (migration guide)
  • ganache-cli → Hardhat Network (npx hardhat node) or Foundry Anvil (anvil --port 8545)

The fuzzer itself only uses Truffle/Ganache for deployment extraction (build/extract.sh), not in the core fuzzing loop (which runs an in-process patched go-ethereum EVM). So the migration scope for the Node.js tooling is limited to extract.sh, extract.js, and ganache.py.

Go compatibility caveat: The patched go-ethereum at commit 27e3f96 uses govendor (pre-modules). Go 1.21 requires explicit GO111MODULE=off to use GOPATH mode. Go 1.22+ further restricts GOPATH semantics — if modernizing Go, pin to 1.21.x and set GO111MODULE=off.

Key Version Pins (verified still on npm/go registries)

Package Last Version Node 20 Compatible Notes
ganache-cli 6.12.2 Yes (with --legacy-peer-deps) Last release, archived Feb 2024
ganache 7.9.2 Yes Unified replacement, also archived
truffle 5.11.5 Yes Last release before sunset Dec 2023
hardhat 2.22.x Yes Active replacement for Truffle

References

We'd be happy to submit a PR for Option A or B if there's a preference. Option A is the path of least resistance — ~5 lines changed, build works again. 🔧

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions