X-Git-Url: http://ftp.carnet.hr/carnet-debian/scm?a=blobdiff_plain;f=debian%2Fpostinst;h=ac5a11d90016431f1bd2f5ff91ebd557a2269b2b;hb=46a2975cbe89c79fad334a1cef7d03623eacca84;hp=3e3d9c4026e10c6b5bf60aeeafa0ab0b74f6d2fe;hpb=4f801db34098e1c5fc78882dbeaf2a5d335a0308;p=php5-cn.git diff --git a/debian/postinst b/debian/postinst index 3e3d9c4..ac5a11d 100755 --- a/debian/postinst +++ b/debian/postinst @@ -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,66 @@ 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" 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 +155,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 +173,145 @@ 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 - - if ! egrep -q "^[[:space:]]*(upload_max_filesize|post_max_size|memory_limit)[[:space:]]*=" $ini_file_tmp; then + fi - 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. +# +db_fget php5-cn/extensions seen +if [ "$RET" != "true" ]; then + + 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_subst php5-cn/extensions php5_extensions "${php5_ext_mis}" + db_input critical php5-cn/extensions || true + db_go || true + fi + 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 force-reload || true else - /etc/init.d/apache2 restart || exit $? + /etc/init.d/apache2 force-reload || true fi fi else