seeseekey.net - Invictus Deus Ex Machina

Vor ein paar Tagen wurde Raspbian, die Debian-Distribution für den Raspberry Pi, auf das neue Release mit dem Namen Stretch aktualisiert. Debian benennt seine Releases nach Figuren aus dem Toy Story Universum. Nach dem Cowgirl Jessi, folgt nun der Octopus Stretch, Um bestehende Installationen, welche noch mit der älteren Version laufen, zu aktualisieren, sollte man sich per SSH mit dem entsprechenden Raspberry Pi verbinden. Dort gibt man dann folgendes ein:

apt-get update
apt-get dist-upgrade

Damit wird die bestehende Version (Jessi) auf die aktuelle Version aktualisiert. Im nächsten Schritt müssen die Paketquellen angepasst werden. Dazu muss die sources.list-Datei in einem Editor geöffnet werden:

nano /etc/apt/sources.list

Die Datei sieht dabei im Normalfall wie folgt aus:

deb http://mirrordirector.raspbian.org/raspbian/ jessi main contrib non-free rpi
# Uncomment line below then 'apt-get update' to enable 'apt-get source'
#deb-src http://archive.raspbian.org/raspbian/ jessie main contrib non-free rpi

Die Zeichenkette jessi muss nun durch stretch ausgetauscht werden. Das gleiche gilt für Dateien die im Ordner /etc/apt/sources.list.d/ liegen. Anschließend müssen die Pakete auf die neue Version (Stretch) aktualisiert werden:

apt-get update
apt-get dist-upgrade

Je nach Anzahl der installierten Pakete, kann dieser Vorgang durchaus einige Stunden in Anspruch nehmen. Unter Umständen wird gefragt, ob bestimmte Konfigurationsdateien überschrieben oder behalten werden sollen. Hier sollte man je nach Fall abwägen. Bei Konfigurationen, die manuell angepasst worden sind, kann ein Überschreiben derselben zu Problemen führen, da die Dienste dann eventuell nicht mehr so laufen wie ursprünglich gewünscht. Wenn der Vorgang abgeschlossen ist, sollten noch einige Aufräumarbeiten angestartet werden:

apt-get autoremove
apt-get autoclean

Anschließend kann der Raspberry Pi mittels des Befehls reboot neugestartet werden.

Gogs ist ein Git-Service welcher eine ähnliche Funktionalität wie der bekannte Dienst GitHub zur Verfügung stellt. Standardmäßig läuft der Dienst auf dem Port 3000. Möchte man ihn über die normalen Ports für HTTP (80) bzw. HTTPS (443) erreichbar machen, kann man hierfür einen Reverse Proxy nutzen. Dafür eignen würde sich zum Beispiel Nginx, der im ersten Schritt auf dem Server installiert werden muss:

apt-get install nginx

Anschließend wird die Konfiguration angelegt:

nano /etc/nginx/sites-available/example

In diesem Fall befasst sich die Konfiguration mit der verschlüsselten Kommunikation per HTTPS und der Weiterleitung von unverschlüsselten Verbindung in Richtung der verschlüsselten Verbindung.

server {
        listen 80;
        listen [::]:80;

        server_name example.com;

        return 301 https://$host$request_uri$is_args$args;
}

server {
    listen 443;
    listen [::]:443 default_server;

    ssl on;
    ssl_certificate        /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key    /etc/letsencrypt/live/example.com/privkey.pem;

    server_name example.com;

    client_max_body_size 500m;

    location / {
        proxy_pass https://localhost:3000;
    }
}

Nachdem die Konfiguration für Nginx hinterlegt ist, wird die Standardkonfiguration entfernt und ein symbolischer Link für die neue Konfiguration erstellt. Anschließend wird Nginx neugestartet, damit die geänderte Konfiguration wirksam wird:

rm /etc/nginx/sites-enabled/default
ln -s /etc/nginx/sites-available/example /etc/nginx/sites-enabled/example
service nginx restart

Nach der Anpassung der Nginx-Konfiguration, muss die app.ini (sie befindet sich im gogs/custom/conf/ Ordner) von Gogs angepasst werden und dort die neue ROOT_URL ohne zusätzlichen Port angegeben werden. Anschließend kann auf Wunsch, per Firewall, der Port 3000 für Zugriffe von außen gesperrt werden.

