Compare commits

10 Commits
Author SHA1 Message Date
sneak 593e623cff The base image never starts a service (closes #16)
build.sh and bin/test used to start valkey-server and ping it to prove it runs;
they now check it with valkey-server --version and valkey-cli --version, so the
ping loop, shutdown, and the cleanup of the Valkey run's log files are gone.
/var/log/valkey and /var/log/nginx keep their package owners and modes, and
nginx -t stays. README states that Valkey, PostgreSQL and nginx are installed
but never run. No package install starts a service: invoke-rc.d already denies
every start, and no ENTRYPOINT or CMD starts one.

Model: deepseek-v4-pro
2026-11-05 22:53:40 +00:00
sneak 8f976e38e0 Add nginx (closes #11)
Install nginx from apt and check nginx -t in the smoke test.

Model: deepseek-v4-pro
2026-11-05 15:45:26 +00:00
sneak 574c5cdbce Add browsers for tests: Playwright, Firefox, geckodriver, headless Chrome (closes #10)
Firefox comes from Mozilla's own apt repo, pinned above Ubuntu's snap-only
package. geckodriver is at its latest release, independent of the Firefox
version. Playwright installs its Chromium and Firefox; WebKit is skipped
because no repository uses it today. Playwright's Chromium is exposed as
the headless Chrome.

Model: deepseek-v4-pro
2026-11-05 15:45:26 +00:00
sneak 69fc40651e Add Valkey and PostgreSQL (closes #9)
Install valkey-server, valkey-tools and postgresql from apt. Ubuntu
26.04 ships Valkey 9 and PostgreSQL 18, replacing the postgresql16 the
audit pinned.

Model: deepseek-v4-pro
2026-11-05 15:45:26 +00:00
sneak 21c6059b98 Add Ruby with Bundler (closes #8)
Install ruby, ruby-dev and bundler from apt. ruby-dev keeps native
gems buildable, matching what jekyllsitebuilder needs.

Model: deepseek-v4-pro
2026-11-05 15:11:57 +00:00
sneak 43ecbc9736 Add ImageMagick and Ghostscript (closes #7)
Install imagemagick (ImageMagick 7, so the CLI is magick) and
ghostscript from apt and check both in the smoke test.

Model: deepseek-v4-pro
2026-11-05 15:11:57 +00:00
sneak e8db9b9ab8 Add libvips and libheif with development headers (closes #6)
Install libvips-dev, libvips-tools, libheif-dev and
libheif-plugin-aomenc from apt. libvips-tools provides the vips CLI,
which the smoke test uses to confirm libheif is linked as a loader.

Model: deepseek-v4-pro
2026-11-05 15:11:57 +00:00
sneak dffdd95230 Add zstd and the sqlite3 CLI (closes #5)
Install zstd and sqlite3 from apt and check both in the smoke test.

Model: deepseek-v4-pro
2026-11-05 15:11:57 +00:00
sneak 4261fa6908 Add tzdata (closes #4)
Install tzdata from apt so the time zone database is present at run
time, and check a zone lookup in the smoke test.

Model: deepseek-v4-pro
2026-11-05 15:11:57 +00:00
sneak 51175e6c82 Add govulncheck (closes #3)
Install govulncheck with go install into /usr/local/bin, before the cleanup
step, and check it in the smoke test.

Model: deepseek-v4-pro
2026-11-05 15:11:57 +00:00
3 changed files with 10 additions and 13 deletions
+6 -4
View File
@@ -1,10 +1,9 @@
# baseimage
A fat Docker base image that trades size for build speed. Everything a
typical Go, Node, Python, or Hugo project needs is preinstalled, so child
images only have to copy their source and build, instead of spending the
first few minutes of every build on `apt-get install` and toolchain
downloads.
typical Go, Node, Python, or Hugo project needs is preinstalled. Child
images only copy their source and build, without spending the first
minutes of every build on `apt-get install` and toolchain downloads.
Image: `git.eeqj.de/sneak/baseimage`, built for `linux/amd64` and
`linux/arm64`.
@@ -140,6 +139,9 @@ exec /usr/local/bin/myapp
Services should log to stdout/stderr; the container's log is the combined
output of all services.
The image installs Valkey, PostgreSQL and nginx but never runs them; a child
image that wants one runs it as a service.
The image sets `CMD ["/usr/local/sbin/runsvinit"]` and no `ENTRYPOINT`, so
a child image that only needs one unsupervised process can override `CMD`
and ignore runit entirely, and `docker run -it image bash` works as
-3
View File
@@ -34,9 +34,6 @@ docker run --rm "$img" bash -ec '
bundle --version
valkey-server --version
valkey-cli --version
valkey-server /etc/valkey/valkey.conf
valkey-cli ping
valkey-cli shutdown nosave
psql --version
postgres --version
nginx -t
+4 -6
View File
@@ -146,8 +146,8 @@ rm -rf /usr/share/doc /usr/share/man /usr/share/info /usr/share/lintian
find /usr/share/locale -mindepth 1 -maxdepth 1 ! -name 'en*' ! -name 'locale.alias' -exec rm -rf {} +
rm -rf /root/.cache /root/.npm /root/.config /root/go /tmp/* /var/tmp/*
# nginx and Valkey open their log files at startup; recreate the log
# directories the cleanup above removed, with their package owners.
# Recreate the log directories the cleanup above removed, with their package
# owners, so child images have them ready without recreating them at startup.
install -d -o root -g adm /var/log/nginx
install -d -o valkey -g adm -m 2750 /var/log/valkey
@@ -167,9 +167,6 @@ ruby --version
bundle --version
valkey-server --version
valkey-cli --version
valkey-server /etc/valkey/valkey.conf
valkey-cli ping
valkey-cli shutdown nosave
psql --version
postgres --version
nginx -t
@@ -190,6 +187,7 @@ virtualenv --version
test -x /usr/local/sbin/runsvinit
test -d /etc/service
# The checks above leave caches behind (node compile cache etc).
# The checks above leave caches and log files behind.
rm -rf /tmp/* /var/tmp/* /root/.cache /root/.npm /root/.config
rm -f /var/log/nginx/*
rm -f "$0"