@@ -, +, @@ Corrections --- C4/Installer/PerlDependencies.pm | 10 --- Makefile.PL | 15 +++- etc/koha-nginx.conf | 5 ++ misc/bin/koha-plack.sh | 148 +++++++++++++++++++++++++++------------ misc/bin/koha.psgi | 13 +++- rewrite-config.PL | 1 + skel/var/lock/koha/plack/README | 1 + skel/var/run/koha/plack/README | 1 + 8 files changed, 136 insertions(+), 58 deletions(-) mode change 100644 => 100755 misc/bin/koha-plack.sh mode change 100644 => 100755 misc/bin/koha.psgi create mode 100644 skel/var/lock/koha/plack/README create mode 100644 skel/var/run/koha/plack/README --- a/C4/Installer/PerlDependencies.pm +++ a/C4/Installer/PerlDependencies.pm @@ -284,11 +284,6 @@ our $PERL_DEPS = { 'required' => '1', 'min_ver' => '3.15' }, - 'Starman' => { - 'usage' => 'preforking PSGI/PLACK web server', - 'required' => '0', - 'min_ver' => '0.300' - }, 'CGI::Emulate::PSGI' => { 'usage' => 'PLACK', 'required' => '0', @@ -299,11 +294,6 @@ our $PERL_DEPS = { 'required' => '0', 'min_ver' => '0.15' }, - 'Plack::Middleware::Debug' => { - 'usage' => 'PLACK Debugging', - 'required' => '0', - 'min_ver' => '0.1' - }, 'Class::Factory::Util' => { 'usage' => 'Core', 'required' => '1', --- a/Makefile.PL +++ a/Makefile.PL @@ -196,6 +196,14 @@ Directory for Zebra's data files. Directory for Zebra's UNIX-domain sockets. +=item PLACK_LOCK_DIR + +Directory for Plack's lock files. + +=item PLACK_RUN_DIR + +Directory for Plack's UNIX-domain sockets. + =item MISC_DIR Directory for for miscellaenous scripts, among other @@ -306,7 +314,8 @@ my $target_map = { './skel' => 'NONE', './skel/var/log/koha' => { target => 'LOG_DIR', trimdir => -1 }, './skel/var/spool/koha' => { target => 'BACKUP_DIR', trimdir => -1 }, - './skel/var/run/koha/plack' => { target => 'PLACK_RUN_DIR', trimdir => -1 }, + './skel/var/run/koha/plack' => { target => 'PLACK_RUN_DIR', trimdir => -1 }, + './skel/var/lock/koha/plack' => { target => 'PLACK_LOCK_DIR', trimdir => 6 }, './skel/var/run/koha/zebradb' => { target => 'ZEBRA_RUN_DIR', trimdir => -1 }, './skel/var/lock/koha/zebradb/authorities' => { target => 'ZEBRA_LOCK_DIR', trimdir => 6 }, './skel/var/lib/koha/zebradb/authorities/key' => { target => 'ZEBRA_DATA_DIR', trimdir => 6 }, @@ -591,6 +600,7 @@ my %test_suite_override_dirs = ( ZEBRA_LOCK_DIR => ['var', 'lock', 'zebradb'], ZEBRA_DATA_DIR => ['var', 'lib', 'zebradb'], ZEBRA_RUN_DIR => ['var', 'run', 'zebradb'], + PLACK_LOCK_DIR => ['var', 'lock', 'plack'], PLACK_RUN_DIR => ['var', 'run', 'plack'], ); @@ -1298,6 +1308,7 @@ sub get_target_directories { $dirmap{'PLUGINS_DIR'} = File::Spec->catdir(@basedir, $package, 'var', 'lib', 'koha', 'plugins'); $dirmap{'ZEBRA_DATA_DIR'} = File::Spec->catdir(@basedir, $package, 'var', 'lib', 'zebradb'); $dirmap{'ZEBRA_RUN_DIR'} = File::Spec->catdir(@basedir, $package, 'var', 'run', 'zebradb'); + $dirmap{'PLACK_LOCK_DIR'} = File::Spec->catdir(@basedir, $package, 'var', 'lock', 'plack'); $dirmap{'PLACK_RUN_DIR'} = File::Spec->catdir(@basedir, $package, 'var', 'run', 'plack'); } elsif ($mode eq 'dev') { my $curdir = File::Spec->rel2abs(File::Spec->curdir()); @@ -1329,6 +1340,7 @@ sub get_target_directories { $dirmap{'BACKUP_DIR'} = File::Spec->catdir(@basedir, $package, 'var', 'spool'); $dirmap{'PLUGINS_DIR'} = File::Spec->catdir(@basedir, $package, 'var', 'lib', 'plugins'); $dirmap{'ZEBRA_DATA_DIR'} = File::Spec->catdir(@basedir, $package, 'var', 'lib', 'zebradb'); + $dirmap{'PLACK_LOCK_DIR'} = File::Spec->catdir(@basedir, $package, 'var', 'lock', 'plack'); $dirmap{'ZEBRA_RUN_DIR'} = File::Spec->catdir(@basedir, $package, 'var', 'run', 'zebradb'); $dirmap{'PLACK_RUN_DIR'} = File::Spec->catdir(@basedir, $package, 'var', 'run', 'plack'); } else { @@ -1354,6 +1366,7 @@ sub get_target_directories { $dirmap{'PLUGINS_DIR'} = File::Spec->catdir(File::Spec->rootdir(), 'var', 'lib', $package, 'plugins'); $dirmap{'ZEBRA_DATA_DIR'} = File::Spec->catdir(File::Spec->rootdir(), 'var', 'lib', $package, 'zebradb'); $dirmap{'ZEBRA_RUN_DIR'} = File::Spec->catdir(File::Spec->rootdir(), 'var', 'run', $package, 'zebradb'); + $dirmap{'PLACK_LOCK_DIR'} = File::Spec->catdir(File::Spec->rootdir(), 'var', 'lock', $package, 'plack'); $dirmap{'PLACK_RUN_DIR'} = File::Spec->catdir(File::Spec->rootdir(), 'var', 'run', $package, 'plack'); } --- a/etc/koha-nginx.conf +++ a/etc/koha-nginx.conf @@ -1,3 +1,8 @@ +#USE THIS AT YOUR OWN RISK# +#DEVELOPMENT ONLY# +#NOT RECOMMENDED FOR PRODUCTION# +#02/06/2013 + upstream backendurl { server unix:__PLACK_RUN_DIR__/plack.sock; } --- a/misc/bin/koha-plack.sh +++ a/misc/bin/koha-plack.sh @@ -1,4 +1,4 @@ -#!/bin/sh -e +#!/bin/bash # This file is part of Koha. # @@ -15,59 +15,119 @@ # Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place, # Suite 330, Boston, MA 02111-1307 USA -### BEGIN INIT INFO# Provides: koha-plack +### BEGIN INIT INFO +# Provides: koha-plack-daemon # Required-Start: $syslog $remote_fs -# Required-Stop: $syslog $remote_fs# Default-Start: 2 3 4 5 -# Default-Stop: 0 1 6# Short-Description: Plack server for Koha +# Required-Stop: $syslog $remote_fs +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: Plack server daemon for Koha ### END INIT INFO export KOHA_CONF=__KOHA_CONF_DIR__/koha-conf.xml -#export OPACDIR=__OPAC_WWW_DIR__ -#export INTRANETDIR=__OPAC_WWW_DIR__ -export LOGDIR=__LOG_DIR__ -USER=__KOHA_USER__ -GROUP=__KOHA_GROUP__ +NAME=KOHA +LOGDIR=__LOG_DIR__ +USER=www-data +GROUP=www-data RUNDIR=__PLACK_RUN_DIR__ -PIDFILE=$RUNDIR/plack.pid +LOCKDIR=__PLACK_LOCK_DIR__ +PIDFILE=$LOCKDIR/plack.pid +APP_PSGI=__SCRIPT_DIR__/koha.psgi +FCGI_LISTEN=$RUNDIR/plack.sock +#FCGI_LISTEN=127.0.0.1:5000 +OPTIONS="--listen $FCGI_LISTEN --access-log $LOGDIR/koha-access.log --error-log $LOGDIR/koha-error.log -M FindBin --max-requests 50 -E deployment $APP_PSGI" +DAEMON=$(which starman) + if [ ! -x "$DAEMON" ] ; then + OPTIONS="-s FCGI --listen $FCGI_LISTEN -E production --app $APP_PSGI --access-log $LOGDIR/koha-access.log --error-log $LOGDIR/koha-error.log" + DAEMON=$(which plackup) + fi -# Use one of these lines to choose between TCP port and UNIX socket listeners -SOCKET=$RUNDIR/plack.sock -#PORT=5000 +[ -f /lib/lsb/init-functions ] && . /lib/lsb/init-functions -case "$1" in - start) - echo "Starting Koha Plack Daemon" +start() +{ + log_daemon_msg "Starting plack server" "$NAME" + start-stop-daemon -b -m --start --quiet --pidfile "$PIDFILE" --exec $DAEMON -- $OPTIONS + sleep 3 + chown -R $USER:$GROUP $FCGI_LISTEN + chown -R $USER:$GROUP $LOCKDIR + if [ $? != 0 ]; then + log_end_msg 1 + exit 1 + else + log_end_msg 0 + fi +} - # create run and lock directories if needed; - # /var/run and /var/lock are completely cleared at boot - # on some platforms - if [ ! -d $RUNDIR ]; then - umask 022 - mkdir -p $RUNDIR - if [ $EUID -eq 0 ]; then - chown $USER:$GROUP $RUNDIR - fi - fi +signal() +{ - opt="$opt --access-log $LOGDIR/koha-access.log --error-log $LOGDIR/koha-error.log" - opt="$opt -M FindBin --max-requests 50 --workers 2 -E deployment" - if [ $SOCKET ]; then - opt="$opt --listen $SOCKET -D --pid $PIDFILE" - elif [ $PORT ]; then - opt="$opt --port $PORT -D --pid $PIDFILE" + if [ "$1" = "stop" ]; then + SIGNAL="TERM" + log_daemon_msg "Stopping plack server" "$NAME" + else + if [ "$1" = "reload" ]; then + SIGNAL="HUP" + log_daemon_msg "Reloading plack server" "$NAME" + else + echo "ERR: wrong parameter given to signal()" + exit 1 + fi + fi + if [ -f "$PIDFILE" ]; then + start-stop-daemon --stop --signal $SIGNAL --quiet --pidfile "$PIDFILE" + if [ $? = 0 ]; then + log_end_msg 0 + else + SIGNAL="KILL" + start-stop-daemon --stop --signal $SIGNAL --quiet --pidfile "$PIDFILE" + if [ $? != 0 ]; then + log_end_msg 1 + [ $2 != 0 ] || exit 0 + else + rm "$PIDFILE" + log_end_msg 0 + fi fi - starman $opt __SCRIPT_DIR__/koha.psgi - - if [ $SOCKET ]; then - chown $USER:$GROUP $SOCKET - chmod 660 $SOCKET + if [ "$SIGNAL" = "KILL" ]; then + rm -f "$PIDFILE" fi - ;; + else + log_end_msg 0 + fi +} + +case "$1" in + start) + start + ;; + + force-start) + start + ;; + stop) - start-stop-daemon --stop --pidfile $PIDFILE - ;; + signal stop 0 + ;; + + force-stop) + signal stop 0 + ;; + + reload) + signal reload 0 + ;; + + force-reload|restart) + signal stop 1 + sleep 2 + start + ;; + *) - echo "Usage: koha-plack {start|stop}" - exit 1 - ;; -esac + echo "Usage: /etc/init.d/$NAME {start|force-start|stop|force-stop|reload|restart|force-reload}" + exit 1 + ;; +esac + +exit 0 --- a/misc/bin/koha.psgi +++ a/misc/bin/koha.psgi @@ -10,7 +10,6 @@ use lib("__PERL_MODULE_DIR__/installer"); use Plack::Builder; use Plack::App::CGIBin; use Plack::App::Directory; -use Plack::Middleware::Debug; use Plack::App::URLMap; use C4::Context; use C4::Languages; @@ -22,16 +21,24 @@ use C4::Koha; use C4::XSLT; use C4::Branch; use C4::Category; +use Module::Load::Conditional qw[can_load check_install requires]; + +my $use_list = { + +}; + +if(can_load( modules => { Plack::Middleware::Debug => undef} ) && $ENV{KOHA_DEBUG}){ + my $panels = Plack::Middleware::Debug->default_panels; +} C4::Context->disable_syspref_cache(); my $intra=Plack::App::CGIBin->new(root => "__INTRANET_CGI_DIR__" ); my $opac = Plack::App::CGIBin->new(root => "__OPAC_CGI_DIR__"); -my $panels = Plack::Middleware::Debug->default_panels; builder { enable_if{ - $ENV{DEBUG} + $ENV{KOHA_DEBUG} } 'Debug', panels => [[ 'DBITrace', level => 1 ], @$panels ]; enable "Plack::Middleware::Static"; --- a/rewrite-config.PL +++ a/rewrite-config.PL @@ -125,6 +125,7 @@ $prefix = $ENV{'INSTALL_BASE'} || "/usr"; '__ZEBRA_LOCK_DIR__' => "$prefix/var/lock/zebradb", '__ZEBRA_DATA_DIR__' => "$prefix/var/lib/zebradb", '__ZEBRA_RUN_DIR__' => "$prefix/var/run/zebradb", + '__PLACK_LOCK_DIR__' => "$prefix/var/lock/plack", '__PLACK_RUN_DIR__' => "$prefix/var/run/plack", '__ZEBRA_MARC_FORMAT__' => 'marc21', '__ZEBRA_LANGUAGE__' => 'en', --- a/skel/var/lock/koha/plack/README +++ a/skel/var/lock/koha/plack/README @@ -0,0 +1, @@ +Plack lock dir --- a/skel/var/run/koha/plack/README +++ a/skel/var/run/koha/plack/README @@ -0,0 +1, @@ +Plack Unix-domain sockets --