From 9288cfa7d4184f547c37b3f0f53c24af99bc087d Mon Sep 17 00:00:00 2001 From: Mikk Tendermann Date: Wed, 6 Jan 2016 20:57:29 +0200 Subject: [PATCH 1/2] add zts support --- 5.5/zts/Dockerfile | 68 +++++++++++++++++++++++++++++++ 5.5/zts/docker-php-ext-configure | 19 +++++++++ 5.5/zts/docker-php-ext-enable | 63 +++++++++++++++++++++++++++++ 5.5/zts/docker-php-ext-install | 69 ++++++++++++++++++++++++++++++++ 5.6/zts/Dockerfile | 68 +++++++++++++++++++++++++++++++ 5.6/zts/docker-php-ext-configure | 19 +++++++++ 5.6/zts/docker-php-ext-enable | 63 +++++++++++++++++++++++++++++ 5.6/zts/docker-php-ext-install | 69 ++++++++++++++++++++++++++++++++ 7.0/zts/Dockerfile | 68 +++++++++++++++++++++++++++++++ 7.0/zts/docker-php-ext-configure | 19 +++++++++ 7.0/zts/docker-php-ext-enable | 63 +++++++++++++++++++++++++++++ 7.0/zts/docker-php-ext-install | 69 ++++++++++++++++++++++++++++++++ update.sh | 2 +- zts-Dockerfile-block-1 | 1 + zts-Dockerfile-block-2 | 1 + 15 files changed, 660 insertions(+), 1 deletion(-) create mode 100644 5.5/zts/Dockerfile create mode 100755 5.5/zts/docker-php-ext-configure create mode 100755 5.5/zts/docker-php-ext-enable create mode 100755 5.5/zts/docker-php-ext-install create mode 100644 5.6/zts/Dockerfile create mode 100755 5.6/zts/docker-php-ext-configure create mode 100755 5.6/zts/docker-php-ext-enable create mode 100755 5.6/zts/docker-php-ext-install create mode 100644 7.0/zts/Dockerfile create mode 100755 7.0/zts/docker-php-ext-configure create mode 100755 7.0/zts/docker-php-ext-enable create mode 100755 7.0/zts/docker-php-ext-install create mode 100644 zts-Dockerfile-block-1 create mode 100644 zts-Dockerfile-block-2 diff --git a/5.5/zts/Dockerfile b/5.5/zts/Dockerfile new file mode 100644 index 0000000000..6ced842cfb --- /dev/null +++ b/5.5/zts/Dockerfile @@ -0,0 +1,68 @@ +FROM debian:jessie + +# persistent / runtime deps +RUN apt-get update && apt-get install -y ca-certificates curl librecode0 libsqlite3-0 libxml2 --no-install-recommends && rm -r /var/lib/apt/lists/* + +# phpize deps +RUN apt-get update && apt-get install -y autoconf file g++ gcc libc-dev make pkg-config re2c --no-install-recommends && rm -r /var/lib/apt/lists/* + +ENV PHP_INI_DIR /usr/local/etc/php +RUN mkdir -p $PHP_INI_DIR/conf.d + +#### +ENV PHP_EXTRA_CONFIGURE_ARGS --enable-maintainer-zts +#### + +ENV GPG_KEYS 0B96609E270F565C13292B24C13C70B87267B52D 0BD78B5F97500D450838F95DFE857D9A90D90EC1 F38252826ACD957EF380D39F2F7956BC5DA04B5D +RUN set -xe \ + && for key in $GPG_KEYS; do \ + gpg --keyserver ha.pool.sks-keyservers.net --recv-keys "$key"; \ + done + +ENV PHP_VERSION 5.5.30 +ENV PHP_FILENAME php-5.5.30.tar.xz +ENV PHP_SHA256 d00dc06fa5e0f3de048fb0cf940b3cc59b43b3f8cad825d4fffb35503cf2e8f2 + +# --enable-mysqlnd is included below because it's harder to compile after the fact the extensions are (since it's a plugin for several extensions, not an extension in itself) +RUN buildDeps=" \ + $PHP_EXTRA_BUILD_DEPS \ + libcurl4-openssl-dev \ + libreadline6-dev \ + librecode-dev \ + libsqlite3-dev \ + libssl-dev \ + libxml2-dev \ + xz-utils \ + " \ + && set -x \ + && apt-get update && apt-get install -y $buildDeps --no-install-recommends && rm -rf /var/lib/apt/lists/* \ + && curl -fSL "http://php.net/get/$PHP_FILENAME/from/this/mirror" -o "$PHP_FILENAME" \ + && echo "$PHP_SHA256 *$PHP_FILENAME" | sha256sum -c - \ + && curl -fSL "http://php.net/get/$PHP_FILENAME.asc/from/this/mirror" -o "$PHP_FILENAME.asc" \ + && gpg --verify "$PHP_FILENAME.asc" \ + && mkdir -p /usr/src/php \ + && tar -xf "$PHP_FILENAME" -C /usr/src/php --strip-components=1 \ + && rm "$PHP_FILENAME"* \ + && cd /usr/src/php \ + && ./configure \ + --with-config-file-path="$PHP_INI_DIR" \ + --with-config-file-scan-dir="$PHP_INI_DIR/conf.d" \ + $PHP_EXTRA_CONFIGURE_ARGS \ + --disable-cgi \ + --enable-mysqlnd \ + --with-curl \ + --with-openssl \ + --with-readline \ + --with-recode \ + --with-zlib \ + && make -j"$(nproc)" \ + && make install \ + && { find /usr/local/bin /usr/local/sbin -type f -executable -exec strip --strip-all '{}' + || true; } \ + && apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false -o APT::AutoRemove::SuggestsImportant=false $buildDeps \ + && make clean + +COPY docker-php-ext-* /usr/local/bin/ + +#### +CMD ["php", "-a"] +#### diff --git a/5.5/zts/docker-php-ext-configure b/5.5/zts/docker-php-ext-configure new file mode 100755 index 0000000000..3d21b5bbca --- /dev/null +++ b/5.5/zts/docker-php-ext-configure @@ -0,0 +1,19 @@ +#!/bin/bash +set -e + +ext="$1" +extDir="/usr/src/php/ext/$ext" +if [ -z "$ext" -o ! -d "$extDir" ]; then + echo >&2 "usage: $0 ext-name [configure flags]" + echo >&2 " ie: $0 gd --with-jpeg-dir=/usr/local/something" + echo >&2 + echo >&2 'Possible values for ext-name:' + echo >&2 $(find /usr/src/php/ext -mindepth 2 -maxdepth 2 -type f -name 'config.m4' | cut -d/ -f6 | sort) + exit 1 +fi +shift + +set -x +cd "$extDir" +phpize +./configure "$@" diff --git a/5.5/zts/docker-php-ext-enable b/5.5/zts/docker-php-ext-enable new file mode 100755 index 0000000000..f84e955450 --- /dev/null +++ b/5.5/zts/docker-php-ext-enable @@ -0,0 +1,63 @@ +#!/bin/bash +set -e + +cd "$(php -r 'echo ini_get("extension_dir");')" + +usage() { + echo "usage: $0 module-name [module-name ...]" + echo " ie: $0 gd mysqli" + echo " $0 pdo pdo_mysql" + echo + echo 'Possible values for module-name:' + echo $(find -maxdepth 1 -type f -name '*.so' -exec basename '{}' ';' | sort) +} + +modules=() +while [ $# -gt 0 ]; do + module="$1" + shift + if [ -z "$module" ]; then + continue + fi + if [ -f "$module.so" -a ! -f "$module" ]; then + # allow ".so" to be optional + module+='.so' + fi + if [ ! -f "$module" ]; then + echo >&2 "error: $(readlink -f "$module") does not exist" + echo >&2 + usage >&2 + exit 1 + fi + modules+=( "$module" ) +done + +if [ "${#modules[@]}" -eq 0 ]; then + usage >&2 + exit 1 +fi + +for module in "${modules[@]}"; do + if grep -q zend_extension_entry "$module"; then + # https://wiki.php.net/internals/extensions#loading_zend_extensions + line="zend_extension=$(readlink -f "$module")" + else + line="extension=$module" + fi + + ext="$(basename "$module")" + ext="${ext%.*}" + if php -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="/usr/local/etc/php/conf.d/docker-php-ext-$ext.ini" + if ! grep -q "$line" "$ini" 2>/dev/null; then + echo "$line" >> "$ini" + fi +done diff --git a/5.5/zts/docker-php-ext-install b/5.5/zts/docker-php-ext-install new file mode 100755 index 0000000000..2c488cce1c --- /dev/null +++ b/5.5/zts/docker-php-ext-install @@ -0,0 +1,69 @@ +#!/bin/bash +set -e + +cd /usr/src/php/ext + +usage() { + echo "usage: $0 [-jN] 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:' + echo $(find /usr/src/php/ext -mindepth 2 -maxdepth 2 -type f -name 'config.m4' | cut -d/ -f6 | sort) +} + +opts="$(getopt -o 'h?j:' --long 'help,jobs:' -- "$@" || { usage >&2 && false; })" +eval set -- "$opts" + +j=1 +while true; do + flag="$1" + shift + case "$flag" in + --help|-h|'-?') usage && exit 0 ;; + --jobs|-j) j="$1" && shift ;; + --) break ;; + *) + { + echo "error: unknown flag: $flag" + usage + } >&2 + exit 1 + ;; + esac +done + +exts=() +while [ $# -gt 0 ]; do + ext="$1" + shift + if [ -z "$ext" ]; then + continue + fi + if [ ! -d "$ext" ]; then + echo >&2 "error: $(pwd -P)/$ext does not exist" + echo >&2 + usage >&2 + exit 1 + fi + exts+=( "$ext" ) +done + +if [ "${#exts[@]}" -eq 0 ]; then + usage >&2 + exit 1 +fi + +for ext in "${exts[@]}"; do + ( + cd "$ext" + [ -e Makefile ] || docker-php-ext-configure "$ext" + make -j"$j" + make -j"$j" install + find modules -maxdepth 1 -name '*.so' -exec basename '{}' ';' | xargs --no-run-if-empty --verbose docker-php-ext-enable + make -j"$j" clean + ) +done diff --git a/5.6/zts/Dockerfile b/5.6/zts/Dockerfile new file mode 100644 index 0000000000..200a52d67a --- /dev/null +++ b/5.6/zts/Dockerfile @@ -0,0 +1,68 @@ +FROM debian:jessie + +# persistent / runtime deps +RUN apt-get update && apt-get install -y ca-certificates curl librecode0 libsqlite3-0 libxml2 --no-install-recommends && rm -r /var/lib/apt/lists/* + +# phpize deps +RUN apt-get update && apt-get install -y autoconf file g++ gcc libc-dev make pkg-config re2c --no-install-recommends && rm -r /var/lib/apt/lists/* + +ENV PHP_INI_DIR /usr/local/etc/php +RUN mkdir -p $PHP_INI_DIR/conf.d + +#### +ENV PHP_EXTRA_CONFIGURE_ARGS --enable-maintainer-zts +#### + +ENV GPG_KEYS 0BD78B5F97500D450838F95DFE857D9A90D90EC1 6E4F6AB321FDC07F2C332E3AC2BF0BC433CFC8B3 +RUN set -xe \ + && for key in $GPG_KEYS; do \ + gpg --keyserver ha.pool.sks-keyservers.net --recv-keys "$key"; \ + done + +ENV PHP_VERSION 5.6.16 +ENV PHP_FILENAME php-5.6.16.tar.xz +ENV PHP_SHA256 8ef43271d9bd8cc8f8d407d3ba569de9fa14a28985ae97c76085bb50d597de98 + +# --enable-mysqlnd is included below because it's harder to compile after the fact the extensions are (since it's a plugin for several extensions, not an extension in itself) +RUN buildDeps=" \ + $PHP_EXTRA_BUILD_DEPS \ + libcurl4-openssl-dev \ + libreadline6-dev \ + librecode-dev \ + libsqlite3-dev \ + libssl-dev \ + libxml2-dev \ + xz-utils \ + " \ + && set -x \ + && apt-get update && apt-get install -y $buildDeps --no-install-recommends && rm -rf /var/lib/apt/lists/* \ + && curl -fSL "http://php.net/get/$PHP_FILENAME/from/this/mirror" -o "$PHP_FILENAME" \ + && echo "$PHP_SHA256 *$PHP_FILENAME" | sha256sum -c - \ + && curl -fSL "http://php.net/get/$PHP_FILENAME.asc/from/this/mirror" -o "$PHP_FILENAME.asc" \ + && gpg --verify "$PHP_FILENAME.asc" \ + && mkdir -p /usr/src/php \ + && tar -xf "$PHP_FILENAME" -C /usr/src/php --strip-components=1 \ + && rm "$PHP_FILENAME"* \ + && cd /usr/src/php \ + && ./configure \ + --with-config-file-path="$PHP_INI_DIR" \ + --with-config-file-scan-dir="$PHP_INI_DIR/conf.d" \ + $PHP_EXTRA_CONFIGURE_ARGS \ + --disable-cgi \ + --enable-mysqlnd \ + --with-curl \ + --with-openssl \ + --with-readline \ + --with-recode \ + --with-zlib \ + && make -j"$(nproc)" \ + && make install \ + && { find /usr/local/bin /usr/local/sbin -type f -executable -exec strip --strip-all '{}' + || true; } \ + && apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false -o APT::AutoRemove::SuggestsImportant=false $buildDeps \ + && make clean + +COPY docker-php-ext-* /usr/local/bin/ + +#### +CMD ["php", "-a"] +#### diff --git a/5.6/zts/docker-php-ext-configure b/5.6/zts/docker-php-ext-configure new file mode 100755 index 0000000000..3d21b5bbca --- /dev/null +++ b/5.6/zts/docker-php-ext-configure @@ -0,0 +1,19 @@ +#!/bin/bash +set -e + +ext="$1" +extDir="/usr/src/php/ext/$ext" +if [ -z "$ext" -o ! -d "$extDir" ]; then + echo >&2 "usage: $0 ext-name [configure flags]" + echo >&2 " ie: $0 gd --with-jpeg-dir=/usr/local/something" + echo >&2 + echo >&2 'Possible values for ext-name:' + echo >&2 $(find /usr/src/php/ext -mindepth 2 -maxdepth 2 -type f -name 'config.m4' | cut -d/ -f6 | sort) + exit 1 +fi +shift + +set -x +cd "$extDir" +phpize +./configure "$@" diff --git a/5.6/zts/docker-php-ext-enable b/5.6/zts/docker-php-ext-enable new file mode 100755 index 0000000000..f84e955450 --- /dev/null +++ b/5.6/zts/docker-php-ext-enable @@ -0,0 +1,63 @@ +#!/bin/bash +set -e + +cd "$(php -r 'echo ini_get("extension_dir");')" + +usage() { + echo "usage: $0 module-name [module-name ...]" + echo " ie: $0 gd mysqli" + echo " $0 pdo pdo_mysql" + echo + echo 'Possible values for module-name:' + echo $(find -maxdepth 1 -type f -name '*.so' -exec basename '{}' ';' | sort) +} + +modules=() +while [ $# -gt 0 ]; do + module="$1" + shift + if [ -z "$module" ]; then + continue + fi + if [ -f "$module.so" -a ! -f "$module" ]; then + # allow ".so" to be optional + module+='.so' + fi + if [ ! -f "$module" ]; then + echo >&2 "error: $(readlink -f "$module") does not exist" + echo >&2 + usage >&2 + exit 1 + fi + modules+=( "$module" ) +done + +if [ "${#modules[@]}" -eq 0 ]; then + usage >&2 + exit 1 +fi + +for module in "${modules[@]}"; do + if grep -q zend_extension_entry "$module"; then + # https://wiki.php.net/internals/extensions#loading_zend_extensions + line="zend_extension=$(readlink -f "$module")" + else + line="extension=$module" + fi + + ext="$(basename "$module")" + ext="${ext%.*}" + if php -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="/usr/local/etc/php/conf.d/docker-php-ext-$ext.ini" + if ! grep -q "$line" "$ini" 2>/dev/null; then + echo "$line" >> "$ini" + fi +done diff --git a/5.6/zts/docker-php-ext-install b/5.6/zts/docker-php-ext-install new file mode 100755 index 0000000000..2c488cce1c --- /dev/null +++ b/5.6/zts/docker-php-ext-install @@ -0,0 +1,69 @@ +#!/bin/bash +set -e + +cd /usr/src/php/ext + +usage() { + echo "usage: $0 [-jN] 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:' + echo $(find /usr/src/php/ext -mindepth 2 -maxdepth 2 -type f -name 'config.m4' | cut -d/ -f6 | sort) +} + +opts="$(getopt -o 'h?j:' --long 'help,jobs:' -- "$@" || { usage >&2 && false; })" +eval set -- "$opts" + +j=1 +while true; do + flag="$1" + shift + case "$flag" in + --help|-h|'-?') usage && exit 0 ;; + --jobs|-j) j="$1" && shift ;; + --) break ;; + *) + { + echo "error: unknown flag: $flag" + usage + } >&2 + exit 1 + ;; + esac +done + +exts=() +while [ $# -gt 0 ]; do + ext="$1" + shift + if [ -z "$ext" ]; then + continue + fi + if [ ! -d "$ext" ]; then + echo >&2 "error: $(pwd -P)/$ext does not exist" + echo >&2 + usage >&2 + exit 1 + fi + exts+=( "$ext" ) +done + +if [ "${#exts[@]}" -eq 0 ]; then + usage >&2 + exit 1 +fi + +for ext in "${exts[@]}"; do + ( + cd "$ext" + [ -e Makefile ] || docker-php-ext-configure "$ext" + make -j"$j" + make -j"$j" install + find modules -maxdepth 1 -name '*.so' -exec basename '{}' ';' | xargs --no-run-if-empty --verbose docker-php-ext-enable + make -j"$j" clean + ) +done diff --git a/7.0/zts/Dockerfile b/7.0/zts/Dockerfile new file mode 100644 index 0000000000..fe257d1ee7 --- /dev/null +++ b/7.0/zts/Dockerfile @@ -0,0 +1,68 @@ +FROM debian:jessie + +# persistent / runtime deps +RUN apt-get update && apt-get install -y ca-certificates curl librecode0 libsqlite3-0 libxml2 --no-install-recommends && rm -r /var/lib/apt/lists/* + +# phpize deps +RUN apt-get update && apt-get install -y autoconf file g++ gcc libc-dev make pkg-config re2c --no-install-recommends && rm -r /var/lib/apt/lists/* + +ENV PHP_INI_DIR /usr/local/etc/php +RUN mkdir -p $PHP_INI_DIR/conf.d + +#### +ENV PHP_EXTRA_CONFIGURE_ARGS --enable-maintainer-zts +#### + +ENV GPG_KEYS 1A4E8B7277C42E53DBA9C7B9BCAA30EA9C0D5763 +RUN set -xe \ + && for key in $GPG_KEYS; do \ + gpg --keyserver ha.pool.sks-keyservers.net --recv-keys "$key"; \ + done + +ENV PHP_VERSION 7.0.1 +ENV PHP_FILENAME php-7.0.1.tar.xz +ENV PHP_SHA256 84fcb8b9c61f70db802d3b6636c6ba602470a375e593375c0c744483aa0c0357 + +# --enable-mysqlnd is included below because it's harder to compile after the fact the extensions are (since it's a plugin for several extensions, not an extension in itself) +RUN buildDeps=" \ + $PHP_EXTRA_BUILD_DEPS \ + libcurl4-openssl-dev \ + libreadline6-dev \ + librecode-dev \ + libsqlite3-dev \ + libssl-dev \ + libxml2-dev \ + xz-utils \ + " \ + && set -x \ + && apt-get update && apt-get install -y $buildDeps --no-install-recommends && rm -rf /var/lib/apt/lists/* \ + && curl -fSL "http://php.net/get/$PHP_FILENAME/from/this/mirror" -o "$PHP_FILENAME" \ + && echo "$PHP_SHA256 *$PHP_FILENAME" | sha256sum -c - \ + && curl -fSL "http://php.net/get/$PHP_FILENAME.asc/from/this/mirror" -o "$PHP_FILENAME.asc" \ + && gpg --verify "$PHP_FILENAME.asc" \ + && mkdir -p /usr/src/php \ + && tar -xf "$PHP_FILENAME" -C /usr/src/php --strip-components=1 \ + && rm "$PHP_FILENAME"* \ + && cd /usr/src/php \ + && ./configure \ + --with-config-file-path="$PHP_INI_DIR" \ + --with-config-file-scan-dir="$PHP_INI_DIR/conf.d" \ + $PHP_EXTRA_CONFIGURE_ARGS \ + --disable-cgi \ + --enable-mysqlnd \ + --with-curl \ + --with-openssl \ + --with-readline \ + --with-recode \ + --with-zlib \ + && make -j"$(nproc)" \ + && make install \ + && { find /usr/local/bin /usr/local/sbin -type f -executable -exec strip --strip-all '{}' + || true; } \ + && apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false -o APT::AutoRemove::SuggestsImportant=false $buildDeps \ + && make clean + +COPY docker-php-ext-* /usr/local/bin/ + +#### +CMD ["php", "-a"] +#### diff --git a/7.0/zts/docker-php-ext-configure b/7.0/zts/docker-php-ext-configure new file mode 100755 index 0000000000..3d21b5bbca --- /dev/null +++ b/7.0/zts/docker-php-ext-configure @@ -0,0 +1,19 @@ +#!/bin/bash +set -e + +ext="$1" +extDir="/usr/src/php/ext/$ext" +if [ -z "$ext" -o ! -d "$extDir" ]; then + echo >&2 "usage: $0 ext-name [configure flags]" + echo >&2 " ie: $0 gd --with-jpeg-dir=/usr/local/something" + echo >&2 + echo >&2 'Possible values for ext-name:' + echo >&2 $(find /usr/src/php/ext -mindepth 2 -maxdepth 2 -type f -name 'config.m4' | cut -d/ -f6 | sort) + exit 1 +fi +shift + +set -x +cd "$extDir" +phpize +./configure "$@" diff --git a/7.0/zts/docker-php-ext-enable b/7.0/zts/docker-php-ext-enable new file mode 100755 index 0000000000..f84e955450 --- /dev/null +++ b/7.0/zts/docker-php-ext-enable @@ -0,0 +1,63 @@ +#!/bin/bash +set -e + +cd "$(php -r 'echo ini_get("extension_dir");')" + +usage() { + echo "usage: $0 module-name [module-name ...]" + echo " ie: $0 gd mysqli" + echo " $0 pdo pdo_mysql" + echo + echo 'Possible values for module-name:' + echo $(find -maxdepth 1 -type f -name '*.so' -exec basename '{}' ';' | sort) +} + +modules=() +while [ $# -gt 0 ]; do + module="$1" + shift + if [ -z "$module" ]; then + continue + fi + if [ -f "$module.so" -a ! -f "$module" ]; then + # allow ".so" to be optional + module+='.so' + fi + if [ ! -f "$module" ]; then + echo >&2 "error: $(readlink -f "$module") does not exist" + echo >&2 + usage >&2 + exit 1 + fi + modules+=( "$module" ) +done + +if [ "${#modules[@]}" -eq 0 ]; then + usage >&2 + exit 1 +fi + +for module in "${modules[@]}"; do + if grep -q zend_extension_entry "$module"; then + # https://wiki.php.net/internals/extensions#loading_zend_extensions + line="zend_extension=$(readlink -f "$module")" + else + line="extension=$module" + fi + + ext="$(basename "$module")" + ext="${ext%.*}" + if php -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="/usr/local/etc/php/conf.d/docker-php-ext-$ext.ini" + if ! grep -q "$line" "$ini" 2>/dev/null; then + echo "$line" >> "$ini" + fi +done diff --git a/7.0/zts/docker-php-ext-install b/7.0/zts/docker-php-ext-install new file mode 100755 index 0000000000..2c488cce1c --- /dev/null +++ b/7.0/zts/docker-php-ext-install @@ -0,0 +1,69 @@ +#!/bin/bash +set -e + +cd /usr/src/php/ext + +usage() { + echo "usage: $0 [-jN] 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:' + echo $(find /usr/src/php/ext -mindepth 2 -maxdepth 2 -type f -name 'config.m4' | cut -d/ -f6 | sort) +} + +opts="$(getopt -o 'h?j:' --long 'help,jobs:' -- "$@" || { usage >&2 && false; })" +eval set -- "$opts" + +j=1 +while true; do + flag="$1" + shift + case "$flag" in + --help|-h|'-?') usage && exit 0 ;; + --jobs|-j) j="$1" && shift ;; + --) break ;; + *) + { + echo "error: unknown flag: $flag" + usage + } >&2 + exit 1 + ;; + esac +done + +exts=() +while [ $# -gt 0 ]; do + ext="$1" + shift + if [ -z "$ext" ]; then + continue + fi + if [ ! -d "$ext" ]; then + echo >&2 "error: $(pwd -P)/$ext does not exist" + echo >&2 + usage >&2 + exit 1 + fi + exts+=( "$ext" ) +done + +if [ "${#exts[@]}" -eq 0 ]; then + usage >&2 + exit 1 +fi + +for ext in "${exts[@]}"; do + ( + cd "$ext" + [ -e Makefile ] || docker-php-ext-configure "$ext" + make -j"$j" + make -j"$j" install + find modules -maxdepth 1 -name '*.so' -exec basename '{}' ';' | xargs --no-run-if-empty --verbose docker-php-ext-enable + make -j"$j" clean + ) +done diff --git a/update.sh b/update.sh index 332be00266..087c2f0673 100755 --- a/update.sh +++ b/update.sh @@ -65,7 +65,7 @@ for version in "${versions[@]}"; do ( set -x; cp docker-php-ext-* "$version/" ) - for variant in apache fpm; do + for variant in apache fpm zts; do echo "Generating $version/$variant/Dockerfile from $variant-Dockerfile-block-*" awk ' $1 == "####" { ia = 0 } diff --git a/zts-Dockerfile-block-1 b/zts-Dockerfile-block-1 new file mode 100644 index 0000000000..e471e3ee31 --- /dev/null +++ b/zts-Dockerfile-block-1 @@ -0,0 +1 @@ +ENV PHP_EXTRA_CONFIGURE_ARGS --enable-maintainer-zts diff --git a/zts-Dockerfile-block-2 b/zts-Dockerfile-block-2 new file mode 100644 index 0000000000..fad9699c80 --- /dev/null +++ b/zts-Dockerfile-block-2 @@ -0,0 +1 @@ +CMD ["php", "-a"] From 675018a6943b8d06bc3c971812378c368f3f9ddf Mon Sep 17 00:00:00 2001 From: Mikk Tendermann Date: Wed, 6 Jan 2016 21:28:20 +0200 Subject: [PATCH 2/2] add travis testing to zts --- .travis.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.travis.yml b/.travis.yml index 48de3dfd1a..c67b3aaa91 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,12 +5,15 @@ env: - VERSION=7.0 VARIANT= - VERSION=7.0 VARIANT=apache - VERSION=7.0 VARIANT=fpm + - VERSION=7.0 VARIANT=zts - VERSION=5.6 VARIANT= - VERSION=5.6 VARIANT=apache - VERSION=5.6 VARIANT=fpm + - VERSION=5.6 VARIANT=zts - VERSION=5.5 VARIANT= - VERSION=5.5 VARIANT=apache - VERSION=5.5 VARIANT=fpm + - VERSION=5.5 VARIANT=zts install: - git clone https://github.com/docker-library/official-images.git ~/official-images