Wenn man Real-Time-Statistiken von Half-Life-Servern haben will, so nimmt man am besten “HLStats”. Ich zitiere mal aus der Dokumentation:

HLstats besteht aus einem Perl Script (die HLstats logging Daemon) und aus einem Set von PHP Scripts (welche die gewonnenen Daten als Webseite anzeigen). HLstats bietet Statistiken für den einzelnen Spieler sowie auch für den ganzen Clan.

Meine Ausgangslage

  • “Blanker” Server (Keinerlei MySQL oder Apache2)
  • Debian 3.1 Sarge Stable
  • HLStats 1.34

Folgende Packete werden zunächst in der Konsole installiert:

1
apt-get install apache2 libapache2-mod-php4 wget libdbi-perl libdbd-mysql-perl libdbd-mysql mysql-server mysql-common ncftp lynx php4-mysql

Nachdem das alles installiert ist, muss man Perl konfigurieren:

1
perl -MCPAN -e shell

Nun werden ein Haufen Fragen gestellt, eigentlich ist aber davon nur die Frage nach den Downloadservern am Ende wirklich wichtig. Am Ende öffnet sich ein CPAN-Prompt in dem man nun noch die Module initialisieren sollte:

1
2
cpan> install Bundle::DBI
cpan> install Bundle::DBD::mysql

Perl ist nun soweit fertig.

Nun brauchen wir zunächst HLStats. Ich installiere den Perl-Server von HLStats in /home/hlstats/, weshalb ich nun dort zunächst die Files entpacke(Ich sauge immer von Switch, die URL ist natürlich gegen andere Mirrors austauschbar ;)):

1
2
3
4
5
6
wget http://switch.dl.sourceforge.net/sourceforge/hlstats/hlstats-1.34.tar.gz
cd /home/
tar xzvf hlstats-1.34.tar.gz
mv hlstats-1.34 hlstats
rm hlstats-1.34.tar.gz
cd hlstats

HLStats Serverstruktur

HLStats loggt über einen Perl-Server, der normalerweise auf Port 27500 “lauscht”, in eine normale MySQL-Datenbank, was die nebenstehende Server-Struktur ermöglicht. Viele einzelne Gameserver können so auf einen einzigen MySQL-Server(dieser wäre über eine Datenbank-Replikation auch wieder einfach zu sichern) loggen, wodurch die Statistiken dann einfach über eine Seite abrufbar sind. Das Frontend ist wiederum in PHP mit einzelnen Templates geschrieben, was eine Anpassung nicht besonders schwer macht.

Nun muss HLStats noch in die MySQL-Datenbank eingefügt werden:

1
2
3
mysql admin create hlstats
mysql hlstats < hlstats.sql
mysql hlstats < gamesupport_XXYYXX.sql

Dies kann nur im Verzeichnis des entpackten Archives ausgeführt werden.

XXYYXX muss hierbei durch das Spiel, welches man benötigt ersetzt werden, also z.b.:

1
mysql hlstats < gamesupport_css.sql

Weitere Support-Files bekommen sie hier. (Hinweis: HLstats unterstuetzt nur Spiele mit dem Half-Life Log Format.)

Nachdem die Spieldaten und die Haupt-SQL-Files in der Datenbank gelandet sind, müssen wir nun noch die User anlegen, die auf diese Datenbank zugreifen dürfen

1
shell> mysql --user=root mysql
1
GRANT ALL PRIVILEGES ON hlstats.* TO 'hlstats'@'localhost' IDENTIFIED BY 'somepassword'

Das erste HLStats ist der Databasename und das zweite HLStats ist der Benutzername der erstellt wird. (Hinweis: ‘somepassword’ sollte natürlich durch ein anderes ersetzt werden, also z.b. ‘Mju5mkfOP5QCVlgY’)

Zur Absicherung des RooT-Users müssen wir dessen Passwort ändern(wird von MySQL übrigends als eine der ersten Aktionen empfohlen). In der MySQL-Console muss daher folgendes eingegeben werden:

1
2
3
UPDATE user SET Password=PASSWORD('someotherpassword') WHERE user='root';
FLUSH PRIVILEGES;
quit;

(Hinweis: ‘someotherpassword’ sollte natürlich auch hier durch ein anderes ersetzt werden, also z.b. ‘5QCVlgYMju5mkfOP’)

Der folgende Abschnitt wurde in der Dokumentation als Kompatibilitäts-Sache angegeben, damit Perl korrekt mit dem Frontend arbeitet:

1
shell> mysql --user=root -p mysql

Nun werden sie nach dem oben vergebenen root-Passwort gefragt. Nach Eingabe dieses Passworts fügen sie die folgende Zeile ein. Hierbei muss ‘/hlstats/hlstats.php’ durch das Verzeichnis (relativ zum Webroot) ersetzt werden, in dem sich “hlstats.php” befindet. Wenn HLStats sich im ‘/stats’-Ordner befindet, muss man ‘/stats/hlstats/hlstats.php’ verwenden. Wenn sie hlstats über “http://example.com/hlstats/hlstats.php" erreichen, dann ist die folgende Angabe richtig.

