2
0
mirror of https://github.com/xcat2/xcat-dep.git synced 2026-09-12 12:36:23 +00:00
Commit Graph

53 Commits

Author SHA1 Message Date
Vinícius Ferrão 6828df8d67 fix(genesis): order release capability checks 2026-09-06 11:15:33 -03:00
Vinícius Ferrão 99d60459e7 docs(genesis): explain release formats 2026-09-06 10:54:29 -03:00
Vinícius Ferrão bea6826ac5 fix(genesis): preserve release compatibility 2026-09-06 10:54:28 -03:00
Vinícius Ferrão 86e2df00cb refactor(genesis): follow perl style 2026-09-04 18:11:23 -03:00
Vinícius Ferrão ecb9901e26 docs(genesis): explain publisher compatibility 2026-09-04 18:02:04 -03:00
Vinícius Ferrão 71f4e0d18a fix(genesis): harden release compatibility gates 2026-09-04 18:02:03 -03:00
Vinícius Ferrão 64ecf10b41 docs(genesis): define current release completeness 2026-09-04 17:15:25 -03:00
Vinícius Ferrão cd6bcaccbd fix(genesis): refuse incomplete current releases 2026-09-04 17:15:23 -03:00
Vinícius Ferrão 2b5ef0ebe7 fix(genesis): use the build architecture contract 2026-09-04 16:54:13 -03:00
Vinícius Ferrão a7a7a1898d docs(genesis): explain release compatibility 2026-09-04 16:16:23 -03:00
Vinícius Ferrão 2a434beaad fix(genesis): validate release manifests 2026-09-04 16:16:23 -03:00
Vinícius Ferrão 565250246a docs(genesis): list s390x packages 2026-09-04 14:00:30 -03:00
Vinícius Ferrão 87d0e347e3 feat(genesis): package s390x images 2026-09-04 13:59:45 -03:00
Daniel Hilst 2a4eb248b4 feat(xcat-dep): merge master and share one Genesis pool across every apt suite
PR #65 changed where the OpenEmbedded Genesis packages live. On the RPM side
they are published once under xcat-dep/common; on the APT side, once under
pool/main/xcat-genesis-openembedded, with every suite's Packages index pointing
at that one copy instead of each suite carrying its own. It made that change in
build-apt-repo.sh -- the script this branch deletes, having absorbed apt assembly
and signing into sbuild-all.pl -- so the layout is ported here rather than lost.

sbuild-all.pl:

- --genesis-release now rebuilds a single shared pool inside the side tree and
  indexes it into every suite, so a release is stored once rather than once per
  codename. The debs are Architecture:all and identical everywhere; the previous
  per-suite copy multiplied hundreds of megabytes by the number of suites.
- Because every suite's index points into that pool, publishing a release must
  cover every suite: a run whose --dists omits one is refused, instead of leaving
  that suite indexing files the new release retired.
- OpenEmbedded Genesis debs are dropped from suite pools unconditionally now,
  not only when a release is being published -- they belong to the shared pool.
- Published files get an explicit mode 0644: they are served by a web server
  running as another user, and inheriting the builder's umask is how that breaks.

master's transaction machinery (per-file backups, --force-unlock recovery of an
interrupted publisher) is deliberately NOT ported: it exists because the shell
publisher writes into the live repository. sbuild-all.pl assembles a complete
side tree, gates it, and renames it into place under one global publish lock, so
a failed or killed run leaves the published repository untouched and there is no
half-written state to recover. The tests assert that guarantee directly.

The APT consumer tests now drive sbuild-all.pl's publish path with master's new
expectations: the shared pool holds one complete release, suite pools hold none
of it, every suite/arch index carries the shared Filename, a later single-suite
rebuild keeps using the pool, a partial-suite release is refused, and a
publication that cannot be signed leaves the packages, indexes and key exactly
as they were.

Full suite green: 416 tests on xcat-master (rome01, EL10) and 414 on
xcat-master-ub, where the APT cases actually run.

