From d2d8f5a424ee63b9d0359d776ffbd4f606dae105 Mon Sep 17 00:00:00 2001 From: Shawn Jackson Date: Wed, 13 May 2026 22:52:38 -0700 Subject: [PATCH] RE1-T119 Build fix --- Web/Resgrid.Web.Tts/Dockerfile | 39 +++++++++--------- Workers/Resgrid.Workers.Console/Dockerfile | 48 +++++++++++++--------- 2 files changed, 48 insertions(+), 39 deletions(-) diff --git a/Web/Resgrid.Web.Tts/Dockerfile b/Web/Resgrid.Web.Tts/Dockerfile index 5d2ddb8c..3de54cc9 100644 --- a/Web/Resgrid.Web.Tts/Dockerfile +++ b/Web/Resgrid.Web.Tts/Dockerfile @@ -30,8 +30,11 @@ RUN apt-get update \ libespeak-ng1 \ ca-certificates \ curl \ + libc-bin \ + passwd \ + && rm -rf /var/lib/apt/lists/* \ && mkdir -p /usr/local/share/piper-voices \ - && curl -fsSL "https://github.com/rhasspy/piper/releases/download/${PIPER_VERSION}/piper_amd64.tar.gz" -o /tmp/piper.tar.gz \ + && curl -fsSL --retry 3 --retry-delay 5 "https://github.com/rhasspy/piper/releases/download/${PIPER_VERSION}/piper_amd64.tar.gz" -o /tmp/piper.tar.gz \ && tar -xzf /tmp/piper.tar.gz -C /tmp \ && mv /tmp/piper/piper /usr/local/bin/piper \ && chmod +x /usr/local/bin/piper \ @@ -39,25 +42,21 @@ RUN apt-get update \ && if [ -d /tmp/piper/espeak-ng-data ]; then cp -R /tmp/piper/espeak-ng-data /usr/share/; else ln -sf /usr/lib/x86_64-linux-gnu/espeak-ng-data /usr/share/espeak-ng-data; fi \ && ldconfig \ && rm -rf /tmp/piper /tmp/piper.tar.gz \ - && curl -fsSL "https://huggingface.co/rhasspy/piper-voices/resolve/main/en/en_US/norman/medium/en_US-norman-medium.onnx" -o /usr/local/share/piper-voices/en_US-norman-medium.onnx \ - && curl -fsSL "https://huggingface.co/rhasspy/piper-voices/resolve/main/en/en_US/norman/medium/en_US-norman-medium.onnx.json" -o /usr/local/share/piper-voices/en_US-norman-medium.onnx.json \ - && curl -fsSL "https://huggingface.co/rhasspy/piper-voices/resolve/main/es/es_MX/claude/high/es_MX-claude-high.onnx" -o /usr/local/share/piper-voices/es_MX-claude-high.onnx \ - && curl -fsSL "https://huggingface.co/rhasspy/piper-voices/resolve/main/es/es_MX/claude/high/es_MX-claude-high.onnx.json" -o /usr/local/share/piper-voices/es_MX-claude-high.onnx.json \ - && curl -fsSL "https://huggingface.co/rhasspy/piper-voices/resolve/main/sv/sv_SE/nst/medium/sv_SE-nst-medium.onnx" -o /usr/local/share/piper-voices/sv_SE-nst-medium.onnx \ - && curl -fsSL "https://huggingface.co/rhasspy/piper-voices/resolve/main/sv/sv_SE/nst/medium/sv_SE-nst-medium.onnx.json" -o /usr/local/share/piper-voices/sv_SE-nst-medium.onnx.json \ - && curl -fsSL "https://huggingface.co/rhasspy/piper-voices/resolve/main/de/de_DE/thorsten/medium/de_DE-thorsten-medium.onnx" -o /usr/local/share/piper-voices/de_DE-thorsten-medium.onnx \ - && curl -fsSL "https://huggingface.co/rhasspy/piper-voices/resolve/main/de/de_DE/thorsten/medium/de_DE-thorsten-medium.onnx.json" -o /usr/local/share/piper-voices/de_DE-thorsten-medium.onnx.json \ - && curl -fsSL "https://huggingface.co/rhasspy/piper-voices/resolve/main/fr/fr_FR/siwis/medium/fr_FR-siwis-medium.onnx" -o /usr/local/share/piper-voices/fr_FR-siwis-medium.onnx \ - && curl -fsSL "https://huggingface.co/rhasspy/piper-voices/resolve/main/fr/fr_FR/siwis/medium/fr_FR-siwis-medium.onnx.json" -o /usr/local/share/piper-voices/fr_FR-siwis-medium.onnx.json \ - && curl -fsSL "https://huggingface.co/rhasspy/piper-voices/resolve/main/it/it_IT/paola/medium/it_IT-paola-medium.onnx" -o /usr/local/share/piper-voices/it_IT-paola-medium.onnx \ - && curl -fsSL "https://huggingface.co/rhasspy/piper-voices/resolve/main/it/it_IT/paola/medium/it_IT-paola-medium.onnx.json" -o /usr/local/share/piper-voices/it_IT-paola-medium.onnx.json \ - && curl -fsSL "https://huggingface.co/rhasspy/piper-voices/resolve/main/pl/pl_PL/gosia/medium/pl_PL-gosia-medium.onnx" -o /usr/local/share/piper-voices/pl_PL-gosia-medium.onnx \ - && curl -fsSL "https://huggingface.co/rhasspy/piper-voices/resolve/main/pl/pl_PL/gosia/medium/pl_PL-gosia-medium.onnx.json" -o /usr/local/share/piper-voices/pl_PL-gosia-medium.onnx.json \ - && curl -fsSL "https://huggingface.co/rhasspy/piper-voices/resolve/main/uk/uk_UA/ukrainian_tts/medium/uk_UA-ukrainian_tts-medium.onnx" -o /usr/local/share/piper-voices/uk_UA-ukrainian_tts-medium.onnx \ - && curl -fsSL "https://huggingface.co/rhasspy/piper-voices/resolve/main/uk/uk_UA/ukrainian_tts/medium/uk_UA-ukrainian_tts-medium.onnx.json" -o /usr/local/share/piper-voices/uk_UA-ukrainian_tts-medium.onnx.json \ - && curl -fsSL "https://huggingface.co/rhasspy/piper-voices/resolve/main/ar/ar_JO/kareem/medium/ar_JO-kareem-medium.onnx" -o /usr/local/share/piper-voices/ar_JO-kareem-medium.onnx \ - && curl -fsSL "https://huggingface.co/rhasspy/piper-voices/resolve/main/ar/ar_JO/kareem/medium/ar_JO-kareem-medium.onnx.json" -o /usr/local/share/piper-voices/ar_JO-kareem-medium.onnx.json \ - && rm -rf /var/lib/apt/lists/* \ + && for f in \ + "en/en_US/norman/medium/en_US-norman-medium" \ + "es/es_MX/claude/high/es_MX-claude-high" \ + "sv/sv_SE/nst/medium/sv_SE-nst-medium" \ + "de/de_DE/thorsten/medium/de_DE-thorsten-medium" \ + "fr/fr_FR/siwis/medium/fr_FR-siwis-medium" \ + "it/it_IT/paola/medium/it_IT-paola-medium" \ + "pl/pl_PL/gosia/medium/pl_PL-gosia-medium" \ + "uk/uk_UA/ukrainian_tts/medium/uk_UA-ukrainian_tts-medium" \ + "ar/ar_JO/kareem/medium/ar_JO-kareem-medium" \ + ; do \ + name=$(basename "$f"); \ + curl -fsSL --retry 3 --retry-delay 5 "https://huggingface.co/rhasspy/piper-voices/resolve/main/${f}.onnx" -o "/usr/local/share/piper-voices/${name}.onnx"; \ + curl -fsSL --retry 3 --retry-delay 5 "https://huggingface.co/rhasspy/piper-voices/resolve/main/${f}.onnx.json" -o "/usr/local/share/piper-voices/${name}.onnx.json"; \ + done \ && groupadd --gid 10001 appgroup \ && useradd --uid 10001 --gid appgroup --create-home --shell /usr/sbin/nologin appuser diff --git a/Workers/Resgrid.Workers.Console/Dockerfile b/Workers/Resgrid.Workers.Console/Dockerfile index 4840b31b..1f0d5d15 100644 --- a/Workers/Resgrid.Workers.Console/Dockerfile +++ b/Workers/Resgrid.Workers.Console/Dockerfile @@ -40,29 +40,39 @@ RUN dotnet publish "Resgrid.Workers.Console.csproj" -c Release -o /app/publish - ADD https://github.com/ufoscout/docker-compose-wait/releases/download/2.9.0/wait /app/publish/wait RUN chmod +x /app/publish/wait -FROM base AS final +## Install wkhtmltopdf and capture its runtime libraries +RUN apt-get update \ + && apt-get install -y --no-install-recommends \ + wget \ + fontconfig \ + xfonts-75dpi \ + xfonts-base \ + libfontconfig1 \ + libfreetype6 \ + libjpeg62-turbo \ + libpng16-16 \ + libssl3 \ + libx11-6 \ + libxext6 \ + libxrender1 \ + zlib1g \ + && wget -q https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6.1-3/wkhtmltox_0.12.6.1-3.bookworm_amd64.deb \ + && dpkg -i wkhtmltox_0.12.6.1-3.bookworm_amd64.deb || apt-get install -fy \ + && rm -f wkhtmltox_0.12.6.1-3.bookworm_amd64.deb \ + && mkdir -p /tmp/wkdeps \ + && ldd /usr/local/bin/wkhtmltopdf | awk '/=>/ {print $3}' | while read lib; do cp "$lib" /tmp/wkdeps/; done \ + && apt-get clean && rm -rf /var/lib/apt/lists/* +FROM base AS final WORKDIR /app -## START - INSTALL WKHTMLTOPDF -ENV WKHTMLTOX wkhtmltox_0.12.6.1-3.bookworm_amd64.deb -ENV BUILD_PACKAGES build-essential -ENV MAIN_PACKAGES apt-transport-https wget libfontconfig1-dev libfreetype6-dev libjpeg-dev libpng-dev libssl-dev libx11-dev libxext-dev libxrender-dev xfonts-75dpi xfonts-base zlib1g-dev fontconfig - -RUN apt-get update && apt-get install -y $MAIN_PACKAGES +## Copy wkhtmltopdf binary + runtime libraries from publish stage +COPY --from=publish /usr/local/bin/wkhtmltopdf /usr/local/bin/wkhtmltopdf +COPY --from=publish /tmp/wkdeps/ /usr/local/lib/wkhtmltopdf/ +COPY --from=publish /etc/fonts/ /etc/fonts/ +COPY --from=publish /usr/share/fonts/ /usr/share/fonts/ -RUN set -xe \ - && apt-get update -qq \ - && apt-get install --no-install-recommends -yq $BUILD_PACKAGES \ - && wget https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6.1-3/wkhtmltox_0.12.6.1-3.bookworm_amd64.deb \ - && dpkg -i ${WKHTMLTOX} \ - && apt-get remove -y $BUILD_PACKAGES \ - && apt-get autoremove -y \ - && apt-get clean \ - && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* \ - && rm -rf ${WKHTMLTOX} \ - && truncate -s 0 /var/log/*log -## END - INSTALL WKHTMLTOPDF +ENV LD_LIBRARY_PATH="/usr/local/lib/wkhtmltopdf:${LD_LIBRARY_PATH}" COPY --from=publish /app/publish .