Einführung in die uncomplicated firewall

Wenn man einen eigenen Server betreibt und die mail()-Funktion von PHP benutzen möchte, so benötigt man auf dem Server einen Mail Transfer Agent kurz MTA. Über diesen MTA versucht die mail()-Funktion ihre Mails zu versenden. Ist kein MTA auf dem System installiert, schlägt der Versand von Mails fehlt. Nun ist es bei vielen Servern nicht gewünscht, einen vollwertigen MTA zu installieren. Abhilfe schafft hier der Nullmailer welcher mittels:

apt get install nullmailer

installiert werden kann. Nullmailer leitet die Mails, an einen Mailserver der Wahl weiter. Dazu muss er konfiguriert werden:

nano /etc/nullmailer/remotes

In dieser Datei wird der Mailserver mit seiner Konfiguration eingestellt:

mail.example.com smtp --port=587 --starttls --user=nutzername --pass=geheim

Nutzt man einen Mailserver mit einem selbstsignierten Zertifikat benötigt eine weitere Option:

mail.example.com smtp --port=587 --starttls --user=nutzername --pass=geheim --insecure

Anschließend sollte der Mailversand ohne Probleme funktionieren. Schlägt er trotzdem fehl, findet man genauere Informationen im Syslog unter /var/log/syslog.

In den letzten Tagen gab es zwei Artikel zum Thema Counter-Strike 1.6 Server:

In diesem Artikel, der die Fortsetzung der obigen Artikel darstellt, soll es um die Installation von Bots auf dem Counter-Strike 1.6 Server gehen. Damit kann auch gespielt werden wenn auf Server mal nicht so viel los ist. Zur Installation des POD-bot wird wieder das Metamod benötigt, welches im letzten Artikel im Zusammenhang mit dem AMX Mod installiert wurde. Zur Installation laden wir den POD-bot herunter und verschieben ihn in den addons-Ordner:

wget https://seeseekey.net/wp-content/uploads/2017/04/podbot.zip
unzip podbot.zip
rm podbot.zip
mv podbot /home/counterstrike/game/cstrike/addons/podbot

Anschließend muss der POD-bot Mod aktiviert werden. Dazu editieren wir die Datei /home/counterstrike/game/cstrike/addons/metamod/plugins.ini und fügen dort folgendes hinzu:

; POD-bot
win32 addons/podbot/podbot_mm.dll
linux addons/podbot/podbot_mm_i386.so

Damit ist die Grundinstallation des POD-bot abgeschlossen. In der Datei /home/counterstrike/game/cstrike/addons/podbot/podbot.cfg kann der POD-bot nun im Einzelnen konfiguriert werden. Besonders interessant sind dabei folgende Optionen:

# passwordkey - need set as setinfo to get access to the main podbot menu.
# usage (in the below example You may need to write Your-own passwordkey
# string instead default _pbadminpw - if You changed it):
# setinfo _pbadminpw "your_password"
pb_passwordkey "_pbadminpw"

# Set the password to have access to the podbot menu on DS by 'pb menu'
# console command typed in client's admin PC or called from the binded key.
# Example of bind on Your client PC:
# bind "=" "pb menu"
pb_password "your_password"

# Switches to on/off Botchatting. <0|1>. Default is 1.
pb_chat 1

# Set the below value to 1 to enable auto kill bots if all human players
# are dead already. <0|1>. Default is 0.
pb_autokill 0

# Set the below value to delay (in seconds) autokill bots if
# autokill function is enabled (above). Default is 45.
pb_autokilldelay 45

# These lines below are adding automatically the bots to the server when
# the new game is created on the listenserver or the dedicated server
# is starting.
# As many such lines like "pb add" is here as many bots will be added
# to the server (unless You will not exceed pb_maxbots setting).
pb add 100
pb add 100

Mit dem Kommando:

setinfo _pbadminpw "your_password"

weist man sich gegenüber dem POD-bot aus und erhält administrative Rechte und kann anschließend das Kommando:

pb menu

in der Counter-Strike-Konsole nutzen um die Bots zu konfigurieren.

