| 1 | #!/usr/bin/env bash | 
|---|
| 2 |  | 
|---|
| 3 | export TMPDIR="$SELFTEST_TMPDIR" | 
|---|
| 4 |  | 
|---|
| 5 | SERVERNAME="$ENVNAME" | 
|---|
| 6 | [ -z "$SERVERNAME" ] && SERVERNAME="base" | 
|---|
| 7 | basedir=$TMPDIR | 
|---|
| 8 | osname=$(uname) | 
|---|
| 9 | if [ "$osname" = "Linux" ]; then | 
|---|
| 10 | vars=$(mktemp) | 
|---|
| 11 | else | 
|---|
| 12 | vars=$(mktemp -t tmpsmb) | 
|---|
| 13 | function seq() { | 
|---|
| 14 | dpt=$1 | 
|---|
| 15 | end=$2 | 
|---|
| 16 | while [ $dpt -le $end ]; do | 
|---|
| 17 | echo "$dpt" | 
|---|
| 18 | dpt=$(( $dpt + 1)) | 
|---|
| 19 | done | 
|---|
| 20 | } | 
|---|
| 21 | fi | 
|---|
| 22 |  | 
|---|
| 23 | [ -r $basedir/$SERVERNAME.pid ] && { | 
|---|
| 24 | for i in $(seq 2 100); do | 
|---|
| 25 | if [ ! -r "$basedir/${SERVERNAME}-$i.pid" ]; then | 
|---|
| 26 | SERVERNAME="${SERVERNAME}-$i" | 
|---|
| 27 | break | 
|---|
| 28 | fi | 
|---|
| 29 | done | 
|---|
| 30 | } | 
|---|
| 31 |  | 
|---|
| 32 | rm -f $basedir/$SERVERNAME.* | 
|---|
| 33 |  | 
|---|
| 34 | # set most of the environment vars we have in the screen session too | 
|---|
| 35 | _ENV="" | 
|---|
| 36 | printenv | | 
|---|
| 37 | egrep -v '^TERMCAP|^WINDOW|^SHELL|^STY|^SHLVL|^SAMBA_VALGRIND|\$' | | 
|---|
| 38 | egrep '^[A-Z]' | | 
|---|
| 39 | sed "s/\(^[^=]*=\)\(.*\)/export \1'\2'/g" > $basedir/$SERVERNAME.vars | 
|---|
| 40 |  | 
|---|
| 41 | cat <<EOF > $basedir/$SERVERNAME.launch | 
|---|
| 42 | cd $PWD | 
|---|
| 43 | echo \$\$ > $basedir/$SERVERNAME.pid | 
|---|
| 44 | . $basedir/$SERVERNAME.vars | 
|---|
| 45 | echo "\$(date) starting $SERVERNAME" >> $basedir/$SERVERNAME.log | 
|---|
| 46 | $@ | 
|---|
| 47 | echo \$? > $basedir/$SERVERNAME.status | 
|---|
| 48 | read parent < $basedir/$SERVERNAME.parent.pid | 
|---|
| 49 | kill \$parent | 
|---|
| 50 | EOF | 
|---|
| 51 | pid=$$ | 
|---|
| 52 |  | 
|---|
| 53 | cleanup() { | 
|---|
| 54 | trap "exit 1" SIGINT SIGTERM SIGPIPE | 
|---|
| 55 | [ -r $basedir/$SERVERNAME.status ] && { | 
|---|
| 56 | read status < $basedir/$SERVERNAME.status | 
|---|
| 57 | echo "$(date) samba exited with status $status" >> $basedir/$SERVERNAME.log | 
|---|
| 58 | exit $status | 
|---|
| 59 | } | 
|---|
| 60 | read pid < $basedir/$SERVERNAME.pid | 
|---|
| 61 | echo "$(date) Killing samba pid $pid from $$" >> $basedir/$SERVERNAME.log | 
|---|
| 62 | if [ "$pid" = "$$" ]; then | 
|---|
| 63 | exit 1 | 
|---|
| 64 | fi | 
|---|
| 65 | kill -9 $pid 2>&1 | 
|---|
| 66 | exit 1 | 
|---|
| 67 | } | 
|---|
| 68 |  | 
|---|
| 69 | rm -f $basedir/$SERVERNAME.status $basedir/$SERVERNAME.log | 
|---|
| 70 | echo $$ > $basedir/$SERVERNAME.parent.pid | 
|---|
| 71 | trap cleanup SIGINT SIGTERM SIGPIPE | 
|---|
| 72 | screen -r -X screen -t test:$SERVERNAME bash $basedir/$SERVERNAME.launch | 
|---|
| 73 | echo "$(date) waiting in $$" >> $basedir/$SERVERNAME.log | 
|---|
| 74 | read stdin_var | 
|---|
| 75 | echo "$(date) EOF on stdin" >> $basedir/$SERVERNAME.log | 
|---|
| 76 | read pid < $basedir/$SERVERNAME.pid | 
|---|
| 77 | echo "$(date) killing $pid" >> $basedir/$SERVERNAME.log | 
|---|
| 78 | kill $pid 2> /dev/null | 
|---|
| 79 | echo "$(date) exiting" >> $basedir/$SERVERNAME.log | 
|---|
| 80 | exit 0 | 
|---|