{"slug":"python","tag":"3.15.2-CE-ubuntu24.04-r1","current":true,"account":false,"tarball":"ReadyStack-python-3.15.2-CE-ubuntu24.04-r1.tar.gz","tarball_sha256":"caa9ea252c9a98bce824b920ce40d8a15f489802f2d7e083dd648742edc06179","generated_at":"2026-11-08T17:37:43Z","dockerfile":"Dockerfile.offline.pinned","build_script":"BUILD_OFFLINE.sh","pins":{"upstream":{"repo":"https://github.com/python/cpython","ref":"v3.15.2","commit":"5e58eaad7c58df58dfa8ea549c87996e01dd1077","url":"https://github.com/python/cpython/tree/5e58eaad7c58df58dfa8ea549c87996e01dd1077"},"fetches":[{"kind":"http","url":"https://www.python.org/ftp/python/3.15.2/Python-3.15.2.tar.xz"}],"bases":[{"image":"ubuntu:24.04","digest":"sha256:fe81560990fae86dc4743202b2cb4d3df98d0bcf949173cecef15ce1127ef852"}],"toolchain":{"buildkit":"moby/buildkit:v0.31.2","buildkit_image_digest":"sha256:e0e67ea9c4bb07bdef683e29f70f3b623d1eb9c82274a9ec04e6bb0511449fb0"},"build_method":"source-rebuild-python","source_date_epoch":1792947471,"source_date_epoch_utc":"2026-10-25T16:57:51Z","target":{"image":"readystack/python:3.15.2-CE-ubuntu24.04-r1","image_manifest_digest":"sha256:3b42ecdb93bf14ea67bab56d22979b410ce375f084f539277f43d69e4af38274","config_digest":"sha256:2b5c2117fc9e55d9f9d9e08d2befa77b0b7b77543c9ab494c63c5773480c870f"},"checksummed_files":11260},"files":[{"path":"BASES.tsv","size":121,"sha256":"63822800fc2b89e7b38d1fbaaad6f0c80c9a91a0176ebe7d935c08b0cdd6b4fa","public":"full","lines":1,"url":"/api/recipe/python/3.15.2-CE-ubuntu24.04-r1/files/BASES.tsv","text":"ubuntu:24.04@sha256:fe81560990fae86dc4743202b2cb4d3df98d0bcf949173cecef15ce1127ef852\tbases/ubuntu_24.04_fe81560990fa.oci\n"},{"path":"BUILD_OFFLINE.sh","size":6756,"sha256":"6633aa31b6b40dc4a75c83de0272269acbb86e82f3bcfa7fdd202d1642a6780a","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. Your build platform runs\n#                                     the build and signs that provenance with a key the build steps cannot reach\n#                                     (see REBUILD.md). Any SLSA build level is your platform's; this archive claims\n#                                     none. The image 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":1423803,"sha256":"730d552bd5b0a31542803dae32c1e1ef043d08436a7d48fbbf4926d96f0581d4","public":"account","lines":11260},{"path":"DOCKERFILE_NAME.txt","size":26,"sha256":"9aadd1ede68e016a6f163c97befc5ff2fcdc8ebd4f84b108dba63cb195fa8c84","public":"full","lines":1,"url":"/api/recipe/python/3.15.2-CE-ubuntu24.04-r1/files/DOCKERFILE_NAME.txt","text":"Dockerfile.offline.pinned\n"},{"path":"Dockerfile","size":10165,"sha256":"dafc4630ae3b3b439a6cf8ae440e39318435c3b61ef8b6a9b0208d96ae1a10ef","public":"account","lines":91},{"path":"Dockerfile.offline","size":10165,"sha256":"dafc4630ae3b3b439a6cf8ae440e39318435c3b61ef8b6a9b0208d96ae1a10ef","public":"account","lines":91},{"path":"Dockerfile.offline.pinned","size":10165,"sha256":"dafc4630ae3b3b439a6cf8ae440e39318435c3b61ef8b6a9b0208d96ae1a10ef","public":"preview","lines":91,"preview":{"text":"# GENERATED hermetic Python runtime build (--network=none). CPython 3.15.2 is COMPILED here, offline,\n# from python.org's tarball (sha256 re-checked) and the vendored build debs, by the same command the vendor\n# stage ran, linked against Ubuntu's libraries; the runtime takes /usr/local from it and none of the toolchain.\nFROM ubuntu:24.04@sha256:fe81560990fae86dc4743202b2cb4d3df98d0bcf949173cecef15ce1127ef852 AS cpython\nARG SOURCE_DATE_EPOCH=1792947471\nENV SOURCE_DATE_EPOCH=${SOURCE_DATE_EPOCH}\nCOPY vendored/python/debs/ /tmp/cpython-debs/\nCOPY vendored/python/Python-3.15.2.tar.xz /tmp/Python-3.15.2.tar.xz\nRUN set --; for f in /tmp/cpython-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    : \"${SOURCE_DATE_EPOCH:?the CPython build needs SOURCE_DATE_EPOCH}\" && \\\n    echo \"8b5536d280142ecf6cdfe15d12a21ba1c65e300bbf7b28a8d0cdb849575797de  /tmp/Python-3.15.2.tar.xz\" | sha256sum -c - && \\\n    mkdir -p /usr/src/python && tar -xJf /tmp/Python-3.15.2.tar.xz -C /usr/src/python --strip-components=1 --no-same-owner && \\\n    rm -rf /tmp/cpython-debs /tmp/Python-3.15.2.tar.xz && cd /usr/src/python && \\\n    export DEB_BUILD_MAINT_OPTIONS=optimize=-lto && \\\n    PYCF=\"$(dpkg-buildflags --get CFLAGS) $(dpkg-buildflags --get CPPFLAGS)\" && PYLD=\"$(dpkg-buildflags --get LDFLAGS)\" && \\\n    ./configure --build=x86_64-linux-gnu --prefix=/usr/local --enable-shared --enable-loadable-sqlite-extensions --enable-option-checking=fatal --disable-test-modules --without-static-libpython --with-ensurepip=install --with-system-expat --without-system-libmpdec --with-dbmliborder= py_cv_module__dbm=n/a py_cv_module__gdbm=n/a py_cv_module__tkinter=n/a && \\\n    make -j\"$(nproc)\" \"EXTRA_CFLAGS=$PYCF\" \"LDFLAGS=$PYLD,--strip-all\" && \\\n    rm python && make -j\"$(nproc)\" \"EXTRA_CFLAGS=$PYCF\" \"LDFLAGS=$PYLD,--strip-all,-rpath='\\$\\$ORIGIN/../lib'\" python && \\\n    make install COMPILEALL_OPTS=--invalidation-mode=checked-hash && \\\n    cd / && rm -rf /usr/src/python /usr/local/lib/python3.15/idlelib /usr/local/lib/python3.15/tkinter /usr/local/lib/python3.15/turtledemo /usr/local/bin/idle3* && \\","lines_shown":24,"lines_total":91}},{"path":"Dockerfile.vendor","size":6646,"sha256":"db4c43d2d9a60f30df71804992e9c19ebf23fcd9a604faca1cca7b365d9649a6","public":"account","lines":55},{"path":"MANIFEST.txt","size":658153,"sha256":"bad81f9bbf2a0618c89a435390de5e136bbcb7f9d08d2fa0b71bef76dde83816","public":"account","lines":11262},{"path":"SOURCE_DATE_EPOCH.txt","size":11,"sha256":"9cb0f54a6939a13be3b5b46d4236eac8f35f7c54612be8b73b2cd736ba0821df","public":"full","lines":1,"url":"/api/recipe/python/3.15.2-CE-ubuntu24.04-r1/files/SOURCE_DATE_EPOCH.txt","text":"1792947471\n"},{"path":"TARGET_DIGEST.txt","size":499,"sha256":"c4433269a8a7d143039e252d276445a74052768090dba9418b9039bb8661c171","public":"full","lines":9,"url":"/api/recipe/python/3.15.2-CE-ubuntu24.04-r1/files/TARGET_DIGEST.txt","text":"image_manifest_digest=sha256:3b42ecdb93bf14ea67bab56d22979b410ce375f084f539277f43d69e4af38274\nconfig_digest=sha256:2b5c2117fc9e55d9f9d9e08d2befa77b0b7b77543c9ab494c63c5773480c870f\ntag=readystack/python:3.15.2-CE-ubuntu24.04-r1\nprobe_port=80\nprobe_path=/\nprobe_timeout=180\nprobe_exec=python3 -c 'pass'\nverify_boot=skip\nverify_boot_reason=this image is a language runtime with no long-running service; the digest match above proves the rebuild, and `docker run --rm <image> python3 --version` runs it\n"},{"path":"VERIFY_OFFLINE.sh","size":10153,"sha256":"3e8184ea230cfd8f41f977e26be6bf7bd03112c396c517837ce0c7de4f7399dd","public":"account","lines":165},{"path":"docs/PROVENANCE.md","size":2616,"sha256":"bfdd55b7d3ae6756efbafe7752adee450979a009ef82665dbed79ea786c7b535","public":"account","lines":36},{"path":"docs/REBUILD.md","size":5170,"sha256":"cbcec69ebc82cbc8512c13e991dcd13f7dbc83be64bcc120be57327785629d88","public":"account","lines":59},{"path":"docs/VERIFY.md","size":1952,"sha256":"f3ab30b2c3dacd8287826adf901c766e4abc79b86118de8fc39bb4b200db17ae","public":"account","lines":34},{"path":"docs/provenance/BASE_IMAGE_DIGESTS.lock","size":49,"sha256":"167b03637e3f7def4ff03f3bbd479aef51c7a63e7cd1d14d149f2302437f34c8","public":"full","lines":2,"url":"/api/recipe/python/3.15.2-CE-ubuntu24.04-r1/files/docs/provenance/BASE_IMAGE_DIGESTS.lock","text":"# base images for python (resolve at build_kit)\n\n"},{"path":"docs/provenance/BUILD_RECIPE.json","size":1677,"sha256":"ee1203024ac0dc43cf1ebab2aa5cce0b1907d955dbe3b782f7704fa835ed5569","public":"account","lines":31},{"path":"docs/provenance/CUSTODY_INPUTS.json","size":646,"sha256":"77a65dbfb11fea75283ae92e0e06ff718a6f90f62a16e665158f2f035abae37e","public":"account","lines":17},{"path":"docs/provenance/SOURCE_FILE_MANIFEST.json","size":200203,"sha256":"eb1b5ca09759df1350d8d55368f22af33c97adcace95b00cae5d987f26661ca0","public":"account","lines":5007},{"path":"docs/provenance/SOURCE_TREE_HASH.json","size":304,"sha256":"4a714b9067db80b755859f3be381c4b79050c5f745b286ece6de12eebc8df523","public":"full","lines":9,"url":"/api/recipe/python/3.15.2-CE-ubuntu24.04-r1/files/docs/provenance/SOURCE_TREE_HASH.json","text":"{\n  \"schema\": \"kitforge.source_tree_hash.v1\",\n  \"slug\": \"python\",\n  \"repo\": \"https://github.com/python/cpython\",\n  \"ref\": \"v3.15.2\",\n  \"commit\": \"5e58eaad7c58df58dfa8ea549c87996e01dd1077\",\n  \"tree_listing_sha256\": \"c39e6ce79eef9148fe893ee08e13bf6cd2350f8549c20587afeed3c639740352\",\n  \"file_count\": 5636\n}"},{"path":"docs/provenance/SYSTEM_PINNING.lock","size":1,"sha256":"01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b","public":"account","lines":1},{"path":"docs/provenance/TOOLCHAIN.lock","size":1946,"sha256":"6c84619c5082f247475fffbcd987d89a49104e6b708c284a0b395e6a0ed729bb","public":"account","lines":45},{"path":"rebuild.json","size":1263,"sha256":"6449c723cbd0b7814d4b9bcc17fe2ea86570a875b282474f2a5ac6645df2ea8c","public":"account","lines":31},{"path":"toolchain/BUILDKIT_TAG.txt","size":22,"sha256":"fcd530eeb02b063d2f047adad6eef896422a8e8d558513e5f09b2a262be32573","public":"full","lines":1,"url":"/api/recipe/python/3.15.2-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":5689,"bytes":134324785},"toolchain":{"files":1,"bytes":111529472},"vendored":{"files":5543,"bytes":251840820}},"links":{"page":"https://readystack.dev/products/python/recipe","signup":"https://readystack.dev/login.html?create=1&next=%2Fproducts%2Fpython%2Frecipe","kit":"https://readystack.dev/products/python#pp-kit"}}