Upgrade paketa za Debian lenny.
[php5-cn.git] / debian / postinst
index 397757c..14b691b 100755 (executable)
@@ -4,9 +4,6 @@ set -e
 
 [ "$DEBIAN_SCRIPT_DEBUG" ] && set -vx
 
-# Source debconf library.
-. /usr/share/debconf/confmodule
-
 case "$1" in
        configure)
        # continue below
@@ -23,18 +20,53 @@ case "$1" in
 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
@@ -51,26 +83,68 @@ if [ -e /etc/apache2/apache2.conf ]; then
 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-dist.cli" ]; then
+                        cat /usr/share/php5/php.ini-dist.cli > $ini_file_tmp
+                    fi
+                else
+                    if [ -f "/usr/share/php5/php.ini-dist" ]; then
+                        cat /usr/share/php5/php.ini-dist > $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"
 
-       # Remove extension entry from /etc/php5/(apache|apache2|cgi|cli).ini
+       # Remove extension entry from /etc/php5/(apache2|cli).ini
        # configuration files.
-        for SAPI in apache apache2 cgi cli; do
+        for SAPI in apache2 cli; do
 
-                ini_file="$PHP5DIR/$SAPI/php.ini"
+               ini_file="$PHP5DIR/$SAPI/php.ini"
 
-                if [ -f "$ini_file" ]; then
+               if [ -f "$ini_file" ]; then
 
-                       cp_echo "CN: Removing $php5ext extension from file $ini_file"
+                       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
+               fi
         done
 
        # Check extension configuration in /etc/php5/conf.d/ directory.
@@ -83,7 +157,7 @@ for php5ext in $EXTENSIONS; do
 
                cp_echo "CN: Adding $php5ext extension to file $PHP5CONFD/$php5ext.ini"
                
-               echo -e "# configuration for php $php5ext_up module\nextension=$php5ext.so" >> "$INITMP"
+               printf "# configuration for php %s module\nextension=%s.so\n" "${php5ext_up}" "${php5ext}" >> "$INITMP"
                cp_mv "$INITMP" "$PHP5CONFD/$php5ext.ini"
                
                need_restart=1
@@ -101,80 +175,142 @@ for php5ext in $EXTENSIONS; do
                        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.
 #
-for SAPI in apache apache2 cgi cli; do
+for SAPI in apache2 cli; do
 
        if [ ! -d "$PHP5DIR/$SAPI" ]; then
                continue
        fi
 
        ini_file="$PHP5DIR/$SAPI/php.ini"
+       db_get php5-cn/${SAPI} || true
+       if [ "$RET" = "true" ]; then
 
-       cp_echo "CN: Checking and enabling some CARNet specific parameters in file $ini_file"
+           cp_echo "CN: Checking and enabling some specific parameters in file $ini_file"
+           
+           phplimit="$(phpmemlimit)M"
        
-        if [ -f "$ini_file" ]; then
+           if [ -f "$ini_file" ]; then
 
-               cp_check_and_sed "^[[:space:]]*upload_max_filesize[[:space:]]*=[[:space:]]*2M$" \
+               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]]*=[[:space:]]*8M$" \
-                       's/^[[:space:]]*post_max_size[[:space:]]*=.*/post_max_size = 256M/' \
+               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:]]*=[[:space:]]*16M$" \
-                       's/^[[:space:]]*memory_limit[[:space:]]*=.*/memory_limit = 256M/' \
+               cp_check_and_sed "^[[:space:]]*memory_limit[[:space:]]*=" \
+                       "s/^[[:space:]]*memory_limit[[:space:]]*=.*/memory_limit = ${phplimit}/" \
                        "$ini_file" && need_restart=1 || true
-        fi
+           fi
                
-       ini_file_tmp=`mktemp $ini_file.tmp.XXXXXX`
-       if [ -f "$ini_file" ]; then
+           ini_file_tmp=`mktemp $ini_file.tmp.XXXXXX`
+           if [ -f "$ini_file" ]; then
                cat $ini_file > $ini_file_tmp
-       fi
+           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"
-       
+           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 [ -e "$ini_file_tmp" ]; then
+           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
+           cp_mv "$ini_file_tmp" "$ini_file"
+           chmod 644 "$ini_file"
+
+           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
        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 apache2ctl configtest 2>/dev/null; then
+       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 restart || exit $?
+                       invoke-rc.d apache2 restart || true
                    else
-                       /etc/init.d/apache2 restart || exit $?
+                       /etc/init.d/apache2 restart || true
                    fi
                fi
        else