diff options
-rwxr-xr-x | run-instance.sh | 51 |
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" \ |