feat: add sidefx labs by default in the image

This commit is contained in:
Simon Lambin
2026-09-12 13:19:16 +02:00
parent 829f0a503c
commit 7075959827
3 changed files with 87 additions and 1 deletions

View File

@@ -38,6 +38,55 @@ to read this — it's implementation reasoning, not usage docs (those are in
and symlinks it to `/opt/hfs` itself, so `houdini-run` and the
`/etc/profile.d` snippet don't need to know the exact version.
## SideFX Labs — baked in, not installed at runtime
Simon hit `No such file or directory` using Houdini's own in-app package
installer for Labs. Root cause (confirmed, not guessed): this image never
installed `ca-certificates`, so any HTTPS download from inside the container
fails TLS verification — reproduced directly with `wget` against
`github.com` inside a test build (`wget` exit 5, "cannot verify github.com's
certificate"). The in-app installer's `No such file or directory` is almost
certainly it shelling out to `git` (also never installed) for the same
underlying reason: no working way to fetch anything over HTTPS. `wget` was
already installed and used fine elsewhere in this Dockerfile, so the gap was
specifically the missing CA bundle, not a missing downloader. Fixed by
adding `ca-certificates` to the apt-get install list (`base` stage).
Rather than also install `git` and instruct Simon to run the in-app
installer, Labs is fetched and baked in at build time:
- Downloaded from a GitHub **release tag**
(`https://github.com/sideeffects/SideFXLabs/archive/refs/tags/<tag>.tar.gz`),
pinned via `ARG SIDEFXLABS_VERSION`, same pattern as `HOUDINI_EULA_DATE` —
unpinned upstream, pick the newest tag whose `target_commitish` is
`Development` and whose bundled `SideFXLabs.json` `enable` range covers
this image's Houdini version. Checked via the GitHub releases API at
writing time: tag `22.0.440` declares
`"enable": "houdini_version >= '22.0' and houdini_version < '22.5'"`,
which covers this image's `22.0.429`.
- Extracted straight into **`$HFS/packages/SideFXLabs22.0/`**, with the
vendored `SideFXLabs.json` copied up to `$HFS/packages/SideFXLabs22.0.json`
unmodified. This location was not a guess: `$HFS/packages` is where
Houdini's *own* shipped optional packages already live (confirmed by
listing the real installed tree in a test build — `apex`, `kinefx`,
`ocio`, `sculpt`, `shotbuilder`, `texturepaint` all follow the exact same
`<name>.json` + `<name>/` pattern there). It's also documented as a
package search path independent of `$HOME`
(https://www.sidefx.com/docs/houdini/ref/plugins.html), which matters
specifically because distrobox bind-mounts the host's `$HOME` over
whatever the image ships under `$HOUDINI_USER_PREF_DIR` — anything baked
in there would be invisible at runtime. No edits to the vendored JSON were
needed: its default `"$HOUDINI_PACKAGE_PATH/SideFXLabs22.0"` already
resolves correctly, since `HOUDINI_PACKAGE_PATH` just means "the directory
this json file itself lives in".
- Verified end-to-end in a real build: `ca-certificates` fix lets `wget`
fetch the release tarball; extracted tree has 452 `.hda` files under
`otls/`; `$HFS/packages/SideFXLabs22.0.json` present and well-formed.
**Not** verified against a real license + GUI launch (Apprentice
activation needs a real SideFX login, out of scope for this check) — the
Labs menu actually appearing in a running Houdini session is unconfirmed,
though the mechanism matches Houdini's own shipped packages exactly.
## Runtime library list
SideFX's own package list in `docker/Ubuntu/Dockerfile` is built for headless
@@ -155,6 +204,7 @@ Everything below was confirmed with an actual build + an actual
| GUI rendering via XWayland (Hyprland host) | High | Confirmed real AMD hardware acceleration (`glxinfo`: direct rendering, AMD Radeon Vega renderer, not llvmpipe). First launch was slow (container's first-run package install + cold start); later launches fluid. |
| AMD OpenCL (sims) | Low | Not set up; needs ROCm/rusticl. GL/Vulkan viewport is unaffected. |
| NVIDIA variant | Untested | Builds fine (same base, no extra packages), but never run against real NVIDIA hardware — only the `amd` target has been used end to end. |
| SideFX Labs baked into `$HFS/packages` | Medium | Build-time fetch + extraction confirmed (452 `.hda`s, well-formed json), and the target path matches Houdini's own shipped packages exactly — but never confirmed against a real license + GUI launch that the Labs menu actually appears. |
## Repo-wide conventions