From b1c7072dcc0eae29ca35efc00b08188e6653da07 Mon Sep 17 00:00:00 2001 From: Matthias Vogel Date: Wed, 21 Oct 2026 09:24:25 +0000 Subject: [PATCH 1/2] Replace PECL installs with PIE and compatible upstream source builds --- README.md | 20 +++++ .../8.2-alpine/Dockerfile.jinja2 | 3 +- docker/php-apache-dev/8.2/Dockerfile.jinja2 | 3 +- .../8.3-alpine/Dockerfile.jinja2 | 3 +- docker/php-apache-dev/8.3/Dockerfile.jinja2 | 3 +- .../8.4-alpine/Dockerfile.jinja2 | 3 +- docker/php-apache-dev/8.4/Dockerfile.jinja2 | 3 +- .../8.5-alpine/Dockerfile.jinja2 | 3 +- docker/php-apache-dev/8.5/Dockerfile.jinja2 | 3 +- docker/php-dev/8.2-alpine/Dockerfile.jinja2 | 3 +- docker/php-dev/8.2/Dockerfile.jinja2 | 3 +- docker/php-dev/8.3-alpine/Dockerfile.jinja2 | 3 +- docker/php-dev/8.3/Dockerfile.jinja2 | 3 +- docker/php-dev/8.4-alpine/Dockerfile.jinja2 | 3 +- docker/php-dev/8.4/Dockerfile.jinja2 | 3 +- docker/php-dev/8.5-alpine/Dockerfile.jinja2 | 3 +- docker/php-dev/8.5/Dockerfile.jinja2 | 3 +- .../8.2-alpine/Dockerfile.jinja2 | 3 +- docker/php-nginx-dev/8.2/Dockerfile.jinja2 | 3 +- .../8.3-alpine/Dockerfile.jinja2 | 3 +- docker/php-nginx-dev/8.3/Dockerfile.jinja2 | 3 +- .../8.4-alpine/Dockerfile.jinja2 | 3 +- docker/php-nginx-dev/8.4/Dockerfile.jinja2 | 3 +- .../8.5-alpine/Dockerfile.jinja2 | 3 +- docker/php-nginx-dev/8.5/Dockerfile.jinja2 | 3 +- .../php-official/8.2-alpine/Dockerfile.jinja2 | 3 +- docker/php-official/8.2/Dockerfile.jinja2 | 3 +- .../php-official/8.3-alpine/Dockerfile.jinja2 | 3 +- docker/php-official/8.3/Dockerfile.jinja2 | 3 +- .../php-official/8.4-alpine/Dockerfile.jinja2 | 3 +- docker/php-official/8.4/Dockerfile.jinja2 | 3 +- .../php-official/8.5-alpine/Dockerfile.jinja2 | 3 +- docker/php-official/8.5/Dockerfile.jinja2 | 3 +- .../provision/bootstrap.d/30-setup-ioncube.sh | 27 +++++-- template/Dockerfile/images/php.jinja2 | 77 ++++++++++++------- tests/serverspec/spec/shared/php/modules.rb | 2 + tests/structure-test/php/test.yaml | 6 ++ 37 files changed, 160 insertions(+), 68 deletions(-) diff --git a/README.md b/README.md index 697e3cde7..05a73d8d6 100644 --- a/README.md +++ b/README.md @@ -53,6 +53,26 @@ docker run --rm -ti -v $PWD:/app -w /app webdevops/php:8.4-alpine ci/console git Gitlab CI builds every image independent and runs serverspec and structure tests on every image before pushing them to the registry. +### PHP extension builds + +PHP images require Docker BuildKit. The official `ghcr.io/php/pie:bin` image +supplies PIE through a build-only mount; the existing INI configuration still +controls extension loading. PIE requests remain unpinned, and compilation uses +`nproc` parallel jobs. + +Protobuf, Vips and XML-RPC are built directly from their official upstream sources. +The existing XML-RPC **1.0.0RC3** pin is preserved on all supported PHP versions. +Protobuf on PHP 8.2–8.5 uses the latest upstream release. If a future release raises its minimum PHP +version, older PHP image builds can fail; there is no automatic fallback to an +older release. The existing CI matrix checks compatibility across PHP versions. + +The native Vips extension is deprecated and no longer maintained upstream. It is +retained for existing applications, using the upstream default branch (currently +`master`): GitHub tags predate the PECL 1.0.13 release and would downgrade the +extension. This includes changes beyond the last PECL release. +No extension installation needs `pecl.php.net`; Serverspec and container structure +tests retain their existing image matrix. + ## Documentation As in many projects the documentation is kind of up to date 😅. diff --git a/docker/php-apache-dev/8.2-alpine/Dockerfile.jinja2 b/docker/php-apache-dev/8.2-alpine/Dockerfile.jinja2 index c68e37beb..e8f8ecffc 100644 --- a/docker/php-apache-dev/8.2-alpine/Dockerfile.jinja2 +++ b/docker/php-apache-dev/8.2-alpine/Dockerfile.jinja2 @@ -6,6 +6,7 @@ {{ docker.copy('conf/', '/opt/docker/') }} -RUN set -x \ +RUN --mount=type=bind,from=ghcr.io/php/pie:bin,source=/pie,target=/usr/local/bin/pie \ + set -x \ {{ php.officialDevelopmentAlpine(version="8.2") }} \ {{ provision.runBootstrap() }} diff --git a/docker/php-apache-dev/8.2/Dockerfile.jinja2 b/docker/php-apache-dev/8.2/Dockerfile.jinja2 index 90a2b69c5..25591be37 100644 --- a/docker/php-apache-dev/8.2/Dockerfile.jinja2 +++ b/docker/php-apache-dev/8.2/Dockerfile.jinja2 @@ -6,7 +6,8 @@ {{ docker.copy('conf/', '/opt/docker/') }} -RUN set -x \ +RUN --mount=type=bind,from=ghcr.io/php/pie:bin,source=/pie,target=/usr/local/bin/pie \ + set -x \ {{ php.officialDevelopment(version="8.2") }} \ {{ provision.runBootstrap() }} \ {{ docker.cleanup() }} diff --git a/docker/php-apache-dev/8.3-alpine/Dockerfile.jinja2 b/docker/php-apache-dev/8.3-alpine/Dockerfile.jinja2 index 274c48746..58c3075fb 100644 --- a/docker/php-apache-dev/8.3-alpine/Dockerfile.jinja2 +++ b/docker/php-apache-dev/8.3-alpine/Dockerfile.jinja2 @@ -6,6 +6,7 @@ {{ docker.copy('conf/', '/opt/docker/') }} -RUN set -x \ +RUN --mount=type=bind,from=ghcr.io/php/pie:bin,source=/pie,target=/usr/local/bin/pie \ + set -x \ {{ php.officialDevelopmentAlpine(version="8.3") }} \ {{ provision.runBootstrap() }} diff --git a/docker/php-apache-dev/8.3/Dockerfile.jinja2 b/docker/php-apache-dev/8.3/Dockerfile.jinja2 index 855594a44..30fb6e529 100644 --- a/docker/php-apache-dev/8.3/Dockerfile.jinja2 +++ b/docker/php-apache-dev/8.3/Dockerfile.jinja2 @@ -6,7 +6,8 @@ {{ docker.copy('conf/', '/opt/docker/') }} -RUN set -x \ +RUN --mount=type=bind,from=ghcr.io/php/pie:bin,source=/pie,target=/usr/local/bin/pie \ + set -x \ {{ php.officialDevelopment(version="8.3") }} \ {{ provision.runBootstrap() }} \ {{ docker.cleanup() }} diff --git a/docker/php-apache-dev/8.4-alpine/Dockerfile.jinja2 b/docker/php-apache-dev/8.4-alpine/Dockerfile.jinja2 index 1d42777aa..d5cf71c04 100644 --- a/docker/php-apache-dev/8.4-alpine/Dockerfile.jinja2 +++ b/docker/php-apache-dev/8.4-alpine/Dockerfile.jinja2 @@ -6,6 +6,7 @@ {{ docker.copy('conf/', '/opt/docker/') }} -RUN set -x \ +RUN --mount=type=bind,from=ghcr.io/php/pie:bin,source=/pie,target=/usr/local/bin/pie \ + set -x \ {{ php.officialDevelopmentAlpine(version="8.4") }} \ {{ provision.runBootstrap() }} diff --git a/docker/php-apache-dev/8.4/Dockerfile.jinja2 b/docker/php-apache-dev/8.4/Dockerfile.jinja2 index 28eb4ec05..128eda8df 100644 --- a/docker/php-apache-dev/8.4/Dockerfile.jinja2 +++ b/docker/php-apache-dev/8.4/Dockerfile.jinja2 @@ -6,7 +6,8 @@ {{ docker.copy('conf/', '/opt/docker/') }} -RUN set -x \ +RUN --mount=type=bind,from=ghcr.io/php/pie:bin,source=/pie,target=/usr/local/bin/pie \ + set -x \ {{ php.officialDevelopment(version="8.4") }} \ {{ provision.runBootstrap() }} \ {{ docker.cleanup() }} diff --git a/docker/php-apache-dev/8.5-alpine/Dockerfile.jinja2 b/docker/php-apache-dev/8.5-alpine/Dockerfile.jinja2 index 8fe68a4c7..61b37d837 100644 --- a/docker/php-apache-dev/8.5-alpine/Dockerfile.jinja2 +++ b/docker/php-apache-dev/8.5-alpine/Dockerfile.jinja2 @@ -6,6 +6,7 @@ {{ docker.copy('conf/', '/opt/docker/') }} -RUN set -x \ +RUN --mount=type=bind,from=ghcr.io/php/pie:bin,source=/pie,target=/usr/local/bin/pie \ + set -x \ {{ php.officialDevelopmentAlpine(version="8.5") }} \ {{ provision.runBootstrap() }} diff --git a/docker/php-apache-dev/8.5/Dockerfile.jinja2 b/docker/php-apache-dev/8.5/Dockerfile.jinja2 index 9f270b4d6..65948c009 100644 --- a/docker/php-apache-dev/8.5/Dockerfile.jinja2 +++ b/docker/php-apache-dev/8.5/Dockerfile.jinja2 @@ -6,7 +6,8 @@ {{ docker.copy('conf/', '/opt/docker/') }} -RUN set -x \ +RUN --mount=type=bind,from=ghcr.io/php/pie:bin,source=/pie,target=/usr/local/bin/pie \ + set -x \ {{ php.officialDevelopment(version="8.5") }} \ {{ provision.runBootstrap() }} \ {{ docker.cleanup() }} diff --git a/docker/php-dev/8.2-alpine/Dockerfile.jinja2 b/docker/php-dev/8.2-alpine/Dockerfile.jinja2 index 8b308d5d2..3bcc38dd1 100644 --- a/docker/php-dev/8.2-alpine/Dockerfile.jinja2 +++ b/docker/php-dev/8.2-alpine/Dockerfile.jinja2 @@ -2,6 +2,7 @@ {{ docker.copy('conf/', '/opt/docker/') }} -RUN set -x \ +RUN --mount=type=bind,from=ghcr.io/php/pie:bin,source=/pie,target=/usr/local/bin/pie \ + set -x \ {{ php.officialDevelopmentAlpine(version="8.2") }} \ {{ provision.runBootstrap() }} diff --git a/docker/php-dev/8.2/Dockerfile.jinja2 b/docker/php-dev/8.2/Dockerfile.jinja2 index 7a18a592b..b4aaa5f83 100644 --- a/docker/php-dev/8.2/Dockerfile.jinja2 +++ b/docker/php-dev/8.2/Dockerfile.jinja2 @@ -2,7 +2,8 @@ {{ docker.copy('conf/', '/opt/docker/') }} -RUN set -x \ +RUN --mount=type=bind,from=ghcr.io/php/pie:bin,source=/pie,target=/usr/local/bin/pie \ + set -x \ {{ php.officialDevelopment(version="8.2") }} \ {{ provision.runBootstrap() }} \ {{ docker.cleanup() }} diff --git a/docker/php-dev/8.3-alpine/Dockerfile.jinja2 b/docker/php-dev/8.3-alpine/Dockerfile.jinja2 index 599e24028..2aace93be 100644 --- a/docker/php-dev/8.3-alpine/Dockerfile.jinja2 +++ b/docker/php-dev/8.3-alpine/Dockerfile.jinja2 @@ -2,6 +2,7 @@ {{ docker.copy('conf/', '/opt/docker/') }} -RUN set -x \ +RUN --mount=type=bind,from=ghcr.io/php/pie:bin,source=/pie,target=/usr/local/bin/pie \ + set -x \ {{ php.officialDevelopmentAlpine(version="8.3") }} \ {{ provision.runBootstrap() }} diff --git a/docker/php-dev/8.3/Dockerfile.jinja2 b/docker/php-dev/8.3/Dockerfile.jinja2 index da25979d1..a74afb508 100644 --- a/docker/php-dev/8.3/Dockerfile.jinja2 +++ b/docker/php-dev/8.3/Dockerfile.jinja2 @@ -2,7 +2,8 @@ {{ docker.copy('conf/', '/opt/docker/') }} -RUN set -x \ +RUN --mount=type=bind,from=ghcr.io/php/pie:bin,source=/pie,target=/usr/local/bin/pie \ + set -x \ {{ php.officialDevelopment(version="8.3") }} \ {{ provision.runBootstrap() }} \ {{ docker.cleanup() }} diff --git a/docker/php-dev/8.4-alpine/Dockerfile.jinja2 b/docker/php-dev/8.4-alpine/Dockerfile.jinja2 index 1d7d6d5a6..22311a6ed 100644 --- a/docker/php-dev/8.4-alpine/Dockerfile.jinja2 +++ b/docker/php-dev/8.4-alpine/Dockerfile.jinja2 @@ -2,6 +2,7 @@ {{ docker.copy('conf/', '/opt/docker/') }} -RUN set -x \ +RUN --mount=type=bind,from=ghcr.io/php/pie:bin,source=/pie,target=/usr/local/bin/pie \ + set -x \ {{ php.officialDevelopmentAlpine(version="8.4") }} \ {{ provision.runBootstrap() }} diff --git a/docker/php-dev/8.4/Dockerfile.jinja2 b/docker/php-dev/8.4/Dockerfile.jinja2 index a464e5f8c..6f5b9ecff 100644 --- a/docker/php-dev/8.4/Dockerfile.jinja2 +++ b/docker/php-dev/8.4/Dockerfile.jinja2 @@ -2,7 +2,8 @@ {{ docker.copy('conf/', '/opt/docker/') }} -RUN set -x \ +RUN --mount=type=bind,from=ghcr.io/php/pie:bin,source=/pie,target=/usr/local/bin/pie \ + set -x \ {{ php.officialDevelopment(version="8.4") }} \ {{ provision.runBootstrap() }} \ {{ docker.cleanup() }} diff --git a/docker/php-dev/8.5-alpine/Dockerfile.jinja2 b/docker/php-dev/8.5-alpine/Dockerfile.jinja2 index 48b55c891..4807811e9 100644 --- a/docker/php-dev/8.5-alpine/Dockerfile.jinja2 +++ b/docker/php-dev/8.5-alpine/Dockerfile.jinja2 @@ -2,6 +2,7 @@ {{ docker.copy('conf/', '/opt/docker/') }} -RUN set -x \ +RUN --mount=type=bind,from=ghcr.io/php/pie:bin,source=/pie,target=/usr/local/bin/pie \ + set -x \ {{ php.officialDevelopmentAlpine(version="8.5") }} \ {{ provision.runBootstrap() }} diff --git a/docker/php-dev/8.5/Dockerfile.jinja2 b/docker/php-dev/8.5/Dockerfile.jinja2 index fd32f4ad6..d3fb6ccca 100644 --- a/docker/php-dev/8.5/Dockerfile.jinja2 +++ b/docker/php-dev/8.5/Dockerfile.jinja2 @@ -2,7 +2,8 @@ {{ docker.copy('conf/', '/opt/docker/') }} -RUN set -x \ +RUN --mount=type=bind,from=ghcr.io/php/pie:bin,source=/pie,target=/usr/local/bin/pie \ + set -x \ {{ php.officialDevelopment(version="8.5") }} \ {{ provision.runBootstrap() }} \ {{ docker.cleanup() }} diff --git a/docker/php-nginx-dev/8.2-alpine/Dockerfile.jinja2 b/docker/php-nginx-dev/8.2-alpine/Dockerfile.jinja2 index 51785650c..fce559a63 100644 --- a/docker/php-nginx-dev/8.2-alpine/Dockerfile.jinja2 +++ b/docker/php-nginx-dev/8.2-alpine/Dockerfile.jinja2 @@ -6,6 +6,7 @@ {{ docker.copy('conf/', '/opt/docker/') }} -RUN set -x \ +RUN --mount=type=bind,from=ghcr.io/php/pie:bin,source=/pie,target=/usr/local/bin/pie \ + set -x \ {{ php.officialDevelopmentAlpine(version="8.2") }} \ {{ provision.runBootstrap() }} diff --git a/docker/php-nginx-dev/8.2/Dockerfile.jinja2 b/docker/php-nginx-dev/8.2/Dockerfile.jinja2 index 073b58cc7..512ef8d0f 100644 --- a/docker/php-nginx-dev/8.2/Dockerfile.jinja2 +++ b/docker/php-nginx-dev/8.2/Dockerfile.jinja2 @@ -6,7 +6,8 @@ {{ docker.copy('conf/', '/opt/docker/') }} -RUN set -x \ +RUN --mount=type=bind,from=ghcr.io/php/pie:bin,source=/pie,target=/usr/local/bin/pie \ + set -x \ {{ php.officialDevelopment(version="8.2") }} \ {{ provision.runBootstrap() }} \ {{ docker.cleanup() }} diff --git a/docker/php-nginx-dev/8.3-alpine/Dockerfile.jinja2 b/docker/php-nginx-dev/8.3-alpine/Dockerfile.jinja2 index 81e512b17..d8ef1fcae 100644 --- a/docker/php-nginx-dev/8.3-alpine/Dockerfile.jinja2 +++ b/docker/php-nginx-dev/8.3-alpine/Dockerfile.jinja2 @@ -6,6 +6,7 @@ {{ docker.copy('conf/', '/opt/docker/') }} -RUN set -x \ +RUN --mount=type=bind,from=ghcr.io/php/pie:bin,source=/pie,target=/usr/local/bin/pie \ + set -x \ {{ php.officialDevelopmentAlpine(version="8.3") }} \ {{ provision.runBootstrap() }} diff --git a/docker/php-nginx-dev/8.3/Dockerfile.jinja2 b/docker/php-nginx-dev/8.3/Dockerfile.jinja2 index 9a8645c6b..0dec7c23b 100644 --- a/docker/php-nginx-dev/8.3/Dockerfile.jinja2 +++ b/docker/php-nginx-dev/8.3/Dockerfile.jinja2 @@ -6,7 +6,8 @@ {{ docker.copy('conf/', '/opt/docker/') }} -RUN set -x \ +RUN --mount=type=bind,from=ghcr.io/php/pie:bin,source=/pie,target=/usr/local/bin/pie \ + set -x \ {{ php.officialDevelopment(version="8.3") }} \ {{ provision.runBootstrap() }} \ {{ docker.cleanup() }} diff --git a/docker/php-nginx-dev/8.4-alpine/Dockerfile.jinja2 b/docker/php-nginx-dev/8.4-alpine/Dockerfile.jinja2 index 0c59288ac..be938992b 100644 --- a/docker/php-nginx-dev/8.4-alpine/Dockerfile.jinja2 +++ b/docker/php-nginx-dev/8.4-alpine/Dockerfile.jinja2 @@ -6,6 +6,7 @@ {{ docker.copy('conf/', '/opt/docker/') }} -RUN set -x \ +RUN --mount=type=bind,from=ghcr.io/php/pie:bin,source=/pie,target=/usr/local/bin/pie \ + set -x \ {{ php.officialDevelopmentAlpine(version="8.4") }} \ {{ provision.runBootstrap() }} diff --git a/docker/php-nginx-dev/8.4/Dockerfile.jinja2 b/docker/php-nginx-dev/8.4/Dockerfile.jinja2 index 12045f721..dc57542f8 100644 --- a/docker/php-nginx-dev/8.4/Dockerfile.jinja2 +++ b/docker/php-nginx-dev/8.4/Dockerfile.jinja2 @@ -6,7 +6,8 @@ {{ docker.copy('conf/', '/opt/docker/') }} -RUN set -x \ +RUN --mount=type=bind,from=ghcr.io/php/pie:bin,source=/pie,target=/usr/local/bin/pie \ + set -x \ {{ php.officialDevelopment(version="8.4") }} \ {{ provision.runBootstrap() }} \ {{ docker.cleanup() }} diff --git a/docker/php-nginx-dev/8.5-alpine/Dockerfile.jinja2 b/docker/php-nginx-dev/8.5-alpine/Dockerfile.jinja2 index b44bb2998..490164887 100644 --- a/docker/php-nginx-dev/8.5-alpine/Dockerfile.jinja2 +++ b/docker/php-nginx-dev/8.5-alpine/Dockerfile.jinja2 @@ -6,6 +6,7 @@ {{ docker.copy('conf/', '/opt/docker/') }} -RUN set -x \ +RUN --mount=type=bind,from=ghcr.io/php/pie:bin,source=/pie,target=/usr/local/bin/pie \ + set -x \ {{ php.officialDevelopmentAlpine(version="8.5") }} \ {{ provision.runBootstrap() }} diff --git a/docker/php-nginx-dev/8.5/Dockerfile.jinja2 b/docker/php-nginx-dev/8.5/Dockerfile.jinja2 index b9e413ae3..8d049f9a0 100644 --- a/docker/php-nginx-dev/8.5/Dockerfile.jinja2 +++ b/docker/php-nginx-dev/8.5/Dockerfile.jinja2 @@ -6,7 +6,8 @@ {{ docker.copy('conf/', '/opt/docker/') }} -RUN set -x \ +RUN --mount=type=bind,from=ghcr.io/php/pie:bin,source=/pie,target=/usr/local/bin/pie \ + set -x \ {{ php.officialDevelopment(version="8.5") }} \ {{ provision.runBootstrap() }} \ {{ docker.cleanup() }} diff --git a/docker/php-official/8.2-alpine/Dockerfile.jinja2 b/docker/php-official/8.2-alpine/Dockerfile.jinja2 index 874bd9698..7c8770169 100644 --- a/docker/php-official/8.2-alpine/Dockerfile.jinja2 +++ b/docker/php-official/8.2-alpine/Dockerfile.jinja2 @@ -25,7 +25,8 @@ RUN set -x \ {{ baseapp.alpine() }} \ {{ provision.runBootstrap() }} -RUN set -x \ +RUN --mount=type=bind,from=ghcr.io/php/pie:bin,source=/pie,target=/usr/local/bin/pie \ + set -x \ {{ php.officialAlpine(version='8.2') }} \ {{ provision.runBootstrap() }} diff --git a/docker/php-official/8.2/Dockerfile.jinja2 b/docker/php-official/8.2/Dockerfile.jinja2 index 2ffbae9f4..2f644a114 100644 --- a/docker/php-official/8.2/Dockerfile.jinja2 +++ b/docker/php-official/8.2/Dockerfile.jinja2 @@ -26,7 +26,8 @@ RUN set -x \ {{ provision.runBootstrap() }} \ {{ docker.cleanup() }} -RUN set -x \ +RUN --mount=type=bind,from=ghcr.io/php/pie:bin,source=/pie,target=/usr/local/bin/pie \ + set -x \ {{ php.official(version='8.2',distribution='bookworm') }} \ {{ provision.runBootstrap() }} \ {{ docker.cleanup() }} diff --git a/docker/php-official/8.3-alpine/Dockerfile.jinja2 b/docker/php-official/8.3-alpine/Dockerfile.jinja2 index a11af6e8b..6cb7047d8 100644 --- a/docker/php-official/8.3-alpine/Dockerfile.jinja2 +++ b/docker/php-official/8.3-alpine/Dockerfile.jinja2 @@ -25,7 +25,8 @@ RUN set -x \ {{ baseapp.alpine() }} \ {{ provision.runBootstrap() }} -RUN set -x \ +RUN --mount=type=bind,from=ghcr.io/php/pie:bin,source=/pie,target=/usr/local/bin/pie \ + set -x \ {{ php.officialAlpine(version='8.3') }} \ {{ provision.runBootstrap() }} diff --git a/docker/php-official/8.3/Dockerfile.jinja2 b/docker/php-official/8.3/Dockerfile.jinja2 index 3b314c4f3..f34099942 100644 --- a/docker/php-official/8.3/Dockerfile.jinja2 +++ b/docker/php-official/8.3/Dockerfile.jinja2 @@ -26,7 +26,8 @@ RUN set -x \ {{ provision.runBootstrap() }} \ {{ docker.cleanup() }} -RUN set -x \ +RUN --mount=type=bind,from=ghcr.io/php/pie:bin,source=/pie,target=/usr/local/bin/pie \ + set -x \ {{ php.official(version='8.3',distribution='bookworm') }} \ {{ provision.runBootstrap() }} \ {{ docker.cleanup() }} diff --git a/docker/php-official/8.4-alpine/Dockerfile.jinja2 b/docker/php-official/8.4-alpine/Dockerfile.jinja2 index 1a5f38a74..60f1707af 100644 --- a/docker/php-official/8.4-alpine/Dockerfile.jinja2 +++ b/docker/php-official/8.4-alpine/Dockerfile.jinja2 @@ -25,7 +25,8 @@ RUN set -x \ {{ baseapp.alpine() }} \ {{ provision.runBootstrap() }} -RUN set -x \ +RUN --mount=type=bind,from=ghcr.io/php/pie:bin,source=/pie,target=/usr/local/bin/pie \ + set -x \ {{ php.officialAlpine(version='8.4') }} \ {{ provision.runBootstrap() }} diff --git a/docker/php-official/8.4/Dockerfile.jinja2 b/docker/php-official/8.4/Dockerfile.jinja2 index 61f6582f4..94e3fd816 100644 --- a/docker/php-official/8.4/Dockerfile.jinja2 +++ b/docker/php-official/8.4/Dockerfile.jinja2 @@ -26,7 +26,8 @@ RUN set -x \ {{ provision.runBootstrap() }} \ {{ docker.cleanup() }} -RUN set -x \ +RUN --mount=type=bind,from=ghcr.io/php/pie:bin,source=/pie,target=/usr/local/bin/pie \ + set -x \ {{ php.official(version='8.4',distribution='bookworm') }} \ {{ provision.runBootstrap() }} \ {{ docker.cleanup() }} diff --git a/docker/php-official/8.5-alpine/Dockerfile.jinja2 b/docker/php-official/8.5-alpine/Dockerfile.jinja2 index a8f0f2425..1c85a2eb5 100644 --- a/docker/php-official/8.5-alpine/Dockerfile.jinja2 +++ b/docker/php-official/8.5-alpine/Dockerfile.jinja2 @@ -25,7 +25,8 @@ RUN set -x \ {{ baseapp.alpine() }} \ {{ provision.runBootstrap() }} -RUN set -x \ +RUN --mount=type=bind,from=ghcr.io/php/pie:bin,source=/pie,target=/usr/local/bin/pie \ + set -x \ {{ php.officialAlpine(version='8.5') }} \ {{ provision.runBootstrap() }} diff --git a/docker/php-official/8.5/Dockerfile.jinja2 b/docker/php-official/8.5/Dockerfile.jinja2 index 549d2056d..d6e5a198e 100644 --- a/docker/php-official/8.5/Dockerfile.jinja2 +++ b/docker/php-official/8.5/Dockerfile.jinja2 @@ -26,7 +26,8 @@ RUN set -x \ {{ provision.runBootstrap() }} \ {{ docker.cleanup() }} -RUN set -x \ +RUN --mount=type=bind,from=ghcr.io/php/pie:bin,source=/pie,target=/usr/local/bin/pie \ + set -x \ {{ php.official(version='8.5',distribution='bookworm') }} \ {{ provision.runBootstrap() }} \ {{ docker.cleanup() }} diff --git a/provisioning/php/general/provision/bootstrap.d/30-setup-ioncube.sh b/provisioning/php/general/provision/bootstrap.d/30-setup-ioncube.sh index 4a348a38a..59a2d4245 100644 --- a/provisioning/php/general/provision/bootstrap.d/30-setup-ioncube.sh +++ b/provisioning/php/general/provision/bootstrap.d/30-setup-ioncube.sh @@ -7,16 +7,25 @@ fi echo "Installing ionCube loader" -DOWNLOAD_URL="https://downloads.ioncube.com/loader_downloads/ioncube_loaders_lin_x86-64.tar.gz" +case "$(uname -m)" in + x86_64) IONCUBE_ARCH="x86-64" ;; + aarch64) IONCUBE_ARCH="aarch64" ;; + *) + echo "Skipping ionCube installation on unsupported architecture $(uname -m)" + return + ;; +esac + +DOWNLOAD_URL="https://downloads.ioncube.com/loader_downloads/ioncube_loaders_lin_${IONCUBE_ARCH}.tar.gz" TMP_FILE="/tmp/ioncube_loaders.tar.gz" echo "Downloading ..." -curl -sS ${DOWNLOAD_URL} -o ${TMP_FILE} +curl -fsS "${DOWNLOAD_URL}" -o "${TMP_FILE}" echo "Unpacking ..." tar -xzf ${TMP_FILE} -C /tmp -PHP_VERSION=`php -v | head -1 | grep -o 'PHP [0-9].[0-9]' | sed -r 's/PHP //g'` -PHP_EXTENSION_DIR=`php -i | grep -o -m 1 'extension_dir .* =' | sed -r 's/extension_dir => //g' | sed -r 's/ =//g'` +PHP_VERSION="$(php -n -r 'echo PHP_MAJOR_VERSION, ".", PHP_MINOR_VERSION;')" +PHP_EXTENSION_DIR="$(php -n -r 'echo ini_get("extension_dir");')" MOD_INI="${PHP_MOD_INI_DIR}/00-ioncube.ini" SO_FILE="${PHP_EXTENSION_DIR}/ioncube_loader_lin_${PHP_VERSION}.so" @@ -28,15 +37,14 @@ else echo "Installing ${SO_FILE}" cp "/tmp/ioncube/ioncube_loader_lin_${PHP_VERSION}.so" ${SO_FILE} + echo "Checking ionCube loader" + php -n -d "zend_extension=${SO_FILE}" -r 'exit(extension_loaded("ionCube Loader") ? 0 : 1);' || return 1 + echo "Writing module ini" echo "[ioncube]" > ${MOD_INI} echo "zend_extension = ${SO_FILE}" >> ${MOD_INI} echo "; priority=01" >> ${MOD_INI} - echo "Cleaning up" - rm -rf $TMP_FILE - rm -rf /tmp/ioncube - echo "Enabling ionCube PHP module" case "$IMAGE_FAMILY" in Debian|Ubuntu) @@ -48,3 +56,6 @@ else ;; esac fi + +echo "Cleaning up" +rm -rf "$TMP_FILE" /tmp/ioncube diff --git a/template/Dockerfile/images/php.jinja2 b/template/Dockerfile/images/php.jinja2 index 928657687..0e05c114c 100644 --- a/template/Dockerfile/images/php.jinja2 +++ b/template/Dockerfile/images/php.jinja2 @@ -2,6 +2,42 @@ {% import 'Dockerfile/provision.jinja2' as provision %} {% import 'Dockerfile/services.jinja2' as services %} +{% macro externalExtensions() -%} + && cd / \ + && PIE_WORKING_DIRECTORY=/tmp/pie pie install --no-interaction --no-cache \ + --skip-enable-extension --make-parallel-jobs="$(nproc)" \ + apcu/apcu \ + wikimedia/excimer \ + open-telemetry/ext-opentelemetry \ + php-memcached/php-memcached \ + pecl/yaml \ + phpredis/phpredis \ + mongodb/mongodb-extension \ + && rm -rf /tmp/pie \ + && PROTOBUF_RELEASE_URL="$(curl -fsSLI --proto '=https' --proto-redir '=https' --retry 3 -o /dev/null -w '%{url_effective}' https://github.com/protocolbuffers/protobuf/releases/latest)" \ + && PROTOBUF_VERSION="${PROTOBUF_RELEASE_URL##*/}" \ + && mkdir -p /tmp/protobuf \ + && curl -fsSL --proto '=https' --proto-redir '=https' --retry 3 "https://codeload.github.com/protocolbuffers/protobuf/tar.gz/refs/tags/${PROTOBUF_VERSION}" -o /tmp/protobuf.tar.gz \ + && tar -xzf /tmp/protobuf.tar.gz --strip-components=1 -C /tmp/protobuf \ + && cd /tmp/protobuf/php/ext/google/protobuf \ + && mkdir -p third_party \ + && cp -R /tmp/protobuf/third_party/utf8_range third_party/ \ + && phpize && ./configure --enable-protobuf \ + && make -j"$(nproc)" && make install \ + && cd / && rm -rf /tmp/protobuf /tmp/protobuf.tar.gz \ + # Vips' GitHub tags lag behind PECL releases; use the upstream branch. + && git clone --depth 1 https://github.com/libvips/php-vips-ext.git /tmp/vips \ + && cd /tmp/vips \ + && phpize && ./configure --with-vips \ + && make -j"$(nproc)" && make install \ + && cd / && rm -rf /tmp/vips \ + && git clone --depth 1 --branch xmlrpc-1.0.0RC3 https://github.com/php/pecl-networking-xmlrpc.git /tmp/xmlrpc \ + && cd /tmp/xmlrpc \ + && phpize && ./configure --with-xmlrpc \ + && make -j"$(nproc)" && make install \ + && cd / && rm -rf /tmp/xmlrpc +{%- endmacro %} + {% macro official(role='', version='', distribution='') -%} # Install php environment && apt-install \ @@ -120,16 +156,7 @@ {%- if version != '8.5' %} opcache \ {%- endif %} - && pecl install memcached \ - && pecl install apcu \ - && pecl install excimer \ - && pecl install opentelemetry \ - && pecl install protobuf \ - && pecl install xmlrpc-1.0.0RC3 \ - && pecl install vips \ - && pecl install yaml \ - && pecl install redis \ - && pecl install mongodb \ + {{ externalExtensions() }} \ && echo extension=apcu.so > /usr/local/etc/php/conf.d/apcu.ini \ && echo extension=excimer.so > /usr/local/etc/php/conf.d/excimer.ini \ && echo extension=opentelemetry.so > /usr/local/etc/php/conf.d/opentelemetry.ini \ @@ -283,22 +310,7 @@ {%- if version != '8.5' %} opcache \ {%- endif %} - # Install extensions for PHP 7.x - # Memcached for 7.3 can currently only be built from master - && MEMCACHED="`mktemp -d`" \ - && curl -skL https://github.com/php-memcached-dev/php-memcached/archive/master.tar.gz | tar zxf - --strip-components 1 -C $MEMCACHED \ - && docker-php-ext-configure $MEMCACHED \ - && docker-php-ext-install $MEMCACHED \ - && rm -rf $MEMCACHED \ - && pecl install apcu \ - && pecl install excimer \ - && pecl install opentelemetry \ - && pecl install protobuf \ - && pecl install vips \ - && pecl install yaml \ - && pecl install redis \ - && pecl install mongodb \ - && pecl install xmlrpc-1.0.0RC3 \ + {{ externalExtensions() }} \ && docker-php-ext-enable \ apcu \ excimer \ @@ -310,6 +322,7 @@ xmlrpc \ imagick \ mongodb \ + memcached \ # Uninstall dev and header packages && apk del -f --purge \ autoconf \ @@ -354,7 +367,9 @@ && echo 'deb https://packages.tideways.com/apt-packages-main any-version main' | tee /etc/apt/sources.list.d/tideways.list \ && wget -qO - https://packages.tideways.com/key.gpg | apt-key add - \ && apt-install tideways-php tideways-daemon \ - && pecl install xdebug \ + && PIE_WORKING_DIRECTORY=/tmp/pie pie install --no-interaction --no-cache \ + --skip-enable-extension --make-parallel-jobs="$(nproc)" xdebug/xdebug \ + && rm -rf /tmp/pie \ && docker-php-ext-enable xdebug \ {{ services.phpDev() }} {%- endmacro %} @@ -368,12 +383,18 @@ make \ autoconf \ g++ \ - && pecl install xdebug \ + libtool \ + pkgconf \ + && PIE_WORKING_DIRECTORY=/tmp/pie pie install --no-interaction --no-cache \ + --skip-enable-extension --make-parallel-jobs="$(nproc)" xdebug/xdebug \ + && rm -rf /tmp/pie \ && apk del -f --purge \ autoconf \ linux-headers \ g++ \ make \ + libtool \ + pkgconf \ && docker-php-ext-enable xdebug \ {{ services.phpDev() }} {%- endmacro %} diff --git a/tests/serverspec/spec/shared/php/modules.rb b/tests/serverspec/spec/shared/php/modules.rb index a14878e64..b9311e20b 100644 --- a/tests/serverspec/spec/shared/php/modules.rb +++ b/tests/serverspec/spec/shared/php/modules.rb @@ -4,6 +4,7 @@ shared_examples 'php::modules' do describe command('php -m') do + its(:stderr) { should eq '' } its(:stdout) { should contain('amqp') } its(:stdout) { should contain('bcmath') } its(:stdout) { should contain('bz2') } @@ -97,6 +98,7 @@ shared_examples 'php::modules::development' do describe command('php -m') do + its(:stderr) { should eq '' } if ( $testConfiguration[:phpXdebug] ) its(:stdout) { should contain('xdebug') } else diff --git a/tests/structure-test/php/test.yaml b/tests/structure-test/php/test.yaml index 8f3be2655..28363b985 100644 --- a/tests/structure-test/php/test.yaml +++ b/tests/structure-test/php/test.yaml @@ -29,6 +29,12 @@ metadataTest: value: "1000" fileExistenceTests: + - name: 'PIE is only mounted during builds' + path: '/usr/local/bin/pie' + shouldExist: false + - name: 'PIE working directory was removed after the build' + path: '/tmp/pie' + shouldExist: false - name: 'provision: set php version variable script was deleted after execution' path: '/opt/docker/provision/bootstrap.d/10-php-init.sh' shouldExist: false From 070de7a8f241b972172fc8ab6ba7583642a4f830 Mon Sep 17 00:00:00 2001 From: Matthias Vogel Date: Wed, 21 Oct 2026 13:03:18 +0000 Subject: [PATCH 2/2] Regenerate PHP Dockerfiles and provisioning --- docker/php-apache-dev/8.2-alpine/Dockerfile | 11 +++- docker/php-apache-dev/8.2/Dockerfile | 7 ++- docker/php-apache-dev/8.3-alpine/Dockerfile | 11 +++- docker/php-apache-dev/8.3/Dockerfile | 7 ++- docker/php-apache-dev/8.4-alpine/Dockerfile | 11 +++- docker/php-apache-dev/8.4/Dockerfile | 7 ++- docker/php-apache-dev/8.5-alpine/Dockerfile | 11 +++- docker/php-apache-dev/8.5/Dockerfile | 7 ++- docker/php-dev/8.2-alpine/Dockerfile | 11 +++- docker/php-dev/8.2/Dockerfile | 7 ++- docker/php-dev/8.3-alpine/Dockerfile | 11 +++- docker/php-dev/8.3/Dockerfile | 7 ++- docker/php-dev/8.4-alpine/Dockerfile | 11 +++- docker/php-dev/8.4/Dockerfile | 7 ++- docker/php-dev/8.5-alpine/Dockerfile | 11 +++- docker/php-dev/8.5/Dockerfile | 7 ++- docker/php-nginx-dev/8.2-alpine/Dockerfile | 11 +++- docker/php-nginx-dev/8.2/Dockerfile | 7 ++- docker/php-nginx-dev/8.3-alpine/Dockerfile | 11 +++- docker/php-nginx-dev/8.3/Dockerfile | 7 ++- docker/php-nginx-dev/8.4-alpine/Dockerfile | 11 +++- docker/php-nginx-dev/8.4/Dockerfile | 7 ++- docker/php-nginx-dev/8.5-alpine/Dockerfile | 11 +++- docker/php-nginx-dev/8.5/Dockerfile | 7 ++- docker/php-official/8.2-alpine/Dockerfile | 53 +++++++++++++------ .../provision/bootstrap.d/30-setup-ioncube.sh | 27 +++++++--- docker/php-official/8.2/Dockerfile | 46 ++++++++++++---- .../provision/bootstrap.d/30-setup-ioncube.sh | 27 +++++++--- docker/php-official/8.3-alpine/Dockerfile | 53 +++++++++++++------ .../provision/bootstrap.d/30-setup-ioncube.sh | 27 +++++++--- docker/php-official/8.3/Dockerfile | 46 ++++++++++++---- .../provision/bootstrap.d/30-setup-ioncube.sh | 27 +++++++--- docker/php-official/8.4-alpine/Dockerfile | 53 +++++++++++++------ .../provision/bootstrap.d/30-setup-ioncube.sh | 27 +++++++--- docker/php-official/8.4/Dockerfile | 46 ++++++++++++---- .../provision/bootstrap.d/30-setup-ioncube.sh | 27 +++++++--- docker/php-official/8.5-alpine/Dockerfile | 53 +++++++++++++------ .../provision/bootstrap.d/30-setup-ioncube.sh | 27 +++++++--- docker/php-official/8.5/Dockerfile | 46 ++++++++++++---- .../provision/bootstrap.d/30-setup-ioncube.sh | 27 +++++++--- 40 files changed, 604 insertions(+), 224 deletions(-) diff --git a/docker/php-apache-dev/8.2-alpine/Dockerfile b/docker/php-apache-dev/8.2-alpine/Dockerfile index 70445ab4d..0b4d7f920 100644 --- a/docker/php-apache-dev/8.2-alpine/Dockerfile +++ b/docker/php-apache-dev/8.2-alpine/Dockerfile @@ -15,7 +15,8 @@ ENV WEB_NO_CACHE_PATTERN="\.(css|js|gif|png|jpg|svg|json|xml)$" COPY conf/ /opt/docker/ -RUN set -x \ +RUN --mount=type=bind,from=ghcr.io/php/pie:bin,source=/pie,target=/usr/local/bin/pie \ + set -x \ # Install development environment && bash -c "$(curl -L https://installer.blackfire.io/installer.sh)" \ && blackfire php:install \ @@ -24,12 +25,18 @@ RUN set -x \ make \ autoconf \ g++ \ - && pecl install xdebug \ + libtool \ + pkgconf \ + && PIE_WORKING_DIRECTORY=/tmp/pie pie install --no-interaction --no-cache \ + --skip-enable-extension --make-parallel-jobs="$(nproc)" xdebug/xdebug \ + && rm -rf /tmp/pie \ && apk del -f --purge \ autoconf \ linux-headers \ g++ \ make \ + libtool \ + pkgconf \ && docker-php-ext-enable xdebug \ # Enable php development services && docker-service enable syslog \ diff --git a/docker/php-apache-dev/8.2/Dockerfile b/docker/php-apache-dev/8.2/Dockerfile index a5a857d5c..e5d4863c4 100644 --- a/docker/php-apache-dev/8.2/Dockerfile +++ b/docker/php-apache-dev/8.2/Dockerfile @@ -15,14 +15,17 @@ ENV WEB_NO_CACHE_PATTERN="\.(css|js|gif|png|jpg|svg|json|xml)$" COPY conf/ /opt/docker/ -RUN set -x \ +RUN --mount=type=bind,from=ghcr.io/php/pie:bin,source=/pie,target=/usr/local/bin/pie \ + set -x \ # Install development environment && BLACKFIRE_INSTALL_METHOD=raw bash -c "$(curl -L https://installer.blackfire.io/installer.sh)" \ && blackfire php:install \ && echo 'deb https://packages.tideways.com/apt-packages-main any-version main' | tee /etc/apt/sources.list.d/tideways.list \ && wget -qO - https://packages.tideways.com/key.gpg | apt-key add - \ && apt-install tideways-php tideways-daemon \ - && pecl install xdebug \ + && PIE_WORKING_DIRECTORY=/tmp/pie pie install --no-interaction --no-cache \ + --skip-enable-extension --make-parallel-jobs="$(nproc)" xdebug/xdebug \ + && rm -rf /tmp/pie \ && docker-php-ext-enable xdebug \ # Enable php development services && docker-service enable syslog \ diff --git a/docker/php-apache-dev/8.3-alpine/Dockerfile b/docker/php-apache-dev/8.3-alpine/Dockerfile index b03474d47..b0d08e297 100644 --- a/docker/php-apache-dev/8.3-alpine/Dockerfile +++ b/docker/php-apache-dev/8.3-alpine/Dockerfile @@ -15,7 +15,8 @@ ENV WEB_NO_CACHE_PATTERN="\.(css|js|gif|png|jpg|svg|json|xml)$" COPY conf/ /opt/docker/ -RUN set -x \ +RUN --mount=type=bind,from=ghcr.io/php/pie:bin,source=/pie,target=/usr/local/bin/pie \ + set -x \ # Install development environment && bash -c "$(curl -L https://installer.blackfire.io/installer.sh)" \ && blackfire php:install \ @@ -24,12 +25,18 @@ RUN set -x \ make \ autoconf \ g++ \ - && pecl install xdebug \ + libtool \ + pkgconf \ + && PIE_WORKING_DIRECTORY=/tmp/pie pie install --no-interaction --no-cache \ + --skip-enable-extension --make-parallel-jobs="$(nproc)" xdebug/xdebug \ + && rm -rf /tmp/pie \ && apk del -f --purge \ autoconf \ linux-headers \ g++ \ make \ + libtool \ + pkgconf \ && docker-php-ext-enable xdebug \ # Enable php development services && docker-service enable syslog \ diff --git a/docker/php-apache-dev/8.3/Dockerfile b/docker/php-apache-dev/8.3/Dockerfile index e17ae173d..cc2c2d2a6 100644 --- a/docker/php-apache-dev/8.3/Dockerfile +++ b/docker/php-apache-dev/8.3/Dockerfile @@ -15,14 +15,17 @@ ENV WEB_NO_CACHE_PATTERN="\.(css|js|gif|png|jpg|svg|json|xml)$" COPY conf/ /opt/docker/ -RUN set -x \ +RUN --mount=type=bind,from=ghcr.io/php/pie:bin,source=/pie,target=/usr/local/bin/pie \ + set -x \ # Install development environment && BLACKFIRE_INSTALL_METHOD=raw bash -c "$(curl -L https://installer.blackfire.io/installer.sh)" \ && blackfire php:install \ && echo 'deb https://packages.tideways.com/apt-packages-main any-version main' | tee /etc/apt/sources.list.d/tideways.list \ && wget -qO - https://packages.tideways.com/key.gpg | apt-key add - \ && apt-install tideways-php tideways-daemon \ - && pecl install xdebug \ + && PIE_WORKING_DIRECTORY=/tmp/pie pie install --no-interaction --no-cache \ + --skip-enable-extension --make-parallel-jobs="$(nproc)" xdebug/xdebug \ + && rm -rf /tmp/pie \ && docker-php-ext-enable xdebug \ # Enable php development services && docker-service enable syslog \ diff --git a/docker/php-apache-dev/8.4-alpine/Dockerfile b/docker/php-apache-dev/8.4-alpine/Dockerfile index ebd1dfcf9..14bc342cb 100644 --- a/docker/php-apache-dev/8.4-alpine/Dockerfile +++ b/docker/php-apache-dev/8.4-alpine/Dockerfile @@ -15,7 +15,8 @@ ENV WEB_NO_CACHE_PATTERN="\.(css|js|gif|png|jpg|svg|json|xml)$" COPY conf/ /opt/docker/ -RUN set -x \ +RUN --mount=type=bind,from=ghcr.io/php/pie:bin,source=/pie,target=/usr/local/bin/pie \ + set -x \ # Install development environment && bash -c "$(curl -L https://installer.blackfire.io/installer.sh)" \ && blackfire php:install \ @@ -24,12 +25,18 @@ RUN set -x \ make \ autoconf \ g++ \ - && pecl install xdebug \ + libtool \ + pkgconf \ + && PIE_WORKING_DIRECTORY=/tmp/pie pie install --no-interaction --no-cache \ + --skip-enable-extension --make-parallel-jobs="$(nproc)" xdebug/xdebug \ + && rm -rf /tmp/pie \ && apk del -f --purge \ autoconf \ linux-headers \ g++ \ make \ + libtool \ + pkgconf \ && docker-php-ext-enable xdebug \ # Enable php development services && docker-service enable syslog \ diff --git a/docker/php-apache-dev/8.4/Dockerfile b/docker/php-apache-dev/8.4/Dockerfile index fdd8531c0..8a83dac05 100644 --- a/docker/php-apache-dev/8.4/Dockerfile +++ b/docker/php-apache-dev/8.4/Dockerfile @@ -15,14 +15,17 @@ ENV WEB_NO_CACHE_PATTERN="\.(css|js|gif|png|jpg|svg|json|xml)$" COPY conf/ /opt/docker/ -RUN set -x \ +RUN --mount=type=bind,from=ghcr.io/php/pie:bin,source=/pie,target=/usr/local/bin/pie \ + set -x \ # Install development environment && BLACKFIRE_INSTALL_METHOD=raw bash -c "$(curl -L https://installer.blackfire.io/installer.sh)" \ && blackfire php:install \ && echo 'deb https://packages.tideways.com/apt-packages-main any-version main' | tee /etc/apt/sources.list.d/tideways.list \ && wget -qO - https://packages.tideways.com/key.gpg | apt-key add - \ && apt-install tideways-php tideways-daemon \ - && pecl install xdebug \ + && PIE_WORKING_DIRECTORY=/tmp/pie pie install --no-interaction --no-cache \ + --skip-enable-extension --make-parallel-jobs="$(nproc)" xdebug/xdebug \ + && rm -rf /tmp/pie \ && docker-php-ext-enable xdebug \ # Enable php development services && docker-service enable syslog \ diff --git a/docker/php-apache-dev/8.5-alpine/Dockerfile b/docker/php-apache-dev/8.5-alpine/Dockerfile index 02781dc8b..ec27083ef 100644 --- a/docker/php-apache-dev/8.5-alpine/Dockerfile +++ b/docker/php-apache-dev/8.5-alpine/Dockerfile @@ -15,7 +15,8 @@ ENV WEB_NO_CACHE_PATTERN="\.(css|js|gif|png|jpg|svg|json|xml)$" COPY conf/ /opt/docker/ -RUN set -x \ +RUN --mount=type=bind,from=ghcr.io/php/pie:bin,source=/pie,target=/usr/local/bin/pie \ + set -x \ # Install development environment && bash -c "$(curl -L https://installer.blackfire.io/installer.sh)" \ && blackfire php:install \ @@ -24,12 +25,18 @@ RUN set -x \ make \ autoconf \ g++ \ - && pecl install xdebug \ + libtool \ + pkgconf \ + && PIE_WORKING_DIRECTORY=/tmp/pie pie install --no-interaction --no-cache \ + --skip-enable-extension --make-parallel-jobs="$(nproc)" xdebug/xdebug \ + && rm -rf /tmp/pie \ && apk del -f --purge \ autoconf \ linux-headers \ g++ \ make \ + libtool \ + pkgconf \ && docker-php-ext-enable xdebug \ # Enable php development services && docker-service enable syslog \ diff --git a/docker/php-apache-dev/8.5/Dockerfile b/docker/php-apache-dev/8.5/Dockerfile index 6dd17f1ab..c55eab490 100644 --- a/docker/php-apache-dev/8.5/Dockerfile +++ b/docker/php-apache-dev/8.5/Dockerfile @@ -15,14 +15,17 @@ ENV WEB_NO_CACHE_PATTERN="\.(css|js|gif|png|jpg|svg|json|xml)$" COPY conf/ /opt/docker/ -RUN set -x \ +RUN --mount=type=bind,from=ghcr.io/php/pie:bin,source=/pie,target=/usr/local/bin/pie \ + set -x \ # Install development environment && BLACKFIRE_INSTALL_METHOD=raw bash -c "$(curl -L https://installer.blackfire.io/installer.sh)" \ && blackfire php:install \ && echo 'deb https://packages.tideways.com/apt-packages-main any-version main' | tee /etc/apt/sources.list.d/tideways.list \ && wget -qO - https://packages.tideways.com/key.gpg | apt-key add - \ && apt-install tideways-php tideways-daemon \ - && pecl install xdebug \ + && PIE_WORKING_DIRECTORY=/tmp/pie pie install --no-interaction --no-cache \ + --skip-enable-extension --make-parallel-jobs="$(nproc)" xdebug/xdebug \ + && rm -rf /tmp/pie \ && docker-php-ext-enable xdebug \ # Enable php development services && docker-service enable syslog \ diff --git a/docker/php-dev/8.2-alpine/Dockerfile b/docker/php-dev/8.2-alpine/Dockerfile index 4ddf0a3d0..939a37646 100644 --- a/docker/php-dev/8.2-alpine/Dockerfile +++ b/docker/php-dev/8.2-alpine/Dockerfile @@ -7,7 +7,8 @@ FROM webdevops/php:8.2-alpine COPY conf/ /opt/docker/ -RUN set -x \ +RUN --mount=type=bind,from=ghcr.io/php/pie:bin,source=/pie,target=/usr/local/bin/pie \ + set -x \ # Install development environment && bash -c "$(curl -L https://installer.blackfire.io/installer.sh)" \ && blackfire php:install \ @@ -16,12 +17,18 @@ RUN set -x \ make \ autoconf \ g++ \ - && pecl install xdebug \ + libtool \ + pkgconf \ + && PIE_WORKING_DIRECTORY=/tmp/pie pie install --no-interaction --no-cache \ + --skip-enable-extension --make-parallel-jobs="$(nproc)" xdebug/xdebug \ + && rm -rf /tmp/pie \ && apk del -f --purge \ autoconf \ linux-headers \ g++ \ make \ + libtool \ + pkgconf \ && docker-php-ext-enable xdebug \ # Enable php development services && docker-service enable syslog \ diff --git a/docker/php-dev/8.2/Dockerfile b/docker/php-dev/8.2/Dockerfile index 544e5acbe..d06537982 100644 --- a/docker/php-dev/8.2/Dockerfile +++ b/docker/php-dev/8.2/Dockerfile @@ -7,14 +7,17 @@ FROM webdevops/php:8.2 COPY conf/ /opt/docker/ -RUN set -x \ +RUN --mount=type=bind,from=ghcr.io/php/pie:bin,source=/pie,target=/usr/local/bin/pie \ + set -x \ # Install development environment && BLACKFIRE_INSTALL_METHOD=raw bash -c "$(curl -L https://installer.blackfire.io/installer.sh)" \ && blackfire php:install \ && echo 'deb https://packages.tideways.com/apt-packages-main any-version main' | tee /etc/apt/sources.list.d/tideways.list \ && wget -qO - https://packages.tideways.com/key.gpg | apt-key add - \ && apt-install tideways-php tideways-daemon \ - && pecl install xdebug \ + && PIE_WORKING_DIRECTORY=/tmp/pie pie install --no-interaction --no-cache \ + --skip-enable-extension --make-parallel-jobs="$(nproc)" xdebug/xdebug \ + && rm -rf /tmp/pie \ && docker-php-ext-enable xdebug \ # Enable php development services && docker-service enable syslog \ diff --git a/docker/php-dev/8.3-alpine/Dockerfile b/docker/php-dev/8.3-alpine/Dockerfile index 73d20a09f..539b37d73 100644 --- a/docker/php-dev/8.3-alpine/Dockerfile +++ b/docker/php-dev/8.3-alpine/Dockerfile @@ -7,7 +7,8 @@ FROM webdevops/php:8.3-alpine COPY conf/ /opt/docker/ -RUN set -x \ +RUN --mount=type=bind,from=ghcr.io/php/pie:bin,source=/pie,target=/usr/local/bin/pie \ + set -x \ # Install development environment && bash -c "$(curl -L https://installer.blackfire.io/installer.sh)" \ && blackfire php:install \ @@ -16,12 +17,18 @@ RUN set -x \ make \ autoconf \ g++ \ - && pecl install xdebug \ + libtool \ + pkgconf \ + && PIE_WORKING_DIRECTORY=/tmp/pie pie install --no-interaction --no-cache \ + --skip-enable-extension --make-parallel-jobs="$(nproc)" xdebug/xdebug \ + && rm -rf /tmp/pie \ && apk del -f --purge \ autoconf \ linux-headers \ g++ \ make \ + libtool \ + pkgconf \ && docker-php-ext-enable xdebug \ # Enable php development services && docker-service enable syslog \ diff --git a/docker/php-dev/8.3/Dockerfile b/docker/php-dev/8.3/Dockerfile index 02f9c1b41..19408ba53 100644 --- a/docker/php-dev/8.3/Dockerfile +++ b/docker/php-dev/8.3/Dockerfile @@ -7,14 +7,17 @@ FROM webdevops/php:8.3 COPY conf/ /opt/docker/ -RUN set -x \ +RUN --mount=type=bind,from=ghcr.io/php/pie:bin,source=/pie,target=/usr/local/bin/pie \ + set -x \ # Install development environment && BLACKFIRE_INSTALL_METHOD=raw bash -c "$(curl -L https://installer.blackfire.io/installer.sh)" \ && blackfire php:install \ && echo 'deb https://packages.tideways.com/apt-packages-main any-version main' | tee /etc/apt/sources.list.d/tideways.list \ && wget -qO - https://packages.tideways.com/key.gpg | apt-key add - \ && apt-install tideways-php tideways-daemon \ - && pecl install xdebug \ + && PIE_WORKING_DIRECTORY=/tmp/pie pie install --no-interaction --no-cache \ + --skip-enable-extension --make-parallel-jobs="$(nproc)" xdebug/xdebug \ + && rm -rf /tmp/pie \ && docker-php-ext-enable xdebug \ # Enable php development services && docker-service enable syslog \ diff --git a/docker/php-dev/8.4-alpine/Dockerfile b/docker/php-dev/8.4-alpine/Dockerfile index 02d2db188..dac2eb691 100644 --- a/docker/php-dev/8.4-alpine/Dockerfile +++ b/docker/php-dev/8.4-alpine/Dockerfile @@ -7,7 +7,8 @@ FROM webdevops/php:8.4-alpine COPY conf/ /opt/docker/ -RUN set -x \ +RUN --mount=type=bind,from=ghcr.io/php/pie:bin,source=/pie,target=/usr/local/bin/pie \ + set -x \ # Install development environment && bash -c "$(curl -L https://installer.blackfire.io/installer.sh)" \ && blackfire php:install \ @@ -16,12 +17,18 @@ RUN set -x \ make \ autoconf \ g++ \ - && pecl install xdebug \ + libtool \ + pkgconf \ + && PIE_WORKING_DIRECTORY=/tmp/pie pie install --no-interaction --no-cache \ + --skip-enable-extension --make-parallel-jobs="$(nproc)" xdebug/xdebug \ + && rm -rf /tmp/pie \ && apk del -f --purge \ autoconf \ linux-headers \ g++ \ make \ + libtool \ + pkgconf \ && docker-php-ext-enable xdebug \ # Enable php development services && docker-service enable syslog \ diff --git a/docker/php-dev/8.4/Dockerfile b/docker/php-dev/8.4/Dockerfile index 247a6d0ac..f782ceb0b 100644 --- a/docker/php-dev/8.4/Dockerfile +++ b/docker/php-dev/8.4/Dockerfile @@ -7,14 +7,17 @@ FROM webdevops/php:8.4 COPY conf/ /opt/docker/ -RUN set -x \ +RUN --mount=type=bind,from=ghcr.io/php/pie:bin,source=/pie,target=/usr/local/bin/pie \ + set -x \ # Install development environment && BLACKFIRE_INSTALL_METHOD=raw bash -c "$(curl -L https://installer.blackfire.io/installer.sh)" \ && blackfire php:install \ && echo 'deb https://packages.tideways.com/apt-packages-main any-version main' | tee /etc/apt/sources.list.d/tideways.list \ && wget -qO - https://packages.tideways.com/key.gpg | apt-key add - \ && apt-install tideways-php tideways-daemon \ - && pecl install xdebug \ + && PIE_WORKING_DIRECTORY=/tmp/pie pie install --no-interaction --no-cache \ + --skip-enable-extension --make-parallel-jobs="$(nproc)" xdebug/xdebug \ + && rm -rf /tmp/pie \ && docker-php-ext-enable xdebug \ # Enable php development services && docker-service enable syslog \ diff --git a/docker/php-dev/8.5-alpine/Dockerfile b/docker/php-dev/8.5-alpine/Dockerfile index b6c94d659..4a1b40709 100644 --- a/docker/php-dev/8.5-alpine/Dockerfile +++ b/docker/php-dev/8.5-alpine/Dockerfile @@ -7,7 +7,8 @@ FROM webdevops/php:8.5-alpine COPY conf/ /opt/docker/ -RUN set -x \ +RUN --mount=type=bind,from=ghcr.io/php/pie:bin,source=/pie,target=/usr/local/bin/pie \ + set -x \ # Install development environment && bash -c "$(curl -L https://installer.blackfire.io/installer.sh)" \ && blackfire php:install \ @@ -16,12 +17,18 @@ RUN set -x \ make \ autoconf \ g++ \ - && pecl install xdebug \ + libtool \ + pkgconf \ + && PIE_WORKING_DIRECTORY=/tmp/pie pie install --no-interaction --no-cache \ + --skip-enable-extension --make-parallel-jobs="$(nproc)" xdebug/xdebug \ + && rm -rf /tmp/pie \ && apk del -f --purge \ autoconf \ linux-headers \ g++ \ make \ + libtool \ + pkgconf \ && docker-php-ext-enable xdebug \ # Enable php development services && docker-service enable syslog \ diff --git a/docker/php-dev/8.5/Dockerfile b/docker/php-dev/8.5/Dockerfile index d8e74c867..9a130f462 100644 --- a/docker/php-dev/8.5/Dockerfile +++ b/docker/php-dev/8.5/Dockerfile @@ -7,14 +7,17 @@ FROM webdevops/php:8.5 COPY conf/ /opt/docker/ -RUN set -x \ +RUN --mount=type=bind,from=ghcr.io/php/pie:bin,source=/pie,target=/usr/local/bin/pie \ + set -x \ # Install development environment && BLACKFIRE_INSTALL_METHOD=raw bash -c "$(curl -L https://installer.blackfire.io/installer.sh)" \ && blackfire php:install \ && echo 'deb https://packages.tideways.com/apt-packages-main any-version main' | tee /etc/apt/sources.list.d/tideways.list \ && wget -qO - https://packages.tideways.com/key.gpg | apt-key add - \ && apt-install tideways-php tideways-daemon \ - && pecl install xdebug \ + && PIE_WORKING_DIRECTORY=/tmp/pie pie install --no-interaction --no-cache \ + --skip-enable-extension --make-parallel-jobs="$(nproc)" xdebug/xdebug \ + && rm -rf /tmp/pie \ && docker-php-ext-enable xdebug \ # Enable php development services && docker-service enable syslog \ diff --git a/docker/php-nginx-dev/8.2-alpine/Dockerfile b/docker/php-nginx-dev/8.2-alpine/Dockerfile index e2b649587..e273d22b9 100644 --- a/docker/php-nginx-dev/8.2-alpine/Dockerfile +++ b/docker/php-nginx-dev/8.2-alpine/Dockerfile @@ -15,7 +15,8 @@ ENV WEB_NO_CACHE_PATTERN="\.(css|js|gif|png|jpg|svg|json|xml)$" COPY conf/ /opt/docker/ -RUN set -x \ +RUN --mount=type=bind,from=ghcr.io/php/pie:bin,source=/pie,target=/usr/local/bin/pie \ + set -x \ # Install development environment && bash -c "$(curl -L https://installer.blackfire.io/installer.sh)" \ && blackfire php:install \ @@ -24,12 +25,18 @@ RUN set -x \ make \ autoconf \ g++ \ - && pecl install xdebug \ + libtool \ + pkgconf \ + && PIE_WORKING_DIRECTORY=/tmp/pie pie install --no-interaction --no-cache \ + --skip-enable-extension --make-parallel-jobs="$(nproc)" xdebug/xdebug \ + && rm -rf /tmp/pie \ && apk del -f --purge \ autoconf \ linux-headers \ g++ \ make \ + libtool \ + pkgconf \ && docker-php-ext-enable xdebug \ # Enable php development services && docker-service enable syslog \ diff --git a/docker/php-nginx-dev/8.2/Dockerfile b/docker/php-nginx-dev/8.2/Dockerfile index bc25ce35b..c660498e5 100644 --- a/docker/php-nginx-dev/8.2/Dockerfile +++ b/docker/php-nginx-dev/8.2/Dockerfile @@ -15,14 +15,17 @@ ENV WEB_NO_CACHE_PATTERN="\.(css|js|gif|png|jpg|svg|json|xml)$" COPY conf/ /opt/docker/ -RUN set -x \ +RUN --mount=type=bind,from=ghcr.io/php/pie:bin,source=/pie,target=/usr/local/bin/pie \ + set -x \ # Install development environment && BLACKFIRE_INSTALL_METHOD=raw bash -c "$(curl -L https://installer.blackfire.io/installer.sh)" \ && blackfire php:install \ && echo 'deb https://packages.tideways.com/apt-packages-main any-version main' | tee /etc/apt/sources.list.d/tideways.list \ && wget -qO - https://packages.tideways.com/key.gpg | apt-key add - \ && apt-install tideways-php tideways-daemon \ - && pecl install xdebug \ + && PIE_WORKING_DIRECTORY=/tmp/pie pie install --no-interaction --no-cache \ + --skip-enable-extension --make-parallel-jobs="$(nproc)" xdebug/xdebug \ + && rm -rf /tmp/pie \ && docker-php-ext-enable xdebug \ # Enable php development services && docker-service enable syslog \ diff --git a/docker/php-nginx-dev/8.3-alpine/Dockerfile b/docker/php-nginx-dev/8.3-alpine/Dockerfile index f5a822f7f..2f5d8488e 100644 --- a/docker/php-nginx-dev/8.3-alpine/Dockerfile +++ b/docker/php-nginx-dev/8.3-alpine/Dockerfile @@ -15,7 +15,8 @@ ENV WEB_NO_CACHE_PATTERN="\.(css|js|gif|png|jpg|svg|json|xml)$" COPY conf/ /opt/docker/ -RUN set -x \ +RUN --mount=type=bind,from=ghcr.io/php/pie:bin,source=/pie,target=/usr/local/bin/pie \ + set -x \ # Install development environment && bash -c "$(curl -L https://installer.blackfire.io/installer.sh)" \ && blackfire php:install \ @@ -24,12 +25,18 @@ RUN set -x \ make \ autoconf \ g++ \ - && pecl install xdebug \ + libtool \ + pkgconf \ + && PIE_WORKING_DIRECTORY=/tmp/pie pie install --no-interaction --no-cache \ + --skip-enable-extension --make-parallel-jobs="$(nproc)" xdebug/xdebug \ + && rm -rf /tmp/pie \ && apk del -f --purge \ autoconf \ linux-headers \ g++ \ make \ + libtool \ + pkgconf \ && docker-php-ext-enable xdebug \ # Enable php development services && docker-service enable syslog \ diff --git a/docker/php-nginx-dev/8.3/Dockerfile b/docker/php-nginx-dev/8.3/Dockerfile index 64936aa2f..4bf5bd2c2 100644 --- a/docker/php-nginx-dev/8.3/Dockerfile +++ b/docker/php-nginx-dev/8.3/Dockerfile @@ -15,14 +15,17 @@ ENV WEB_NO_CACHE_PATTERN="\.(css|js|gif|png|jpg|svg|json|xml)$" COPY conf/ /opt/docker/ -RUN set -x \ +RUN --mount=type=bind,from=ghcr.io/php/pie:bin,source=/pie,target=/usr/local/bin/pie \ + set -x \ # Install development environment && BLACKFIRE_INSTALL_METHOD=raw bash -c "$(curl -L https://installer.blackfire.io/installer.sh)" \ && blackfire php:install \ && echo 'deb https://packages.tideways.com/apt-packages-main any-version main' | tee /etc/apt/sources.list.d/tideways.list \ && wget -qO - https://packages.tideways.com/key.gpg | apt-key add - \ && apt-install tideways-php tideways-daemon \ - && pecl install xdebug \ + && PIE_WORKING_DIRECTORY=/tmp/pie pie install --no-interaction --no-cache \ + --skip-enable-extension --make-parallel-jobs="$(nproc)" xdebug/xdebug \ + && rm -rf /tmp/pie \ && docker-php-ext-enable xdebug \ # Enable php development services && docker-service enable syslog \ diff --git a/docker/php-nginx-dev/8.4-alpine/Dockerfile b/docker/php-nginx-dev/8.4-alpine/Dockerfile index a30de995d..a405bff87 100644 --- a/docker/php-nginx-dev/8.4-alpine/Dockerfile +++ b/docker/php-nginx-dev/8.4-alpine/Dockerfile @@ -15,7 +15,8 @@ ENV WEB_NO_CACHE_PATTERN="\.(css|js|gif|png|jpg|svg|json|xml)$" COPY conf/ /opt/docker/ -RUN set -x \ +RUN --mount=type=bind,from=ghcr.io/php/pie:bin,source=/pie,target=/usr/local/bin/pie \ + set -x \ # Install development environment && bash -c "$(curl -L https://installer.blackfire.io/installer.sh)" \ && blackfire php:install \ @@ -24,12 +25,18 @@ RUN set -x \ make \ autoconf \ g++ \ - && pecl install xdebug \ + libtool \ + pkgconf \ + && PIE_WORKING_DIRECTORY=/tmp/pie pie install --no-interaction --no-cache \ + --skip-enable-extension --make-parallel-jobs="$(nproc)" xdebug/xdebug \ + && rm -rf /tmp/pie \ && apk del -f --purge \ autoconf \ linux-headers \ g++ \ make \ + libtool \ + pkgconf \ && docker-php-ext-enable xdebug \ # Enable php development services && docker-service enable syslog \ diff --git a/docker/php-nginx-dev/8.4/Dockerfile b/docker/php-nginx-dev/8.4/Dockerfile index 3c122ffa1..97a5ac67a 100644 --- a/docker/php-nginx-dev/8.4/Dockerfile +++ b/docker/php-nginx-dev/8.4/Dockerfile @@ -15,14 +15,17 @@ ENV WEB_NO_CACHE_PATTERN="\.(css|js|gif|png|jpg|svg|json|xml)$" COPY conf/ /opt/docker/ -RUN set -x \ +RUN --mount=type=bind,from=ghcr.io/php/pie:bin,source=/pie,target=/usr/local/bin/pie \ + set -x \ # Install development environment && BLACKFIRE_INSTALL_METHOD=raw bash -c "$(curl -L https://installer.blackfire.io/installer.sh)" \ && blackfire php:install \ && echo 'deb https://packages.tideways.com/apt-packages-main any-version main' | tee /etc/apt/sources.list.d/tideways.list \ && wget -qO - https://packages.tideways.com/key.gpg | apt-key add - \ && apt-install tideways-php tideways-daemon \ - && pecl install xdebug \ + && PIE_WORKING_DIRECTORY=/tmp/pie pie install --no-interaction --no-cache \ + --skip-enable-extension --make-parallel-jobs="$(nproc)" xdebug/xdebug \ + && rm -rf /tmp/pie \ && docker-php-ext-enable xdebug \ # Enable php development services && docker-service enable syslog \ diff --git a/docker/php-nginx-dev/8.5-alpine/Dockerfile b/docker/php-nginx-dev/8.5-alpine/Dockerfile index c10f3d35b..ef7f7b0b6 100644 --- a/docker/php-nginx-dev/8.5-alpine/Dockerfile +++ b/docker/php-nginx-dev/8.5-alpine/Dockerfile @@ -15,7 +15,8 @@ ENV WEB_NO_CACHE_PATTERN="\.(css|js|gif|png|jpg|svg|json|xml)$" COPY conf/ /opt/docker/ -RUN set -x \ +RUN --mount=type=bind,from=ghcr.io/php/pie:bin,source=/pie,target=/usr/local/bin/pie \ + set -x \ # Install development environment && bash -c "$(curl -L https://installer.blackfire.io/installer.sh)" \ && blackfire php:install \ @@ -24,12 +25,18 @@ RUN set -x \ make \ autoconf \ g++ \ - && pecl install xdebug \ + libtool \ + pkgconf \ + && PIE_WORKING_DIRECTORY=/tmp/pie pie install --no-interaction --no-cache \ + --skip-enable-extension --make-parallel-jobs="$(nproc)" xdebug/xdebug \ + && rm -rf /tmp/pie \ && apk del -f --purge \ autoconf \ linux-headers \ g++ \ make \ + libtool \ + pkgconf \ && docker-php-ext-enable xdebug \ # Enable php development services && docker-service enable syslog \ diff --git a/docker/php-nginx-dev/8.5/Dockerfile b/docker/php-nginx-dev/8.5/Dockerfile index 622a121a2..58732f757 100644 --- a/docker/php-nginx-dev/8.5/Dockerfile +++ b/docker/php-nginx-dev/8.5/Dockerfile @@ -15,14 +15,17 @@ ENV WEB_NO_CACHE_PATTERN="\.(css|js|gif|png|jpg|svg|json|xml)$" COPY conf/ /opt/docker/ -RUN set -x \ +RUN --mount=type=bind,from=ghcr.io/php/pie:bin,source=/pie,target=/usr/local/bin/pie \ + set -x \ # Install development environment && BLACKFIRE_INSTALL_METHOD=raw bash -c "$(curl -L https://installer.blackfire.io/installer.sh)" \ && blackfire php:install \ && echo 'deb https://packages.tideways.com/apt-packages-main any-version main' | tee /etc/apt/sources.list.d/tideways.list \ && wget -qO - https://packages.tideways.com/key.gpg | apt-key add - \ && apt-install tideways-php tideways-daemon \ - && pecl install xdebug \ + && PIE_WORKING_DIRECTORY=/tmp/pie pie install --no-interaction --no-cache \ + --skip-enable-extension --make-parallel-jobs="$(nproc)" xdebug/xdebug \ + && rm -rf /tmp/pie \ && docker-php-ext-enable xdebug \ # Enable php development services && docker-service enable syslog \ diff --git a/docker/php-official/8.2-alpine/Dockerfile b/docker/php-official/8.2-alpine/Dockerfile index c043ee943..1ecb93e5f 100644 --- a/docker/php-official/8.2-alpine/Dockerfile +++ b/docker/php-official/8.2-alpine/Dockerfile @@ -80,7 +80,8 @@ RUN set -x \ git \ && docker-run-bootstrap -RUN set -x \ +RUN --mount=type=bind,from=ghcr.io/php/pie:bin,source=/pie,target=/usr/local/bin/pie \ + set -x \ # Install php environment && apk-install \ imagemagick \ @@ -182,22 +183,39 @@ RUN set -x \ zip \ gd \ opcache \ - # Install extensions for PHP 7.x - # Memcached for 7.3 can currently only be built from master - && MEMCACHED="`mktemp -d`" \ - && curl -skL https://github.com/php-memcached-dev/php-memcached/archive/master.tar.gz | tar zxf - --strip-components 1 -C $MEMCACHED \ - && docker-php-ext-configure $MEMCACHED \ - && docker-php-ext-install $MEMCACHED \ - && rm -rf $MEMCACHED \ - && pecl install apcu \ - && pecl install excimer \ - && pecl install opentelemetry \ - && pecl install protobuf \ - && pecl install vips \ - && pecl install yaml \ - && pecl install redis \ - && pecl install mongodb \ - && pecl install xmlrpc-1.0.0RC3 \ + && cd / \ + && PIE_WORKING_DIRECTORY=/tmp/pie pie install --no-interaction --no-cache \ + --skip-enable-extension --make-parallel-jobs="$(nproc)" \ + apcu/apcu \ + wikimedia/excimer \ + open-telemetry/ext-opentelemetry \ + php-memcached/php-memcached \ + pecl/yaml \ + phpredis/phpredis \ + mongodb/mongodb-extension \ + && rm -rf /tmp/pie \ + && PROTOBUF_RELEASE_URL="$(curl -fsSLI --proto '=https' --proto-redir '=https' --retry 3 -o /dev/null -w '%{url_effective}' https://github.com/protocolbuffers/protobuf/releases/latest)" \ + && PROTOBUF_VERSION="${PROTOBUF_RELEASE_URL##*/}" \ + && mkdir -p /tmp/protobuf \ + && curl -fsSL --proto '=https' --proto-redir '=https' --retry 3 "https://codeload.github.com/protocolbuffers/protobuf/tar.gz/refs/tags/${PROTOBUF_VERSION}" -o /tmp/protobuf.tar.gz \ + && tar -xzf /tmp/protobuf.tar.gz --strip-components=1 -C /tmp/protobuf \ + && cd /tmp/protobuf/php/ext/google/protobuf \ + && mkdir -p third_party \ + && cp -R /tmp/protobuf/third_party/utf8_range third_party/ \ + && phpize && ./configure --enable-protobuf \ + && make -j"$(nproc)" && make install \ + && cd / && rm -rf /tmp/protobuf /tmp/protobuf.tar.gz \ + # Vips' GitHub tags lag behind PECL releases; use the upstream branch. + && git clone --depth 1 https://github.com/libvips/php-vips-ext.git /tmp/vips \ + && cd /tmp/vips \ + && phpize && ./configure --with-vips \ + && make -j"$(nproc)" && make install \ + && cd / && rm -rf /tmp/vips \ + && git clone --depth 1 --branch xmlrpc-1.0.0RC3 https://github.com/php/pecl-networking-xmlrpc.git /tmp/xmlrpc \ + && cd /tmp/xmlrpc \ + && phpize && ./configure --with-xmlrpc \ + && make -j"$(nproc)" && make install \ + && cd / && rm -rf /tmp/xmlrpc \ && docker-php-ext-enable \ apcu \ excimer \ @@ -209,6 +227,7 @@ RUN set -x \ xmlrpc \ imagick \ mongodb \ + memcached \ # Uninstall dev and header packages && apk del -f --purge \ autoconf \ diff --git a/docker/php-official/8.2-alpine/conf/provision/bootstrap.d/30-setup-ioncube.sh b/docker/php-official/8.2-alpine/conf/provision/bootstrap.d/30-setup-ioncube.sh index 4a348a38a..59a2d4245 100644 --- a/docker/php-official/8.2-alpine/conf/provision/bootstrap.d/30-setup-ioncube.sh +++ b/docker/php-official/8.2-alpine/conf/provision/bootstrap.d/30-setup-ioncube.sh @@ -7,16 +7,25 @@ fi echo "Installing ionCube loader" -DOWNLOAD_URL="https://downloads.ioncube.com/loader_downloads/ioncube_loaders_lin_x86-64.tar.gz" +case "$(uname -m)" in + x86_64) IONCUBE_ARCH="x86-64" ;; + aarch64) IONCUBE_ARCH="aarch64" ;; + *) + echo "Skipping ionCube installation on unsupported architecture $(uname -m)" + return + ;; +esac + +DOWNLOAD_URL="https://downloads.ioncube.com/loader_downloads/ioncube_loaders_lin_${IONCUBE_ARCH}.tar.gz" TMP_FILE="/tmp/ioncube_loaders.tar.gz" echo "Downloading ..." -curl -sS ${DOWNLOAD_URL} -o ${TMP_FILE} +curl -fsS "${DOWNLOAD_URL}" -o "${TMP_FILE}" echo "Unpacking ..." tar -xzf ${TMP_FILE} -C /tmp -PHP_VERSION=`php -v | head -1 | grep -o 'PHP [0-9].[0-9]' | sed -r 's/PHP //g'` -PHP_EXTENSION_DIR=`php -i | grep -o -m 1 'extension_dir .* =' | sed -r 's/extension_dir => //g' | sed -r 's/ =//g'` +PHP_VERSION="$(php -n -r 'echo PHP_MAJOR_VERSION, ".", PHP_MINOR_VERSION;')" +PHP_EXTENSION_DIR="$(php -n -r 'echo ini_get("extension_dir");')" MOD_INI="${PHP_MOD_INI_DIR}/00-ioncube.ini" SO_FILE="${PHP_EXTENSION_DIR}/ioncube_loader_lin_${PHP_VERSION}.so" @@ -28,15 +37,14 @@ else echo "Installing ${SO_FILE}" cp "/tmp/ioncube/ioncube_loader_lin_${PHP_VERSION}.so" ${SO_FILE} + echo "Checking ionCube loader" + php -n -d "zend_extension=${SO_FILE}" -r 'exit(extension_loaded("ionCube Loader") ? 0 : 1);' || return 1 + echo "Writing module ini" echo "[ioncube]" > ${MOD_INI} echo "zend_extension = ${SO_FILE}" >> ${MOD_INI} echo "; priority=01" >> ${MOD_INI} - echo "Cleaning up" - rm -rf $TMP_FILE - rm -rf /tmp/ioncube - echo "Enabling ionCube PHP module" case "$IMAGE_FAMILY" in Debian|Ubuntu) @@ -48,3 +56,6 @@ else ;; esac fi + +echo "Cleaning up" +rm -rf "$TMP_FILE" /tmp/ioncube diff --git a/docker/php-official/8.2/Dockerfile b/docker/php-official/8.2/Dockerfile index 56b23a928..09d317056 100644 --- a/docker/php-official/8.2/Dockerfile +++ b/docker/php-official/8.2/Dockerfile @@ -80,7 +80,8 @@ RUN set -x \ && docker-run-bootstrap \ && docker-image-cleanup -RUN set -x \ +RUN --mount=type=bind,from=ghcr.io/php/pie:bin,source=/pie,target=/usr/local/bin/pie \ + set -x \ # Install php environment && apt-install \ # Install tools @@ -181,16 +182,39 @@ RUN set -x \ zip \ gd \ opcache \ - && pecl install memcached \ - && pecl install apcu \ - && pecl install excimer \ - && pecl install opentelemetry \ - && pecl install protobuf \ - && pecl install xmlrpc-1.0.0RC3 \ - && pecl install vips \ - && pecl install yaml \ - && pecl install redis \ - && pecl install mongodb \ + && cd / \ + && PIE_WORKING_DIRECTORY=/tmp/pie pie install --no-interaction --no-cache \ + --skip-enable-extension --make-parallel-jobs="$(nproc)" \ + apcu/apcu \ + wikimedia/excimer \ + open-telemetry/ext-opentelemetry \ + php-memcached/php-memcached \ + pecl/yaml \ + phpredis/phpredis \ + mongodb/mongodb-extension \ + && rm -rf /tmp/pie \ + && PROTOBUF_RELEASE_URL="$(curl -fsSLI --proto '=https' --proto-redir '=https' --retry 3 -o /dev/null -w '%{url_effective}' https://github.com/protocolbuffers/protobuf/releases/latest)" \ + && PROTOBUF_VERSION="${PROTOBUF_RELEASE_URL##*/}" \ + && mkdir -p /tmp/protobuf \ + && curl -fsSL --proto '=https' --proto-redir '=https' --retry 3 "https://codeload.github.com/protocolbuffers/protobuf/tar.gz/refs/tags/${PROTOBUF_VERSION}" -o /tmp/protobuf.tar.gz \ + && tar -xzf /tmp/protobuf.tar.gz --strip-components=1 -C /tmp/protobuf \ + && cd /tmp/protobuf/php/ext/google/protobuf \ + && mkdir -p third_party \ + && cp -R /tmp/protobuf/third_party/utf8_range third_party/ \ + && phpize && ./configure --enable-protobuf \ + && make -j"$(nproc)" && make install \ + && cd / && rm -rf /tmp/protobuf /tmp/protobuf.tar.gz \ + # Vips' GitHub tags lag behind PECL releases; use the upstream branch. + && git clone --depth 1 https://github.com/libvips/php-vips-ext.git /tmp/vips \ + && cd /tmp/vips \ + && phpize && ./configure --with-vips \ + && make -j"$(nproc)" && make install \ + && cd / && rm -rf /tmp/vips \ + && git clone --depth 1 --branch xmlrpc-1.0.0RC3 https://github.com/php/pecl-networking-xmlrpc.git /tmp/xmlrpc \ + && cd /tmp/xmlrpc \ + && phpize && ./configure --with-xmlrpc \ + && make -j"$(nproc)" && make install \ + && cd / && rm -rf /tmp/xmlrpc \ && echo extension=apcu.so > /usr/local/etc/php/conf.d/apcu.ini \ && echo extension=excimer.so > /usr/local/etc/php/conf.d/excimer.ini \ && echo extension=opentelemetry.so > /usr/local/etc/php/conf.d/opentelemetry.ini \ diff --git a/docker/php-official/8.2/conf/provision/bootstrap.d/30-setup-ioncube.sh b/docker/php-official/8.2/conf/provision/bootstrap.d/30-setup-ioncube.sh index 4a348a38a..59a2d4245 100644 --- a/docker/php-official/8.2/conf/provision/bootstrap.d/30-setup-ioncube.sh +++ b/docker/php-official/8.2/conf/provision/bootstrap.d/30-setup-ioncube.sh @@ -7,16 +7,25 @@ fi echo "Installing ionCube loader" -DOWNLOAD_URL="https://downloads.ioncube.com/loader_downloads/ioncube_loaders_lin_x86-64.tar.gz" +case "$(uname -m)" in + x86_64) IONCUBE_ARCH="x86-64" ;; + aarch64) IONCUBE_ARCH="aarch64" ;; + *) + echo "Skipping ionCube installation on unsupported architecture $(uname -m)" + return + ;; +esac + +DOWNLOAD_URL="https://downloads.ioncube.com/loader_downloads/ioncube_loaders_lin_${IONCUBE_ARCH}.tar.gz" TMP_FILE="/tmp/ioncube_loaders.tar.gz" echo "Downloading ..." -curl -sS ${DOWNLOAD_URL} -o ${TMP_FILE} +curl -fsS "${DOWNLOAD_URL}" -o "${TMP_FILE}" echo "Unpacking ..." tar -xzf ${TMP_FILE} -C /tmp -PHP_VERSION=`php -v | head -1 | grep -o 'PHP [0-9].[0-9]' | sed -r 's/PHP //g'` -PHP_EXTENSION_DIR=`php -i | grep -o -m 1 'extension_dir .* =' | sed -r 's/extension_dir => //g' | sed -r 's/ =//g'` +PHP_VERSION="$(php -n -r 'echo PHP_MAJOR_VERSION, ".", PHP_MINOR_VERSION;')" +PHP_EXTENSION_DIR="$(php -n -r 'echo ini_get("extension_dir");')" MOD_INI="${PHP_MOD_INI_DIR}/00-ioncube.ini" SO_FILE="${PHP_EXTENSION_DIR}/ioncube_loader_lin_${PHP_VERSION}.so" @@ -28,15 +37,14 @@ else echo "Installing ${SO_FILE}" cp "/tmp/ioncube/ioncube_loader_lin_${PHP_VERSION}.so" ${SO_FILE} + echo "Checking ionCube loader" + php -n -d "zend_extension=${SO_FILE}" -r 'exit(extension_loaded("ionCube Loader") ? 0 : 1);' || return 1 + echo "Writing module ini" echo "[ioncube]" > ${MOD_INI} echo "zend_extension = ${SO_FILE}" >> ${MOD_INI} echo "; priority=01" >> ${MOD_INI} - echo "Cleaning up" - rm -rf $TMP_FILE - rm -rf /tmp/ioncube - echo "Enabling ionCube PHP module" case "$IMAGE_FAMILY" in Debian|Ubuntu) @@ -48,3 +56,6 @@ else ;; esac fi + +echo "Cleaning up" +rm -rf "$TMP_FILE" /tmp/ioncube diff --git a/docker/php-official/8.3-alpine/Dockerfile b/docker/php-official/8.3-alpine/Dockerfile index bd736be97..9af74abe0 100644 --- a/docker/php-official/8.3-alpine/Dockerfile +++ b/docker/php-official/8.3-alpine/Dockerfile @@ -80,7 +80,8 @@ RUN set -x \ git \ && docker-run-bootstrap -RUN set -x \ +RUN --mount=type=bind,from=ghcr.io/php/pie:bin,source=/pie,target=/usr/local/bin/pie \ + set -x \ # Install php environment && apk-install \ imagemagick \ @@ -182,22 +183,39 @@ RUN set -x \ zip \ gd \ opcache \ - # Install extensions for PHP 7.x - # Memcached for 7.3 can currently only be built from master - && MEMCACHED="`mktemp -d`" \ - && curl -skL https://github.com/php-memcached-dev/php-memcached/archive/master.tar.gz | tar zxf - --strip-components 1 -C $MEMCACHED \ - && docker-php-ext-configure $MEMCACHED \ - && docker-php-ext-install $MEMCACHED \ - && rm -rf $MEMCACHED \ - && pecl install apcu \ - && pecl install excimer \ - && pecl install opentelemetry \ - && pecl install protobuf \ - && pecl install vips \ - && pecl install yaml \ - && pecl install redis \ - && pecl install mongodb \ - && pecl install xmlrpc-1.0.0RC3 \ + && cd / \ + && PIE_WORKING_DIRECTORY=/tmp/pie pie install --no-interaction --no-cache \ + --skip-enable-extension --make-parallel-jobs="$(nproc)" \ + apcu/apcu \ + wikimedia/excimer \ + open-telemetry/ext-opentelemetry \ + php-memcached/php-memcached \ + pecl/yaml \ + phpredis/phpredis \ + mongodb/mongodb-extension \ + && rm -rf /tmp/pie \ + && PROTOBUF_RELEASE_URL="$(curl -fsSLI --proto '=https' --proto-redir '=https' --retry 3 -o /dev/null -w '%{url_effective}' https://github.com/protocolbuffers/protobuf/releases/latest)" \ + && PROTOBUF_VERSION="${PROTOBUF_RELEASE_URL##*/}" \ + && mkdir -p /tmp/protobuf \ + && curl -fsSL --proto '=https' --proto-redir '=https' --retry 3 "https://codeload.github.com/protocolbuffers/protobuf/tar.gz/refs/tags/${PROTOBUF_VERSION}" -o /tmp/protobuf.tar.gz \ + && tar -xzf /tmp/protobuf.tar.gz --strip-components=1 -C /tmp/protobuf \ + && cd /tmp/protobuf/php/ext/google/protobuf \ + && mkdir -p third_party \ + && cp -R /tmp/protobuf/third_party/utf8_range third_party/ \ + && phpize && ./configure --enable-protobuf \ + && make -j"$(nproc)" && make install \ + && cd / && rm -rf /tmp/protobuf /tmp/protobuf.tar.gz \ + # Vips' GitHub tags lag behind PECL releases; use the upstream branch. + && git clone --depth 1 https://github.com/libvips/php-vips-ext.git /tmp/vips \ + && cd /tmp/vips \ + && phpize && ./configure --with-vips \ + && make -j"$(nproc)" && make install \ + && cd / && rm -rf /tmp/vips \ + && git clone --depth 1 --branch xmlrpc-1.0.0RC3 https://github.com/php/pecl-networking-xmlrpc.git /tmp/xmlrpc \ + && cd /tmp/xmlrpc \ + && phpize && ./configure --with-xmlrpc \ + && make -j"$(nproc)" && make install \ + && cd / && rm -rf /tmp/xmlrpc \ && docker-php-ext-enable \ apcu \ excimer \ @@ -209,6 +227,7 @@ RUN set -x \ xmlrpc \ imagick \ mongodb \ + memcached \ # Uninstall dev and header packages && apk del -f --purge \ autoconf \ diff --git a/docker/php-official/8.3-alpine/conf/provision/bootstrap.d/30-setup-ioncube.sh b/docker/php-official/8.3-alpine/conf/provision/bootstrap.d/30-setup-ioncube.sh index 4a348a38a..59a2d4245 100644 --- a/docker/php-official/8.3-alpine/conf/provision/bootstrap.d/30-setup-ioncube.sh +++ b/docker/php-official/8.3-alpine/conf/provision/bootstrap.d/30-setup-ioncube.sh @@ -7,16 +7,25 @@ fi echo "Installing ionCube loader" -DOWNLOAD_URL="https://downloads.ioncube.com/loader_downloads/ioncube_loaders_lin_x86-64.tar.gz" +case "$(uname -m)" in + x86_64) IONCUBE_ARCH="x86-64" ;; + aarch64) IONCUBE_ARCH="aarch64" ;; + *) + echo "Skipping ionCube installation on unsupported architecture $(uname -m)" + return + ;; +esac + +DOWNLOAD_URL="https://downloads.ioncube.com/loader_downloads/ioncube_loaders_lin_${IONCUBE_ARCH}.tar.gz" TMP_FILE="/tmp/ioncube_loaders.tar.gz" echo "Downloading ..." -curl -sS ${DOWNLOAD_URL} -o ${TMP_FILE} +curl -fsS "${DOWNLOAD_URL}" -o "${TMP_FILE}" echo "Unpacking ..." tar -xzf ${TMP_FILE} -C /tmp -PHP_VERSION=`php -v | head -1 | grep -o 'PHP [0-9].[0-9]' | sed -r 's/PHP //g'` -PHP_EXTENSION_DIR=`php -i | grep -o -m 1 'extension_dir .* =' | sed -r 's/extension_dir => //g' | sed -r 's/ =//g'` +PHP_VERSION="$(php -n -r 'echo PHP_MAJOR_VERSION, ".", PHP_MINOR_VERSION;')" +PHP_EXTENSION_DIR="$(php -n -r 'echo ini_get("extension_dir");')" MOD_INI="${PHP_MOD_INI_DIR}/00-ioncube.ini" SO_FILE="${PHP_EXTENSION_DIR}/ioncube_loader_lin_${PHP_VERSION}.so" @@ -28,15 +37,14 @@ else echo "Installing ${SO_FILE}" cp "/tmp/ioncube/ioncube_loader_lin_${PHP_VERSION}.so" ${SO_FILE} + echo "Checking ionCube loader" + php -n -d "zend_extension=${SO_FILE}" -r 'exit(extension_loaded("ionCube Loader") ? 0 : 1);' || return 1 + echo "Writing module ini" echo "[ioncube]" > ${MOD_INI} echo "zend_extension = ${SO_FILE}" >> ${MOD_INI} echo "; priority=01" >> ${MOD_INI} - echo "Cleaning up" - rm -rf $TMP_FILE - rm -rf /tmp/ioncube - echo "Enabling ionCube PHP module" case "$IMAGE_FAMILY" in Debian|Ubuntu) @@ -48,3 +56,6 @@ else ;; esac fi + +echo "Cleaning up" +rm -rf "$TMP_FILE" /tmp/ioncube diff --git a/docker/php-official/8.3/Dockerfile b/docker/php-official/8.3/Dockerfile index f36323278..cce96ef44 100644 --- a/docker/php-official/8.3/Dockerfile +++ b/docker/php-official/8.3/Dockerfile @@ -80,7 +80,8 @@ RUN set -x \ && docker-run-bootstrap \ && docker-image-cleanup -RUN set -x \ +RUN --mount=type=bind,from=ghcr.io/php/pie:bin,source=/pie,target=/usr/local/bin/pie \ + set -x \ # Install php environment && apt-install \ # Install tools @@ -181,16 +182,39 @@ RUN set -x \ zip \ gd \ opcache \ - && pecl install memcached \ - && pecl install apcu \ - && pecl install excimer \ - && pecl install opentelemetry \ - && pecl install protobuf \ - && pecl install xmlrpc-1.0.0RC3 \ - && pecl install vips \ - && pecl install yaml \ - && pecl install redis \ - && pecl install mongodb \ + && cd / \ + && PIE_WORKING_DIRECTORY=/tmp/pie pie install --no-interaction --no-cache \ + --skip-enable-extension --make-parallel-jobs="$(nproc)" \ + apcu/apcu \ + wikimedia/excimer \ + open-telemetry/ext-opentelemetry \ + php-memcached/php-memcached \ + pecl/yaml \ + phpredis/phpredis \ + mongodb/mongodb-extension \ + && rm -rf /tmp/pie \ + && PROTOBUF_RELEASE_URL="$(curl -fsSLI --proto '=https' --proto-redir '=https' --retry 3 -o /dev/null -w '%{url_effective}' https://github.com/protocolbuffers/protobuf/releases/latest)" \ + && PROTOBUF_VERSION="${PROTOBUF_RELEASE_URL##*/}" \ + && mkdir -p /tmp/protobuf \ + && curl -fsSL --proto '=https' --proto-redir '=https' --retry 3 "https://codeload.github.com/protocolbuffers/protobuf/tar.gz/refs/tags/${PROTOBUF_VERSION}" -o /tmp/protobuf.tar.gz \ + && tar -xzf /tmp/protobuf.tar.gz --strip-components=1 -C /tmp/protobuf \ + && cd /tmp/protobuf/php/ext/google/protobuf \ + && mkdir -p third_party \ + && cp -R /tmp/protobuf/third_party/utf8_range third_party/ \ + && phpize && ./configure --enable-protobuf \ + && make -j"$(nproc)" && make install \ + && cd / && rm -rf /tmp/protobuf /tmp/protobuf.tar.gz \ + # Vips' GitHub tags lag behind PECL releases; use the upstream branch. + && git clone --depth 1 https://github.com/libvips/php-vips-ext.git /tmp/vips \ + && cd /tmp/vips \ + && phpize && ./configure --with-vips \ + && make -j"$(nproc)" && make install \ + && cd / && rm -rf /tmp/vips \ + && git clone --depth 1 --branch xmlrpc-1.0.0RC3 https://github.com/php/pecl-networking-xmlrpc.git /tmp/xmlrpc \ + && cd /tmp/xmlrpc \ + && phpize && ./configure --with-xmlrpc \ + && make -j"$(nproc)" && make install \ + && cd / && rm -rf /tmp/xmlrpc \ && echo extension=apcu.so > /usr/local/etc/php/conf.d/apcu.ini \ && echo extension=excimer.so > /usr/local/etc/php/conf.d/excimer.ini \ && echo extension=opentelemetry.so > /usr/local/etc/php/conf.d/opentelemetry.ini \ diff --git a/docker/php-official/8.3/conf/provision/bootstrap.d/30-setup-ioncube.sh b/docker/php-official/8.3/conf/provision/bootstrap.d/30-setup-ioncube.sh index 4a348a38a..59a2d4245 100644 --- a/docker/php-official/8.3/conf/provision/bootstrap.d/30-setup-ioncube.sh +++ b/docker/php-official/8.3/conf/provision/bootstrap.d/30-setup-ioncube.sh @@ -7,16 +7,25 @@ fi echo "Installing ionCube loader" -DOWNLOAD_URL="https://downloads.ioncube.com/loader_downloads/ioncube_loaders_lin_x86-64.tar.gz" +case "$(uname -m)" in + x86_64) IONCUBE_ARCH="x86-64" ;; + aarch64) IONCUBE_ARCH="aarch64" ;; + *) + echo "Skipping ionCube installation on unsupported architecture $(uname -m)" + return + ;; +esac + +DOWNLOAD_URL="https://downloads.ioncube.com/loader_downloads/ioncube_loaders_lin_${IONCUBE_ARCH}.tar.gz" TMP_FILE="/tmp/ioncube_loaders.tar.gz" echo "Downloading ..." -curl -sS ${DOWNLOAD_URL} -o ${TMP_FILE} +curl -fsS "${DOWNLOAD_URL}" -o "${TMP_FILE}" echo "Unpacking ..." tar -xzf ${TMP_FILE} -C /tmp -PHP_VERSION=`php -v | head -1 | grep -o 'PHP [0-9].[0-9]' | sed -r 's/PHP //g'` -PHP_EXTENSION_DIR=`php -i | grep -o -m 1 'extension_dir .* =' | sed -r 's/extension_dir => //g' | sed -r 's/ =//g'` +PHP_VERSION="$(php -n -r 'echo PHP_MAJOR_VERSION, ".", PHP_MINOR_VERSION;')" +PHP_EXTENSION_DIR="$(php -n -r 'echo ini_get("extension_dir");')" MOD_INI="${PHP_MOD_INI_DIR}/00-ioncube.ini" SO_FILE="${PHP_EXTENSION_DIR}/ioncube_loader_lin_${PHP_VERSION}.so" @@ -28,15 +37,14 @@ else echo "Installing ${SO_FILE}" cp "/tmp/ioncube/ioncube_loader_lin_${PHP_VERSION}.so" ${SO_FILE} + echo "Checking ionCube loader" + php -n -d "zend_extension=${SO_FILE}" -r 'exit(extension_loaded("ionCube Loader") ? 0 : 1);' || return 1 + echo "Writing module ini" echo "[ioncube]" > ${MOD_INI} echo "zend_extension = ${SO_FILE}" >> ${MOD_INI} echo "; priority=01" >> ${MOD_INI} - echo "Cleaning up" - rm -rf $TMP_FILE - rm -rf /tmp/ioncube - echo "Enabling ionCube PHP module" case "$IMAGE_FAMILY" in Debian|Ubuntu) @@ -48,3 +56,6 @@ else ;; esac fi + +echo "Cleaning up" +rm -rf "$TMP_FILE" /tmp/ioncube diff --git a/docker/php-official/8.4-alpine/Dockerfile b/docker/php-official/8.4-alpine/Dockerfile index 1d5ee33a1..9bd9c430c 100644 --- a/docker/php-official/8.4-alpine/Dockerfile +++ b/docker/php-official/8.4-alpine/Dockerfile @@ -80,7 +80,8 @@ RUN set -x \ git \ && docker-run-bootstrap -RUN set -x \ +RUN --mount=type=bind,from=ghcr.io/php/pie:bin,source=/pie,target=/usr/local/bin/pie \ + set -x \ # Install php environment && apk-install \ imagemagick \ @@ -180,22 +181,39 @@ RUN set -x \ zip \ gd \ opcache \ - # Install extensions for PHP 7.x - # Memcached for 7.3 can currently only be built from master - && MEMCACHED="`mktemp -d`" \ - && curl -skL https://github.com/php-memcached-dev/php-memcached/archive/master.tar.gz | tar zxf - --strip-components 1 -C $MEMCACHED \ - && docker-php-ext-configure $MEMCACHED \ - && docker-php-ext-install $MEMCACHED \ - && rm -rf $MEMCACHED \ - && pecl install apcu \ - && pecl install excimer \ - && pecl install opentelemetry \ - && pecl install protobuf \ - && pecl install vips \ - && pecl install yaml \ - && pecl install redis \ - && pecl install mongodb \ - && pecl install xmlrpc-1.0.0RC3 \ + && cd / \ + && PIE_WORKING_DIRECTORY=/tmp/pie pie install --no-interaction --no-cache \ + --skip-enable-extension --make-parallel-jobs="$(nproc)" \ + apcu/apcu \ + wikimedia/excimer \ + open-telemetry/ext-opentelemetry \ + php-memcached/php-memcached \ + pecl/yaml \ + phpredis/phpredis \ + mongodb/mongodb-extension \ + && rm -rf /tmp/pie \ + && PROTOBUF_RELEASE_URL="$(curl -fsSLI --proto '=https' --proto-redir '=https' --retry 3 -o /dev/null -w '%{url_effective}' https://github.com/protocolbuffers/protobuf/releases/latest)" \ + && PROTOBUF_VERSION="${PROTOBUF_RELEASE_URL##*/}" \ + && mkdir -p /tmp/protobuf \ + && curl -fsSL --proto '=https' --proto-redir '=https' --retry 3 "https://codeload.github.com/protocolbuffers/protobuf/tar.gz/refs/tags/${PROTOBUF_VERSION}" -o /tmp/protobuf.tar.gz \ + && tar -xzf /tmp/protobuf.tar.gz --strip-components=1 -C /tmp/protobuf \ + && cd /tmp/protobuf/php/ext/google/protobuf \ + && mkdir -p third_party \ + && cp -R /tmp/protobuf/third_party/utf8_range third_party/ \ + && phpize && ./configure --enable-protobuf \ + && make -j"$(nproc)" && make install \ + && cd / && rm -rf /tmp/protobuf /tmp/protobuf.tar.gz \ + # Vips' GitHub tags lag behind PECL releases; use the upstream branch. + && git clone --depth 1 https://github.com/libvips/php-vips-ext.git /tmp/vips \ + && cd /tmp/vips \ + && phpize && ./configure --with-vips \ + && make -j"$(nproc)" && make install \ + && cd / && rm -rf /tmp/vips \ + && git clone --depth 1 --branch xmlrpc-1.0.0RC3 https://github.com/php/pecl-networking-xmlrpc.git /tmp/xmlrpc \ + && cd /tmp/xmlrpc \ + && phpize && ./configure --with-xmlrpc \ + && make -j"$(nproc)" && make install \ + && cd / && rm -rf /tmp/xmlrpc \ && docker-php-ext-enable \ apcu \ excimer \ @@ -207,6 +225,7 @@ RUN set -x \ xmlrpc \ imagick \ mongodb \ + memcached \ # Uninstall dev and header packages && apk del -f --purge \ autoconf \ diff --git a/docker/php-official/8.4-alpine/conf/provision/bootstrap.d/30-setup-ioncube.sh b/docker/php-official/8.4-alpine/conf/provision/bootstrap.d/30-setup-ioncube.sh index 4a348a38a..59a2d4245 100644 --- a/docker/php-official/8.4-alpine/conf/provision/bootstrap.d/30-setup-ioncube.sh +++ b/docker/php-official/8.4-alpine/conf/provision/bootstrap.d/30-setup-ioncube.sh @@ -7,16 +7,25 @@ fi echo "Installing ionCube loader" -DOWNLOAD_URL="https://downloads.ioncube.com/loader_downloads/ioncube_loaders_lin_x86-64.tar.gz" +case "$(uname -m)" in + x86_64) IONCUBE_ARCH="x86-64" ;; + aarch64) IONCUBE_ARCH="aarch64" ;; + *) + echo "Skipping ionCube installation on unsupported architecture $(uname -m)" + return + ;; +esac + +DOWNLOAD_URL="https://downloads.ioncube.com/loader_downloads/ioncube_loaders_lin_${IONCUBE_ARCH}.tar.gz" TMP_FILE="/tmp/ioncube_loaders.tar.gz" echo "Downloading ..." -curl -sS ${DOWNLOAD_URL} -o ${TMP_FILE} +curl -fsS "${DOWNLOAD_URL}" -o "${TMP_FILE}" echo "Unpacking ..." tar -xzf ${TMP_FILE} -C /tmp -PHP_VERSION=`php -v | head -1 | grep -o 'PHP [0-9].[0-9]' | sed -r 's/PHP //g'` -PHP_EXTENSION_DIR=`php -i | grep -o -m 1 'extension_dir .* =' | sed -r 's/extension_dir => //g' | sed -r 's/ =//g'` +PHP_VERSION="$(php -n -r 'echo PHP_MAJOR_VERSION, ".", PHP_MINOR_VERSION;')" +PHP_EXTENSION_DIR="$(php -n -r 'echo ini_get("extension_dir");')" MOD_INI="${PHP_MOD_INI_DIR}/00-ioncube.ini" SO_FILE="${PHP_EXTENSION_DIR}/ioncube_loader_lin_${PHP_VERSION}.so" @@ -28,15 +37,14 @@ else echo "Installing ${SO_FILE}" cp "/tmp/ioncube/ioncube_loader_lin_${PHP_VERSION}.so" ${SO_FILE} + echo "Checking ionCube loader" + php -n -d "zend_extension=${SO_FILE}" -r 'exit(extension_loaded("ionCube Loader") ? 0 : 1);' || return 1 + echo "Writing module ini" echo "[ioncube]" > ${MOD_INI} echo "zend_extension = ${SO_FILE}" >> ${MOD_INI} echo "; priority=01" >> ${MOD_INI} - echo "Cleaning up" - rm -rf $TMP_FILE - rm -rf /tmp/ioncube - echo "Enabling ionCube PHP module" case "$IMAGE_FAMILY" in Debian|Ubuntu) @@ -48,3 +56,6 @@ else ;; esac fi + +echo "Cleaning up" +rm -rf "$TMP_FILE" /tmp/ioncube diff --git a/docker/php-official/8.4/Dockerfile b/docker/php-official/8.4/Dockerfile index 95a78d9ca..e94c6c231 100644 --- a/docker/php-official/8.4/Dockerfile +++ b/docker/php-official/8.4/Dockerfile @@ -80,7 +80,8 @@ RUN set -x \ && docker-run-bootstrap \ && docker-image-cleanup -RUN set -x \ +RUN --mount=type=bind,from=ghcr.io/php/pie:bin,source=/pie,target=/usr/local/bin/pie \ + set -x \ # Install php environment && apt-install \ # Install tools @@ -178,16 +179,39 @@ RUN set -x \ zip \ gd \ opcache \ - && pecl install memcached \ - && pecl install apcu \ - && pecl install excimer \ - && pecl install opentelemetry \ - && pecl install protobuf \ - && pecl install xmlrpc-1.0.0RC3 \ - && pecl install vips \ - && pecl install yaml \ - && pecl install redis \ - && pecl install mongodb \ + && cd / \ + && PIE_WORKING_DIRECTORY=/tmp/pie pie install --no-interaction --no-cache \ + --skip-enable-extension --make-parallel-jobs="$(nproc)" \ + apcu/apcu \ + wikimedia/excimer \ + open-telemetry/ext-opentelemetry \ + php-memcached/php-memcached \ + pecl/yaml \ + phpredis/phpredis \ + mongodb/mongodb-extension \ + && rm -rf /tmp/pie \ + && PROTOBUF_RELEASE_URL="$(curl -fsSLI --proto '=https' --proto-redir '=https' --retry 3 -o /dev/null -w '%{url_effective}' https://github.com/protocolbuffers/protobuf/releases/latest)" \ + && PROTOBUF_VERSION="${PROTOBUF_RELEASE_URL##*/}" \ + && mkdir -p /tmp/protobuf \ + && curl -fsSL --proto '=https' --proto-redir '=https' --retry 3 "https://codeload.github.com/protocolbuffers/protobuf/tar.gz/refs/tags/${PROTOBUF_VERSION}" -o /tmp/protobuf.tar.gz \ + && tar -xzf /tmp/protobuf.tar.gz --strip-components=1 -C /tmp/protobuf \ + && cd /tmp/protobuf/php/ext/google/protobuf \ + && mkdir -p third_party \ + && cp -R /tmp/protobuf/third_party/utf8_range third_party/ \ + && phpize && ./configure --enable-protobuf \ + && make -j"$(nproc)" && make install \ + && cd / && rm -rf /tmp/protobuf /tmp/protobuf.tar.gz \ + # Vips' GitHub tags lag behind PECL releases; use the upstream branch. + && git clone --depth 1 https://github.com/libvips/php-vips-ext.git /tmp/vips \ + && cd /tmp/vips \ + && phpize && ./configure --with-vips \ + && make -j"$(nproc)" && make install \ + && cd / && rm -rf /tmp/vips \ + && git clone --depth 1 --branch xmlrpc-1.0.0RC3 https://github.com/php/pecl-networking-xmlrpc.git /tmp/xmlrpc \ + && cd /tmp/xmlrpc \ + && phpize && ./configure --with-xmlrpc \ + && make -j"$(nproc)" && make install \ + && cd / && rm -rf /tmp/xmlrpc \ && echo extension=apcu.so > /usr/local/etc/php/conf.d/apcu.ini \ && echo extension=excimer.so > /usr/local/etc/php/conf.d/excimer.ini \ && echo extension=opentelemetry.so > /usr/local/etc/php/conf.d/opentelemetry.ini \ diff --git a/docker/php-official/8.4/conf/provision/bootstrap.d/30-setup-ioncube.sh b/docker/php-official/8.4/conf/provision/bootstrap.d/30-setup-ioncube.sh index 4a348a38a..59a2d4245 100644 --- a/docker/php-official/8.4/conf/provision/bootstrap.d/30-setup-ioncube.sh +++ b/docker/php-official/8.4/conf/provision/bootstrap.d/30-setup-ioncube.sh @@ -7,16 +7,25 @@ fi echo "Installing ionCube loader" -DOWNLOAD_URL="https://downloads.ioncube.com/loader_downloads/ioncube_loaders_lin_x86-64.tar.gz" +case "$(uname -m)" in + x86_64) IONCUBE_ARCH="x86-64" ;; + aarch64) IONCUBE_ARCH="aarch64" ;; + *) + echo "Skipping ionCube installation on unsupported architecture $(uname -m)" + return + ;; +esac + +DOWNLOAD_URL="https://downloads.ioncube.com/loader_downloads/ioncube_loaders_lin_${IONCUBE_ARCH}.tar.gz" TMP_FILE="/tmp/ioncube_loaders.tar.gz" echo "Downloading ..." -curl -sS ${DOWNLOAD_URL} -o ${TMP_FILE} +curl -fsS "${DOWNLOAD_URL}" -o "${TMP_FILE}" echo "Unpacking ..." tar -xzf ${TMP_FILE} -C /tmp -PHP_VERSION=`php -v | head -1 | grep -o 'PHP [0-9].[0-9]' | sed -r 's/PHP //g'` -PHP_EXTENSION_DIR=`php -i | grep -o -m 1 'extension_dir .* =' | sed -r 's/extension_dir => //g' | sed -r 's/ =//g'` +PHP_VERSION="$(php -n -r 'echo PHP_MAJOR_VERSION, ".", PHP_MINOR_VERSION;')" +PHP_EXTENSION_DIR="$(php -n -r 'echo ini_get("extension_dir");')" MOD_INI="${PHP_MOD_INI_DIR}/00-ioncube.ini" SO_FILE="${PHP_EXTENSION_DIR}/ioncube_loader_lin_${PHP_VERSION}.so" @@ -28,15 +37,14 @@ else echo "Installing ${SO_FILE}" cp "/tmp/ioncube/ioncube_loader_lin_${PHP_VERSION}.so" ${SO_FILE} + echo "Checking ionCube loader" + php -n -d "zend_extension=${SO_FILE}" -r 'exit(extension_loaded("ionCube Loader") ? 0 : 1);' || return 1 + echo "Writing module ini" echo "[ioncube]" > ${MOD_INI} echo "zend_extension = ${SO_FILE}" >> ${MOD_INI} echo "; priority=01" >> ${MOD_INI} - echo "Cleaning up" - rm -rf $TMP_FILE - rm -rf /tmp/ioncube - echo "Enabling ionCube PHP module" case "$IMAGE_FAMILY" in Debian|Ubuntu) @@ -48,3 +56,6 @@ else ;; esac fi + +echo "Cleaning up" +rm -rf "$TMP_FILE" /tmp/ioncube diff --git a/docker/php-official/8.5-alpine/Dockerfile b/docker/php-official/8.5-alpine/Dockerfile index 713d4dc2b..daff42a25 100644 --- a/docker/php-official/8.5-alpine/Dockerfile +++ b/docker/php-official/8.5-alpine/Dockerfile @@ -80,7 +80,8 @@ RUN set -x \ git \ && docker-run-bootstrap -RUN set -x \ +RUN --mount=type=bind,from=ghcr.io/php/pie:bin,source=/pie,target=/usr/local/bin/pie \ + set -x \ # Install php environment && apk-install \ imagemagick \ @@ -179,22 +180,39 @@ RUN set -x \ xsl \ zip \ gd \ - # Install extensions for PHP 7.x - # Memcached for 7.3 can currently only be built from master - && MEMCACHED="`mktemp -d`" \ - && curl -skL https://github.com/php-memcached-dev/php-memcached/archive/master.tar.gz | tar zxf - --strip-components 1 -C $MEMCACHED \ - && docker-php-ext-configure $MEMCACHED \ - && docker-php-ext-install $MEMCACHED \ - && rm -rf $MEMCACHED \ - && pecl install apcu \ - && pecl install excimer \ - && pecl install opentelemetry \ - && pecl install protobuf \ - && pecl install vips \ - && pecl install yaml \ - && pecl install redis \ - && pecl install mongodb \ - && pecl install xmlrpc-1.0.0RC3 \ + && cd / \ + && PIE_WORKING_DIRECTORY=/tmp/pie pie install --no-interaction --no-cache \ + --skip-enable-extension --make-parallel-jobs="$(nproc)" \ + apcu/apcu \ + wikimedia/excimer \ + open-telemetry/ext-opentelemetry \ + php-memcached/php-memcached \ + pecl/yaml \ + phpredis/phpredis \ + mongodb/mongodb-extension \ + && rm -rf /tmp/pie \ + && PROTOBUF_RELEASE_URL="$(curl -fsSLI --proto '=https' --proto-redir '=https' --retry 3 -o /dev/null -w '%{url_effective}' https://github.com/protocolbuffers/protobuf/releases/latest)" \ + && PROTOBUF_VERSION="${PROTOBUF_RELEASE_URL##*/}" \ + && mkdir -p /tmp/protobuf \ + && curl -fsSL --proto '=https' --proto-redir '=https' --retry 3 "https://codeload.github.com/protocolbuffers/protobuf/tar.gz/refs/tags/${PROTOBUF_VERSION}" -o /tmp/protobuf.tar.gz \ + && tar -xzf /tmp/protobuf.tar.gz --strip-components=1 -C /tmp/protobuf \ + && cd /tmp/protobuf/php/ext/google/protobuf \ + && mkdir -p third_party \ + && cp -R /tmp/protobuf/third_party/utf8_range third_party/ \ + && phpize && ./configure --enable-protobuf \ + && make -j"$(nproc)" && make install \ + && cd / && rm -rf /tmp/protobuf /tmp/protobuf.tar.gz \ + # Vips' GitHub tags lag behind PECL releases; use the upstream branch. + && git clone --depth 1 https://github.com/libvips/php-vips-ext.git /tmp/vips \ + && cd /tmp/vips \ + && phpize && ./configure --with-vips \ + && make -j"$(nproc)" && make install \ + && cd / && rm -rf /tmp/vips \ + && git clone --depth 1 --branch xmlrpc-1.0.0RC3 https://github.com/php/pecl-networking-xmlrpc.git /tmp/xmlrpc \ + && cd /tmp/xmlrpc \ + && phpize && ./configure --with-xmlrpc \ + && make -j"$(nproc)" && make install \ + && cd / && rm -rf /tmp/xmlrpc \ && docker-php-ext-enable \ apcu \ excimer \ @@ -206,6 +224,7 @@ RUN set -x \ xmlrpc \ imagick \ mongodb \ + memcached \ # Uninstall dev and header packages && apk del -f --purge \ autoconf \ diff --git a/docker/php-official/8.5-alpine/conf/provision/bootstrap.d/30-setup-ioncube.sh b/docker/php-official/8.5-alpine/conf/provision/bootstrap.d/30-setup-ioncube.sh index 4a348a38a..59a2d4245 100644 --- a/docker/php-official/8.5-alpine/conf/provision/bootstrap.d/30-setup-ioncube.sh +++ b/docker/php-official/8.5-alpine/conf/provision/bootstrap.d/30-setup-ioncube.sh @@ -7,16 +7,25 @@ fi echo "Installing ionCube loader" -DOWNLOAD_URL="https://downloads.ioncube.com/loader_downloads/ioncube_loaders_lin_x86-64.tar.gz" +case "$(uname -m)" in + x86_64) IONCUBE_ARCH="x86-64" ;; + aarch64) IONCUBE_ARCH="aarch64" ;; + *) + echo "Skipping ionCube installation on unsupported architecture $(uname -m)" + return + ;; +esac + +DOWNLOAD_URL="https://downloads.ioncube.com/loader_downloads/ioncube_loaders_lin_${IONCUBE_ARCH}.tar.gz" TMP_FILE="/tmp/ioncube_loaders.tar.gz" echo "Downloading ..." -curl -sS ${DOWNLOAD_URL} -o ${TMP_FILE} +curl -fsS "${DOWNLOAD_URL}" -o "${TMP_FILE}" echo "Unpacking ..." tar -xzf ${TMP_FILE} -C /tmp -PHP_VERSION=`php -v | head -1 | grep -o 'PHP [0-9].[0-9]' | sed -r 's/PHP //g'` -PHP_EXTENSION_DIR=`php -i | grep -o -m 1 'extension_dir .* =' | sed -r 's/extension_dir => //g' | sed -r 's/ =//g'` +PHP_VERSION="$(php -n -r 'echo PHP_MAJOR_VERSION, ".", PHP_MINOR_VERSION;')" +PHP_EXTENSION_DIR="$(php -n -r 'echo ini_get("extension_dir");')" MOD_INI="${PHP_MOD_INI_DIR}/00-ioncube.ini" SO_FILE="${PHP_EXTENSION_DIR}/ioncube_loader_lin_${PHP_VERSION}.so" @@ -28,15 +37,14 @@ else echo "Installing ${SO_FILE}" cp "/tmp/ioncube/ioncube_loader_lin_${PHP_VERSION}.so" ${SO_FILE} + echo "Checking ionCube loader" + php -n -d "zend_extension=${SO_FILE}" -r 'exit(extension_loaded("ionCube Loader") ? 0 : 1);' || return 1 + echo "Writing module ini" echo "[ioncube]" > ${MOD_INI} echo "zend_extension = ${SO_FILE}" >> ${MOD_INI} echo "; priority=01" >> ${MOD_INI} - echo "Cleaning up" - rm -rf $TMP_FILE - rm -rf /tmp/ioncube - echo "Enabling ionCube PHP module" case "$IMAGE_FAMILY" in Debian|Ubuntu) @@ -48,3 +56,6 @@ else ;; esac fi + +echo "Cleaning up" +rm -rf "$TMP_FILE" /tmp/ioncube diff --git a/docker/php-official/8.5/Dockerfile b/docker/php-official/8.5/Dockerfile index 2bf88ab40..dd74475ca 100644 --- a/docker/php-official/8.5/Dockerfile +++ b/docker/php-official/8.5/Dockerfile @@ -80,7 +80,8 @@ RUN set -x \ && docker-run-bootstrap \ && docker-image-cleanup -RUN set -x \ +RUN --mount=type=bind,from=ghcr.io/php/pie:bin,source=/pie,target=/usr/local/bin/pie \ + set -x \ # Install php environment && apt-install \ # Install tools @@ -177,16 +178,39 @@ RUN set -x \ xsl \ zip \ gd \ - && pecl install memcached \ - && pecl install apcu \ - && pecl install excimer \ - && pecl install opentelemetry \ - && pecl install protobuf \ - && pecl install xmlrpc-1.0.0RC3 \ - && pecl install vips \ - && pecl install yaml \ - && pecl install redis \ - && pecl install mongodb \ + && cd / \ + && PIE_WORKING_DIRECTORY=/tmp/pie pie install --no-interaction --no-cache \ + --skip-enable-extension --make-parallel-jobs="$(nproc)" \ + apcu/apcu \ + wikimedia/excimer \ + open-telemetry/ext-opentelemetry \ + php-memcached/php-memcached \ + pecl/yaml \ + phpredis/phpredis \ + mongodb/mongodb-extension \ + && rm -rf /tmp/pie \ + && PROTOBUF_RELEASE_URL="$(curl -fsSLI --proto '=https' --proto-redir '=https' --retry 3 -o /dev/null -w '%{url_effective}' https://github.com/protocolbuffers/protobuf/releases/latest)" \ + && PROTOBUF_VERSION="${PROTOBUF_RELEASE_URL##*/}" \ + && mkdir -p /tmp/protobuf \ + && curl -fsSL --proto '=https' --proto-redir '=https' --retry 3 "https://codeload.github.com/protocolbuffers/protobuf/tar.gz/refs/tags/${PROTOBUF_VERSION}" -o /tmp/protobuf.tar.gz \ + && tar -xzf /tmp/protobuf.tar.gz --strip-components=1 -C /tmp/protobuf \ + && cd /tmp/protobuf/php/ext/google/protobuf \ + && mkdir -p third_party \ + && cp -R /tmp/protobuf/third_party/utf8_range third_party/ \ + && phpize && ./configure --enable-protobuf \ + && make -j"$(nproc)" && make install \ + && cd / && rm -rf /tmp/protobuf /tmp/protobuf.tar.gz \ + # Vips' GitHub tags lag behind PECL releases; use the upstream branch. + && git clone --depth 1 https://github.com/libvips/php-vips-ext.git /tmp/vips \ + && cd /tmp/vips \ + && phpize && ./configure --with-vips \ + && make -j"$(nproc)" && make install \ + && cd / && rm -rf /tmp/vips \ + && git clone --depth 1 --branch xmlrpc-1.0.0RC3 https://github.com/php/pecl-networking-xmlrpc.git /tmp/xmlrpc \ + && cd /tmp/xmlrpc \ + && phpize && ./configure --with-xmlrpc \ + && make -j"$(nproc)" && make install \ + && cd / && rm -rf /tmp/xmlrpc \ && echo extension=apcu.so > /usr/local/etc/php/conf.d/apcu.ini \ && echo extension=excimer.so > /usr/local/etc/php/conf.d/excimer.ini \ && echo extension=opentelemetry.so > /usr/local/etc/php/conf.d/opentelemetry.ini \ diff --git a/docker/php-official/8.5/conf/provision/bootstrap.d/30-setup-ioncube.sh b/docker/php-official/8.5/conf/provision/bootstrap.d/30-setup-ioncube.sh index 4a348a38a..59a2d4245 100644 --- a/docker/php-official/8.5/conf/provision/bootstrap.d/30-setup-ioncube.sh +++ b/docker/php-official/8.5/conf/provision/bootstrap.d/30-setup-ioncube.sh @@ -7,16 +7,25 @@ fi echo "Installing ionCube loader" -DOWNLOAD_URL="https://downloads.ioncube.com/loader_downloads/ioncube_loaders_lin_x86-64.tar.gz" +case "$(uname -m)" in + x86_64) IONCUBE_ARCH="x86-64" ;; + aarch64) IONCUBE_ARCH="aarch64" ;; + *) + echo "Skipping ionCube installation on unsupported architecture $(uname -m)" + return + ;; +esac + +DOWNLOAD_URL="https://downloads.ioncube.com/loader_downloads/ioncube_loaders_lin_${IONCUBE_ARCH}.tar.gz" TMP_FILE="/tmp/ioncube_loaders.tar.gz" echo "Downloading ..." -curl -sS ${DOWNLOAD_URL} -o ${TMP_FILE} +curl -fsS "${DOWNLOAD_URL}" -o "${TMP_FILE}" echo "Unpacking ..." tar -xzf ${TMP_FILE} -C /tmp -PHP_VERSION=`php -v | head -1 | grep -o 'PHP [0-9].[0-9]' | sed -r 's/PHP //g'` -PHP_EXTENSION_DIR=`php -i | grep -o -m 1 'extension_dir .* =' | sed -r 's/extension_dir => //g' | sed -r 's/ =//g'` +PHP_VERSION="$(php -n -r 'echo PHP_MAJOR_VERSION, ".", PHP_MINOR_VERSION;')" +PHP_EXTENSION_DIR="$(php -n -r 'echo ini_get("extension_dir");')" MOD_INI="${PHP_MOD_INI_DIR}/00-ioncube.ini" SO_FILE="${PHP_EXTENSION_DIR}/ioncube_loader_lin_${PHP_VERSION}.so" @@ -28,15 +37,14 @@ else echo "Installing ${SO_FILE}" cp "/tmp/ioncube/ioncube_loader_lin_${PHP_VERSION}.so" ${SO_FILE} + echo "Checking ionCube loader" + php -n -d "zend_extension=${SO_FILE}" -r 'exit(extension_loaded("ionCube Loader") ? 0 : 1);' || return 1 + echo "Writing module ini" echo "[ioncube]" > ${MOD_INI} echo "zend_extension = ${SO_FILE}" >> ${MOD_INI} echo "; priority=01" >> ${MOD_INI} - echo "Cleaning up" - rm -rf $TMP_FILE - rm -rf /tmp/ioncube - echo "Enabling ionCube PHP module" case "$IMAGE_FAMILY" in Debian|Ubuntu) @@ -48,3 +56,6 @@ else ;; esac fi + +echo "Cleaning up" +rm -rf "$TMP_FILE" /tmp/ioncube