Linux Autostart

Wer automatisch beim Hochfahren seines Linux-Systems Programme mitstarten möchte kann dies über vielerlei Wege tun. Einer davon sind sog. Cronjobs (auch Cron-Aufträge genannt). Mit Webmin kann man solche Cronjobs recht einfach erstellen. Ich habe mal ein Beispielskript (acstartup.sh) geschrieben, welches automatisch beim Systemstart von einem Cron-Auftrag ausgeführt werden soll. Das Skript an sich bewirkt den Start eines AssaultCube-Servers:

#!/bin/sh
#
# AssaultCube Server Start-Skript
#

# Servername
NAME=’Mein Server‘

# Passwort
# PASS=nichtgesetzt

# Spieleranzahl
PLAYERS=14

# Willkommens-Nachricht
MOTD=’Hallo.‘

# Minimaler Punktestand
FRAGS=-1

# Serverzeit (für Logdatei)
TS=$(date +%Y%m%d_%H%M%S)
TSH=$(date +%H:%M:%S\ %d.%m.%y)

##
# Start des Servers
##
cd /pfadangabe/zum/assaultcubeordner/
nohup bin_unix/linux_server -n“$NAME“ -p$PASS -c$PLAYERS -o“$MOTD“ -k$FRAGS > logs/ServerLog_$TS 2>&1

Um dieses Skript nun automatisch beim Hochfahren eines Servers zu starten, bedarf es folgender Schritte:

  1. Einloggen in Webmin
  2. System -> Geplante Aufträge (Cron)
  3. Einen neuen Cron-Auftrag erstellen
    • Führe Cron-Auftrag aus als: root
    • Aktiviert? Ja
    • Befehl /pfadangabe/zum/startskript/acstartup.sh
    • Zu gewähltem Zeitpunkt ausführen ..  Wenn das System startet
    • Minuten: Alle, Stunden: Alle, Tage: Alle, Monate: Alle, Wochentage: Alle
    • Run on any date
  4. Speichern

Das war’s. Auf diese Art und Weise lassen sich auch andere Skripte starten oder man gibt direkt einen Befehl in den Cron-Auftrag ein.

Einrichten eines AssaultCube Servers

ch spiele ab und zu AssaultCube, ein nur 40 MB großer kostenloser Multiplayer-Ego-Shooter. Der pefekte Mix aus Counter-Strike und Unreal Tournament. In AssaultCube gibt es nur etwa 50 öffentliche Server, weshalb mich die Idee überkam, einen eigenen Gameserver auf meinem Virtual Server aufzusetzen.

Als absoluter Linux-Anfänger ist das natürlich nicht so einfach aber da mein neustes Hobby „Fluchen und Schimpfen“ ist, habe ich es trotzdem getan. Im Prinzip musste ich gar nicht mal viel fluchen und schimpfen (eigentlich gar nicht), denn ich hatte tatkräftige Unterstützung von Pascal und einen guten Tipp von KanslozeClown (echter Name unbekannt).

Um anderen zu helfen, die Ähnliches vorhaben, habe ich die gesamte AssaultCube Server Installation protokolliert. Meine Anleitung bezieht sich auf einen Virtual Server mit Betriebssystem openSUSE 10.3 und integriertem Plesk 8.4. Alle Angaben sind selbstverständlich ohne Gewähr.

