-
Notifications
You must be signed in to change notification settings - Fork 2k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
45 changed files
with
4,104 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,186 @@ | ||
# | ||
# NOTE: THIS DOCKERFILE IS GENERATED VIA "update.sh" | ||
# | ||
# PLEASE DO NOT EDIT IT DIRECTLY. | ||
# | ||
|
||
FROM alpine:3.9 | ||
|
||
# dependencies required for running "phpize" | ||
# these get automatically installed and removed by "docker-php-ext-*" (unless they're already installed) | ||
ENV PHPIZE_DEPS \ | ||
autoconf \ | ||
dpkg-dev dpkg \ | ||
file \ | ||
g++ \ | ||
gcc \ | ||
libc-dev \ | ||
make \ | ||
pkgconf \ | ||
re2c | ||
|
||
# persistent / runtime deps | ||
RUN apk add --no-cache \ | ||
ca-certificates \ | ||
curl \ | ||
tar \ | ||
xz \ | ||
# https://github.com/docker-library/php/issues/494 | ||
openssl | ||
|
||
# ensure www-data user exists | ||
RUN set -x \ | ||
&& addgroup -g 82 -S www-data \ | ||
&& adduser -u 82 -D -S -G www-data www-data | ||
# 82 is the standard uid/gid for "www-data" in Alpine | ||
# https://git.alpinelinux.org/aports/tree/main/apache2/apache2.pre-install?h=3.9-stable | ||
# https://git.alpinelinux.org/aports/tree/main/lighttpd/lighttpd.pre-install?h=3.9-stable | ||
# https://git.alpinelinux.org/aports/tree/main/nginx/nginx.pre-install?h=3.9-stable | ||
|
||
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 | ||
|
||
##<autogenerated>## | ||
##</autogenerated>## | ||
|
||
# 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) | ||
# Adds GNU HASH segments to generated executables (this is used if present, and is much faster than sysv hash; in this configuration, sysv hash is also generated) | ||
# https://github.com/docker-library/php/issues/272 | ||
ENV PHP_CFLAGS="-fstack-protector-strong -fpic -fpie -O2" | ||
ENV PHP_CPPFLAGS="$PHP_CFLAGS" | ||
ENV PHP_LDFLAGS="-Wl,-O1 -Wl,--hash-style=both -pie" | ||
|
||
ENV GPG_KEYS 42670A7FE4D0441C8E4632349E4FDC074A4EF02D 5A52880781F755608BF815FC910DEB46F53EA312 | ||
|
||
ENV PHP_VERSION 7.4.0alpha1 | ||
ENV PHP_URL="https://downloads.php.net/~derick/php-7.4.0alpha1.tar.xz" PHP_ASC_URL="https://downloads.php.net/~derick/php-7.4.0alpha1.tar.xz.asc" | ||
ENV PHP_SHA256="378400b6eced6e358f5db750413a7f9959517b0daef6580b16d640190b7dc364" PHP_MD5="" | ||
|
||
RUN set -xe; \ | ||
\ | ||
apk add --no-cache --virtual .fetch-deps \ | ||
gnupg \ | ||
wget \ | ||
; \ | ||
\ | ||
mkdir -p /usr/src; \ | ||
cd /usr/src; \ | ||
\ | ||
wget -O php.tar.xz "$PHP_URL"; \ | ||
\ | ||
if [ -n "$PHP_SHA256" ]; then \ | ||
echo "$PHP_SHA256 *php.tar.xz" | sha256sum -c -; \ | ||
fi; \ | ||
if [ -n "$PHP_MD5" ]; then \ | ||
echo "$PHP_MD5 *php.tar.xz" | md5sum -c -; \ | ||
fi; \ | ||
\ | ||
if [ -n "$PHP_ASC_URL" ]; then \ | ||
wget -O php.tar.xz.asc "$PHP_ASC_URL"; \ | ||
export GNUPGHOME="$(mktemp -d)"; \ | ||
for key in $GPG_KEYS; do \ | ||
gpg --batch --keyserver ha.pool.sks-keyservers.net --recv-keys "$key"; \ | ||
done; \ | ||
gpg --batch --verify php.tar.xz.asc php.tar.xz; \ | ||
command -v gpgconf > /dev/null && gpgconf --kill all; \ | ||
rm -rf "$GNUPGHOME"; \ | ||
fi; \ | ||
\ | ||
apk del --no-network .fetch-deps | ||
|
||
COPY docker-php-source /usr/local/bin/ | ||
|
||
RUN set -xe \ | ||
&& apk add --no-cache --virtual .build-deps \ | ||
$PHPIZE_DEPS \ | ||
argon2-dev \ | ||
coreutils \ | ||
curl-dev \ | ||
libedit-dev \ | ||
libsodium-dev \ | ||
libxml2-dev \ | ||
openssl-dev \ | ||
sqlite-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)" \ | ||
&& ./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 intead of just warnings | ||
--enable-option-checking=fatal \ | ||
\ | ||
# https://github.com/docker-library/php/issues/439 | ||
--with-mhash \ | ||
\ | ||
# --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 (7.2+) | ||
--with-password-argon2 \ | ||
# https://wiki.php.net/rfc/libsodium | ||
--with-sodium=shared \ | ||
\ | ||
--with-curl \ | ||
--with-libedit \ | ||
--with-openssl \ | ||
--with-zlib \ | ||
\ | ||
# bundled pcre does not support JIT on s390x | ||
# https://manpages.debian.org/stretch/libpcre3-dev/pcrejit.3.en.html#AVAILABILITY_OF_JIT_SUPPORT | ||
$(test "$gnuArch" = 's390x-linux-gnu' && echo '--without-pcre-jit') \ | ||
\ | ||
$PHP_EXTRA_CONFIGURE_ARGS \ | ||
&& make -j "$(nproc)" \ | ||
&& find -type f -name '*.a' -delete \ | ||
&& make install \ | ||
&& { find /usr/local/bin /usr/local/sbin -type f -perm +0111 -exec strip --strip-all '{}' + || true; } \ | ||
&& 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 \ | ||
\ | ||
&& runDeps="$( \ | ||
scanelf --needed --nobanner --format '%n#p' --recursive /usr/local \ | ||
| tr ',' '\n' \ | ||
| sort -u \ | ||
| awk 'system("[ -e /usr/local/lib/" $1 " ]") == 0 { next } { print "so:" $1 }' \ | ||
)" \ | ||
&& apk add --no-cache $runDeps \ | ||
\ | ||
&& apk del --no-network .build-deps \ | ||
\ | ||
# https://github.com/docker-library/php/issues/443 | ||
&& pecl update-channels \ | ||
&& rm -rf /tmp/pear ~/.pearrc | ||
|
||
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"] | ||
##<autogenerated>## | ||
CMD ["php", "-a"] | ||
##</autogenerated>## |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
#!/bin/sh | ||
set -e | ||
|
||
# first arg is `-f` or `--some-option` | ||
if [ "${1#-}" != "$1" ]; then | ||
set -- php "$@" | ||
fi | ||
|
||
exec "$@" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,69 @@ | ||
#!/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 "$@" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,114 @@ | ||
#!/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.so" ] && ! [ -f "$module" ]; then | ||
# allow ".so" to be optional | ||
module="$module.so" | ||
fi | ||
if ! [ -f "$module" ]; 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 | ||
if readelf --wide --syms "$module" | grep -q ' zend_extension_entry$'; then | ||
# https://wiki.php.net/internals/extensions#loading_zend_extensions | ||
absModule="$(readlink -f "$module")" | ||
line="zend_extension=$absModule" | ||
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 | ||
|
||
ini="$PHP_INI_DIR/conf.d/${iniName:-"docker-php-ext-$ext.ini"}" | ||
if ! grep -q "$line" "$ini" 2>/dev/null; then | ||
echo "$line" >> "$ini" | ||
fi | ||
done | ||
|
||
if [ "$pm" = 'apk' ] && [ -n "$apkDel" ]; then | ||
apk del --no-network $apkDel | ||
fi |
Oops, something went wrong.