{"slug":"nodebb","tag":"v4.16.4-CE-ubuntu24.04-r3","current":true,"account":false,"tarball":"ReadyStack-nodebb-v4.16.4-CE-ubuntu24.04-r3.tar.gz","tarball_sha256":"09afe382a0812e52e523f150c3fcf2884acb3eb4043860593867e3671efe0396","generated_at":"2026-10-29T19:17:52Z","dockerfile":"Dockerfile.offline.pinned","build_script":"BUILD_OFFLINE.sh","pins":{"upstream":{"repo":"https://github.com/NodeBB/NodeBB","ref":"v4.16.4","commit":"38b0bbac00d26e663cbc40287e7c97788ab44ca7","url":"https://github.com/NodeBB/NodeBB/tree/38b0bbac00d26e663cbc40287e7c97788ab44ca7"},"fetches":[{"kind":"git","url":"https://github.com/NodeBB/NodeBB","ref":"v4.16.4"},{"kind":"http","url":"https://nodejs.org/dist/v24.21.0/node-v24.21.0-linux-x64.tar.gz"},{"kind":"http","url":"https://nodejs.org/dist/v24.21.0/SHASUMS256.txt"},{"kind":"http","url":"https://nodejs.org/dist/v24.21.0/SHASUMS256.txt.sig"},{"kind":"http","url":"http://localhost:4567"}],"bases":[{"image":"ubuntu:24.04","digest":"sha256:24737cef17f4e22b1977df7d9a05e77c4e28b7da5b8911f8d8ccda136bf3573c"}],"toolchain":{"buildkit":"moby/buildkit:v0.31.2","buildkit_image_digest":"sha256:e0e67ea9c4bb07bdef683e29f70f3b623d1eb9c82274a9ec04e6bb0511449fb0","builder_images":["ubuntu:24.04@sha256:24737cef17f4e22b1977df7d9a05e77c4e28b7da5b8911f8d8ccda136bf3573c"]},"build_method":"source-rebuild-node","source_date_epoch":1792775732,"source_date_epoch_utc":"2026-10-23T17:15:32Z","target":{"image":"readystack/nodebb:v4.16.4-CE-ubuntu24.04-r3","image_manifest_digest":"sha256:2fcef1179723d202929cc7e7805149f3127c64758d5789ac0fbbc009ad43f5c4","config_digest":"sha256:8b84ec9aadaa960cde806a9c41b678c7963ee9dc07806c8cfdf16ce1edd72068"},"checksummed_files":60976},"files":[{"path":"BASES.tsv","size":121,"sha256":"0da49a3ea98fcaa345080b1a4230d2c798b395f71854063c2af657eb53a8a2e0","public":"full","lines":1,"url":"/api/recipe/nodebb/v4.16.4-CE-ubuntu24.04-r3/files/BASES.tsv","text":"ubuntu:24.04@sha256:24737cef17f4e22b1977df7d9a05e77c4e28b7da5b8911f8d8ccda136bf3573c\tbases/ubuntu_24.04_24737cef17f4.oci\n"},{"path":"BUILD_OFFLINE.sh","size":6738,"sha256":"83299978ccd02a0b69e163d760da1211b401bbfa35a3184ca674dc37ff876732","public":"preview","lines":125,"preview":{"text":"#!/usr/bin/env bash\n# =============================================================================\n# ReadyStack — offline reproducible rebuild.\n#\n# Rebuilds this product's image from THIS ARCHIVE ALONE, with no network access\n# of any kind, and prints the resulting linux/amd64 image-manifest digest.\n# Run ./VERIFY_OFFLINE.sh afterwards to assert it equals the published digest.\n#\n# Requirements: linux/amd64 Docker host, docker buildx >= 0.30, jq, tar.\n# No git, no registry access, no additional tooling.\n#\n#   ./BUILD_OFFLINE.sh                the rebuild (OCI image + a docker-loadable copy)\n#   ./BUILD_OFFLINE.sh --provenance   the same rebuild with SLSA v1 build provenance (mode=max) attached to the OCI\n#                                     image, generated by BuildKit, not by any build step. Run on your own hardened,\n#                                     isolated build platform and sign that provenance with a key the build cannot\n#                                     reach, and the result meets SLSA Build Level 3 (see REBUILD.md). The image\n#                                     digest is the same either way.\n# =============================================================================\nset -euo pipefail\nPROVENANCE=0\nfor arg in \"$@\"; do\n  case \"$arg\" in\n    --provenance) PROVENANCE=1 ;;\n    -h|--help) sed -n '2,20p' \"$0\"; exit 0 ;;","lines_shown":24,"lines_total":125}},{"path":"CHECKSUMS.sha256","size":8745202,"sha256":"78529256990a40cca9b368bef4422a789bfe3033886efced202517fb9ba0ab71","public":"account","lines":60976},{"path":"DOCKERFILE_NAME.txt","size":26,"sha256":"9aadd1ede68e016a6f163c97befc5ff2fcdc8ebd4f84b108dba63cb195fa8c84","public":"full","lines":1,"url":"/api/recipe/nodebb/v4.16.4-CE-ubuntu24.04-r3/files/DOCKERFILE_NAME.txt","text":"Dockerfile.offline.pinned\n"},{"path":"Dockerfile","size":3583,"sha256":"303c03e80e976cfda6ed0fc5c2f877114c02e6a5b3416145e4c6d1a14bda8e25","public":"account","lines":46},{"path":"Dockerfile.offline","size":3583,"sha256":"303c03e80e976cfda6ed0fc5c2f877114c02e6a5b3416145e4c6d1a14bda8e25","public":"account","lines":46},{"path":"Dockerfile.offline.pinned","size":3583,"sha256":"303c03e80e976cfda6ed0fc5c2f877114c02e6a5b3416145e4c6d1a14bda8e25","public":"preview","lines":46,"preview":{"text":"# GENERATED L-009 hermetic Node build (--network=none, SBOM+SLSA-attestation-producing).\n# Pinned base from BASE_IMAGE_DIGESTS.lock; vendored resolved /app tree + debs from Dockerfile.vendor.\n# NO install verb offline — the fully-resolved, prod-pruned node_modules is COPYd verbatim.\nFROM ubuntu:24.04@sha256:24737cef17f4e22b1977df7d9a05e77c4e28b7da5b8911f8d8ccda136bf3573c AS nodedist\nCOPY vendored/node/ /nodedist/\nRUN cd /nodedist && echo '6e1db87ef58b8819e5d5402eff1536491b18edd8eb7bee5ef7897876e88dc5ff  node-v24.21.0-linux-x64.tar.gz' | sha256sum -c - && \\\n    mkdir -p /opt/node && tar -xzf node-v24.21.0-linux-x64.tar.gz -C /opt/node --strip-components=1 --no-same-owner && \\\n    mkdir -p /opt/node/share/doc/nodejs && mv /opt/node/LICENSE /opt/node/share/doc/nodejs/LICENSE && \\\n    rm -rf /opt/node/CHANGELOG.md /opt/node/README.md /opt/node/lib/node_modules/npm /opt/node/lib/node_modules/corepack /opt/node/bin/npm /opt/node/bin/npx /opt/node/bin/corepack\nFROM ubuntu:24.04@sha256:24737cef17f4e22b1977df7d9a05e77c4e28b7da5b8911f8d8ccda136bf3573c\nENV DEBIAN_FRONTEND=noninteractive NODE_ENV=production NODEBB_URL=http://localhost:4567 NODEBB_DB=redis NODEBB_PORT=4567\nRUN --mount=type=bind,source=vendored/debs,target=/tmp/debs \\\n    set --; for f in /tmp/debs/*.deb; do [ -e \"$f\" ] && set -- \"$@\" \"$f\"; done; \\\n    for pass in 1 2 3 4 5; do [ $# -eq 0 ] || dpkg -i --skip-same-version \"$@\" >/dev/null 2>&1 && break; done; \\\n    dpkg --configure -a && bad= && for d in \"$@\"; do p=$(dpkg-deb -f \"$d\" Package) v=$(dpkg-deb -f \"$d\" Version); \\\n      case \"$(dpkg-query -W -f='${Version} ${db:Status-Abbrev}' \"$p\" 2>/dev/null)\" in \"$v ii\"*) ;; *) bad=\"$bad $p=$v\" ;; esac; done && \\\n    { [ -z \"$bad\" ] || { echo \"vendored debs not installed at their vendored version:$bad\" >&2; false; }; } && \\\n    rm -rf /var/lib/apt/lists/* \\\n           /var/log/dpkg.log /var/log/alternatives.log /var/log/apt /var/cache/ldconfig/aux-cache /var/cache/fontconfig\nCOPY --from=nodedist /opt/node/ /usr/local/\nARG SOURCE_DATE_EPOCH=1792775732\nRUN node --version && groupadd -r -g 1001 nodebb && useradd -r -u 1001 -g nodebb -d /app -m nodebb && \\\n    : \"${SOURCE_DATE_EPOCH:?SOURCE_DATE_EPOCH must be set for a reproducible build}\" && \\\n    sed -ri \"s/^([^:]*:[^:]*):[0-9]*:/\\1:$((SOURCE_DATE_EPOCH/86400)):/\" /etc/shadow && \\","lines_shown":24,"lines_total":46}},{"path":"Dockerfile.vendor","size":3716,"sha256":"66cc72619a8c2a2ee8b922437b6629b43af54f63dd236a728e83182e417538ca","public":"account","lines":37},{"path":"MANIFEST.txt","size":4598864,"sha256":"490e5e8ce7b07d7148e6b8e9ead5f853f99e10bdd4700c79f014fd74b1fa4846","public":"account","lines":60978},{"path":"SOURCE_DATE_EPOCH.txt","size":11,"sha256":"1aedf5834b3e1431ceeb1a7daaadec5f75c199de59d238f132b9cdafcc359433","public":"full","lines":1,"url":"/api/recipe/nodebb/v4.16.4-CE-ubuntu24.04-r3/files/SOURCE_DATE_EPOCH.txt","text":"1792775732\n"},{"path":"TARGET_DIGEST.txt","size":433,"sha256":"e0fbef8c1feec66f8533669ca91db9278d8ef30c0b31d70f56c3e9c980385b2e","public":"full","lines":8,"url":"/api/recipe/nodebb/v4.16.4-CE-ubuntu24.04-r3/files/TARGET_DIGEST.txt","text":"image_manifest_digest=sha256:2fcef1179723d202929cc7e7805149f3127c64758d5789ac0fbbc009ad43f5c4\nconfig_digest=sha256:8b84ec9aadaa960cde806a9c41b678c7963ee9dc07806c8cfdf16ce1edd72068\ntag=readystack/nodebb:v4.16.4-CE-ubuntu24.04-r3\nprobe_port=4567\nprobe_path=/api/v3/ping\nprobe_timeout=180\nverify_boot=skip\nverify_boot_reason=this image needs db (not part of this archive); boot it with your own services as the admin handbook describes\n"},{"path":"VERIFY_OFFLINE.sh","size":7331,"sha256":"8b036b1f9a7f7deb4dbab14ef6b7c40622d2820904e891b8845ba3580e924506","public":"account","lines":128},{"path":"docs/PROVENANCE.md","size":1694,"sha256":"e0df77350a579bd5a1d176107ab495d28a26c5572ebc01d603f1612a148fb349","public":"account","lines":28},{"path":"docs/REBUILD.md","size":5188,"sha256":"af9c7a05b342ca41f38bced787bfb4cfbb32e06d359cf4dfe2dddaec5368212f","public":"account","lines":59},{"path":"docs/VERIFY.md","size":1957,"sha256":"109119fde06105c9a85f9ef42aaa151b1a7b9a9d2b9203708f6cd6ec2de1ff53","public":"account","lines":34},{"path":"docs/provenance/BASE_IMAGE_DIGESTS.lock","size":49,"sha256":"5931a08867a700cca0c9be01f240e98b4c54a712fa599cf40436784eb9659e88","public":"full","lines":2,"url":"/api/recipe/nodebb/v4.16.4-CE-ubuntu24.04-r3/files/docs/provenance/BASE_IMAGE_DIGESTS.lock","text":"# base images for nodebb (resolve at build_kit)\n\n"},{"path":"docs/provenance/BUILD_RECIPE.json","size":5171,"sha256":"89f16fb6ed8369aef114479cb31a6818d13e65475c4a37483afdf606a323edcb","public":"account","lines":47},{"path":"docs/provenance/CUSTODY_INPUTS.json","size":645,"sha256":"211b774d7724aeb6ef7ee93f8b44681b49548ff3aaa741c29abbe5ffab0fcc69","public":"account","lines":17},{"path":"docs/provenance/SOURCE_FILE_MANIFEST.json","size":236217,"sha256":"1f762ab01c3af9a5a64a074192da7f14569a0b7a500a51938e279520e977fb13","public":"account","lines":5007},{"path":"docs/provenance/SOURCE_TREE_HASH.json","size":303,"sha256":"4396525ea0c28f5b16c217fd67bbb58f0499391d451a9399c6ebb17f8eca4c9c","public":"full","lines":9,"url":"/api/recipe/nodebb/v4.16.4-CE-ubuntu24.04-r3/files/docs/provenance/SOURCE_TREE_HASH.json","text":"{\n  \"schema\": \"kitforge.source_tree_hash.v1\",\n  \"slug\": \"nodebb\",\n  \"repo\": \"https://github.com/NodeBB/NodeBB\",\n  \"ref\": \"v4.16.4\",\n  \"commit\": \"38b0bbac00d26e663cbc40287e7c97788ab44ca7\",\n  \"tree_listing_sha256\": \"6a6d1348fa2fafd76dea0c49bbb9f18ead2fcfc5b36ff252b7b653afd6a45d98\",\n  \"file_count\": 5803\n}"},{"path":"docs/provenance/SYSTEM_PINNING.lock","size":38,"sha256":"5b00b1840dc7bd9bb6b1a60129b69a802dcdb8edcd0b8a9563ad0e0b88926207","public":"account","lines":4},{"path":"docs/provenance/TOOLCHAIN.lock","size":3696,"sha256":"12b1db1531552523b07edc6a1c2c7a3bdf8824d076a6c2a53192bbddd3b4df8d","public":"account","lines":78},{"path":"entrypoint.sh","size":3048,"sha256":"d599321da67a51eed996f481b4b62aa6b6eb456bfb279ca229f914ec1c344ec7","public":"account","lines":48},{"path":"rebuild.json","size":1213,"sha256":"e637e9cf18b6e5c2c380b749687e0d9d1c6fb47112e74947133fa40951ac727e","public":"account","lines":31},{"path":"toolchain/BUILDKIT_TAG.txt","size":22,"sha256":"fcd530eeb02b063d2f047adad6eef896422a8e8d558513e5f09b2a262be32573","public":"full","lines":1,"url":"/api/recipe/nodebb/v4.16.4-CE-ubuntu24.04-r3/files/toolchain/BUILDKIT_TAG.txt","text":"moby/buildkit:v0.31.2\n"}],"skipped":[],"kit_adds":{"bases":{"files":5,"bytes":29771169},"docs":{"files":5855,"bytes":25863010},"toolchain":{"files":1,"bytes":111529472},"vendored":{"files":55091,"bytes":659170776}},"links":{"page":"https://readystack.dev/products/nodebb/recipe","signup":"https://readystack.dev/login.html?create=1&next=%2Fproducts%2Fnodebb%2Frecipe","kit":"https://readystack.dev/buy.html?product=nodebb"}}