Einrichten eines dedizierten Linux Server für AssaultCube (v1.0.2):

  1. Zuerst braucht man die aktuelle Linux Version von AssaultCube. Die enthaltenen Dateien aus dem Archiv (*.tar.bz2) werden auf dem Server in einen neuen Ordner entpackt. Beispielpfad: /usr/games/ac/
  2. Damit die Verbindung auf den Server klappt, müssen die Standardports für AssaultCube (UDP 28763 und UDP 28764) freigeschaltet werden. UDP Port 28763 ermöglicht die Verbindung mit den Clients (Spielern) und UDP Port 28764 stellt die Verbindung mit dem Masterserver (Serverbrowser) her, welcher die Liste der Spielserver aktualisiert.
  3. Die Firewall wird von Plesk verwaltet, also müssen dort die entsprechenden Einträge gemacht werden. Das geht wie folgt:
    • Bei Plesk 8.4 anmelden und auf System -> Module -> Firewall -> Firewall-Konfiguration bearbeiten -> Angepasste Regel hinzufügen
    • Name der Regel: AssaultCube Server UDP Eingang
      Richtung abgleichen: Eingang
      Aktion: Erlauben
      Ports: UDP 28763 (hinzufügen), UDP Port 28764 (hinzufügen)
      Quellen: (beliebiger Host)
    • -> Angepasste Regel hinzufügen
    • Name der Regel: AssaultCube Server UDP Ausgang
      Richtung abgleichen: Ausgang
      Aktion: Erlauben
      Ports: UDP 28763 (hinzufügen), UDP Port 28764 (hinzufügen)
      Quellen: (beliebiger Host)
    • Es erscheint die Meldung: „Warnung: Die Änderungen, die Sie an der Firewall-Konfiguration vorgenommen haben, wurden noch nicht auf den Server angewandt. Um dies zu tun, klicken Sie auf Aktivieren.“ Daraufhin wählt man die beiden neuen Firewall-Regeln (AssaultCube Server UDP Eingang & AssaultCube Server UDP Ausgang) mit einem Häkchen aus und drückt im auf das gelbe Symbol mit der Lampe (Aktivieren).
    • Aktivierungsstatus:
      Das Firewall-Modul ist bereit, Ihre Konfiguration zu aktivieren. Um die Konfiguration auf Ihr System anzuwenden, wurde ein Shell Script generiert. Wenn Sie eine Vorschau dieses Skripts wünschen, klicken Sie auf den Button Vorschau unten.
    • Informationen: Die aktuelle Konfiguration wurde erfolgreich aktiviert.
    • Um sicher zu gehen, dass die neuen Einstellungen übernommen wurden, kann man den Server über Plesk neustarten.
  4. Damit der Server später administrierbar ist, kann man ihm gleich das Serverpasswort über die Konfigurationsdatei serverpwd.cfg (zu finden unter /usr/games/ac/config/) mitteilen. Die Passwörter werden einfach unter die letzte Zeile der Datei geschrieben. Die Passwörter können zusätzlich noch mit einem Leerzeichen gefolgt von einer 0 (für ein vollwertiges Admin-Passwort) oder einer 1 (für das Verbinden bei vollem Server) versehen werden.

    Beispiel:

    // list of additional server admin passwords
    // WARNING: You can NOT use CubeScript in here!!
    // one password per line

    // vollwertiges Admin-Passwort
    abc123
    // …genau das gleiche wie oben:
    abc123 0
    // mit ‚abc‘ kann man sich selbst bei vollem Server verbinden
    abc 1

  5. Man könnte jetzt schon versuchen den Server als root-Benutzer über die SSH-Kommandozeile (mit PuTTY) zu starten. Allerdings könnte es dann passieren, dass der Server sich beim Schließen der Kommandozeile (PuTTY) ebenfalls schließt. Um das zu verhindern, muss auf dem Linux Server noch der Fenstermanager GNU Screen installiert werden. Dabei behilflich ist YaST (Yet another Setup Tool).
    • Man tippt als angemeldeter root in die Kommandozeile „yast“ ein und es erscheint ein blaues Kontrollzentrum.
    • In YaST navigiert man (mit TAB und Pfeiltasten) auf Software -> Software installieren oder löschen
    • Nach der anschließenden Initialisierung sucht man nach dem Suchbegriffscreen“ und findet hoffentlich screen – A program to allow multiple screens on a VT100/ANSI Terminal mit Version 4.0.2 (oder höher). Danach lässt man screen installieren.
  6. Nach der Installation verlässt man YaST und gibt in die Kommandozeile (Kurzform: shell) den Befehl „screen“ ein. Durch einen Hinweis auf die Lizenz weiß man, dass screen gestartet ist. Nun gibt man „irssi“ ein und es erscheint wieder eine blanke Konsole, undzwar der sog. screen.
  7. In diesem screen führt man nun den Startbefehl für den Server aus. Das geschieht mit folgenden Eingaben:
    • cd /usr/games/ac/
    • /bin_unix/linux_server -c12 -n“Servername“ -o“Willkommens-Text“ -Xconfig/serverpwd.cfg

  8. Für die Datei linux_server gibt es noch weitere Parameter. Diese sind in der AssaultCube Dokumentation unter dem Stichpunkt Server switches beschrieben.
  9. Wenn alles geklappt hat, erscheint folgende Meldung:

    masterserver reply:
    Registration successful. Due to caching it might take a few minutes to see the your server in the serverlist

    Die Meldung bestätigt, dass sich der Server mit dem Masterserver (über UDP Port 27864) verbinden konnte.

  10. Falls der Fehler -bash: bin_unix/linux_server: Keine Berechtigung aufritt, müssen erst die CHMOD-Rechte für die Datei linux_server auf 0744 gesetzt werden (geht ganz einfach mit WinSCP).
  11. Ist alles okay, dann verlässt (engl. detach) man screen mit der Tastenkombination Strg + A gefolgt von Strg + D (in der Konsole) oder dem Befehl „^a d„. Das kann übrigens auch getan werden, wenn die Rückmeldung AssaultCube fatal error: could not create server info socket kommt. Weitere Hilfen zur Benutzung von Screen befinden sich übrigens im Rockfloat Howto.
  12. Mit dem Befehl „ps -ax“ kann man jetzt überprüfen, ob der Server läuft. Es müssten u.A. folgende Einträge erscheinen:
    SCREEN
    ./linux_server […]
  13. Nun kann die Konsole beruhigt beendet werden (Befehl: exit).
  14. Im Spiel AssaultCube ist es jetzt möglich auf den Server zu gelangen. Entweder über die Serverliste oder mit dem Chatbefehl /connect IP Port oder (falls eine Domain auf dem Virtualserver eingerichtet ist) mit /connect domain.tld Port. Die Portangabe ist optional, da bei der Einrichtung die Standardports (27863 und 27864) verwendet wurden.
  15. Möchte man den Server administrieren, hilft folgender Chatbefehl: /setadmin 1 adminpasswort

