This commit is contained in:
2023-11-20 20:11:25 -06:00
parent cdf31ce541
commit 366253f1f9
4 changed files with 139 additions and 74 deletions

View File

@@ -29,6 +29,10 @@ msg() {
errmsg() { errmsg() {
>&2 printf '[Error]: %s\n' "$*" >&2 printf '[Error]: %s\n' "$*"
} }
die() {
errmsg "$*"
exit 1
}
mount_dayz_network_drive() { mount_dayz_network_drive() {
if ! is_network_drive_mounted ; then if ! is_network_drive_mounted ; then
sudo mkdir -p /mnt/dayz sudo mkdir -p /mnt/dayz

View File

@@ -0,0 +1,9 @@
# ==================================================================
# Generic / All Servers
# ==================================================================
# Dabs Framework
# https://steamcommunity.com/sharedfiles/filedetails/?id=2545327648
2545327648^dabsframework

View File

@@ -10,28 +10,28 @@
# alias do_sync='rsync -rvltDhu --delete --partial --progress' # alias do_sync='rsync -rvltDhu --delete --partial --progress'
# msg() { # msg() {
# printf '[*] %s\n' "$*" # printf '[*] %s\n' "$*"
# } # }
# ==================================================================================== # ====================================================================================
update_server() { # update_server() {
msg "------------------ UPDATING DAYZ SERVER -------------------" # msg "------------------ UPDATING DAYZ SERVER -------------------"
LOCAL_INSTALL_DIR="${HOME}/.steam/debian-installation/steamapps/common/DayZServer" # LOCAL_INSTALL_DIR="${HOME}/.steam/debian-installation/steamapps/common/DayZServer"
REMOTE_INSTALL_DIR="/mnt/dayz/stock/DayZServer" # REMOTE_INSTALL_DIR="/mnt/dayz/stock/DayZServer"
steamcmd -tcp +login "$STEAM_USER" +app_update "$DAYZ_GAME_ID" +quit # steamcmd -tcp +login "$STEAM_USER" +app_update "$DAYZ_GAME_ID" +quit
steamcmd -tcp +login "$STEAM_USER" +app_update "$DAYZ_SERVER_ID" +quit # steamcmd -tcp +login "$STEAM_USER" +app_update "$DAYZ_SERVER_ID" +quit
do_sync "$LOCAL_INSTALL_DIR"/ "$REMOTE_INSTALL_DIR" # do_sync "$LOCAL_INSTALL_DIR"/ "$REMOTE_INSTALL_DIR"
msg "------- DONE UPDATING SERVER ---------------------" # msg "------- DONE UPDATING SERVER ---------------------"
} # }
# args: $1=server_name # args: $1=server_name
update_mods() { update_mods() {
MODS_FILE="$HOME/modlists/$1.txt" MODS_FILE="$HOME/modlists/$1"
REMOTE_MODS_DIR="/mnt/dayz/mods/$1" REMOTE_MODS_DIR="/mnt/dayz/mods/${1%.txt}"
mkdir -p "$REMOTE_MODS_DIR" mkdir -p "$REMOTE_MODS_DIR"
tempfile=/tmp/mods-to-download.txt tempfile=/tmp/mods-to-download.txt
@@ -51,7 +51,6 @@ update_mods() {
msg "----------- DOWNLOAD MODS -------------" msg "----------- DOWNLOAD MODS -------------"
steamcmd -tcp +login "$STEAM_USER" $(cat "$tempfile" | xargs) +quit || exit 1 steamcmd -tcp +login "$STEAM_USER" $(cat "$tempfile" | xargs) +quit || exit 1
msg "----------- RENAMING MODS -------------" msg "----------- RENAMING MODS -------------"
rm -rf "$HOME/mods_to_copy" 2>/dev/null ||: rm -rf "$HOME/mods_to_copy" 2>/dev/null ||:
@@ -107,20 +106,17 @@ update_stock_maps() {
do_sync "$LOCAL_MODS_DIR/$TAKISTAN_MOD_ID/Mission/$takistan"/ "$REMOTE_MAPS/$takistan" || \ do_sync "$LOCAL_MODS_DIR/$TAKISTAN_MOD_ID/Mission/$takistan"/ "$REMOTE_MAPS/$takistan" || \
die "failed to copy Takistan map files" die "failed to copy Takistan map files"
fi fi
msg "NOTE: deer isle doesn't get automatic updates... Skipping"
} }
main () { # main () {
update_server # update_server
update_stock_maps # update_stock_maps
for server in $(ls "$HOME/modlists" | xargs | sed 's/\.txt//g') ; do # for server in $(ls "$HOME/modlists" | xargs | sed 's/\.txt//g') ; do
rm -rf "$HOME/.steam/debian-installation/steamapps/workshop/downloads" # rm -rf "$HOME/.steam/debian-installation/steamapps/workshop/downloads"
mkdir -p "$HOME/.steam/debian-installation/steamapps/workshop/downloads" # mkdir -p "$HOME/.steam/debian-installation/steamapps/workshop/downloads"
update_mods "$server" # update_mods "$server"
done # done
} # }
main "$@" # main "$@"

View File

@@ -1,6 +1,7 @@
#!/bin/sh #!/bin/sh
# #
# shellcheck disable=1090,2034 # shellcheck disable=1090,2034,2011
# ---------------------------------------------------
# =================================================== # ===================================================
# 01. Attempt to load global DayZ values # 01. Attempt to load global DayZ values
@@ -12,78 +13,133 @@ if [ -e "$GLOBALS_FILE" ] ; then
chmod +x "$GLOBALS_FILE" chmod +x "$GLOBALS_FILE"
. "$GLOBALS_FILE" . "$GLOBALS_FILE"
else else
>&2 echo "Could not load: $GLOBALS_FILE" die "Could not load: $GLOBALS_FILE"
exit 1
fi fi
# =================================================== # ===================================================
# 02. Local script variables and checks # 02. Local script variables
# =================================================== # ===================================================
export STEAMCMD_USER=steam export STEAMCMD_USER=steam
export LOCAL_STOCK_GAME="$HOME/stock/DayZ" export MODLISTS="$PWD/modlists"
export LOCAL_STOCK_SERVER="$HOME/stock/DayZServer"
mkdir -p "$LOCAL_STOCK_GAME" "$LOCAL_STOCK_SERVER"
if [ "$USER" != "$STEAMCMD_USER" ] ; then export LOCAL_STOCK="$HOME/stock/DayZ"
errmsg "Current user: '$USER' does not match '$STEAMCMD_USER'" export LOCAL_STOCK_GAME="$LOCAL_STOCK/DayZ"
exit 1 export LOCAL_STOCK_SERVER="$LOCAL_STOCK/DayZServer"
fi
# =================================================== # ===================================================
# 03. Mount network drive # 03. Mount network drive
# =================================================== # ===================================================
if ! is_network_drive_mounted ; then if ! is_network_drive_mounted ; then
mount_dayz_network_drive mount_dayz_network_drive
if ! is_network_drive_mounted ; then if ! is_network_drive_mounted ; then
errmsg "Could not mount network drive" die "Could not mount network drive"
exit 1 fi
fi
fi fi
# =================================================== # ===================================================
# 04. Begin functions # 04. Checks
# ===================================================
mkdir -p "$LOCAL_STOCK_GAME" "$LOCAL_STOCK_SERVER"
if [ "$USER" != "$STEAMCMD_USER" ] ; then
die "Current user: '$USER' does not match '$STEAMCMD_USER'"
fi
if [ ! -d "$MODLISTS" ] ; then
die "Could not find modlists at: $MODLISTS"
fi
if [ ! -d "$REMOTE_MODS" ] ; then
die "Could not find remote mods at: $REMOTE_MODS"
fi
if [ ! -d "$REMOTE_MAPS" ] ; then
die "Could not find remote maps at: $REMOTE_MAPS"
fi
# ===================================================
# 05. Begin functions
# =================================================== # ===================================================
update_server() { update_server() {
msg "-------- UPDATING DAYZ SERVER -------------------" msg "-------- UPDATING DAYZ SERVER -------------------"
steamcmd -tcp \ steamcmd -tcp \
+force_install_dir "$LOCAL_STOCK_SERVER" \ +force_install_dir "$LOCAL_STOCK_SERVER" \
+@sSteamCmdForcePlatformType windows \ +@sSteamCmdForcePlatformType windows \
+@ShutdownOnFailedCommand 1 \ +@ShutdownOnFailedCommand 1 \
+login "$STEAM_USER" \ +login "$STEAM_USER" \
+app_update "$DAYZ_SERVER_ID" \ +app_update "$DAYZ_SERVER_ID" \
+quit +quit
is_network_drive_mounted && is_network_drive_mounted &&
do_sync "$LOCAL_STOCK_SERVER"/ "$REMOTE_STOCK_SERVER" do_sync "$LOCAL_STOCK_SERVER"/ "$REMOTE_STOCK_SERVER"
msg "-------- DONE UPDATING SERVER -------------------" msg "-------- DONE UPDATING SERVER -------------------"
# LOCAL_INSTALL_DIR="${HOME}/.steam/debian-installation/steamapps/common/DayZServer"
} }
update_game() { update_game() {
msg "-------- UPDATING DAYZ GAME -------------------" msg "-------- UPDATING DAYZ GAME -------------------"
steamcmd -tcp \ steamcmd -tcp \
+force_install_dir "$LOCAL_STOCK_GAME" \ +force_install_dir "$LOCAL_STOCK_GAME" \
+@sSteamCmdForcePlatformType windows \ +@sSteamCmdForcePlatformType windows \
+@ShutdownOnFailedCommand 1 \ +@ShutdownOnFailedCommand 1 \
+login "$STEAM_USER" \ +login "$STEAM_USER" \
+app_update "$DAYZ_GAME_ID" \ +app_update "$DAYZ_GAME_ID" \
+quit +quit
is_network_drive_mounted && is_network_drive_mounted &&
do_sync "$LOCAL_STOCK_GAME"/ "$REMOTE_STOCK_GAME" do_sync "$LOCAL_STOCK_GAME"/ "$REMOTE_STOCK_GAME"
msg "-------- DONE UPDATING GAME -------------------" msg "-------- DONE UPDATING 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}"
# 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"
# load the server_modlist.txt, copying the mod id's we need to update
# to the temp file, while skipping comments and blank lines
#
# format should be: "mod_id^nickname"
#
# # Dabs Framework
# # https://steamcommunity.com/sharedfiles/filedetails/?id=2545327648
# 2545327648^dabsframework
#
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
} }
main() { main() {
update_server update_server
update_game update_game
for server in $(ls "$MODLISTS" | xargs) ; do
[ -f "$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
} }
main "$@" main "$@"
##### GARBAGE BELOW
# LOCAL_MODS_DIR="$HOME/steam_data/steamapps/workshop/content/$DAYZ_GAME_ID"
# LOCAL_SERVER_INSTALL_DIR="$HOME/steam_data/steamapps/workshop/content/$DAYZ_GAME_ID"