source: scripts/usr/local/lib/7dtd/commands/updateengine.sh@ 489

Last change on this file since 489 was 481, checked in by alloc, 13 months ago

Scripts

File size: 7.0 KB
Line 
1#!/bin/bash
2
3# Copyright 2016 Christian 'Alloc' Illy
4#
5# Licensed under the Apache License, Version 2.0 (the "License");
6# you may not use this file except in compliance with the License.
7# You may obtain a copy of the License at
8#
9# http://www.apache.org/licenses/LICENSE-2.0
10#
11# Unless required by applicable law or agreed to in writing, software
12# distributed under the License is distributed on an "AS IS" BASIS,
13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14# See the License for the specific language governing permissions and
15# limitations under the License.
16
17
18# Downloads SteamCMD, downloads/updates the 7dtd engine
19
20sdtdCommandUpdateengine() {
21 local FORCED=no
22 local CHECKONLY=no
23 local SHOWINTERNAL=no
24
25 local BRANCHNAME="$(getLocalBranch)"
26 local BRANCHPASSWORD=""
27
28 while test $# -gt 0; do
29 case "$1" in
30 --check)
31 CHECKONLY=yes
32 ;;
33 --showinternal)
34 SHOWINTERNAL=yes
35 ;;
36 --experimental)
37 BRANCHNAME="latest_experimental"
38 ;;
39 --stable)
40 BRANCHNAME="public"
41 ;;
42 --branch)
43 if [ -z "$2" ]; then
44 echo "Argument --branch not followed by a branch name. Aborting."
45 return
46 fi
47 BRANCHNAME=$2
48 shift
49 ;;
50 --password)
51 if [ -z "$2" ]; then
52 echo "Argument --password not followed by a branch password value. Aborting."
53 return
54 fi
55 BRANCHPASSWORD=$2
56 shift
57 ;;
58 --force)
59 FORCED=yes
60 ;;
61 esac
62 shift
63 done
64
65 if [ ! -e $SDTD_BASE/steamcmd ]; then
66 mkdir $SDTD_BASE/steamcmd
67 cd /tmp
68 wget http://media.steampowered.com/installer/steamcmd_linux.tar.gz
69 tar -xvzf steamcmd_linux.tar.gz -C $SDTD_BASE/steamcmd
70 cd $SDTD_BASE/steamcmd
71 ./steamcmd.sh +quit
72 fi
73
74 updateRemoteEngineInfo
75
76 if [ "$CHECKONLY" = "yes" ]; then
77 local LOCAL=$(getLocalEngineVersion)
78 local REMOTE=$(getRemoteBuildId $(getLocalBranch))
79 local REMOTETIME=$(getRemoteBuildUpdateTime $(getLocalBranch))
80
81 echo "Installed:"
82 echo " Build ID: $(getLocalEngineVersion)"
83 echo " Installed on: $(getLocalEngineUpdateTime)"
84 echo " From branch: $(getLocalBranch)"
85 echo
86
87 echo "Available branches:"
88 printf "%-*s | %-*s | %-*s\n" 22 "Branch" 8 "Build ID" 19 "Build set on"
89 printf -v line "%*s-+-%*s-+-%*s\n" 22 " " 8 " " 19 " "
90 echo ${line// /-}
91 for I in $(getBranchNames); do
92 if [[ $I != test* ]] || [ "$SHOWINTERNAL" = "yes" ]; then
93 local BUILD=$(getRemoteBuildId $I)
94 local CREATED=$(getRemoteBuildUpdateTime $I)
95 printf "%-*s | %*s | %2s\n" 22 "$I" 8 "$BUILD" "$CREATED"
96 fi
97 done | sort -k 3 -n -r
98
99 echo
100
101 if [ "$REMOTE" = "?" ]; then
102 echo "Could not fetch remote build information"
103 return
104 fi
105
106 if [ $REMOTE -gt $LOCAL ]; then
107 echo "Newer engine version available on the currently installed branch (build id $REMOTE from $REMOTETIME)."
108 else
109 local MAXREMOTE=0
110 local MAXREMOTEBRANCH=0
111 local MAXREMOTETIME=0
112 for I in $(getBranchNames); do
113 if [[ $I != test* ]] || [ "$SHOWINTERNAL" = "yes" ]; then
114 local BUILD=$(getRemoteBuildId $I)
115 local CREATED=$(getRemoteBuildUpdateTime $I)
116 if [ $BUILD -gt $MAXREMOTE ]; then
117 MAXREMOTE=$BUILD
118 MAXREMOTETIME=$CREATED
119 MAXREMOTEBRANCH=$I
120 fi
121 fi
122 done
123 if [ $MAXREMOTE -gt $LOCAL ]; then
124 echo "Newer engine version available on the branch \"$MAXREMOTEBRANCH\" (build id $MAXREMOTE from $MAXREMOTETIME)."
125 else
126 echo "Engine on the latest build."
127 fi
128 fi
129 return
130 fi
131
132 for I in $(getInstanceList); do
133 if [ $(isRunning $I) -eq 1 ]; then
134 echo "At least one instance is still running (\"$I\")."
135 echo "Before updating the engine please stop all instances!"
136 return
137 fi
138 done
139
140 local LOCAL=$(getLocalEngineVersion)
141 local REMOTE=$(getRemoteBuildId $BRANCHNAME)
142
143 if [ "$REMOTE" = "?" ]; then
144 echo "Could not fetch remote build information, assuming update to be available"
145 REMOTE=30123456
146 fi
147
148 if [ "$FORCED" = "yes" -o $REMOTE -gt $LOCAL ]; then
149 echo "A newer version of the engine is available."
150 echo "Local build id: $LOCAL (installed on $(getLocalEngineUpdateTime))"
151 echo "Available build id: $REMOTE (from $(getRemoteBuildUpdateTime $BRANCHNAME))"
152 echo
153
154 while : ; do
155 local CONTINUE
156 read -p "Continue? (yn) " CONTINUE
157 case $CONTINUE in
158 y)
159 echo "Updating..."
160 break
161 ;;
162 n)
163 echo "Canceled"
164 return
165 ;;
166 *)
167 echo "Wrong input"
168 esac
169 done
170
171 cd $SDTD_BASE/steamcmd
172 local PASSWORDARG=
173 if [ -n "$BRANCHPASSWORD" ]; then
174 PASSWORDARG=-betapassword $BRANCHPASSWORD
175 fi
176 #echo ./steamcmd.sh +force_install_dir $SDTD_BASE/engine +login anonymous +app_update 294420 -validate -beta $BRANCHNAME $PASSWORDARG +quit
177 ./steamcmd.sh +force_install_dir $SDTD_BASE/engine +login anonymous +app_update 294420 -validate -beta $BRANCHNAME $PASSWORDARG +quit
178
179 if [ -d /usr/local/lib/7dtd/server-fixes ]; then
180 cp /usr/local/lib/7dtd/server-fixes/* $SDTD_BASE/engine/ -R
181 fi
182
183 chown $SDTD_USER:$SDTD_GROUP -R $SDTD_BASE/engine
184 else
185 echo "Engine is already at the newest build on the selected branch \"$BRANCHNAME\" (local: $LOCAL, remote: $REMOTE)."
186 echo "Run with the --force parameter to update/validate the engine files anyway."
187 echo "Run with --experimental, --stable or --branch to switch to a different branch."
188 fi
189}
190
191sdtdCommandUpdateengineHelp() {
192 echo "Usage: $(basename $0) updateengine [--check [--showinternal]] [--experimental | --stable] [--branch BRANCHNAME [--password BRANCHPASSWORD]] [--force]"
193 echo
194 echo "Check for a newer version of engine (aka game) files of 7dtd. If there is a newer"
195 echo "version they will be updated by this command."
196 echo
197 echo "If neither --stable, nor --experimental nor --branch is specified the server will"
198 echo "updated to the latest build on the currently installed Steam branch of the game."
199 echo
200 echo "If --stable is specified the server will be switched to the"
201 echo "default public stable Steam branch of the game."
202 echo
203 echo "If --experimental is specified the server will be switched to the"
204 echo "latest_experimental Steam branch of the game."
205 echo
206 echo "If --branch SOMEBRANCH is specified the server will be switched to the"
207 echo "given Steam branch of the game. Additionally if password is required to acess"
208 echo "the branch this can be specified with the --password argument."
209 echo "NOTE that --password is also required if you previously switched to a branch that"
210 echo "requires a password and want to update to the latest build on that branch now."
211 echo
212 echo "If --force is specified you are asked if you want to redownload the engine"
213 echo "even if there is no new version detected."
214 echo
215 echo "If --check is specified it will only output the current local and remote build ids"
216 echo "and if an update is available."
217 echo "TFP internal branches are only shown if --showinternal is also given."
218}
219
220sdtdCommandUpdateengineDescription() {
221 echo "Update the 7dtd engine files"
222}
223
224sdtdCommandUpdateengineExpects() {
225 if [ "$2" = "--password" ]; then
226 echo ""
227 elif [ "$2" = "--branch" ]; then
228 updateRemoteEngineInfo
229 getBranchNames
230 else
231 echo "--check --showinternal --experimental --branch --password --stable --force"
232 fi
233}
Note: See TracBrowser for help on using the repository browser.