From af005991484e03918488bb6cdb75750598a121f5 Mon Sep 17 00:00:00 2001 From: J0WI Date: Tue, 25 Feb 2025 22:37:43 +0000 Subject: [PATCH] Build imagick for PHP 8.3 (#2394) Signed-off-by: J0WI --- 29/apache/Dockerfile | 18 +++++++++++++++++- 29/fpm-alpine/Dockerfile | 18 +++++++++++++++++- 29/fpm/Dockerfile | 18 +++++++++++++++++- 30/apache/Dockerfile | 18 +++++++++++++++++- 30/fpm-alpine/Dockerfile | 18 +++++++++++++++++- 30/fpm/Dockerfile | 18 +++++++++++++++++- 31/apache/Dockerfile | 20 ++++++++++++++++++-- 31/fpm-alpine/Dockerfile | 20 ++++++++++++++++++-- 31/fpm/Dockerfile | 20 ++++++++++++++++++-- Dockerfile-alpine.template | 18 +++++++++++++++++- Dockerfile-debian.template | 18 +++++++++++++++++- update.sh | 1 + versions.json | 6 +++--- 13 files changed, 194 insertions(+), 17 deletions(-) diff --git a/29/apache/Dockerfile b/29/apache/Dockerfile index 4aec7fe7..3ca9ab54 100644 --- a/29/apache/Dockerfile +++ b/29/apache/Dockerfile @@ -1,6 +1,9 @@ # DO NOT EDIT: created by update.sh from Dockerfile-debian.template FROM php:8.2-apache-bookworm +# Define the commit hash for imagick as a variable +ENV IMAGICK_COMMIT_HASH d7d3c24af1b4f599897408f1714600b69a56473b + # entrypoint.sh and cron.sh dependencies RUN set -ex; \ \ @@ -65,10 +68,23 @@ RUN set -ex; \ zip \ ; \ \ +# The master version on the imagick repository is compatible with PHP 8.3. However, the PECL version is not updated yet. +# As soon as it will get updated, we can switch back to the PECL version, instead of having this workaround. + curl -fsSL -o imagick.tar.gz "https://github.com/Imagick/imagick/archive/$IMAGICK_COMMIT_HASH.tar.gz"; \ + tar -xzf imagick.tar.gz -C /tmp; \ + rm imagick.tar.gz; \ + cd "/tmp/imagick-$IMAGICK_COMMIT_HASH"; \ + sed -i "s/@PACKAGE_VERSION@/git-$(echo ${IMAGICK_COMMIT_HASH} | cut -c 1-7)/" php_imagick.h; \ + phpize; \ + ./configure; \ + make; \ + make install; \ + cd; \ + rm -r "/tmp/imagick-$IMAGICK_COMMIT_HASH"; \ + \ # pecl will claim success even if one install fails, so we need to perform each install separately pecl install APCu-5.1.24; \ pecl install igbinary-3.2.16; \ - pecl install imagick-3.7.0; \ pecl install memcached-3.3.0 \ --configureoptions 'enable-memcached-igbinary="yes"'; \ pecl install redis-6.1.0 \ diff --git a/29/fpm-alpine/Dockerfile b/29/fpm-alpine/Dockerfile index 7eec3144..47179e44 100644 --- a/29/fpm-alpine/Dockerfile +++ b/29/fpm-alpine/Dockerfile @@ -1,6 +1,9 @@ # DO NOT EDIT: created by update.sh from Dockerfile-alpine.template FROM php:8.2-fpm-alpine3.21 +# Define the commit hash for imagick as a variable +ENV IMAGICK_COMMIT_HASH d7d3c24af1b4f599897408f1714600b69a56473b + # entrypoint.sh and cron.sh dependencies RUN set -ex; \ \ @@ -62,10 +65,23 @@ RUN set -ex; \ zip \ ; \ \ +# The master version on the imagick repository is compatible with PHP 8.3. However, the PECL version is not updated yet. +# As soon as it will get updated, we can switch back to the PECL version, instead of having this workaround. + curl -fsSL -o imagick.tar.gz "https://github.com/Imagick/imagick/archive/$IMAGICK_COMMIT_HASH.tar.gz"; \ + tar -xzf imagick.tar.gz -C /tmp; \ + rm imagick.tar.gz; \ + cd "/tmp/imagick-$IMAGICK_COMMIT_HASH"; \ + sed -i "s/@PACKAGE_VERSION@/git-$(echo ${IMAGICK_COMMIT_HASH} | cut -c 1-7)/" php_imagick.h; \ + phpize; \ + ./configure; \ + make; \ + make install; \ + cd; \ + rm -r "/tmp/imagick-$IMAGICK_COMMIT_HASH"; \ + \ # pecl will claim success even if one install fails, so we need to perform each install separately pecl install APCu-5.1.24; \ pecl install igbinary-3.2.16; \ - pecl install imagick-3.7.0; \ pecl install memcached-3.3.0 \ --configureoptions 'enable-memcached-igbinary="yes"'; \ pecl install redis-6.1.0 \ diff --git a/29/fpm/Dockerfile b/29/fpm/Dockerfile index 819fd601..3a984575 100644 --- a/29/fpm/Dockerfile +++ b/29/fpm/Dockerfile @@ -1,6 +1,9 @@ # DO NOT EDIT: created by update.sh from Dockerfile-debian.template FROM php:8.2-fpm-bookworm +# Define the commit hash for imagick as a variable +ENV IMAGICK_COMMIT_HASH d7d3c24af1b4f599897408f1714600b69a56473b + # entrypoint.sh and cron.sh dependencies RUN set -ex; \ \ @@ -65,10 +68,23 @@ RUN set -ex; \ zip \ ; \ \ +# The master version on the imagick repository is compatible with PHP 8.3. However, the PECL version is not updated yet. +# As soon as it will get updated, we can switch back to the PECL version, instead of having this workaround. + curl -fsSL -o imagick.tar.gz "https://github.com/Imagick/imagick/archive/$IMAGICK_COMMIT_HASH.tar.gz"; \ + tar -xzf imagick.tar.gz -C /tmp; \ + rm imagick.tar.gz; \ + cd "/tmp/imagick-$IMAGICK_COMMIT_HASH"; \ + sed -i "s/@PACKAGE_VERSION@/git-$(echo ${IMAGICK_COMMIT_HASH} | cut -c 1-7)/" php_imagick.h; \ + phpize; \ + ./configure; \ + make; \ + make install; \ + cd; \ + rm -r "/tmp/imagick-$IMAGICK_COMMIT_HASH"; \ + \ # pecl will claim success even if one install fails, so we need to perform each install separately pecl install APCu-5.1.24; \ pecl install igbinary-3.2.16; \ - pecl install imagick-3.7.0; \ pecl install memcached-3.3.0 \ --configureoptions 'enable-memcached-igbinary="yes"'; \ pecl install redis-6.1.0 \ diff --git a/30/apache/Dockerfile b/30/apache/Dockerfile index 3bb31915..472e005d 100644 --- a/30/apache/Dockerfile +++ b/30/apache/Dockerfile @@ -1,6 +1,9 @@ # DO NOT EDIT: created by update.sh from Dockerfile-debian.template FROM php:8.2-apache-bookworm +# Define the commit hash for imagick as a variable +ENV IMAGICK_COMMIT_HASH d7d3c24af1b4f599897408f1714600b69a56473b + # entrypoint.sh and cron.sh dependencies RUN set -ex; \ \ @@ -65,10 +68,23 @@ RUN set -ex; \ zip \ ; \ \ +# The master version on the imagick repository is compatible with PHP 8.3. However, the PECL version is not updated yet. +# As soon as it will get updated, we can switch back to the PECL version, instead of having this workaround. + curl -fsSL -o imagick.tar.gz "https://github.com/Imagick/imagick/archive/$IMAGICK_COMMIT_HASH.tar.gz"; \ + tar -xzf imagick.tar.gz -C /tmp; \ + rm imagick.tar.gz; \ + cd "/tmp/imagick-$IMAGICK_COMMIT_HASH"; \ + sed -i "s/@PACKAGE_VERSION@/git-$(echo ${IMAGICK_COMMIT_HASH} | cut -c 1-7)/" php_imagick.h; \ + phpize; \ + ./configure; \ + make; \ + make install; \ + cd; \ + rm -r "/tmp/imagick-$IMAGICK_COMMIT_HASH"; \ + \ # pecl will claim success even if one install fails, so we need to perform each install separately pecl install APCu-5.1.24; \ pecl install igbinary-3.2.16; \ - pecl install imagick-3.7.0; \ pecl install memcached-3.3.0 \ --configureoptions 'enable-memcached-igbinary="yes"'; \ pecl install redis-6.1.0 \ diff --git a/30/fpm-alpine/Dockerfile b/30/fpm-alpine/Dockerfile index 7ad94ea2..b060e713 100644 --- a/30/fpm-alpine/Dockerfile +++ b/30/fpm-alpine/Dockerfile @@ -1,6 +1,9 @@ # DO NOT EDIT: created by update.sh from Dockerfile-alpine.template FROM php:8.2-fpm-alpine3.21 +# Define the commit hash for imagick as a variable +ENV IMAGICK_COMMIT_HASH d7d3c24af1b4f599897408f1714600b69a56473b + # entrypoint.sh and cron.sh dependencies RUN set -ex; \ \ @@ -62,10 +65,23 @@ RUN set -ex; \ zip \ ; \ \ +# The master version on the imagick repository is compatible with PHP 8.3. However, the PECL version is not updated yet. +# As soon as it will get updated, we can switch back to the PECL version, instead of having this workaround. + curl -fsSL -o imagick.tar.gz "https://github.com/Imagick/imagick/archive/$IMAGICK_COMMIT_HASH.tar.gz"; \ + tar -xzf imagick.tar.gz -C /tmp; \ + rm imagick.tar.gz; \ + cd "/tmp/imagick-$IMAGICK_COMMIT_HASH"; \ + sed -i "s/@PACKAGE_VERSION@/git-$(echo ${IMAGICK_COMMIT_HASH} | cut -c 1-7)/" php_imagick.h; \ + phpize; \ + ./configure; \ + make; \ + make install; \ + cd; \ + rm -r "/tmp/imagick-$IMAGICK_COMMIT_HASH"; \ + \ # pecl will claim success even if one install fails, so we need to perform each install separately pecl install APCu-5.1.24; \ pecl install igbinary-3.2.16; \ - pecl install imagick-3.7.0; \ pecl install memcached-3.3.0 \ --configureoptions 'enable-memcached-igbinary="yes"'; \ pecl install redis-6.1.0 \ diff --git a/30/fpm/Dockerfile b/30/fpm/Dockerfile index c904d52e..85d0f477 100644 --- a/30/fpm/Dockerfile +++ b/30/fpm/Dockerfile @@ -1,6 +1,9 @@ # DO NOT EDIT: created by update.sh from Dockerfile-debian.template FROM php:8.2-fpm-bookworm +# Define the commit hash for imagick as a variable +ENV IMAGICK_COMMIT_HASH d7d3c24af1b4f599897408f1714600b69a56473b + # entrypoint.sh and cron.sh dependencies RUN set -ex; \ \ @@ -65,10 +68,23 @@ RUN set -ex; \ zip \ ; \ \ +# The master version on the imagick repository is compatible with PHP 8.3. However, the PECL version is not updated yet. +# As soon as it will get updated, we can switch back to the PECL version, instead of having this workaround. + curl -fsSL -o imagick.tar.gz "https://github.com/Imagick/imagick/archive/$IMAGICK_COMMIT_HASH.tar.gz"; \ + tar -xzf imagick.tar.gz -C /tmp; \ + rm imagick.tar.gz; \ + cd "/tmp/imagick-$IMAGICK_COMMIT_HASH"; \ + sed -i "s/@PACKAGE_VERSION@/git-$(echo ${IMAGICK_COMMIT_HASH} | cut -c 1-7)/" php_imagick.h; \ + phpize; \ + ./configure; \ + make; \ + make install; \ + cd; \ + rm -r "/tmp/imagick-$IMAGICK_COMMIT_HASH"; \ + \ # pecl will claim success even if one install fails, so we need to perform each install separately pecl install APCu-5.1.24; \ pecl install igbinary-3.2.16; \ - pecl install imagick-3.7.0; \ pecl install memcached-3.3.0 \ --configureoptions 'enable-memcached-igbinary="yes"'; \ pecl install redis-6.1.0 \ diff --git a/31/apache/Dockerfile b/31/apache/Dockerfile index aeab9d9b..96b8511c 100644 --- a/31/apache/Dockerfile +++ b/31/apache/Dockerfile @@ -1,5 +1,8 @@ # DO NOT EDIT: created by update.sh from Dockerfile-debian.template -FROM php:8.2-apache-bookworm +FROM php:8.3-apache-bookworm + +# Define the commit hash for imagick as a variable +ENV IMAGICK_COMMIT_HASH d7d3c24af1b4f599897408f1714600b69a56473b # entrypoint.sh and cron.sh dependencies RUN set -ex; \ @@ -65,10 +68,23 @@ RUN set -ex; \ zip \ ; \ \ +# The master version on the imagick repository is compatible with PHP 8.3. However, the PECL version is not updated yet. +# As soon as it will get updated, we can switch back to the PECL version, instead of having this workaround. + curl -fsSL -o imagick.tar.gz "https://github.com/Imagick/imagick/archive/$IMAGICK_COMMIT_HASH.tar.gz"; \ + tar -xzf imagick.tar.gz -C /tmp; \ + rm imagick.tar.gz; \ + cd "/tmp/imagick-$IMAGICK_COMMIT_HASH"; \ + sed -i "s/@PACKAGE_VERSION@/git-$(echo ${IMAGICK_COMMIT_HASH} | cut -c 1-7)/" php_imagick.h; \ + phpize; \ + ./configure; \ + make; \ + make install; \ + cd; \ + rm -r "/tmp/imagick-$IMAGICK_COMMIT_HASH"; \ + \ # pecl will claim success even if one install fails, so we need to perform each install separately pecl install APCu-5.1.24; \ pecl install igbinary-3.2.16; \ - pecl install imagick-3.7.0; \ pecl install memcached-3.3.0 \ --configureoptions 'enable-memcached-igbinary="yes"'; \ pecl install redis-6.1.0 \ diff --git a/31/fpm-alpine/Dockerfile b/31/fpm-alpine/Dockerfile index 9972b489..ca69007f 100644 --- a/31/fpm-alpine/Dockerfile +++ b/31/fpm-alpine/Dockerfile @@ -1,5 +1,8 @@ # DO NOT EDIT: created by update.sh from Dockerfile-alpine.template -FROM php:8.2-fpm-alpine3.21 +FROM php:8.3-fpm-alpine3.21 + +# Define the commit hash for imagick as a variable +ENV IMAGICK_COMMIT_HASH d7d3c24af1b4f599897408f1714600b69a56473b # entrypoint.sh and cron.sh dependencies RUN set -ex; \ @@ -62,10 +65,23 @@ RUN set -ex; \ zip \ ; \ \ +# The master version on the imagick repository is compatible with PHP 8.3. However, the PECL version is not updated yet. +# As soon as it will get updated, we can switch back to the PECL version, instead of having this workaround. + curl -fsSL -o imagick.tar.gz "https://github.com/Imagick/imagick/archive/$IMAGICK_COMMIT_HASH.tar.gz"; \ + tar -xzf imagick.tar.gz -C /tmp; \ + rm imagick.tar.gz; \ + cd "/tmp/imagick-$IMAGICK_COMMIT_HASH"; \ + sed -i "s/@PACKAGE_VERSION@/git-$(echo ${IMAGICK_COMMIT_HASH} | cut -c 1-7)/" php_imagick.h; \ + phpize; \ + ./configure; \ + make; \ + make install; \ + cd; \ + rm -r "/tmp/imagick-$IMAGICK_COMMIT_HASH"; \ + \ # pecl will claim success even if one install fails, so we need to perform each install separately pecl install APCu-5.1.24; \ pecl install igbinary-3.2.16; \ - pecl install imagick-3.7.0; \ pecl install memcached-3.3.0 \ --configureoptions 'enable-memcached-igbinary="yes"'; \ pecl install redis-6.1.0 \ diff --git a/31/fpm/Dockerfile b/31/fpm/Dockerfile index 29a53311..68c7b75f 100644 --- a/31/fpm/Dockerfile +++ b/31/fpm/Dockerfile @@ -1,5 +1,8 @@ # DO NOT EDIT: created by update.sh from Dockerfile-debian.template -FROM php:8.2-fpm-bookworm +FROM php:8.3-fpm-bookworm + +# Define the commit hash for imagick as a variable +ENV IMAGICK_COMMIT_HASH d7d3c24af1b4f599897408f1714600b69a56473b # entrypoint.sh and cron.sh dependencies RUN set -ex; \ @@ -65,10 +68,23 @@ RUN set -ex; \ zip \ ; \ \ +# The master version on the imagick repository is compatible with PHP 8.3. However, the PECL version is not updated yet. +# As soon as it will get updated, we can switch back to the PECL version, instead of having this workaround. + curl -fsSL -o imagick.tar.gz "https://github.com/Imagick/imagick/archive/$IMAGICK_COMMIT_HASH.tar.gz"; \ + tar -xzf imagick.tar.gz -C /tmp; \ + rm imagick.tar.gz; \ + cd "/tmp/imagick-$IMAGICK_COMMIT_HASH"; \ + sed -i "s/@PACKAGE_VERSION@/git-$(echo ${IMAGICK_COMMIT_HASH} | cut -c 1-7)/" php_imagick.h; \ + phpize; \ + ./configure; \ + make; \ + make install; \ + cd; \ + rm -r "/tmp/imagick-$IMAGICK_COMMIT_HASH"; \ + \ # pecl will claim success even if one install fails, so we need to perform each install separately pecl install APCu-5.1.24; \ pecl install igbinary-3.2.16; \ - pecl install imagick-3.7.0; \ pecl install memcached-3.3.0 \ --configureoptions 'enable-memcached-igbinary="yes"'; \ pecl install redis-6.1.0 \ diff --git a/Dockerfile-alpine.template b/Dockerfile-alpine.template index cf6af0ff..2295bddf 100644 --- a/Dockerfile-alpine.template +++ b/Dockerfile-alpine.template @@ -1,5 +1,8 @@ FROM php:%%PHP_VERSION%%-%%VARIANT%%%%ALPINE_VERSION%% +# Define the commit hash for imagick as a variable +ENV IMAGICK_COMMIT_HASH d7d3c24af1b4f599897408f1714600b69a56473b + # entrypoint.sh and cron.sh dependencies RUN set -ex; \ \ @@ -61,10 +64,23 @@ RUN set -ex; \ zip \ ; \ \ +# The master version on the imagick repository is compatible with PHP 8.3. However, the PECL version is not updated yet. +# As soon as it will get updated, we can switch back to the PECL version, instead of having this workaround. + curl -fsSL -o imagick.tar.gz "https://github.com/Imagick/imagick/archive/$IMAGICK_COMMIT_HASH.tar.gz"; \ + tar -xzf imagick.tar.gz -C /tmp; \ + rm imagick.tar.gz; \ + cd "/tmp/imagick-$IMAGICK_COMMIT_HASH"; \ + sed -i "s/@PACKAGE_VERSION@/git-$(echo ${IMAGICK_COMMIT_HASH} | cut -c 1-7)/" php_imagick.h; \ + phpize; \ + ./configure; \ + make; \ + make install; \ + cd; \ + rm -r "/tmp/imagick-$IMAGICK_COMMIT_HASH"; \ + \ # pecl will claim success even if one install fails, so we need to perform each install separately pecl install APCu-%%APCU_VERSION%%; \ pecl install igbinary-%%IGBINARY_VERSION%%; \ - pecl install imagick-%%IMAGICK_VERSION%%; \ pecl install memcached-%%MEMCACHED_VERSION%% \ --configureoptions 'enable-memcached-igbinary="yes"'; \ pecl install redis-%%REDIS_VERSION%% \ diff --git a/Dockerfile-debian.template b/Dockerfile-debian.template index cadae18a..8734caa9 100644 --- a/Dockerfile-debian.template +++ b/Dockerfile-debian.template @@ -1,5 +1,8 @@ FROM php:%%PHP_VERSION%%-%%VARIANT%%-%%DEBIAN_VERSION%% +# Define the commit hash for imagick as a variable +ENV IMAGICK_COMMIT_HASH d7d3c24af1b4f599897408f1714600b69a56473b + # entrypoint.sh and cron.sh dependencies RUN set -ex; \ \ @@ -64,10 +67,23 @@ RUN set -ex; \ zip \ ; \ \ +# The master version on the imagick repository is compatible with PHP 8.3. However, the PECL version is not updated yet. +# As soon as it will get updated, we can switch back to the PECL version, instead of having this workaround. + curl -fsSL -o imagick.tar.gz "https://github.com/Imagick/imagick/archive/$IMAGICK_COMMIT_HASH.tar.gz"; \ + tar -xzf imagick.tar.gz -C /tmp; \ + rm imagick.tar.gz; \ + cd "/tmp/imagick-$IMAGICK_COMMIT_HASH"; \ + sed -i "s/@PACKAGE_VERSION@/git-$(echo ${IMAGICK_COMMIT_HASH} | cut -c 1-7)/" php_imagick.h; \ + phpize; \ + ./configure; \ + make; \ + make install; \ + cd; \ + rm -r "/tmp/imagick-$IMAGICK_COMMIT_HASH"; \ + \ # pecl will claim success even if one install fails, so we need to perform each install separately pecl install APCu-%%APCU_VERSION%%; \ pecl install igbinary-%%IGBINARY_VERSION%%; \ - pecl install imagick-%%IMAGICK_VERSION%%; \ pecl install memcached-%%MEMCACHED_VERSION%% \ --configureoptions 'enable-memcached-igbinary="yes"'; \ pecl install redis-%%REDIS_VERSION%% \ diff --git a/update.sh b/update.sh index f55da259..0f224b06 100755 --- a/update.sh +++ b/update.sh @@ -11,6 +11,7 @@ declare -A debian_version=( declare -A php_version=( [default]='8.2' + [31]='8.3' ) declare -A cmd=( diff --git a/versions.json b/versions.json index 2616bc41..1d54bae2 100644 --- a/versions.json +++ b/versions.json @@ -9,19 +9,19 @@ "variant": "apache", "base": "debian", "baseVersion": "bookworm", - "phpVersion": "8.2" + "phpVersion": "8.3" }, "fpm": { "variant": "fpm", "base": "debian", "baseVersion": "bookworm", - "phpVersion": "8.2" + "phpVersion": "8.3" }, "fpm-alpine": { "variant": "fpm-alpine", "base": "alpine", "baseVersion": "3.21", - "phpVersion": "8.2" + "phpVersion": "8.3" } } },