Vor ein paar Tagen beschrieb ich wie man einen Counter-Strike 1.6 Server unter Ubuntu aufsetzt. Dem Server in der Vanila-Version fehlen allerdings einige Komfort-Features wie z.B. das Voten von Maps. Möchte man diese Funktionalität nutzen, benötigt man ein entsprechendes Mod. Hier empfiehlt es sich das AMX Mod zu installieren. Dieses benötigt den Metamod, der allerdings direkt im Paket enthalten ist. Im ersten Schritt muss der Mod auf dem Server installiert werden. Dazu wechselt man auf das Home-Verzeichnis des Servernutzers und gibt dort folgende Kommandos ein:

mkdir amxmod
cd amxmod
wget http://www.amxmod.net/amxfiles/amxmod_2010.1/amxmod_2010.1_cs-en.zip
unzip amxmod_2010.1_cs-en.zip 
rm amxmod_2010.1_cs-en.zip
cp * /home/counterstrike/game/cstrike/ -r
cd ..
rm -r amxmod/

Mit den Kommandos wird der Mod heruntergeladen und an die richtige Stelle verschoben. Anschließend muss die Pluginliste für das Metamod aktiviert werden:

mv /home/counterstrike/game/cstrike/addons/metamod/sample_plugins.ini /home/counterstrike/game/cstrike/addons/metamod/plugins.ini

Damit das AMX Mod erkennt wer im Spiel über administrative Rechte verfügt, muss die users.ini-Datei bearbeitet werden. Diese befindet sich im Ordner /home/counterstrike/game/cstrike/addons/amx/config/users.ini. Der einfachste Weg den Administrator zu definieren ist es die Steam-ID des jeweiligen Spielers zu benutzen. Zur Ermittlung der Steam-ID des Spielers öffnet man im Spiel mittels der ^-Taste die Konsole und gibt dort den Befehl status ein. Anschließend kann der Nutzer der users.ini-Datei hinzugefügt werden:

"STEAM_0:1:12345"    ""       "abcefijmnopqrstu" "ce"

Dabei muss nur die Steam-ID im vorderen Teil geändert werden. Danach ist die Grundkonfiguration erledigt und der Server kann gestartet werden. Damit die Mods aktiviert werden, muss ein neuer Parameter beim Start übergeben werden:

-dll addons/metamod/dlls/metamod.so

In der vollständigen Kommandozeile könnte dies dann so aussehen:

./hlds_run -game cstrike +map de_dust2 +maxplayers 20 -dll addons/metamod/dlls/metamod.so

Sobald der Server hochgefahren ist kann in der Konsole des Spieles mittels des Befehls:

meta list

überprüft werden ob das Plugin erfolgreich gestartet wurde.

Der AMX Mod wurde erfolgreich installiert

In der Standard-Installation verfügt der AMX Mod über 76 Befehle, welche für den Betrieb und die Steuerung des Servers genutzt werden können:

