Monatliches Archiv:November 2014

Armed Assault 3 – eigenen Server erstellen (How to)

So – da ich ja gestern mehr erklärt habe worüber man sich alles Gedanken machen sollte, kommt heute die technische Seite.
Die Konfiguration von der ich für dieses Tutorial ausgehe:

  • Windows Server 2008 R2
  • 4 GB RAM
  • 250 GB HDD
  • 4 Kerne
  • 100 MBit Leitung

Vorraussetzungen

Programme auf dem Server:

runassvc sorgt dafür, dass die ArmA 3 Server als Dienste gestartet werden. Wir wollen den Server ja schließlich Neustart fähig halten. Ich glaube kaum, dass jemand immer angemeldet sein will. Vor allem was passiert wenn jemand dann ingame den Server mit dem Befehl „#shutdown“ herunterfährt? Hochfahren muss dann manuell erfolgen. Im Laufe dieses How Tos zeige ich euch wie ich das mit einem simplen Powershell-Skript gelöst habe. Aber wie gesagt, dafür brauchen wir Windows Dienste.

Steam auf dem Server zu installieren ist vielleicht nicht die klügste Idee, aber da wir ja eh einen Server haben wo nichts sensibles drauf liegt, kann uns das ja alles egal sein. Mal ganz ehrlich, wer will denn schon immer mehrere Gigabyte hochladen? Ich lade ehrlich gesagt lieber runter. Wenn man schon 100 MBit/s hat, dann kann mans auch krachen lassen. 🙂

Wissen:

  • Mit Steam: Wie lade ich den ArmA 3 Server herunter? (Nicht das Spiel, nur den Server)
  • Ohne Steam: Wie lade ich den ArmA 3 Server auf den Server? (z.B. via FileZilla)

Achso und bevor ich es vergesse -> man benötigt kein Steam um die Server laufen zu lassen.

So nun aber genug mit den Vorraussetzungen. Ich will euch ja nicht erschlagen 🙂

Im Folgenden nehme ich nun einfach an, dass Ihr den ArmA 3 Server auf den Server geladen habt, z.B. in „C:\ArmA 3 Server“. Wer mit Steam lädt, könnte folgenden Pfad haben: „C:\Program Files(x86)\Steam\SteamApps\common\Arma 3 Server“. Außerdem gehe ich davon aus, dass runassvc.exe unter „C:\Program Files(x86)\runassvc\“ liegt. Und ich nehme auch noch an, dass ihr nur einen Server laufen lassen wollt. (Gerne erkläre ich später noch worauf bei mehreren Servern zu achten ist.)

Armed_Assault_3_eigenen_Server_erstellen_How_to_C_ArmA_3_Server

Nun müssen wir uns über ein paar Dateien und Parameter Gedanken machen. Auch hier wieder, einlesen hilft. Folgende Links sind wahrscheinlich sehr hilfreich:

In diesen drei Links finden wir alles benötigte. Haben wir uns das angeschaut, könnten z.B. folgende Konfigurationen dabei rauskommen:

  • Basic.cfg

    language=“German“;
    adapter=-1;
    3D_Performance=46875;
    Resolution_Bpp=32;
    Windowed=0;

  • Server.cfg
    steamPort=8766;
    steamQueryport=21016;

    //password = „“;
    passwordAdmin = „passwordfortheadmin“;
    hostname=“My_server_how_it_will_be_shown_in_the_multiplayer_screen“;
    maxPlayers = 50;
    kickduplicate = 1;
    equalModRequired = 0;
    disableVoN = 1;
    vonCodecQuality = 7;
    BattlEye = 1;
    voteThreshold = 0.25;
    voteMissionPlayers = 1;
    persistent = 1;
    /*
    Message of the day. It can be several lines, separated by comma
    empty messages „“ will not be displayed at all but are only for increasing the interval
    */
    motd[]=
    {
    „Welcome to my server“,
    „“,
    „Visit our website:“,
    „http://meinedomain.com“
    };

    // Time interval (in seconds) between each message of the day
    motdInterval=10;

  • Startup parameters

    -port=2310 -config=server.cfg -cfg=basic.cfg -MOD=@mymodpack,@mysecondmodpack,@mythirdmodpack

