{"slug":"openproject","tag":"v17.9.4-CE-ubuntu24.04-r1","current":true,"account":false,"tarball":"ReadyStack-openproject-v17.9.4-CE-ubuntu24.04-r1.tar.gz","tarball_sha256":"370bbb0809dd236bcff896480e603bd2db3bccad311a30d3d89ddf76a42e8a12","generated_at":"2026-10-29T19:18:33Z","dockerfile":"Dockerfile.offline.pinned","build_script":"BUILD_OFFLINE.sh","pins":{"upstream":{"repo":"https://github.com/opf/openproject","ref":"v17.9.4","commit":"7ef4007f9b355c9f1c71e288e9064e65547721e1","url":"https://github.com/opf/openproject/tree/7ef4007f9b355c9f1c71e288e9064e65547721e1"},"fetches":[{"kind":"git","url":"https://github.com/opf/openproject","ref":"v17.9.4"},{"kind":"http","url":"https://cache.ruby-lang.org/pub/ruby/4.0/ruby-4.0.9.tar.gz"},{"kind":"http","url":"https://cache.ruby-lang.org/pub/ruby/index.txt"},{"kind":"http","url":"https://nodejs.org/dist/v24.22.1/node-v24.22.1-linux-x64.tar.gz"},{"kind":"http","url":"https://nodejs.org/dist/v24.22.1/SHASUMS256.txt"}],"bases":[{"image":"ubuntu:24.04","digest":"sha256:24737cef17f4e22b1977df7d9a05e77c4e28b7da5b8911f8d8ccda136bf3573c"}],"toolchain":{"buildkit":"moby/buildkit:v0.31.2","buildkit_image_digest":"sha256:e0e67ea9c4bb07bdef683e29f70f3b623d1eb9c82274a9ec04e6bb0511449fb0"},"build_method":"source-rebuild-ruby","source_date_epoch":1792994405,"source_date_epoch_utc":"2026-10-26T06:00:05Z","target":{"image":"readystack/openproject:v17.9.4-CE-ubuntu24.04-r1","image_manifest_digest":"sha256:20a73b682fada579da523125e0785e3ed152a265d989049ce8c2b8503bf533bf","config_digest":"sha256:bc6e9857208a4de04aa629b2debb3ed7ac6e3abef5fdd8c55fefda7e4b764dfd"},"checksummed_files":40913},"files":[{"path":"BASES.tsv","size":121,"sha256":"0da49a3ea98fcaa345080b1a4230d2c798b395f71854063c2af657eb53a8a2e0","public":"full","lines":1,"url":"/api/recipe/openproject/v17.9.4-CE-ubuntu24.04-r1/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":6456301,"sha256":"2734a4f8419aff49c4d44f348d5d77af5eda06055904b4270f6d2bce8b2edc23","public":"account","lines":40913},{"path":"DOCKERFILE_NAME.txt","size":26,"sha256":"9aadd1ede68e016a6f163c97befc5ff2fcdc8ebd4f84b108dba63cb195fa8c84","public":"full","lines":1,"url":"/api/recipe/openproject/v17.9.4-CE-ubuntu24.04-r1/files/DOCKERFILE_NAME.txt","text":"Dockerfile.offline.pinned\n"},{"path":"Dockerfile","size":5665,"sha256":"a3c3412aefd781f85ed8abad7d6efe33591fbfe37fdd13ab0a1114890c15cd2a","public":"account","lines":74},{"path":"Dockerfile.offline","size":5665,"sha256":"a3c3412aefd781f85ed8abad7d6efe33591fbfe37fdd13ab0a1114890c15cd2a","public":"account","lines":74},{"path":"Dockerfile.offline.pinned","size":5665,"sha256":"a3c3412aefd781f85ed8abad7d6efe33591fbfe37fdd13ab0a1114890c15cd2a","public":"preview","lines":74,"preview":{"text":"# GENERATED L-009 hermetic Ruby build (--network=none, SBOM+SLSA-attestation-producing).\n# Compiles CRuby 4.0.9 from the vendored ruby-lang.org tarball and the native gems from vendor/cache, then\n# copies Ruby + the installed bundle onto the pinned base with only runtime debs: no compiler, headers or Node.\nFROM ubuntu:24.04@sha256:24737cef17f4e22b1977df7d9a05e77c4e28b7da5b8911f8d8ccda136bf3573c AS rubybuild\nENV DEBIAN_FRONTEND=noninteractive LANG=C.UTF-8\nRUN --mount=type=bind,source=vendored/debs,target=/tmp/debs --mount=type=bind,source=vendored/build-debs,target=/tmp/bdebs \\\n    set --; for f in /tmp/debs/*.deb /tmp/bdebs/*.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; }; }\nARG SOURCE_DATE_EPOCH=1792994405\nENV SOURCE_DATE_EPOCH=${SOURCE_DATE_EPOCH}\nCOPY vendored/ruby/ /tmp/ruby/\nRUN cd /tmp/ruby && echo 'c35350682ff050b79702d57ade4516e7336063f510155d19fb2fb5b3f3909511  ruby-4.0.9.tar.gz' | sha256sum -c - && \\\n    tar -xzf ruby-4.0.9.tar.gz && cd ruby-4.0.9 && \\\n    ./configure --prefix=/usr/local --enable-shared --disable-install-doc --disable-install-static-library && \\\n    make -j\"$(nproc)\" && make install && \\\n    cd / && rm -rf /tmp/ruby && \\\n    find /usr/local/lib/ruby \\( -name gem_make.out -o -name mkmf.log \\) -delete && \\\n    ruby --version | grep -qF 'ruby 4.0.9'\nCOPY kitforge-ruby-gems.rb /tmp/kitforge-ruby-gems.rb\nCOPY vendored/ruby-gems/ /tmp/ruby-gems/\nRUN ruby /tmp/kitforge-ruby-gems.rb install /tmp/ruby-gems json=2.21.2 && \\","lines_shown":24,"lines_total":74}},{"path":"Dockerfile.vendor","size":6960,"sha256":"5fa23163e05585f7366db7e8d4a7c0605e816b24ab129ed0e779765b26106346","public":"account","lines":79},{"path":"MANIFEST.txt","size":3674247,"sha256":"277231dbd8e14ebc9cc93a11833f247fceb0e5d71677e9621a0d7af9645ef6af","public":"account","lines":40915},{"path":"SOURCE_DATE_EPOCH.txt","size":11,"sha256":"af09afbc6d54bc1f2e57f1aa3fa17df0fc698c039bb9604d739d589c0b5863fe","public":"full","lines":1,"url":"/api/recipe/openproject/v17.9.4-CE-ubuntu24.04-r1/files/SOURCE_DATE_EPOCH.txt","text":"1792994405\n"},{"path":"TARGET_DIGEST.txt","size":440,"sha256":"f9490976241b4c4536c5c751841e6764acbde102a8b0ecc3d0400b71c5127f6d","public":"full","lines":8,"url":"/api/recipe/openproject/v17.9.4-CE-ubuntu24.04-r1/files/TARGET_DIGEST.txt","text":"image_manifest_digest=sha256:20a73b682fada579da523125e0785e3ed152a265d989049ce8c2b8503bf533bf\nconfig_digest=sha256:bc6e9857208a4de04aa629b2debb3ed7ac6e3abef5fdd8c55fefda7e4b764dfd\ntag=readystack/openproject:v17.9.4-CE-ubuntu24.04-r1\nprobe_port=8080\nprobe_path=/health_check\nprobe_timeout=1200\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":10153,"sha256":"3e8184ea230cfd8f41f977e26be6bf7bd03112c396c517837ce0c7de4f7399dd","public":"account","lines":165},{"path":"docs/PROVENANCE.md","size":1715,"sha256":"23a36cdc815086592932aa515e543612534269bc396eb7728fd8f1a57813800a","public":"account","lines":28},{"path":"docs/REBUILD.md","size":5160,"sha256":"80bb9b3787e7cdaf0c6c2774bc23c269542e4e49fbdbd490932096cf494df81f","public":"account","lines":59},{"path":"docs/VERIFY.md","size":1979,"sha256":"fa353a6c51f198355b88af46f1bfb3f653463ef7cbb0eca583548520870cf0c0","public":"account","lines":34},{"path":"docs/provenance/BASE_IMAGE_DIGESTS.lock","size":54,"sha256":"f6b682f401cca69fc5d97123a962a1ba4da2d2a846bdad2ebd38ed7f839b210d","public":"full","lines":2,"url":"/api/recipe/openproject/v17.9.4-CE-ubuntu24.04-r1/files/docs/provenance/BASE_IMAGE_DIGESTS.lock","text":"# base images for openproject (resolve at build_kit)\n\n"},{"path":"docs/provenance/BUILD_RECIPE.json","size":7712,"sha256":"395f4b3fcee9dc45588bea8ac85656fcf93e799ca69a5a77a4606b735ae22405","public":"account","lines":90},{"path":"docs/provenance/CUSTODY_INPUTS.json","size":772,"sha256":"3a7aedaf6be226a906fb226f510605ac0bd1d7b711610d2912a87f0058e71df5","public":"account","lines":21},{"path":"docs/provenance/SOURCE_FILE_MANIFEST.json","size":289732,"sha256":"26e3ebd7b555e7dba2da7e48d860283bb2a1ed6fcb5aa42afe5d4b5bc75141e1","public":"account","lines":5007},{"path":"docs/provenance/SOURCE_TREE_HASH.json","size":311,"sha256":"f3f4459384bc08cf7d9b09ed70850554dfb9b7bb2f4036184fb690f2cb061365","public":"full","lines":9,"url":"/api/recipe/openproject/v17.9.4-CE-ubuntu24.04-r1/files/docs/provenance/SOURCE_TREE_HASH.json","text":"{\n  \"schema\": \"kitforge.source_tree_hash.v1\",\n  \"slug\": \"openproject\",\n  \"repo\": \"https://github.com/opf/openproject\",\n  \"ref\": \"v17.9.4\",\n  \"commit\": \"7ef4007f9b355c9f1c71e288e9064e65547721e1\",\n  \"tree_listing_sha256\": \"c98f965fb73bc18f125beb0b51e2bd7d2bfc596ee7ad84a96671aa0c034990e6\",\n  \"file_count\": 23554\n}"},{"path":"docs/provenance/SYSTEM_PINNING.lock","size":99,"sha256":"fabe19a297e1bce7e02dc8ea5d2cef3e589919ac0031e794b80d9ee70ee78fc8","public":"account","lines":9},{"path":"docs/provenance/TOOLCHAIN.lock","size":2953,"sha256":"b762782b6dba86a84e939b61ca6c7a56b34627a7d986ebf28058ec7ff95546dc","public":"account","lines":92},{"path":"kitforge-ruby-gems.rb","size":5570,"sha256":"7f6627293be0debc7270e65cfe3559a29d3d95791843866fe1065570a460dd09","public":"account","lines":102},{"path":"rebuild.json","size":1218,"sha256":"7724a5809c1f9865656fc6bc63f2c4c4e158b914fe12f8c94dda56136de9f8a7","public":"account","lines":31},{"path":"toolchain/BUILDKIT_TAG.txt","size":22,"sha256":"fcd530eeb02b063d2f047adad6eef896422a8e8d558513e5f09b2a262be32573","public":"full","lines":1,"url":"/api/recipe/openproject/v17.9.4-CE-ubuntu24.04-r1/files/toolchain/BUILDKIT_TAG.txt","text":"moby/buildkit:v0.31.2\n"}],"skipped":[],"kit_adds":{"bases":{"files":5,"bytes":29771169},"docs":{"files":23601,"bytes":502977492},"toolchain":{"files":1,"bytes":111529472},"vendored":{"files":17283,"bytes":701268205}},"links":{"page":"https://readystack.dev/products/openproject/recipe","signup":"https://readystack.dev/login.html?create=1&next=%2Fproducts%2Fopenproject%2Frecipe","kit":"https://readystack.dev/buy.html?product=openproject"}}