#!/bin/sh # # rc.php_ini_setup # # part of pfSense (https://www.pfsense.org) # Copyright (c) 2014-2016 Rubicon Communications, LLC (Netgate) # All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # # Set our operating platform VERSION=`/bin/cat /etc/version` MIN_REALMEM_FOR_OPCACHE=512 EXTENSIONSDIR="/usr/local/lib/php/20131226/" # 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_OPCACHE ]; then LOWMEM="TRUE" echo ">>> Under $MIN_REALMEM_FOR_OPCACHE megabytes of ram detected. Not enabling opcache" echo ">>> Under $MIN_REALMEM_FOR_OPCACHE megabytes of ram detected. Not enabling opcache" | /usr/bin/logger -p daemon.info -i -t rc.php_ini_setup else # Calculate opcache memory size according # to detected memory values if [ "$AVAILMEM" -gt "135" ]; then OPCACHEMEMSIZE="10" fi if [ "$AVAILMEM" -gt "256" ]; then OPCACHEMEMSIZE="20" fi if [ "$AVAILMEM" -gt "384" ]; then OPCACHEMEMSIZE="25" fi if [ "$AVAILMEM" -gt "512" ]; then OPCACHEMEMSIZE="30" fi if [ "$AVAILMEM" -gt "784" ]; then OPCACHEMEMSIZE="50" fi fi # Set upload directory UPLOADTMPDIR="/tmp" # Define php modules. Do not add .so, it will # be done automatically by the script below. PHPMODULES="standard" # 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 sqlite3" # RADIUS PHPMODULES="$PHPMODULES radius" # ZeroMQ PHPMODULES="$PHPMODULES zmq" # pfSense extensions PHPMODULES="$PHPMODULES pfSense" # json PHPMODULES="$PHPMODULES json" # bcmath PHPMODULES="$PHPMODULES bcmath" # filter PHPMODULES="$PHPMODULES filter" # rrd PHPMODULES="$PHPMODULES rrd" PHP_ZEND_MODULES="" # 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 LOADED_MODULES=`/usr/local/bin/php-cgi -m | /usr/bin/grep -v "\["` unset TIMEZONE # Fetch the timezone from /var/db/zoneinfo if present if [ -f /var/db/zoneinfo ]; then TIMEZONE=$(cat /var/db/zoneinfo) fi if [ -z "${TIMEZONE}" ]; then # Second option is from config.xml TIMEZONE=$(/usr/local/sbin/read_xml_tag.sh string system/timezone) fi if [ -z "${TIMEZONE}" ]; then # Last option, use default value from $g or Etc/UTC TIMEZONE=$(/usr/local/sbin/read_global_var default_timezone "Etc/UTC") fi if echo "${VERSION}" | grep -q RELEASE; then error_reporting="error_reporting = E_ERROR | E_PARSE" else error_reporting="" fi # 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/etc/php.ini <> /usr/local/etc/php.ini fi fi done # Zend modules for EXT in $PHP_ZEND_MODULES; do # Ensure extension exists before adding. if [ -f "${EXTENSIONSDIR}${EXT}.so" ]; then echo "zend_extension=${EXT}.so" >> /usr/local/etc/php.ini fi done if [ "$LOWMEM" != "TRUE" ]; then /bin/cat >>/usr/local/etc/php.ini <>/usr/local/etc/php.ini <>/usr/local/etc/php.ini < /usr/local/lib/php-fpm.conf <> /usr/local/lib/php-fpm.conf <> /usr/local/lib/php-fpm.conf <> /usr/local/lib/php-fpm.conf </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" break fi done # Handle low memory situations if [ "$LOWMEM" = "TRUE" ]; then if [ "$EXT" = "opcache" ]; 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/etc/php.ini | /usr/bin/grep -v $EXT > /tmp/php.ini /bin/rm -f /usr/local/etc/php.ini /bin/mv /tmp/php.ini /usr/local/etc/php.ini fi fi done