HLStats auf einem „blanken“ Server installieren

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

Werbung


Folgende Packete werden zunächst in der Konsole installiert:

shell> 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:

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:

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 ;)):

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:

shell> mysql admin create hlstats
shell> mysql hlstats < hlstats.sql
shell> 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.:
shell> 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
shell> mysql --user=root mysql

mysql> 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:

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:
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.

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:

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:
useradd -s /bin/bash -p PASSWORD hlstats
PASSWORD muss natürlich wieder ersetzt werden!
nun noch ein:
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:
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:

< ? 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:
shell> nano /home/hlstats/hlstats.conf

  • Eintragen von Datenbankdaten
  • Eventuelle weitere Änderungen anhand der Kommentare durchführen

shell> 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:

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:

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 AnsichtNun 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:

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.

Bei Fragen, einfach mal hier kommentieren.

Veröffentlicht von

Uli

IT-Nerd und Admin

16 Gedanken zu „HLStats auf einem „blanken“ Server installieren“

  1. Hi Uli, ich würde gerne folgende zwei Fragen beantwortet haben wenn du kannst.

    1. muß sich HLSatsX auf dem Server befinden wo auch der Gameserver installiert ist oder geht es auch, dass ich es auf einem reinen Webserver installiere ?
    Vorhanden ist z.B. bereits installiertes MySql und auch CGI/Perl und PHP

    2.Wenn es nicht sein muß, hast du auch ein Tutorial für diesen Zweck ?

    Wär klasse wenn du mir meine Fragen beantworten könntest.

    Gruß Christian

  2. Hallo Christian,
    ich denke ich kann deine Fragen beantworten:
    HLStats kann auf einem komplett anderen Server laufen als die Gameserver selbst, nur die LOG-Adrsse der einzelnen Gameserver muss dann eben auf den HLStats-Server eingestellt sein. Dahr kannst du es auch auf einem reinen Webserver installieren, denn hier besteht ja auch die Möglichtkeit, dass ein Gameserver auf einem bestimmten Port Kontakt mit einem HLStats-Server auf dem Webserver aufnimmt.

    Das Tutorial bleibt somit vollkommen das gleiche, nur dass die Server eben nicht auf sich selbt loggen, sondern auf eine andere IP

    Solltest du noch Fragen haben, kannst du dich gerne wieder melden 🙂
    Gruss
    Uli

  3. Can’t exec „mysql_config“: Datei oder Verzeichnis nicht gefunden at Makefile.PL line 76.

    Cannot find the file ‚mysql_config‘! Your execution PATH doesn’t seem
    to contain the path to mysql_config. Resorting to guessed values!
    Can’t exec „mysql_config“: Datei oder Verzeichnis nicht gefunden at Makefile.PL line 450.
    Can’t exec „mysql_config“: Datei oder Verzeichnis nicht gefunden at Makefile.PL line 450.
    Can’t exec „mysql_config“: Datei oder Verzeichnis nicht gefunden at Makefile.PL line 450.
    Can’t exec „mysql_config“: Datei oder Verzeichnis nicht gefunden at Makefile.PL line 450.
    Can’t exec „mysql_config“: Datei oder Verzeichnis nicht gefunden at Makefile.PL line 450.
    Can’t exec „mysql_config“: Datei oder Verzeichnis nicht gefunden at Makefile.PL line 450.
    Failed to determine directory of mysql.h. Use

    perl Makefile.PL –cflags=-I

    to set this directory. For details see the INSTALL.html file,
    section „C Compiler flags“ or type

    perl Makefile.PL –help
    Running make test
    Make had some problems, maybe interrupted? Won’t test
    Running make install
    Make had some problems, maybe interrupted? Won’t install
    Bundle summary: The following items in bundle Bundle::DBD::mysql had
    installation problems:
    DBD::mysql

    sagt dir das was? es ist ein „nacktes“ debain system und ich habe es nach deiner anleitung getan.

    gruss andreas

  4. hmmmm ich schätze du sollstest mal diese Zeilen hier begutachten:

    Failed to determine directory of mysql.h. Use

    perl Makefile.PL –cflags=-I

    to set this directory. For details see the INSTALL.html file,
    section “C Compiler flags” or type

    Ansonsten weiss ich da auch net wirklich weiter….

  5. bis zu dieser stelle ging alles ohne fehler: PLAIN TEXT
    CODE:

    1. shell> mysql admin create hlstats
    2. shell> mysql hlstats mysql hlstats
    3. shell> mysql hlstats

    habe folgendes problen nach “mysql hlstats

    s3:/home/hlstats# mysql hlstats

    ERROR 2002: Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’ (2)

    kannst du helfen?

  6. Verzweifel langsam an diesen Stats.
    Habe die Stats (Vers. 1.34)auf unserem Webserver laufen. Installation und so weiter ohne Probleme. HAbe aber das Problem das mir der Server immer als nicht erreichbar angezeigt wird, was nicht stimmt, und wenn ich die hlstats.pl in der shell aufrufe öffnet er mir nicht den listening port. Das witzige ist, gebe ich den Pfad zur hlstatsconf falsch an meckert er zwar das er die nicht laden kann aber öffnet den listening port, kann aber dann aufgrund fehlender Datenbank einträge keine Verbindung herstellen, logisch.
    Hab mir schon in der hlstatsconf nen Wolf gesucht, ob dort ein Syntax Fehler drin ist, hab aber nichts gefunden. Ist auch eigentlich die orginale.
    Kann mir da jemand helfen?

  7. Hallo

    Mal ne frage, ist es möglich auf einem Root mehrere HLstats laufen zu lassen ? Also z.b möchte ich auf einem Root für diverse andere CS 1.6 Server HLstats laufen lassen, so das jeder Server über seine eigene Hlstats verfügt, uns wenn ja wie macht man das dann ?

  8. @Holger: Port unter 1024? Der Port kann dann aufgrund eingeschränkter Rechte nicht geöffnet werden
    @Capke: Ja es ist möglich, einfach auf den gleichen HLStats-Server loggen lassen, dieser sollte dann nach der Datenquelle unterscheiden können. Muss man meines Erachtens nichts ungewöhnliches einstellen.

  9. hi,
    also ich krieg das einfach nicht hin…

    das installieren der einzelnen sachen geht aber ich kann die hlstats page nicht öffnen weil er das verzeichnis nicht findet udn ich hab auch ka wie man server hinzufügt^^…

    Vll kann mir ja jmd sql udn so auf unserem vserver installieren 🙂 wäre sehr dankbar dafür weil ich da nicht mehr weiterkomm……

    Danke schonmal
    MfG
    Xs!chT

  10. Hi nice Tut

    einfrage hab ich mal,wir haben einen root darauf laufen zwei Server, wie kann ich das einstellen das die Stats für jeden Server einzeln laufen weil momentan die stats von beiden Servern zusammen gerechnet werden.

    MFG Ron

Schreibe einen Kommentar zu APROPHIS Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.