From 06151af93589df942af2745ac3784115c561514d Mon Sep 17 00:00:00 2001 From: Dragan Dosen Date: Sun, 30 Mar 2008 22:18:32 +0200 Subject: [PATCH] * added debian/config script. * config and postinst scripts - values for post_max_size and memory_limit are now calculated using system memory info. * if php.ini file does not exists, it is generated using /usr/share/php5/php.ini-dist. * some changes in README.CARNet. --- debian/README.CARNet | 24 +++++---- debian/changelog | 21 ++++++++ debian/config | 101 ++++++++++++++++++++++++++++++++++ debian/postinst | 146 +++++++++++++++++++++++++++++++++++--------------- debian/templates | 32 +++++++++++ 5 files changed, 271 insertions(+), 53 deletions(-) create mode 100755 debian/config create mode 100644 debian/templates diff --git a/debian/README.CARNet b/debian/README.CARNet index 6b6776c..12a0dbc 100644 --- a/debian/README.CARNet +++ b/debian/README.CARNet @@ -15,16 +15,23 @@ server, cinite to u datoteci: /etc/php5/apache2/php.ini -Specificne postavke koje php5-cn paket automatski postavlja u -navedenoj datoteci: +Specificne postavke koje php5-cn paket postavlja u navedenoj +datoteci: upload_max_filesize = 256M - post_max_size = 256MB - memory_limit = 256M + post_max_size = + memory_limit = -Konfiguracije za pojedine PHP5 dodatke (extensions) nalaze se -unutar direktorija /etc/php5/conf.d/. Preporuka je da NE dirate -i da NE brisete iste, osim ako znate sto cinite. +post_max_size i memory_limit postavke se odredjuju ovisno o +kolicini memorije na posluzitelju, tocnije: + + * manje od 512MB => ogranicenje 16MB, + * 512-1024MB => ogranicenje 32MB, + * vise od 1024MB => ogranicenje 64MB. + +U slucaju da na posluzitelju postoji PHP5 konfiguracija koja +se razlikuje od navedene, bit cete upitani zelite li zadrzati +trenutne postavke ili aktivirati preporucene. Nakon sto prepravite PHP5 konfiguraciju, potrebno je obaviti restart Apache2 web servera: @@ -45,5 +52,4 @@ Kako bi Vas Apache2 web server mogao normalno posluzivati stranice pisane u PHP-u, preporuca se da NE brisete i da ne uredjujete navedene datoteke, osim ako znate sto cinite. - - -- Dragan Dosen Sun, 27 Jan 2008 14:54:24 +0100 + -- Dragan Dosen Sun, 30 Mar 2008 20:03:30 +0200 diff --git a/debian/changelog b/debian/changelog index 8c8973b..9704826 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,24 @@ +php5-cn (5.2.0-5) stable; urgency=medium + + * dodana config skripta: + + usporedba trenutno aktivnih PHP5 postavki s onima koje + preporuca CARNet (upload_max_filesize, post_max_size, + memory_limit) + + koristi se debconf - u slucaju da se postavke razlikuju, + korisnik odlucuje zeli li zadrzati trenutne postavke ili + aktivirati preporucene + * config i postinst skripta - preporucene vrijednosti za + post_max_size i memory_limit postavke odredjuju se ovisno o + kolicini memorije na posluzitelju. + * u slucaju da ne postoji neka od php.ini datoteka, koristi + se /usr/share/php5/php.ini-dist za kreiranje nove. + * podesavanje postavki (php.ini datoteka/e) odvija se samo kod + prve instalacije paketa ili u slucaju da se pokrene + * README.CARNet datoteka - opisano odredjivanje preporucene + vrijednosti za post_max_size i memory_limit postavke. + + -- Dragan Dosen Sun, 30 Mar 2008 22:10:32 +0200 + php5-cn (5.2.0-4) stable; urgency=low * control datoteka - uklonjene ovisnosti o php5-cgi, php5-gd, diff --git a/debian/config b/debian/config new file mode 100755 index 0000000..93754a0 --- /dev/null +++ b/debian/config @@ -0,0 +1,101 @@ +#!/bin/sh + +set -e + +# Load debconf +. /usr/share/debconf/confmodule + +if [ "$1" != reconfigure ]; then + + php5_done=1 + + for SAPI in apache2 cli; do + db_fget php5-cn/${SAPI} seen + if [ "$RET" != "true" ]; then + php5_done=0 + break + fi + done + + test $php5_done -eq 1 && exit 0 +fi + +PHP5DIR="/etc/php5" + +# 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 +} + + +# Check for PHP5 SAPI configuration. +# +for SAPI in apache2 cli; do + + if [ ! -d "$PHP5DIR/$SAPI" ]; then + continue + fi + + ini_diff=0 + ini_file="$PHP5DIR/$SAPI/php.ini" + + phplimit="$(phpmemlimit)M" + + if [ -f "$ini_file" ]; then + + if egrep -q "^[[:space:]]*(upload_max_filesize|post_max_size|memory_limit)[[:space:]]*=" $ini_file; then + + upload_max_filesize=`awk '$1 == "upload_max_filesize" { print $3; exit(0) }' $ini_file` + post_max_size=`awk '$1 == "post_max_size" { print $3; exit(0) }' $ini_file` + memory_limit=`awk '$1 == "memory_limit" { print $3; exit(0) }' $ini_file` + + if [ "$upload_max_filesize" != "256M" ]; then ini_diff=1; fi + if [ "$post_max_size" != "$phplimit" ]; then ini_diff=1; fi + if [ "$memory_limit" != "$phplimit" ]; then ini_diff=1; fi + else + + ini_diff=1 + fi + else + + ini_diff=1 + fi + + if [ $ini_diff -eq 1 ]; then + + # Configurations are not the same - ask user what to do. + test -z "$upload_max_filesize" && upload_max_filesize="2M" + test -z "$post_max_size" && post_max_size="8M" + test -z "$memory_limit" && memory_limit="16M" + + db_title php5-cn - konfiguracija za $(echo ${SAPI} | sed 's/a/A/;s/cli/CLI/') + db_subst php5-cn/${SAPI} ini_file "$ini_file" + + db_subst php5-cn/${SAPI} upload_max_filesize "$upload_max_filesize" + db_subst php5-cn/${SAPI} post_max_size "$post_max_size" + db_subst php5-cn/${SAPI} memory_limit "$memory_limit" + + db_subst php5-cn/${SAPI} new_phplimit "$phplimit" + + db_input critical php5-cn/${SAPI} || true + db_go || true + else + + db_set php5-cn/${SAPI} false || true + db_fset php5-cn/${SAPI} seen true + fi + +done + +exit 0 diff --git a/debian/postinst b/debian/postinst index f15b8a6..f17140b 100755 --- a/debian/postinst +++ b/debian/postinst @@ -20,6 +20,9 @@ case "$1" in esac +# Load debconf +. /usr/share/debconf/confmodule + # Include CARNet functions . /usr/share/carnet-tools/functions.sh @@ -32,6 +35,23 @@ PHP5CONFD="/etc/php5/conf.d" 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 +} + + # Disable PHP4 module and enable Apache2 PHP5 module. # if [ -e /etc/apache2/apache2.conf ]; then @@ -48,37 +68,67 @@ if [ -e /etc/apache2/apache2.conf ]; then fi +# 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 +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 - if [ -d "$PHP5DIR/$SAPI" ]; then - - 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 + fi done - # Check $PHP5CONFD directory. - if [ ! -d "$PHP5CONFD" ]; then - cp_echo "CN: Creating configuration directory $PHP5CONFD" - mkdir $PHP5CONFD - fi - # Check extension configuration in /etc/php5/conf.d/ directory. if [ ! -f "$PHP5CONFD/$php5ext.ini" ]; then @@ -113,61 +163,69 @@ 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 + + db_get php5-cn/${SAPI} || true + if [ "$RET" = "true" ]; then - ini_file="$PHP5DIR/$SAPI/php.ini" + ini_file="$PHP5DIR/$SAPI/php.ini" - 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 + 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" + - if [ -e "$ini_file_tmp" ]; then + if [ -e "$ini_file_tmp" ]; then rm -f "$ini_file_tmp" + fi fi done +db_stop || true + + # Restart Apache2 web server if needed. # if [ $need_restart -eq 1 ]; then diff --git a/debian/templates b/debian/templates new file mode 100644 index 0000000..1df1088 --- /dev/null +++ b/debian/templates @@ -0,0 +1,32 @@ +Template: php5-cn/apache2 +Type: boolean +Description: Zelite li aktivirati preporucene PHP5 postavke za Apache2? + Provjerom trenutne PHP5 konfiguracije za Apache2 (konfiguracijska + datoteka ${ini_file}), ustanovljeno je da su sljedece postavke aktivne: + . + upload_max_filesize = ${upload_max_filesize} + post_max_size = ${post_max_size} + memory_limit = ${memory_limit} + + Preporucamo sljedece: + . + upload_max_filesize = 256M + post_max_size = ${new_phplimit} + memory_limit = ${new_phplimit} + +Template: php5-cn/cli +Type: boolean +Description: Zelite li aktivirati preporucene PHP5 postavke za CLI? + Provjerom trenutne PHP5 konfiguracije za CLI (PHP interpreter + za komandnu liniju, konfiguracijska datoteka ${ini_file}), + ustanovljeno je da su sljedece postavke aktivne: + . + upload_max_filesize = ${upload_max_filesize} + post_max_size = ${post_max_size} + memory_limit = ${memory_limit} + + Preporucamo sljedece: + . + upload_max_filesize = 256M + post_max_size = ${new_phplimit} + memory_limit = ${new_phplimit} -- 1.7.10.4