feat: add sidefx labs by default in the image
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
@@ -12,9 +12,13 @@ ARG HOUDINI_TARBALL=houdini-linux.tar.gz
|
||||
# unrelated houdini_installer launcher tool). Current EULA date: 2021-10-13,
|
||||
# see https://www.sidefx.com/legal/license-agreement/
|
||||
ARG HOUDINI_EULA_DATE=2021-10-13
|
||||
# Github release tag at https://github.com/sideeffects/SideFXLabs/releases —
|
||||
# pick the newest tag whose target branch is "Development" and whose bundled
|
||||
# SideFXLabs.json "enable" range covers this image's Houdini version.
|
||||
ARG SIDEFXLABS_VERSION=22.0.440
|
||||
|
||||
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||
sudo procps \
|
||||
sudo procps ca-certificates \
|
||||
bc fontconfig wget libasound2 libgl1 libglu1 libglu1-mesa libglx0 \
|
||||
libegl1 libatomic1 libxkbfile1 libxcb-cursor0 \
|
||||
libice6 libnss3 libopengl0 libpci3 libsm6 libx11-6 libx11-xcb1 \
|
||||
@@ -43,6 +47,27 @@ RUN chmod +x /usr/local/bin/houdini-run && \
|
||||
printf 'if [ -d /opt/hfs ]; then _p="$PWD"; cd /opt/hfs && . ./houdini_setup >/dev/null 2>&1; cd "$_p"; fi\n' \
|
||||
> /etc/profile.d/houdini.sh
|
||||
|
||||
# SideFX Labs, baked in rather than installed through Houdini's own in-app
|
||||
# package installer. That installer writes into $HOUDINI_USER_PREF_DIR
|
||||
# (under $HOME), which distrobox bind-mounts from the host over whatever the
|
||||
# image ships there — so anything baked in under $HOME would just be
|
||||
# shadowed at runtime, and doing it live means every container needs its own
|
||||
# git-clone/download at first launch (this is also almost certainly the
|
||||
# actual source of the "no such file or directory": the installer shells out
|
||||
# to `git`, which this image never installed).
|
||||
# $HFS/packages is a package-search path Houdini scans unconditionally,
|
||||
# independent of $HOME (see `houdini/ref/plugins.html` in SideFX's docs), so
|
||||
# drop the official package descriptor + the Labs tree there untouched: the
|
||||
# descriptor's default `$HOUDINI_PACKAGE_PATH/SideFXLabs22.0` already
|
||||
# resolves correctly since HOUDINI_PACKAGE_PATH is just "wherever this json
|
||||
# file lives".
|
||||
RUN mkdir -p /opt/hfs/packages/SideFXLabs22.0 && \
|
||||
wget -qO /tmp/sidefxlabs.tar.gz \
|
||||
"https://github.com/sideeffects/SideFXLabs/archive/refs/tags/${SIDEFXLABS_VERSION}.tar.gz" && \
|
||||
tar xzf /tmp/sidefxlabs.tar.gz --strip-components=1 -C /opt/hfs/packages/SideFXLabs22.0 && \
|
||||
cp /opt/hfs/packages/SideFXLabs22.0/SideFXLabs.json /opt/hfs/packages/SideFXLabs22.0.json && \
|
||||
rm /tmp/sidefxlabs.tar.gz
|
||||
|
||||
FROM base AS amd
|
||||
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||
libgl1-mesa-dri libglx-mesa0 mesa-vulkan-drivers && \
|
||||
|
||||
@@ -1,5 +1,10 @@
|
||||
# Houdini Apprentice in distrobox
|
||||
|
||||
SideFX Labs is baked into the image at build time (see `SIDEFXLABS_VERSION`
|
||||
below) — no need to install it from Houdini's own package menu, which needs
|
||||
`git` and a working CA bundle that this image doesn't ship. The Labs menu
|
||||
should just appear in Houdini's menu bar on first launch.
|
||||
|
||||
Two images built from the same `Dockerfile`, pushed to a private registry,
|
||||
used via distrobox:
|
||||
|
||||
@@ -32,11 +37,16 @@ TARBALL=houdini-22.0.429-linux_x86_64_gcc14.2.tar.gz
|
||||
# Date the EULA at https://www.sidefx.com/legal/license-agreement/ was last
|
||||
# updated, format YYYY-MM-DD, no "SideFX-" prefix.
|
||||
EULA_DATE=2021-10-13
|
||||
# Release tag at https://github.com/sideeffects/SideFXLabs/releases — pick
|
||||
# the newest tag whose bundled SideFXLabs.json "enable" range covers your
|
||||
# Houdini version (default below already matches 22.0.429).
|
||||
SIDEFXLABS_VERSION=22.0.440
|
||||
|
||||
# Build amd image
|
||||
podman build -f Dockerfile \
|
||||
--build-arg "HOUDINI_TARBALL=${TARBALL}" \
|
||||
--build-arg "HOUDINI_EULA_DATE=${EULA_DATE}" \
|
||||
--build-arg "SIDEFXLABS_VERSION=${SIDEFXLABS_VERSION}" \
|
||||
--target "amd" \
|
||||
-t "${REGISTRY}/houdini-amd:${VERSION}" \
|
||||
-t "${REGISTRY}/houdini-amd:latest" .
|
||||
@@ -45,6 +55,7 @@ podman build -f Dockerfile \
|
||||
podman build -f Dockerfile \
|
||||
--build-arg "HOUDINI_TARBALL=${TARBALL}" \
|
||||
--build-arg "HOUDINI_EULA_DATE=${EULA_DATE}" \
|
||||
--build-arg "SIDEFXLABS_VERSION=${SIDEFXLABS_VERSION}" \
|
||||
--target "nvidia" \
|
||||
-t "${REGISTRY}/houdini-nvidia:${VERSION}" \
|
||||
-t "${REGISTRY}/houdini-nvidia:latest" .
|
||||
|
||||
Reference in New Issue
Block a user