build(iso): upgrade FreeBSD Python 3.11 -> 3.12 #66

Merged
clawdie merged 2 commits from upgrade-to-python-3-12 into main 2026-06-17 16:17:10 +02:00
9 changed files with 26 additions and 26 deletions

View file

@ -456,7 +456,7 @@ installed onto the live rootfs.
**Two distinct categories live in the same file** with the same code
path (fetched, not installed on live), but different long-term homes:
1. **Desktop-spin leftovers** (telegram-desktop, mpv, abiword, gnumeric,
1. **Desktop-spin leftovers** (telegram-desktop, mpv, abiword,
simplescreenrecorder, …). Inherited from the earlier all-in-one
desktop image. Don't match the operator-USB role. **Long-term home:
disk-install only.** Not returning to the live USB.
@ -483,7 +483,6 @@ disk-install consumer still needs to install
| ---------------------- | ------------------------------------------------------ | -----------------------------: | -------------: | ----------------- |
| `blender` | Parametric 3D modelling + Python `bpy` skill substrate | (large; measure on next image) | (large) | roadmap-essential |
| `telegram-desktop` | Messaging | 52.08 MiB | 236.90 MiB | leftover |
| `gnumeric` | Spreadsheet | 13.14 MiB | 45.91 MiB | leftover |
| `abiword` | Word processor | 4.75 MiB | 21.60 MiB | leftover |
| `mpv` | Media player | 1.60 MiB | 6.96 MiB | leftover |
| `simplescreenrecorder` | Screen/audio capture | 1.31 MiB | 3.83 MiB | leftover |
@ -515,7 +514,6 @@ dependencies from desktop applications, not an installer direction:
| `telegram-desktop` | `qt6-declarative`, `qt6-wayland`, `qt6-svg`, `qt6-lottie`, `kf6-*`, **`pipewire`** |
| `simplescreenrecorder` | **`pulseaudio`**, **`pipewire`**, `qt6-base`, `ffmpeg` |
| `mpv` | `ffmpeg`, `libplacebo`, `mesa-libs`, `wayland`, `vulkan-loader` |
| `gnumeric` | `python311`, `py311-pygobject`, `goffice` |
| `abiword` | `goffice`, `libgsf`, `wv` |
`simplescreenrecorder` is the worst offender — a single niche tool drags
@ -560,8 +558,10 @@ Listed for completeness so the lean/full split stays honest:
- **Networking:** `tailscale`, `networkmgr`, `wifi-firmware-kmod`,
`FreeBSD-fwget`.
- **Jails:** `bastille`.
- **Operator diagnostics (tmux screenshot skill):** `tmux`, `screen`,
`mc`, `zip`, `unzip`, `7-zip`, `python311`, `py311-pillow`, `dejavu`.
- **Operator diagnostics:** `tmux`, `screen`, `mc`, `zip`, `unzip`,
`7-zip`, `python312`, `dejavu`. Python package-flavored extras such as
Pillow stay out of pkg lists until FreeBSD quarterly publishes Python 3.12
flavors.
- **Xorg base:** `xorg-minimal`, `xkeyboard-config`, `xkbcomp`,
`xf86-input-libinput`, `xf86-video-scfb`, `xf86-video-intel`,
`xf86-video-amdgpu`, `xf86-video-ati`, `drm-kmod`,

View file

@ -286,7 +286,7 @@ and allocated size; write the logical image to a USB key large enough for it.
tailscale version
firefox
tmux -V
python3 -c "import PIL; print(PIL.__version__)"
python3 --version
bastille --help
mdo -u root bastille --help
test -f /usr/local/share/fonts/dejavu/DejaVuSansMono.ttf

View file

@ -523,7 +523,7 @@ command -v pi
pi --help
tailscale version
tmux -V
python3 -c "import PIL; print(PIL.__version__)"
python3 --version
bastille --help
mdo -u root bastille --help
```
@ -1087,7 +1087,7 @@ Mark the image good only when all of these are true:
- [ ] `pi --help` works
- [ ] `tailscale version` works
- [ ] `tmux -V` works
- [ ] `python3 -c "import PIL; print(PIL.__version__)"` works
- [ ] `python3 --version` reports Python 3.12
- [ ] `bastille --help` works
- [ ] `sudo` is absent from the live image
- [ ] no stale-label confusion remains on the flashed USB stick

View file

@ -1246,12 +1246,17 @@ configure_live_operator_session() {
chmod 0644 "${MOUNT_POINT}/etc/resolv.conf"
fi
# FreeBSD packages ship python3.11 but not a bare python3 symlink.
# Scripts that use /usr/bin/env python3 break without this.
if [ -x "${MOUNT_POINT}/usr/local/bin/python3.11" ] && \
[ ! -e "${MOUNT_POINT}/usr/local/bin/python3" ]; then
ln -sf python3.11 "${MOUNT_POINT}/usr/local/bin/python3"
ln -sf python3.11 "${MOUNT_POINT}/usr/local/bin/python"
# FreeBSD packages ship pythonX.Y (e.g. python3.12) but not a bare python3
# symlink. Scripts that use /usr/bin/env python3 break without this.
# Derive the installed minor version so a future bump (3.12 -> 3.13) needs
# only a package-list change, never an edit here.
if [ ! -e "${MOUNT_POINT}/usr/local/bin/python3" ]; then
py_bin=$(ls "${MOUNT_POINT}/usr/local/bin"/python3.* 2>/dev/null \
| sed 's@.*/@@' | grep -E '^python3\.[0-9]+$' | sort -V | tail -1)
if [ -n "${py_bin}" ]; then
ln -sf "${py_bin}" "${MOUNT_POINT}/usr/local/bin/python3"
ln -sf "${py_bin}" "${MOUNT_POINT}/usr/local/bin/python"
fi
fi
mkdir -p "${MOUNT_POINT}/usr/local/etc/sddm.conf.d"

View file

@ -486,9 +486,9 @@ clawdie_shell_deploy_setup_aider_venv() {
if [ ! -x "$python_bin" ]; then
log_msg "[deploy] Creating Aider venv at $venv_dir"
if [ "$(id -u)" -eq 0 ]; then
su - clawdie -c "python3.11 -m venv --system-site-packages '$venv_dir'" || return 1
su - clawdie -c "python3 -m venv --system-site-packages '$venv_dir'" || return 1
else
python3.11 -m venv --system-site-packages "$venv_dir" || return 1
python3 -m venv --system-site-packages "$venv_dir" || return 1
fi
fi
@ -578,7 +578,7 @@ clawdie_shell_deploy_verify() {
log_msg "[deploy] ✓ Aider available"
fi
else
log_msg "[deploy] ⚠ Aider CLI not found (py311-aider_chat missing)"
log_msg "[deploy] ⚠ Aider CLI not found (Aider venv setup missing)"
fi
return $failed

View file

@ -4,7 +4,7 @@
# Two categories live here. They share the same code path (fetched to the
# offline repo, not installed on live) but have different long-term homes:
#
# 1. Desktop-spin leftovers (telegram-desktop, mpv, abiword, gnumeric, ...).
# 1. Desktop-spin leftovers (telegram-desktop, mpv, abiword, ...).
# Long-term home: disk-install only. Not coming back to the live USB.
#
# 2. Roadmap-essential, deferred for stabilization (blender). First-class
@ -31,7 +31,6 @@ zed-editor
telegram-desktop
epdfview
abiword
gnumeric
antiword
catdoc
xls2txt

View file

@ -14,9 +14,7 @@ bsddialog
codex
# Python / tooling
python311
py311-pip
py311-aider_chat
python312
just
uv
ripgrep
@ -35,7 +33,6 @@ postgresql18-client
dnsmasq
# Media / fonts
py311-pillow
dejavu
# Wayland display stack (desktop installs)

View file

@ -65,8 +65,7 @@ zip
unzip
7-zip
bitchx
python311
py311-pillow
python312
dejavu
# Hardware introspection. FreeBSD base already provides pciconf(8),
# usbconfig(8), devinfo(8), and kldstat(8); add a few extra probes that

View file

@ -71,7 +71,7 @@ for skill_md in "$CLAWDIE_AI"/.agent/skills/*/SKILL.md; do
category="freebsd"
fi
id=$(uuidgen 2>/dev/null || python3.11 -c "import uuid; print(uuid.uuid4())" 2>/dev/null || echo "skill-$(echo "$name" | md5)")
id=$(uuidgen 2>/dev/null || python3 -c "import uuid; print(uuid.uuid4())" 2>/dev/null || echo "skill-$(echo "$name" | md5)")
sqlite3 "$DB" "INSERT OR IGNORE INTO skills (id, name, description, category, created_at)
VALUES ('$id', '$(echo "$name" | sed "s/'/''/g")', '$(echo "$description" | sed "s/'/''/g")', '$category', '$NOW');" 2>/dev/null && IMPORTED=$((IMPORTED + 1)) || SKIPPED=$((SKIPPED + 1))