Repository navigation
Fill the remaining tooling gaps in the default template - #9
Merged
Merged
Conversation
Every addition here was checked against a machine built from this
template, not read off the file. That mattered: two of the names in it
do not resolve on 26.04 at all.
Python comes from mise rather than apt. Ubuntu's python3 has no pip and
no working venv ("ensurepip is not available"), and apt's python3-pip
does not fix it: /usr/lib/python3.14/EXTERNALLY-MANAGED means pip then
refuses to install anything outside a venv, which is the same confusing
failure one step later. mise's precompiled Python installs in 4 seconds
and ships a pip that works -- verified with `pip install requests`, no
flags. uv comes along for venvs and `uv tool install`, covering what
pipx does at 50 apt packages.
git-lfs needs two lines, not one. Installing the binary leaves the bug
in place: until `git lfs install` writes the clean/smudge filters,
cloning an LFS repo still yields pointer files and nothing errors to say
so. Confirmed by reading filter.lfs.clean before and after.
The mise tools go on their own `mise use -g` line. Sharing the line with
ruby@latest node@lts would mean a failed shellcheck download taking the
language runtimes with it.
From apt, where mise has nothing to offer: lsof and bind9-dnsutils for
"what holds port 3000" and "does this host resolve", plus rsync, zip,
file and moreutils (sponge).
bind9-dnsutils, not dnsutils, and no postgresql-contrib. Neither name
has a candidate on 26.04, and cloud-init does not behave like the CLI
here: `apt-get install dnsutils` resolves the virtual name happily, but
cloud-init pre-checks each name against APT, silently drops what it
cannot resolve, and then fails the entire package stage --
The following packages were not found by APT so APT will not attempt
to install them: ['postgresql-contrib', 'dnsutils']
postgresql-contrib has been in this template since the first commit, so
that stage has been failing on every machine built from it. Nothing was
lost by it: postgresql-18 ships the contrib extensions itself, and
hstore, pg_trgm, citext, uuid-ossp and pg_stat_statements are all in
pg_available_extensions without the package.
Not added, per the issue: imagemagick (libvips covers it), memcached
(Solid Cache), and more human TUIs. yq was considered and dropped -- for
reading YAML the already-installed Ruby is equivalent, and its one real
advantage, comment-preserving in-place edits, did not carry the entry.
Two more from the issue turned out to be unnecessary: netcat-openbsd and
tzdata are both already present on a stock machine.
Cost, measured: ~3 MB of apt packages and 215 MB of mise tools, against
the 636 MB Ruby and Node already occupy. Per-user provisioning ran 40
seconds end to end.
Closes #5
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.
Closes #5.
Every addition was checked against a machine built from this template rather than read off the file — which turned out to matter, because two of the package names in it don't resolve on 26.04 at all.
Python, git-lfs, and friends via mise
Python comes from mise, not apt. Ubuntu's
python3has no pip and no working venv (ensurepip is not available), andapt install python3-pipdoesn't fix it:/usr/lib/python3.14/EXTERNALLY-MANAGEDmeans pip then refuses to install anything outside a venv — the same confusing failure, one step later. mise's precompiled Python installs in 4 seconds and ships a pip that works (verified withpip install requests, no flags).uvcomes along for venvs anduv tool install, covering what pipx does at 50 apt packages.git-lfs needs two lines, not one. Installing the binary leaves the bug in place: until
git lfs installwrites the clean/smudge filters, cloning an LFS repo still yields pointer files and nothing errors to say so. Confirmed by readingfilter.lfs.cleanbefore and after.The mise tools get their own
mise use -gline. Sharing the line withruby@latest node@ltswould let a failed shellcheck download take the language runtimes with it.From apt, where mise has nothing to offer
lsofandbind9-dnsutilsfor "what holds port 3000" and "does this host resolve", plusrsync,zip,file, andmoreutils(sponge).Two package names that never worked
bind9-dnsutils, notdnsutils— andpostgresql-contribis dropped entirely. Neither name has a candidate on 26.04, and cloud-init doesn't behave like the CLI here:apt-get install dnsutilsresolves the virtual name happily, but cloud-init pre-checks each name against APT, silently drops what it can't resolve, and then fails the entire package stage:postgresql-contribhas been in this template since the first commit, so that stage has been failing on every machine ever built from it. Nothing was lost by it —postgresql-18ships the contrib extensions itself, andhstore,pg_trgm,citext,uuid-ossp, andpg_stat_statementsare all inpg_available_extensionswithout the package (CREATE EXTENSION hstoresucceeds on a machine built from this branch).Not added
Per the issue: imagemagick (libvips covers it), memcached (Solid Cache), and more human TUIs.
yqwas considered and dropped — for reading YAML the already-installed Ruby is equivalent, and its one real advantage, comment-preserving in-place edits, didn't carry the entry. Two more from the issue turned out to be unnecessary:netcat-openbsdandtzdataare already present on a stock machine.Verification
Built a fresh machine from this template (
orbx up --template ./templates/default.yaml) and confirmed on it:dig +short github.comresolves;nslookup,host,lsof,rsync,zip,file,spongeall presentpip installwith no PEP 668 flagsuv,shellcheck,git-lfson PATH underorbx runas well asorbx shell;filter.lfs.cleanregisteredPackageInstallerErrorCost: ~3 MB of apt packages and 215 MB of mise tools, against the 636 MB Ruby and Node already occupy.
Tests: 5 new cases in
test/template.bats, including regression guards that pin the barednsutilsandpostgresql-contribnames out. 78/78 bats pass, shellcheck clean.