{"slug":"frappecrm","tag":"v1.89.0-CE-ubuntu24.04-r1","current":true,"account":false,"tarball":"ReadyStack-frappecrm-v1.89.0-CE-ubuntu24.04-r1.tar.gz","tarball_sha256":"03a8cb1285847a2035e2c5c5d962021bcc021fc6a57f11e6d6251b580aa7db36","generated_at":"2026-10-29T19:35:13Z","dockerfile":"Dockerfile.offline.pinned","build_script":"BUILD_OFFLINE.sh","pins":{"upstream":{"repo":"https://github.com/frappe/crm","ref":"v1.89.0","commit":"687f5da11e099615b0f1ed86970defd266e62636","url":"https://github.com/frappe/crm/tree/687f5da11e099615b0f1ed86970defd266e62636"},"fetches":[{"kind":"http","url":"https://www.python.org/ftp/python/3.14.9/Python-3.14.9.tar.xz"},{"kind":"http","url":"https://github.com/frappe/frappe"},{"kind":"http","url":"https://github.com/frappe/crm"},{"kind":"http","url":"https://frappe.io/ctr-faq"}],"bases":[{"image":"ubuntu:24.04","digest":"sha256:68ee22004a9109b44973313b02ff7b1de250f1de0f5ecb628d73f579aaff33ac"}],"toolchain":{"buildkit":"moby/buildkit:v0.31.2","buildkit_image_digest":"sha256:e0e67ea9c4bb07bdef683e29f70f3b623d1eb9c82274a9ec04e6bb0511449fb0"},"build_method":"source-rebuild-python","source_date_epoch":1792710056,"source_date_epoch_utc":"2026-10-22T23:00:56Z","target":{"image":"readystack/frappecrm:v1.89.0-CE-ubuntu24.04-r1","image_manifest_digest":"sha256:807b13e33ecdab7f275a718daf36cd71bdca6bbb32e15a35d606ddb310819c0f","config_digest":"sha256:a939e8e96c5911c4456e3fe8f134be68968aa833fc5159effc5304fe662edebd"},"checksummed_files":1282},"files":[{"path":"BASES.tsv","size":121,"sha256":"abada2a5a4d6cf4b84bc6d4a17027231b40c2bfa231f0c2d997a9994571c06c9","public":"full","lines":1,"url":"/api/recipe/frappecrm/v1.89.0-CE-ubuntu24.04-r1/files/BASES.tsv","text":"ubuntu:24.04@sha256:68ee22004a9109b44973313b02ff7b1de250f1de0f5ecb628d73f579aaff33ac\tbases/ubuntu_24.04_68ee22004a91.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":180916,"sha256":"02a803ac78db59b7f6987e0e03dd70309b1cd8782256d51bb63bab6278fe5ff3","public":"account","lines":1282},{"path":"DOCKERFILE_NAME.txt","size":26,"sha256":"9aadd1ede68e016a6f163c97befc5ff2fcdc8ebd4f84b108dba63cb195fa8c84","public":"full","lines":1,"url":"/api/recipe/frappecrm/v1.89.0-CE-ubuntu24.04-r1/files/DOCKERFILE_NAME.txt","text":"Dockerfile.offline.pinned\n"},{"path":"Dockerfile","size":7476,"sha256":"e6294482c581af4e5b2fbb83a21b97de280a9aa845b50890217433e47d454274","public":"account","lines":71},{"path":"Dockerfile.offline","size":7476,"sha256":"e6294482c581af4e5b2fbb83a21b97de280a9aa845b50890217433e47d454274","public":"account","lines":71},{"path":"Dockerfile.offline.pinned","size":7476,"sha256":"e6294482c581af4e5b2fbb83a21b97de280a9aa845b50890217433e47d454274","public":"preview","lines":71,"preview":{"text":"# =====================================================================\n# L-009 HERMETIC OFFLINE BUILD (Frappe CRM on the Frappe framework, AGPL-3.0; versions: Dockerfile.vendor ARGs). --network=none.\n# Reassembles the vendored built aio filesystem onto the pinned public ubuntu:24.04 base.\n# =====================================================================\n# CPython 3.14.9 COMPILED HERE, offline (--network=none), from python.org's tarball (sha256 re-checked) and\n# the vendored build debs, by the same command the vendor stage ran; linked against Ubuntu's libraries.\nFROM ubuntu:24.04@sha256:68ee22004a9109b44973313b02ff7b1de250f1de0f5ecb628d73f579aaff33ac AS cpython\nARG SOURCE_DATE_EPOCH=1792710056\nENV SOURCE_DATE_EPOCH=${SOURCE_DATE_EPOCH}\nCOPY vendored/frappecrm-src/python/debs/ /tmp/cpython-debs/\nCOPY vendored/frappecrm-src/python/Python-3.14.9.tar.xz /tmp/Python-3.14.9.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 \"e02d9ac21cebda6e46435369744a92c65cc7cd8669697694122cf97ffacd1e53  /tmp/Python-3.14.9.tar.xz\" | sha256sum -c - && \\\n    mkdir -p /usr/src/python && tar -xJf /tmp/Python-3.14.9.tar.xz -C /usr/src/python --strip-components=1 --no-same-owner && \\\n    rm -rf /tmp/cpython-debs /tmp/Python-3.14.9.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\" && \\","lines_shown":24,"lines_total":71}},{"path":"Dockerfile.vendor","size":25617,"sha256":"8325c500aec5a434579b47dded2b6f7de24774cab15c1a3b41bf47cf49f8887f","public":"account","lines":363},{"path":"MANIFEST.txt","size":93770,"sha256":"030a5ef9c1f641d8e9465e00d30a6db1afb34c8ad1cb6eaff71ffd955a3cbf98","public":"account","lines":1284},{"path":"SOURCE_DATE_EPOCH.txt","size":11,"sha256":"8fcd450695b0f9a77d1922e0346679404c8311cc7f8bf9cc8edf638ed4350c04","public":"full","lines":1,"url":"/api/recipe/frappecrm/v1.89.0-CE-ubuntu24.04-r1/files/SOURCE_DATE_EPOCH.txt","text":"1792710056\n"},{"path":"TARGET_DIGEST.txt","size":466,"sha256":"6dea542ce222d84883b42d283c91ddaa00fc567691c0d3d983a8b417966dbec5","public":"full","lines":8,"url":"/api/recipe/frappecrm/v1.89.0-CE-ubuntu24.04-r1/files/TARGET_DIGEST.txt","text":"image_manifest_digest=sha256:807b13e33ecdab7f275a718daf36cd71bdca6bbb32e15a35d606ddb310819c0f\nconfig_digest=sha256:a939e8e96c5911c4456e3fe8f134be68968aa833fc5159effc5304fe662edebd\ntag=readystack/frappecrm:v1.89.0-CE-ubuntu24.04-r1\nprobe_port=8080\nprobe_path=/api/method/ping\nprobe_timeout=300\nverify_boot=skip\nverify_boot_reason=this image needs db, redis-cache, redis-queue (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":1706,"sha256":"17e487e7b5fe1c5b8747631e2b1b98fdf0c0e497b188683c9e98a62692b56505","public":"account","lines":28},{"path":"docs/REBUILD.md","size":5214,"sha256":"90f39a014b0cc513d5dcedddfffedd0128c4da01971d15b72e1a13354d579241","public":"account","lines":59},{"path":"docs/VERIFY.md","size":1973,"sha256":"13603c8d77ba4ec77285c030c3d71f4530fb03f9eae49a0a6f6e2afafe0973a3","public":"account","lines":34},{"path":"docs/provenance/BASE_IMAGE_DIGESTS.lock","size":52,"sha256":"26a28f4c19195087534692fd21c5b4f3f76baf003c4538f5ec2b55fc48ca421f","public":"full","lines":2,"url":"/api/recipe/frappecrm/v1.89.0-CE-ubuntu24.04-r1/files/docs/provenance/BASE_IMAGE_DIGESTS.lock","text":"# base images for frappecrm (resolve at build_kit)\n\n"},{"path":"docs/provenance/BUILD_RECIPE.json","size":6463,"sha256":"50c8ff4b50692126ef327df7eef9b09d01d6592e20cc7de45b28ac9005dc3cb7","public":"account","lines":32,"redactions":[{"line":28,"kind":"internal host"}],"kit_sha256":"ee8221903d373f13644db533e4f23a507ae5f408f6302ffecc5fb3d99877631f"},{"path":"docs/provenance/CUSTODY_INPUTS.json","size":645,"sha256":"d87d406ee4e256c54116100140edb1ef5efc54940e2d816dc776647bef02f8ab","public":"account","lines":17},{"path":"docs/provenance/SOURCE_FILE_MANIFEST.json","size":58081,"sha256":"58ac432b7948b6605fa9331b40a325bbf1790820f1c5ec6643b8dd5e66b5f5df","public":"account","lines":1117},{"path":"docs/provenance/SOURCE_TREE_HASH.json","size":303,"sha256":"9874a9ab5becebc557ac18bf4b4f75d57a802945a572df667d7bbbb6f7e83e03","public":"full","lines":9,"url":"/api/recipe/frappecrm/v1.89.0-CE-ubuntu24.04-r1/files/docs/provenance/SOURCE_TREE_HASH.json","text":"{\n  \"schema\": \"kitforge.source_tree_hash.v1\",\n  \"slug\": \"frappecrm\",\n  \"repo\": \"https://github.com/frappe/crm\",\n  \"ref\": \"v1.89.0\",\n  \"commit\": \"687f5da11e099615b0f1ed86970defd266e62636\",\n  \"tree_listing_sha256\": \"936cd4c6a6b30939bdca3dc6cc407b60ce3aa8b3c131e5a550cf3e69c36c9b43\",\n  \"file_count\": 1110\n}"},{"path":"docs/provenance/SYSTEM_PINNING.lock","size":1,"sha256":"01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b","public":"account","lines":1},{"path":"docs/provenance/TOOLCHAIN.lock","size":1299,"sha256":"51a419a0e5b1c6c1c702f6a2ad6324ebed37f23f68277448d1213f2ee154c4e3","public":"account","lines":36},{"path":"entrypoint-aio.sh","size":3682,"sha256":"917cae40e17631c2e20eb4ad829b565c3ccaf1a80eaa4b2111ca72d764981738","public":"account","lines":62},{"path":"rebuild.json","size":1242,"sha256":"9c76ef3ed599c063b3b17f4d06ebda41f1d9297f93ad2530c530a697fc8b4542","public":"account","lines":31},{"path":"resources/allinone/entrypoint-aio.sh","size":3682,"sha256":"917cae40e17631c2e20eb4ad829b565c3ccaf1a80eaa4b2111ca72d764981738","public":"account","lines":62},{"path":"resources/allinone/frappe.conf","size":1527,"sha256":"8e606f07f82664c1d0799206710275d1816f4666447a80e70fd4989bd153ca7e","public":"account","lines":56},{"path":"resources/core/main-entrypoint.sh","size":266,"sha256":"28c301d43cd50b750a050c1706dadf17cce87807e66d2db4a9713d6e6d30af85","public":"account","lines":12},{"path":"resources/core/nginx/nginx-entrypoint.sh","size":1502,"sha256":"93573cdb6d483223f00b8a2dd67b40f005adb1af378d57c31b0dacdaaef0263c","public":"account","lines":52},{"path":"resources/core/nginx/nginx-template.conf","size":2946,"sha256":"50b1c076351fc0c8969bd9ac8f157c0a8dd4ea348c3efc4fa935401fc2c66e2d","public":"account","lines":113},{"path":"resources/core/nginx/security_headers.conf","size":324,"sha256":"ccb615012f1a7c8592041535a74aa014ef089d66c7ef5800b2a180321a8b0ec8","public":"account","lines":5},{"path":"resources/core/start.sh","size":567,"sha256":"194a7225d6fb0a49dc0591d1ac450e3ff8060b93ee4a47be503ef40e61bbb48a","public":"account","lines":20},{"path":"supervisor-frappe.conf","size":1527,"sha256":"8e606f07f82664c1d0799206710275d1816f4666447a80e70fd4989bd153ca7e","public":"account","lines":56},{"path":"toolchain/BUILDKIT_TAG.txt","size":22,"sha256":"fcd530eeb02b063d2f047adad6eef896422a8e8d558513e5f09b2a262be32573","public":"full","lines":1,"url":"/api/recipe/frappecrm/v1.89.0-CE-ubuntu24.04-r1/files/toolchain/BUILDKIT_TAG.txt","text":"moby/buildkit:v0.31.2\n"}],"skipped":[],"kit_adds":{"bases":{"files":5,"bytes":29769315},"docs":{"files":1163,"bytes":44013607},"toolchain":{"files":1,"bytes":111529472},"vendored":{"files":82,"bytes":584342156}},"links":{"page":"https://readystack.dev/products/frappecrm/recipe","signup":"https://readystack.dev/login.html?create=1&next=%2Fproducts%2Ffrappecrm%2Frecipe","kit":"https://readystack.dev/buy.html?product=frappecrm"}}