diff --git a/modserver/globals.sh b/modserver/globals.sh index d731057..8daff50 100644 --- a/modserver/globals.sh +++ b/modserver/globals.sh @@ -33,6 +33,45 @@ die() { errmsg "$*" exit 1 } +isnum() { + case $1 in + ''|*[!0-9]*) + exit 1 + ;; + *) + exit 0 + esac +} +isempty() { + for arg in "$@" ; do + # exit in error if file + if [ -f "$arg" ] ; then + exit 1 + elif [ -L "$arg" ] ; then + # if is a symlink, check what it points to + # note: this only checks one-link level deep + if [ -d "$(readlink "$arg")" ] ; then + exit 0 + else + exit 1 + fi + elif [ -d "$arg" ] ; then + : + else + # is not a directory or a link to a directory + exit 1 + fi + + # there should be a way to make this be builtins only + # using printf and glob expansions, look into later + if /bin/rmdir "$arg" 2>/dev/null ; then + /bin/mkdir -p "$arg" + exit 0 + else + exit 1 + fi + done +} mount_dayz_network_drive() { if ! is_network_drive_mounted ; then sudo mkdir -p /mnt/dayz diff --git a/modserver/old/update.sh b/modserver/old/update.sh index 8bdb1c1..e998e42 100644 --- a/modserver/old/update.sh +++ b/modserver/old/update.sh @@ -29,53 +29,53 @@ # } # args: $1=server_name -update_mods() { - MODS_FILE="$HOME/modlists/$1" - REMOTE_MODS_DIR="/mnt/dayz/mods/${1%.txt}" - mkdir -p "$REMOTE_MODS_DIR" +# update_mods() { + # MODS_FILE="$HOME/modlists/$1" + # REMOTE_MODS_DIR="/mnt/dayz/mods/${1%.txt}" + # mkdir -p "$REMOTE_MODS_DIR" - tempfile=/tmp/mods-to-download.txt - :> "$tempfile" + # tempfile=/tmp/mods-to-download.txt + # :> "$tempfile" - while read -r mod ; do - # skip comments, blank lines - case "$mod" in - \#*|'') - ;; - *) - mod=${mod%%^*} - printf "+workshop_download_item $DAYZ_GAME_ID %s\n" "$mod" >> "$tempfile" - mkdir -p "$LOCAL_MODS_DIR/$mod" - esac - done < "$MODS_FILE" + # while read -r mod ; do + # # skip comments, blank lines + # case "$mod" in + # \#*|'') + # ;; + # *) + # mod=${mod%%^*} + # printf "+workshop_download_item $DAYZ_GAME_ID %s\n" "$mod" >> "$tempfile" + # mkdir -p "$LOCAL_MODS_DIR/$mod" + # esac + # done < "$MODS_FILE" - msg "----------- DOWNLOAD MODS -------------" - steamcmd -tcp +login "$STEAM_USER" $(cat "$tempfile" | xargs) +quit || exit 1 - msg "----------- RENAMING MODS -------------" + # msg "----------- DOWNLOAD MODS -------------" + # steamcmd -tcp +login "$STEAM_USER" $(cat "$tempfile" | xargs) +quit || exit 1 + # msg "----------- RENAMING MODS -------------" - rm -rf "$HOME/mods_to_copy" 2>/dev/null ||: - mkdir -p "$HOME/mods_to_copy" + # rm -rf "$HOME/mods_to_copy" 2>/dev/null ||: + # mkdir -p "$HOME/mods_to_copy" - :> "$HOME/mods_to_copy/mods.txt" - while read -r mod ; do - # skip comments, blank lines - case "$mod" in - \#*|'') - ;; - *) - mod_id=${mod%%^*} - mod_name=${mod##*^} - do_sync "$LOCAL_MODS_DIR/$mod_id"/ "$HOME/mods_to_copy/@${mod_name}" - printf '@%s\n' "$mod_name" >> "$HOME/mods_to_copy/mods.txt" - esac - done < "$MODS_FILE" + # :> "$HOME/mods_to_copy/mods.txt" + # while read -r mod ; do + # # skip comments, blank lines + # case "$mod" in + # \#*|'') + # ;; + # *) + # mod_id=${mod%%^*} + # mod_name=${mod##*^} + # do_sync "$LOCAL_MODS_DIR/$mod_id"/ "$HOME/mods_to_copy/@${mod_name}" + # printf '@%s\n' "$mod_name" >> "$HOME/mods_to_copy/mods.txt" + # esac + # done < "$MODS_FILE" - msg "----------- SYNCING MODS -------------" - do_sync "$HOME/mods_to_copy"/ "$REMOTE_MODS_DIR" + # msg "----------- SYNCING MODS -------------" + # do_sync "$HOME/mods_to_copy"/ "$REMOTE_MODS_DIR" - rm "$tempfile" 2>/dev/null ||: - rm -rf "$HOME/mods_to_copy" 2>/dev/null ||: -} + # rm "$tempfile" 2>/dev/null ||: + # rm -rf "$HOME/mods_to_copy" 2>/dev/null ||: +# } update_stock_maps() { msg "----------- UPDATING MAPS -------------" diff --git a/modserver/update_mods.sh b/modserver/update_mods.sh index 10a99a6..b094952 100644 --- a/modserver/update_mods.sh +++ b/modserver/update_mods.sh @@ -1,6 +1,9 @@ #!/bin/sh # # shellcheck disable=1090,2034,2011 +# +# "should check code directly not $?" +# shellcheck disable=2181 # --------------------------------------------------- # =================================================== @@ -25,6 +28,7 @@ export MODLISTS="$PWD/modlists" export LOCAL_STOCK="$HOME/stock/DayZ" export LOCAL_STOCK_GAME="$LOCAL_STOCK/DayZ" export LOCAL_STOCK_SERVER="$LOCAL_STOCK/DayZServer" +export LOCAL_STOCK_MODS="$LOCAL_STOCK/mods" # =================================================== # 03. Mount network drive @@ -40,7 +44,7 @@ fi # =================================================== # 04. Checks # =================================================== -mkdir -p "$LOCAL_STOCK_GAME" "$LOCAL_STOCK_SERVER" +mkdir -p "$LOCAL_STOCK_GAME" "$LOCAL_STOCK_SERVER" "$LOCAL_STOCK_MODS" if [ "$USER" != "$STEAMCMD_USER" ] ; then die "Current user: '$USER' does not match '$STEAMCMD_USER'" @@ -93,13 +97,13 @@ update_game() { # args: $1 = server_modlist.txt to update update_mods_for_server() { - MODS_FILE="$MODLISTS/$1" - REMOTE_MODS_DIR="$REMOTE_MODS_DIR/${1%.txt}" - mkdir -p "$REMOTE_MODS_DIR/${1%.txt}" + mods_file="$MODLISTS/$1" + map_name=${1%.txt} + mkdir -p "$REMOTE_MODS/$map_name" # Create temporary file to list all the mod_id's we are # going to download. This speeds up steamcmd and avoids rate limits. - tempfile=/tmp/mods-to-download.txt + tempfile="/tmp/$map_name-mods_to_download.txt" :> "$tempfile" # load the server_modlist.txt, copying the mod id's we need to update @@ -113,20 +117,69 @@ update_mods_for_server() { # while read -r mod ; do case "$mod" in - \#*|'') + \#*|''|' ') ;; *) mod=${mod%%^*} - if [ -z "$mod" ] ; then - die "mod for $server appears to be empty - syntax error" - fi - printf "+workshop_download_item $DAYZ_GAME_ID %s\n" "$mod" >> "$tempfile" - mkdir -p "$LOCAL_MODS_DIR/$mod" - esac - done < "$MODS_FILE" - rm "$tempfile" 2>/dev/null ||: - unset tempfile mod + # check validity of syntax + if [ -z "$mod" ] ; then + die "mod for $map_name appears to be empty - syntax error" + fi + if ! isnum "$mod" ; then + die "mod $mod for $map_name does not appear to be a number" + fi + + printf "%s\n" "$mod" >> "$tempfile" + mkdir -p "$LOCAL_STOCK_MODS/$mod" + esac + done <"$mods_file" + unset mod + + msg "----------- DOWNLOADING MODS -------------" + # shellcheck disable=2046 + steamcmd \ + -tcp \ + +force_install_dir "$LOCAL_MODS_DIR" \ + +@sSteamCmdForcePlatformType windows \ + +@ShutdownOnFailedCommand 1 \ + +login "$STEAM_USER" \ + +workshop_download_item \ + "$DAYZ_GAME_ID" \ + $(xargs < "$tempfile") \ + +quit + + msg "exiting - test" + exit 1 + + if [ $? -ne 0 ] ; then + die "Problem downloading mods for $map_name" + fi + + msg "------------ RENAMING MODS -------------" + mods_to_copy="$LOCAL_STOCK_MODS/mods_to_copy" + rm -rf "$mods_to_copy" 2>/dev/null ||: + mkdir -p "$mods_to_copy" + + :> "$mods_to_copy/mods.txt" + while read -r mod ; do + # skip comments, blank lines + case "$mod" in + \#*|''|' ') + ;; + *) + mod_id=${mod%%^*} + mod_name=${mod##*^} + do_sync "$LOCAL_STOCK_MODS/$mod_id"/ "$mods_to_copy/@${mod_name}" + printf '@%s\n' "$mod_name" >> "$mods_to_copy/mods.txt" + esac + done < "$mods_file" + + msg "----------- SYNCING MODS -------------" + do_sync "$mods_to_copy"/ "$REMOTE_MODS" + + rm -f "$tempfile" 2>/dev/null ||: + unset tempfile mod map_name mods_file mods_to_copy mod_name mod_id } main() {