diff --git a/engines/aio/Dockerfile b/engines/aio/Dockerfile index b99fb854..580ca58c 100644 --- a/engines/aio/Dockerfile +++ b/engines/aio/Dockerfile @@ -2,7 +2,8 @@ # Tika is from Apache. See the license at http://www.apache.org/licenses/LICENSE-2.0. # LibreOffice is from The Document Foundation. See the license at https://www.libreoffice.org/download/license/ or in /libreoffice.txt. -# ImageMagick is from ImageMagick Studio LLC. See the license at http://www.imagemagick.org/script/license.php or in /ImageMagick-license.txt. +# GraphicsMagick is from the GraphicsMagick Group. See http://www.graphicsmagick.org/ . +# JasPer is from Michael D. Adams / the JasPer project. See https://github.com/jasper-software/jasper . # alfresco-pdf-renderer uses the PDFium library from Google Inc. See the license at https://pdfium.googlesource.com/pdfium/+/master/LICENSE or in /pdfium.txt. # More infos about this image: https://github.com/Alfresco/alfresco-docker-base-java @@ -13,9 +14,16 @@ ARG EXIFTOOL_VERSION=12.25 ARG EXIFTOOL_FOLDER=Image-ExifTool-${EXIFTOOL_VERSION} ARG EXIFTOOL_URL=https://nexus.alfresco.com/nexus/service/local/repositories/thirdparty/org/exiftool/image-exiftool/${EXIFTOOL_VERSION}/image-exiftool-${EXIFTOOL_VERSION}.tgz -ARG IMAGEMAGICK_VERSION=7.1.2-13-ci-1 -ENV IMAGEMAGICK_RPM_URL=https://nexus.alfresco.com/nexus/service/local/repositories/thirdparty/org/imagemagick/imagemagick-distribution/${IMAGEMAGICK_VERSION}/imagemagick-distribution-${IMAGEMAGICK_VERSION} -ENV IMAGEMAGICK_DEP_RPM_URL=https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm +# ImageMagick has been replaced by GraphicsMagick - see engines/imagemagick/Dockerfile for the full +# rationale. The build block below is kept byte-for-byte identical to that file so the two stay in +# step; if you change one, change both. +ARG GRAPHICSMAGICK_VERSION=1.3.48 +ARG JASPER_VERSION=4.2.9 +ENV GRAPHICSMAGICK_VERSION=${GRAPHICSMAGICK_VERSION} +ENV JASPER_VERSION=${JASPER_VERSION} +ENV GRAPHICSMAGICK_SRC_URL=https://downloads.sourceforge.net/project/graphicsmagick/graphicsmagick/${GRAPHICSMAGICK_VERSION}/GraphicsMagick-${GRAPHICSMAGICK_VERSION}.tar.xz +ENV JASPER_SRC_URL=https://github.com/jasper-software/jasper/archive/refs/tags/version-${JASPER_VERSION}.tar.gz +ENV EPEL_RPM_URL=https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm ARG LIBREOFFICE_VERSION=7.2.5 ENV LIBREOFFICE_RPM_URL=https://nexus.alfresco.com/nexus/service/local/repositories/thirdparty/org/libreoffice/libreoffice-dist/${LIBREOFFICE_VERSION}/libreoffice-dist-${LIBREOFFICE_VERSION}-linux.gz @@ -37,12 +45,65 @@ COPY target/${env.project_artifactId}-${env.project_version}.jar /usr/bin #removing perl-ExtUtils-MakeMaker cascades to remove exiftools RUN ln /usr/bin/${env.project_artifactId}-${env.project_version}.jar /usr/bin/${env.project_artifactId}.jar && \ - yum install -y $IMAGEMAGICK_DEP_RPM_URL && \ - if [ "$(uname -m)" = "x86_64" ]; then \ - yum install -y ${IMAGEMAGICK_RPM_URL}-el9.rpm ${IMAGEMAGICK_RPM_URL}-libs-el9.rpm; \ - else \ - yum install -y ${IMAGEMAGICK_RPM_URL}-el9-aarch64.rpm ${IMAGEMAGICK_RPM_URL}-libs-el9-aarch64.rpm; \ + dnf install -y $EPEL_RPM_URL && \ + dnf install -y dnf-plugins-core && \ + (dnf config-manager --set-enabled crb || true) && \ + dnf install -y \ + gcc gcc-c++ make cmake tar xz gzip diffutils gawk file \ + libjpeg-turbo-devel libpng-devel libtiff-devel libwebp-devel \ + freetype-devel libxml2-devel lcms2-devel bzip2-devel zlib-devel \ + libX11-devel libXext-devel libXt-devel && \ + cd /tmp && \ + curl -fSL --retry 3 --retry-delay 5 "${JASPER_SRC_URL}" -o jasper.tar.gz && \ + tar -xzf jasper.tar.gz && \ + cmake -S jasper-version-${JASPER_VERSION} -B jasper-build \ + -DCMAKE_INSTALL_PREFIX=/usr/local \ + -DCMAKE_BUILD_TYPE=Release \ + -DJAS_ENABLE_SHARED=ON \ + -DJAS_ENABLE_DOC=OFF \ + -DJAS_ENABLE_PROGRAMS=OFF \ + -DJAS_ENABLE_OPENGL=OFF \ + -DJAS_ENABLE_LIBJPEG=OFF && \ + cmake --build jasper-build --parallel "$(nproc)" && \ + cmake --install jasper-build && \ + printf '/usr/local/lib\n/usr/local/lib64\n' > /etc/ld.so.conf.d/local.conf && \ + ldconfig && \ + cd /tmp && \ + curl -fSL --retry 3 --retry-delay 5 "${GRAPHICSMAGICK_SRC_URL}" -o GraphicsMagick-${GRAPHICSMAGICK_VERSION}.tar.xz && \ + tar -xJf GraphicsMagick-${GRAPHICSMAGICK_VERSION}.tar.xz && \ + cd GraphicsMagick-${GRAPHICSMAGICK_VERSION} && \ + sed -i \ + -e 's/unsigned int colormap_index=(IndexPacket) pixel;/unsigned int colormap_index=(IndexPacket) pixel; unsigned int status=MagickPass;/' \ + -e 's/VerifyColormapIndex(image,colormap_index)/VerifyColormapIndex(status,image,colormap_index)/g' \ + -e 's/MagickFreeResourceLimitedMemory(layer_info)/MagickFreeResourceLimitedMemory(LayerInfo *,layer_info)/g' \ + -e 's/MagickFreeResourceLimitedMemory(data)/MagickFreeResourceLimitedMemory(unsigned char *,data)/g' \ + -e 's/MagickFreeResourceLimitedMemory(scanline)/MagickFreeResourceLimitedMemory(char *,scanline)/g' \ + -e 's/MagickFreeResourceLimitedMemory(pixels)/MagickFreeResourceLimitedMemory(unsigned char *,pixels)/g' \ + coders/psd.c && \ + if grep -nE 'MagickFreeResourceLimitedMemory\((layer_info|data|scanline|pixels)\)|VerifyColormapIndex\(image,' coders/psd.c ; then \ + echo "FATAL: coders/psd.c PSD patch did not apply cleanly - check GRAPHICSMAGICK_VERSION" ; exit 1 ; \ fi && \ + ./configure \ + --prefix=/usr/local \ + --enable-shared \ + --enable-broken-coders \ + --with-quantum-depth=16 \ + --with-jpeg --with-png --with-tiff --with-webp \ + --with-jp2 \ + --with-ttf --with-lcms2 --with-xml \ + --with-zlib --with-bzlib \ + --with-x \ + --without-wmf \ + CPPFLAGS="-I/usr/local/include" \ + LDFLAGS="-L/usr/local/lib64 -L/usr/local/lib" && \ + make -j"$(nproc)" && \ + make install && \ + ldconfig && \ + /usr/local/bin/gm version && \ + /usr/local/bin/gm convert -list format | grep -qiE '^ *JP2.*rw' && \ + /usr/local/bin/gm convert -list format | grep -qiE '^ *PSD.*rw' && \ + /usr/local/bin/gm convert -list format | grep -qiE '^ *XWD.*rw' && \ + cd /tmp && rm -rf GraphicsMagick-${GRAPHICSMAGICK_VERSION} GraphicsMagick-${GRAPHICSMAGICK_VERSION}.tar.xz jasper-version-${JASPER_VERSION} jasper-build jasper.tar.gz && \ yum install -y cairo cups-libs libSM libGLU procps && \ if [ "$(uname -m)" = "x86_64" ]; then \ test -f libreoffice-dist-${LIBREOFFICE_VERSION}-linux.gz && \ diff --git a/engines/aio/src/main/resources/application-default.yaml b/engines/aio/src/main/resources/application-default.yaml index 4780936e..6a5f8df0 100644 --- a/engines/aio/src/main/resources/application-default.yaml +++ b/engines/aio/src/main/resources/application-default.yaml @@ -13,9 +13,9 @@ transform: templateProfileDir: ${LIBREOFFICE_TEMPLATE_PROFILE_DIR:alfresco_default} isEnabled: ${LIBREOFFICE_IS_ENABLED:true} imagemagick: - root: ${IMAGEMAGICK_ROOT:/usr/lib64/ImageMagick-7.1.2} - dyn: ${IMAGEMAGICK_DYN:/usr/lib64/ImageMagick-7.1.2/lib} - exe: ${IMAGEMAGICK_EXE:/usr/bin/convert} + root: ${IMAGEMAGICK_ROOT:/usr/local} + dyn: ${IMAGEMAGICK_DYN:/usr/local/lib} + exe: ${IMAGEMAGICK_EXE:/usr/local/bin/gm} coders: ${IMAGEMAGICK_CODERS:} config: ${IMAGEMAGICK_CONFIG:} commandOptions: diff --git a/engines/imagemagick/Dockerfile b/engines/imagemagick/Dockerfile index 42a2e51f..0e1ab7a2 100644 --- a/engines/imagemagick/Dockerfile +++ b/engines/imagemagick/Dockerfile @@ -110,9 +110,9 @@ RUN ln /usr/bin/${env.project_artifactId}-${env.project_version}.jar /usr/bin/${ make install && \ ldconfig && \ /usr/local/bin/gm version && \ - /usr/local/bin/gm convert -list format | grep -qi 'jp2' && \ - /usr/local/bin/gm convert -list format | grep -qi 'psd' && \ - /usr/local/bin/gm convert -list format | grep -qi 'xwd' && \ + /usr/local/bin/gm convert -list format | grep -qiE '^ *JP2.*rw' && \ + /usr/local/bin/gm convert -list format | grep -qiE '^ *PSD.*rw' && \ + /usr/local/bin/gm convert -list format | grep -qiE '^ *XWD.*rw' && \ cd /tmp && rm -rf GraphicsMagick-${GRAPHICSMAGICK_VERSION} GraphicsMagick-${GRAPHICSMAGICK_VERSION}.tar.xz jasper-version-${JASPER_VERSION} jasper-build jasper.tar.gz && \ dnf clean all && rm -rf /var/cache/dnf