1
2
INSERT INTO hlstats_Options (keyname, value) VALUES ('scripturl','/hlstats/hlstats.php');
quit

Nun ist die Datenbankseitige Installation soweit fertig. Wenden wir uns der Installation des Webfrontends zu. Ich gehe davon aus, dass auf dem Server nichts anderes ausser HLStats und die Gameserver laufen, daher ist bei mir das Webserver-Root-Verzeichnis (/var/www/) gleich dem hlstatsverzeichnis:

1
2
3
cd /home/hlstats/
mv hlstats.php /var/www/
mv hlstatsimg /var/www/

Nun gibts natürlich wie immer ein kleines Rechte-Problem, welches sind einfach lösen lässt:

1
useradd -s /bin/bash -p PASSWORD hlstats

PASSWORD muss natürlich wieder ersetzt werden! nun noch ein:

1
2
3
chown -R hlstats:users /home/hlstats/
chown -R hlstats:users /var/www/hlstats.php
chown -R hlstats:users /home/hlstatsinc/

und die Verzeichnisse gehören dem Nutzer.

Der Webserver leitet momentan beim Aufruf der IP noch direkt auf “apache2-default” weiter, was wir natürlich nicht wollen. Also müssen wir die Konfigurationsdatei ändern:

1
nano /etc/apache2/sites-enabled/000-default

Suche: RedirectMatch ^/$ /apache2-default/ Ersetze: # RedirectMatch ^/$ /apache2-default/

Damit ist nun sichergestellt, dass bei Aufruf der IP direkt die Dateien aus /var/www/ aufgerufen werden. Wenn man dies aber nun tut, dann stellt man fest, dass nur das Verzeichnis aufgelistet wird. Problem ist, dass Apache noch nicht weiss, dass er nun die hlstats.php aufrufen soll. Nun gibt es zwei Wege:

  1. Umleitung via HTML/PHP-Datei
  2. Umleitung via .htaccess

Ich habe mich für den ersten Weg entschieden und eine index.php erstellt, die folgenden Inhalt hat:

1
<? header("location: hlstats.php");exit(); ?>

Funktioniert perfekt.

Nun muss man die Datenbankverbindungen einrichten. Dazu editiert man die beiden Dateien, die damit überhaupt zu tun haben:

1
nano /home/hlstats/hlstats.conf
  • Eintragen von Datenbankdaten
  • Eventuelle weitere Änderungen anhand der Kommentare durchführen
1
nano /var/www/hlstats.php
  • Eintragen von Datenbankdaten
  • INCLUDE_PATH anpassen, in diesem Fall /home/hlstats/hlstatsinc
  • Eventuelle weitere Änderungen anhand der Kommentare durchführen

Wenn dies alles erledigt ist, dann steht dem ersten Start des Servers nix mehr im Wege:

1
2
3
4
5
screen -R hlstats
su hlstats
cd /home/hlstats/
chmod 700 -R *
while true; do nohup ./hlstats.pl; sleep 5; done &

Nun sollte der Perl-Server gestartet sein, mit “STRG+ a” & anschließendem Druck von “D” bringen sie den Screen in den Hintergrund.

Sofern sie nix an der Port-Konfiguration geändert haben, sollte nun auf Port 27500 ein HLStats-Server lauschen.

PHP hat zunächst keine Ahnung davon, dass MySQL installiert ist, was wir nun schnell ändern:

1
nano /etc/php4/apache2/php.ini

Finde: ;extension=mysql.so Ersetze: extension=mysql.so Anschließend ein /etc/init.d/apache2 restart und PHP weiss, dass MySQL installiert ist.

Erste Ansicht

Nun rufen wir mal das Webfrontend auf. Nach Eingabe der ServerIP / einer darauf zeigenden Domain sollte sich in etwa das nebenstehende Bild ergeben. (Ich habe schon ein paar Server konfiguriert und schon die Templates ein wenig geändert.) Nun klicken wir in der Mitte unten auf Admin und loggen uns das erste mal ein. Die Daten hierzu sind:

  • User: admin
  • Passwort: 123456

Sobald sie sich eingeloggt haben, gehen sie auf Admin Users und fügen sie einen neuen Admin hinzu. Löschen sie nun den User “admin” (Erst wenn sie den neuen Admin hinzugefügt haben!) und loggen sie sich mit ihrem neuen Admin ein.

Nun können sie nach belieben konfigurieren, neue Server fügt man unter Game Settings unter dem jeweiligen Spiel hinzu, was relativ intuitiv gemacht ist.

Auf den Gameservern muss man in der autoexec.cfg folgendes hinzufügen:

1
2
log on
logaddress 1.2.3.4 27500

wobei 1.2.3.4 für ihre Serveradresse steht. Anschließend den Gameserver restarten und mal drauf zocken. Wenn die Stats angezeigt werden ist alles korrekt gelaufen.