Skip to content

Commit 0f642b3

Browse files
committed
Add Amazon Linux 2023 PHP 8.4 library
New package with PHP 8.4 built for Amazon Linux 2023: - Uses native AL2023 PHP packages (php8.4-*) - Includes 47 PHP extension modules - Includes 33 shared libraries - patchelf applied for portable rpath - Full test coverage with Jest
1 parent bf1ecd1 commit 0f642b3

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

96 files changed

+6832
-0
lines changed
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
# TS
2+
/dist
3+
4+
# Node
5+
/node_modules
Lines changed: 149 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,149 @@
1+
.PHONY: build dist
2+
3+
DIST_PHP=84
4+
DIST_PATH=./native
5+
DIST_PHP_PATH=${DIST_PATH}/php
6+
DIST_PHP_MODULES_PATH=${DIST_PHP_PATH}/modules
7+
DIST_LIB_PATH=${DIST_PATH}/lib
8+
9+
DOCKER_IMAGE=libphp/amazon-linux-2023-v84
10+
DOCKER_CONTAINER=libphp-amazon-linux-2023-v84
11+
DOCKER_PLATFORM=linux/amd64
12+
13+
# ######################
14+
# Building Docker images
15+
# ######################
16+
17+
build:
18+
docker buildx build --platform ${DOCKER_PLATFORM} -t ${DOCKER_IMAGE} -f ./build/Dockerfile ./build
19+
20+
# #################################################
21+
# Separate PHP bins + shared libs from Docker image
22+
# #################################################
23+
24+
dist: build
25+
# Cleanup distribution folder
26+
rm -rf ${DIST_PHP_PATH}
27+
rm -rf ${DIST_LIB_PATH}
28+
mkdir -p ${DIST_PHP_PATH}
29+
mkdir -p ${DIST_LIB_PATH}
30+
mkdir -p ${DIST_PHP_MODULES_PATH}
31+
32+
# Remove old PHP container
33+
docker rm --force ${DOCKER_CONTAINER} || true
34+
# Run new one PHP container
35+
docker run -it -d --platform ${DOCKER_PLATFORM} --name ${DOCKER_CONTAINER} ${DOCKER_IMAGE} /bin/bash
36+
37+
# Copy composer, php, php-cgi, php-fpm binaries
38+
docker exec ${DOCKER_CONTAINER} /bin/cat /usr/bin/composer > ${DIST_PHP_PATH}/composer
39+
docker exec ${DOCKER_CONTAINER} /bin/cat /usr/bin/php > ${DIST_PHP_PATH}/php
40+
docker exec ${DOCKER_CONTAINER} /bin/cat /usr/bin/php-cgi > ${DIST_PHP_PATH}/php-cgi
41+
docker exec ${DOCKER_CONTAINER} /bin/cat /usr/sbin/php-fpm > ${DIST_PHP_PATH}/php-fpm
42+
43+
# Make these binaries executable
44+
chmod +x ${DIST_PHP_PATH}/composer
45+
chmod +x ${DIST_PHP_PATH}/php
46+
chmod +x ${DIST_PHP_PATH}/php-cgi
47+
chmod +x ${DIST_PHP_PATH}/php-fpm
48+
49+
# Copy php.ini & php-fpm.ini
50+
docker exec ${DOCKER_CONTAINER} /bin/cat /var/task/php/php.ini > ${DIST_PHP_PATH}/php.ini
51+
docker exec ${DOCKER_CONTAINER} /bin/cat /var/task/php/php-fpm.ini > ${DIST_PHP_PATH}/php-fpm.ini
52+
53+
# Copy all compiled extensions
54+
docker exec ${DOCKER_CONTAINER} /bin/cat /usr/lib64/php8.4/modules/apcu.so > ${DIST_PHP_MODULES_PATH}/apcu.so
55+
docker exec ${DOCKER_CONTAINER} /bin/cat /usr/lib64/php8.4/modules/bcmath.so > ${DIST_PHP_MODULES_PATH}/bcmath.so
56+
docker exec ${DOCKER_CONTAINER} /bin/cat /usr/lib64/php8.4/modules/bz2.so > ${DIST_PHP_MODULES_PATH}/bz2.so
57+
docker exec ${DOCKER_CONTAINER} /bin/cat /usr/lib64/php8.4/modules/calendar.so > ${DIST_PHP_MODULES_PATH}/calendar.so
58+
docker exec ${DOCKER_CONTAINER} /bin/cat /usr/lib64/php8.4/modules/ctype.so > ${DIST_PHP_MODULES_PATH}/ctype.so
59+
docker exec ${DOCKER_CONTAINER} /bin/cat /usr/lib64/php8.4/modules/curl.so > ${DIST_PHP_MODULES_PATH}/curl.so
60+
docker exec ${DOCKER_CONTAINER} /bin/cat /usr/lib64/php8.4/modules/dba.so > ${DIST_PHP_MODULES_PATH}/dba.so
61+
docker exec ${DOCKER_CONTAINER} /bin/cat /usr/lib64/php8.4/modules/dom.so > ${DIST_PHP_MODULES_PATH}/dom.so
62+
docker exec ${DOCKER_CONTAINER} /bin/cat /usr/lib64/php8.4/modules/exif.so > ${DIST_PHP_MODULES_PATH}/exif.so
63+
docker exec ${DOCKER_CONTAINER} /bin/cat /usr/lib64/php8.4/modules/ffi.so > ${DIST_PHP_MODULES_PATH}/ffi.so
64+
docker exec ${DOCKER_CONTAINER} /bin/cat /usr/lib64/php8.4/modules/fileinfo.so > ${DIST_PHP_MODULES_PATH}/fileinfo.so
65+
docker exec ${DOCKER_CONTAINER} /bin/cat /usr/lib64/php8.4/modules/ftp.so > ${DIST_PHP_MODULES_PATH}/ftp.so
66+
docker exec ${DOCKER_CONTAINER} /bin/cat /usr/lib64/php8.4/modules/gd.so > ${DIST_PHP_MODULES_PATH}/gd.so
67+
docker exec ${DOCKER_CONTAINER} /bin/cat /usr/lib64/php8.4/modules/gettext.so > ${DIST_PHP_MODULES_PATH}/gettext.so
68+
docker exec ${DOCKER_CONTAINER} /bin/cat /usr/lib64/php8.4/modules/gmp.so > ${DIST_PHP_MODULES_PATH}/gmp.so
69+
docker exec ${DOCKER_CONTAINER} /bin/cat /usr/lib64/php8.4/modules/iconv.so > ${DIST_PHP_MODULES_PATH}/iconv.so
70+
docker exec ${DOCKER_CONTAINER} /bin/cat /usr/lib64/php8.4/modules/igbinary.so > ${DIST_PHP_MODULES_PATH}/igbinary.so
71+
docker exec ${DOCKER_CONTAINER} /bin/cat /usr/lib64/php8.4/modules/intl.so > ${DIST_PHP_MODULES_PATH}/intl.so
72+
docker exec ${DOCKER_CONTAINER} /bin/cat /usr/lib64/php8.4/modules/ldap.so > ${DIST_PHP_MODULES_PATH}/ldap.so
73+
docker exec ${DOCKER_CONTAINER} /bin/cat /usr/lib64/php8.4/modules/mbstring.so > ${DIST_PHP_MODULES_PATH}/mbstring.so
74+
docker exec ${DOCKER_CONTAINER} /bin/cat /usr/lib64/php8.4/modules/msgpack.so > ${DIST_PHP_MODULES_PATH}/msgpack.so
75+
docker exec ${DOCKER_CONTAINER} /bin/cat /usr/lib64/php8.4/modules/mysqli.so > ${DIST_PHP_MODULES_PATH}/mysqli.so
76+
docker exec ${DOCKER_CONTAINER} /bin/cat /usr/lib64/php8.4/modules/mysqlnd.so > ${DIST_PHP_MODULES_PATH}/mysqlnd.so
77+
docker exec ${DOCKER_CONTAINER} /bin/cat /usr/lib64/php8.4/modules/opcache.so > ${DIST_PHP_MODULES_PATH}/opcache.so
78+
docker exec ${DOCKER_CONTAINER} /bin/cat /usr/lib64/php8.4/modules/pdo.so > ${DIST_PHP_MODULES_PATH}/pdo.so
79+
docker exec ${DOCKER_CONTAINER} /bin/cat /usr/lib64/php8.4/modules/pdo_mysql.so > ${DIST_PHP_MODULES_PATH}/pdo_mysql.so
80+
docker exec ${DOCKER_CONTAINER} /bin/cat /usr/lib64/php8.4/modules/pdo_pgsql.so > ${DIST_PHP_MODULES_PATH}/pdo_pgsql.so
81+
docker exec ${DOCKER_CONTAINER} /bin/cat /usr/lib64/php8.4/modules/pdo_sqlite.so > ${DIST_PHP_MODULES_PATH}/pdo_sqlite.so
82+
docker exec ${DOCKER_CONTAINER} /bin/cat /usr/lib64/php8.4/modules/pgsql.so > ${DIST_PHP_MODULES_PATH}/pgsql.so
83+
docker exec ${DOCKER_CONTAINER} /bin/cat /usr/lib64/php8.4/modules/phar.so > ${DIST_PHP_MODULES_PATH}/phar.so
84+
docker exec ${DOCKER_CONTAINER} /bin/cat /usr/lib64/php8.4/modules/posix.so > ${DIST_PHP_MODULES_PATH}/posix.so
85+
docker exec ${DOCKER_CONTAINER} /bin/cat /usr/lib64/php8.4/modules/redis.so > ${DIST_PHP_MODULES_PATH}/redis.so
86+
docker exec ${DOCKER_CONTAINER} /bin/cat /usr/lib64/php8.4/modules/shmop.so > ${DIST_PHP_MODULES_PATH}/shmop.so
87+
docker exec ${DOCKER_CONTAINER} /bin/cat /usr/lib64/php8.4/modules/simplexml.so > ${DIST_PHP_MODULES_PATH}/simplexml.so
88+
docker exec ${DOCKER_CONTAINER} /bin/cat /usr/lib64/php8.4/modules/soap.so > ${DIST_PHP_MODULES_PATH}/soap.so
89+
docker exec ${DOCKER_CONTAINER} /bin/cat /usr/lib64/php8.4/modules/sockets.so > ${DIST_PHP_MODULES_PATH}/sockets.so
90+
docker exec ${DOCKER_CONTAINER} /bin/cat /usr/lib64/php8.4/modules/sodium.so > ${DIST_PHP_MODULES_PATH}/sodium.so
91+
docker exec ${DOCKER_CONTAINER} /bin/cat /usr/lib64/php8.4/modules/sqlite3.so > ${DIST_PHP_MODULES_PATH}/sqlite3.so
92+
docker exec ${DOCKER_CONTAINER} /bin/cat /usr/lib64/php8.4/modules/sysvmsg.so > ${DIST_PHP_MODULES_PATH}/sysvmsg.so
93+
docker exec ${DOCKER_CONTAINER} /bin/cat /usr/lib64/php8.4/modules/sysvsem.so > ${DIST_PHP_MODULES_PATH}/sysvsem.so
94+
docker exec ${DOCKER_CONTAINER} /bin/cat /usr/lib64/php8.4/modules/sysvshm.so > ${DIST_PHP_MODULES_PATH}/sysvshm.so
95+
docker exec ${DOCKER_CONTAINER} /bin/cat /usr/lib64/php8.4/modules/tokenizer.so > ${DIST_PHP_MODULES_PATH}/tokenizer.so
96+
docker exec ${DOCKER_CONTAINER} /bin/cat /usr/lib64/php8.4/modules/xml.so > ${DIST_PHP_MODULES_PATH}/xml.so
97+
docker exec ${DOCKER_CONTAINER} /bin/cat /usr/lib64/php8.4/modules/xmlreader.so > ${DIST_PHP_MODULES_PATH}/xmlreader.so
98+
docker exec ${DOCKER_CONTAINER} /bin/cat /usr/lib64/php8.4/modules/xmlwriter.so > ${DIST_PHP_MODULES_PATH}/xmlwriter.so
99+
docker exec ${DOCKER_CONTAINER} /bin/cat /usr/lib64/php8.4/modules/xsl.so > ${DIST_PHP_MODULES_PATH}/xsl.so
100+
docker exec ${DOCKER_CONTAINER} /bin/cat /usr/lib64/php8.4/modules/zip.so > ${DIST_PHP_MODULES_PATH}/zip.so
101+
102+
# Copy static libraries. Needed by the extensions above.
103+
docker exec ${DOCKER_CONTAINER} /bin/cat /usr/lib64/libbz2.so.1 > ${DIST_LIB_PATH}/libbz2.so.1
104+
docker exec ${DOCKER_CONTAINER} /bin/cat /usr/lib64/libcrypt.so.2 > ${DIST_LIB_PATH}/libcrypt.so.2
105+
docker exec ${DOCKER_CONTAINER} /bin/cat /usr/lib64/libcrypto.so.3 > ${DIST_LIB_PATH}/libcrypto.so.3
106+
docker exec ${DOCKER_CONTAINER} /bin/cat /usr/lib64/libcurl.so.4 > ${DIST_LIB_PATH}/libcurl.so.4
107+
docker exec ${DOCKER_CONTAINER} /bin/cat /usr/lib64/libedit.so.0 > ${DIST_LIB_PATH}/libedit.so.0
108+
docker exec ${DOCKER_CONTAINER} /bin/cat /usr/lib64/libexpat.so.1 > ${DIST_LIB_PATH}/libexpat.so.1
109+
docker exec ${DOCKER_CONTAINER} /bin/cat /usr/lib64/libexslt.so.0 > ${DIST_LIB_PATH}/libexslt.so.0
110+
docker exec ${DOCKER_CONTAINER} /bin/cat /usr/lib64/libffi.so.8 > ${DIST_LIB_PATH}/libffi.so.8
111+
docker exec ${DOCKER_CONTAINER} /bin/cat /usr/lib64/libicudata.so.67 > ${DIST_LIB_PATH}/libicudata.so.67
112+
docker exec ${DOCKER_CONTAINER} /bin/cat /usr/lib64/libicui18n.so.67 > ${DIST_LIB_PATH}/libicui18n.so.67
113+
docker exec ${DOCKER_CONTAINER} /bin/cat /usr/lib64/libicuio.so.67 > ${DIST_LIB_PATH}/libicuio.so.67
114+
docker exec ${DOCKER_CONTAINER} /bin/cat /usr/lib64/libicuuc.so.67 > ${DIST_LIB_PATH}/libicuuc.so.67
115+
docker exec ${DOCKER_CONTAINER} /bin/cat /usr/lib64/libidn2.so.0 > ${DIST_LIB_PATH}/libidn2.so.0
116+
docker exec ${DOCKER_CONTAINER} /bin/cat /usr/lib64/liblzma.so.5 > ${DIST_LIB_PATH}/liblzma.so.5
117+
docker exec ${DOCKER_CONTAINER} /bin/cat /usr/lib64/libncurses.so.6 > ${DIST_LIB_PATH}/libncurses.so.6
118+
docker exec ${DOCKER_CONTAINER} /bin/cat /usr/lib64/libnghttp2.so.14 > ${DIST_LIB_PATH}/libnghttp2.so.14
119+
docker exec ${DOCKER_CONTAINER} /bin/cat /usr/lib64/libonig.so.5 > ${DIST_LIB_PATH}/libonig.so.5
120+
docker exec ${DOCKER_CONTAINER} /bin/cat /usr/lib64/libpq.so.5 > ${DIST_LIB_PATH}/libpq.so.5
121+
docker exec ${DOCKER_CONTAINER} /bin/cat /usr/lib64/libpsl.so.5 > ${DIST_LIB_PATH}/libpsl.so.5
122+
docker exec ${DOCKER_CONTAINER} /bin/cat /usr/lib64/libsodium.so.26 > ${DIST_LIB_PATH}/libsodium.so.26
123+
docker exec ${DOCKER_CONTAINER} /bin/cat /usr/lib64/libgmp.so.10 > ${DIST_LIB_PATH}/libgmp.so.10
124+
docker exec ${DOCKER_CONTAINER} /bin/cat /usr/lib64/libldap_r-2.4.so.2 > ${DIST_LIB_PATH}/libldap_r-2.4.so.2
125+
docker exec ${DOCKER_CONTAINER} /bin/cat /usr/lib64/liblber-2.4.so.2 > ${DIST_LIB_PATH}/liblber-2.4.so.2
126+
docker exec ${DOCKER_CONTAINER} /bin/cat /usr/lib64/libsqlite3.so.0 > ${DIST_LIB_PATH}/libsqlite3.so.0
127+
docker exec ${DOCKER_CONTAINER} /bin/cat /usr/lib64/libssl.so.3 > ${DIST_LIB_PATH}/libssl.so.3
128+
docker exec ${DOCKER_CONTAINER} /bin/cat /usr/lib64/libtinfo.so.6 > ${DIST_LIB_PATH}/libtinfo.so.6
129+
docker exec ${DOCKER_CONTAINER} /bin/cat /usr/lib64/libunistring.so.2 > ${DIST_LIB_PATH}/libunistring.so.2
130+
docker exec ${DOCKER_CONTAINER} /bin/cat /usr/lib64/libxml2.so.2 > ${DIST_LIB_PATH}/libxml2.so.2
131+
docker exec ${DOCKER_CONTAINER} /bin/cat /usr/lib64/libxslt.so.1 > ${DIST_LIB_PATH}/libxslt.so.1
132+
docker exec ${DOCKER_CONTAINER} /bin/cat /usr/lib64/libzip.so.5 > ${DIST_LIB_PATH}/libzip.so.5
133+
docker exec ${DOCKER_CONTAINER} /bin/cat /usr/lib64/libzstd.so.1 > ${DIST_LIB_PATH}/libzstd.so.1
134+
135+
# Remove temporary PHP container
136+
docker rm --force ${DOCKER_CONTAINER} || true
137+
138+
# ##############
139+
# Publishing PKG
140+
# ##############
141+
142+
publish:
143+
rm -rf ./dist
144+
npm publish --access public --tag latest -timeout=9999999
145+
146+
publish-canary:
147+
rm -rf ./dist
148+
npm version --no-git-tag-version prerelease -timeout=9999999
149+
npm publish --access public --tag canary
Lines changed: 3 additions & 0 deletions
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
FROM amazonlinux:2023
2+
3+
ENV PHP=php8.4
4+
5+
# Update system and install basic tools
6+
RUN dnf upgrade -y --releasever=latest && \
7+
dnf install -y --allowerasing \
8+
curl \
9+
tar \
10+
wget \
11+
make \
12+
gcc \
13+
patchelf
14+
15+
# Install PHP 8.4 and extensions (native AL2023 packages)
16+
# Note: Many modules (ctype, dom, fileinfo, ftp, gettext, iconv, phar,
17+
# simplexml, tokenizer, xmlreader, xmlwriter, xsl, calendar, exif, bz2)
18+
# are bundled in php8.4-common
19+
RUN dnf install -y \
20+
${PHP} \
21+
${PHP}-cli \
22+
${PHP}-fpm \
23+
${PHP}-common \
24+
${PHP}-bcmath \
25+
${PHP}-dba \
26+
${PHP}-ffi \
27+
${PHP}-gd \
28+
${PHP}-gmp \
29+
${PHP}-intl \
30+
${PHP}-ldap \
31+
${PHP}-mbstring \
32+
${PHP}-mysqlnd \
33+
${PHP}-opcache \
34+
${PHP}-pdo \
35+
${PHP}-pgsql \
36+
${PHP}-process \
37+
${PHP}-soap \
38+
${PHP}-sodium \
39+
${PHP}-xml \
40+
${PHP}-zip
41+
42+
# Install additional PECL extensions
43+
RUN dnf install -y \
44+
${PHP}-pecl-apcu \
45+
${PHP}-pecl-igbinary \
46+
${PHP}-pecl-msgpack \
47+
${PHP}-pecl-redis6
48+
49+
# Install PostgreSQL client library
50+
RUN dnf install -y postgresql15
51+
52+
# Install composer
53+
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/bin --filename=composer
54+
55+
# Patch binaries with $ORIGIN rpath for portability
56+
# $ORIGIN refers to the current directory, don't evaluate it, use the single quotes
57+
RUN patchelf --set-rpath '$ORIGIN' /usr/bin/php || true
58+
RUN patchelf --set-rpath '$ORIGIN' /usr/bin/php-cgi || true
59+
RUN patchelf --set-rpath '$ORIGIN' /usr/sbin/php-fpm || true
60+
61+
# Patch extension modules
62+
RUN for so in /usr/lib64/php8.4/modules/*.so; do \
63+
patchelf --set-rpath '$ORIGIN' "$so" || true; \
64+
done
65+
66+
WORKDIR /var/task
67+
68+
ADD ./conf /var/task/php
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
[global]
2+
error_log=/tmp/php-fpm.log
3+
4+
[www]
5+
listen=0.0.0.0:9000
6+
pm=static
7+
pm.max_children=1
8+
catch_workers_output=yes
9+
clear_env=no
10+
rlimit_core = 1
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
; [PHP 8.4]
2+
;
3+
; [Extensions]
4+
5+
; Where to find extensions
6+
extension_dir=/var/task/php/modules
7+
8+
; Priority 10
9+
zend_extension=opcache
10+
11+
; Priority 20
12+
extension=bcmath
13+
extension=bz2
14+
extension=calendar
15+
extension=ctype
16+
extension=curl
17+
extension=dba
18+
extension=dom
19+
extension=exif
20+
extension=fileinfo
21+
extension=ftp
22+
extension=gd
23+
extension=gettext
24+
extension=gmp
25+
extension=iconv
26+
extension=intl
27+
extension=ldap
28+
extension=mbstring
29+
extension=mysqlnd
30+
extension=pdo
31+
extension=pgsql
32+
extension=phar
33+
extension=posix
34+
extension=simplexml
35+
extension=soap
36+
extension=sockets
37+
extension=sodium
38+
extension=sqlite3
39+
extension=tokenizer
40+
extension=xml
41+
extension=xmlwriter
42+
extension=xsl
43+
extension=zip
44+
extension=ffi
45+
46+
; Priority 30
47+
extension=igbinary
48+
extension=msgpack
49+
extension=mysqli
50+
extension=pdo_mysql
51+
extension=pdo_pgsql
52+
extension=pdo_sqlite
53+
extension=xmlreader
54+
extension=shmop
55+
extension=sysvmsg
56+
extension=sysvsem
57+
extension=sysvshm
58+
59+
; Priority 40
60+
extension=apcu
61+
extension=redis
62+
63+
; [Common]
64+
display_errors=1
65+
memory_limit=3008M
66+
variables_order="EGPCS"
67+
disable_functions=""
68+
sys_temp_dir="/tmp"
69+
upload_tmp_dir="/tmp"
70+
post_max_size=6M
71+
upload_max_filesize=6M
72+
73+
; [Opcache]
74+
opcache.enable=1
75+
opcache.enable_cli=1
76+
opcache.validate_permission=0
77+
opcache.validate_timestamps=0
78+
opcache.revalidate_freq=0
79+
opcache.memory_consumption=256
80+
opcache.max_accelerated_files=10000
81+
opcache.file_cache="/tmp"
82+
opcache.file_cache_only=0
83+
opcache.file_cache_consistency_checks=0
84+
85+
; [Session]
86+
session.save_path="/tmp"
87+
session.auto_start=0
88+
89+
; [FFI]
90+
[ffi]
91+
ffi.enable=true
79.1 KB
Binary file not shown.
197 KB
Binary file not shown.
5.21 MB
Binary file not shown.
667 KB
Binary file not shown.

0 commit comments

Comments
 (0)