#!/usr/bin/env bash # php ( fuer Apache 2 ) # VERSION=5.3.29 WITHOUT_APACHE_MOD_PHP=false #WITHOUT_APACHE_MOD_PHP=true APACHE_VERSION=2.4.12 APACHE_BASEDIR=/usr/local/httpd-${APACHE_VERSION}_php-${VERSION} APXS=${APACHE_BASEDIR}/bin/apxs _srcdir=/usr/local/src/apache2 _pwd=`pwd` ## -------------------------------------------------- ## - Let make use multiple cores (-j) ## - export MAKEFLAGS=-j$(expr `grep "^processor" /proc/cpuinfo | sort -u | wc -l` + 1) ## --- Some functions ## --- echononl(){ echo X\\c > /tmp/shprompt$$ if [ `wc -c /tmp/shprompt$$ | awk '{print $1}'` -eq 1 ]; then echo -e -n "$*\\c" 1>&2 else echo -e -n "$*" 1>&2 fi rm /tmp/shprompt$$ } fatal(){ echo "" echo -e "Fehler: $*" echo "" echo -e "\t\033[31m\033[1mInstalllation wird abgebrochen\033[m\033[m" echo "" exit 1 } echo_ok() { echo -e "\033[75G[ \033[1;32mok\033[m ]" ## echo -e " [ ok ]" } echo_failed(){ echo -e "\033[75G[ \033[1;31mfailed\033[m ]" ## echo -e " [ failed ]" } echo_skipped() { echo -e "\033[75G[ \033[33m\033[1mskipped\033[m ]" } ## --- ## --- END: functions ## -------------------------------------------------- if $WITHOUT_APACHE_MOD_PHP ; then PREFIX_PHP=/usr/local/php-$VERSION PHP_INI_FILE="${PREFIX_PHP}/etc/php.ini" _builddir=${_srcdir}/php-${VERSION} _logdir=${_srcdir}/log_php-${VERSION}_build elif [ -n "$APACHE_VERSION" ]; then PREFIX_PHP="/usr/local/php-$VERSION-httpd-${APACHE_VERSION}" PHP_INI_FILE="${APACHE_BASEDIR}/conf/php.ini" _builddir=${_srcdir}/php-${VERSION}_http-${APACHE_VERSION} _logdir=${_srcdir}/log_php-${VERSION}_http-${APACHE_VERSION}_build else echo "" echo -e "\t[ Error ]: I was requested to build php with apache mod_php module," echo -e "\t but environment \"APACHE_VERSION\" is unset." echo "" exit fi if [ -d "$_logdir" ];then mv $_logdir $_logdir.`date +%Y%m%d-%H%M` fi mkdir -p $_logdir > /dev/null 2>&1 if [ -d "$_builddir" ];then mv $_builddir $_builddir.`date +%Y%m%d-%H%M` fi if [ -d "$PREFIX_PHP" ];then mv $PREFIX_PHP $PREFIX_PHP.`date +%Y%m%d-%H%M` fi ## - get sources.. ## - cd $_srcdir if [ ! -f ${_srcdir}/php-$VERSION.tar.bz2 ]; then wget http://de.php.net/distributions/php-$VERSION.tar.bz2 fi bunzip2 < ${_srcdir}/php-$VERSION.tar.bz2 | tar -xf - || exit 1 chown -R root.root php-$VERSION || exit 1 if ! $WITHOUT_APACHE_MOD_PHP ; then mv php-$VERSION $_builddir fi cd $_builddir || exit 1 if [ "$VERSION" = "5.3.28" ]; then echo -e "\n\tgoing to patch file \"Zend/zend_language_parser.y\" .." if [ ! -f "${_srcdir}/bison_build_2a.patch" ]; then fatal "Cannot find patch \"bison_build_2a.patch\" for Zend/zend_language_parser.y\n\t See: https://bugs.php.net/patch-display.php?bug_id=64503&patch=bison_build_2a.patch&revision=latest" else patch ${_builddir}/Zend/zend_language_parser.y ${_srcdir}/bison_build_2a.patch > /dev/null fi fi echo -e "\n\tgoing to configure.." echo -e "\t(see ${_logdir}/php-configure.log for more details)" ## - if you get the following error: ## - ## - configure: error: libXpm.(a|so) not found ## - ## - set a symlink /usr/lib/libXpm.a --> /usr/lib/x86_64-linux-gnu/libXpm.a ## - if [ ! -h "/usr/lib/libXpm.a" -a ! -f "/usr/lib/libXpm.a" ];then ln -s x86_64-linux-gnu/libXpm.a /usr/lib/libXpm.a fi if [ ! -h "/usr/lib/libjpeg.a" -a ! -f "/usr/lib/libjpeg.a" ];then ln -s x86_64-linux-gnu/libjpeg.a /usr/lib/libjpeg.a fi if [ ! -h "/usr/lib/libXpm.a" -a ! -f "/usr/lib/libXpm.a" ];then ln -s x86_64-linux-gnu/libpng.a /usr/lib/libpng.a fi # : ${_arch:=i686} # : ${_arch:=athlon} : ${_arch:=k8} ## --> x86-64 instructionset ##_cflags="-O2 -march=$_arch " ## - LDFLAGS="-s" --> Remove all symbol table and relocation information from the executable. ## F77="/usr/bin/g77-3.4" \ ## CXXCPP="/usr/bin/g++-3.4 -E" \ ## CC="/usr/bin/gcc-3.4" \ ## CXX="/usr/bin/g++-3.4" \ ## CPP="/usr/bin/cpp-3.4" \ ## CFLAGS="$_cflags" LDFLAGS="-s" \ config_params=" --prefix=$PREFIX_PHP \ --with-gd \ --with-mysql=/usr/local/mysql \ --with-mysqli=/usr/local/mysql/bin/mysql_config \ --with-pdo-mysql=/usr/local/mysql \ --with-mysql-sock \ --with-pgsql \ --with-pdo-pgsql \ --with-regex=system \ --enable-wddx \ --enable-exif \ --with-zlib \ --with-openssl \ --with-gdbm \ --with-jpeg-dir \ --with-png-dir \ --with-curl \ --enable-dba \ --with-mcrypt \ --with-xpm-dir \ --with-t1lib \ --with-freetype-dir \ --enable-ftp \ --with-readline \ --enable-sockets \ --with-imap \ --with-imap-ssl \ --with-kerberos \ --with-gettext \ --with-pspell \ --enable-soap \ --enable-mbstring \ --enable-zip \ --enable-calendar \ --enable-bcmath \ --with-bz2 \ --enable-shmop \ --enable-sysvmsg \ --enable-sysvsem \ --enable-sysvshm \ --enable-cgi" if $WITHOUT_APACHE_MOD_PHP ; then config_params="$config_params --without-apxs2 --without-apxs --with-config-file-path=${PREFIX_PHP}/etc" else config_params="$config_params --with-apxs2=$APXS --with-config-file-path=${APACHE_BASEDIR}/conf" fi LDFLAGS="-s" \ ./configure $config_params > ${_logdir}/php-configure.log 2>&1 || exit 1 ## --with-mm \ # does not work with apache v2.4 ## --with-pgsql=/usr/local/pgsql \ ## --with-mysql=/usr/local/mysql \ ## --with-mysqli=/usr/local/mysql/bin/mysql_config \ ## --with-pdo-mysql=/usr/local/mysql \ ## --enable-force-cgi-redirect \ ## --enable-track-vars \ ## --with-tiff-dir \ ## --with-ttf \ ## --with-memcache \ ## --with-xml \ echo -e "\n\tgoing to compile.." echo -e "\t(see ${_logdir}/php-make.log for more details)" make > ${_logdir}/php-make.log 2>&1 || exit 1 echo -e "\n\tgoing to install.." echo -e "\t(see ${_logdir}/php-make_install.log for more details)" make install > ${_logdir}/php-make_install.log 2>&1 if [ "$?" != "0" ]; then make install > ${_logdir}/php-make_install.log 2>&1 if [ "$?" != "0" ]; then echo -e "\n [ Warn ] make install returncode: $?" echo " for safety:" echo " # cd $_builddir" echo " # make install" fi fi echo -e "\n\tBasic installation complete..\n" #cp php.ini-production $PHP_INI_FILE || exit 1 [ -f $PHP_INI_FILE ] && cp -a $PHP_INI_FILE ${PHP_INI_FILE}-`date +"%Y-%m-%d-%H%M"` cp php.ini-production $PHP_INI_FILE || exit 1 if ! $WITHOUT_APACHE_MOD_PHP ; then _set_php_entries="" echo "" echo -n "do you want to set \"LoadModule\" entries in httpd.conf ? [y/n]: " read _set_php_entries if [ "y" = "$_set_php_entries" -o "Y" = "$_set_php_entries" -o "Yes" = "$_set_php_entries" -o "yes" = "$_set_php_entries" ];then sed -i -r \ -e "s&(^\s*LoadModule php5_module.*$)&\1\n#\n AddType application/x-httpd-php .php .php5 .php4 .php3 .phtml\n AddType application/x-httpd-php-source .phps\n#&" ${APACHE_BASEDIR}/conf/httpd.conf #-e "s&(^\s*LoadModule php5_module.*$)&\1\n\n AddType application/x-httpd-php .php .php5 .php4 .php3 .phtml\n AddType application/x-httpd-php-source .phps\n&" ${APACHE_BASEDIR}/conf/httpd.conf fi fi _set_link="" echo echo -n "do you want to set symlink /usr/local/php -> `basename $PREFIX_PHP` ? [y/n]: " read _set_link if [ "y" = "$_set_link" -o "Y" = "$_set_link" -o "Yes" = "$_set_link" -o "yes" = "$_set_link" ];then if [ -L /usr/local/php ];then rm -f /usr/local/php fi ln -s `basename $PREFIX_PHP` /usr/local/php fi ## - special for debian. set manpath entries ## - if [ -f /etc/manpath.config ];then if ! grep /usr/local/php/man /etc/manpath.config > /dev/null 2<&1 ; then echo >> /etc/manpath.config echo "MANDATORY_MANPATH /usr/local/php/man /var/cache/man" >> /etc/manpath.config echo "MANPATH_MAP /usr/local/php/bin /usr/local/php/man" >> /etc/manpath.config echo "MANDB_MAP /usr/local/php/man /var/cache/man" >> /etc/manpath.config fi elif [ -f /etc/man.conf];then if ! grep /opt/php/man /etc/man.conf > /dev/null 2<&1 ; then echo >> /etc/man.conf echo "MANPATH /opt/php/man /var/cache/man" >> /etc/man.conf echo "MANPATH_MAP /opt/php/bin /opt/php/man" >> /etc/man.conf fi fi ## - Add /usr/local/php/bin to the systems PATH variable ## - echononl "\tAdd `dirname $PREFIX_PHP`/php/bin to the systems PATH variable" _checkdir=`dirname $PREFIX_PHP`/php/bin if [ -f /etc/profile ]; then if ! grep -e "$_checkdir" /etc/profile > /dev/null 2<&1 ; then perl -i -n -p -e "s#^([ ]*export[ ]*PATH.*$)#check_dir=$_checkdir\nif [ -d \"\\\$check_dir\" ];then\n PATH=\\\${check_dir}:\\\$PATH\nfi\n\n\1#" /etc/profile > /dev/null 2<&1 if [ "$?" = "0" ]; then echo_ok else echo_failed fi if ! echo "$PATH" | grep $_checkdir > /dev/null 2>&1 ; then export PATH=${_checkdir}:$PATH fi else echo_skipped fi fi echo "" ## ----- ## - Install geoip ## ----- echononl "\tInstalling libgeoip1 libgeoip-dev geoip-bin .." if ! dpkg -l libgeoip-dev | grep -e "^ii" | grep libgeoip-dev > /dev/null 2>&1 ; then apt-get -q -y install libgeoip1 libgeoip-dev geoip-bin > /dev/null 2>&1 if [ "$?" = 0 ]; then echo_ok else echo_failed fi else echo_skipped fi echononl "\tInstall geoip via pecl.." ${PREFIX_PHP}/bin/pecl install geoip > /dev/null 2>&1 if [ "$?" = "0" ]; then echo_ok else echo_failed fi echononl "\tphp.ini: extension=geoip.so .." _extension="geoip.so" perl -i -n -p -e "s#^(\s*\[PHP\]\s*)#\1\nextension=${_extension}\n#" $PHP_INI_FILE if [ "$?" = "0" ]; then echo_ok else echo_failed fi ## ----- ## - END: Install geoip ## ----- ## ----- ## - Install APC ## ----- echononl "\tInstall APC via pecl.." printf "\n" | ${PREFIX_PHP}/bin/pecl install apc > /dev/null 2>&1 if [ "$?" = "0" ]; then echo_ok else echo_failed fi echononl "\tphp.ini: extension=APC .." _extension="apc.so" perl -i -n -p -e "s#^(\s*\[PHP\]\s*)#\1\nextension=${_extension}\n#" $PHP_INI_FILE if [ "$?" = "0" ]; then echo_ok else echo_failed fi ## ----- ## - END: Install APC ## ----- ## ----- ## - Install intl ## ----- echononl "\tInstall intl via pecl.." printf "\n" | ${PREFIX_PHP}/bin/pecl install intl > /dev/null 2>&1 if [ "$?" = "0" ]; then echo_ok else echo_failed fi echononl "\tphp.ini: extension=intl .." _extension="intl.so" perl -i -n -p -e "s#^(\s*\[PHP\]\s*)#\1\nextension=${_extension}\n#" $PHP_INI_FILE if [ "$?" = "0" ]; then echo_ok else echo_failed fi ## ----- ## - END: Install intl ## ----- ## ----- ## - Install uploadprogress ## ----- echononl "\tInstall uploadprogress via pecl.." printf "\n" | ${PREFIX_PHP}/bin/pecl install uploadprogress > /dev/null 2>&1 if [ "$?" = "0" ]; then echo_ok else echo_failed fi echononl "\tphp.ini: extension=uploadprogress .." _extension="uploadprogress.so" perl -i -n -p -e "s#^(\s*\[PHP\]\s*)#\1\nextension=${_extension}\n#" $PHP_INI_FILE if [ "$?" = "0" ]; then echo_ok else echo_failed fi ## ----- ## - END: Install uploadprogress ## ----- ## ----- ## - Install solr ## ----- echononl "\tInstall solr via pecl.." printf "\n" | ${PREFIX_PHP}/bin/pecl install solr > /dev/null 2>&1 if [ "$?" = "0" ]; then echo_ok else echo_failed fi echononl "\tphp.ini: extension=solr .." _extension="solr.so" perl -i -n -p -e "s#^(\s*\[PHP\]\s*)#\1\nextension=${_extension}\n#" $PHP_INI_FILE if [ "$?" = "0" ]; then echo_ok else echo_failed fi ## ----- ## - END: Install solr ## ----- ## ----- ## - Configure php.ini (base) ## ----- ## - set date.timezon = "Europe/Berlin" ## - echononl "\tphp.ini: date.timezone = \"Europe/Berlin\"" _key="date.timezone" _val="Europe/Berlin" if grep -e "^\s*${_key}\s*=" $PHP_INI_FILE > /dev/null 2>&1 ; then perl -i -n -p -e "s#^(\s*${_key}\s*=.*)#;\1\n${_key} = ${_val}#" $PHP_INI_FILE _retval=$? elif grep -e "^\s*;\s*error_log\s*=" $PHP_INI_FILE > /dev/null 2>&1 ; then perl -i -n -p -e "s#^(\s*;${_key}\s*=.*)#\1\n${_key} = ${_val}#" $PHP_INI_FILE _retval=$? fi if [ "$_retval" = "0" ]; then echo_ok else echo_failed fi ## - set short_open_tag = On ## - echononl "\tphp.ini: short_open_tag = On" _key="short_open_tag" _val="Off" if grep -e "^\s*${_key}\s*=" $PHP_INI_FILE > /dev/null 2>&1 ; then perl -i -n -p -e "s#^(\s*${_key}\s*=.*)#;\1\n${_key} = ${_val}#" $PHP_INI_FILE _retval=$? elif grep -e "^\s*;\s*${_key}\s*=" $PHP_INI_FILE > /dev/null 2>&1 ; then perl -i -n -p -e "s#^(\s*;${_key}\s*=.*)#\1\n${_key} = ${_val}#" $PHP_INI_FILE _retval=$? fi if [ "$_retval" = "0" ]; then echo_ok else echo_failed fi ## - set memory_limit = 256M ## - echononl "\tphp.ini: memory_limit = 256M" _key="memory_limit" _val="256M" if grep -e "^\s*${_key}\s*=" $PHP_INI_FILE > /dev/null 2>&1 ; then perl -i -n -p -e "s#^(\s*${_key}\s*=.*)#;\1\n${_key} = ${_val}#" $PHP_INI_FILE _retval=$? elif grep -e "^\s*;\s*error_log\s*=" $PHP_INI_FILE > /dev/null 2>&1 ; then perl -i -n -p -e "s#^(\s*;${_key}\s*=.*)#\1\n${_key} = ${_val}#" $PHP_INI_FILE _retval=$? fi if [ "$_retval" = "0" ]; then echo_ok else echo_failed fi ## - set error_log = /var/log/apache2/php_error.log ## - echononl "\tphp.ini: error_log = /var/log/apache2/php_error.log" _key="error_log" _val="/var/log/apache2/php_error.log" if grep -e "^\s*${_key}\s*=" $PHP_INI_FILE > /dev/null 2>&1 ; then perl -i -n -p -e "s#^(\s*${_key}\s*=.*)#;\1\n${_key} = ${_val}#" $PHP_INI_FILE _retval=$? elif grep -e "^\s*;\s*error_log\s*=" $PHP_INI_FILE > /dev/null 2>&1 ; then perl -i -n -p -e "s#^(\s*;${_key}\s*=.*)#\1\n${_key} = ${_val}#" $PHP_INI_FILE _retval=$? fi if [ "$_retval" = "0" ]; then echo_ok else echo_failed fi ## - set upload_max_filesize = 16M ## - echononl "\tphp.ini: upload_max_filesize = 16M" _key="upload_max_filesize" _val="16M" if grep -e "^\s*${_key}\s*=" $PHP_INI_FILE > /dev/null 2>&1 ; then perl -i -n -p -e "s#^(\s*${_key}\s*=.*)#;\1\n${_key} = ${_val}#" $PHP_INI_FILE _retval=$? elif grep -e "^\s*;\s*error_log\s*=" $PHP_INI_FILE > /dev/null 2>&1 ; then perl -i -n -p -e "s#^(\s*;${_key}\s*=.*)#\1\n${_key} = ${_val}#" $PHP_INI_FILE _retval=$? fi if [ "$_retval" = "0" ]; then echo_ok else echo_failed fi ## - set post_max_size = 128M ## - echononl "\tphp.ini: post_max_size = 128M" _key="post_max_size" _val="128M" if grep -e "^\s*${_key}\s*=" $PHP_INI_FILE > /dev/null 2>&1 ; then perl -i -n -p -e "s#^(\s*${_key}\s*=.*)#;\1\n${_key} = ${_val}#" $PHP_INI_FILE _retval=$? elif grep -e "^\s*;\s*error_log\s*=" $PHP_INI_FILE > /dev/null 2>&1 ; then perl -i -n -p -e "s#^(\s*;${_key}\s*=.*)#\1\n${_key} = ${_val}#" $PHP_INI_FILE _retval=$? fi if [ "$_retval" = "0" ]; then echo_ok else echo_failed fi ## - set max_file_uploads = 50 ## - echononl "\tphp.ini: max_file_uploads = 50" _key="max_file_uploads" _val=50 if grep -e "^\s*${_key}\s*=" $PHP_INI_FILE > /dev/null 2>&1 ; then perl -i -n -p -e "s#^(\s*${_key}\s*=.*)#;\1\n${_key} = ${_val}#" $PHP_INI_FILE _retval=$? elif grep -e "^\s*;\s*error_log\s*=" $PHP_INI_FILE > /dev/null 2>&1 ; then perl -i -n -p -e "s#^(\s*;${_key}\s*=.*)#\1\n${_key} = ${_val}#" $PHP_INI_FILE _retval=$? fi if [ "$_retval" = "0" ]; then echo_ok else echo_failed fi ## - set safe_mode = Off ## - echononl "\tphp.ini: safe_mode = Off" _key="safe_mode" _val="Off" if grep -e "^\s*${_key}\s*=" $PHP_INI_FILE > /dev/null 2>&1 ; then perl -i -n -p -e "s#^(\s*${_key}\s*=.*)#;\1\n${_key} = ${_val}#" $PHP_INI_FILE _retval=$? elif grep -e "^\s*;\s*error_log\s*=" $PHP_INI_FILE > /dev/null 2>&1 ; then perl -i -n -p -e "s#^(\s*;${_key}\s*=.*)#\1\n${_key} = ${_val}#" $PHP_INI_FILE _retval=$? fi if [ "$_retval" = "0" ]; then echo_ok else echo_failed fi ## - set register_globals = Off ## - echononl "\tphp.ini: register_globals = Off" _key="register_globals" _val="Off" if grep -e "^\s*${_key}\s*=" $PHP_INI_FILE > /dev/null 2>&1 ; then perl -i -n -p -e "s#^(\s*${_key}\s*=.*)#;\1\n${_key} = ${_val}#" $PHP_INI_FILE _retval=$? elif grep -e "^\s*;\s*error_log\s*=" $PHP_INI_FILE > /dev/null 2>&1 ; then perl -i -n -p -e "s#^(\s*;${_key}\s*=.*)#\1\n${_key} = ${_val}#" $PHP_INI_FILE _retval=$? fi if [ "$_retval" = "0" ]; then echo_ok else echo_failed fi ## ----- ## - END: Configure php.ini (base) ## ----- cd $pwd if $WITHOUT_APACHE_MOD_PHP ; then cat<" > FCGIWrapper /fcgid .php SetHandler fcgid-script Options +ExecCGI -Indexes END else cat< AddType application/x-httpd-php .php .php5 .php4 .php3 .phtml AddType application/x-httpd-php-source .phps EOF fi exit 0