summaryrefslogtreecommitdiff
path: root/run-instance.sh
blob: 05b9947c6bd1a279c8a9edcf4bc7805f8f9d78ae (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#!/bin/bash

####################
# Helper functions #
####################

SELF="$0"

function error {
	tput setaf 9
	tput bold
	printf "%s: ERROR: " "$0"
	printf "$@"
	tput sgr0
	exit 1
}

function debug {
	if [ "$DEBUG" -ne 1 ]; then
		return
	fi

	tput setaf 12
	printf "[DEBUG] "
	printf "$@"
	tput sgr0
}

function check_file {
	[ -f "$1" ] || error "%s '%s' is not a file\n" "$2" "$1"
}

function check_dir {
	[ -d "$1" ] || error "%s '%s' is not a directory\n" "$2" "$1"
}

#################
# Configuration #
#################

# Load the script configuration and set some defaults.
source run-instance.local.sh || error "missing config\n"
[ -z "$PREFIX" ] && error "PREFIX is not set\n"

# fs_basepath, fs_overpath, fs_homepath and fs_game.
true ${COMMON:="$PREFIX/common"}
true ${OVER_PREFIX:="$PREFIX/over@"}
true ${HOME_PREFIX:="$PREFIX/home@"}
true ${FS_GAME:="slacker"}

# Config directory.
true ${CONFIG_PREFIX:="$PREFIX/config/"}

# Executables.
true ${GDB_WRAPPER:="$PREFIX/bin/gdb-wrapper2.sh"}
true ${TREMDED_PREFIX:="$PREFIX/bin/tremded@"}

# Debugging
true ${DEBUG:=1}
true ${NO_DEBUGGER:=0}

if [ "$NO_DEBUGGER" -ne 0 ]; then
	GDB_WRAPPER="exec"
fi

###################
# The entry point #
###################

# Check the argument.
[ -z "$1" ] && error "instance name is missing\nusage: %s [INSTANCE]\n" "$SELF"

# Figure out all the instance-specific paths.
I="$1"
TREMDED="$TREMDED_PREFIX$I"
OVER="$OVER_PREFIX$I"
HOME="$HOME_PREFIX$I"
CONFIG_COMMON="$CONFIG_PREFIX/common.cfg"
CONFIG_INST="$CONFIG_PREFIX/$I.cfg"

# Do some integrity checks.
check_file   "$TREMDED"               "the tremded"
check_dir    "$OVER"                  "the over directory"
check_file   "$OVER/$FS_GAME/game.so" "the game.so"
check_dir    "$HOME"                  "the home directory"
check_file   "$CONFIG_COMMON"         "the common config"
check_file   "$CONFIG_INST"           "the instance-specific config"

# Server configuration is done by overwiting the autogen.
cat "$CONFIG_COMMON" "$CONFIG_INST" > "$HOME/$FS_GAME/autogen_server.cfg" \
	|| error "couldn't overwrite the autogen\n"

# cd to HOME (that's where cores will appear) and start the server.
cd "$HOME" || error "cannot chdir to %s\n" "$HOME"
"$GDB_WRAPPER" "$TREMDED" \
	+set fs_basepath "$COMMON" \
	+set fs_overpath "$OVER" \
	+set fs_homepath "$HOME" \
	+set fs_game "$FS_GAME" \
	+set com_pipefile "pipe" \
	+set dedicated 2 \
	+map "atcs" \
	+nocurses \
	"$@" || error "couldn't start the server\n"