From e4e81d162820a616fb82937fcc0c6c1d481f3d8c Mon Sep 17 00:00:00 2001 From: Meta Vens Date: Wed, 23 Sep 2026 14:39:05 +0200 Subject: [PATCH] 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 --- scripts/quic-native-linux-dev.Dockerfile | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/scripts/quic-native-linux-dev.Dockerfile b/scripts/quic-native-linux-dev.Dockerfile index ec7e159e..7f9decdc 100644 --- a/scripts/quic-native-linux-dev.Dockerfile +++ b/scripts/quic-native-linux-dev.Dockerfile @@ -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