Skip to content

Add the Plone 2.1 legacy image - #206

Merged
ericof merged 1 commit into
mainfrom
issue-195
Aug 28, 2026
Merged

ericof merged 1 commit into
mainfrom
issue-195

Conversation

@ericof

@ericof ericof commented Aug 28, 2026

Copy link
Copy Markdown
Member

Adds the Plone 2.1.4 image to the legacy matrix — Zope 2.8.12 / Python 2.4.6, tarball era.

Closes #195

No new shared scripts: the closure is the same one 2.5 uses — build-python2.sh, build-pil.sh, install-simplejson.sh, docker-entrypoint.sh, upgrade-plone.py, configure-zeo.sh.

The older site factory

2.1 posts to a different endpoint than every ported series so far:

Version linked from /manage_main form posts to
2.1.4 CMFPlone/addSite manage_addSite
2.5.4-2 addPloneSiteForm addPloneSite

shared/smoke-test.sh resolved addSite -> manage_addSite on its own, with no change. That is now the second independent series to exercise the run-time discovery added during the 2.5 port — the version-agnostic gate is holding up.

The multiarch patch matters here

Python 2.4 predates Debian multiarch, so its setup.py looks in /usr/lib while bookworm keeps libz and libcrypt only in /usr/lib/x86_64-linux-gnu. Without the patch build-python2.sh carries, zlib and crypt are skipped silently and the interpreter comes out unusable. Verified on the built image: import zlib, sha, md5 exits 0.

Two wrong product counts, corrected rather than copied forward

The port convention is a verbatim copy from plone-legacy, but the ledger's whole purpose is to be the verified record, so these are fixed here.

32 products land in Products/ → the image has 30 product directories. ls reports 32 because CONTENTS.txt and README.txt sit alongside the products and are not products. The bullet now gives the directory count, says which number ls reports, and says why — so the entry count cannot quietly come back.

This was one step from happening in the 2.5 port too, where the README's 38 happened to be a genuine directory count and survived checking.

All 37 products register → not reproducible from the image at all. It is not the 30 bundle directories, not the 32 entries, and not 30 + Zope's 22 built-in products (which would be 52, and double-counts BTreeFolder2). Rather than substitute another guess, the sentence now states what the smoke gate actually proves: all 30 register with no import or install errors.

legacy/2.5/README.md carried the bad figure in its cross-reference — "vs. 20 in 2.0.5 and 32 installed in 2.1.4" — so that is corrected in the same commit. Its other two figures were checked and are right: 2.5.4-2 has 38 product directories and 2.0.5 has 20, both directory counts.

Verification

  • make lint — 10 Dockerfiles, 11 shell scripts, workflow YAML
  • make -n on all four 2.1 targets, including the test-demo-2.1 case the GNU Make 3.81 stem rule would otherwise route to test-%
  • SMOKE_CREATE_SITE=1 make test-2.1 — 6/6, site root 23630 bytes
  • make test-demo-2.1 — 6/6, build-time password confirmed dead after the ADMIN_PASSWORD reset

Versions read out of the built image, not from the ARGs: Products/CMFPlone/version.txt → 2.1.4, interpreter → 2.4.6, simplejson 2.0.9 imports, from PIL import Image succeeds.

Note on CI

The base build was fully cache-hit from the plone-legacy checkout, so the cold build — CPython 2.4.6, PIL and Zope 2.8.12 all compiled from source — is exercised for the first time in this PR's CI run. The -demo layer did rebuild locally, seed step included.

Two series remain after this one: #196 (2.0) and #197 (1.0).

Ninth series of the legacy matrix. Refs #195.

Plone 2.1.4 on Zope 2.8.12 / Python 2.4.6, tarball era. No new shared scripts:
the closure is the same one 2.5 uses -- build-python2.sh, build-pil.sh,
install-simplejson.sh, docker-entrypoint.sh, upgrade-plone.py and
configure-zeo.sh.

The site factory is the older pair. 2.1.4 links CMFPlone/addSite and posts to
manage_addSite, where 2.5.4-2 links addPloneSiteForm and posts to addPloneSite.
shared/smoke-test.sh discovered both steps at run time with no change, which is
now the second independent series to exercise that discovery -- the gate
resolved "addSite -> manage_addSite" on its own.

Python 2.4.6 needs the multiarch patch that build-python2.sh carries. Python
2.4 predates Debian multiarch, so its setup.py looks in /usr/lib while bookworm
keeps libz and libcrypt only in /usr/lib/x86_64-linux-gnu; without the patch
zlib and crypt are skipped silently and the interpreter comes out unusable.
Verified on the built image: `import zlib, sha, md5` exits 0.

Two product counts in 2.1/README.md were wrong, and are corrected here rather
than copied forward.

The ledger claimed "32 products land in Products/". The image has 30 product
directories; `ls` reports 32 because CONTENTS.txt and README.txt sit alongside
them and are not products. The bullet now gives the directory count, says which
number `ls` reports, and says why -- so the entry count cannot quietly come
back. The same mistake was one step from being made in the 2.5 port, where the
README's 38 happened to be a directory count and survived checking.

The opening paragraph claimed "All 37 products register". That number is not
reproducible from the image at all: it is not the 30 bundle directories, not
the 32 entries, and not the 30 plus Zope's 22 built-in products, which would be
52 and double-counts BTreeFolder2. Rather than substitute another guess, the
sentence now states what the smoke gate actually proves -- that all 30 register
with no import or install errors.

legacy/2.5/README.md carried the bad figure too, in its cross-reference "vs. 20
in 2.0.5 and 32 installed in 2.1.4", so that is corrected in the same commit.
Its other two figures were checked and are right: 2.5.4-2 has 38 product
directories and 2.0.5 has 20, both directory counts.

Verified locally: make lint passes with 10 Dockerfiles and 11 shell scripts;
make -n resolves all four 2.1 targets, including the test-demo-2.1 case the GNU
Make 3.81 stem rule would otherwise send to test-%. The base image passes the
smoke gate with SMOKE_CREATE_SITE=1 (6/6, site root 23630 bytes) and the -demo
variant passes make test-demo-2.1 (6/6), with the build-time password confirmed
dead after the ADMIN_PASSWORD reset.

The versions were read out of the built image rather than taken from the ARGs:
Products/CMFPlone/version.txt reads 2.1.4, the interpreter reports 2.4.6,
simplejson 2.0.9 imports, and `from PIL import Image` succeeds.

The base build was fully cache-hit from the source repository's layers, so the
cold build -- CPython 2.4.6, PIL and Zope 2.8.12 all compiled from source -- is
exercised for the first time in CI. The -demo layer did rebuild locally, seed
step included.
@ericof ericof self-assigned this Aug 28, 2026
@ericof
ericof merged commit 09b80f7 into main Aug 28, 2026
14 checks passed
@ericof
ericof deleted the issue-195 branch August 28, 2026 19:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Plone 2.1 image

1 participant