Signed-off-by: Daniel Hilst <392820+dhilst@users.noreply.github.com>
2026-08-25 18:10:35 -03:00
Vinícius Ferrão 6f25ddc0eb fix(genesis): own RPM helper directory 2026-08-24 23:51:09 -03:00
Vinícius Ferrão 0f75e018ee docs(genesis): clarify suite publication 2026-08-24 23:25:15 -03:00
Vinícius Ferrão 37e8d12299 fix(genesis): guard package cleanup 2026-08-24 23:25:15 -03:00
Vinícius Ferrão 4f8abc7861 docs(genesis): document repository recovery 2026-08-24 22:54:56 -03:00
Vinícius Ferrão f6ceb0c613 fix(genesis): clean package lifecycle 2026-08-24 22:54:55 -03:00
Vinícius Ferrão 582d541bf3 chore(genesis): mark dynamic profile source 2026-08-24 21:58:20 -03:00
Vinícius Ferrão 20e2d7616d fix(genesis): complete repository handoff 2026-08-24 21:48:59 -03:00
Vinícius Ferrão 1c94bca320 fix(genesis): refresh updated boot images 2026-08-24 21:30:16 -03:00
Vinícius Ferrão ab6bfee319 docs(genesis): explain shared APT refreshes 2026-08-24 20:48:55 -03:00
Vinícius Ferrão 9af2edae99 docs(genesis): describe shared package layout 2026-08-24 19:54:48 -03:00
Daniel Hilst de98bb24f1 feat(xcat-dep): merge master and carry the Genesis release into the apt publisher
PR #64 landed on master and added --genesis-release to build-apt-repo.sh -- the
very script this branch deletes, having absorbed the apt assembly + signing phase
into sbuild-all.pl. A plain merge would either resurrect the shell publisher or
silently drop the OpenEmbedded Genesis release from every apt suite, so the
feature is ported to where apt publication now lives.

sbuild-all.pl --genesis-release <dir>:

- The release is validated once at startup, before any build or publish, with the
  same checksum-verify-checksum sequence mockbuild-all.pl uses on the rpm side, so
  a release rewritten together with its SHA256SUMS while the verifier runs is
  rejected. It must be complete (every supported architecture) and carry debs.
- During assemble_into, each release deb is copied into the codename's pool and the
  flat per-version directory and re-checked against the verified checksums. That
  happens with the publish lock held, between the pool wipe and apt-ftparchive, so
  the bytes that are indexed and signed are the bytes that were verified -- the
  separate re-verification pass build-apt-repo.sh ran before indexing has no
  window left to cover here.
- Copies are plain copies, never link(): a pool file sharing an inode with the
  release would let a write through either path change what the other holds.
- Anything staged under the OpenEmbedded Genesis package name is dropped when the
  option is given; the verified release is the only source of those packages.
- XCAT::GenesisRelease is loaded on demand rather than imported at compile time. It
  pulls in XCAT::BuildUtils, which needs File::Slurper, and xcat-master-ub does not
  carry it: a compile-time import made every apt build -- including the ones that
  never pass --genesis-release -- die with "Can't locate File/Slurper.pm".

Also here:

- --publish-lock-wait <seconds> makes the 1800s publish-lock wait settable, so a
  caller that would rather fail fast than queue can, and so the lock is testable.
- t/genesis_openembedded_consumer.t: the four APT consumer tests now drive
  sbuild-all.pl's real publish path (staging tree, publish lock, atomic swap)
  instead of build-apt-repo.sh, including the new flock-based lock behaviour.
- The workflow compiles sbuild-all.pl and BuildUtils.pm instead of shellchecking
  the removed script; BUILD.md and genesis-openembedded/README.md document the apt
  invocation.

Full suite green on both build hosts: 345 tests on xcat-master-ub (Ubuntu 24.04,
where the APT and RPM consumer tests actually run) and 341 on xcat-master.

