- Created Dockerfile with multi-stage build using thespad/whisparr image - Added CloudronManifest.json with proper configuration (port 6969) - Created start.sh script to launch Whisparr - Added README.md with installation instructions - Copied all required musl-compatible libraries: - musl libc dynamic linker - C++ standard library (libstdc++) - GCC support library (libgcc_s) - ICU libraries for .NET globalization - OpenSSL libraries for HTTPS/TLS - SQLite library for database operations - Brotli compression libraries - zlib library - Configured for amd64 architecture (Cloudron compatible)
84 lines
4.2 KiB
Docker
84 lines
4.2 KiB
Docker
# Stage 1: Extract Whisparr binaries from available Docker image
|
|
# Default to linux/amd64 for Cloudron compatibility, but allow override
|
|
ARG TARGETPLATFORM=linux/amd64
|
|
ARG BUILDPLATFORM
|
|
# Explicitly use linux/amd64 to ensure correct architecture
|
|
FROM --platform=linux/amd64 thespad/whisparr:latest AS whisparr-source
|
|
|
|
# Stage 2: Build the Cloudron image
|
|
# Use explicit amd64 to match the source image
|
|
FROM --platform=linux/amd64 cloudron/base:4.2.0@sha256:46da2fffb36353ef714f97ae8e962bd2c212ca091108d768ba473078319a47f4
|
|
|
|
RUN apt-get update -y && \
|
|
apt install -y curl sqlite3 dpkg file libstdc++6 libgcc-s1 libicu-dev
|
|
|
|
RUN mkdir -p /app/code/whisparr
|
|
WORKDIR /app/code
|
|
|
|
# Copy Whisparr binaries from the source image
|
|
# Most Whisparr Docker images have the binary in /app/whisparr
|
|
COPY --from=whisparr-source /app/whisparr /app/code/whisparr
|
|
|
|
# Copy musl libc dynamic linker from the source image
|
|
# Whisparr binary uses musl libc which is not in the Cloudron base image (which uses glibc)
|
|
RUN mkdir -p /lib /usr/lib
|
|
COPY --from=whisparr-source /lib/ld-musl-x86_64.so.1 /lib/ld-musl-x86_64.so.1
|
|
# Create the symlink for libc.musl (it's a symlink to ld-musl in the source)
|
|
RUN ln -sf /lib/ld-musl-x86_64.so.1 /lib/libc.musl-x86_64.so.1
|
|
|
|
# Copy musl-compatible C++ standard library and GCC support library from source image
|
|
# These are musl-linked versions needed by the Whisparr binary
|
|
COPY --from=whisparr-source /usr/lib/libstdc++.so.6.0.33 /usr/lib/libstdc++.so.6.0.33
|
|
COPY --from=whisparr-source /usr/lib/libgcc_s.so.1 /usr/lib/libgcc_s.so.1
|
|
# Create symlinks if needed
|
|
RUN if [ ! -f /usr/lib/libstdc++.so.6 ]; then \
|
|
ln -sf /usr/lib/libstdc++.so.6.0.33 /usr/lib/libstdc++.so.6; \
|
|
fi
|
|
|
|
# Copy ICU libraries from source image (required by .NET applications)
|
|
COPY --from=whisparr-source /usr/lib/libicudata.so.76.1 /usr/lib/libicudata.so.76.1
|
|
COPY --from=whisparr-source /usr/lib/libicui18n.so.76.1 /usr/lib/libicui18n.so.76.1
|
|
COPY --from=whisparr-source /usr/lib/libicuio.so.76.1 /usr/lib/libicuio.so.76.1
|
|
COPY --from=whisparr-source /usr/lib/libicuuc.so.76.1 /usr/lib/libicuuc.so.76.1
|
|
COPY --from=whisparr-source /usr/share/icu /usr/share/icu
|
|
# Create symlinks for ICU libraries
|
|
RUN ln -sf /usr/lib/libicudata.so.76.1 /usr/lib/libicudata.so.76 && \
|
|
ln -sf /usr/lib/libicui18n.so.76.1 /usr/lib/libicui18n.so.76 && \
|
|
ln -sf /usr/lib/libicuio.so.76.1 /usr/lib/libicuio.so.76 && \
|
|
ln -sf /usr/lib/libicuuc.so.76.1 /usr/lib/libicuuc.so.76
|
|
|
|
# Copy OpenSSL libraries from source image (required by .NET applications for HTTPS/TLS)
|
|
COPY --from=whisparr-source /usr/lib/libssl.so.3 /usr/lib/libssl.so.3
|
|
COPY --from=whisparr-source /usr/lib/libcrypto.so.3 /usr/lib/libcrypto.so.3
|
|
|
|
# Copy SQLite library from source image (required for database operations)
|
|
COPY --from=whisparr-source /usr/lib/libsqlite3.so.3.49.2 /usr/lib/libsqlite3.so.3.49.2
|
|
RUN ln -sf /usr/lib/libsqlite3.so.3.49.2 /usr/lib/libsqlite3.so.0
|
|
|
|
# Copy Brotli compression libraries from source image (required for HTTP compression)
|
|
COPY --from=whisparr-source /usr/lib/libbrotlicommon.so.1.1.0 /usr/lib/libbrotlicommon.so.1.1.0
|
|
COPY --from=whisparr-source /usr/lib/libbrotlidec.so.1.1.0 /usr/lib/libbrotlidec.so.1.1.0
|
|
COPY --from=whisparr-source /usr/lib/libbrotlienc.so.1.1.0 /usr/lib/libbrotlienc.so.1.1.0
|
|
RUN ln -sf /usr/lib/libbrotlicommon.so.1.1.0 /usr/lib/libbrotlicommon.so.1 && \
|
|
ln -sf /usr/lib/libbrotlidec.so.1.1.0 /usr/lib/libbrotlidec.so.1 && \
|
|
ln -sf /usr/lib/libbrotlienc.so.1.1.0 /usr/lib/libbrotlienc.so.1
|
|
|
|
# Copy zlib library from source image (required by libSystem.IO.Compression.Native)
|
|
COPY --from=whisparr-source /usr/lib/libz.so.1.3.1 /usr/lib/libz.so.1.3.1
|
|
RUN ln -sf /usr/lib/libz.so.1.3.1 /usr/lib/libz.so.1
|
|
|
|
# Verify the binary exists and set permissions
|
|
RUN if [ -f /app/code/whisparr/bin/Whisparr ]; then \
|
|
file /app/code/whisparr/bin/Whisparr || echo "file command not available"; \
|
|
chmod +x /app/code/whisparr/bin/Whisparr; \
|
|
fi && \
|
|
chmod +x /lib/ld-musl-x86_64.so.1 && \
|
|
chmod +x /lib/libc.musl-x86_64.so.1 && \
|
|
chmod +x /app/code/whisparr/bin/libSystem.IO.Compression.Native.so 2>/dev/null || true
|
|
|
|
COPY start.sh /app/code/
|
|
RUN chown -R cloudron:cloudron /app/code/whisparr && \
|
|
chmod +x /app/code/whisparr/bin/Whisparr 2>/dev/null || true
|
|
|
|
CMD [ "/app/code/start.sh" ]
|