feat(base): add sqlite3, bc, dc and bsdextrautils
sqlite3 is the only one of the four that was genuinely missing rather than merely absent. MemPalace keeps both the palace and the logstream as SQLite files (palace/chroma.sqlite3, logstream.sqlite3) and mempalace_status reports a sqlite_integrity block, so every integrity or forensics check on this fleet has so far gone through a python3 -c one-liner because the CLI was not in the image. bc and dc are low value on their own and the CHANGELOG says so plainly: awk, python3 and perl are all already baked and each is strictly more capable. They are here because copy-pasted shell snippets assume bc exists. What actually went wrong on 2026-09-28 was NOT bc's absence: printf '%6.2f' was handed the empty output of the missing bc and rendered it as a confident "0.00 days" for a figure that was really 4.81 days. No package fixes that failure mode -- only not taking a formatted number on trust does. bsdextrautils ships /usr/bin/column. Cost MEASURED rather than estimated: 1311 KB total (587 + 236 + 149 + 339) and ZERO transitive packages. libsqlite3-0, libreadline8t64, zlib1g, libsmartcols1 and libtinfo6 each already report "install ok installed", so nothing new is pulled under --no-install-recommends. Package names were verified with apt-cache and dpkg -S on a real trixie host instead of being inferred, which caught two traps that would each have produced either a build failure or a silently missing binary: dc is a SEPARATE binary package from bc on Debian, and column ships in bsdextrautils, not in the pre-bullseye bsdmainutils where it used to live. Declined at the same time, recorded so the omission reads as a decision rather than an oversight: datamash and xsv/csvkit. Python's stdlib csv module handled a real 7-file Excel-export concatenation that day -- UTF-8 BOM, no trailing newlines, and bare CR/LF inside quoted fields -- correctly and without them. Dockerfile.base is in the base hash, so the next tag rebuilds the base (~64 min) regardless of what else it carries.
This commit is contained in:
@@ -162,6 +162,42 @@ ENV DEBIAN_FRONTEND=noninteractive
|
||||
# /dev/tcp does reachability checks with zero packages
|
||||
# (verified against gitea.egl.lan:3000). Recorded here so the
|
||||
# omission reads as a decision rather than an oversight.
|
||||
# sqlite3 — the `sqlite3` CLI. Added 2026-09-28 at ALC's request. 587 KB.
|
||||
# This is the one that was genuinely missing rather than merely
|
||||
# absent: MemPalace keeps BOTH the palace and the logstream as
|
||||
# SQLite files (palace/chroma.sqlite3, logstream.sqlite3),
|
||||
# mempalace_status reports a sqlite_integrity block, and every
|
||||
# integrity or forensics check on this fleet has so far been
|
||||
# done through a python3 -c one-liner because the CLI did not
|
||||
# exist in the image.
|
||||
# bc, dc — arbitrary-precision calculators. 236 KB + 149 KB. SEPARATE
|
||||
# binary packages on Debian (dc split out of bc before
|
||||
# bookworm), so both must be named — verified with apt-cache on
|
||||
# a trixie host, not assumed. Added 2026-09-28. HONEST
|
||||
# RATIONALE: low value on their own, because awk, python3 and
|
||||
# perl are all already baked and each is strictly more capable.
|
||||
# They are here because copy-pasted shell snippets assume bc
|
||||
# exists. Note what actually went wrong on 2026-09-28, since it
|
||||
# was NOT bc's absence: `printf '%6.2f'` was handed the empty
|
||||
# output of the missing bc and rendered it as a confident
|
||||
# "0.00 days" for a figure that was really 4.81 days. A missing
|
||||
# tool that formats as a plausible number is worse than one
|
||||
# that fails loudly, and no package fixes that — only not
|
||||
# taking a formatted value on trust does.
|
||||
# bsdextrautils— ships /usr/bin/column. 339 KB. Added 2026-09-28. Confirmed
|
||||
# with `dpkg -S /usr/bin/column` on trixie rather than inferred
|
||||
# from the pre-bullseye bsdmainutils name, which is where column
|
||||
# used to live and is the obvious way to get this wrong.
|
||||
# MEASURED COST OF ALL FOUR: 1311 KB total and ZERO transitive
|
||||
# packages — libsqlite3-0, libreadline8t64, zlib1g,
|
||||
# libsmartcols1 and libtinfo6 are each already present in the
|
||||
# image (checked with dpkg-query, all five report
|
||||
# "install ok installed"), so under --no-install-recommends
|
||||
# nothing new is pulled.
|
||||
# NOT added — datamash, xsv/csvkit: considered 2026-09-28 and
|
||||
# declined. Python's stdlib csv module handled a real 7-file
|
||||
# Excel-export concatenation that day (BOM, CRLF, embedded
|
||||
# newlines inside quoted fields) correctly and without them.
|
||||
# python3-yaml — PyYAML. Added 2026-09-10 for precisely the same reason as
|
||||
# shellcheck above: a gate this repo ALREADY OWNS could not be
|
||||
# run locally by anyone. scripts/check-workflow-shell.sh — the
|
||||
@@ -220,6 +256,10 @@ RUN apt-get update && \
|
||||
ldap-utils \
|
||||
xxd \
|
||||
python3-yaml \
|
||||
sqlite3 \
|
||||
bc \
|
||||
dc \
|
||||
bsdextrautils \
|
||||
&& ln -s /usr/bin/fdfind /usr/local/bin/fd \
|
||||
&& apt-get clean \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
Reference in New Issue
Block a user