Signed-off-by: Daniel Hilst <392820+dhilst@users.noreply.github.com>
2026-08-24 15:36:27 -03:00
Vinícius Ferrão 5b226fdad4 docs(genesis): explain the release re-checksum and the verified rpm versions
The two checksum passes around the verifier read as a duplicated walk; say what
the second one is for. Record which rpm versions reproduce the package identity
verify-release requires, so a build host outside that set is a known question
rather than a guess.
2026-08-24 13:57:25 -03:00
Vinícius Ferrão 2fe5f186a1 build(genesis): drop the _buildtime define no rpm 4 honours
%_buildtime is not an rpm macro: built with it alone and no SOURCE_DATE_EPOCH,
rpm 4.14.3, 4.16.1.3 and 4.19.1.1 all stamped the current time. The build time
and build host the release verifier checks come from SOURCE_DATE_EPOCH with
use_source_date_epoch_as_buildtime, and from _buildhost -- both honoured on
every one of those versions and on rpm 6.0.2, where the package also builds
and verifies unchanged.
2026-08-24 13:57:25 -03:00
Vinícius Ferrão e13f2fc207 fix(genesis): support custom RPM build layouts 2026-08-23 00:10:03 -03:00
Vinícius Ferrão 72cba4a4a5 docs(genesis): state the release trust boundary 2026-08-22 23:45:42 -03:00
Vinícius Ferrão d81a4ae248 fix(genesis): harden package publication 2026-08-22 23:44:01 -03:00
Vinícius Ferrão 994ba1f9e8 docs(genesis): list shared Perl modules 2026-08-22 19:36:35 -03:00
Vinícius Ferrão f91f5ff929 fix(genesis): share copied package verification 2026-08-22 19:27:24 -03:00
Vinícius Ferrão 69a00bf43f refactor(genesis): share release build helpers 2026-08-22 19:24:45 -03:00
Vinícius Ferrão 861cec2d8f ci(genesis): test unprivileged package builds 2026-08-22 02:43:01 -03:00
Vinícius Ferrão 17bd87c53c fix(genesis): harden staged release publication 2026-08-22 02:39:38 -03:00
Vinícius Ferrão fd0cffadac docs(genesis): describe staged package rollout 2026-08-22 02:15:04 -03:00
Vinícius Ferrão 6516f29423 fix(genesis): stage OpenEmbedded packages separately 2026-08-22 02:14:17 -03:00
Vinícius Ferrão 2531e9f579 docs(genesis): clarify release publication 2026-08-22 01:34:32 -03:00
Vinícius Ferrão be73af9799 fix(genesis): replace legacy DEB packages 2026-08-22 01:31:36 -03:00
Vinícius Ferrão 6597def239 fix(genesis): harden package install hooks 2026-08-22 01:31:36 -03:00
Vinícius Ferrão 7ac007d545 fix(genesis): accept valid release filenames 2026-08-22 01:31:36 -03:00
Vinícius Ferrão c71b04344e fix(genesis): require reproducible archive tooling 2026-08-22 01:31:36 -03:00
Vinícius Ferrão 779f5f7b21 fix(genesis): pin verified release checksums 2026-08-22 01:25:39 -03:00
Vinícius Ferrão fc11b981ab fix(genesis): require complete repository releases 2026-08-22 01:22:06 -03:00
Vinícius Ferrão d4e0d6c390 fix(genesis): normalize package build modes 2026-08-22 01:20:07 -03:00
Vinícius Ferrão 4d0ee7d5f1 fix(genesis): tolerate inaccessible build cwd 2026-08-22 00:27:12 -03:00
Vinícius Ferrão e3ff2eb1cf fix(genesis): isolate OpenEmbedded tmpdir 2026-08-21 10:44:42 -03:00
Vinícius Ferrão 87c769304a fix(genesis): reject untracked release sources 2026-08-21 09:38:56 -03:00
Vinícius Ferrão 57f0db1ed3 docs(genesis): record package transition gate 2026-08-21 09:35:39 -03:00
Vinícius Ferrão ed1d72bc77 fix(genesis): make file listing scalar-safe 2026-08-21 09:33:14 -03:00