Full FastCGI server install (#583)
parent
98c52bc8c9
commit
dee26165c2
@ -0,0 +1,15 @@ |
||||
# Number of process (default: 7) |
||||
#NPROC = 7 |
||||
|
||||
# Portal CGI path |
||||
#PORTAL_PATH = /var/lib/lemonldap-ng/portal |
||||
|
||||
# Unix socket to listen to |
||||
#SOCKET = /run/llng-fastcgi.sock |
||||
|
||||
# Pid file |
||||
#PID = /run/llng-fastcgi.pid |
||||
|
||||
# User and GROUP |
||||
USER = www-data |
||||
GROUP = www-data |
@ -0,0 +1,123 @@ |
||||
#!/bin/sh |
||||
|
||||
### BEGIN INIT INFO |
||||
# Provides: llng-fastcgi-server |
||||
# Required-Start: $local_fs $remote_fs $network $syslog $named |
||||
# Required-Stop: $local_fs $remote_fs $network $syslog $named |
||||
# Default-Start: 2 3 4 5 |
||||
# Default-Stop: 0 1 6 |
||||
# Short-Description: starts the Lemonldap::NG FastCGI server |
||||
# Description: starts Lemonldap::NG FastCGI server using start-stop-daemon |
||||
### END INIT INFO |
||||
|
||||
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin |
||||
DAEMON=/usr/sbin/llgn-fastcgi-server |
||||
NAME=llng-fastcgi-server |
||||
DESC=llng-fastcgi-server |
||||
|
||||
# Include llng-fastcgi-server defaults if available |
||||
if [ -r /etc/default/lemonldap-ng-fastcgi-server ]; then |
||||
. /etc/default/lemonldap-ng-fastcgi-server |
||||
fi |
||||
|
||||
STOP_SCHEDULE="${STOP_SCHEDULE:-QUIT/5/TERM/5/KILL/5}" |
||||
|
||||
test -x $DAEMON || exit 0 |
||||
|
||||
. /lib/init/vars.sh |
||||
. /lib/lsb/init-functions |
||||
|
||||
# Try to extract llng-fastcgi-server pidfile |
||||
if [ -z "$PID" ]; then |
||||
PID=/run/llng-fastcgi-server.pid |
||||
fi |
||||
|
||||
start_server() { |
||||
# Start the daemon/service |
||||
# |
||||
# Returns: |
||||
# 0 if daemon has been started |
||||
# 1 if daemon was already running |
||||
# 2 if daemon could not be started |
||||
start-stop-daemon --start --quiet --pidfile $PID --exec $DAEMON --test > /dev/null \ |
||||
|| return 1 |
||||
start-stop-daemon --start --quiet --pidfile $PID --exec $DAEMON -- \ |
||||
$DAEMON_OPTS 2>/dev/null \ |
||||
|| return 2 |
||||
} |
||||
|
||||
stop_server() { |
||||
# Stops the daemon/service |
||||
# |
||||
# Return |
||||
# 0 if daemon has been stopped |
||||
# 1 if daemon was already stopped |
||||
# 2 if daemon could not be stopped |
||||
# other if a failure occurred |
||||
start-stop-daemon --stop --quiet --retry=$STOP_SCHEDULE --pidfile $PID --name $NAME |
||||
RETVAL="$?" |
||||
sleep 1 |
||||
return "$RETVAL" |
||||
} |
||||
|
||||
reload_server() { |
||||
# Function that sends a SIGHUP to the daemon/service |
||||
start-stop-daemon --stop --signal HUP --quiet --pidfile $PID --name $NAME |
||||
return 0 |
||||
} |
||||
|
||||
case "$1" in |
||||
start) |
||||
log_daemon_msg "Starting $DESC" "$NAME" |
||||
start_server |
||||
case "$?" in |
||||
0|1) log_end_msg 0 ;; |
||||
2) log_end_msg 1 ;; |
||||
esac |
||||
;; |
||||
stop) |
||||
log_daemon_msg "Stopping $DESC" "$NAME" |
||||
stop_server |
||||
case "$?" in |
||||
0|1) log_end_msg 0 ;; |
||||
2) log_end_msg 1 ;; |
||||
esac |
||||
;; |
||||
restart) |
||||
log_daemon_msg "Restarting $DESC" "$NAME" |
||||
|
||||
# Check configuration before stopping llng-fastcgi-server |
||||
if ! test_config; then |
||||
log_end_msg 1 # Configuration error |
||||
exit $? |
||||
fi |
||||
|
||||
stop_server |
||||
case "$?" in |
||||
0|1) |
||||
start_server |
||||
case "$?" in |
||||
0) log_end_msg 0 ;; |
||||
1) log_end_msg 1 ;; # Old process is still running |
||||
*) log_end_msg 1 ;; # Failed to start |
||||
esac |
||||
;; |
||||
*) |
||||
# Failed to stop |
||||
log_end_msg 1 |
||||
;; |
||||
esac |
||||
;; |
||||
reload|force-reload) |
||||
log_daemon_msg "Reloading $DESC configuration" "$NAME" |
||||
reload_server |
||||
log_end_msg $? |
||||
;; |
||||
status) |
||||
status_of_proc -p $PID "$DAEMON" "$NAME" && exit 0 || exit $? |
||||
;; |
||||
*) |
||||
echo "Usage: $NAME {start|stop|restart|reload|force-reload|status}" >&2 |
||||
exit 3 |
||||
;; |
||||
esac |
@ -0,0 +1 @@ |
||||
/usr/sbin/llng-fastcgi-server |
@ -0,0 +1,14 @@ |
||||
[Unit] |
||||
Description=FastCGI server for Lemonldap::NG websso system |
||||
|
||||
[Service] |
||||
Type=forking |
||||
PIDFile=/run/llng-fasctcgi.pid |
||||
ExecStart=/usr/sbin/llng-fastcgi-server |
||||
ExecStop=-/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/llng-fasctcgi.sock |
||||
TimeoutStop=2 |
||||
KillMode=mixed |
||||
|
||||
[Install] |
||||
WantedBy=multi-user.target |
||||
|
@ -0,0 +1,15 @@ |
||||
# Number of process (default: 7) |
||||
#NPROC = 7 |
||||
|
||||
# Portal CGI path |
||||
#PORTAL_PATH = /var/lib/lemonldap-ng/portal |
||||
|
||||
# Unix socket to listen to |
||||
#SOCKET = /run/llng-fastcgi.sock |
||||
|
||||
# Pid file |
||||
#PID = /run/llng-fastcgi.pid |
||||
|
||||
# User and GROUP |
||||
USER = __USER__ |
||||
GROUP = __GROUP__ |
@ -0,0 +1,75 @@ |
||||
#!/usr/bin/env perl |
||||
|
||||
use Plack::Runner; |
||||
use strict; |
||||
use warnings; |
||||
use POSIX; |
||||
use Getopt::Std; |
||||
|
||||
our %opts; |
||||
my %_apps; |
||||
|
||||
getopts( 'n:p:s:u:g:', \%opts ); |
||||
|
||||
$opts{n} ||= $ENV{NPROC} || 7; |
||||
$opts{p} ||= $ENV{PID} || '/run/llng-fastcgi.pid'; |
||||
$opts{s} ||= $ENV{SOCKET} || '/run/llng-fastcgi.sock'; |
||||
$opts{a} ||= $ENV{PORTAL_PATH} || '/var/lib/lemonldap-ng/portal'; |
||||
$opts{u} ||= $ENV{USER}; |
||||
$opts{g} ||= $ENV{GROUP}; |
||||
|
||||
if ( $opts{g} ) { |
||||
my $grp = getgrnam( $opts{g} ) or warn "Can't change uid to $opts{g}"; |
||||
POSIX::setuid($grp); |
||||
} |
||||
|
||||
if ( $opts{u} ) { |
||||
my $uid = getpwnam( $opts{u} ) or warn "Can't change uid to $opts{u}"; |
||||
POSIX::setuid($uid); |
||||
} |
||||
|
||||
my %builder = ( |
||||
handler => sub { |
||||
require Lemonldap::NG::Handler::Nginx; |
||||
return Lemonldap::NG::Handler::Nginx->run( {} ); |
||||
}, |
||||
manager => sub { |
||||
require Lemonldap::NG::Manager; |
||||
return Lemonldap::NG::Manager->run( {} ); |
||||
}, |
||||
auth => sub { |
||||
require CGI::Emulate::PSGI; |
||||
require CGI::Compile; |
||||
return CGI::Emulate::PSGI->handler( |
||||
CGI::Compile->compile("$opts{a}/index.pl") ); |
||||
}, |
||||
); |
||||
|
||||
unless ($>) { |
||||
die "Refuse to run as root. Aborting"; |
||||
} |
||||
|
||||
my $app = sub { |
||||
my $type = $_[0]->{LLTYPE} || 'handler'; |
||||
return $_apps{$type}->(@_) if ( defined $_apps{$type} ); |
||||
if ( defined $builder{$type} ) { |
||||
$_apps{$type} = $builder{$type}->(); |
||||
return $_apps{$type}->(@_); |
||||
} |
||||
die "Unknown PSGI type $type"; |
||||
}; |
||||
|
||||
my $server = Plack::Runner->new(); |
||||
$server->parse_options( |
||||
'-s' => 'FCGI', |
||||
'-E' => 'deployment', |
||||
'--pid' => $opts{p}, |
||||
'--nproc' => $opts{n}, |
||||
'--listen' => [ $opts{s} ], |
||||
'--proc-title' => 'llng-fastcgi-server', |
||||
'--daemonize', |
||||
'--no-default-middleware', |
||||
); |
||||
|
||||
$server->run($app); |
||||
|
Loading…
Reference in new issue