Date: Tue, 8 Jun 2010 14:16:13 +0200 (CEST) From: Martin Matuska <mm@FreeBSD.org> To: FreeBSD-gnats-submit@FreeBSD.org Cc: admin@lissyara.su Subject: ports/147688: [PATCH] lang/php52: add support for PHP-FPM Message-ID: <20100608121613.7030A38095@mail2.vx.sk> Resent-Message-ID: <201006081220.o58CK46h053793@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 147688 >Category: ports >Synopsis: [PATCH] lang/php52: add support for PHP-FPM >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-ports-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: change-request >Submitter-Id: current-users >Arrival-Date: Tue Jun 08 12:20:03 UTC 2010 >Closed-Date: >Last-Modified: >Originator: Martin Matuska >Release: FreeBSD 8.1-PRERELEASE amd64 >Organization: >Environment: System: FreeBSD neo.vx.sk 8.1-PRERELEASE FreeBSD 8.1-PRERELEASE #3 r208765M: Thu Jun 3 09:59:09 >Description: Add optional support fpr PHP-FPM (FastCGI process manager) Includes sample config and rc script. http://php-fpm.org/ The distfile will be available on MASTER_SITE_LOCAL shortly. Until MASTER_SITE_LOCAL gets updated it can be fetched from: http://people.freebsd.org/~mm/distfiles/php-5.2.13-fpm-0.5.14-freebsd.patch.gz Added file(s): - files/php-fpm.conf.sample.in - files/php-fpm.in Port maintainer (admin@lissyara.su) is cc'd. Generated with FreeBSD Port Tools 0.99 >How-To-Repeat: >Fix: --- php52-5.2.13_3.patch begins here --- Index: Makefile =================================================================== RCS file: /home/pcvs/ports/lang/php52/Makefile,v retrieving revision 1.5 diff -u -r1.5 Makefile --- Makefile 5 Jun 2010 19:52:11 -0000 1.5 +++ Makefile 8 Jun 2010 12:09:26 -0000 @@ -7,7 +7,7 @@ PORTNAME= php52 PORTVERSION= 5.2.13 -PORTREVISION= 2 +PORTREVISION= 3 CATEGORIES?= lang devel www MASTER_SITES= ${MASTER_SITE_PHP} MASTER_SITE_SUBDIR= distributions @@ -45,6 +45,7 @@ REDIRECT "Enable force-cgi-redirect support (CGI only)" off \ DISCARD "Enable discard-path support (CGI only)" off \ FASTCGI "Enable fastcgi support (CGI only)" on \ + FPM "Enable fastcgi process manager (CGI only)" off \ PATHINFO "Enable path-info-check support (CGI only)" on CONFLICTS= php4-4* php5-5.3* @@ -55,6 +56,37 @@ PATCH_DIST_STRIP= -p1 +.if defined(WITH_FPM) && defined(WITH_CGI) +. if defined(WITHOUT_FASTCGI) +IGNORE= FPM requires FastCGI support +. endif +PATCHFILES+= php-5.2.13-fpm-0.5.14-freebsd.patch.gz +PATCH_SITES+= ${MASTER_SITE_LOCAL} +PATCH_SITE_SUBDIR+= mm +LIB_DEPENDS+= event-1.4:${PORTSDIR}/devel/libevent +PHP_FPM_UID?= www +PHP_FPM_GID?= www +PHP_FPM_PID?= /var/run/php-fpm/php-fpm.pid +PHP_FPM_LOG?= /var/log/php-fpm/php-fpm.log +SUB_FILES+= php-fpm.conf.sample +SUB_LIST+= PHP_FPM_UID=${PHP_FPM_UID} \ + PHP_FPM_GID=${PHP_FPM_GID} \ + PHP_FPM_PID=${PHP_FPM_PID} \ + PHP_FPM_LOG=${PHP_FPM_LOG} +USE_RC_SUBR+= php-fpm +PLIST_SUB+= FPM="" \ + PHP_FPM_PID=${PHP_FPM_PID} \ + PHP_FPM_LOG=${PHP_FPM_LOG} + +CONFIGURE_ARGS+= --enable-fpm \ + --with-fpm-conf=${PREFIX}/etc/php-fpm.conf \ + --with-fpm-pid=${PHP_FPM_PID} \ + --with-fpm-log=${PHP_FPM_LOG} \ + --with-libevent=${LOCALBASE} +.else +PLIST_SUB+= FPM="@comment " +.endif + .if !defined(WITHOUT_SUHOSIN) PATCHFILES+= suhosin-patch-${PORTVERSION}-0.9.7.patch.gz:suhosin PATCH_SITES+= http://download.suhosin.org/:suhosin @@ -153,6 +185,10 @@ post-patch: @${TOUCH} ${WRKSRC}/ext/php_config.h @${REINPLACE_CMD} "s|^\(extension_dir\)|; \1|" ${WRKSRC}/php.ini-* +.if defined(WITH_FPM) && defined(WITH_CGI) + @${REINPLACE_CMD} -e 's,BUILD_CGI=\"\\$$\(.*\)\\$$(EXTRA_LIBS),BUILD_CGI=\"\\$$\1\\$$(EXTRA_LIBS) \\$$(SAPI_EXTRA_LIBS),g' \ + ${WRKSRC}/sapi/cgi/config9.m4 +.endif pre-configure: @${CAT} ${WRKSRC}/acinclude.m4 ${WRKSRC}/build/libtool.m4 > ${WRKSRC}/aclocal.m4 @@ -167,6 +203,12 @@ @${INSTALL_DATA} ${WRKSRC}/php.ini-recommended ${PREFIX}/etc @${INSTALL_DATA} ${WRKDIR}/php.conf ${PREFIX}/etc @${TOUCH} ${PREFIX}/include/php/ext/php_config.h +.if defined(WITH_FPM) && defined(WITH_CGI) + @${INSTALL_DATA} ${WRKDIR}/php-fpm.conf.sample ${PREFIX}/etc + @${MKDIR} `dirname ${PHP_FPM_PID}` + @${MKDIR} `dirname ${PHP_FPM_LOG}` + @cd ${PREFIX}/etc && ${CP} -n php-fpm.conf.sample php-fpm.conf +.endif .if defined(WITH_APACHE) @${CAT} ${PKGMESSAGE} .endif Index: pkg-plist =================================================================== RCS file: /home/pcvs/ports/lang/php52/pkg-plist,v retrieving revision 1.1 diff -u -r1.1 pkg-plist --- pkg-plist 23 Apr 2010 15:03:12 -0000 1.1 +++ pkg-plist 8 Jun 2010 12:09:26 -0000 @@ -3,6 +3,9 @@ bin/php-config bin/phpize etc/php.conf +%%FPM%%@unexec if cmp -s %D/etc/php-fpm.conf %D/etc/php-fpm.conf.sample; then rm -f %D/etc/php-fpm.conf; fi +%%FPM%%etc/php-fpm.conf.sample +%%FPM%%@exec cp -n %D/%F %B/php-fpm.conf etc/php.ini-dist etc/php.ini-recommended include/php/TSRM/TSRM.h @@ -206,3 +209,8 @@ @dirrmtry include/php @dirrm lib/php/build @dirrmtry lib/php +%%FPM%%@cwd / +%%FPM%%@exec mkdir -p `dirname %%PHP_FPM_PID%%` +%%FPM%%@exec mkdir -p `dirname %%PHP_FPM_LOG%%` +%%FPM%%@dirrmtry `dirname %%PHP_FPM_PID%%` +%%FPM%%@dirrmtry `dirname %%PHP_FPM_LOG%%` Index: files/php-fpm.conf.sample.in =================================================================== RCS file: files/php-fpm.conf.sample.in diff -N files/php-fpm.conf.sample.in --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ files/php-fpm.conf.sample.in 8 Jun 2010 12:09:26 -0000 @@ -0,0 +1,157 @@ +<?xml version="1.0" ?> +<!-- $FreeBSD$ --> +<configuration> + + All relative paths in this config are relative to php's install prefix + + <section name="global_options"> + + Pid file + <value name="pid_file">%%PHP_FPM_PID%%</value> + + Error log file + <value name="error_log">%%PHP_FPM_LOG%%</value> + + Log level + <value name="log_level">notice</value> + + When this amount of php processes exited with SIGSEGV or SIGBUS ... + <value name="emergency_restart_threshold">10</value> + + ... in a less than this interval of time, a graceful restart will be initiated. + Useful to work around accidental curruptions in accelerator's shared memory. + <value name="emergency_restart_interval">1m</value> + + Time limit on waiting child's reaction on signals from master + <value name="process_control_timeout">5s</value> + + Set to 'no' to debug fpm + <value name="daemonize">yes</value> + + </section> + + <workers> + + <section name="pool"> + + Name of pool. Used in logs and stats. + <value name="name">default</value> + + Address to accept fastcgi requests on. + Valid syntax is 'ip.ad.re.ss:port' or just 'port' or '/path/to/unix/socket' + <value name="listen_address">127.0.0.1:9000</value> + + <value name="listen_options"> + + Set listen(2) backlog + <value name="backlog">-1</value> + + Set permissions for unix socket, if one used. + In Linux read/write permissions must be set in order to allow connections from web server. + Many BSD-derrived systems allow connections regardless of permissions. + <value name="owner">%%PHP_FPM_UID%%</value> + <value name="group">%%PHP_FPM_GID%%</value> + <value name="mode">0666</value> + </value> + + Additional php.ini defines, specific to this pool of workers. + <value name="php_defines"> + <!-- <value name="sendmail_path">/usr/sbin/sendmail -t -i</value> --> + <!-- <value name="display_errors">0</value> --> + </value> + + Unix user of processes + <value name="user">%%PHP_FPM_UID%%</value> + + Unix group of processes + <value name="group">%%PHP_FPM_GID%%</value> + + Process manager settings + <value name="pm"> + + Sets style of controling worker process count. + Valid values are 'static' and 'apache-like' + <value name="style">static</value> + + Sets the limit on the number of simultaneous requests that will be served. + Equivalent to Apache MaxClients directive. + Equivalent to PHP_FCGI_CHILDREN environment in original php.fcgi + Used with any pm_style. + <value name="max_children">5</value> + + Settings group for 'apache-like' pm style + <value name="apache_like"> + + Sets the number of server processes created on startup. + Used only when 'apache-like' pm_style is selected + <value name="StartServers">20</value> + + Sets the desired minimum number of idle server processes. + Used only when 'apache-like' pm_style is selected + <value name="MinSpareServers">5</value> + + Sets the desired maximum number of idle server processes. + Used only when 'apache-like' pm_style is selected + <value name="MaxSpareServers">35</value> + + </value> + + </value> + + The timeout (in seconds) for serving a single request after which the worker process will be terminated + Should be used when 'max_execution_time' ini option does not stop script execution for some reason + '0s' means 'off' + <value name="request_terminate_timeout">0s</value> + + The timeout (in seconds) for serving of single request after which a php backtrace will be dumped to slow.log file + '0s' means 'off' + <value name="request_slowlog_timeout">0s</value> + + The log file for slow requests + <value name="slowlog">logs/slow.log</value> + + Set open file desc rlimit + <value name="rlimit_files">1024</value> + + Set max core size rlimit + <value name="rlimit_core">0</value> + + Chroot to this directory at the start, absolute path + <value name="chroot"></value> + + Chdir to this directory at the start, absolute path + <value name="chdir"></value> + + Redirect workers' stdout and stderr into main error log. + If not set, they will be redirected to /dev/null, according to FastCGI specs + <value name="catch_workers_output">yes</value> + + How much requests each process should execute before respawn. + Useful to work around memory leaks in 3rd party libraries. + For endless request processing please specify 0 + Equivalent to PHP_FCGI_MAX_REQUESTS + <value name="max_requests">500</value> + + Comma separated list of ipv4 addresses of FastCGI clients that allowed to connect. + Equivalent to FCGI_WEB_SERVER_ADDRS environment in original php.fcgi (5.2.2+) + Makes sense only with AF_INET listening socket. + <value name="allowed_clients">127.0.0.1</value> + + Pass environment variables like LD_LIBRARY_PATH + All $VARIABLEs are taken from current environment + <value name="environment"> + <value name="HOSTNAME">$HOSTNAME</value> + <value name="PATH">/usr/local/bin:/usr/bin:/bin</value> + <value name="TMP">/tmp</value> + <value name="TMPDIR">/tmp</value> + <value name="TEMP">/tmp</value> + <value name="OSTYPE">$OSTYPE</value> + <value name="MACHTYPE">$MACHTYPE</value> + <value name="MALLOC_CHECK_">2</value> + </value> + + </section> + + </workers> + +</configuration> Index: files/php-fpm.in =================================================================== RCS file: files/php-fpm.in diff -N files/php-fpm.in --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ files/php-fpm.in 8 Jun 2010 12:09:26 -0000 @@ -0,0 +1,55 @@ +#!/bin/sh +# +# $FreeBSD$ +# + +# PROVIDE: php-fpm +# REQUIRE: LOGIN +# BEFORE: securelevel +# KEYWORD: shutdown + +# Add the following lines to /etc/rc.conf to enable php-fpm: +# +# php_fpm_enable="YES" +# php_fpm_config="" +# + +. /etc/rc.subr + +name="php_fpm" +rcvar=`set_rcvar` + +extra_commands="reload logrotate" + +command="%%PREFIX%%/bin/php-cgi" +pidfile="%%PHP_FPM_PID%%" +reload_cmd="php_fpm_reload_cmd" +logrotate_cmd="php_fpm_logrotate_cmd" + +# read configuration and set defaults +load_rc_config "$name" +: ${php_fpm_enable="NO"} +: ${php_fpm_config="%%PREFIX%%/etc/php-fpm.conf"} + +required_files="${php_fpm_config}" +command_args="--fpm --fpm-config ${php_fpm_config}" + +php_fpm_reload_cmd () { + if [ -z "$rc_pid" ]; then + _run_rc_notrunning + return 1 + fi + echo "Reloading $name." + kill -USR2 $rc_pid +} + +php_fpm_logrotate_cmd () { + if [ -z "$rc_pid" ]; then + _run_rc_notrunning + return 1 + fi + echo "Rotating logs $name." + kill -USR1 $rc_pid +} + +run_rc_command "$1" --- php52-5.2.13_3.patch ends here --- >Release-Note: >Audit-Trail: >Unformatted:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20100608121613.7030A38095>