Sie sind nicht angemeldet.

DeaD_EyE

Administrator

  • »DeaD_EyE« ist der Autor dieses Themas

Beiträge: 3 980

Wohnort: Hagen

Beruf: Mechatroniker (didaktische Systeme)

Rootserver vorhanden: Nein

  • Nachricht senden

1

Sonntag, 2. September 2012, 14:59

CS:GO-Autoupdate für Teklab-User

Ich weiß nicht, ob es schon Script gibt, die eine autoupdatefunktion für Singleserverinstallationen implementieren.
Eine Einzelinstallation eines CS:GO-Server ist noch recht einfach zu verwalten.

Um -autoupdate bei CS:GO nutzen zu können, muss folgendes dem Startbefehl hinzugefügt werden:

Quellcode

1
-autoupdate -steam_dir /home/csgo/serverfiles_csgo/ -steamcmd_script /home/csgo/serverfiles_csgo/login

Der Pfad von -steam_dir zeigt auf das Installationsverzeichnis des neuen Updaters steamcmd von Valve. Dies erfordert zusätzlich die Nutzung eines Scripts für die steamcmd, welches durch -steamcmd_script festgelegt wird.
Der Inhalt der login sieht folgendermaßen aus:

Quellcode

1
2
3
4
login user pass
force_install_dir /home/csgo/servers/war1
app_update 740 validate
quit


Das funktioniert auch soweit. Provider werden sicherlich zur Zeit vor einem Problem stehen, dass sie ihre Server mithilfe eines Images updaten. Willkommen in der Steinzeit.
Mein erster Einfall war es im Script für "force_install_dir" einfach einen Punkt anzugeben. Ich hoffe, dass jedem geläufig ist, dass der Punkt ein Verweis auf das aktuelle Verzeichnis ist.
Leider sieht das Tool steamcmd das etwas anders:

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
Updating server using Steam.
----------------------------
./steam.sh: Zeile 53: ulimit: open files: Kann die Grenze nicht ändern: Die Operation ist nicht erlaubt
Installing breakpad exception handler for appid(steam)/version(1345857048)
[  0%] Checking for available updates...
[  0%] Download complete.
[----] Verifying installation...
unlinked 0 orphaned pipes
Steam Console Client (c) Valve Corporation
-- type 'quit' to exit --
Loading Steam3...OK.
Loading Steam2...OK.
login xxx xxx

Logging in user 'xxx' to Steam Public...Success.
force_install_dir .
Please set the game install path to something other than the Steam install folder
app_update 740 validate
 Initial App state (0x2) update required
 App state (0x10102) reconfiguring, progress: -nan (0 / 0)
Error! App '740' state is 0x1 after update job.
quit
unlinked 0 orphaned pipes
CAsyncIOManager: 0 threads terminating.  0 reads, 0 writes, 0 deferrals.
CAsyncIOManager: 632 single object sleeps, 23 multi object sleeps
CAsyncIOManager: 0 single object alertable sleeps, 1 multi object alertable sleeps
----------------------------

Es sind gleich mehrere negative Sachen, die mir hier auffallen. Unter anderem wird der Login mit Passwort angezeigt. Wenn die steamcmd ausgeführt wird, wird das Verzeichnis zur steamcmd-Installation gewechselt. Aus diesem Grund kommt es zu dieser Fehlermeldung: "Please set the game install path to something other than the Steam install folder"

Ziemlich blöd, wenn 100 CS:GO Server nicht mehr aktuell sind und kein Admin um diese Uhrzeit erreichbar ist. Dann heißt es warten. Auch das erstellen individueller Scripts für jeden Kunden stelle ich mir ineffizient vor.

Bis Valve ein Update herausbringt, muss man wohl eine andere Lösung finden. Der einfachste Weg ist es eine steam.sh im Serververzeichnis zu erstellen, welche dann über das Image mit ausgeliefert wird.
Hier mal ein Beispiel, wie die Datei aussehen könnte:

Quellcode

1
2
3
4
5
6
7
steamsh=/home/csgo/serverfiles_csgo/steam.sh
loginfile=/home/csgo/serverfiles_csgo/login

#code
login="`cat $loginfile`"
installdir=`pwd`
STEAMEXE=steamcmd $steamsh +$login +force_install_dir $installdir +app_update 740 +quit

Es werden lediglich zwei Variablen im oberen Teil des Scriptes gesetzt. Die Variable 'steamsh' zeigt auf eine globale Installation von steamcmd, die jeder User auf dem Host nutzen kann (Zugriffsberechtigungen beachten). Zusätzlich wird der Login vor dem Kunden durch die Variable 'loginfile' versteckt nur als Pfad zu einer Datei angezeigt. Die Datei beinhaltet nur die Loginzeile für steamcmd:

Quellcode

1
login user passwd

Da die erstellte steam.sh durch die srcds_run ausgeführt wird, kann man diesen Umstand nutzen und durch den Befehl 'pwd' das aktuelle Verzeichnis des gestarteten Servers ermitteln und für 'force_install_dir' übernehmen, welches dann an die steamcmd übergeben wird.

Damit Die Autoupdate-Funktion funktioniert muss noch folgendes zum Startbefehl hinzugefügt werden:

Quellcode

1
-autoupdate -steam_dir . -steamcmd_script .