Ein wichtiges Kritierium beim Hosten eines Servers ist der Trafficverbrauch. Für AssaultCube ist der Trafficverbrauch wie folgt angegeben:

For n players, the average incoming bandwidth will be n * 750 Bytes/second.
For n players, the average outgoing bandwidth will be (n – 1) * n * 750 Bytes/second.

Bei 10 Spielern hat der Server also einen durchschnittlichen Download von 7500 Bytes/Sekunde und einen Upload von ungefähr 67.500 Bytes/Sekunde. Das macht einen Traffic von insgesamt 75.000 Bytes/Sekunde. Das wiederum sind 4.500.000 Bytes/Minute, was 4.29153 MByte/Minute entspricht. Es entsteht also bei 10 gleichzeitigen Spielern ein Traffic von 257.4918 MB/Stunde.

Die Log-Infos des Servers werden in der Datei messages unter /var/logs/ gespeichert.

Weitere hilfreiche Dokumente zum Einrichten eines AssaultCube Servers sind:

http://assault.cubers.net/docs/v1.0/server.html
http://assault.cubers.net/docs/v1.0/commandline.html
http://assault.cubers.net/wiki/Server_guide
http://assault.cubers.net/wiki/Server_requirements
http://assault.cubers.net/wiki/Server_setup
http://assault.cubers.net/wiki/Server_security
http://assault.cubers.net/wiki/Server_hints_1.0.2