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
|
and symlinks it to `/opt/hfs` itself, so `houdini-run` and the
|
||||||
`/etc/profile.d` snippet don't need to know the exact version.
|
`/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
|
## Runtime library list
|
||||||
|
|
||||||
SideFX's own package list in `docker/Ubuntu/Dockerfile` is built for headless
|
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. |
|
| 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. |
|
| 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. |
|
| 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
|
## 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,
|
# unrelated houdini_installer launcher tool). Current EULA date: 2021-10-13,
|
||||||
# see https://www.sidefx.com/legal/license-agreement/
|
# see https://www.sidefx.com/legal/license-agreement/
|
||||||
ARG HOUDINI_EULA_DATE=2021-10-13
|
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 \
|
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 \
|
bc fontconfig wget libasound2 libgl1 libglu1 libglu1-mesa libglx0 \
|
||||||
libegl1 libatomic1 libxkbfile1 libxcb-cursor0 \
|
libegl1 libatomic1 libxkbfile1 libxcb-cursor0 \
|
||||||
libice6 libnss3 libopengl0 libpci3 libsm6 libx11-6 libx11-xcb1 \
|
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' \
|
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
|
> /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
|
FROM base AS amd
|
||||||
RUN apt-get update && apt-get install -y --no-install-recommends \
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||||
libgl1-mesa-dri libglx-mesa0 mesa-vulkan-drivers && \
|
libgl1-mesa-dri libglx-mesa0 mesa-vulkan-drivers && \
|
||||||
|
|||||||
@@ -1,5 +1,10 @@
|
|||||||
# Houdini Apprentice in distrobox
|
# 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,
|
Two images built from the same `Dockerfile`, pushed to a private registry,
|
||||||
used via distrobox:
|
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
|
# Date the EULA at https://www.sidefx.com/legal/license-agreement/ was last
|
||||||
# updated, format YYYY-MM-DD, no "SideFX-" prefix.
|
# updated, format YYYY-MM-DD, no "SideFX-" prefix.
|
||||||
EULA_DATE=2021-10-13
|
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
|
# Build amd image
|
||||||
podman build -f Dockerfile \
|
podman build -f Dockerfile \
|
||||||
--build-arg "HOUDINI_TARBALL=${TARBALL}" \
|
--build-arg "HOUDINI_TARBALL=${TARBALL}" \
|
||||||
--build-arg "HOUDINI_EULA_DATE=${EULA_DATE}" \
|
--build-arg "HOUDINI_EULA_DATE=${EULA_DATE}" \
|
||||||
|
--build-arg "SIDEFXLABS_VERSION=${SIDEFXLABS_VERSION}" \
|
||||||
--target "amd" \
|
--target "amd" \
|
||||||
-t "${REGISTRY}/houdini-amd:${VERSION}" \
|
-t "${REGISTRY}/houdini-amd:${VERSION}" \
|
||||||
-t "${REGISTRY}/houdini-amd:latest" .
|
-t "${REGISTRY}/houdini-amd:latest" .
|
||||||
@@ -45,6 +55,7 @@ podman build -f Dockerfile \
|
|||||||
podman build -f Dockerfile \
|
podman build -f Dockerfile \
|
||||||
--build-arg "HOUDINI_TARBALL=${TARBALL}" \
|
--build-arg "HOUDINI_TARBALL=${TARBALL}" \
|
||||||
--build-arg "HOUDINI_EULA_DATE=${EULA_DATE}" \
|
--build-arg "HOUDINI_EULA_DATE=${EULA_DATE}" \
|
||||||
|
--build-arg "SIDEFXLABS_VERSION=${SIDEFXLABS_VERSION}" \
|
||||||
--target "nvidia" \
|
--target "nvidia" \
|
||||||
-t "${REGISTRY}/houdini-nvidia:${VERSION}" \
|
-t "${REGISTRY}/houdini-nvidia:${VERSION}" \
|
||||||
-t "${REGISTRY}/houdini-nvidia:latest" .
|
-t "${REGISTRY}/houdini-nvidia:latest" .
|
||||||
|
|||||||
Reference in New Issue
Block a user