summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xrun-instance.sh51
1 files changed, 39 insertions, 12 deletions
diff --git a/run-instance.sh b/run-instance.sh
index 05b9947..52805a4 100755
--- a/run-instance.sh
+++ b/run-instance.sh
@@ -27,11 +27,31 @@ function debug {
}
function check_file {
- [ -f "$1" ] || error "%s '%s' is not a file\n" "$2" "$1"
+ [ -e "$1" ] || error "'%s' doesn't exist\n" "$1"
+ [ -d "$1" ] && error "'%s' is a directory, not a file\n" "$1"
+ [ -f "$1" ] || error "'%s' exists but isn't a file\n" "$1"
}
function check_dir {
- [ -d "$1" ] || error "%s '%s' is not a directory\n" "$2" "$1"
+ [ -e "$1" ] || error "'%s' doesn't exist\n" "$1"
+ [ -f "$1" ] && error "'%s' is a file, not a directory\n" "$1"
+ [ -d "$1" ] || error "'%s' exists but isn't a directory\n" "$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"
}
#################
@@ -48,8 +68,9 @@ true ${OVER_PREFIX:="$PREFIX/over@"}
true ${HOME_PREFIX:="$PREFIX/home@"}
true ${FS_GAME:="slacker"}
-# Config directory.
-true ${CONFIG_PREFIX:="$PREFIX/config/"}
+# Config directory: as seen by tremded's vfs and the absolute path, respectively.
+true ${CONFIG_LOCAL:="config"}
+true ${CONFIG_GLOBAL:="$PREFIX/$CONFIG_LOCAL"}
# Executables.
true ${GDB_WRAPPER:="$PREFIX/bin/gdb-wrapper2.sh"}
@@ -75,16 +96,22 @@ 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"
+CONFIG_COMMON="$CONFIG_GLOBAL/common.cfg"
+CONFIG_INST="$CONFIG_GLOBAL/$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"
+[ "$NO_DEBUGGER" -eq 0 ] && check_file "$GDB_WRAPPER"
+check_file "$TREMDED"
+check_dir "$COMMON"
+check_file "$COMMON/base/data-1.1.0.pk3"
+check_dir "$OVER"
+check_dir "$OVER/$FS_GAME"
+check_file "$OVER/$FS_GAME/game.so"
+check_dir "$HOME"
+check_dir "$HOME/$FS_GAME"
+check_file "$CONFIG_COMMON"
+check_file "$CONFIG_INST"
+ensure_link "$CONFIG_GLOBAL" "$HOME/$FS_GAME/$CONFIG_LOCAL"
# Server configuration is done by overwiting the autogen.
cat "$CONFIG_COMMON" "$CONFIG_INST" > "$HOME/$FS_GAME/autogen_server.cfg" \