b1fca01996-11-12Per Hedbor #!/bin/sh
fd12951997-09-07Henrik Grubbström (Grubba) #
7c6da61998-11-01Henrik Grubbström (Grubba) # $Id: start,v 1.52 1998/10/31 23:43:48 grubba Exp $
b1fca01996-11-12Per Hedbor 
c6420b1998-06-02Henrik Grubbström (Grubba) VERSION=202; BETA=.b;
b1fca01996-11-12Per Hedbor  # Can be set with '--config-dir=DIR' DIR=../configurations/ LOGDIR=../logs/ FILES="default"
3e7d3b1998-03-20Per Hedbor program=base_server/roxenloader.pike
7c6da61998-11-01Henrik Grubbström (Grubba) extra_args=""
b1fca01996-11-12Per Hedbor 
3c31841998-03-01Per Hedbor # Enable threads (if available) on Solaris. # Most other OS's have thread bugs that cause them or Roxen to crash. if uname | grep 'SunOS' >/dev/null 2>&1; then if uname -r | grep '5\.[5-9]' >/dev/null 2>&1; then
8edfa31998-08-20Per Hedbor  if [ x"$1" != "x--help" ] ; then echo 'Solaris 2.5 or later detected. Enabling threads (if available).' fi
3c31841998-03-01Per Hedbor  DEFINES="$DEFINES -DENABLE_THREADS" fi fi
fd12951997-09-07Henrik Grubbström (Grubba) # Roxen will create files as the initial user, # which it expects to be able to read as the run-time user. umask 022
1c48181997-03-02Henrik Grubbström (Grubba) # Pike default Master-program
7cb64f1998-01-17Henrik Grubbström (Grubba) if [ "x$PIKE_MASTER" = "x" ]; then
133f9f1998-07-08Martin Stjernholm  if [ -d share/pike ]; then
196f041998-07-08Martin Stjernholm  # This is used with localinstall
133f9f1998-07-08Martin Stjernholm  DEFINES="$DEFINES -Ishare/pike/include" PIKE_MODULE_PATH="$PIKE_MODULE_PATH:share/pike/modules" fi if [ -f lib/master.pike ]; then
026abf1998-05-10Henrik Grubbström (Grubba)  DEFINES="$DEFINES -mlib/master.pike -Ilib/include" PIKE_MODULE_PATH="$PIKE_MODULE_PATH:lib/modules"
53dbe81998-03-01Per Hedbor  elif [ -f lib/pike/master.pike ]; then
026abf1998-05-10Henrik Grubbström (Grubba)  DEFINES="$DEFINES -mlib/pike/master.pike -Ilib/pike/include" PIKE_MODULE_PATH="$PIKE_MODULE_PATH:lib/pike/modules"
4fed401997-04-16Henrik Grubbström (Grubba)  fi
95721d1998-05-11Martin Stjernholm  export PIKE_MODULE_PATH
7cb64f1998-01-17Henrik Grubbström (Grubba) else # This is usefull when using several different Pikes.
f9e2061998-04-19Henrik Grubbström (Grubba)  # Specify include and module paths with # PIKE_INCLUDE_PATH and PIKE_MODULE_PATH # they are handled automatically by the master, # so no need to do it here.
7cb64f1998-01-17Henrik Grubbström (Grubba)  DEFINES="$DEFINES -m$PIKE_MASTER"
d0ee181997-03-01Henrik Grubbström (Grubba) fi
1c48181997-03-02Henrik Grubbström (Grubba)  # Extra module-path
d0ee181997-03-01Henrik Grubbström (Grubba) if [ -d etc/modules ]; then
cf1e7c1997-04-19Henrik Grubbström (Grubba)  DEFINES="$DEFINES -Metc/modules"
1c48181997-03-02Henrik Grubbström (Grubba) fi # Extra include-path if [ -d etc/include ]; then
cf1e7c1997-04-19Henrik Grubbström (Grubba)  DEFINES="$DEFINES -Ietc/include"
1c48181997-03-02Henrik Grubbström (Grubba) fi # Extra include-path (2) if [ -d base_server ]; then
cf1e7c1997-04-19Henrik Grubbström (Grubba)  DEFINES="$DEFINES -Ibase_server"
d0ee181997-03-01Henrik Grubbström (Grubba) fi
b1fca01996-11-12Per Hedbor 
4d14291998-04-28Henrik Grubbström (Grubba) # Extra program-path DEFINES="$DEFINES -P`pwd`"
b88bb51998-10-16Henrik Grubbström (Grubba) # Support for adding local pike-modules if [ -d ../local/etc/. ]; then # Extra module-path if [ -d ../local/etc/modules/. ]; then DEFINES="$DEFINES -M../local/etc/modules" fi # Extra include-path if [ -d ../local/etc/include ]; then DEFINES="$DEFINES -I../local/etc/include" fi # Extra program-path DEFINES="$DEFINES -P../local/etc" fi
7e1aee1997-08-10Henrik Grubbström (Grubba) # Extra kludge for HPUX # HPUX doesn't like group 60001(nobody) if uname | grep 'HP-UX' >/dev/null 2>&1; then echo 'WARNING: Applying kludge for HPUX. (see base_server/privs.pike)' DEFINES="$DEFINES -DHPUX_KLUDGE" fi
d0ee181997-03-01Henrik Grubbström (Grubba) pike=pike if [ -x bin/pike ] ; then pike=bin/pike; fi
53dbe81998-03-01Per Hedbor if [ -x bin/roxen ] ; then pike=bin/roxen; fi
d8f3ff1998-06-18Henrik Grubbström (Grubba) if [ "x$PIKE" = "x" ]; then :; else if [ -x "$PIKE" ]; then pike="$PIKE"; fi fi
b1fca01996-11-12Per Hedbor 
c6420b1998-06-02Henrik Grubbström (Grubba) gdb=no
b1fca01996-11-12Per Hedbor ####### END PREAMBLE ## Parse all arguments.
82f5191997-03-02Per Hedbor ## GNU-style, long options only, except for -D, simply passed on. parse_args() { while [ ! c"$1" = "c" ] ; do
b1fca01996-11-12Per Hedbor  case $1 in
4019f81997-03-01Per Hedbor  -D*) DEFINES="$DEFINES $1" ;;
82f5191997-03-02Per Hedbor # Used by the 'install' script
a413051998-08-10Per Hedbor  --truss) pike="truss $pike" ;;
b1fca01996-11-12Per Hedbor  --log-dir=*) LOGDIR=`echo $1 | sed -e 's/--log-dir=//'` ;; --config-dir=*) DIR=`echo $1 | sed -e 's/--config-dir=//'`
6a85661997-04-10Henrik Grubbström (Grubba)  FILES=`echo $1 | sed -e's/--config-dir=//' -e's/\.//g' -e's./..g' -e 's.-..g'`
b1fca01996-11-12Per Hedbor  ;;
7c6da61998-11-01Henrik Grubbström (Grubba)  --pid-file=*) extra_args="$extra_args $1" ;;
8a788c1998-07-22David Hedbor  '--debug'|'--with-debug'|'--enable-debug')
59f64b1997-01-27Per Hedbor  debug=1 ;;
8edfa31998-08-20Per Hedbor  '--without-debug') debug=-1 ;;
8a788c1998-07-22David Hedbor  '--fd-debug'|'--with-fd-debug'|'--enable-fd-debug')
cc4fdd1998-03-26Per Hedbor  DEFINES="-DFD_DEBUG $DEFINES" ;;
8a788c1998-07-22David Hedbor  '--threads'|'--with-threads'|'--enable-threads')
3c31841998-03-01Per Hedbor  DEFINES="-DENABLE_THREADS $DEFINES" ;;
8a788c1998-07-22David Hedbor  '--no-threads'|'--without-threads'|'--disable-threads')
3c31841998-03-01Per Hedbor  DEFINES="`echo $DEFINES | sed -e 's/-DENABLE_THREADS//'`" ;;
8edfa31998-08-20Per Hedbor  '--with-profile'|'--profile')
3c31841998-03-01Per Hedbor  DEFINES="-DPROFILE $DEFINES" ;;
8edfa31998-08-20Per Hedbor  '--with-file-profile'|'--file-profile') DEFINES="-DPROFILE -DFILE_PROFILE $DEFINES" ;;
8a788c1998-07-22David Hedbor  '--keep-alive'|'--with-keep-alive'|'--enable-keep-alive')
3c31841998-03-01Per Hedbor  DEFINES="-DKEEP_ALIVE $DEFINES" ;;
a8135b1996-11-12Per Hedbor  '--once') once=1 ;;
c6420b1998-06-02Henrik Grubbström (Grubba)  '--gdb') gdb=gdb once=1 ;;
3e7d3b1998-03-20Per Hedbor  '--program') program="$2" shift ;;
b1fca01996-11-12Per Hedbor  '--version')
c0ca361997-05-07Henrik Grubbström (Grubba)  echo Roxen Challenger 1.`expr $VERSION / 100`$BETA`expr $VERSION % 100`
b1fca01996-11-12Per Hedbor  exit 0 ;; '--help'|'-?')
8edfa31998-08-20Per Hedbor  sed -e "s/\\.B/`tput 'bold' 2>/dev/null`/g" -e "s/B\\./`tput 'rmso' 2>/dev/null`/g" << EOF .BThis command will start the Roxen serverB.. The environment variable .BROXEN_ARGSB. can be used to specify
82f5191997-03-02Per Hedbor the default arguments.
8edfa31998-08-20Per Hedbor  .BArguments:B.
c083c21998-09-19Henrik Grubbström (Grubba)  .B--versionB.: Output version information.
8edfa31998-08-20Per Hedbor 
c083c21998-09-19Henrik Grubbström (Grubba)  .B--help -?B.: This information
8edfa31998-08-20Per Hedbor 
c083c21998-09-19Henrik Grubbström (Grubba)  .B--log-dir=DIRB.: Set the log directory. Defaults to .B../logsB..
8edfa31998-08-20Per Hedbor 
c083c21998-09-19Henrik Grubbström (Grubba)  .B--config-dir=DIRB.: Use an alternate configuration directory Defaults to .B../configurationB..
8edfa31998-08-20Per Hedbor 
c083c21998-09-19Henrik Grubbström (Grubba)  .B--with-threadsB.: If threads are available, use them.
8edfa31998-08-20Per Hedbor 
c083c21998-09-19Henrik Grubbström (Grubba)  .B--without-threadsB.: Even if threads are enabled by default, disable them.
8edfa31998-08-20Per Hedbor 
c083c21998-09-19Henrik Grubbström (Grubba)  .B--with-profileB.: Store runtime profiling information on a directory basis. This information is not saved on permanent storage, it is only available until the next server restart This will enable a new 'action' in the configuration interface
8edfa31998-08-20Per Hedbor 
c083c21998-09-19Henrik Grubbström (Grubba)  .B--with-file-profileB.: Like .B--with-profileB., but save information for each and every file.
8edfa31998-08-20Per Hedbor 
c083c21998-09-19Henrik Grubbström (Grubba)  .B--with-keep-aliveB.: Enable keep alive in the HTTP protocol module. This will soon be the default. Some clients might have problems with keepalive.
8edfa31998-08-20Per Hedbor 
c083c21998-09-19Henrik Grubbström (Grubba)  .B--onceB.: Run the server only once, in the foreground. This is very useful when debugging.
8edfa31998-08-20Per Hedbor 
c083c21998-09-19Henrik Grubbström (Grubba)  .B--gdbB.: Run the server in gdb. Implies .B--onceB..
8edfa31998-08-20Per Hedbor 
c083c21998-09-19Henrik Grubbström (Grubba)  .B--programB.: Start a different program with the roxen pike. As an example, .B./start --program bin/install.pikeB. will start the installation program normally started with .B./installB.
8edfa31998-08-20Per Hedbor 
c083c21998-09-19Henrik Grubbström (Grubba)  .B--with-debugB.: Enable debug
8edfa31998-08-20Per Hedbor 
c083c21998-09-19Henrik Grubbström (Grubba)  .B--without-debugB.: Disable all debug
8edfa31998-08-20Per Hedbor 
c083c21998-09-19Henrik Grubbström (Grubba)  .B--with-fd-debugB.: Enable FD debug.
8edfa31998-08-20Per Hedbor 
c083c21998-09-19Henrik Grubbström (Grubba)  .B--trussB.: (Solaris only). Run the server under truss, shows .BallB. system calls. This is extremely noisy, and is not intented for anything but debug.
8edfa31998-08-20Per Hedbor 
c083c21998-09-19Henrik Grubbström (Grubba)  .B--pid-file=<file>B.: Store the roxen and startscript pids in this file. Defaults to .B/tmp/roxen_$UIDB.
8edfa31998-08-20Per Hedbor  .BArguments passed to pike:B.
c083c21998-09-19Henrik Grubbström (Grubba)  .B-DDEFINEB.: Define the symbol .BDEFINEB..
8edfa31998-08-20Per Hedbor 
c083c21998-09-19Henrik Grubbström (Grubba)  .B-d<level>B.: Set the runtime pike debug to level. This only works if pike is compiled with debug.
8edfa31998-08-20Per Hedbor 
c083c21998-09-19Henrik Grubbström (Grubba)  .B-s<size>B.: Set the stack size.
8edfa31998-08-20Per Hedbor 
c083c21998-09-19Henrik Grubbström (Grubba)  .B-M <path>B.: Add the path to the pike module path.
8edfa31998-08-20Per Hedbor 
c083c21998-09-19Henrik Grubbström (Grubba)  .B-I <path>B.: Add the path to the pike include path.
8edfa31998-08-20Per Hedbor 
c083c21998-09-19Henrik Grubbström (Grubba)  .B-dtB.: Turn of tail recursion optimization.
adae241998-09-18Per Hedbor 
c083c21998-09-19Henrik Grubbström (Grubba)  .B-tB.: Turn on pike level tracing.
8edfa31998-08-20Per Hedbor 
c083c21998-09-19Henrik Grubbström (Grubba)  .B-t<level>B.: Turn on more pike tracing. This only works if pike is compiled with debug.
8edfa31998-08-20Per Hedbor  .BEnvironment variables:B.
c083c21998-09-19Henrik Grubbström (Grubba)  .BROXEN_CONFIGDIRB.: Same as .B--config-dir=... B. .BROXEN_PID_FILEB.: Same as .B--pid-file=... B. .BROXEN_LANGB.: The default language for all language related tags. Defaults to 'en' for english.
8edfa31998-08-20Per Hedbor 
82f5191997-03-02Per Hedbor EOF tput 'rmso' 2>/dev/null
b1fca01996-11-12Per Hedbor  exit 0 ;; *) pass="$pass $1"
5e87b41997-04-09Henrik Grubbström (Grubba)  ;;
b1fca01996-11-12Per Hedbor  esac shift
82f5191997-03-02Per Hedbor  done } ####### END PREAMBLE parse_args $@
b1fca01996-11-12Per Hedbor 
82f5191997-03-02Per Hedbor if [ ! "X$ROXEN_ARGS" = "X" ]; then echo $$: Using $ROXEN_ARGS from ROXEN_ARGS. parse_args $ROXEN_ARGS fi
d1ff621997-07-24Marcus Comstedt if [ ! "X$pass" = "X" ] ; then set -- $pass ;fi
b1fca01996-11-12Per Hedbor 
82f5191997-03-02Per Hedbor echo $$: Starting the Roxen Challenger World Wide Web server.
b1fca01996-11-12Per Hedbor  ./mkdir -p $LOGDIR/debug/
59f64b1997-01-27Per Hedbor if [ -z "$debug" ] ; then
fc2fcf1997-04-13Per Hedbor  DEBUG="-DMODULE_DEBUG";
59f64b1997-01-27Per Hedbor else
4dfffc1998-07-27Martin Stjernholm  DEBUG="-DDEBUG -DMODULE_DEBUG"
59f64b1997-01-27Per Hedbor fi
38e43b1998-09-12Henrik Grubbström (Grubba) if [ "x$debug" = "x-1" ] ; then
8edfa31998-08-20Per Hedbor  DEBUG="";
38e43b1998-09-12Henrik Grubbström (Grubba) else :; fi # # Some useful functions # rotate () { b=5; for a in 4 3 2 1 ; do mv -f $1.$a $1.$b 2> /dev/null; b=$a; done } start_roxen() { args="-DROXEN $DEBUG $DEFINES $pass $program --config-dir=$DIR" if [ "x$gdb" = "xno" ]; then echo "PIKE_MODULE_PATH=$PIKE_MODULE_PATH" echo Executing $pike $args $@ $pike $args $@ else echo Executing gdb $pike $args $@ echo >.gdbinit handle SIGPIPE nostop noprint pass echo >>.gdbinit handle SIGUSR1 nostop noprint pass echo >>.gdbinit handle SIGUSR2 nostop noprint pass echo >>.gdbinit run $args $@ gdb $pike rm .gdbinit fi } # # Now do the stuff #
8edfa31998-08-20Per Hedbor 
a8135b1996-11-12Per Hedbor if [ -z "$once" ] ; then
13c5481998-07-02Henrik Grubbström (Grubba)  cat << oo Using configuration from $DIR, storing the debug log in $LOGDIR/debug/$FILES.1 You can use the configuration interface in the server to get debug info. oo # Try to get rid of some fd's. # Some /bin/sh's have problems detaching otherwise. exec >/dev/null exec 2>/dev/null exec </dev/null
9c353a1997-08-23Henrik Grubbström (Grubba)  (while : ; do echo $$: "Server restart at `date`" echo $$: "Debug log in $LOGDIR/debug/$FILES.1" rotate $LOGDIR/debug/$FILES
82f5191997-03-02Per Hedbor 
7c6da61998-11-01Henrik Grubbström (Grubba)  start_roxen $extra_args 2>>$LOGDIR/debug/$FILES.1 1>&2
82f5191997-03-02Per Hedbor 
7cb64f1998-01-17Henrik Grubbström (Grubba)  exitcode="$?"
b1fca01996-11-12Per Hedbor 
7cb64f1998-01-17Henrik Grubbström (Grubba)  if [ "$exitcode" -eq "0" ] ; then # Clean shutdown. echo $$: "Roxen shutdown." exit 0 fi if [ "$exitcode" -lt "0" ] ; then # Signal death. echo $$: "Roxen died of signal $exitcode. Restarting..." else # Restart. Sleep a few seconds before restarting. echo $$: Roxen died. Restarting in 5 seconds... sleep 5
b1fca01996-11-12Per Hedbor  fi
9c353a1997-08-23Henrik Grubbström (Grubba)  done
b1fca01996-11-12Per Hedbor 
9c353a1997-08-23Henrik Grubbström (Grubba)  echo $$: Not Reached "famous last words"
b1fca01996-11-12Per Hedbor 
9c353a1997-08-23Henrik Grubbström (Grubba)  ) < /dev/null > $LOGDIR/debug/start_$FILES.output 2>&1 &
82f5191997-03-02Per Hedbor 
a8135b1996-11-12Per Hedbor else
82f5191997-03-02Per Hedbor  echo $$: "Server restart at `date`"
7c6da61998-11-01Henrik Grubbström (Grubba)  start_roxen $extra_args
a8135b1996-11-12Per Hedbor fi
fc2fcf1997-04-13Per Hedbor