docs: document Python 3.11/3.12 coexistence with FreeBSD defaults

FreeBSD pkg repos build against PYTHON_DEFAULT=3.11, so system packages
(git, libinput, npm-node24) pull python311 as transitive deps. We keep
python312 as the application Python — it wins the python3 symlink via
sort -V. Document this in BUILD.md, build.sh, package lists, and
bootstrap.html so the dual-version reality is explicit and intentional.
This commit is contained in:
Sam & Claude 2026-06-21 09:36:28 +02:00
parent b892a9c64e
commit 940404d612
5 changed files with 22 additions and 8 deletions

View file

@ -559,9 +559,17 @@ Listed for completeness so the lean/full split stays honest:
`FreeBSD-fwget`. `FreeBSD-fwget`.
- **Jails:** `bastille`. - **Jails:** `bastille`.
- **Operator diagnostics:** `tmux`, `screen`, `mc`, `zip`, `unzip`, - **Operator diagnostics:** `tmux`, `screen`, `mc`, `zip`, `unzip`,
`7-zip`, `python312`, `dejavu`. Python package-flavored extras such as `7-zip`, `python312`, `dejavu`.
Pillow stay out of pkg lists until FreeBSD quarterly publishes Python 3.12
flavors. **Python version coexistence:** FreeBSD's official package repos build
against Python 3.11 (`PYTHON_DEFAULT=3.11`), so system packages
(`git`, `libinput`, `npm-node24` and others) pull `python311` as a
transitive dependency. We explicitly install `python312` as the
**application Python** — it becomes the `python3`/`python` symlink
target and the version used by venvs, scripts, and operator tooling.
Both versions coexist on the ISO; the disk overhead (~80 MB) is
accepted in favor of Python 3.12 future-readiness.
- **Xorg base:** `xorg-minimal`, `xkeyboard-config`, `xkbcomp`, - **Xorg base:** `xorg-minimal`, `xkeyboard-config`, `xkbcomp`,
`xf86-input-libinput`, `xf86-video-scfb`, `xf86-video-intel`, `xf86-input-libinput`, `xf86-video-scfb`, `xf86-video-intel`,
`xf86-video-amdgpu`, `xf86-video-ati`, `drm-kmod`, `xf86-video-amdgpu`, `xf86-video-ati`, `drm-kmod`,

View file

@ -1267,10 +1267,11 @@ configure_live_operator_session() {
chmod 0644 "${MOUNT_POINT}/etc/resolv.conf" chmod 0644 "${MOUNT_POINT}/etc/resolv.conf"
fi fi
# FreeBSD packages ship pythonX.Y (e.g. python3.12) but not a bare python3 # FreeBSD packages ship pythonX.Y but not a bare python3 symlink.
# symlink. Scripts that use /usr/bin/env python3 break without this. # Scripts using /usr/bin/env python3 break without this. System deps
# Derive the installed minor version so a future bump (3.12 -> 3.13) needs # pull python311 (FreeBSD default), we install python312 explicitly.
# only a package-list change, never an edit here. # sort -V picks the highest installed version (3.12 > 3.11), so
# python312 always wins the symlink — no hardcoded version here.
if [ ! -e "${MOUNT_POINT}/usr/local/bin/python3" ]; then if [ ! -e "${MOUNT_POINT}/usr/local/bin/python3" ]; then
py_bin=$(ls "${MOUNT_POINT}/usr/local/bin"/python3.* 2>/dev/null \ py_bin=$(ls "${MOUNT_POINT}/usr/local/bin"/python3.* 2>/dev/null \
| sed 's@.*/@@' | grep -E '^python3\.[0-9]+$' | sort -V | tail -1) | sed 's@.*/@@' | grep -E '^python3\.[0-9]+$' | sort -V | tail -1)

View file

@ -97,7 +97,7 @@
<li><code>pi</code> coding agent harness (npm global)</li> <li><code>pi</code> coding agent harness (npm global)</li>
<li>DeepSeek prefix caching (~3,500 free tokens per request)</li> <li>DeepSeek prefix caching (~3,500 free tokens per request)</li>
<li>FreeBSD <code>mac_do</code> for kernel-enforced privilege escalation</li> <li>FreeBSD <code>mac_do</code> for kernel-enforced privilege escalation</li>
<li>Python 3.12 with <code>python</code> + <code>python3</code> symlinks</li> <li>Python 3.12 (application default; 3.11 present as system-package dep)</li>
</ul> </ul>
</div> </div>

View file

@ -14,6 +14,9 @@ bsddialog
codex codex
# Python / tooling # Python / tooling
# python312 is our application Python. FreeBSD's pkg repos default to
# Python 3.11, so system deps (git, libinput, etc.) pull python311
# autonomously. Both versions coexist; python312 owns the python3 symlink.
python312 python312
just just
uv uv

View file

@ -11,6 +11,8 @@ rsync
curl curl
# agent-jail (Colibri agent-jail-bootstrap.sh baseline) # agent-jail (Colibri agent-jail-bootstrap.sh baseline)
# python312 is our application Python. System deps (npm-node24 etc.) pull
# python311 as a transitive dependency from FreeBSD's default PYTHON=3.11.
python312 python312
node24 node24
npm-node24 npm-node24