So, die zwei Dateien legen wir in unser „ArmA 3 Server“-Verzeichnis ab (wir erinnern uns an „C:\ArmA 3 Server“). Nun müssen wir natürlich unseren Server erstmal ans Laufen kriegen. Dazu brauchen wir die Parameter und runassvc. Runassvc müsst ihr mit Administrator rechten ausführen (für gewöhnlich blobbt dann ein Fenster auf, wenn nicht ist die Benutzerkontensteuerng (engl. UAC) ausgeschaltet).

als_admin_ausfuehren_runassvc

Armed_Assault_3_eigenen_Server_erstellen_How_to_runassvc

Das Arbeitsverzeichnis auszufüllen ist unnötig, da der Server keines benötigt. Ansonsten ist hier denke ich alles selbsterklärend.
Jetzt betrachten wir unser Schmuckstück noch unter Dienste (services.msc). Voilà. Das einzige was mich persönlich jetzt noch stört ist, dass dort „Anmelden als“ und „Lokales System“ steht. In einem anderen Blogeintrag, wo ich dann den Server noch feinkonfigurieren werde, erkläre ich auch gerne warum. Für einen einfachen Server – ausreichend.

Armed_Assault_3_eigenen_Server_erstellen_How_to_local_services

So, hätten wir das auch geregelt. Aber falls sich doch ein Tippfehler oder ähnliches eingeschlichen hat, erkläre ich auch gerne wo man diesen wieder entfernen kann. Achso noch ganz wichtig – die Deinstallation dieser Dienste kann ganz normal unter „Programme und Funktionen“ (appwiz.cpl) erfolgen. Dort ist ein entsprechender Eintrag hinterlegt worden. Hier kann man den Eintrag aber nicht ändern. Nur gänzlich löschen!

Also unter „Start“ -> „Ausführen“ (Windows-Taste + r) geben wir nun „regedit“ ein. Vorsicht: Regedit ist ein machtvolles Tool, genau das machen was ich beschreibe und nichts anderes oder unter Umständen funktionieren Programme nicht mehr, bis hin das der Server gänzlich „am Arsch“ ist.
Dann schauen wir uns doch mal den Pfad an:
„HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services{08CECC71-A9B1-417d-AB3A-C57C4F854F53}1927671501“

Die Syntax hierfür ist:
„HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services[GUID]“

Auf den folgenden Bildern sieht man links den Pfad, rechts die entsprechenden Werte. Mit einem Rechtsklick auf die sich in der rechten Spalte befindlichen Einträge und Auswählen von „Ändern“ kann man die Werte logischerweise verändern. Doch bitte nur Parameters, Displayname oder Description verändern.

Armed_Assault_3_eigenen_Server_erstellen_How_to_regedit

Armed_Assault_3_eigenen_Server_erstellen_How_to_regedit_parameters

So hätten diesen Batzen auch wieder weg. Wir kommen dem Ziel immer näher! Was jetzt noch fehlt ist die Firewall. Danach sind wir startbereit und können online gehen.

Die Firewall ist auch wieder kritisch, ja ich weiß, das sage ich vermutlich viel zu oft, aber wer nicht weiß was er tut zerschießt sich alles, holt sich Viren, Trojaner, die NSA (eyerole) etc auf den Rechner. Ok aber genug davon auf in die Praxis.

Die Firewall erreicht ihr indem ihr bei „Start“ – „Firewall“ eintippt. Es erscheint ein Eintrag mit „Windows-Firewall mit erweiterter Sicherheit“. Anklicken. Wir benötigen die „Eingehenden Regeln“. Rechts einfach eine neue Regel definieren. Und einfach so machen wie ichs in den folgenden Bildern zeige. Aber vorher erinnern wir uns noch an die Start-Parameter des Server – einer davon war „port“ mit „2310“. Also müssen wir das hier auch berücksichtigen.

Armed_Assault_3_eigenen_Server_erstellen_How_to_firewall_1

Armed_Assault_3_eigenen_Server_erstellen_How_to_firewall_2

Armed_Assault_3_eigenen_Server_erstellen_How_to_firewall_3

