b1fca01996-11-12Per Hedbor #!/bin/sh
fd12951997-09-07Henrik Grubbström (Grubba) #
42581f2001-08-13Martin Stjernholm # $Id: start,v 1.177 2001/08/13 21:47:38 mast Exp $
39ed8c2000-08-31Fredrik Noring  ### If --silent-start is given as the first argument, ### nothing will be printed to stdout by the script.
270fdc2000-12-30Per Hedbor if [ "x$1" = "x--silent-start" ] ; then SILENT_START="y" shift
39ed8c2000-08-31Fredrik Noring fi
67549e1999-09-05Per Hedbor 
196c3f2000-11-16Per Hedbor check_owner() { gargs=''
8cc1802001-01-03Per Hedbor  if [ -w / ] ; then
196c3f2000-11-16Per Hedbor  # Shall we change uid/gid? num=`grep --help 2>&1|grep gnu|wc -l` num=`echo $num` if [ x"$num" = x1 ] ; then gargs='-a' fi ugid=`grep $gargs "='User'>" $DIR/Global_Variables 2>/dev/null\ | sed -e 's/.*<str>//' -e 's,</str>.*,,'` if [ ! x$ugid = x ] ; then dp "Doing uid change to $ugid" oifs="$IFS";IFS=':';set $ugid;IFS="$oifs"
4fcfa32001-03-27Martin Stjernholm  if [ ! "x$2" = x ]; then ok=`ls -lgd . 2>/dev/null | grep $2 |wc -l` ok=`echo $ok` if [ "x$ok" = x1 ] ; then dp "The server directory is already readable by group $2" else chgrp -R "$2" . chmod -R g+r . fi fi
196c3f2000-11-16Per Hedbor  change_owner $1 $2 $DIR $VARDIR $LOGDIR fi fi }
a01fd92000-08-09Per Hedbor # Breaks on linux when using symlinks. dn="`dirname $0`" case "$dn" in ""|".") ;; *)
270fdc2000-12-30Per Hedbor  # dp is not used here since we cannot source bin/functions before we # are in the correct directory, for quite obvious reasons...
4c638d2001-03-20Fredrik Noring  if [ ! "$dn" = "`pwd`" ] then echo " : Changing current directory to '$dn' (now `pwd`)" >&2 cd $dn echo " : Got new directory as `pwd`" >&2 fi
a01fd92000-08-09Per Hedbor  ;; esac
0a4af81998-11-28Per Hedbor 
270fdc2000-12-30Per Hedbor . bin/functions
b1fca01996-11-12Per Hedbor # Can be set with '--config-dir=DIR'
a3a0ec2001-03-17Martin Stjernholm DIR=../configurations LOGDIR=../logs
b1fca01996-11-12Per Hedbor FILES="default"
3e7d3b1998-03-20Per Hedbor program=base_server/roxenloader.pike
a3a0ec2001-03-17Martin Stjernholm VARDIR=../var LOCALDIR=../local
d7d5dd2001-08-10Marcus Wellhardh SELF_TEST_DIR=etc/test
f292242000-03-24Henrik Grubbström (Grubba)  # Make LOCALDIR an absolute path
a7b8d72000-03-24Henrik Grubbström (Grubba) if test -d $LOCALDIR/.; then
4bcae62000-03-24Henrik Grubbström (Grubba)  LOCALDIR=`cd $LOCALDIR; pwd`
64209f2000-03-24Henrik Grubbström (Grubba) else :; fi
49fff32000-01-27Henrik Grubbström (Grubba) 
423fdd2000-04-01Henrik Grubbström (Grubba) if test -d $VARDIR/.; then :; else
ff3b9a2000-08-09Per Hedbor  dp "Creating directory $VARDIR"
a3a0ec2001-03-17Martin Stjernholm  ./mkdir -p $VARDIR/ || exit 1
423fdd2000-04-01Henrik Grubbström (Grubba) fi
348d6c2000-08-30Martin Stjernholm 
b654ea2000-10-02Jonas Wallden pcdir="$VARDIR/`roxen_version`/precompiled/`uname -m | tr ' ' '_' `.`uname -r`"
9b1a122000-02-04Per Hedbor old_roxen_defines="$pcdir/old_roxen_defines"
8cd3962001-03-06Peter Bortas ./mkdir -p $pcdir || exit 1
577d4c2000-04-03Per Hedbor chmod 1777 $pcdir
b1fca01996-11-12Per Hedbor 
14fd211998-11-28Henrik Grubbström (Grubba) # Default verbosity level. verbose=1
48eeb61999-08-06Peter Bortas # Do not default to using a relative path. roxendir="`pwd`"
1f66ab1998-11-22Henrik Grubbström (Grubba) 
1490152001-08-06Martin Stjernholm # No debug by default. debug=-1
d25ab72000-03-30Leif Stensson # Locate Pike binary.
270fdc2000-12-30Per Hedbor find_pike
d25ab72000-03-30Leif Stensson 
270fdc2000-12-30Per Hedbor # Source environment setup_environment
d25ab72000-03-30Leif Stensson 
b1e9fe1998-11-28Henrik Grubbström (Grubba) ####### BEGIN ARGUMENT PARSING
b1fca01996-11-12Per Hedbor 
2b19eb1999-08-20Per Hedbor 
491abc2000-08-17Per Hedbor DEFINES="$DEFINES -DRAM_CACHE"
2b19eb1999-08-20Per Hedbor 
c90cc91999-04-22Per 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
ff3b9a2000-08-09Per Hedbor # if [ $verbose -gt 0 ] ; then # dp "Solaris 2.5 or later detected. Using threads by default." # fi
72a4502000-03-10Martin Stjernholm  DEFINES="$DEFINES -DENABLE_THREADS"
c90cc91999-04-22Per Hedbor  fi fi
43583b1999-05-25Henrik Grubbström (Grubba) gdb=no
c90cc91999-04-22Per Hedbor 
08cf191999-09-06Per Hedbor remove_old_dot_o_files () {
af3dd82001-01-01Martin Nilsson  dp "Removing old precompiled files ($1)"
74e3902000-12-30Per Hedbor  # This really cannot be done from here anymore -- pass on an option # to roxenloader instead. pass="$pass --remove-dumped"
08cf191999-09-06Per Hedbor }
b1fca01996-11-12Per Hedbor ## Parse all arguments.
82f5191997-03-02Per Hedbor ## GNU-style, long options only, except for -D, simply passed on.
7541211999-10-08Per Hedbor ARGS=""
4ba8452001-01-31Per Hedbor setup_for_tests() {
cfdc332001-07-02Martin Nilsson  # Kill roxen mysql if it's running... if [ -f $VARDIR/test_config/_mysql/mysql_pid ] ; then kill `cat $VARDIR/test_config/_mysql/mysql_pid` fi
b5b1252001-06-30Martin Stjernholm  self_test=y
d7d5dd2001-08-10Marcus Wellhardh  DEFINES="-DRUN_SELF_TEST -DSELF_TEST_DIR=\"$SELF_TEST_DIR\" $DEFINES"
a3a0ec2001-03-17Martin Stjernholm  rm -rf $VARDIR/test_config*
d7d5dd2001-08-10Marcus Wellhardh  cp -R $SELF_TEST_DIR/config $VARDIR/test_config
a3a0ec2001-03-17Martin Stjernholm  DIR=$VARDIR/test_config
1926712001-08-10Jonas Wallden  if [ -f $SELF_TEST_DIR/scripts/setup.pike ] ; then
a043c72001-08-10Marcus Wellhardh  $PIKE $SELF_TEST_DIR/scripts/setup.pike $SELF_TEST_DIR $VARDIR
d7d5dd2001-08-10Marcus Wellhardh  fi
4ba8452001-01-31Per Hedbor  once=1 remove_dumped=1 }
82f5191997-03-02Per Hedbor parse_args() { while [ ! c"$1" = "c" ] ; do
00b8b02001-02-02Fredrik Noring  case "$1" in
4019f81997-03-01Per Hedbor  -D*) DEFINES="$DEFINES $1" ;;
08cf191999-09-06Per Hedbor  -l*)
0272d31999-11-03Henrik Grubbström (Grubba)  ARGS="$ARGS $1"
08cf191999-09-06Per Hedbor  ;;
a413051998-08-10Per Hedbor  --truss) pike="truss $pike" ;;
df56361999-08-30Per Hedbor  --truss-c) pike="truss -c $pike" ;;
b1fca01996-11-12Per Hedbor  --log-dir=*) LOGDIR=`echo $1 | sed -e 's/--log-dir=//'` ;;
567dac2001-03-23Per Hedbor  --debug-log=*) DEBUGLOG=`echo $1 | sed -e's/--debug-log=//'` ;;
b1fca01996-11-12Per Hedbor  --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=*)
a3a0ec2001-03-17Martin Stjernholm  pidfile=`echo $1 | sed -e 's/--pid-file=//'`
7c6da61998-11-01Henrik Grubbström (Grubba)  ;;
cdd9912000-10-30Per Hedbor  '--with-security'|'--enable-security') DEFINES="$DEFINES -DSECURITY" ;;
8a788c1998-07-22David Hedbor  '--debug'|'--with-debug'|'--enable-debug')
59f64b1997-01-27Per Hedbor  debug=1 ;;
8edfa31998-08-20Per Hedbor  '--without-debug') debug=-1 ;;
1490152001-08-06Martin Stjernholm  '--module-debug'|'--with-module-debug'|'--enable-module-debug') debug=0 ;;
8a788c1998-07-22David Hedbor  '--fd-debug'|'--with-fd-debug'|'--enable-fd-debug')
cc4fdd1998-03-26Per Hedbor  DEFINES="-DFD_DEBUG $DEFINES" ;;
5655dc2001-06-06Per Hedbor  '--strip-backslash'|'--without-backslash'|'--strip-back-slash') DEFINES="-DSTRIP_BSLASH $DEFINES" ;;
491abc2000-08-17Per Hedbor  '--without-ram-cache'|'--disable-ram-cache') DEFINES="`echo $DEFINES | sed -e 's/-DRAM_CACHE//g'`" ;; '--without-ram-cache-stat'|'--disable-ram-cache-stat') DEFINES="`-DRAM_CACHE_ASUME_STATIC_CONTENT`" ;;
67549e1999-09-05Per Hedbor  '--dump-debug'|'--with-dump-debug'|'--enable-dump-debug') DEFINES="-DDUMP_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')
72a4502000-03-10Martin Stjernholm  DEFINES="`echo $DEFINES | sed -e 's/-DENABLE_THREADS//g'`"
3c31841998-03-01Per Hedbor  ;;
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" ;;
14fd211998-11-28Henrik Grubbström (Grubba)  '--quiet'|'-q') verbose=0 ;; '--verbose'|'-v') verbose=2 debug=1 ;;
2213981999-09-05Per Hedbor  '--remove-dumped')
77868d2000-03-13Per Hedbor  remove_dumped=1;
2213981999-09-05Per Hedbor  ;;
fb49032001-05-16Per Hedbor 
a8135b1996-11-12Per Hedbor  '--once')
42581f2001-08-13Martin Stjernholm  once=${once:-1}
1490152001-08-06Martin Stjernholm  debug=0
a8135b1996-11-12Per Hedbor  ;;
cbced91998-11-06Marcus Comstedt # Misspelling --once might give undesirable results, so let's accept # some "creative" spellings... :-)
fb49032001-05-16Per Hedbor  '--onve'|'--onec'|'--onev'|'--ocne')
42581f2001-08-13Martin Stjernholm  once=${once:-1}
1490152001-08-06Martin Stjernholm  debug=0
cbced91998-11-06Marcus Comstedt  ;;
b80b4c2001-07-09Martin Nilsson  '--keep-mysql') keep_mysql=1 ;;
c6420b1998-06-02Henrik Grubbström (Grubba)  '--gdb') gdb=gdb
42581f2001-08-13Martin Stjernholm  once=2
1490152001-08-06Martin Stjernholm  debug=0
c6420b1998-06-02Henrik Grubbström (Grubba)  ;;
3e7d3b1998-03-20Per Hedbor  '--program') program="$2"
42581f2001-08-13Martin Stjernholm  once=2
409e9b2001-02-01Per Hedbor  passhelp=1
3e7d3b1998-03-20Per Hedbor  shift ;;
b796b51998-11-18Per Hedbor  '--cd') cd_to="$2"
b1e9fe1998-11-28Henrik Grubbström (Grubba)  # Use the absolute path... roxendir="`pwd`"
42581f2001-08-13Martin Stjernholm  once=${once:-1}
b796b51998-11-18Per Hedbor  shift ;;
2e1f942001-06-26Martin Stjernholm  --debug-without=*|-r*|-d*|-t*|-l*|-w*|-a*|-p*|--*-debug*)
7541211999-10-08Per Hedbor  # Argument passed along to Pike. ARGS="$ARGS $1" ;; -D*|-M*|-I*|-P*)
61c0ca1998-11-28Henrik Grubbström (Grubba)  # Argument passed along to Pike. DEFINES="$DEFINES $1" ;;
b1fca01996-11-12Per Hedbor  '--version')
409e9b2001-02-01Per Hedbor  if [ "x$passhelp" = "x1" ] ; then pass="$pass --version" else
6a57751999-08-06Henrik Grubbström (Grubba)  if [ -f base_server/roxen.pike ]; then
fd87202000-09-01Martin Nilsson  echo "Roxen WebServer `roxen_version`"
6a57751999-08-06Henrik Grubbström (Grubba)  exit 0 else echo 'base_server/roxen.pike not found!' exit 1 fi
409e9b2001-02-01Per Hedbor  fi
b1fca01996-11-12Per Hedbor  ;;
d7d5dd2001-08-10Marcus Wellhardh  --self-test-dir=*) SELF_TEST_DIR=`echo $1 | sed -e's/--self-test-dir=//'` ;;
a0129c2000-11-11Martin Nilsson  '--self-test')
4ba8452001-01-31Per Hedbor  setup_for_tests ;; '--self-test-quiet') debug=-1 SILENT_START=y do_pipe="| grep ' |'" setup_for_tests ;; '--self-test-verbose') pass="$pass --tests-verbose=1" setup_for_tests
a0129c2000-11-11Martin Nilsson  ;;
b1fca01996-11-12Per Hedbor  '--help'|'-?')
409e9b2001-02-01Per Hedbor  if [ "x$passhelp" = "x1" ] ; then pass="$pass --help" else
ac54c71999-09-10Martin Stjernholm  sed -e "s/\\.B/`tput 'bold' 2>/dev/null`/g" -e "s/B\\./`tput 'sgr0' 2>/dev/null`/g" << EOF
fd87202000-09-01Martin Nilsson .BThis command will start the Roxen WebServerB..
8edfa31998-08-20Per Hedbor  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 
aa5b941998-11-28Henrik Grubbström (Grubba)  .B--help -?B.: This information.
2213981999-09-05Per Hedbor  .B--remove-dumpedB.: Remove all dumped code, thus forcing a recompile.
aa5b941998-11-28Henrik Grubbström (Grubba)  .B--verbose -vB.: Enable more verbose messages. .B--quiet -qB.: Disable most of the messages.
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 
aa5b941998-11-28Henrik Grubbström (Grubba)  .B--config-dir=DIRB.: Use an alternate configuration directory.
a3a0ec2001-03-17Martin Stjernholm  Defaults to .B../configurationsB..
567dac2001-03-23Per Hedbor  .B--debug-log=FILEB.: Use an alternate debuglog file. Defaults to .B../logs/debug/B.configdirname.B.1B..
a3a0ec2001-03-17Martin Stjernholm  .B--pid-file=FILEB.: Store the roxen and startscript pids in this file. Defaults to .B../configurations/_roxen_pidB..
8edfa31998-08-20Per Hedbor 
39ed8c2000-08-31Fredrik Noring  .B--silent-startB.: Inhibits output to stdout. If used, this argument must be the first one.
5655dc2001-06-06Per Hedbor  .B--strip-backslashB.: Replace all \\ characters in URIs with /
491abc2000-08-17Per Hedbor  .B--without-ram-cacheB.: Do not use an in-RAM cache to speed things up. Saves RAM at the cost of speed. .B--without-ram-cache-statB.: Disable the stat that is usualy done for files in the ram cache to ensure that
a3a0ec2001-03-17Martin Stjernholm  they are not changed before they are sent.
491abc2000-08-17Per Hedbor  Improves performance at the cost of constant
a3a0ec2001-03-17Martin Stjernholm  aggravation if the site is edited. Useful for
491abc2000-08-17Per Hedbor  truly static sites.
c083c21998-09-19Henrik Grubbström (Grubba)  .B--with-threadsB.: If threads are available, use them.
8edfa31998-08-20Per Hedbor 
e6a1712000-02-02Per Hedbor  .B--without-threadsB.: Even if threads are enabled by default,
c083c21998-09-19Henrik Grubbström (Grubba)  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
a6ef1f2000-03-28Johan Sundström  administration interface
8edfa31998-08-20Per Hedbor 
e6a1712000-02-02Per Hedbor  .B--with-file-profileB.: Like .B--with-profileB., but save information
c083c21998-09-19Henrik Grubbström (Grubba)  for each and every file.
8edfa31998-08-20Per Hedbor 
a3a0ec2001-03-17Martin Stjernholm  .B--self-testB.: Runs a testsuite. .B--self-test-verboseB.: Runs a testsuite, report all tests. .B--self-test-quietB.: Runs a testsuite, only report errors.
d7d5dd2001-08-10Marcus Wellhardh  .B--self-test-dir=DIRB.: Use this self test directory instead of the default .Betc/testB. directory.
a0129c2000-11-11Martin Nilsson 
c083c21998-09-19Henrik Grubbström (Grubba)  .B--onceB.: Run the server only once, in the foreground.
1490152001-08-06Martin Stjernholm  This is very useful when debugging. Implies --module-debug.
8edfa31998-08-20Per Hedbor 
b80b4c2001-07-09Martin Nilsson  .B--keep-mysqlB.: Don't shut down MySQL process when exiting the start script. Useful during development or any other scenario where the start script is frequently terminated.
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
e6a1712000-02-02Per Hedbor  Pike. As an example, .B./start --program bin/install.pikeB. will start the installation program normally
c083c21998-09-19Henrik Grubbström (Grubba)  started with .B./installB.
8edfa31998-08-20Per Hedbor 
c083c21998-09-19Henrik Grubbström (Grubba)  .B--with-debugB.: Enable debug
8edfa31998-08-20Per Hedbor 
1490152001-08-06Martin Stjernholm  .B--without-debugB.: Disable all debug. This is the default. .B--module-debugB.: Enable more internal debug checks to simplify debugging of Roxen modules.
e6a1712000-02-02Per Hedbor 
1490152001-08-06Martin Stjernholm  .B--fd-debugB.: Enable FD debug.
8edfa31998-08-20Per Hedbor 
1490152001-08-06Martin Stjernholm  .B--dump-debugB.: Enable dump debug.
67549e1999-09-05Per Hedbor 
c083c21998-09-19Henrik Grubbström (Grubba)  .B--trussB.: (Solaris only). Run the server under
e6a1712000-02-02Per Hedbor  truss, shows .BallB. system calls. This is extremely noisy, and is not intented for
c083c21998-09-19Henrik Grubbström (Grubba)  anything but debug.
8edfa31998-08-20Per Hedbor 
67549e1999-09-05Per Hedbor  .B--truss-cB.: (Solaris only). Run the server under truss -c, shows times for all system calls
e6a1712000-02-02Per Hedbor  on exit. This is not intented for anything
67549e1999-09-05Per Hedbor  but debug. Slows the server down.
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 
61c0ca1998-11-28Henrik Grubbström (Grubba)  .B-d<level>B.: Set the runtime Pike debug to level.
e6a1712000-02-02Per Hedbor  This only works if Pike is compiled
e2a69f2001-02-26Martin Stjernholm  with debug (i.e. with --rtl-debug to configure).
8edfa31998-08-20Per Hedbor 
bcdd9d1999-12-13Per Hedbor  .B-rtB.: Enable runtime typechecking. Things will run more slowly, but it is very useful while developing code. Enabled when starting roxen with --debug .B-rTB.: Enable strict types.
e6a1712000-02-02Per Hedbor  Same as adding #pragma strict-types
bcdd9d1999-12-13Per Hedbor  to all files. This enables more strict type-checking, things that are normally permitted (such as calling a mixed value, or assigning a typed object variable with an untyped object) will generate warnings. Useful for module and roxen core developers, but not so useful for the occasional pike-script-writer. Enabled when starting roxen with --debug
c083c21998-09-19Henrik Grubbström (Grubba)  .B-s<size>B.: Set the stack size.
8edfa31998-08-20Per Hedbor 
61c0ca1998-11-28Henrik Grubbström (Grubba)  .B-M<path>B.: Add the path to the Pike module path. .B-I<path>B.: Add the path to the Pike include path.
8edfa31998-08-20Per Hedbor 
61c0ca1998-11-28Henrik Grubbström (Grubba)  .B-P<path>B.: Add the path to the Pike program path.
8edfa31998-08-20Per Hedbor 
9e8fac2000-02-08Martin Stjernholm  .B-dtB.: Turn off tail recursion optimization.
adae241998-09-18Per Hedbor 
61c0ca1998-11-28Henrik Grubbström (Grubba)  .B-tB.: Turn on Pike level tracing.
8edfa31998-08-20Per Hedbor 
337c782001-05-17Martin Stjernholm  .B-pB.: Turn on Pike profiling.
e6a1712000-02-02Per Hedbor  .B-t<level>B.: Turn on more Pike tracing. This only
e2a69f2001-02-26Martin Stjernholm  works if Pike is compiled with debug (i.e. with --rtl-debug to configure). .B-a<level>B.: Turn on Pike assembler debug. This only works if Pike is compiled with debug (i.e. with --rtl-debug to configure).
8edfa31998-08-20Per Hedbor 
0272d31999-11-03Henrik Grubbström (Grubba)  .B-wB.: Turn on Pike warnings.
8edfa31998-08-20Per Hedbor  .BEnvironment variables:B.
e6a1712000-02-02Per Hedbor  .BLANGB.: Used to determine the default locale
a6ef1f2000-03-28Johan Sundström  in the administration interface and logs.
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
7de5181998-11-22Per Hedbor  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
409e9b2001-02-01Per Hedbor  fi
b1fca01996-11-12Per Hedbor  ;; *) pass="$pass $1"
5e87b41997-04-09Henrik Grubbström (Grubba)  ;;
b1fca01996-11-12Per Hedbor  esac shift
82f5191997-03-02Per Hedbor  done }
ff3b9a2000-08-09Per Hedbor if [ ! "X$ROXEN_ARGS" = "X" ]; then parse_args $ROXEN_ARGS fi
82f5191997-03-02Per Hedbor parse_args $@
b1fca01996-11-12Per Hedbor 
ff3b9a2000-08-09Per Hedbor # The work has already been done above, but the debug printout is better # to have _after_ parse_args (consider --help and --version)
82f5191997-03-02Per Hedbor if [ ! "X$ROXEN_ARGS" = "X" ]; then
14fd211998-11-28Henrik Grubbström (Grubba)  if [ $verbose -gt 0 ]; then
ff3b9a2000-08-09Per Hedbor  dp "Used $ROXEN_ARGS from ROXEN_ARGS."
14fd211998-11-28Henrik Grubbström (Grubba)  else :; fi
82f5191997-03-02Per Hedbor fi
d1ff621997-07-24Marcus Comstedt if [ ! "X$pass" = "X" ] ; then set -- $pass ;fi
b1fca01996-11-12Per Hedbor 
b1e9fe1998-11-28Henrik Grubbström (Grubba) ####### END ARGUMENT PARSING ####### BEGIN PIKE OPTIONS
fd87202000-09-01Martin Nilsson # Roxen WebServer will create files as the initial user,
b1e9fe1998-11-28Henrik Grubbström (Grubba) # which it expects to be able to read as the run-time user. umask 022
2587671999-04-24Martin Stjernholm if [ "x$PIKE_NO_DEFAULT_PATHS" = "x" ]; then # Pike default Master-program if [ "x$PIKE_MASTER" = "x" ]; then if [ -f lib/master.pike ]; then
348d6c2000-08-30Martin Stjernholm  DEFINES="$DEFINES -m$roxendir/lib/master.pike"
2587671999-04-24Martin Stjernholm  elif [ -f lib/pike/master.pike ]; then
348d6c2000-08-30Martin Stjernholm  DEFINES="$DEFINES -m$roxendir/lib/pike/master.pike"
2587671999-04-24Martin Stjernholm  fi else # This is useful when using several different Pikes. # 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. DEFINES="$DEFINES -m$PIKE_MASTER"
b1e9fe1998-11-28Henrik Grubbström (Grubba)  fi fi # Extra module-path
8cc1802001-01-03Per Hedbor #if [ -d etc/modules ]; then
b1e9fe1998-11-28Henrik Grubbström (Grubba)  DEFINES="$DEFINES -M$roxendir/etc/modules"
8cc1802001-01-03Per Hedbor #fi
b1e9fe1998-11-28Henrik Grubbström (Grubba)  # Extra include-path
8cc1802001-01-03Per Hedbor #if [ -d etc/include ]; then
b1e9fe1998-11-28Henrik Grubbström (Grubba)  DEFINES="$DEFINES -I$roxendir/etc/include"
8cc1802001-01-03Per Hedbor #fi
b1e9fe1998-11-28Henrik Grubbström (Grubba) 
a3a0ec2001-03-17Martin Stjernholm if [ -d $LOCALDIR/include/. ]; then
f292242000-03-24Henrik Grubbström (Grubba)  DEFINES="$DEFINES -I$LOCALDIR/include"
77868d2000-03-13Per Hedbor fi
b1e9fe1998-11-28Henrik Grubbström (Grubba) # Extra include-path (2)
8cc1802001-01-03Per Hedbor #if [ -d base_server ]; then
b1e9fe1998-11-28Henrik Grubbström (Grubba)  DEFINES="$DEFINES -I$roxendir/base_server"
8cc1802001-01-03Per Hedbor #fi
b1e9fe1998-11-28Henrik Grubbström (Grubba) 
a3a0ec2001-03-17Martin Stjernholm if [ -d $LOCALDIR/base_server/. ]; then
f292242000-03-24Henrik Grubbström (Grubba)  DEFINES="$DEFINES -I$LOCALDIR/base_server -P$LOCALDIR/base_server"
77868d2000-03-13Per Hedbor fi
b1e9fe1998-11-28Henrik Grubbström (Grubba) # Extra program-path DEFINES="$DEFINES -P`pwd`" # Support for adding local pike-modules
f292242000-03-24Henrik Grubbström (Grubba) if [ -d $LOCALDIR/etc/. ]; then
b1e9fe1998-11-28Henrik Grubbström (Grubba)  # Extra module-path
f292242000-03-24Henrik Grubbström (Grubba)  if [ -d $LOCALDIR/etc/modules/. ]; then DEFINES="$DEFINES -M$LOCALDIR/etc/modules"
b1e9fe1998-11-28Henrik Grubbström (Grubba)  fi # Extra include-path
a3a0ec2001-03-17Martin Stjernholm  if [ -d $LOCALDIR/etc/include/. ]; then
f292242000-03-24Henrik Grubbström (Grubba)  DEFINES="$DEFINES -I$LOCALDIR/etc/include"
b1e9fe1998-11-28Henrik Grubbström (Grubba)  fi # Extra program-path
f292242000-03-24Henrik Grubbström (Grubba)  DEFINES="$DEFINES -P$LOCALDIR/etc"
b1e9fe1998-11-28Henrik Grubbström (Grubba) fi # Extra kludge for HPUX # HPUX doesn't like group 60001(nobody) if uname | grep 'HP-UX' >/dev/null 2>&1; then
14fd211998-11-28Henrik Grubbström (Grubba)  if [ $verbose -gt 0 ]; then
8cc1802001-01-03Per Hedbor  dp "WARNING: Applying kludge for HPUX. (see base_server/roxen.pike)"
14fd211998-11-28Henrik Grubbström (Grubba)  else :; fi
b1e9fe1998-11-28Henrik Grubbström (Grubba)  DEFINES="$DEFINES -DHPUX_KLUDGE" fi
0272d31999-11-03Henrik Grubbström (Grubba)  case "x$debug" in
1490152001-08-06Martin Stjernholm  "x"|"x0")
d12de01999-12-21Per Hedbor  DEBUG="-DMODULE_DEBUG "
bcdd9d1999-12-13Per Hedbor  ARGS="$ARGS -w"
0272d31999-11-03Henrik Grubbström (Grubba)  ;; "x-1") DEBUG="" ;; "x1")
9e8fac2000-02-08Martin Stjernholm  DEBUG="-DDEBUG -DMODULE_DEBUG"
0272d31999-11-03Henrik Grubbström (Grubba)  ARGS="$ARGS -w" ;; esac DEFINES="$DEBUG $DEFINES"
b1e9fe1998-11-28Henrik Grubbström (Grubba) ####### END PIKE OPTIONS
38e43b1998-09-12Henrik Grubbström (Grubba)  # # Some useful functions #
a3a0ec2001-03-17Martin Stjernholm cleanup_pid_file() { [ -z "$pidfile" ] || rm $pidfile }
0259c42000-08-31Martin Stjernholm signal_exit() {
42581f2001-08-13Martin Stjernholm  dp "Start script terminating."
9907572001-06-28Martin Stjernholm  trap "" 2 15
0259c42000-08-31Martin Stjernholm  if [ "x$ROXEN_PID" != "x" ]; then
a3a0ec2001-03-17Martin Stjernholm  kill $ROXEN_PID 2>/dev/null && wait $ROXEN_PID 2>/dev/null dp "Roxen WebServer shutdown."
0259c42000-08-31Martin Stjernholm  fi
b80b4c2001-07-09Martin Nilsson  if [ "x$keep_mysql" = "x" ] ; then
63deb32001-06-27Per Hedbor  if [ -f $DIR/_mysql/mysql_pid ] ; then
42581f2001-08-13Martin Stjernholm  dp "Shutting down mysql."
b80b4c2001-07-09Martin Nilsson  kill `cat $DIR/_mysql/mysql_pid` 2>/dev/null sleep 2 if [ -f $DIR/_mysql/mysql_pid ] ; then kill -9 `cat $DIR/_mysql/mysql_pid` 2>/dev/null fi rm -f $DIR/_mysql/mysql_pid 2>/dev/null
63deb32001-06-27Per Hedbor  fi fi
248df92001-07-02Martin Stjernholm  dp "Start script terminated."
0259c42000-08-31Martin Stjernholm  exit 0 }
e8a9012001-01-31Per Hedbor exit_fail() { exitcode=1 }
38e43b1998-09-12Henrik Grubbström (Grubba) start_roxen() {
196c3f2000-11-16Per Hedbor  check_owner
270fdc2000-12-30Per Hedbor  raise_limit
001f832000-11-20Per Hedbor 
77868d2000-03-13Per Hedbor  if [ x$remove_dumped = x1 ] ; then remove_old_dot_o_files "user request" fi
a3a0ec2001-03-17Martin Stjernholm  if [ x$DIR != x../configurations ] ; then
7541211999-10-08Per Hedbor  args="$DEFINES $ARGS $program --config-dir=$DIR $pass"
b796b51998-11-18Per Hedbor  else
7541211999-10-08Per Hedbor  args="$DEFINES $ARGS $program $pass"
b796b51998-11-18Per Hedbor  fi
941fc72001-06-20Fredrik Noring  if [ x"$cd_to" != x ] ; then cd "$cd_to"
b796b51998-11-18Per Hedbor  fi
38e43b1998-09-12Henrik Grubbström (Grubba)  if [ "x$gdb" = "xno" ]; then
14fd211998-11-28Henrik Grubbström (Grubba)  if [ $verbose -gt 0 ]; then
0dbd692000-02-17Martin Stjernholm  if [ $verbose -gt 1 -o -z "$once" ] ; then
a3a0ec2001-03-17Martin Stjernholm  dp Executing $pike $args|sed -e "s!`pwd`!.!g"
9245702000-02-16Per Hedbor  else
ad8dc12000-09-01Per Hedbor  dp "Using the '$pike' pike binary"|sed -e "s!`pwd`!.!g"
9245702000-02-16Per Hedbor  fi fi
0259c42000-08-31Martin Stjernholm  if [ "x$once" = "x" ]; then
941fc72001-06-20Fredrik Noring  "$pike" $args 2>>"${DEBUGLOG}.1" 1>&2 &
0259c42000-08-31Martin Stjernholm  ROXEN_PID=$!
fd87202000-09-01Martin Nilsson  dp "Roxen WebServer server pid $ROXEN_PID."
42581f2001-08-13Martin Stjernholm  wait $ROXEN_PID 2>/dev/null 1>&2
0259c42000-08-31Martin Stjernholm  exitcode="$?" ROXEN_PID="" else
4ba8452001-01-31Per Hedbor  if [ "x$do_pipe" = "x" ] ; then
42581f2001-08-13Martin Stjernholm  if [ "x$once" = "x1" ]; then "$pike" $args 2>&1 & ROXEN_PID=$! dp "Roxen WebServer server pid $ROXEN_PID." wait $ROXEN_PID 2>/dev/null 1>&2 exitcode="$?" ROXEN_PID="" else "$pike" $args 2>&1 exitcode="$?" fi
4ba8452001-01-31Per Hedbor  else
e8a9012001-01-31Per Hedbor  trap exit_fail 1
a3a0ec2001-03-17Martin Stjernholm  eval "($pike $args || kill -1 $$) 2>&1 $do_pipe"
e8a9012001-01-31Per Hedbor  exit $exitcode
4ba8452001-01-31Per Hedbor  fi
0259c42000-08-31Martin Stjernholm  fi
38e43b1998-09-12Henrik Grubbström (Grubba)  else echo >.gdbinit handle SIGPIPE nostop noprint pass echo >>.gdbinit handle SIGUSR1 nostop noprint pass echo >>.gdbinit handle SIGUSR2 nostop noprint pass
72a4502000-03-10Martin Stjernholm  echo >>.gdbinit handle SIGLWP nostop noprint pass
348d6c2000-08-30Martin Stjernholm  firstline=`head -1 "$pike" 2>/dev/null` if expr "x$firstline" : 'x#! */.*' >/dev/null; then
0259c42000-08-31Martin Stjernholm  # Looks like a script. gdb will not grok it, so we try passing
348d6c2000-08-30Martin Stjernholm  # --gdb to it instead (which works in the special case of the
0259c42000-08-31Martin Stjernholm  # bin/pike script that is built by the top level Makefile in the
348d6c2000-08-30Martin Stjernholm  # Pike source tree).
a3a0ec2001-03-17Martin Stjernholm  dp "Executing $pike --gdb $args" $pike --gdb $args
348d6c2000-08-30Martin Stjernholm  else
a3a0ec2001-03-17Martin Stjernholm  dp "Executing gdb $pike $args" echo >>.gdbinit run $args
348d6c2000-08-30Martin Stjernholm  gdb $pike fi
38e43b1998-09-12Henrik Grubbström (Grubba)  rm .gdbinit fi
63deb32001-06-27Per Hedbor  if [ x$once = x1 ] ; then signal_exit fi
38e43b1998-09-12Henrik Grubbström (Grubba) }
0259c42000-08-31Martin Stjernholm 
38e43b1998-09-12Henrik Grubbström (Grubba) # # Now do the stuff #
a3a0ec2001-03-17Martin Stjernholm  trap signal_exit 2 15 trap "" 1 if [ -z "$once" ]; then # Fix the pid file. We don't do this if once is set, since that # often signifies that it's not the real server starting up, but # instead some other process, e.g. one given with --program. [ -z "$pidfile" ] && pidfile=${ROXEN_PID_FILE:-$DIR/_roxen_pid} pass="$pass --pid-file=$pidfile" # Avoid duplicate start scripts if we got a pid file. mypid=$$ test -f $pidfile && { if read roxenpid && read scriptpid; then if kill -0 $scriptpid 2>/dev/null; then dp "According to the pid file $pidfile," dp "there is already a start script running with pid $scriptpid. Specify " dp "another pid file with --pid-file if this is a different server." dp "Server not started." : elif kill -0 $roxenpid 2>/dev/null; then dp "According to the pid file $pidfile," dp "there is already a server running with pid $roxenpid, but its start " dp "script seems to have died. You should shut it down and restart " dp "it, since it won't restart automatically. Server not started." : else false; fi else false; fi } < $pidfile && exit 1 # Minor race here. { echo "x" && echo $mypid; } > $pidfile trap cleanup_pid_file 0 fi
688d032000-09-25Per Hedbor PIKEVERSION="`$pike --version 2>&1|head -1`" LS="`ls -lL $pike 2>/dev/null`"
dec2ed2001-01-19Per Hedbor LS="$LS `find etc/modules -ls 2>/dev/null`" LS="$LS `find base_server -ls 2>/dev/null`"
2213981999-09-05Per Hedbor 
688d032000-09-25Per Hedbor VERSION_DATA="$PIKEVERSION $DEFINES $LS"
2213981999-09-05Per Hedbor 
e6a1712000-02-02Per Hedbor if [ "$program" = "base_server/roxenloader.pike" ] ; then
688d032000-09-25Per Hedbor  if [ "`cat $old_roxen_defines 2>/dev/null`" != "$VERSION_DATA" ] ; then
7aad022000-02-14Martin Stjernholm  remove_old_dot_o_files "defines or pike version changed"
7541211999-10-08Per Hedbor  fi
688d032000-09-25Per Hedbor  echo "$VERSION_DATA" > $old_roxen_defines
7541211999-10-08Per Hedbor fi
2213981999-09-05Per Hedbor 
a8135b1996-11-12Per Hedbor if [ -z "$once" ] ; then
14fd211998-11-28Henrik Grubbström (Grubba)  if [ $verbose -gt 0 ]; then
fd87202000-09-01Martin Nilsson  dp "Starting the Roxen WebServer."
14fd211998-11-28Henrik Grubbström (Grubba)  else :; fi
567dac2001-03-23Per Hedbor  if [ "x$DEBUGLOG" = "x" ] ; then DEBUGDIR="$LOGDIR/debug" DEBUGLOG="$DEBUGDIR/$FILES" else DEBUGDIR="`dirname "$DEBUGLOG"`" fi
6466f12001-03-24Per Hedbor  # This duplicate of the logdir creation code is needed, check the # redirect below if [ ! -d "$DEBUGDIR" ] ; then if ./mkdir -p "$DEBUGDIR" 2>/dev/null; then :; else dp "Failed to create log directory $DEBUGDIR." exit 1 fi fi
14fd211998-11-28Henrik Grubbström (Grubba)  if [ $verbose -gt 0 ]; then
a3a0ec2001-03-17Martin Stjernholm  dp "Using configuration from $DIR"
567dac2001-03-23Per Hedbor  dp "Storing the debug log in ${DEBUGLOG}.1"
a3a0ec2001-03-17Martin Stjernholm  dp "You can use the administration interface in the server to see debug info."
14fd211998-11-28Henrik Grubbström (Grubba)  else :; fi
13c5481998-07-02Henrik Grubbström (Grubba) 
0259c42000-08-31Martin Stjernholm  if ( (
a3a0ec2001-03-17Martin Stjernholm  # Minor race here wrt pid file cleanup.
0259c42000-08-31Martin Stjernholm  exec 3>&-
a3a0ec2001-03-17Martin Stjernholm  trap signal_exit 2 15 trap "" 1 trap cleanup_pid_file 0
0259c42000-08-31Martin Stjernholm  while : ; do
567dac2001-03-23Per Hedbor  if test -d "$DEBUGDIR/."; then :; else
0259c42000-08-31Martin Stjernholm  # Avoid infinite loop if the debug directory is deleted. # Thanks to Emils Klotins <emils@dot.lv> for reporting it.
6466f12001-03-24Per Hedbor  if ./mkdir -p "$DEBUGDIR" 2>/dev/null; then :; else
567dac2001-03-23Per Hedbor  dp "Failed to create log directory $DEBUGDIR."
0259c42000-08-31Martin Stjernholm  exit 1 fi
12017a2000-06-05Emils Klotins  fi
49fff32000-01-27Henrik Grubbström (Grubba) 
0259c42000-08-31Martin Stjernholm  dp "Server start at `date`"
567dac2001-03-23Per Hedbor  dp "Debug log in ${DEBUGLOG}.1" rotate $DEBUGLOG
a3a0ec2001-03-17Martin Stjernholm  start_roxen
49fff32000-01-27Henrik Grubbström (Grubba) 
0259c42000-08-31Martin Stjernholm  if [ "$exitcode" -eq "0" ] ; then # Clean shutdown.
fd87202000-09-01Martin Nilsson  dp "Roxen WebServer shutdown."
0259c42000-08-31Martin Stjernholm  exit 0 fi if [ "$exitcode" -lt "0" ] ; then # Signal death.
fd87202000-09-01Martin Nilsson  dp "Roxen WebServer died of signal $exitcode. Restarting..."
0259c42000-08-31Martin Stjernholm  else
00b8b02001-02-02Fredrik Noring  case "$exitcode" in 100) dp "Changing Roxen WebServer version. Restarting." cd .. && exec ./start "$@" dp 'Failed to spawn start script. -- Permission problem?' exit 1 ;; *) dp "Roxen WebServer down. Restarting." ;; esac
0259c42000-08-31Martin Stjernholm  fi done ) &
a3a0ec2001-03-17Martin Stjernholm  # Minor race here wrt pid file contents. pid=$! trap "" 0 [ -z "$pidfile" ] || { echo "x" && echo $pid; } > $pidfile dp "Forked start script, pid $pid." 2>&3 dp "Start script pid $pid."
567dac2001-03-23Per Hedbor  ) 3>&2 </dev/null >"$DEBUGDIR/start_$FILES.output" 2>&1; then
a3a0ec2001-03-17Martin Stjernholm  trap "" 0
0259c42000-08-31Martin Stjernholm  :
49fff32000-01-27Henrik Grubbström (Grubba)  else
ff3b9a2000-08-09Per Hedbor  dp 'Failed to spawn subshell. -- Permission problem?'
49fff32000-01-27Henrik Grubbström (Grubba)  exit 1 fi
0259c42000-08-31Martin Stjernholm  # Try to get rid of some fd's. # Some /bin/sh's have problems detaching otherwise. exec >/dev/null exec </dev/null
a8135b1996-11-12Per Hedbor else
a3a0ec2001-03-17Martin Stjernholm  start_roxen
a8135b1996-11-12Per Hedbor fi
941fc72001-06-20Fredrik Noring