Am Ende sieht der Serverstart dann so aus:

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
./srcds_run: 397: pushd: not found
./srcds_run: 397: popd: not found
WARNING: No map specified! Defaulting to de_dust
Server will auto-restart if there is a crash.
Updating server using Steam.
----------------------------
/home/csgo/serverfiles_csgo/steam.sh: Zeile 53: ulimit: open files: Kann die Grenze nicht ändern: Die Operation ist nicht erlaubt
Installing breakpad exception handler for appid(steam)/version(1345857048)
[  0%] Checking for available updates...
[  0%] Download complete.
[----] Verifying installation...
unlinked 0 orphaned pipes
Steam Console Client (c) Valve Corporation
-- type 'quit' to exit --
Loading Steam3...OK.
Loading Steam2...OK.

Logging in user 'xxx' to Steam Public...Success.
Success! App '740' already up to date.
unlinked 0 orphaned pipes
CAsyncIOManager: 0 threads terminating.  0 reads, 0 writes, 0 deferrals.
CAsyncIOManager: 344 single object sleeps, 19 multi object sleeps
CAsyncIOManager: 0 single object alertable sleeps, 1 multi object alertable sleeps
----------------------------
LD_LIBRARY_PATH=/home/csgo/servers/war1/bin:/home/csgo/servers/war1:/home/csgo/servers/war1/bin:
#ConVarRef developer doesn't point to an existing ConVar
#Using breakpad minidump system
Using breakpad crash handler
#PERF WARNING: Failed to open model substitution file, cannot swap models out based on gpu_level!
#
#Console initialized.
#Hashing all VPK files for pure server operation.


Für faule Menschen hier noch eine Kurzanleitung:
  1. Auf dem Host in irgendeinem Pfad das Tool steamcmd entpacken und einmal starten.
  2. Berechtigungen setzen. chmod 777 für alle Dateien und Verzeichnisse von steamcmd setzen. Das Tool setzt sich eh über alle Regeln hinweg. Soweit ich weiß, werden die Schreibberechtigungen für den Cache benötigt. Bin mir da aber nicht ganz sicher.
  3. Die Datei für den Login erstellen. Kann sich im Verzeichnis befinden wo auch die steam.sh vom Tool steamcmd ist:

    Quellcode

    1
    
    login user passwd
    Bitte auch dort Lesbar für alle machen (chmod 644).
  4. Die Datei steam.sh im Serververzeichnis erstellen:

    Quellcode

    1
    2
    3
    4
    5
    6
    7
    
    steamsh=/home/csgo/serverfiles_csgo/steam.sh
    loginfile=/home/csgo/serverfiles_csgo/login
    
    #code
    login="`cat $loginfile`"
    installdir=`pwd`
    STEAMEXE=steamcmd $steamsh +$login +force_install_dir $installdir +app_update 740 +quit

  5. Pfadangaben der Variablen 'steamsh' und 'loginfile' anpassen.
  6. Berechtigungen der steam.sh setzen: chmod 755
  7. Das zum Startbefehl hinzufügen: -autoupdate -steam_dir . -steamcmd_script .
  8. Server neustarten und gucken ob es funktioniert.
  9. Die anderen Server abwechselnd neustarten und weiter die Ausgabe der Konsole beobachten



Anmerkung:
Unter anderem werden hier einigen Leuten die großzügigen Berechtigungen aufgefallen sein. Das ganze lässt sich auch über Gruppen regeln. Wie immer sollten alle ausführbare Dateien vor Veränderung durch den Kunden geschützt sein. Die schließt die Installation des Tools steamcmd mit ein. Bei Protected-Mode-Servern ist penibel darauf zu achten, dass die steam.sh nicht verändert werden kann. Dies würde man z.B. dadurch erreichen, wenn man den Besitzer der Datei ändert und nur die Rechte 555 bzw 550 vergibt.

EDIT:
Ich entwickle zur Zeit noch ein anderes Tool, das vorher checkt ob der Server aktuell ist und nur Updates durchführt, wenn es erforderlich ist. Ich weiß noch nicht ob ich es veröffentlichen werde. Eigentlich sollte das ein Teil für ein Tool werden, dass sich per Kommandozeile steuern lässt und zugleich das hldsupdatetool und steamcmd bedienen kann.

me-Shoe

Anfänger

Beiträge: 14

Rootserver vorhanden: Nein

  • Nachricht senden

2

Sonntag, 13. Dezember 2015, 14:18

Moinsen Zusammen!

Ich bin ungern ein Totengräber, aber zu diesem Beitrag würde ich wohl nochmal Hilfe benötigen. Ich würde behaupten ich habe mich 1:1 an die Anleitung gehalten (jedenfalls so wie ich es verstanden habe) und dennoch findet er bei mir die steam.sh nicht laut Konsole, so dass es eben auch kein automatisches Update gibt. :/

Wäre jemand bereit mir da nochmal Hilfestellung zu geben? Danke schonmal!

Grüße,
me-Shoe

Blacksilver

Fortgeschrittener

Beiträge: 298

Wohnort: 127.0.0.1

Beruf: FISI

Rootserver vorhanden: Nein

  • Nachricht senden

3

Sonntag, 13. Dezember 2015, 22:24

Die Funktion -autoupdate gibt es soweit ich weiß jedenfalls bei csgo nicht/nicht mehr.

Im offiziellen Tekbase Support Forum gibt es dafür aber einige Lösungsvorschläge, die aktueller sind.
Ich hatte immer nur update bei Knopfdruck. Heute arbeite ich ohne Webinterface einfach mit restart und Überprüfung ob die Datein aktuell sind aber eine bash Datei.
Come to the dark side,
we have cookies ;)

Ähnliche Themen