Armed_Assault_3_eigenen_Server_erstellen_How_to_firewall_4

Armed_Assault_3_eigenen_Server_erstellen_How_to_firewall_5

So jetzt haben wir eine Regel erstellt. Die Regel lässt aber ALLES durch. Also müssen wir sie noch konfigurieren. Dazu kopieren wir die Regel. Das erfolgt leider alles über Rechtsklicks (Kopieren und Einfügen). So nun noch ein Doppelklick auf beide Regeln und umbennen bzw. ähnlich konfigurieren wie meine.

Armed_Assault_3_eigenen_Server_erstellen_How_to_firewall_6

Armed_Assault_3_eigenen_Server_erstellen_How_to_firewall_7

Armed_Assault_3_eigenen_Server_erstellen_How_to_firewall_8

Armed_Assault_3_eigenen_Server_erstellen_How_to_firewall_9

Den Teil hätten wir nun auch, mir ist grade noch eingefallen, dass ich euch noch die Aufgabenplanung erklären muss. Denn bei dem Befehl „#shutdown“ fährt der Server nur runter, aber nicht wieder hoch. Und normalerweise macht man ja einen Shutdown um den Server neustarten zu lassen, weil der RAM schon zu sehr verbraucht war, es gelaggt hat, oder oder oder.

