Enable Firebird 3 on Debian Trixie and Ubuntu Noble#43
Open
fdcastel wants to merge 2 commits into
Open
Conversation
The FB3 amd64 tarball links against libncurses.so.5/libtinfo.so.5; those packages were dropped from apt on Debian Trixie and Ubuntu Noble. Provision them by side-loading the corresponding .debs from the bookworm (Trixie) and jammy (Noble) archive pools. Gated on FIREBIRD_MAJOR == 3 via /etc/os-release. Also adds tzdata to Noble's distro extraPackages: FB3 uses libc localtime() for the TZ env var, which requires /usr/share/zoneinfo (absent from ubuntu:noble; FB4+ ships its own zoneinfo). Records D-017 (supersedes the FB3+Noble clause of D-007).
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #42.
Problem
The official Firebird 3 amd64 tarball links against
libncurses.so.5/libtinfo.so.5. Debian Trixie and Ubuntu Noble both dropped thelibncurses5/libtinfo5apt packages, so the existing FB3 Dockerfile (whichapt-get installslibncurses5) cannot build on those distros. Until now the repo worked around this by excluding the combinations viablockedVariantsinassets.json(D-007). Trixie is now the default distro (D-012), so leaving FB3 unsupported there is no longer an acceptable position.Empirically verified during planning:
lddagainst every ELF in the unpacked Firebird-3.0.14 tarball showslibncurses.so.5is the only remaining unresolved dependency on Trixie and Noble —libtommath.so.0is already handled by the existing symlink in the Dockerfile (line 74). All other deps (libatomic1, libicu74/76, libtomcrypt1, libtommath1) are present on both distros.Fix
src/Dockerfile.templategains a new RUN step, gated onFIREBIRD_MAJOR == 3, that detects the distro via/etc/os-releaseand provisionslibncurses5+libtinfo5:debian-bookworm | debian-bullseye | ubuntu-jammy→apt-get install -y --no-install-recommends libtinfo5 libncurses5(unchanged behaviour, just relocated out of the main apt step).debian-trixie→curl+dpkg -ioflibtinfo5_6.4-4_amd64.debandlibncurses5_6.4-4_amd64.debfrom the bookworm pool atdeb.debian.org.ubuntu-noble→curl+dpkg -ioflibtinfo5_6.3-2ubuntu0.1_amd64.debandlibncurses5_6.3-2ubuntu0.1_amd64.debfrom the jammy/universe pool atarchive.ubuntu.com.The previous
$([ \$FIREBIRD_MAJOR -eq 3 ] && echo 'libncurses5' || echo 'libncurses6')ternary on the main apt-get line is replaced with plainlibncurses6— all five distros have it, and the new block now owns FB3-specific ncurses provisioning end-to-end.assets.json:blockedVariantscleared ({}).nobleandtrixieentries in itstagsmap. 3.0.14 is latest-of-major, so its trixie entry carries the3.0.14,3,3-trixie,3.0.14-trixiealiases; its noble entry carries3.0.14-noble,3-noble. Older patches get3.0.X-nobleand[3.0.X-trixie, 3.0.X]per the existing tag-shape convention.noble'sextraPackagesgainstzdata. FB3 uses libclocaltime()for theTZenv var, which requires/usr/share/zoneinfo; the ubuntu:noble base image, like jammy, ships without it. FB4+ embeds its own zoneinfo and is unaffected, which is why the gap only surfaced when re-enabling FB3 builds on Noble. The matchingtzdatapackage was already in jammy'sextraPackages.DECISIONS.mdrecords this as D-017 and marks D-007 amended.src/README.md.templatedrops the now-stale "Firebird 3 does not have an image for Ubuntu 24.04 LTS" warning.AGENTS.mdline 22 changesBlocked: FB3 + noble (no libncurses5).toBlocked: none..The new RUN block is text-present in all generated Dockerfiles (FB4/FB5 included) but is a no-op there because the outer
if [ "$FIREBIRD_MAJOR" = "3" ]guard short-circuits. FB4 and FB5 image content is unchanged apart from the line-25 ternary collapsing to plainlibncurses6.Test plan
Local (PowerShell on the contributor host):
Invoke-Build PrepareandInvoke-Build Update-Readmeproduce a deterministic, idempotent diff (verified by SHA-256-inggenerated/andREADME.mdbefore and after a second run).src/tags.tests.ps1: 6/6 green.Invoke-Build Build -VersionFilter '3.0.14' -DistributionFilter 'trixie'and the matchingInvoke-Build Test: 24/24 tests green.3.0.14+noble: 24/24 tests green (only after the tzdata fix; theTZ_can_change_system_timezonetest was the canary that surfaced the missing zoneinfo).3.0.14+bookwormand5.0.4+trixie: both 24/24 green.Fork CI (
fdcastel/firebird-docker-fork, ci.yaml on push):3.0.14,4.0.7,5.0.4across all five distros — green.Risks and follow-ups
.debURLs are pinned to specific bookworm and jammy archive paths. Both pools remain populated through their respective LTS windows (~mid-2028 for bookworm, ~April 2032 for jammy ESM). If a future archive cycle removes a file, the URL can be repointed atsnapshot.debian.org/launchpad.net/+archive/...from inside the samecaseblock — no template restructuring required.Default distro: bookwormon the sameAGENTS.mdline as theBlocked:text is unrelated drift (the actual default istrixieper D-012); left for a separate PR rather than expanding scope.src/tags.tests.ps1does not assert anything aboutblockedVariantsor FB3's absence from any distro — no test edits required for the unblock.