{"slug":"swag","tag":"5.9.0-CE-ubuntu24.04-r1","current":true,"account":false,"tarball":"ReadyStack-swag-5.9.0-CE-ubuntu24.04-r1.tar.gz","tarball_sha256":"df74dc2fb2a4ad2576da24e70fd9d5eb7b4bce983327760db7ad0268136e6872","generated_at":"2026-11-09T20:32:08Z","dockerfile":"Dockerfile.offline.pinned","build_script":"BUILD_OFFLINE.sh","pins":{"upstream":{"repo":"https://github.com/linuxserver/docker-swag","ref":"5.9.0-ls497","commit":"24000edb531a50939fd4e1a9e5943aa659fb2dab","url":"https://github.com/linuxserver/docker-swag/tree/24000edb531a50939fd4e1a9e5943aa659fb2dab"},"fetches":[{"kind":"git","url":"https://github.com/linuxserver/docker-swag","ref":"5.9.0-ls497"},{"kind":"http","url":"https://www.python.org/ftp/python/3.12.16/Python-3.12.16.tar.xz"},{"kind":"http","url":"https://codeload.github.com/linuxserver/docker-baseimage-alpine-nginx/tar.gz/30e1ccd3ede168ba429f06371cf8c5f81b7b37f0"},{"kind":"http","url":"https://codeload.github.com/linuxserver/reverse-proxy-confs/tar.gz/76eed75fdf5da41de268a61c6df673cb8ae6f5ba"},{"kind":"http","url":"https://nginx.org/download/nginx-1.30.6.tar.gz"},{"kind":"http","url":"https://github.com/openresty/headers-more-nginx-module/archive/refs/tags/v0.41.tar.gz"},{"kind":"http","url":"https://github.com/fail2ban/fail2ban/archive/refs/tags/1.1.1.tar.gz"}],"bases":[{"image":"ubuntu:24.04","digest":"sha256:fe81560990fae86dc4743202b2cb4d3df98d0bcf949173cecef15ce1127ef852"}],"toolchain":{"buildkit":"moby/buildkit:v0.31.2","buildkit_image_digest":"sha256:e0e67ea9c4bb07bdef683e29f70f3b623d1eb9c82274a9ec04e6bb0511449fb0","builder_images":["ubuntu:24.04@sha256:fe81560990fae86dc4743202b2cb4d3df98d0bcf949173cecef15ce1127ef852"]},"build_method":"source-rebuild-python","source_date_epoch":1793438806,"source_date_epoch_utc":"2026-10-31T09:26:46Z","target":{"image":"readystack/swag:5.9.0-CE-ubuntu24.04-r1","image_manifest_digest":"sha256:fae67e509ab4b905beeb49e4c409e63f7bbeb36c13ba149af182d47d6b8797c3","config_digest":"sha256:f26aa2ad2d0d7a034b3e0624671d8c26ee5852534d1ae3456a9a72a1e35e8c86"},"checksummed_files":1141},"files":[{"path":"BASES.tsv","size":121,"sha256":"63822800fc2b89e7b38d1fbaaad6f0c80c9a91a0176ebe7d935c08b0cdd6b4fa","public":"full","lines":1,"url":"/api/recipe/swag/5.9.0-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":153138,"sha256":"46a785f877f5d502470dd07b21a6d1bbe6182831e1c1152a5a31a21c2c5430b5","public":"account","lines":1141},{"path":"DOCKERFILE_NAME.txt","size":26,"sha256":"9aadd1ede68e016a6f163c97befc5ff2fcdc8ebd4f84b108dba63cb195fa8c84","public":"full","lines":1,"url":"/api/recipe/swag/5.9.0-CE-ubuntu24.04-r1/files/DOCKERFILE_NAME.txt","text":"Dockerfile.offline.pinned\n"},{"path":"Dockerfile","size":12235,"sha256":"6d59c9f180ce3c50177c3e659b3fc03111da7edeadf528fbc5aa39fbe616d8e2","public":"account","lines":88},{"path":"Dockerfile.offline","size":12235,"sha256":"6d59c9f180ce3c50177c3e659b3fc03111da7edeadf528fbc5aa39fbe616d8e2","public":"account","lines":88},{"path":"Dockerfile.offline.pinned","size":12235,"sha256":"6d59c9f180ce3c50177c3e659b3fc03111da7edeadf528fbc5aa39fbe616d8e2","public":"preview","lines":88,"preview":{"text":"# GENERATED L-009 hermetic Python build (--network=none, SBOM+SLSA-attestation-producing).\n# Pinned base from BASE_IMAGE_DIGESTS.lock; vendored wheelhouse + source + debs from Dockerfile.vendor.\n# pydeps sub-stage installs the wheelhouse offline; COPY /deps /usr/local keeps pip OUT of the runtime SBOM.\n# CPython 3.12.16 COMPILED HERE, offline, from python.org's tarball (sha256 re-checked) and the vendored\n# build debs, by the same command the vendor stage ran; linked against Ubuntu's libraries (debs the scan\n# sees, apt fixes). The runtime takes /usr/local from this stage and none of the toolchain.\nFROM ubuntu:24.04@sha256:fe81560990fae86dc4743202b2cb4d3df98d0bcf949173cecef15ce1127ef852 AS cpython\nARG SOURCE_DATE_EPOCH=1793438806\nENV SOURCE_DATE_EPOCH=${SOURCE_DATE_EPOCH}\nCOPY vendored/python/debs/ /tmp/cpython-debs/\nCOPY vendored/python/Python-3.12.16.tar.xz /tmp/Python-3.12.16.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 \"b5796915dc45ff745cfb4e990a7e7c93d6f546328a102ce31448d69ebc37575c  /tmp/Python-3.12.16.tar.xz\" | sha256sum -c - && \\\n    mkdir -p /usr/src/python && tar -xJf /tmp/Python-3.12.16.tar.xz -C /usr/src/python --strip-components=1 --no-same-owner && \\\n    rm -rf /tmp/cpython-debs /tmp/Python-3.12.16.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":88}},{"path":"Dockerfile.vendor","size":12563,"sha256":"4795025098842339d31ee00fdcc5193f48a3eb0df37549d7c87c1475635d1b2f","public":"account","lines":91},{"path":"MANIFEST.txt","size":75580,"sha256":"17cb2b285086a162a8c71dc4468be559464f6c64eb0f91e690854f06a36dc312","public":"account","lines":1143},{"path":"SOURCE_DATE_EPOCH.txt","size":11,"sha256":"60b7a228185e704db1fed46b652138f037bca043748a848aa14012d42c278feb","public":"full","lines":1,"url":"/api/recipe/swag/5.9.0-CE-ubuntu24.04-r1/files/SOURCE_DATE_EPOCH.txt","text":"1793438806\n"},{"path":"TARGET_DIGEST.txt","size":393,"sha256":"04116a847ee187ce6d2ca54f4f800cf30a95af4fdfdb3a03ad34122da6691be8","public":"full","lines":8,"url":"/api/recipe/swag/5.9.0-CE-ubuntu24.04-r1/files/TARGET_DIGEST.txt","text":"image_manifest_digest=sha256:fae67e509ab4b905beeb49e4c409e63f7bbeb36c13ba149af182d47d6b8797c3\nconfig_digest=sha256:f26aa2ad2d0d7a034b3e0624671d8c26ee5852534d1ae3456a9a72a1e35e8c86\ntag=readystack/swag:5.9.0-CE-ubuntu24.04-r1\nprobe_port=8080\nprobe_path=/\nprobe_timeout=180\nverify_env=SWAG_CERTBOT=false\nprobe_exec=curl -s -o /dev/null -w '%{http_code}' http://127.0.0.1:8080/ | grep -qE '^[23]'\n"},{"path":"VERIFY_OFFLINE.sh","size":10153,"sha256":"3e8184ea230cfd8f41f977e26be6bf7bd03112c396c517837ce0c7de4f7399dd","public":"account","lines":165},{"path":"docs/PROVENANCE.md","size":2569,"sha256":"b6a5c10cafeaf1cff36da2a70ef94984cc89af2132344c0acb21149fd0be346e","public":"account","lines":36},{"path":"docs/REBUILD.md","size":5072,"sha256":"ccd19fe95868ce2856b9a09a7dc0a237fb4591458759e800829f9d1245f89392","public":"account","lines":57},{"path":"docs/VERIFY.md","size":1935,"sha256":"1d73ee1fe08d7bc05183016cf2134cc1a18a585c6b7e415f680459000a48f504","public":"account","lines":34},{"path":"docs/provenance/BASE_IMAGE_DIGESTS.lock","size":47,"sha256":"7acd08a7c2d325d4b74c267c01f2b88d4d0dd54d7010d28eeeb56df0b916a933","public":"full","lines":2,"url":"/api/recipe/swag/5.9.0-CE-ubuntu24.04-r1/files/docs/provenance/BASE_IMAGE_DIGESTS.lock","text":"# base images for swag (resolve at build_kit)\n\n"},{"path":"docs/provenance/BUILD_RECIPE.json","size":8641,"sha256":"571180da9a4b96af11c8ac63e41f857bb5c8f23b1d71f951bbaf5d47ccc3e420","public":"account","lines":109},{"path":"docs/provenance/CUSTODY_INPUTS.json","size":657,"sha256":"e79748377efc31cbddf6382ac09943578687e08db312d0d8a0788908e6718267","public":"account","lines":17},{"path":"docs/provenance/SOURCE_FILE_MANIFEST.json","size":7782,"sha256":"4be9fa677ca03b3d8071cd43c78b41efe73eeb73f676e8d30815dfc5807afdfb","public":"account","lines":159},{"path":"docs/provenance/SOURCE_TREE_HASH.json","size":314,"sha256":"b392efb4fac4c2d512a9d242294e91b2fe33118656d6178a1566f229ef29482e","public":"full","lines":9,"url":"/api/recipe/swag/5.9.0-CE-ubuntu24.04-r1/files/docs/provenance/SOURCE_TREE_HASH.json","text":"{\n  \"schema\": \"kitforge.source_tree_hash.v1\",\n  \"slug\": \"swag\",\n  \"repo\": \"https://github.com/linuxserver/docker-swag\",\n  \"ref\": \"5.9.0-ls497\",\n  \"commit\": \"24000edb531a50939fd4e1a9e5943aa659fb2dab\",\n  \"tree_listing_sha256\": \"b8940a29f1bf74e97e31b5fafda9240ff496e094b57d146cf8afaa5dac2348b6\",\n  \"file_count\": 152\n}"},{"path":"docs/provenance/SYSTEM_PINNING.lock","size":93,"sha256":"28602e4092a8fd4260655579007d8329648800804ed67a768deb3eaaa5adfcec","public":"account","lines":10},{"path":"docs/provenance/TOOLCHAIN.lock","size":7615,"sha256":"608e26d384256253d0c15f40064428ebb7600270f7461d1cf614394a91953c24","public":"account","lines":122},{"path":"nginx-root.conf","size":34,"sha256":"dd042df74e80034ac7695ea9f3f73788426eb4af47dc533d89ce582be5b35287","public":"account","lines":1},{"path":"rebuild.json","size":1269,"sha256":"5b3946ed3dfbac50c4509f00df93d19f97ae81533d1a0ae9c693075b84f9b4c2","public":"account","lines":36},{"path":"swag-entrypoint.sh","size":9680,"sha256":"147be6b4c17bb6a1aaaf5c935abcfc1b253073dacfc830d8a443846131c5f106","public":"account","lines":133},{"path":"toolchain/BUILDKIT_TAG.txt","size":22,"sha256":"fcd530eeb02b063d2f047adad6eef896422a8e8d558513e5f09b2a262be32573","public":"full","lines":1,"url":"/api/recipe/swag/5.9.0-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":210,"bytes":5041796},"toolchain":{"files":1,"bytes":111529472},"vendored":{"files":901,"bytes":265991951}},"links":{"page":"https://readystack.dev/products/swag/recipe","signup":"https://readystack.dev/login.html?create=1&next=%2Fproducts%2Fswag%2Frecipe","kit":"https://readystack.dev/products/swag#pp-kit"}}