#!/bin/sh # # rc.php_ini_setup # Copyright (C)2008 Scott K 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=`cat /etc/platform` EXTENSIONSDIR="/usr/local/lib/php/20060613/" # 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/ { print $5 }'| sed 's/(//g'|tail -1` else AVAILMEM=`/sbin/dmesg -a |/usr/bin/awk '/avail memory/ { print $5 }'| sed 's/(//g'|tail -1` fi # Calculate APC SHM size according # to detected memory values if [ "$AVAILMEM" -lt "128" ]; then APCSHMEMSIZE="10" fi if [ "$AVAILMEM" -gt "128" ]; then APCSHMEMSIZE="25" fi if [ "$AVAILMEM" -gt "256" ]; then APCSHMEMSIZE="45" fi if [ "$AVAILMEM" -gt "384" ]; then APCSHMEMSIZE="65" fi if [ "$AVAILMEM" -gt "512" ]; then APCSHMEMSIZE="80" fi if [ "$AVAILMEM" -gt "784" ]; then APCSHMEMSIZE="100" fi # Set upload directory if [ "$PLATFORM" = "embedded" -o "$PLATFORM" = "nanobsd" ]; then UPLOADTMPDIR="/root" else UPLOADTMPDIR="/tmp" fi # Define php modules. Do not add .so, it will # be done automatically by the script below. PHPMODULES="apc \ # Downloading via HTTP/FTP (pkg mgr, etc) curl \ date \ # Internationalization gettext \ # User manager ldap \ openssl \ pcntl \ # Regexs, PERL style! pcre \ # The mighty posix! posix \ readline \ # Login sessions session \ standard \ # Extra sanity seatbelts suhosin \ pfSense \ # Firewall rules edit ctype \ # Config read/write xml \ xmlreader \ libxml \ # user manager mhash \ # firewall_rules_edit.php mbstring \ shmop \ # Page compression zlib" # Modules previously included. # can be turned on by touching # /etc/php_dynamodules/$modulename # sysvmsg \ # sysvsem \ # sysvshm \ # bcmath \ # sqlite \ # tokenizer \ # uploadprogress \ # sockets \ # Reflection \ # mysql \ # bz2 \ # json \ # Get a loaded module list in the stock php if [ -f /usr/local/etc/php.ini ]; then rm /usr/local/etc/php.ini fi if [ -f /usr/local/lib/php.ini ]; then rm /usr/local/lib/php.ini fi LOADED_MODULES=`php -m | grep -v "\["` # Populate a dummy php.ini to avoid # the file being clobbered and the firewall # not being able to boot back up. cat >/usr/local/lib/php.ini <> /usr/local/lib/php.ini fi fi done # Get amount of ram installed on this system RAM=`sysctl hw.realmem | awk '{print $2/1000000}' | awk -F '.' '{print $1}'` export RAM if [ $RAM -gt 96 ]; then cat >>/usr/local/lib/php.ini <>> WARNING! under 128 megabytes of ram detected. Not enabling APC." echo ">>> WARNING! under 128 megabytes of ram detected. Not enabling APC." | logger -p daemon.info -i -t rc.php_ini_setup fi # Copy php.ini file to etc/ too (cli) cp /usr/local/lib/php.ini /usr/local/etc/php.ini # Remove old log file if it exists. if [ -f /var/run/php_modules_load_errors.txt ]; then rm /var/run/php_modules_load_errors.txt fi # Check loaded modules and remove anything that did not load correctly LOADED_MODULES=`php -m 2>/dev/null | grep -v "\["` for EXT in $PHPMODULES; do SHOULDREMOVE="true" for LM in $LOADED_MODULES; do if [ "$EXT" = "$LM" ]; then SHOULDREMOVE="false" fi done 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 cat /usr/local/lib/php.ini | grep -v $EXT > /tmp/php.ini mv /tmp/php.ini /usr/local/lib/php.ini fi fi done # Copy php.ini file to etc/ too (cli) cp /usr/local/lib/php.ini /usr/local/etc/php.ini