1: amx_help - displays this help
2: amx_langmenu - displays language menu
3: amx_language [|save] - displays/sets/saves language
4: amx_listmaps - lists maps that can be nominated
5: amx_who - displays who is on server
6: say /currentmap - displays current map (say)
7: say /ff - displays friendly fire status (say)
8: say /flop15 - displays worst 15 players (MOTD)
9: say /flop15new - displays worst 15 players (MOTD)
10: say /hp - displays info. about your killer (chat)
11: amx_csayy [color]  - sends center hud message to all players - anonymous
12: amx_flicksay [color]  - sends flickering hud message to all players
13: amx_flicksayy [color]  - sends flickering hud message to all players - anonymous
14: amx_fsay   [color]  - sends hud message to all players
15: amx_fsayy   [color]  - sends hud message to all players - anonymous
16: amx_fxsay [color]  - sends fx hud message to all players
17: amx_fxsayy [color]  - sends fx hud message to all players - anonymous
18: amx_help - displays this help
19: amx_kick  [reason] - kicks
20: amx_kickmenu - displays kick menu
21: amx_langmenu - displays language menu
22: amx_language [|save] - displays/sets/saves language
23: amx_leave  [tag] [tag] [tag] - kicks non specified players
24: amx_listmaps - lists maps that can be nominated
25: amx_map  - changelevel
26: amx_mapmenu - displays changelevel menu
27: amx_name   - changes player's name
28: amx_plugcmdmenu [filename.amx/plugin name] - displays plugins commands menu
29: amx_psay   - sends private message
30: amx_psayy   - sends private message - anonymous
31: amx_say  - sends message to all players
32: amx_sayy  - sends message to all players - anonymous
33: amx_scrollsay [color]  - sends scroll message to all players
34: amx_scrollsayy [color]  - sends scroll message to all players - anonymous
35: amx_slap  [power] - slaps
36: amx_slapmenu - displays slap/slay menu
37: amx_slay  - slays
38: amx_speechmenu - displays speech menu
39: amx_teammenu - displays team menu
40: amx_teleportmenu - displays teleport menu
41: amx_tsay [color]  - sends left side hud message to all players
42: amx_tsayy [color]  - sends left side hud message to all players - anonymous
43: amx_vote    [answer #3] [answer #4] - starts a custom vote
44: amx_voteban  [ip] - starts a voteban
45: amx_voteff - starts a vote to enable/disable Friendly Fire
46: amx_votekick  - starts a votekick
47: amx_votemap  [map] [map] [map] - starts a votemap
48: amx_votemapmenu - displays votemap menu
49: amx_votenextmap [time] - the map will be changed [time] seconds after the end of the vote
50: amx_who - displays who is on server
51: amxmodmenu - displays menus
52: say <@[@|@]|#[#|#]|$[$|$]>[color]  - displays chat/hud message
53: say /currentmap - displays current map (say)
54: say /ff - displays friendly fire status (say)
55: say /flop15 - displays worst 15 players (MOTD)
56: say /flop15new - displays worst 15 players (MOTD)
57: say /hp - displays info. about your killer (chat)
58: say /me - displays current round stats (chat)
59: say /rank - displays your rank (chat)
60: say /rankstats - displays your server stats (MOTD)
61: say /rankstatsnew - displays your server stats (MOTD)
62: say /report - displays weapon status (say_team)
63: say /score - displays last score (chat)
64: say /stats - displays players stats (menu/MOTD)
65: say /statsme - displays your stats (MOTD)
66: say /streak - display info. about your killing streak
67: say /switch - switch client's stats on or off
68: say /thetime - displays the time (say)
69: say /timeleft - displays time left on map (say)
70: say /top15 - displays top 15 players (MOTD)
71: say /top15new - displays top 15 players (MOTD)
72: say currentmap - displays current map
73: say nextmap - displays next map
74: say thetime - displays current time
75: say timeleft - displays timeleft
76: say_team @ - displays message to admins

Counter-Strike 1.6 hat mittlerweile einige Jahre auf dem Buckel, gehört aber immer noch zu den beliebtesten Multiplayer-Spielen. Möchte man unter Ubuntu einen Server aufsetzen, so ist dies in wenigen Schritten erledigt. Im ersten Schritt müssen Abhängigkeiten installiert und ein Nutzer für den Server angelegt werden:

apt-get install lib32gcc1
adduser counterstrike

Nach dem Anlegen des Nutzers wird in dessen Kontext gewechselt und dort die Ordner-Infrastruktur angelegt:

su counterstrike
cd
mkdir steam
mkdir game

Nun steht die Installation des Steam-Kommandozeilen-Clients an:

cd steam
wget http://media.steampowered.com/installer/steamcmd_linux.tar.gz
tar -xvzf steamcmd_linux.tar.gz
rm steamcmd_linux.tar.gz

Danach kann der Steam-Client gestartet werden und der Counter-Strike-Server installiert werden:

./steamcmd.sh
login anonymous
force_install_dir /home/counterstrike/game/
app_update "90 -beta Beta" validate

Beim app_update kann es bei der Installation zu folgender Fehlermeldung kommen:

Error! App '90' state is 0x6 after update job.

Zur Lösung des Problems muss der Befehl:

app_update "90 -beta Beta" validate

so oft ausgeführt werden, bis der Vorgang schlussendlich erfolgreich beendet wird. Anschließend kann der Steam-Client mit dem Kommando exit beendet werden. Bevor man den Server startet, sollte man die server.cfg-Datei den Umständen entsprechend anpassen. Diese befindet sich im Ordner /home/counterstrike/game/cstrike/. Fertig konfiguriert könnte diese so aussehen:

// Use this file to configure your DEDICATED server. 
// This config file is executed on server start.

// server password
sv_password "geheim"
rcon_password "geheim"

// disable autoaim
sv_aim 0

// disable clients' ability to pause the server
pausable 0

// default server name. Change to "Bob's Server", etc.
hostname "Mein erster CS-Server"

// maximum client movement speed 
sv_maxspeed 320

// 20 minute timelimit
mp_timelimit 20

sv_cheats 0

// load ban files
// exec listip.cfg
// exec banned.cfg

Wenn man beim Start des Servers mittels:

./hlds_run -game cstrike +map de_dust2

folgende Ausgabe erhält:

dlopen failed trying to load:
/home/counterstrike/.steam/sdk32/steamclient.so
with error:
/home/counterstrike/.steam/sdk32/steamclient.so: cannot open shared object file: No such file or directory

muss ein symbolischer Link erstellt werden, welcher auf den linux32-Ordner der Steam-Installation zeigt:

cd
mkdir .steam
ln -s /home/counterstrike/steam/linux32 /home/counterstrike/.steam/sdk32

Anschließend kann der Server wieder gestartet werden. Alternativ kann der Server natürlich auch in einer screen-Umgebung gestartet werden, so das dieser im Hintergrund läuft.

Beim Update einer MediaWiki-Installation auf die Version 1.28.1 über das update.php-Skript erhielt ich folgende Fehlermeldung:

Error: your composer.lock file is not up to date. Run "composer update" to install newer dependencies

Hintergrund sind unerfüllte Abhängigkeiten, welche wohl nur für die Entwicklung benötigt werden. Um das Update trotzdem durchzuführen sollte folgendes Kommando im Terminal genutzt werden:

php ./update.php --skip-external-dependencies

Damit wird die Prüfung der externen Abhängigkeiten deaktiviert und die Aktualisierung kann erfolgreich durchgeführt werden.

Der ownCloud-Fork Nextcloud verfügt ebenfalls über eine Kalender-App. Wollte man unter ownCloud ein ICS-Datei in den Kalender importieren, so musste man diese hochladen und die Datei über die Dateiansicht von ownCloud importieren. Versucht man dies unter Nextcloud, wird man feststellen, das statt eines Importes der Texteditor geöffnet wird.

Die Einstellungen der Kalender-App

Der Grund dafür ist, das der Import von ICS-Dateien unter Nextcloud mittlerweile anders gelöst ist. Der Umweg über den Upload entfällt; stattdessen kann die ICS-Datei direkt über die Einstellungen der Kalender-App importiert werden.

Neben der Dateisynchronisationfunktionalität, stellt die freie Cloudlösung Nextcloud eine Reihe von weiteren Features bereit. Eine dieser Funktionalitäten ist der Kalender. Wenn man den Kalender im Webinterface aufruft, kann es unter Umständen passieren, das man dort ein Ausrufezeichen neben dem Kalender zu sehen bekommt.

Das Ausrufezeichen informiert den Nutzer über fehlerhafte Einträge im Kalender

Das Ausrufezeichen informiert den Nutzer über fehlerhafte Einträge im Kalender

Lässt man die Maus einige Momente über dem Ausrufezeichen ruhen, wird die zusätzliche Meldung:

Einige Einträge in diesem Kalender sind fehlerhaft. Bitte überprüfen Sie die Javascript-Konsole für weitere Informationen

angezeigt. Die fehlerhaften Einträge zu entfernen, ist mit den Boardmittel relativ einfach möglich. Dazu muss der betroffene Kalender im ersten Schritt heruntergeladen werden. Dabei erhält man eine iCalender-Datei. Der exportierte Kalender wird anschließend gelöscht und neu angelegt. In den neu angelegten Kalender wird nun die iCalender-Datei wieder importiert (über die Kalender-Einstellungen). Nach dem Import sind die fehlerhaften Einträge verschwunden.

Möchte man eine Dateien in der freien Dateisynchronisationslösung Nextcloud löschen so ist dies einfach über den Dateimanager möglich. Anschließend werden die Änderungen mit dem Nextcloud-Server synchronisiert. Etwas komplizierter wird das ganze wenn man die Dateien direkt auf dem Server im data-Verzeichnis löschen möchte. Wurden hier Dateien gelöscht, müssen auf der Kommandozeile anschließend folgende Befehle innerhalb der Nextcloud-Installation ausgeführt werden:

occ files:cleanup
occ files:scan --all

Damit wird der Dateicache gelöscht und anschließend ein neuer Scan durchgeführt. Dieser sorgt dafür das die veränderte Situation bezüglich der Dateien erkannt wird.