Install libmsquic system-wide in the QUIC dev image so .NET can find it

Finding 8(c): the dev image builds the Node bridge's own libmsquic copy into
a build-local directory (scripts/build-quic-native.sh), which is never on the
loader's search path. .NET's System.Net.Quic resolves "libmsquic" through
that path independently and failed with PlatformNotSupportedException before
this. The smallest honest fix: dpkg -i the same pinned 2.5.9 deb (same URL,
same SHA-256 as the build script) system-wide and run ldconfig, so both the
Node bridge's own copy and .NET's independent resolution find a libmsquic.

Changes the image; the new tag is cultlib-quic-native-dev:75cb89e73850
(first 12 hex of this file's sha256), built fresh on Yggdrasil.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Meta Vens 2026-09-23 14:39:05 +02:00
commit e4e81d1628

View file

@ -49,6 +49,22 @@ RUN curl -fsSL https://dot.net/v1/dotnet-install.sh -o /tmp/dotnet-install.sh \
&& ln -s /usr/share/dotnet/dotnet /usr/local/bin/dotnet
ENV DOTNET_ROOT=/usr/share/dotnet
ENV DOTNET_CLI_TELEMETRY_OPTOUT=1
# .NET's own System.Net.Quic P/Invokes into "libmsquic" and resolves it
# through the loader's normal search path, not through this repo's
# CULTMESH_QUIC_NATIVE_DIR (that is the Node bridge's own binary directory,
# never the system loader path). Without this, the interop lane's C# peer
# fails QuicListener.IsSupported with PlatformNotSupportedException. `dpkg -i`
# (rather than the build script's `dpkg-deb -x` into a build-local directory)
# installs the same pinned package into /usr/lib/x86_64-linux-gnu and runs
# ldconfig, so it is resolvable process-wide. Same version, same digest as
# scripts/build-quic-native.sh.
RUN curl -fsSL -o /tmp/libmsquic.deb \
https://packages.microsoft.com/debian/13/prod/pool/main/libm/libmsquic/libmsquic_2.5.9_amd64.deb \
&& echo "1baa61ade0b7b4a99f6dcb6b00d9aedb12b5566d00918a325be7425e878e51ba /tmp/libmsquic.deb" | sha256sum -c - \
&& dpkg -i /tmp/libmsquic.deb \
&& rm /tmp/libmsquic.deb \
&& ldconfig
# This minimal Debian image carries no ICU package, and .NET's runtime
# FailFasts on startup without one. The interop peer already parses every
# argument through CultureInfo.InvariantCulture, so globalization-invariant