-
Notifications
You must be signed in to change notification settings - Fork 12
/
Copy pathupdate.py
97 lines (76 loc) · 3.21 KB
/
update.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
import os
import time
import shutil
import hashlib
import time
from datetime import datetime
import logging
import requests
# CONFIGURATION
UPDATE_TO_SNAPSHOT = False
BACKUP_DIR = 'world_backups'
LOG_FILENAME = 'auto_updater.log'
RAM_INITIAL = '512m'
RAM_MAX = '3g'
MANIFEST_URL = "https://launchermeta.mojang.com/mc/game/version_manifest.json"
logging.basicConfig(filename=LOG_FILENAME,level=logging.INFO)
os.chdir(os.path.dirname(os.path.abspath(__file__)))
# retrieve version manifest
response = requests.get(MANIFEST_URL)
data = response.json()
if UPDATE_TO_SNAPSHOT:
minecraft_ver = data['latest']['snapshot']
else:
minecraft_ver = data['latest']['release']
# get checksum of running server
if os.path.exists('../minecraft_server.jar'):
sha = hashlib.sha1()
f = open("../minecraft_server.jar", 'rb')
sha.update(f.read())
cur_ver = sha.hexdigest()
else:
cur_ver = ""
for version in data['versions']:
if version['id'] == minecraft_ver:
jsonlink = version['url']
jar_data = requests.get(jsonlink).json()
jar_sha = jar_data['downloads']['server']['sha1']
logging.info('Your sha1 is ' + cur_ver + '. Latest version is ' + str(minecraft_ver) + " with sha1 of " + jar_sha)
if cur_ver != jar_sha:
logging.info('Updating server...')
link = jar_data['downloads']['server']['url']
logging.info('Downloading .jar from ' + link + '...')
response = requests.get(link)
with open('minecraft_server.jar', 'wb') as jar_file:
jar_file.write(response.content)
logging.info('Downloaded.')
os.system('screen -S minecraft -X stuff \'say ATTENTION: Server will shutdown temporarily to update in 30 seconds.^M\'')
logging.info('Shutting down server in 30 seconds.')
for i in range(20, 9, -10):
time.sleep(10)
os.system('screen -S minecraft -X stuff \'say Shutdown in ' + str(i) + ' seconds^M\'')
for i in range(9, 0, -1):
time.sleep(1)
os.system('screen -S minecraft -X stuff \'say Shutdown in ' + str(i) + ' seconds^M\'')
time.sleep(1)
logging.info('Stopping server.')
os.system('screen -S minecraft -X stuff \'stop^M\'')
time.sleep(5)
logging.info('Backing up world...')
if not os.path.exists(BACKUP_DIR):
os.makedirs(BACKUP_DIR)
backupPath = os.path.join(
BACKUP_DIR,
"world" + "_backup_" + datetime.now().isoformat().replace(':', '-') + "_sha=" + cur_ver)
shutil.make_archive(backupPath, 'zip', "../world")
logging.info('Backed up world.')
logging.info('Updating server .jar')
if os.path.exists('../minecraft_server.jar'):
os.remove('../minecraft_server.jar')
os.rename('minecraft_server.jar', '../minecraft_server.jar')
logging.info('Starting server...')
os.chdir("..")
os.system('screen -S minecraft -d -m java -Xms' + RAM_INITIAL + ' -Xmx' + RAM_MAX + ' -jar minecraft_server.jar')
else:
logging.info('Server is already up to date.')
break