From 99a8e96db76ef6a5bf7279ec418407f00c14d1eb Mon Sep 17 00:00:00 2001 From: Mitch Weaver Date: Mon, 20 Nov 2023 21:43:19 -0600 Subject: [PATCH] asdf --- modserver/globals.sh | 165 +++++++++++++++++++-------------------- modserver/update_mods.sh | 116 ++++++++++++++++++++------- 2 files changed, 168 insertions(+), 113 deletions(-) diff --git a/modserver/globals.sh b/modserver/globals.sh index 8daff50..5c55c94 100644 --- a/modserver/globals.sh +++ b/modserver/globals.sh @@ -16,6 +16,14 @@ export REMOTE_MODS="$REMOTE_DIR/mods" export REMOTE_STOCK_SERVER="$REMOTE_DIR/stock/DayZServer" export REMOTE_STOCK_GAME="$REMOTE_DIR/stock/DayZ" + +export CHERNARUS_MAP_NAME=dayzOffline.chernarusplus +export NAMALSK_MAP_NAME=regular.namalsk +export TAKISTAN_MAP_NAME=Offline.TakistanPlus + +export NAMALSK_MOD_ID=2289461232 +export TAKISTAN_MOD_ID=2563233742 + ################### GLOBAL VARS ############################## ################### GLOBAL ALIASES ########################### @@ -24,102 +32,93 @@ alias do_sync='rsync -rvltDhu --delete --partial --progress' ################### GLOBAL FUNCTIONS ######################### msg() { - printf '[*] %s\n' "$*" + printf '[*] %s\n' "$*" } errmsg() { - >&2 printf '[Error]: %s\n' "$*" + >&2 printf '[Error]: %s\n' "$*" } die() { - errmsg "$*" - exit 1 -} -isnum() { - case $1 in - ''|*[!0-9]*) - exit 1 - ;; - *) - exit 0 - esac + errmsg "$*" + exit 1 } 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 + 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 + # 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 - if [ -e /proc/version ] ; then - read -r ver < /proc/version - case $ver in - # WSL - *icrosoft*) - msg "Detected WSL, mounting via drvfs" - sudo mount -t drvfs -o user=samba \ - //truenas.local.wvr.sh/dayz /mnt/dayz - ;; - *) - msg "Detected Linux, mounting via cifs" - # shellcheck disable=2046 - sudo mount -t cifs //truenas.local.wvr.sh/dayz /mnt/dayz \ - -o rw \ - -o credentials=/root/sambacreds.txt \ - -o iocharset=utf8 \ - -o vers=3.0 \ - -o uid=$(id -u) \ - -o gid=$(id -g) - esac + if ! is_network_drive_mounted ; then + sudo mkdir -p /mnt/dayz + if [ -e /proc/version ] ; then + read -r ver < /proc/version + case $ver in + # WSL + *icrosoft*) + msg "Detected WSL, mounting via drvfs" + sudo mount -t drvfs -o user=samba \ + //truenas.local.wvr.sh/dayz /mnt/dayz + ;; + *) + msg "Detected Linux, mounting via cifs" + # shellcheck disable=2046 + sudo mount -t cifs //truenas.local.wvr.sh/dayz /mnt/dayz \ + -o rw \ + -o credentials=/root/sambacreds.txt \ + -o iocharset=utf8 \ + -o vers=3.0 \ + -o uid=$(id -u) \ + -o gid=$(id -g) + esac - unset ver - else - errmsg 'could not find /proc/version' - exit 1 - fi + unset ver + else + errmsg 'could not find /proc/version' + exit 1 + fi - fi - if ! is_network_drive_mounted ; then - errmsg 'Could not mount network drive' - exit 1 - fi + fi + if ! is_network_drive_mounted ; then + errmsg 'Could not mount network drive' + exit 1 + fi } is_network_drive_mounted() { - if [ ! -f "$REMOTE_DIR/canary" ] ; then - return 1 - fi - # test write - touch /mnt/dayz/canary.test - if [ $? -eq 0 ] ; then - rm /mnt/dayz/canary.test - else - errmsg "Mounted network drive but we do not have write access." - exit 1 - fi + if [ ! -f "$REMOTE_DIR/canary" ] ; then + return 1 + fi + # test write + touch /mnt/dayz/canary.test + if [ $? -eq 0 ] ; then + rm /mnt/dayz/canary.test + else + errmsg "Mounted network drive but we do not have write access." + exit 1 + fi } ################### GLOBAL FUNCTIONS ######################### diff --git a/modserver/update_mods.sh b/modserver/update_mods.sh index a3cd144..e8bc4f4 100644 --- a/modserver/update_mods.sh +++ b/modserver/update_mods.sh @@ -134,29 +134,29 @@ update_mods_for_server() { *) mod=${mod%%^*} - # check validity of syntax - if [ -z "$mod" ] ; then - die "mod for $map_name appears to be empty - syntax error" - fi + # check validity of syntax + if [ -z "$mod" ] ; then + die "mod for $map_name appears to be empty - syntax error" + fi - printf "+workshop_download_item $DAYZ_GAME_ID %s\n" "$mod" >> "$tempfile" - mkdir -p "$LOCAL_MODS/$mod" - esac + printf "+workshop_download_item $DAYZ_GAME_ID %s\n" "$mod" >> "$tempfile" + mkdir -p "$LOCAL_MODS/$mod" + esac done <"$mods_file" unset mod # shellcheck disable=2046 steamcmd \ - -tcp \ + -tcp \ +force_install_dir "$LOCAL_MODS" \ +@sSteamCmdForcePlatformType windows \ +@ShutdownOnFailedCommand 1 \ - +login "$STEAM_USER" \ - $(xargs < "$tempfile") \ - +quit + +login "$STEAM_USER" \ + $(xargs < "$tempfile") \ + +quit if [ $? -ne 0 ] ; then - die "Problem downloading mods for $map_name" + die "Problem downloading mods for $map_name" fi echo @@ -168,19 +168,19 @@ update_mods_for_server() { :> "$mods_to_copy/mods.txt" while read -r mod ; do - # skip comments, blank lines - case "$mod" in - \#*|''|' ') - ;; - *) - mod_id=${mod%%^*} - mod_name=${mod##*^} - if [ ! -d "$LOCAL_MODS/steamapps/workshop/content/$DAYZ_GAME_ID/$mod_id" ] ; then - die "$LOCAL_MODS/steamapps/workshop/content/$DAYZ_GAME_ID/$mod_id does not exist" - fi - do_sync "$LOCAL_MODS/steamapps/workshop/content/$DAYZ_GAME_ID/$mod_id"/ "$mods_to_copy/@${mod_name}" - printf '@%s\n' "$mod_name" >> "$mods_to_copy/mods.txt" - esac + # skip comments, blank lines + case "$mod" in + \#*|''|' ') + ;; + *) + mod_id=${mod%%^*} + mod_name=${mod##*^} + if [ ! -d "$LOCAL_MODS/steamapps/workshop/content/$DAYZ_GAME_ID/$mod_id" ] ; then + die "$LOCAL_MODS/steamapps/workshop/content/$DAYZ_GAME_ID/$mod_id does not exist" + fi + do_sync "$LOCAL_MODS/steamapps/workshop/content/$DAYZ_GAME_ID/$mod_id"/ "$mods_to_copy/@${mod_name}" + printf '@%s\n' "$mod_name" >> "$mods_to_copy/mods.txt" + esac done < "$mods_file" echo @@ -196,16 +196,72 @@ update_mods_for_server() { echo } +update_stock_maps() { + msg "----------- UPDATING MAPS -------------" + + msg "Copying Stock Chernarus" + do_sync \ + "$LOCAL_STOCK_SERVER/mpmissions/$CHERNARUS_MAP_NAME"/ \ + "$REMOTE_MAPS/$CHERNARUS_MAP_NAME" + + msg "Updating Namalsk Survival" + steamcmd \ + -tcp \ + +force_install_dir "$LOCAL_MODS" \ + +@sSteamCmdForcePlatformType windows \ + +@ShutdownOnFailedCommand 1 \ + +login "$STEAM_USER" \ + +workshop_download_item \ + "$DAYZ_GAME_ID" \ + "$NAMALSK_MOD_ID" \ + +quit + + if [ $? -ne 0 ] ; then + die "Failed to update Namalsk Survival" + fi + + if [ -d "$LOCAL_MODS/steamapps/workshop/content/$DAYZ_GAME_ID/$NAMALSK_MOD_ID/Extras/Regular/$NAMALSK_MAP_NAME" ] ; then + do_sync "$LOCAL_MODS/steamapps/workshop/content/$DAYZ_GAME_ID/$NAMALSK_MOD_ID/Extras/Regular/$NAMALSK_MAP_NAME"/ \ + "$REMOTE_MAPS/$NAMALSK_MAP_NAME" || \ + die "failed to copy Namalsk map files" + fi + + ####################TODO: # msg "Updating Optimized Namalsk Server PBOs" + + msg "Updating TakistanPlus" + steamcmd \ + -tcp \ + +force_install_dir "$LOCAL_MODS" \ + +@sSteamCmdForcePlatformType windows \ + +@ShutdownOnFailedCommand 1 \ + +login "$STEAM_USER" \ + +workshop_download_item \ + "$DAYZ_GAME_ID" \ + "$TAKISTAN_MOD_ID" \ + +quit + + if [ $? -ne 0 ] ; then + die "Failed to update TakistanPlus" + fi + + if [ -d "$LOCAL_MODS/steamapps/workshop/content/$DAYZ_GAME_ID/$TAKISTAN_MOD_ID/Mission/$TAKISTAN_MAP_NAME" ] ; then + do_sync "$LOCAL_MODS/steamapps/workshop/content/$DAYZ_GAME_ID/$TAKISTAN_MOD_ID/Mission/$TAKISTAN_MAP_NAME"/ \ + "$REMOTE_MAPS/$TAKISTAN_MAP_NAME" || \ + die "failed to copy Takistan map files" + fi +} + main() { update_server update_game + update_stock_maps for server in $(ls "$MODLISTS" | xargs) ; do - [ -f "$MODLISTS/$server" ] || continue - update_mods_for_server "$server" - unset server - # rm -rf "$HOME/.steam/debian-installation/steamapps/workshop/downloads" - # mkdir -p "$HOME/.steam/debian-installation/steamapps/workshop/downloads" + [ -f "$MODLISTS/$server" ] || continue + update_mods_for_server "$server" + unset server + # rm -rf "$HOME/.steam/debian-installation/steamapps/workshop/downloads" + # mkdir -p "$HOME/.steam/debian-installation/steamapps/workshop/downloads" done }