Sie sind nicht angemeldet.

Lieber Besucher, herzlich willkommen bei: sourceserver.info. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

  • »hannibal-l-« ist der Autor dieses Themas

Beiträge: 552

Beruf: Fisi

Rootserver vorhanden: Ja

  • Nachricht senden

1

Freitag, 26. Oktober 2012, 09:01

CSGO-Updater

Morgen zusammen,

auch wenn es schon durchgekaut wurde... glaube ich zumindest ;)

http://sourceserver.info/wiki/csgo_beta/steamcmd

Da ich tekbase habe, ist steamcmd schon im serververzeichniss. Sprich ich musste nur noch die logindatei anlegen. Der befehl zum starten von steamcmd/login funktioniert wunderbar. Wie kann ich das im endeffekt jetzt so machen, das ich das ganze auch direkt im startbefehl des servers auch ausführen kann?
Mich würde dann nur noch eine frage beschäftigen, wenn es funktioniert ;) startet der server nach dem update neu oder muss ich es manuell machen?


Gruß
Wer deutlich spricht, riskiert verstanden zu werden.

http://steamcommunity.com/profiles/76561197996267687

MadMakz

Super Moderator

Beiträge: 1 878

Wohnort: ~#

Rootserver vorhanden: Ja

  • Nachricht senden

DeaD_EyE

Administrator

Beiträge: 3 980

Wohnort: Hagen

Beruf: Mechatroniker (didaktische Systeme)

Rootserver vorhanden: Nein

  • Nachricht senden

3

Freitag, 26. Oktober 2012, 16:53

Bitteschön:

Spoiler Spoiler

Quellcode

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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
#!/usr/bin/python
#
# Autor: DeaD_EyE
# E-Mail: gbs.deadeye@gmail.com
# URL: http://sourceserver.info
# Version: 0.1.0
# 
# Lizenz: http://creativecommons.org/licenses/by-sa/3.0/
#-------------------------------------------------------
# Beschreibung:
#
# Es findet eine Ueberpruefung der Version des Servers 
# ueber die Web-SteamAPI statt.
# Sobald der server veraltet ist, wird er aktualisiert.
#
# Anstelle der steam.sh fuer Updates, wird steamcmd
# direkt aufgerufen
#
# Dieses Script hat den Vorteil, dass es den Server im
# Installationsverzeichnis updatet. Es ist somit fuer Teklab
# und andere WIs geeignet, die eine Singleserverinstallation nutzen.
#
# Um das Script zu integrieren wird es als steam.sh im Serververzeichnis
# gespeichert. Folgende Daten muessen dem Script uebergeben werden:
# 
# steamdir: Das Verzeichnis in dem sich die steamcmd befindet z.B. steam/linux32 (relativ zum Serververzeichnis)
# steambin: Name der steamcmd. Sofern Valve nicht alles ueber den Haufen wirft -> steamcmd
# login: Login des Steamaccounts
# password: Passwort des Steamaccounts
#
# Um die Informationen dem Script zu uebergeben, kann eine Configdatei verwendet werden
# Nicht jeder Kunde muss den Login des Hosters kennen, auch wenn auf diesem Account
# keine Spiele registriert sind

use_cfgfile = True
configfile = '/home/irgendwo/updater'

# Das Script erweitert auch Userverzeichnisse,
# Angaben wie ~ oder ~user sind moeglich

# Die Configdatei muss so aufgebaut sein (ohne Raute):
#[steamcmd]
#steamdir=steamcmd
#steambin=steamcmd
#login=DeinAccount
#password=DeinPasswort

##############################################################
# Die Variablen werden ueberschrieben, wenn use_cfgfile = True
# Wenn die Variablen direkt im Script verwendet werden sollen,
# dann muss use_cfgfile = False sein
##############################################################

steamdir = "steamcmd"
steambin = "steamcmd"
login = "DeaD_EyE"
password = "sourceserver.info"


###############################################################
#Code
###############################################################

import re, subprocess, shlex, os, urllib, json, ConfigParser, shutil
#get serverbasedirectory
installdir = os.getcwd()

#function for reading the config values from the txt file
def readcfg(cfgfile):
	config = ConfigParser.ConfigParser()
	config.readfp(open(cfgfile))
	return config.get('steamcmd', 'steamdir'), config.get('steamcmd', 'steambin'), config.get('steamcmd', 'login'), config.get('steamcmd', 'password')

#if use_cfgfile is True, all values are taken from the txt file
if use_cfgfile:
	steamdir, steambin, login, password = readcfg(os.path.expanduser(configfile))

### Create path for steamdir:
steamdir = installdir + os.path.sep + steamdir


