mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-08-05 23:41:44 +00:00
docker: make the build env work on macOS / Apple Silicon hosts
Three host-portability fixes to the docker/ toolchain from #8564 so it runs on macOS as well as Linux. All three are no-ops on native amd64 Linux. 1. Dockerfile: only groupadd when the target GID is free. macOS's default primary group `staff` is GID 20, which already exists as `games` in rockylinux:9, so `groupadd -g 20` aborted the image build. Guard with `getent group "${USER_GID}" || groupadd ...`; useradd -g accepts the existing GID. 2. ifcos_env unique(): replace GNU-only `sed -si` (BSD/macOS sed errors "illegal option -- s") with a portable `sed > tmp && mv` rewrite of the UNIQUE_ID line. Verified against macOS BSD sed. 3. create() + compose.yaml: build with an explicit `--platform linux/amd64` so the locally built image's platform matches the `platform: linux/amd64` pin in compose.yaml. Without it, on arm64 the local image is tagged linux/arm64, compose treats the platform-mismatched image as absent and tries to pull `ifcopenshell-build-env:updated` from Docker Hub (which does not exist -> access denied). Also add `pull_policy: never` as a safety net so a future mismatch surfaces as a clear "image not found" rather than a registry auth error. Note: on Apple Silicon the amd64 build runs under emulation and a cold full build is slow; ccache makes incremental rebuilds tolerable. A native Linux/Intel host or CI remains the better choice for routine use, but these fixes turn "hard broken" into "works with a caveat" on macOS. This change was made with the assistance of an AI tool. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
+9
-1
@@ -39,7 +39,15 @@ ENV PATH="/usr/lib/ccache:$PATH"
|
||||
# if your host user has a different UID/GID.
|
||||
ARG USER_UID=1000
|
||||
ARG USER_GID=1000
|
||||
RUN groupadd -g "${USER_GID}" builder \
|
||||
# groupadd fails outright if USER_GID is already taken by an existing
|
||||
# system group - which happens whenever a host's primary GID collides with
|
||||
# one baked into the rockylinux9 base image. The main real-world case is
|
||||
# macOS, where the default user's primary group is "staff" at GID 20, and
|
||||
# GID 20 is "games" on RHEL-family images. Only create the "builder" group
|
||||
# when that GID is actually free; otherwise useradd just attaches to
|
||||
# whichever group already owns it. Either way the builder user ends up
|
||||
# with the right GID for bind-mount ownership, which is all that matters.
|
||||
RUN (getent group "${USER_GID}" >/dev/null || groupadd -g "${USER_GID}" builder) \
|
||||
&& useradd -m -u "${USER_UID}" -g "${USER_GID}" -s /bin/bash builder \
|
||||
&& echo "builder ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/builder
|
||||
|
||||
|
||||
Reference in New Issue
Block a user