[ "$DEBIAN_SCRIPT_DEBUG" ] && set -vx
case "$1" in
- configure)
- # continue below
- ;;
-
- abort-upgrade|abort-remove|abort-deconfigure)
- exit 0
- ;;
-
- *)
- echo "postinst called with unknown argument \`$1'" >&2
- exit 0
- ;;
+ configure)
+ # continue below
+ ;;
+
+ abort-upgrade|abort-remove|abort-deconfigure)
+ exit 0
+ ;;
+
+ *)
+ echo "postinst called with unknown argument \`$1'" >&2
+ exit 0
+ ;;
esac
+# Load debconf
+. /usr/share/debconf/confmodule
+
# Include CARNet functions
. /usr/share/carnet-tools/functions.sh
PKG="php5-cn"
A2MODEDIR="/etc/apache2/mods-enabled"
-EXTENSIONS="mysql ldap gd"
+EXTENSIONS="mysql"
PHP5DIR="/etc/php5"
PHP5CONFD="/etc/php5/conf.d"
+PHP4DIR="/etc/php4"
need_restart=0
+# phpmemlimit ()
+#
+# Calculate memory size for PHP memory_limit option.
+#
+phpmemlimit () {
+
+ local memtotal memlimit
+ memtotal=`awk 'tolower($1) == "memtotal:" { printf("%i", $2/1024); }' /proc/meminfo`
+
+ if [ $memtotal -lt 512 ]; then memlimit=16; fi
+ if [ $memtotal -ge 512 ]; then memlimit=32; fi
+ if [ $memtotal -gt 1024 ]; then memlimit=64; fi
+
+ echo $memlimit
+}
+
+# phpinivalidate ()
+#
+# Validate php.ini values.
+#
+phpinivalidate () {
+
+ local ini_file
+ ini_file="$1"
+
+ awk -F'[[:space:]]*=[[:space:]]*' \
+ '/^[[:space:]]*[[:alpha:]_]+[[:space:]]*=[[:space:]]*[[:digit:]]+[MGK]B/ {print $1" = "$2}' \
+ "$ini_file"
+}
+
+
# Disable PHP4 module and enable Apache2 PHP5 module.
#
if [ -e /etc/apache2/apache2.conf ]; then
- if [ -e "$A2MODEDIR/php4.load" ]; then
- cp_echo "CN: Disabling PHP4 module for Apache2 web server"
- a2dismod php4 >/dev/null || true
- need_restart=1
- fi
- if [ ! -e "$A2MODEDIR/php5.load" ] || [ ! -e "$A2MODEDIR/php5.conf" ]; then
- cp_echo "CN: Enabling PHP5 module for Apache2 web server"
- a2enmod php5 >/dev/null || true
- need_restart=1
- fi
+ if [ -e "$A2MODEDIR/php4.load" ]; then
+ cp_echo "CN: Disabling PHP4 module for Apache2 web server"
+ a2dismod php4 >/dev/null || true
+ need_restart=1
+ fi
+ if [ ! -e "$A2MODEDIR/php5.load" ] || [ ! -e "$A2MODEDIR/php5.conf" ]; then
+ cp_echo "CN: Enabling PHP5 module for Apache2 web server"
+ a2enmod php5 >/dev/null || true
+
+ if [ -e "$A2MODEDIR/php5.conf" ]; then
+ if egrep -qi "^[[:space:]]*php_admin_value engine Off" "$A2MODEDIR/php5.conf"; then
+ db_fset php5-cn/userdir seen false
+ db_title php5-cn - konfiguracija
+ db_subst php5-cn/userdir php5_conf "$A2MODEDIR/php5.conf"
+ db_input critical php5-cn/userdir || true
+ db_go || true
+ fi
+ fi
+
+ need_restart=1
+ fi
fi
-# Check if PHP5 extensions (MySQL, LDAP, GD) are enabled.
+# Check for PHP5 SAPI directories and configuration files.
+#
+for SAPI in apache2 cli; do
+
+ if [ ! -d "$PHP5DIR/$SAPI" ]; then
+ cp_echo "CN: Creating configuration directory $PHP5DIR/$SAPI/"
+ mkdir -p $PHP5DIR/$SAPI/
+ fi
+
+ ini_file="$PHP5DIR/$SAPI/php.ini"
+
+ if [ ! -f "$ini_file" ]; then
+
+ cp_echo "CN: Generating configuration file $ini_file"
+
+ ini_file_tmp=`mktemp $ini_file.tmp.XXXXXX`
+ if [ "$SAPI" = "cli" ]; then
+ if [ -f "/usr/share/php5/php.ini-production.cli" ]; then
+ cat /usr/share/php5/php.ini-production.cli > $ini_file_tmp
+ fi
+ else
+ if [ -f "/usr/share/php5/php.ini-production" ]; then
+ cat /usr/share/php5/php.ini-production > $ini_file_tmp
+ fi
+ fi
+ cp_mv $ini_file_tmp $ini_file
+ need_restart=1
+ fi
+ chmod 644 $ini_file
+done
+
+
+# Check for /etc/php5/conf.d/ directory.
+#
+if [ ! -d "$PHP5CONFD" ]; then
+ cp_echo "CN: Creating configuration directory $PHP5CONFD"
+ mkdir -p $PHP5CONFD/
+fi
+
+
+# Check if PHP5 extensions are enabled.
#
for php5ext in $EXTENSIONS; do
- php5ext_re="^[[:space:]]*extension[[:space:]]*=[[:space:]]*$php5ext\.so"
+ php5ext_re="^[[:space:]]*extension[[:space:]]*=[[:space:]]*$php5ext\.so"
+
+ # Remove extension entry from /etc/php5/(apache2|cli).ini
+ # configuration files.
+ for SAPI in apache2 cli; do
- # Remove extension entry from /etc/php5/(apache|apache2|cgi|cli).ini
- # configuration files.
- for SAPI in apache apache2 cgi cli; do
+ ini_file="$PHP5DIR/$SAPI/php.ini"
- ini_file="$PHP5DIR/$SAPI/php.ini"
+ if [ -f "$ini_file" ]; then
+
+ if egrep -q "$php5ext_re" "$ini_file"; then
+ cp_echo "CN: Removing $php5ext extension from file $ini_file"
+ fi
+
+ cp_check_and_sed "$php5ext_re" \
+ "/$php5ext_re/d" \
+ "$ini_file" && need_restart=1 || true
+ fi
+ done
- if [ -f "$ini_file" ]; then
+ # Check extension configuration in /etc/php5/conf.d/ directory.
+ if [ ! -f "$PHP5CONFD/$php5ext.ini" ]; then
- cp_echo "CN: Removing $php5ext extension from file $ini_file"
+ cp_echo "CN: Creating configuration file $PHP5CONFD/$php5ext.ini"
- cp_check_and_sed "$php5ext_re" \
- "/$php5ext_re/d" \
- "$ini_file" && need_restart=1 || true
- fi
- done
+ php5ext_up=`echo $php5ext | tr [:lower:] [:upper:] | sed 's/Y/y/'`
+ INITMP=`mktemp $PHP5CONFD/$php5ext.ini.tmp.XXXXXX`
- # Check extension configuration in /etc/php5/conf.d/ directory.
- if [ ! -f "$PHP5CONFD/$php5ext.ini" ]; then
+ cp_echo "CN: Adding $php5ext extension to file $PHP5CONFD/$php5ext.ini"
- cp_echo "CN: Creating configuration file $PHP5CONFD/$php5ext.ini"
-
- php5ext_up=`echo $php5ext | tr [:lower:] [:upper:] | sed 's/Y/y/'`
- INITMP=`mktemp $PHP5CONFD/$php5ext.ini.tmp.XXXXXX`
+ printf "# configuration for php %s module\nextension=%s.so\n" "${php5ext_up}" "${php5ext}" >> "$INITMP"
+ cp_mv "$INITMP" "$PHP5CONFD/$php5ext.ini"
- cp_echo "CN: Adding $php5ext extension to file $PHP5CONFD/$php5ext.ini"
-
- echo -e "# configuration for php $php5ext_up module\nextension=$php5ext.so" >> "$INITMP"
- cp_mv "$INITMP" "$PHP5CONFD/$php5ext.ini"
-
- need_restart=1
- else
+ need_restart=1
+ else
- if ! grep -q "$php5ext_re" "$PHP5CONFD/$php5ext.ini"; then
+ if ! grep -q "$php5ext_re" "$PHP5CONFD/$php5ext.ini"; then
- cp_echo "CN: Adding $php5ext extension to file $PHP5CONFD/$php5ext.ini"
-
- INITMP=`mktemp $PHP5CONFD/$php5ext.ini.tmp.XXXXXX`
- cat "$PHP5CONFD/$php5ext.ini" > "$INITMP"
- echo "extension=$php5ext.so" >> "$INITMP"
- cp_mv "$INITMP" "$PHP5CONFD/$php5ext.ini"
-
- need_restart=1
- fi
- fi
+ cp_echo "CN: Adding $php5ext extension to file $PHP5CONFD/$php5ext.ini"
+
+ INITMP=`mktemp $PHP5CONFD/$php5ext.ini.tmp.XXXXXX`
+ cat "$PHP5CONFD/$php5ext.ini" > "$INITMP"
+ echo "extension=$php5ext.so" >> "$INITMP"
+ cp_mv "$INITMP" "$PHP5CONFD/$php5ext.ini"
+
+ need_restart=1
+ fi
+ fi
+ chmod 644 $PHP5CONFD/$php5ext.ini
done
# Enable some PHP5 tweaks for Apache2 web server (/etc/php5/apache2/php.ini).
#
# * upload_max_filesize = 256M
-# * post_max_size = 256M
-# * memory_limit = 256M
+# * post_max_size, memory_limit = depends on system memory, we are using
+# phpmemlimit() function.
+# * error_reporting = E_ERROR
#
-for SAPI in apache apache2 cgi cli; do
+for SAPI in apache2 cli; do
+
+ if [ ! -d "$PHP5DIR/$SAPI" ]; then
+ continue
+ fi
- if [ ! -d "$PHP5DIR/$SAPI" ]; then
- continue
- fi
+ ini_file="$PHP5DIR/$SAPI/php.ini"
+ db_get php5-cn/${SAPI} || true
+ if [ "$RET" = "true" ]; then
- ini_file="$PHP5DIR/$SAPI/php.ini"
+ cp_echo "CN: Checking and enabling some specific parameters in file $ini_file"
+
+ phplimit="$(phpmemlimit)M"
- cp_echo "CN: Checking and enabling some CARNet specific parameters in file $ini_file"
-
if [ -f "$ini_file" ]; then
- cp_check_and_sed "^[[:space:]]*upload_max_filesize[[:space:]]*=[[:space:]]*2M$" \
- 's/^[[:space:]]*upload_max_filesize[[:space:]]*=.*/upload_max_filesize = 256M/' \
- "$ini_file" && need_restart=1 || true
+ cp_check_and_sed "^[[:space:]]*upload_max_filesize[[:space:]]*=" \
+ 's/^[[:space:]]*upload_max_filesize[[:space:]]*=.*/upload_max_filesize = 256M/' \
+ "$ini_file" && need_restart=1 || true
+
+ cp_check_and_sed "^[[:space:]]*post_max_size[[:space:]]*=" \
+ "s/^[[:space:]]*post_max_size[[:space:]]*=.*/post_max_size = ${phplimit}/" \
+ "$ini_file" && need_restart=1 || true
+
+ cp_check_and_sed "^[[:space:]]*memory_limit[[:space:]]*=" \
+ "s/^[[:space:]]*memory_limit[[:space:]]*=.*/memory_limit = ${phplimit}/" \
+ "$ini_file" && need_restart=1 || true
+
+ cp_check_and_sed "^[[:space:]]*error_reporting[[:space:]]*=" \
+ "s/^[[:space:]]*error_reporting[[:space:]]*=.*/error_reporting = E_ERROR/" \
+ "$ini_file" && need_restart=1 || true
+ fi
+
+ ini_file_tmp=`mktemp $ini_file.tmp.XXXXXX`
+ if [ -f "$ini_file" ]; then
+ cat $ini_file > $ini_file_tmp
+ fi
- cp_check_and_sed "^[[:space:]]*post_max_size[[:space:]]*=[[:space:]]*8M$" \
- 's/^[[:space:]]*post_max_size[[:space:]]*=.*/post_max_size = 256M/' \
- "$ini_file" && need_restart=1 || true
+ if ! egrep -q "^[[:space:]]*upload_max_filesize[[:space:]]*=" $ini_file_tmp; then
+ echo "upload_max_filesize = 256M" >> "$ini_file_tmp"
+ need_restart=1
+ fi
+ if ! egrep -q "^[[:space:]]*post_max_size[[:space:]]*=" $ini_file_tmp; then
+ echo "post_max_size = ${phplimit}" >> "$ini_file_tmp"
+ need_restart=1
+ fi
+ if ! egrep -q "^[[:space:]]*memory_limit[[:space:]]*=" $ini_file_tmp; then
+ echo "memory_limit = ${phplimit}" >> "$ini_file_tmp"
+ need_restart=1
+ fi
+ if ! egrep -q "^[[:space:]]*error_reporting[[:space:]]*=" $ini_file_tmp; then
+ echo "error_reporting = E_ERROR" >> "$ini_file_tmp"
+ need_restart=1
+ fi
+ cp_mv "$ini_file_tmp" "$ini_file"
+ chmod 644 "$ini_file"
- cp_check_and_sed "^[[:space:]]*memory_limit[[:space:]]*=[[:space:]]*16M$" \
- 's/^[[:space:]]*memory_limit[[:space:]]*=.*/memory_limit = 256M/' \
- "$ini_file" && need_restart=1 || true
+ if [ -e "$ini_file_tmp" ]; then
+ rm -f "$ini_file_tmp"
+ fi
+ fi
+
+ # Validate php.ini values.
+ if [ -f "$ini_file" ]; then
+ php5_inivalues="$(phpinivalidate "$ini_file")"
+ if [ -n "$php5_inivalues" ]; then
+ db_fset php5-cn/inivalues seen false
+ db_title php5-cn - konfiguracija za $(echo ${SAPI} | sed 's/a/A/;s/cli/CLI/')
+ db_subst php5-cn/inivalues php5_sapi $(echo ${SAPI} | sed 's/a/A/;s/cli/CLI/')
+ db_subst php5-cn/inivalues ini_file "$ini_file"
+ db_capb escape
+ db_subst php5-cn/inivalues php5_inivalues "$(echo -n "$php5_inivalues" | debconf-escape -e)"
+ db_input critical php5-cn/inivalues || true
+ db_go || true
fi
-
- ini_file_tmp=`mktemp $ini_file.tmp.XXXXXX`
- if [ -f "$ini_file" ]; then
- cat $ini_file > $ini_file_tmp
- fi
-
- if ! egrep -q "^[[:space:]]*(upload_max_filesize|post_max_size|memory_limit)[[:space:]]*=" $ini_file_tmp; then
-
- if ! egrep -q "^[[:space:]]*upload_max_filesize[[:space:]]*=" $ini_file_tmp; then
- echo "upload_max_filesize = 256M" >> "$ini_file_tmp"
- fi
- if ! egrep -q "^[[:space:]]*post_max_size[[:space:]]*=" $ini_file_tmp; then
- echo "post_max_size = 256MB" >> "$ini_file_tmp"
- fi
- if ! egrep -q "^[[:space:]]*memory_limit[[:space:]]*=" $ini_file_tmp; then
- echo "memory_limit = 256M" >> "$ini_file_tmp"
- fi
- cp_mv "$ini_file_tmp" "$ini_file"
-
- need_restart=1
- fi
-
- if [ -e "$ini_file_tmp" ]; then
- rm -f "$ini_file_tmp"
- fi
+ fi
done
+# Compare active PHP5 extensions with PHP4 ones, if PHP4 configuration still exists.
+#
+if [ -d "${PHP4DIR}" ] && [ -f "${PHP4DIR}/apache2/php.ini" ]; then
+
+ phpext_re='^[[:space:]]*extension[[:space:]]*=[[:space:]]*["]{0,1}(.*)\.so["]{0,1}'
+
+ # Get all active PHP4 extensions.
+ php4_ext="$(find ${PHP4DIR} -type f -name *.ini |
+ egrep "\/(conf\.d|apache2|cli)\/" |
+ xargs sed -rn 's/'$phpext_re'/\1/Ip')" || true
+
+ # Get all active PHP5 extensions.
+ php5_ext=""
+ if [ -d "${PHP5DIR}" ]; then
+ php5_ext="$(find ${PHP5DIR} -type f -name *.ini |
+ egrep "\/(conf\.d|apache2|cli)\/" |
+ xargs sed -rn 's/'$phpext_re'/\1/Ip')" || true
+ fi
+
+ # Compare PHP5 <-> PHP4 extensions.
+ php5_ext_mis=""
+ for ext in $php4_ext; do
+ if [ "$(echo $php5_ext | egrep $ext)" = "" ]; then
+ php5_ext_mis="\n${ext}${php5_ext_mis}"
+ fi
+ done
+
+ # Some PHP5 extensions are not active.
+ if [ -n "$php5_ext_mis" ]; then
+ db_fset php5-cn/extensions seen false
+ db_title php5-cn - konfiguracija
+ db_capb escape
+ db_subst php5-cn/extensions php5_extensions "${php5_ext_mis#*\n}"
+ db_input critical php5-cn/extensions || true
+ db_go || true
+ fi
+fi
+
+
+db_stop || true
+
+
# Restart Apache2 web server if needed.
#
if [ $need_restart -eq 1 ]; then
-
- # Check Apache2 web server configuration.
- if /usr/sbin/apache2ctl configtest 2>/dev/null; then
-
- # Restart Apache2 web server.
- if [ -x "/etc/init.d/apache2" ]; then
- if [ -x "`which invoke-rc.d 2>/dev/null`" ]; then
- invoke-rc.d apache2 force-reload || true
- else
- /etc/init.d/apache2 force-reload || true
- fi
- fi
- else
-
- # Something is broken.
- cp_echo "CN: Your Apache2 configuration is broken."
- cp_echo "CN: Please, check the service after the installation finishes!"
- fi
+
+ # Check Apache2 web server configuration.
+ if apache2ctl configtest 2>/dev/null; then
+ invoke-rc.d apache2 force-reload || true
+ else
+ # Something is broken.
+ cp_echo "CN: Your Apache2 configuration is broken."
+ cp_echo "CN: Please, check the service after the installation finishes!"
+ fi
fi
#
cp_mail "$PKG"
+#DEBHELPER#
+
exit 0