class steaminf:
	def __init__(self, steamfile):
		self.steamfile = open(steamfile)
		self.steaminfo = self.steamfile.read()
		self.steaminfo = self.steaminfo.replace('\r','')
		self.steamfile.close()
		self.status = [ ]
	def getVersion(self):
		self.version = re.findall(r'PatchVersion=(.+)',self.steaminfo)
		return self.version[0]
	def getProductName(self):
		self.productname = re.findall(r'ProductName=(.+)',self.steaminfo)
		return self.productname[0]
	def getAppId(self):
		self.appid = re.findall(r'appID=(.+)',self.steaminfo)
		return self.appid[0]
	def checkVersion(self):
		self.requrl  = 'http://api.steampowered.com/ISteamApps/UpToDateCheck/v0001/?appid=%s&version=%s&format=json' % (self.getAppId(), self.getVersion())
		try:
			self.response = urllib.urlopen(self.requrl)
		except:
			pass
		self.response = json.load(self.response)
		self.status.append(self.response['response']['up_to_date'])
		if self.response['response'].has_key('required_version'):
			self.status.append( self.response['response']['required_version'] )
		return self.status

class steamcmd:
	def __init__(self,steamdir,steambin,login,password,installdir,appid,validate=False):
		self.steamdir = steamdir
		self.steambin = steambin
		self.login = login
		self.password = password
		self.installdir = installdir
		self.arch = 'linux32'
		if appid == 730:
			self.appid = 740
		else:
			self.appid = appid
		self.validate = validate
	def cmdargs(self):
		if self.validate:
			self.cmd = "%s%s +login %s %s +force_install_dir %s +app_update %d validate +quit" % (self.arch, os.path.sep + self.steambin, self.login, self.password, self.installdir, self.appid)
		else:
			self.cmd = "%s%s +login %s %s +force_install_dir %s +app_update %d +quit" % (self.arch, os.path.sep + self.steambin, self.login, self.password, self.installdir, self.appid)
		return shlex.split(self.cmd)
	def update(self):
		os.putenv('LD_LIBRARY_PATH', self.arch)
		os.chdir(self.steamdir)
		self.p = subprocess.Popen(self.cmdargs(), shell=False, stderr=None)
		self.p.wait()
		os.chdir(self.installdir)

server = steaminf('csgo/steam.inf')
if server.checkVersion()[0] is not True:
	print('Der Server ist nicht aktuell')
	print('Installierte Version: %s') % server.version[0]
	print('Aktuelle Version: %s') % server.status[1]
	print('Starte das Updatetool...')
	print('Aktualisiere Server: %s') % installdir
	cmd = steamcmd(steamdir, steambin, login, password, installdir, int(server.getAppId()), validate=True)
	cmd.update()
	#removing Update-Directory
	print('TMP-Update-Verzeichnis wird geloescht')
	for dir in os.listdir('.'):
		if re.match(r'[a-z0-9]{40}',dir):
			shutil.rmtree(dir)
else:
	print('Der Server ist aktuell')
	print('Installierte Version: %s') % server.version[0]


Als steam.sh im Basisverzeichnis des Servers speichern, ausführbar machen und zum Startbefehl folgendes hinzufügen:

Quellcode

1
-autoupdate -steam_dir . -steamcmd_script .

Den ganzen Mist kann man auch in ein Image packen.

Wenn ich mich richtig erinnere, ist das genau die Version, die mittlerweile ein Provider im Einsatz hat. Möglich, dass ich speziell bei ihm noch irgendwelche Anpassungen vorgenommen habe, die ich nicht mit übernommen habe. Auf jeden Fall macht das Dingen nur Updates, wenn eins erforderlich ist. Ob ihr eine Config oder doch lieber die Variablen im Script verwenden wollt, ist eure freie Entscheidung. Solange es eh nur für den privaten Gebrauch ist, sollte man die Variablen im Script nutzen, anstatt eine Configfile anzulegen.

EDIT: Änderungen am Code vorgenommen. Es ist nun auch möglich Doppelpunkte im Pfad zu verwenden, obwohl das eigentlich eine sehr schlechte Idee ist. Es wird jetzt nur noch der relative Pfad zum Basis-Verzeichnis des steamcmd angegeben (linux32 fügt das Script nun selbst hinzu). Wahrscheinlich haben sich die Entwickler damit die Option offen gehalten auch einen 64-Bit-Installer zur Verfügung zu stellen, was eigentlich völlig daneben ist, wenn die Gameserver nicht auf auch 64-Bit portiert werden.

  • »hannibal-l-« ist der Autor dieses Themas

Beiträge: 552

Beruf: Fisi

Rootserver vorhanden: Ja

  • Nachricht senden

4

Freitag, 26. Oktober 2012, 18:29

das sieht ja richtig klasse aus :D

dankeschön
Wer deutlich spricht, riskiert verstanden zu werden.

http://steamcommunity.com/profiles/76561197996267687

Ähnliche Themen