| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602 |
- #!/bin/sh
- export MC="-j$(nproc)"
- echo
- echo "============================================"
- echo "Install extensions from : install.sh"
- echo "PHP version : ${PHP_VERSION}"
- echo "Extra Extensions : ${PHP_EXTENSIONS}"
- echo "Multicore Compilation : ${MC}"
- echo "Container package url : ${CONTAINER_PACKAGE_URL}"
- echo "Work directory : ${PWD}"
- echo "============================================"
- echo
- if [ "${PHP_EXTENSIONS}" != "" ]; then
- apk --update add --no-cache --virtual .build-deps autoconf g++ libtool make curl-dev gettext-dev linux-headers
- fi
- export EXTENSIONS=",${PHP_EXTENSIONS},"
- #
- # Check if current php version is greater than or equal to
- # specific version.
- #
- # For example, to check if current php is greater than or
- # equal to PHP 7.0:
- #
- # isPhpVersionGreaterOrEqual 7 0
- #
- # Param 1: Specific PHP Major version
- # Param 2: Specific PHP Minor version
- # Return : 1 if greater than or equal to, 0 if less than
- #
- isPhpVersionGreaterOrEqual()
- {
- local PHP_MAJOR_VERSION=$(php -r "echo PHP_MAJOR_VERSION;")
- local PHP_MINOR_VERSION=$(php -r "echo PHP_MINOR_VERSION;")
- if [[ "$PHP_MAJOR_VERSION" -gt "$1" || "$PHP_MAJOR_VERSION" -eq "$1" && "$PHP_MINOR_VERSION" -ge "$2" ]]; then
- return 1;
- else
- return 0;
- fi
- }
- #
- # Install extension from package file(.tgz),
- # For example:
- #
- # installExtensionFromTgz redis-5.0.2
- #
- # Param 1: Package name with version
- # Param 2: enable options
- #
- installExtensionFromTgz()
- {
- tgzName=$1
- extensionName="${tgzName%%-*}"
- mkdir ${extensionName}
- tar -xf ${tgzName}.tgz -C ${extensionName} --strip-components=1
- ( cd ${extensionName} && phpize && ./configure && make ${MC} && make install )
- docker-php-ext-enable ${extensionName} $2
- }
- if [[ -z "${EXTENSIONS##*,pdo_mysql,*}" ]]; then
- echo "---------- Install pdo_mysql ----------"
- docker-php-ext-install ${MC} pdo_mysql
- fi
- if [[ -z "${EXTENSIONS##*,pcntl,*}" ]]; then
- echo "---------- Install pcntl ----------"
- docker-php-ext-install ${MC} pcntl
- fi
- if [[ -z "${EXTENSIONS##*,mysqli,*}" ]]; then
- echo "---------- Install mysqli ----------"
- docker-php-ext-install ${MC} mysqli
- fi
- if [[ -z "${EXTENSIONS##*,mbstring,*}" ]]; then
- echo "---------- mbstring is installed ----------"
- fi
- if [[ -z "${EXTENSIONS##*,exif,*}" ]]; then
- echo "---------- Install exif ----------"
- docker-php-ext-install ${MC} exif
- fi
- if [[ -z "${EXTENSIONS##*,bcmath,*}" ]]; then
- echo "---------- Install bcmath ----------"
- docker-php-ext-install ${MC} bcmath
- fi
- if [[ -z "${EXTENSIONS##*,calendar,*}" ]]; then
- echo "---------- Install calendar ----------"
- docker-php-ext-install ${MC} calendar
- fi
- if [[ -z "${EXTENSIONS##*,zend_test,*}" ]]; then
- echo "---------- Install zend_test ----------"
- docker-php-ext-install ${MC} zend_test
- fi
- if [[ -z "${EXTENSIONS##*,opcache,*}" ]]; then
- echo "---------- Install opcache ----------"
- docker-php-ext-install opcache
- fi
- if [[ -z "${EXTENSIONS##*,sockets,*}" ]]; then
- echo "---------- Install sockets ----------"
- docker-php-ext-install ${MC} sockets
- fi
- if [[ -z "${EXTENSIONS##*,gettext,*}" ]]; then
- echo "---------- Install gettext ----------"
- docker-php-ext-install ${MC} gettext
- fi
- if [[ -z "${EXTENSIONS##*,shmop,*}" ]]; then
- echo "---------- Install shmop ----------"
- docker-php-ext-install ${MC} shmop
- fi
- if [[ -z "${EXTENSIONS##*,sysvmsg,*}" ]]; then
- echo "---------- Install sysvmsg ----------"
- docker-php-ext-install ${MC} sysvmsg
- fi
- if [[ -z "${EXTENSIONS##*,sysvsem,*}" ]]; then
- echo "---------- Install sysvsem ----------"
- docker-php-ext-install ${MC} sysvsem
- fi
- if [[ -z "${EXTENSIONS##*,sysvshm,*}" ]]; then
- echo "---------- Install sysvshm ----------"
- docker-php-ext-install ${MC} sysvshm
- fi
- if [[ -z "${EXTENSIONS##*,pdo_firebird,*}" ]]; then
- echo "---------- Install pdo_firebird ----------"
- docker-php-ext-install ${MC} pdo_firebird
- fi
- if [[ -z "${EXTENSIONS##*,pdo_dblib,*}" ]]; then
- echo "---------- Install pdo_dblib ----------"
- docker-php-ext-install ${MC} pdo_dblib
- fi
- if [[ -z "${EXTENSIONS##*,pdo_oci,*}" ]]; then
- echo "---------- Install pdo_oci ----------"
- docker-php-ext-install ${MC} pdo_oci
- fi
- if [[ -z "${EXTENSIONS##*,pdo_odbc,*}" ]]; then
- echo "---------- Install pdo_odbc ----------"
- docker-php-ext-install ${MC} pdo_odbc
- fi
- if [[ -z "${EXTENSIONS##*,pdo_pgsql,*}" ]]; then
- echo "---------- Install pdo_pgsql ----------"
- apk --no-cache add postgresql-dev \
- && docker-php-ext-install ${MC} pdo_pgsql
- fi
- if [[ -z "${EXTENSIONS##*,pgsql,*}" ]]; then
- echo "---------- Install pgsql ----------"
- apk --no-cache add postgresql-dev \
- && docker-php-ext-install ${MC} pgsql
- fi
- if [[ -z "${EXTENSIONS##*,oci8,*}" ]]; then
- echo "---------- Install oci8 ----------"
- docker-php-ext-install ${MC} oci8
- fi
- if [[ -z "${EXTENSIONS##*,odbc,*}" ]]; then
- echo "---------- Install odbc ----------"
- docker-php-ext-install ${MC} odbc
- fi
- if [[ -z "${EXTENSIONS##*,dba,*}" ]]; then
- echo "---------- Install dba ----------"
- docker-php-ext-install ${MC} dba
- fi
- if [[ -z "${EXTENSIONS##*,interbase,*}" ]]; then
- echo "---------- Install interbase ----------"
- echo "Alpine linux do not support interbase/firebird!!!"
- #docker-php-ext-install ${MC} interbase
- fi
- if [[ -z "${EXTENSIONS##*,gd,*}" ]]; then
- echo "---------- Install gd ----------"
- isPhpVersionGreaterOrEqual 7 4
- if [[ "$?" = "1" ]]; then
- # "--with-xxx-dir" was removed from php 7.4,
- # issue: https://github.com/docker-library/php/issues/912
- options="--with-freetype --with-jpeg"
- else
- options="--with-gd --with-freetype-dir=/usr/include/ --with-png-dir=/usr/include/ --with-jpeg-dir=/usr/include/"
- fi
- apk add --no-cache \
- freetype \
- freetype-dev \
- libpng \
- libpng-dev \
- libjpeg-turbo \
- libjpeg-turbo-dev \
- && docker-php-ext-configure gd ${options} \
- && docker-php-ext-install ${MC} gd \
- && apk del \
- freetype-dev \
- libpng-dev \
- libjpeg-turbo-dev
- fi
- if [[ -z "${EXTENSIONS##*,intl,*}" ]]; then
- echo "---------- Install intl ----------"
- apk add --no-cache icu-dev
- docker-php-ext-install ${MC} intl
- fi
- if [[ -z "${EXTENSIONS##*,bz2,*}" ]]; then
- echo "---------- Install bz2 ----------"
- apk add --no-cache bzip2-dev
- docker-php-ext-install ${MC} bz2
- fi
- if [[ -z "${EXTENSIONS##*,soap,*}" ]]; then
- echo "---------- Install soap ----------"
- apk add --no-cache libxml2-dev
- docker-php-ext-install ${MC} soap
- fi
- if [[ -z "${EXTENSIONS##*,xsl,*}" ]]; then
- echo "---------- Install xsl ----------"
- apk add --no-cache libxml2-dev libxslt-dev
- docker-php-ext-install ${MC} xsl
- fi
- if [[ -z "${EXTENSIONS##*,xmlrpc,*}" ]]; then
- echo "---------- Install xmlrpc ----------"
- apk add --no-cache libxml2-dev libxslt-dev
- docker-php-ext-install ${MC} xmlrpc
- fi
- if [[ -z "${EXTENSIONS##*,wddx,*}" ]]; then
- echo "---------- Install wddx ----------"
- apk add --no-cache libxml2-dev libxslt-dev
- docker-php-ext-install ${MC} wddx
- fi
- if [[ -z "${EXTENSIONS##*,curl,*}" ]]; then
- echo "---------- curl is installed ----------"
- fi
- if [[ -z "${EXTENSIONS##*,readline,*}" ]]; then
- echo "---------- Install readline ----------"
- apk add --no-cache readline-dev
- apk add --no-cache libedit-dev
- docker-php-ext-install ${MC} readline
- fi
- if [[ -z "${EXTENSIONS##*,snmp,*}" ]]; then
- echo "---------- Install snmp ----------"
- apk add --no-cache net-snmp-dev
- docker-php-ext-install ${MC} snmp
- fi
- if [[ -z "${EXTENSIONS##*,pspell,*}" ]]; then
- echo "---------- Install pspell ----------"
- apk add --no-cache aspell-dev
- apk add --no-cache aspell-en
- docker-php-ext-install ${MC} pspell
- fi
- if [[ -z "${EXTENSIONS##*,recode,*}" ]]; then
- echo "---------- Install recode ----------"
- apk add --no-cache recode-dev
- docker-php-ext-install ${MC} recode
- fi
- if [[ -z "${EXTENSIONS##*,tidy,*}" ]]; then
- echo "---------- Install tidy ----------"
- apk add --no-cache tidyhtml-dev
- # Fix: https://github.com/htacg/tidy-html5/issues/235
- ln -s /usr/include/tidybuffio.h /usr/include/buffio.h
- docker-php-ext-install ${MC} tidy
- fi
- if [[ -z "${EXTENSIONS##*,gmp,*}" ]]; then
- echo "---------- Install gmp ----------"
- apk add --no-cache gmp-dev
- docker-php-ext-install ${MC} gmp
- fi
- if [[ -z "${EXTENSIONS##*,imap,*}" ]]; then
- echo "---------- Install imap ----------"
- apk add --no-cache imap-dev
- docker-php-ext-configure imap --with-imap --with-imap-ssl
- docker-php-ext-install ${MC} imap
- fi
- if [[ -z "${EXTENSIONS##*,ldap,*}" ]]; then
- echo "---------- Install ldap ----------"
- apk add --no-cache ldb-dev
- apk add --no-cache openldap-dev
- docker-php-ext-install ${MC} ldap
- fi
- if [[ -z "${EXTENSIONS##*,imagick,*}" ]]; then
- echo "---------- Install imagick ----------"
- apk add --no-cache file-dev
- apk add --no-cache imagemagick-dev
- printf "\n" | pecl install imagick-3.4.4
- docker-php-ext-enable imagick
- fi
- if [[ -z "${EXTENSIONS##*,rar,*}" ]]; then
- echo "---------- Install rar ----------"
- printf "\n" | pecl install rar
- docker-php-ext-enable rar
- fi
- if [[ -z "${EXTENSIONS##*,ast,*}" ]]; then
- echo "---------- Install ast ----------"
- printf "\n" | pecl install ast
- docker-php-ext-enable ast
- fi
- if [[ -z "${EXTENSIONS##*,msgpack,*}" ]]; then
- echo "---------- Install msgpack ----------"
- printf "\n" | pecl install msgpack
- docker-php-ext-enable msgpack
- fi
- if [[ -z "${EXTENSIONS##*,igbinary,*}" ]]; then
- echo "---------- Install igbinary ----------"
- printf "\n" | pecl install igbinary
- docker-php-ext-enable igbinary
- fi
- if [[ -z "${EXTENSIONS##*,yac,*}" ]]; then
- echo "---------- Install yac ----------"
- printf "\n" | pecl install yac-2.0.2
- docker-php-ext-enable yac
- fi
- if [[ -z "${EXTENSIONS##*,yar,*}" ]]; then
- isPhpVersionGreaterOrEqual 7 0
- if [[ "$?" = "1" ]]; then
- echo "---------- Install yar ----------"
- printf "\n" | pecl install yar
- docker-php-ext-enable yar
- else
- echo "yar requires PHP >= 7.0.0, installed version is ${PHP_VERSION}"
- fi
- fi
- if [[ -z "${EXTENSIONS##*,yaconf,*}" ]]; then
- echo "---------- Install yaconf ----------"
- printf "\n" | pecl install yaconf
- docker-php-ext-enable yaconf
- fi
- if [[ -z "${EXTENSIONS##*,seaslog,*}" ]]; then
- echo "---------- Install seaslog ----------"
- printf "\n" | pecl install seaslog
- docker-php-ext-enable seaslog
- fi
- if [[ -z "${EXTENSIONS##*,varnish,*}" ]]; then
- echo "---------- Install varnish ----------"
- apk add --no-cache varnish-dev
- printf "\n" | pecl install varnish
- docker-php-ext-enable varnish
- fi
- if [[ -z "${EXTENSIONS##*,pdo_sqlsrv,*}" ]]; then
- isPhpVersionGreaterOrEqual 7 1
- if [[ "$?" = "1" ]]; then
- echo "---------- Install pdo_sqlsrv ----------"
- apk add --no-cache unixodbc-dev
- printf "\n" | pecl install pdo_sqlsrv
- docker-php-ext-enable pdo_sqlsrv
- else
- echo "pdo_sqlsrv requires PHP >= 7.1.0, installed version is ${PHP_VERSION}"
- fi
- fi
- if [[ -z "${EXTENSIONS##*,sqlsrv,*}" ]]; then
- isPhpVersionGreaterOrEqual 7 1
- if [[ "$?" = "1" ]]; then
- echo "---------- Install sqlsrv ----------"
- apk add --no-cache unixodbc-dev
- printf "\n" | pecl install sqlsrv
- docker-php-ext-enable sqlsrv
- else
- echo "pdo_sqlsrv requires PHP >= 7.1.0, installed version is ${PHP_VERSION}"
- fi
- fi
- if [[ -z "${EXTENSIONS##*,mcrypt,*}" ]]; then
- isPhpVersionGreaterOrEqual 7 2
- if [[ "$?" = "1" ]]; then
- echo "---------- mcrypt was REMOVED from PHP 7.2.0 ----------"
- else
- echo "---------- Install mcrypt ----------"
- apk add --no-cache libmcrypt-dev \
- && docker-php-ext-install ${MC} mcrypt
- fi
- fi
- if [[ -z "${EXTENSIONS##*,mysql,*}" ]]; then
- isPhpVersionGreaterOrEqual 7 0
- if [[ "$?" = "1" ]]; then
- echo "---------- mysql was REMOVED from PHP 7.0.0 ----------"
- else
- echo "---------- Install mysql ----------"
- docker-php-ext-install ${MC} mysql
- fi
- fi
- if [[ -z "${EXTENSIONS##*,sodium,*}" ]]; then
- isPhpVersionGreaterOrEqual 7 2
- if [[ "$?" = "1" ]]; then
- echo
- echo "Sodium is bundled with PHP from PHP 7.2.0"
- echo
- else
- echo "---------- Install sodium ----------"
- apk add --no-cache libsodium-dev
- docker-php-ext-install ${MC} sodium
- fi
- fi
- if [[ -z "${EXTENSIONS##*,amqp,*}" ]]; then
- echo "---------- Install amqp ----------"
- apk add --no-cache rabbitmq-c-dev
- installExtensionFromTgz amqp-1.9.4
- fi
- if [[ -z "${EXTENSIONS##*,redis,*}" ]]; then
- echo "---------- Install redis ----------"
- isPhpVersionGreaterOrEqual 7 0
- if [[ "$?" = "1" ]]; then
- installExtensionFromTgz redis-5.0.2
- else
- printf "\n" | pecl install redis-4.3.0
- docker-php-ext-enable redis
- fi
- fi
- if [[ -z "${EXTENSIONS##*,apcu,*}" ]]; then
- echo "---------- Install apcu ----------"
- installExtensionFromTgz apcu-5.1.17
- fi
- if [[ -z "${EXTENSIONS##*,memcached,*}" ]]; then
- echo "---------- Install memcached ----------"
- apk add --no-cache libmemcached-dev zlib-dev
- isPhpVersionGreaterOrEqual 7 0
- if [[ "$?" = "1" ]]; then
- printf "\n" | pecl install memcached-3.1.3
- else
- printf "\n" | pecl install memcached-2.2.0
- fi
- docker-php-ext-enable memcached
- fi
- if [[ -z "${EXTENSIONS##*,memcache,*}" ]]; then
- echo "---------- Install memcache ----------"
- isPhpVersionGreaterOrEqual 7 0
- if [[ "$?" = "1" ]]; then
- installExtensionFromTgz memcache-4.0.5.2
- else
- installExtensionFromTgz memcache-2.2.6
- fi
- fi
- if [[ -z "${EXTENSIONS##*,xdebug,*}" ]]; then
- echo "---------- Install xdebug ----------"
- isPhpVersionGreaterOrEqual 7 0
- if [[ "$?" = "1" ]]; then
- isPhpVersionGreaterOrEqual 7 4
- if [[ "$?" = "1" ]]; then
- installExtensionFromTgz xdebug-2.9.2
- else
- installExtensionFromTgz xdebug-2.6.1
- fi
- else
- installExtensionFromTgz xdebug-2.5.5
- fi
- fi
- if [[ -z "${EXTENSIONS##*,event,*}" ]]; then
- echo "---------- Install event ----------"
- apk add --no-cache libevent-dev
- export is_sockets_installed=$(php -r "echo extension_loaded('sockets');")
- if [[ "${is_sockets_installed}" = "" ]]; then
- echo "---------- event is depend on sockets, install sockets first ----------"
- docker-php-ext-install sockets
- fi
- echo "---------- Install event again ----------"
- installExtensionFromTgz event-2.5.3 "--ini-name event.ini"
- fi
- if [[ -z "${EXTENSIONS##*,mongodb,*}" ]]; then
- echo "---------- Install mongodb ----------"
- installExtensionFromTgz mongodb-1.5.5
- fi
- if [[ -z "${EXTENSIONS##*,yaf,*}" ]]; then
- echo "---------- Install yaf ----------"
- isPhpVersionGreaterOrEqual 7 0
- if [[ "$?" = "1" ]]; then
- printf "\n" | pecl install yaf
- docker-php-ext-enable yaf
- else
- installExtensionFromTgz yaf-2.3.5
- fi
- fi
- if [[ -z "${EXTENSIONS##*,swoole,*}" ]]; then
- echo "---------- Install swoole ----------"
- isPhpVersionGreaterOrEqual 7 0
- if [[ "$?" = "1" ]]; then
- installExtensionFromTgz swoole-4.4.2
- else
- installExtensionFromTgz swoole-2.0.11
- fi
- fi
- if [[ -z "${EXTENSIONS##*,zip,*}" ]]; then
- echo "---------- Install zip ----------"
- # Fix: https://github.com/docker-library/php/issues/797
- apk add --no-cache libzip-dev
- isPhpVersionGreaterOrEqual 7 4
- if [[ "$?" != "1" ]]; then
- docker-php-ext-configure zip --with-libzip=/usr/include
- fi
- docker-php-ext-install ${MC} zip
- fi
- if [[ -z "${EXTENSIONS##*,xhprof,*}" ]]; then
- echo "---------- Install XHProf ----------"
- isPhpVersionGreaterOrEqual 7 0
- if [[ "$?" = "1" ]]; then
- mkdir xhprof \
- && tar -xf xhprof-2.1.0.tgz -C xhprof --strip-components=1 \
- && ( cd xhprof/extension/ && phpize && ./configure && make ${MC} && make install ) \
- && docker-php-ext-enable xhprof
- else
- echo "---------- PHP Version>= 7.0----------"
- fi
- fi
- if [[ -z "${EXTENSIONS##*,xlswriter,*}" ]]; then
- echo "---------- Install xlswriter ----------"
- isPhpVersionGreaterOrEqual 7 0
- if [[ "$?" = "1" ]]; then
- printf "\n" | pecl install xlswriter
- docker-php-ext-enable xlswriter
- else
- echo "---------- PHP Version>= 7.0----------"
- fi
- fi
- if [ "${PHP_EXTENSIONS}" != "" ]; then
- apk del .build-deps \
- && docker-php-source delete
- fi
|