#!/bin/sh # # rc.php_ini_setup # Copyright (C) 2010 Scott Ullrich # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # 1. Redistributions of source code must retain the above copyright notice, # this list of conditions and the following disclaimer. # # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # # THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, # INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY # AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE # AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, # OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # Set our operating platform PLATFORM=`/bin/cat /etc/platform` MIN_REALMEM_FOR_APC=512 if [ -d /usr/local/lib/php/20090626 ]; then EXTENSIONSDIR="/usr/local/lib/php/20090626/" else EXTENSIONSDIR="/usr/local/lib/php/20060613/" fi # Grab amount of memory that is detected if [ -f /var/log/dmesg.boot ]; then AVAILMEM=`/bin/cat /var/log/dmesg.boot |/usr/bin/awk '/avail memory/ { memory=($4 / 1048576); printf("%0.0f\n", memory); exit}'` else AVAILMEM=`/sbin/dmesg -a |/usr/bin/awk '/avail memory/ { memory=($4 / 1048576); printf("%0.0f\n", memory); exit}'` fi if [ -z "$AVAILMEM" ]; then MEM=`/sbin/sysctl hw.physmem | cut -d':' -f2` AVAILMEM=`/bin/expr $MEM / 1048576` fi # Get amount of ram installed on this system REALMEM=`/sbin/sysctl hw.realmem | /usr/bin/awk '{print $2/1048576}' | /usr/bin/awk -F '.' '{print $1}'` export REALMEM export LOWMEM if [ "$REALMEM" -lt "$MIN_REALMEM_FOR_APC" ]; then LOWMEM="TRUE" echo ">>> Under $MIN_REALMEM_FOR_APC megabytes of ram detected. Not enabling APC." echo ">>> Under $MIN_REALMEM_FOR_APC megabytes of ram detected. Not enabling APC." | /usr/bin/logger -p daemon.info -i -t rc.php_ini_setup else # Calculate APC SHM size according # to detected memory values if [ "$AVAILMEM" -gt "135" ]; then APCSHMEMSIZE="10M" fi if [ "$AVAILMEM" -gt "256" ]; then APCSHMEMSIZE="20M" fi if [ "$AVAILMEM" -gt "384" ]; then APCSHMEMSIZE="25M" fi if [ "$AVAILMEM" -gt "512" ]; then APCSHMEMSIZE="30M" fi if [ "$AVAILMEM" -gt "784" ]; then APCSHMEMSIZE="50M" fi fi # Set upload directory if [ "$PLATFORM" = "embedded" -o "$PLATFORM" = "nanobsd" ]; then UPLOADTMPDIR=`/usr/bin/grep upload_path /etc/inc/globals.inc | /usr/bin/cut -d'"' -f4` else UPLOADTMPDIR="/tmp" fi # Define php modules. Do not add .so, it will # be done automatically by the script below. PHPMODULES="standard" if [ "$LOWMEM" != "TRUE" ]; then PHPMODULES="$PHPMODULES apc" fi # Config read/write PHPMODULES="$PHPMODULES xml libxml dom" PHPMODULES="$PHPMODULES simplexml xmlreader xmlwriter" # Downloading via HTTP/FTP (pkg mgr, etc) PHPMODULES="$PHPMODULES curl date" # Internationalization PHPMODULES="$PHPMODULES gettext" # User manager PHPMODULES="$PHPMODULES ldap openssl pcntl" PHPMODULES="$PHPMODULES hash" PHPMODULES="$PHPMODULES mcrypt" # Regexs, PERL style! PHPMODULES="$PHPMODULES pcre" # The mighty posix! PHPMODULES="$PHPMODULES posix" PHPMODULES="$PHPMODULES readline" # Login sessions PHPMODULES="$PHPMODULES session" # Extra sanity seatbelts PHPMODULES="$PHPMODULES suhosin" # Firewall rules edit PHPMODULES="$PHPMODULES ctype" # firewall_rules_edit.php PHPMODULES="$PHPMODULES mbstring" # Synchronization primitives PHPMODULES="$PHPMODULES shmop" # Page compression PHPMODULES="$PHPMODULES zlib" # SQLlite & Database PHPMODULES="$PHPMODULES spl" PHPMODULES="$PHPMODULES pdo" PHPMODULES="$PHPMODULES sqlite" # RADIUS PHPMODULES="$PHPMODULES radius" # ZeroMQ PHPMODULES="$PHPMODULES zmq" # SSH2 PHPMODULES="$PHPMODULES ssh2" # pfSense extensions PHPMODULES="$PHPMODULES pfSense" # json PHPMODULES="$PHPMODULES json" # bcmath PHPMODULES="$PHPMODULES bcmath" PHP_ZEND_MODULES="ioncube_loader" PHP_ZEND_MODULES_TS="ioncube_loader_ts" # Modules previously included. # can be turned on by touching # /etc/php_dynamodules/$modulename # sysvmsg \ # sysvsem \ # sysvshm \ # bcmath \ # tokenizer \ # uploadprogress \ # sockets \ # Reflection \ # mysql \ # bz2 \ # Clear the .ini file to make sure we are clean if [ -f /usr/local/etc/php.ini ]; then /bin/rm /usr/local/etc/php.ini fi if [ -f /usr/local/lib/php.ini ]; then /bin/rm /usr/local/lib/php.ini fi LOADED_MODULES=`/usr/local/bin/php -m | /usr/bin/grep -v "\["` # Fetch the timezone from the XML and set it here. We set it later too in the running scripts TIMEZONE=`cat /conf/config.xml | egrep -E '(.*?)' | awk -F'>' '{print $2}'|awk -F'<' '{print $1}'` # Get a loaded module list in the stock php # Populate a dummy php.ini to avoid # the file being clobbered and the firewall # not being able to boot back up. /bin/cat >/usr/local/lib/php.ini <> /usr/local/lib/php.ini fi fi done # Zend modules for EXT in $PHP_ZEND_MODULES; do # Ensure extension exists before adding. if [ -f "${EXTENSIONSDIR}/ioncube/${EXT}.so" ]; then echo "zend_extension=${EXTENSIONSDIR}/ioncube/${EXT}.so" >> /usr/local/lib/php.ini fi done # Zend threaded modules for EXT in $PHP_ZEND_MODULES_TS; do # Ensure extension exists before adding. if [ -f "${EXTENSIONSDIR}/ioncube/${EXT}.so" ]; then echo "zend_extension_ts=${EXTENSIONSDIR}/ioncube/${EXT}.so" >> /usr/local/lib/php.ini fi done if [ "$LOWMEM" != "TRUE" ]; then /bin/cat >>/usr/local/lib/php.ini <>/usr/local/lib/php.ini </dev/null | /usr/bin/grep -v "\["` for EXT in $PHPMODULESLC; do SHOULDREMOVE="true" for LM in $LOADED_MODULES; do if [ "$EXT" = "$LM" ]; then SHOULDREMOVE="false" fi done # Handle low memory situations if [ "$LOWMEM" = "TRUE" ]; then if [ "$EXT" = "apc" ]; then SHOULDREMOVE="true" fi if [ "$EXT" = "xcache" ]; then SHOULDREMOVE="true" fi fi if [ "$SHOULDREMOVE" = "true" ]; then if [ -f "${EXTENSIONSDIR}${EXT}.so" ]; then echo ">>> ${EXT} did not load correctly. Removing from php.ini..." >> /var/run/php_modules_load_errors.txt /bin/cat /usr/local/lib/php.ini | /usr/bin/grep -v $EXT > /tmp/php.ini /bin/rm -f /usr/local/lib/php.ini /bin/mv /tmp/php.ini /usr/local/lib/php.ini fi fi done # Copy php.ini file to etc/ too (cli) /bin/cp /usr/local/lib/php.ini /usr/local/etc/php.ini