blob: cdb8342002bb1ba2e5e6051d6346a86bc134b8b3 (
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
105
106
107
108
109
110
111
|
#!/bin/bash
#################
# Configuration #
#################
DEBUG=1
# The root directory.
PREFIX="/home/tremded"
# fs_basepath, fs_homepath and fs_game.
COMMON="$PREFIX/common"
HOME_PREFIX="$PREFIX/home@"
FS_GAME="slacker"
# Config directory: as seen by tremded's vfs and the absolute path, respectively.
CONFIG_LOCAL="config"
CONFIG_GLOBAL="$PREFIX/$CONFIG_LOCAL"
# Executables.
GDB_WRAPPER="$PREFIX/bin/gdb-wrapper2.sh"
TREMDED_PREFIX="$PREFIX/bin/tremded@"
####################
# 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"
}
function ensure_link {
if [ -L "$2" ]; then
debug "ensure_link: '%s' already exists\n" "$2"
if [ `readlink "$2"` == "$1" ]; then
return
fi
debug "ensure_link: ...and points at '%s' instead of '%s'\n" `readlink "$2"` "$1"
unlink "$2" || error "couldn't unlink '%s'\n" "$2"
fi
mkdir -p `dirname "$2"` || error
ln -s "$1" "$2" || error "linking failed\n"
debug "ensure_link: linked '%s' -> '%s'\n" "$2" "$1"
}
###################
# 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"
HOME="$HOME_PREFIX$I"
CONFIG_LOCAL_COMMON="$CONFIG_LOCAL/common.cfg"
CONFIG_LOCAL_INST="$CONFIG_LOCAL/$I.cfg"
CONFIG_GLOBAL_COMMON="$CONFIG_GLOBAL/common.cfg"
CONFIG_GLOBAL_INST="$CONFIG_GLOBAL/$I.cfg"
# Do some integrity tests and fix missing links.
check_file "$TREMDED" "the tremded"
check_dir "$HOME" "the home directory"
check_file "$CONFIG_GLOBAL_COMMON" "the common config"
check_file "$CONFIG_GLOBAL_INST" "the instance-specific config"
ensure_link "${CONFIG_GLOBAL}" "$HOME/$FS_GAME/$CONFIG_LOCAL"
# 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" \
"$TREMDED" \
+exec "$CONFIG_LOCAL_COMMON" \
+set fs_basepath "$COMMON" \
+set fs_homepath "$HOME" \
+set fs_game "$FS_GAME" \
+set com_pipefile "pipe" \
+set dedicated 2 \
+exec "$CONFIG_LOCAL_INST" \
+map "atcs" \
+nocurses \
"$@" || error "couldn't start the server\n"
|