@ -1,291 +0,0 @@ | |||||
# | |||||
# NOTE: THIS DOCKERFILE IS GENERATED VIA "apply-templates.sh" | |||||
# | |||||
# PLEASE DO NOT EDIT IT DIRECTLY. | |||||
# | |||||
FROM debian:buster-slim | |||||
ARG PHP_APACHE_WWW_DATA_UID=33 | |||||
ARG PHP_APACHE_WWW_DATA_GID=33 | |||||
RUN groupmod -g $PHP_APACHE_WWW_DATA_GID www-data; \ | |||||
usermod -u $PHP_APACHE_WWW_DATA_UID -g $PHP_APACHE_WWW_DATA_GID www-data | |||||
# prevent Debian's PHP packages from being installed | |||||
# https://github.com/docker-library/php/pull/542 | |||||
RUN set -eux; \ | |||||
{ \ | |||||
echo 'Package: php*'; \ | |||||
echo 'Pin: release *'; \ | |||||
echo 'Pin-Priority: -1'; \ | |||||
} > /etc/apt/preferences.d/no-debian-php | |||||
# dependencies required for running "phpize" | |||||
# (see persistent deps below) | |||||
ENV PHPIZE_DEPS \ | |||||
autoconf \ | |||||
dpkg-dev \ | |||||
file \ | |||||
g++ \ | |||||
gcc \ | |||||
libc-dev \ | |||||
make \ | |||||
pkg-config \ | |||||
re2c | |||||
# persistent / runtime deps | |||||
RUN set -eux; \ | |||||
apt-get update; \ | |||||
apt-get install -y --no-install-recommends \ | |||||
$PHPIZE_DEPS \ | |||||
ca-certificates \ | |||||
curl \ | |||||
xz-utils \ | |||||
; \ | |||||
rm -rf /var/lib/apt/lists/* | |||||
ENV PHP_INI_DIR /usr/local/etc/php | |||||
RUN set -eux; \ | |||||
mkdir -p "$PHP_INI_DIR/conf.d"; \ | |||||
# allow running as an arbitrary user (https://github.com/docker-library/php/issues/743) | |||||
[ ! -d /var/www/html ]; \ | |||||
mkdir -p /var/www/html; \ | |||||
chown www-data:www-data /var/www/html; \ | |||||
chmod 777 /var/www/html | |||||
ENV APACHE_CONFDIR /etc/apache2 | |||||
ENV APACHE_ENVVARS $APACHE_CONFDIR/envvars | |||||
RUN set -eux; \ | |||||
apt-get update; \ | |||||
apt-get install -y --no-install-recommends apache2; \ | |||||
rm -rf /var/lib/apt/lists/*; \ | |||||
\ | |||||
# generically convert lines like | |||||
# export APACHE_RUN_USER=www-data | |||||
# into | |||||
# : ${APACHE_RUN_USER:=www-data} | |||||
# export APACHE_RUN_USER | |||||
# so that they can be overridden at runtime ("-e APACHE_RUN_USER=...") | |||||
sed -ri 's/^export ([^=]+)=(.*)$/: ${\1:=\2}\nexport \1/' "$APACHE_ENVVARS"; \ | |||||
\ | |||||
# setup directories and permissions | |||||
. "$APACHE_ENVVARS"; \ | |||||
for dir in \ | |||||
"$APACHE_LOCK_DIR" \ | |||||
"$APACHE_RUN_DIR" \ | |||||
"$APACHE_LOG_DIR" \ | |||||
; do \ | |||||
rm -rvf "$dir"; \ | |||||
mkdir -p "$dir"; \ | |||||
chown "$APACHE_RUN_USER:$APACHE_RUN_GROUP" "$dir"; \ | |||||
# allow running as an arbitrary user (https://github.com/docker-library/php/issues/743) | |||||
chmod 777 "$dir"; \ | |||||
done; \ | |||||
\ | |||||
# delete the "index.html" that installing Apache drops in here | |||||
rm -rvf /var/www/html/*; \ | |||||
\ | |||||
# logs should go to stdout / stderr | |||||
ln -sfT /dev/stderr "$APACHE_LOG_DIR/error.log"; \ | |||||
ln -sfT /dev/stdout "$APACHE_LOG_DIR/access.log"; \ | |||||
ln -sfT /dev/stdout "$APACHE_LOG_DIR/other_vhosts_access.log"; \ | |||||
chown -R --no-dereference "$APACHE_RUN_USER:$APACHE_RUN_GROUP" "$APACHE_LOG_DIR" | |||||
# Apache + PHP requires preforking Apache for best results | |||||
RUN a2dismod mpm_event && a2enmod mpm_prefork | |||||
# PHP files should be handled by PHP, and should be preferred over any other file type | |||||
RUN { \ | |||||
echo '<FilesMatch \.php$>'; \ | |||||
echo '\tSetHandler application/x-httpd-php'; \ | |||||
echo '</FilesMatch>'; \ | |||||
echo; \ | |||||
echo 'DirectoryIndex disabled'; \ | |||||
echo 'DirectoryIndex index.php index.html'; \ | |||||
echo; \ | |||||
echo '<Directory /var/www/>'; \ | |||||
echo '\tOptions -Indexes'; \ | |||||
echo '\tAllowOverride All'; \ | |||||
echo '</Directory>'; \ | |||||
} | tee "$APACHE_CONFDIR/conf-available/docker-php.conf" \ | |||||
&& a2enconf docker-php | |||||
# Apply stack smash protection to functions using local buffers and alloca() | |||||
# Make PHP's main executable position-independent (improves ASLR security mechanism, and has no performance impact on x86_64) | |||||
# Enable optimization (-O2) | |||||
# Enable linker optimization (this sorts the hash buckets to improve cache locality, and is non-default) | |||||
# https://github.com/docker-library/php/issues/272 | |||||
# -D_LARGEFILE_SOURCE and -D_FILE_OFFSET_BITS=64 (https://www.php.net/manual/en/intro.filesystem.php) | |||||
ENV PHP_CFLAGS="-fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64" | |||||
ENV PHP_CPPFLAGS="$PHP_CFLAGS" | |||||
ENV PHP_LDFLAGS="-Wl,-O1 -pie" | |||||
ENV GPG_KEYS 42670A7FE4D0441C8E4632349E4FDC074A4EF02D 5A52880781F755608BF815FC910DEB46F53EA312 | |||||
ENV PHP_VERSION 7.4.24 | |||||
ENV PHP_URL="https://www.php.net/distributions/php-7.4.24.tar.xz" PHP_ASC_URL="https://www.php.net/distributions/php-7.4.24.tar.xz.asc" | |||||
ENV PHP_SHA256="ff7658ee2f6d8af05b48c21146af5f502e121def4e76e862df5ec9fa06e98734" | |||||
RUN set -eux; \ | |||||
\ | |||||
savedAptMark="$(apt-mark showmanual)"; \ | |||||
apt-get update; \ | |||||
apt-get install -y --no-install-recommends gnupg dirmngr; \ | |||||
rm -rf /var/lib/apt/lists/*; \ | |||||
\ | |||||
mkdir -p /usr/src; \ | |||||
cd /usr/src; \ | |||||
\ | |||||
curl -fsSL -o php.tar.xz "$PHP_URL"; \ | |||||
\ | |||||
if [ -n "$PHP_SHA256" ]; then \ | |||||
echo "$PHP_SHA256 *php.tar.xz" | sha256sum -c -; \ | |||||
fi; \ | |||||
\ | |||||
if [ -n "$PHP_ASC_URL" ]; then \ | |||||
curl -fsSL -o php.tar.xz.asc "$PHP_ASC_URL"; \ | |||||
export GNUPGHOME="$(mktemp -d)"; \ | |||||
for key in $GPG_KEYS; do \ | |||||
gpg --batch --keyserver keyserver.ubuntu.com --recv-keys "$key"; \ | |||||
done; \ | |||||
gpg --batch --verify php.tar.xz.asc php.tar.xz; \ | |||||
gpgconf --kill all; \ | |||||
rm -rf "$GNUPGHOME"; \ | |||||
fi; \ | |||||
\ | |||||
apt-mark auto '.*' > /dev/null; \ | |||||
apt-mark manual $savedAptMark > /dev/null; \ | |||||
apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false | |||||
COPY docker-php-source /usr/local/bin/ | |||||
RUN set -eux; \ | |||||
\ | |||||
savedAptMark="$(apt-mark showmanual)"; \ | |||||
apt-get update; \ | |||||
apt-get install -y --no-install-recommends \ | |||||
apache2-dev \ | |||||
libargon2-dev \ | |||||
libcurl4-openssl-dev \ | |||||
libonig-dev \ | |||||
libreadline-dev \ | |||||
libsodium-dev \ | |||||
libsqlite3-dev \ | |||||
libssl-dev \ | |||||
libxml2-dev \ | |||||
zlib1g-dev \ | |||||
; \ | |||||
\ | |||||
export \ | |||||
CFLAGS="$PHP_CFLAGS" \ | |||||
CPPFLAGS="$PHP_CPPFLAGS" \ | |||||
LDFLAGS="$PHP_LDFLAGS" \ | |||||
; \ | |||||
docker-php-source extract; \ | |||||
cd /usr/src/php; \ | |||||
gnuArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)"; \ | |||||
debMultiarch="$(dpkg-architecture --query DEB_BUILD_MULTIARCH)"; \ | |||||
# https://bugs.php.net/bug.php?id=74125 | |||||
if [ ! -d /usr/include/curl ]; then \ | |||||
ln -sT "/usr/include/$debMultiarch/curl" /usr/local/include/curl; \ | |||||
fi; \ | |||||
./configure \ | |||||
--build="$gnuArch" \ | |||||
--with-config-file-path="$PHP_INI_DIR" \ | |||||
--with-config-file-scan-dir="$PHP_INI_DIR/conf.d" \ | |||||
\ | |||||
# make sure invalid --configure-flags are fatal errors instead of just warnings | |||||
--enable-option-checking=fatal \ | |||||
\ | |||||
# https://github.com/docker-library/php/issues/439 | |||||
--with-mhash \ | |||||
\ | |||||
# https://github.com/docker-library/php/issues/822 | |||||
--with-pic \ | |||||
\ | |||||
# --enable-ftp is included here because ftp_ssl_connect() needs ftp to be compiled statically (see https://github.com/docker-library/php/issues/236) | |||||
--enable-ftp \ | |||||
# --enable-mbstring is included here because otherwise there's no way to get pecl to use it properly (see https://github.com/docker-library/php/issues/195) | |||||
--enable-mbstring \ | |||||
# --enable-mysqlnd is included here because it's harder to compile after the fact than extensions are (since it's a plugin for several extensions, not an extension in itself) | |||||
--enable-mysqlnd \ | |||||
# https://wiki.php.net/rfc/argon2_password_hash | |||||
--with-password-argon2 \ | |||||
# https://wiki.php.net/rfc/libsodium | |||||
--with-sodium=shared \ | |||||
# always build against system sqlite3 (https://github.com/php/php-src/commit/6083a387a81dbbd66d6316a3a12a63f06d5f7109) | |||||
--with-pdo-sqlite=/usr \ | |||||
--with-sqlite3=/usr \ | |||||
\ | |||||
--with-curl \ | |||||
--with-openssl \ | |||||
--with-readline \ | |||||
--with-zlib \ | |||||
\ | |||||
# in PHP 7.4+, the pecl/pear installers are officially deprecated (requiring an explicit "--with-pear") | |||||
--with-pear \ | |||||
\ | |||||
# bundled pcre does not support JIT on s390x | |||||
# https://manpages.debian.org/bullseye/libpcre3-dev/pcrejit.3.en.html#AVAILABILITY_OF_JIT_SUPPORT | |||||
$(test "$gnuArch" = 's390x-linux-gnu' && echo '--without-pcre-jit') \ | |||||
--with-libdir="lib/$debMultiarch" \ | |||||
\ | |||||
--disable-cgi \ | |||||
\ | |||||
--with-apxs2 \ | |||||
; \ | |||||
make -j "$(nproc)"; \ | |||||
find -type f -name '*.a' -delete; \ | |||||
make install; \ | |||||
find \ | |||||
/usr/local \ | |||||
-type f \ | |||||
-perm '/0111' \ | |||||
-exec sh -euxc ' \ | |||||
strip --strip-all "$@" || : \ | |||||
' -- '{}' + \ | |||||
; \ | |||||
make clean; \ | |||||
\ | |||||
# https://github.com/docker-library/php/issues/692 (copy default example "php.ini" files somewhere easily discoverable) | |||||
cp -v php.ini-* "$PHP_INI_DIR/"; \ | |||||
\ | |||||
cd /; \ | |||||
docker-php-source delete; \ | |||||
\ | |||||
# reset apt-mark's "manual" list so that "purge --auto-remove" will remove all build dependencies | |||||
apt-mark auto '.*' > /dev/null; \ | |||||
[ -z "$savedAptMark" ] || apt-mark manual $savedAptMark; \ | |||||
find /usr/local -type f -executable -exec ldd '{}' ';' \ | |||||
| awk '/=>/ { print $(NF-1) }' \ | |||||
| sort -u \ | |||||
| xargs -r dpkg-query --search \ | |||||
| cut -d: -f1 \ | |||||
| sort -u \ | |||||
| xargs -r apt-mark manual \ | |||||
; \ | |||||
apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false; \ | |||||
rm -rf /var/lib/apt/lists/*; \ | |||||
\ | |||||
# update pecl channel definitions https://github.com/docker-library/php/issues/443 | |||||
pecl update-channels; \ | |||||
rm -rf /tmp/pear ~/.pearrc; \ | |||||
\ | |||||
# smoke test | |||||
php --version | |||||
COPY docker-php-ext-* docker-php-entrypoint /usr/local/bin/ | |||||
# sodium was built as a shared module (so that it can be replaced later if so desired), so let's enable it too (https://github.com/docker-library/php/issues/598) | |||||
RUN docker-php-ext-enable sodium | |||||
ENTRYPOINT ["docker-php-entrypoint"] | |||||
# https://httpd.apache.org/docs/2.4/stopping.html#gracefulstop | |||||
STOPSIGNAL SIGWINCH | |||||
COPY apache2-foreground /usr/local/bin/ | |||||
WORKDIR /var/www/html | |||||
EXPOSE 80 | |||||
CMD ["apache2-foreground"] |
@ -1,40 +0,0 @@ | |||||
#!/bin/bash | |||||
set -e | |||||
# Note: we don't just use "apache2ctl" here because it itself is just a shell-script wrapper around apache2 which provides extra functionality like "apache2ctl start" for launching apache2 in the background. | |||||
# (also, when run as "apache2ctl <apache args>", it does not use "exec", which leaves an undesirable resident shell process) | |||||
: "${APACHE_CONFDIR:=/etc/apache2}" | |||||
: "${APACHE_ENVVARS:=$APACHE_CONFDIR/envvars}" | |||||
if test -f "$APACHE_ENVVARS"; then | |||||
. "$APACHE_ENVVARS" | |||||
fi | |||||
# Apache gets grumpy about PID files pre-existing | |||||
: "${APACHE_RUN_DIR:=/var/run/apache2}" | |||||
: "${APACHE_PID_FILE:=$APACHE_RUN_DIR/apache2.pid}" | |||||
rm -f "$APACHE_PID_FILE" | |||||
# create missing directories | |||||
# (especially APACHE_RUN_DIR, APACHE_LOCK_DIR, and APACHE_LOG_DIR) | |||||
for e in "${!APACHE_@}"; do | |||||
if [[ "$e" == *_DIR ]] && [[ "${!e}" == /* ]]; then | |||||
# handle "/var/lock" being a symlink to "/run/lock", but "/run/lock" not existing beforehand, so "/var/lock/something" fails to mkdir | |||||
# mkdir: cannot create directory '/var/lock': File exists | |||||
dir="${!e}" | |||||
while [ "$dir" != "$(dirname "$dir")" ]; do | |||||
dir="$(dirname "$dir")" | |||||
if [ -d "$dir" ]; then | |||||
break | |||||
fi | |||||
absDir="$(readlink -f "$dir" 2>/dev/null || :)" | |||||
if [ -n "$absDir" ]; then | |||||
mkdir -p "$absDir" | |||||
fi | |||||
done | |||||
mkdir -p "${!e}" | |||||
fi | |||||
done | |||||
exec apache2 -DFOREGROUND "$@" |
@ -1,9 +0,0 @@ | |||||
#!/bin/sh | |||||
set -e | |||||
# first arg is `-f` or `--some-option` | |||||
if [ "${1#-}" != "$1" ]; then | |||||
set -- apache2-foreground "$@" | |||||
fi | |||||
exec "$@" |
@ -1,69 +0,0 @@ | |||||
#!/bin/sh | |||||
set -e | |||||
# prefer user supplied CFLAGS, but default to our PHP_CFLAGS | |||||
: ${CFLAGS:=$PHP_CFLAGS} | |||||
: ${CPPFLAGS:=$PHP_CPPFLAGS} | |||||
: ${LDFLAGS:=$PHP_LDFLAGS} | |||||
export CFLAGS CPPFLAGS LDFLAGS | |||||
srcExists= | |||||
if [ -d /usr/src/php ]; then | |||||
srcExists=1 | |||||
fi | |||||
docker-php-source extract | |||||
if [ -z "$srcExists" ]; then | |||||
touch /usr/src/php/.docker-delete-me | |||||
fi | |||||
cd /usr/src/php/ext | |||||
usage() { | |||||
echo "usage: $0 ext-name [configure flags]" | |||||
echo " ie: $0 gd --with-jpeg-dir=/usr/local/something" | |||||
echo | |||||
echo 'Possible values for ext-name:' | |||||
find . \ | |||||
-mindepth 2 \ | |||||
-maxdepth 2 \ | |||||
-type f \ | |||||
-name 'config.m4' \ | |||||
| xargs -n1 dirname \ | |||||
| xargs -n1 basename \ | |||||
| sort \ | |||||
| xargs | |||||
echo | |||||
echo 'Some of the above modules are already compiled into PHP; please check' | |||||
echo 'the output of "php -i" to see which modules are already loaded.' | |||||
} | |||||
ext="$1" | |||||
if [ -z "$ext" ] || [ ! -d "$ext" ]; then | |||||
usage >&2 | |||||
exit 1 | |||||
fi | |||||
shift | |||||
pm='unknown' | |||||
if [ -e /lib/apk/db/installed ]; then | |||||
pm='apk' | |||||
fi | |||||
if [ "$pm" = 'apk' ]; then | |||||
if \ | |||||
[ -n "$PHPIZE_DEPS" ] \ | |||||
&& ! apk info --installed .phpize-deps > /dev/null \ | |||||
&& ! apk info --installed .phpize-deps-configure > /dev/null \ | |||||
; then | |||||
apk add --no-cache --virtual .phpize-deps-configure $PHPIZE_DEPS | |||||
fi | |||||
fi | |||||
if command -v dpkg-architecture > /dev/null; then | |||||
gnuArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)" | |||||
set -- --build="$gnuArch" "$@" | |||||
fi | |||||
cd "$ext" | |||||
phpize | |||||
./configure --enable-option-checking=fatal "$@" |
@ -1,121 +0,0 @@ | |||||
#!/bin/sh | |||||
set -e | |||||
extDir="$(php -d 'display_errors=stderr' -r 'echo ini_get("extension_dir");')" | |||||
cd "$extDir" | |||||
usage() { | |||||
echo "usage: $0 [options] module-name [module-name ...]" | |||||
echo " ie: $0 gd mysqli" | |||||
echo " $0 pdo pdo_mysql" | |||||
echo " $0 --ini-name 0-apc.ini apcu apc" | |||||
echo | |||||
echo 'Possible values for module-name:' | |||||
find -maxdepth 1 \ | |||||
-type f \ | |||||
-name '*.so' \ | |||||
-exec basename '{}' ';' \ | |||||
| sort \ | |||||
| xargs | |||||
echo | |||||
echo 'Some of the above modules are already compiled into PHP; please check' | |||||
echo 'the output of "php -i" to see which modules are already loaded.' | |||||
} | |||||
opts="$(getopt -o 'h?' --long 'help,ini-name:' -- "$@" || { usage >&2 && false; })" | |||||
eval set -- "$opts" | |||||
iniName= | |||||
while true; do | |||||
flag="$1" | |||||
shift | |||||
case "$flag" in | |||||
--help|-h|'-?') usage && exit 0 ;; | |||||
--ini-name) iniName="$1" && shift ;; | |||||
--) break ;; | |||||
*) | |||||
{ | |||||
echo "error: unknown flag: $flag" | |||||
usage | |||||
} >&2 | |||||
exit 1 | |||||
;; | |||||
esac | |||||
done | |||||
modules= | |||||
for module; do | |||||
if [ -z "$module" ]; then | |||||
continue | |||||
fi | |||||
if ! [ -f "$module" ] && ! [ -f "$module.so" ]; then | |||||
echo >&2 "error: '$module' does not exist" | |||||
echo >&2 | |||||
usage >&2 | |||||
exit 1 | |||||
fi | |||||
modules="$modules $module" | |||||
done | |||||
if [ -z "$modules" ]; then | |||||
usage >&2 | |||||
exit 1 | |||||
fi | |||||
pm='unknown' | |||||
if [ -e /lib/apk/db/installed ]; then | |||||
pm='apk' | |||||
fi | |||||
apkDel= | |||||
if [ "$pm" = 'apk' ]; then | |||||
if \ | |||||
[ -n "$PHPIZE_DEPS" ] \ | |||||
&& ! apk info --installed .phpize-deps > /dev/null \ | |||||
&& ! apk info --installed .phpize-deps-configure > /dev/null \ | |||||
; then | |||||
apk add --no-cache --virtual '.docker-php-ext-enable-deps' binutils | |||||
apkDel='.docker-php-ext-enable-deps' | |||||
fi | |||||
fi | |||||
for module in $modules; do | |||||
moduleFile="$module" | |||||
if [ -f "$module.so" ] && ! [ -f "$module" ]; then | |||||
moduleFile="$module.so" | |||||
fi | |||||
if readelf --wide --syms "$moduleFile" | grep -q ' zend_extension_entry$'; then | |||||
# https://wiki.php.net/internals/extensions#loading_zend_extensions | |||||
line="zend_extension=$module" | |||||
else | |||||
line="extension=$module" | |||||
fi | |||||
ext="$(basename "$module")" | |||||
ext="${ext%.*}" | |||||
if php -d 'display_errors=stderr' -r 'exit(extension_loaded("'"$ext"'") ? 0 : 1);'; then | |||||
# this isn't perfect, but it's better than nothing | |||||
# (for example, 'opcache.so' presents inside PHP as 'Zend OPcache', not 'opcache') | |||||
echo >&2 | |||||
echo >&2 "warning: $ext ($module) is already loaded!" | |||||
echo >&2 | |||||
continue | |||||
fi | |||||
case "$iniName" in | |||||
/*) | |||||
# allow an absolute path | |||||
ini="$iniName" | |||||
;; | |||||
*) | |||||
ini="$PHP_INI_DIR/conf.d/${iniName:-"docker-php-ext-$ext.ini"}" | |||||
;; | |||||
esac | |||||
if ! grep -qFx -e "$line" -e "$line.so" "$ini" 2>/dev/null; then | |||||
echo "$line" >> "$ini" | |||||
fi | |||||
done | |||||
if [ "$pm" = 'apk' ] && [ -n "$apkDel" ]; then | |||||
apk del --no-network $apkDel | |||||
fi |
@ -1,130 +0,0 @@ | |||||
#!/bin/sh | |||||
set -e | |||||
# prefer user supplied CFLAGS, but default to our PHP_CFLAGS | |||||
: ${CFLAGS:=$PHP_CFLAGS} | |||||
: ${CPPFLAGS:=$PHP_CPPFLAGS} | |||||
: ${LDFLAGS:=$PHP_LDFLAGS} | |||||
export CFLAGS CPPFLAGS LDFLAGS | |||||
srcExists= | |||||
if [ -d /usr/src/php ]; then | |||||
srcExists=1 | |||||
fi | |||||
docker-php-source extract | |||||
if [ -z "$srcExists" ]; then | |||||
touch /usr/src/php/.docker-delete-me | |||||
fi | |||||
cd /usr/src/php/ext | |||||
usage() { | |||||
echo "usage: $0 [-jN] [--ini-name file.ini] ext-name [ext-name ...]" | |||||
echo " ie: $0 gd mysqli" | |||||
echo " $0 pdo pdo_mysql" | |||||
echo " $0 -j5 gd mbstring mysqli pdo pdo_mysql shmop" | |||||
echo | |||||
echo 'if custom ./configure arguments are necessary, see docker-php-ext-configure' | |||||
echo | |||||
echo 'Possible values for ext-name:' | |||||
find . \ | |||||
-mindepth 2 \ | |||||
-maxdepth 2 \ | |||||
-type f \ | |||||
-name 'config.m4' \ | |||||
| xargs -n1 dirname \ | |||||
| xargs -n1 basename \ | |||||
| sort \ | |||||
| xargs | |||||
echo | |||||
echo 'Some of the above modules are already compiled into PHP; please check' | |||||
echo 'the output of "php -i" to see which modules are already loaded.' | |||||
} | |||||
opts="$(getopt -o 'h?j:' --long 'help,ini-name:,jobs:' -- "$@" || { usage >&2 && false; })" | |||||
eval set -- "$opts" | |||||
j=1 | |||||
iniName= | |||||
while true; do | |||||
flag="$1" | |||||
shift | |||||
case "$flag" in | |||||
--help|-h|'-?') usage && exit 0 ;; | |||||
--ini-name) iniName="$1" && shift ;; | |||||
--jobs|-j) j="$1" && shift ;; | |||||
--) break ;; | |||||
*) | |||||
{ | |||||
echo "error: unknown flag: $flag" | |||||
usage | |||||
} >&2 | |||||
exit 1 | |||||
;; | |||||
esac | |||||
done | |||||
exts= | |||||
for ext; do | |||||
if [ -z "$ext" ]; then | |||||
continue | |||||
fi | |||||
if [ ! -d "$ext" ]; then | |||||
echo >&2 "error: $PWD/$ext does not exist" | |||||
echo >&2 | |||||
usage >&2 | |||||
exit 1 | |||||
fi | |||||
exts="$exts $ext" | |||||
done | |||||
if [ -z "$exts" ]; then | |||||
usage >&2 | |||||
exit 1 | |||||
fi | |||||
pm='unknown' | |||||
if [ -e /lib/apk/db/installed ]; then | |||||
pm='apk' | |||||
fi | |||||
apkDel= | |||||
if [ "$pm" = 'apk' ]; then | |||||
if [ -n "$PHPIZE_DEPS" ]; then | |||||
if apk info --installed .phpize-deps-configure > /dev/null; then | |||||
apkDel='.phpize-deps-configure' | |||||
elif ! apk info --installed .phpize-deps > /dev/null; then | |||||
apk add --no-cache --virtual .phpize-deps $PHPIZE_DEPS | |||||
apkDel='.phpize-deps' | |||||
fi | |||||
fi | |||||
fi | |||||
popDir="$PWD" | |||||
for ext in $exts; do | |||||
cd "$ext" | |||||
[ -e Makefile ] || docker-php-ext-configure "$ext" | |||||
make -j"$j" | |||||
find modules \ | |||||
-maxdepth 1 \ | |||||
-name '*.so' \ | |||||
-exec sh -euxc ' \ | |||||
strip --strip-all "$@" || : | |||||
' -- '{}' + | |||||
make -j"$j" install | |||||
find modules \ | |||||
-maxdepth 1 \ | |||||
-name '*.so' \ | |||||
-exec basename '{}' ';' \ | |||||
| xargs -r docker-php-ext-enable ${iniName:+--ini-name "$iniName"} | |||||
make -j"$j" clean | |||||
cd "$popDir" | |||||
done | |||||
if [ "$pm" = 'apk' ] && [ -n "$apkDel" ]; then | |||||
apk del --no-network $apkDel | |||||
fi | |||||
if [ -e /usr/src/php/.docker-delete-me ]; then | |||||
docker-php-source delete | |||||
fi |
@ -1,34 +0,0 @@ | |||||
#!/bin/sh | |||||
set -e | |||||
dir=/usr/src/php | |||||
usage() { | |||||
echo "usage: $0 COMMAND" | |||||
echo | |||||
echo "Manage php source tarball lifecycle." | |||||
echo | |||||
echo "Commands:" | |||||
echo " extract extract php source tarball into directory $dir if not already done." | |||||
echo " delete delete extracted php source located into $dir if not already done." | |||||
echo | |||||
} | |||||
case "$1" in | |||||
extract) | |||||
mkdir -p "$dir" | |||||
if [ ! -f "$dir/.docker-extracted" ]; then | |||||
tar -Jxf /usr/src/php.tar.xz -C "$dir" --strip-components=1 | |||||
touch "$dir/.docker-extracted" | |||||
fi | |||||
;; | |||||
delete) | |||||
rm -rf "$dir" | |||||
;; | |||||
*) | |||||
usage | |||||
exit 1 | |||||
;; | |||||
esac |
@ -1 +1 @@ | |||||
Subproject commit b4b4093acd612a1b489c6442585379275e9e4df6 | |||||
Subproject commit c3ee24b4280eff1b55b7a22e527532617e56bcf0 |