Also die Aufgabenplanung findet ihr im Server-Manager (unten in der Taskleiste sollte ein entsprechendes Symbol sein, ansonsten einfach wieder unter „Start“ eingeben). Auf der linken Seite (in der Baumansicht (engl. Treeview) könnt ihr den Ast „Konfiguration“ sehen. Darunter gibts die „Aufgabenplanung“, darunter die „Aufgabenplanungsbibliothek“. Mit rechtsklich „Neue Aufgabe erstellen“ könnt ihr die Aufgabe erstellen, die euer Skript startet, welches eure Server restartet, falls sie mal down sein sollten.

Unbenannt

Unter „Trigger“ müsst ihr natürlich einstellen, wann das ganze Starten soll. Eigentlich ja auch voll automatisch, weswegen wir das am besten auf „Beim Systemstart“ stellen.

Unbenannt1

Danach müssen wir natürlich noch sagen, was getan werden soll zeigt folgendes Bild:

Unbenannt2

Das passende Skript gibts von mir natürlich auch noch:

function Reaction-Service {
<# .SYNOPSIS This function reactes to a service if it is not started. It will start the service. .DESCRIPTION This function reactes to a service if it is not started. It will start the service. .PARAMETER service Type here the name of the service that shall be checked and started if it is not. .EXAMPLE Reaction-Service -service "spooler" #>
[CmdletBinding()]
Param(
[string]$service
)

If ((Get-Service $service).status -eq „Stopped“){
Start-Service $service
}
}

$dada = $TRUE
While ($dada -eq $TRUE)
{
Reaction-Service -service „MeinServer“
Start-Sleep -s 30
}

Das Skript einfach als z.B. reaction.ps1 abspeichern (ps1 steht für Windows Powershell Dateien) und die Aktion definieren. Wunderbar.

So nun ist alles getan und ich kann gemütlich weiter zocken. Aber eines noch nicht vergessen. Um Spielen zu können braucht man auch Missionen. Die gehören in den „MPMissions“ Ordner. Also Frohes Zocken…

Kosten dieses Eintrages:

  • Mehrere Mahlzeiten
  • 3 Tage Arbeit
  • Jahrelange Erfahrung
  • Graue Haare
  • 3 virtuelle Server
  • Last but not least – meine Nerven
  • Euer Durchhaltevermögen

Armed Assault 3 eigenen dedicated Server erstellen

Da mich viele Leute immer wieder fragen, wie ich eigentlich unsere mehreren dedizierten (engl. „dedicated“) Server erstellt habe, gibts nun mal eine doch nicht ganz so kleine Anleitung, die sich wahrscheinlich sogar über mehrere Blogeinträge ziehen wird. Dabei werde ich wohl oder übel auch immer wieder Vorteile und Nachteile der verschiedenen Installationsmöglichkeiten aufzählen und sage vorneweg -> wer sich mit einem Windows Desktop bzw. Server Betriebssystem nicht so gut auskennt (wir müssen nämlich auch an die Firewall) der holt sich am besten einen guten Freund oder kurz und knackig eine fähige Person dazu. Die Gefahr hierbei ist einfach, macht man etwas an der Firewall falsch, kann der eigene Rechner, ja sogar der Windows Server richtig gefährdet sein. Liegt hier sogar noch eine Datenbank mit Passwörter oder gar noch sensiblere Daten drauf, so ist damit wirklich nicht zu spaßen.

Mein Tipp: eigener Server für Armed Assault 3 Server! (Hier kann natürlich auch noch der Teamspeak 3 Server und vielleicht die Clan Webseite drauf liegen, aber keine kritischen Daten wie Passwörter von Benutzern, Firmendaten, Backups deines PCs, etc.)

So – ich gehe erstmal davon aus, dass man keinen Server daheim aufstellen möchte. Dies meisten Anbindungen sind dafür zu schlecht, nicht redundant oder die Rechner leistungsstark genug. Ich gehe also davon aus, dass man sich entweder einen Rootserver oder einen vServer holt.

Worauf sollte man achten?

In erster Linie denke ich sollte man sich klar sein was alles auf dem Server laufen soll. Angebote von Nitrado und Co. sind für das was wir hier machen wollen natürlich nicht relevant. Wer sich bei solch einem Anbieter einen Gaming Server holt, möchte sich nicht großartig mit der Materie befassen, sollte sich aber bewusst sein, dass was er nicht kann/machen mag auf den Preis draufzahlt. Und dann hab ich nur einen Gaming Server – was ist mit Teamspeak 3? Das ist in der heutigen Zeit zumindest bei ArmA auf jeden Fall nicht wegzudenken. ACRE und TFAR sind momentan legendär.

Also ist die erste große Frage Was brauche ich?

  • Will ich einen oder mehrere Armed Assault 3 Server?
  • Was für eine Spielart zocken wir? (Public oder im Clan, sowie große aufwendige Missis, kleine Missionen…)
  • Wie viele Spieler habe ich?
  • Was möchte/kann ich ausgeben?

Dementsprechend kann man sich dann ausrechnen bzw. schätzen wie viel RAM, wie Kerne und Speicherplatz man braucht. Und natürlich was für eine Anbindung in Frage kommt. Wobei die meisten Rechenzentren heutzutage mit so viel Bandbreite loslegen, die wir selten verbrauchen.

Ich gehe einfach mal von 4 GB RAM, 250 GB HDD, 4 Kernen und einer 100 MBit Leitung aus. Das sind so grob die Werte die unser vServer mal hatte. Alles in allem sollte das für einen Armed Assault 3 Gaming Server reichen. (Wir haben darauf sogar etwas mehr laufen lassen, aber man braucht trotzdem IMMER Puffer!)

Tja, wo man diesen Server dann bekommt – das ist eure Sache. Zeiten ändern sich, Angebote von heute sind morgen alt. Also müsst Ihr da schon selber „googeln“. Vorschläge von Hostern werde ich hier keine machen – nur wer suchet der findet!

So für heute reicht mir das. Morgen gehts dann mit dem technischen Bimbam weiter…

Windows Powershell und 7zip als Backup

Hier gibt es mal eine von mir selbst geschriebene Funktion mit 7zip und Windows Powershell 3.0! Ich betone das 3.0. Mit vorherigen Versionen wird dieses Skript nicht funktionieren können, da sonst unten im Code folgende Parameter nicht richtig interpretiert werden.

Die folgende Funktion hat mir schon oft das Leben erleichtert. Damit kann man ganze Ordner sichern, aber auch einzelne Files und wenn gewünscht sogar mit einem Passwort versehen.

Noch kurz ein Hinweis zu den Parametern:
„program_7z_local_path_string“ erwartet den Installationspfad von 7-zip. Weiß man diesen nicht oder hat das Programm standardmäßig installiert, so wird aufgrundlage der Betriebssystemarchitektur der Pfad gewählt. Wobei ich leider kein x86 Betriebssystem zur Hand habe um das genauer zu testen.

Falls jemanden ein Fehler auffallen sollte, so bitte ich doch um einen Kommentar oder eine E-Mail an martyn@sol-diers.com

function New-7z{
<#
.SYNOPSIS
This function creates a 7z file (*.7z) with a timestamp.

.DESCRIPTION
This function creates a 7z file (*.7z) with a timestamp and with a password if you wish.

.PARAMETER file_7z_name_string
Type here the name of the file that will be created.

.PARAMETER file_7z_password_string
Type a password to protect your new 7z file.

.PARAMETER folder_local_path_input_string
Input path means all items in this folder will be zipped.

.PARAMETER folder_local_path_output_string
Output path of the new 7z file.

.PARAMETER program_7z_local_path_string
Installation path of 7z (7z.exe).

.EXAMPLE
#With password
New-7z -file_7z_name_string „MyFile“ -file_7z_password_string „12345“ -folder_local_path_input_string „C:\test“ -folder_local_path_output_string „C:\temp“

.EXAMPLE
#Without password
New-7z -file_7z_name_string „MyFile“ -folder_local_path_input_string „C:\test“ -folder_local_path_output_string „C:\temp“
#>
[CmdletBinding()]
Param(
[string]$file_7z_name_string,
[string]$local_path_input_string,
[string]$local_path_output_string,
[string]$file_7z_password_string,
[string]$program_7z_local_path_string = „“,
[SWITCH]$enableTimeStamp,
[SWITCH]$enableFilePacking
)

If ($program_7z_local_path_string -eq „“){
$osarch = (Get-WmiObject -Class Win32_OperatingSystem).OSArchitecture
If ($osarch -eq „64-bit“){
$program_7z_local_path_string = „C:\Program Files\7-Zip\7z.exe“
}
else {
$program_7z_local_path_string = „C:\Program Files (x86)\7-Zip\7z.exe“
}
}

##############################################
## Setting the name of the 7z-file
##############################################
If ($enableTimeStamp){
$file_7z_name_timestamp_string = [datetime]::Now.ToString(„yyyy-MM-dd_HHmm“)
$file_7z_final_name_string = [String]::Format(„{0}\{1}_{2}.7z“, $local_path_output_string,$file_7z_name_string,$file_7z_name_timestamp_string)
}
else {
$file_7z_final_name_string = [String]::Format(„{0}\{1}.7z“, $local_path_output_string,$file_7z_name_string)
}

##############################################
## Create the 7z-file (with and or
## without password)
##############################################
If ($enableFilePacking){
If ($file_7z_password_string -ne „“){
&$program_7z_local_path_string a -t7z $file_7z_final_name_string $local_path_input_string -mx9 -r -p““$file_7z_password_string““ -mhe | out-host
}
else {
&$program_7z_local_path_string a -t7z $file_7z_final_name_string $local_path_input_string -mx9 -r -mhe | out-host
}
}
else {
If ($file_7z_password_string -ne „“){
&$program_7z_local_path_string a -t7z $file_7z_final_name_string $local_path_input_string\* -mx9 -r -p““$file_7z_password_string““ -mhe | out-host
}
else {
&$program_7z_local_path_string a -t7z $file_7z_final_name_string $local_path_input_string\* -mx9 -r -mhe | out-host
}
}

}

(Idee) Self Installer für Spiele

Vor ein paar Tagen hat mich ein Freund darauf gebracht, dass ich eigentlich ein Tool zu diesem Thema schreiben könnte. Denn wer kennt es nicht? Ja, neues Spiel oder das alte Spiel ausgekramt, aber die Katze will noch was zu essen, der Hund muss dringend raus, die Kinder tollen umher, die Frau will na ja …

Tja, ich habe mir damals, allerdings nur für wenige Spiele, ein Programm zur Installation von Spielen selbst geschrieben. Nun hat mein Kumpel gemeint, das wäre etwas was es noch kaum gibt. Also gut, ich werde das Programm in eine Update-fähige Version zu bringen und dann zum Download veröffentlichen.

Ich bin gespannt was ihr davon halten werdet. Natürlich wird alles Open Source sein! Aber ein Name für das Projekt fehlt mir noch…