TeamSpeak 3 Server auf Linux vServer installieren

Genau wie am Client ist auch am Server die Windows-Ära bei mir jetzt langsam komplett vorüber. Es gibt noch genau 2 Anwendungen, die bisher unter Windows liefen: Teamspeak Server und mein Jabber-Server. Beide werde ich nun auf meinen Linux vServer installieren. Den Anfang macht TeamSpeak, den ich im folgenden auf einem Linux-Server installiere.

Grundsätzlich sollte man für alle Dienste die man auf einem Linux-Server installiert aus sicherheitsgründen immer einen eigenen User nehmen. Auf gar keinen Fall darf man sowas als root installieren. Also legen wir einen Userverzeichnis und einen User an mit:

root@srv:~# mkdir /home/ts3
root@srv:~# useradd -g users ts3 -d /home/ts3/

Nun vergeben wir dem User noch ein Passwort:

root@srv:~# passwd ts3
 Enter new password:
 Retype new password:
 passwd: password updated successfully

Und zu guter letzt muss nun der Benutzer noch Eigentümer seines Home-Verzeichnisses werden.

root@srv:~# chown ts3 /home/ts3/

Nun loggen wir uns am besten per ssh mit den Benutzerdaten unseres ts3-Users auf dem Server ein. Auf der Seite http://www.teamspeak.com/en/downloads#server findet sich der Download-Link der aktuellen Server-Sersion. Mit dem Kopieren-Icon kann man sich den Link zur aktuellsten Version in die Zwischenablage kopieren. Am Server muss man dann nur noch wget <kopierte Adresse> einfügen.

Mit

tar xfvj teamspeak3-server....tar.bz2

wird dann das Archiv entpackt. Nun wechseln wir mit cd in das Verzeichnis, das gerade durch das Entpacken angelegt wurde und starten den Server mit ./ts3server_minimal_runscript.sh

Wenn alles richtig läuft, müsste nun sowas hier kommen:

------------------------------------------------------------------
 I M P O R T A N T
------------------------------------------------------------------
 Server Query Admin Account created
 loginname= "serveradmin", password= "XXXX"
------------------------------------------------------------------

 I M P O R T A N T
------------------------------------------------------------------
 ServerAdmin privilege key created, please use it to gain
 serveradmin rights for your virtualserver. please
 also check the doc/privilegekey_guide.txt for details.

token=XXXXX
------------------------------------------------------------------

Die angezeigten Informationen sollte man nun am besten in einer Datei abspeichern, da wir diese später nochmal brauchen. Das Minimal-Runscript ist nicht für den dauerhaften Betrieb geeignet! Es läuft nur so lange, wie die SSH-Sitzung aktiv ist. Wird diese geschlossen, wird auch der Server beendet. Das ist natürlich nicht sinnvoll. Mit Strg + C beenden wir nun erstmal den TS3-Server.

Nun starten wir den Server erstmal „normal“:

-bash-4.2$ ./ts3server_startscript.sh start
Starting the TeamSpeak 3 server
TeamSpeak 3 server started, for details please view the log file

Und jetzt ist es auch an der Zeit, das wir uns erstmal den für unser Betriebssystem passenden TeamSpeak-Client von der Seite herunterladen:

http://www.teamspeak.com/en/downloads

Im TeamSpeak-Client verbinden wir uns mit „Verbindungen / Verbinden“ mit unserem Server. Entweder direkt auf die IP-Adresse, oder über einen schon gesetzten DNS-Eintrag, wie in meinem Beispiel.

Der erste der sich am Server einloggt wird nun gleich nach dem Server-Token gefragt, um Admin-Rechte zu bekommen. Hier trägt man das Token aus der Textdatei ein.

Wenn nun alles geklappt hat, sollte das ganze so aussehen.

Jetzt läuft zwar der Server, aber wir haben ein Problem: nach einem Server-Boot startet er nicht automatisch. Dies müssen wir nun noch anpassen. Nun loggen wir uns wieder als root am Server per ssh ein. Mit nano /etc/init.d/teamspeak3  erstellen wir nun eine Datei mit folgendem Inhalt:

#!/bin/sh
### BEGIN INIT INFO
# Provides: teamspeak3
# Required-Start: $local_fs $network
# Required-Stop: $local_fs $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Description: Teamspeak 3 Server
### END INIT INFO


# INIT Script by www.SysADMINsLife.com
######################################
# Customize values for your needs: "User"; "DIR"

USER="ts3"
DIR="/home/ts3/teamspeak3-server_linux_amd64"
 
###### Teamspeak 3 server start/stop script ######
 
case "$1" in
start)
su $USER -c "${DIR}/ts3server_startscript.sh start"
;;
stop)
su $USER -c "${DIR}/ts3server_startscript.sh stop"
;;
restart)
su $USER -c "${DIR}/ts3server_startscript.sh restart"
;;
status)
su $USER -c "${DIR}/ts3server_startscript.sh status"
;;
*)
echo "Usage: {start|stop|restart|status}" >&2
exit 1
;;
esac
exit 0

Die beiden Variablen USER und DIR sind ggf. noch anzupassen. Und mit chmod 755 /etc/init.d/teamspeak3 machen wir das Startskript nun noch ausführbar.

Unter Debian & Co. aktiviert nun dieser Befehl den Autostart:

update-rc.d teamspeak3 defaults

Wenn man hingegen Redhat oder CentOS (wie ich hier) verwendet, dann hilft das hier weiter:

Dienst hinzufügen:

chkconfig --add teamspeak3

Anzeigen lassen:

chkconfig --list teamspeak3

Autostart aktivieren:

chkconfig teamspeak3 on

Nun ist es hilfreich, den Server mal zu booten, um zu testen ob das mit dem Autostart auch klappt.

 

Internet-Terminal mit Lubuntu einrichten

Auf einem Rechner, der in einem frei zugänglichen Bereich steht, war bisher als „Internet-Terminal“ ein Windows 10 installiert, welches nach jedem Update Probleme machte. Dieses durfte ich nun auf Lubuntu updaten.

Vorgaben waren:

  • Firefox als Browser soll automatisch starten
  • Bildschirmschoner soll erscheinen, Energiesparmodus muss aus sein
  • Automatische Anmeldung als Gast-Benutzer, somit Wiederherstellung aller Einstellungen nach Neustart
  • Administrierbarkeit per SSH
  • keine großen Probleme mit Updates

Zunächst habe ich als Linux-Distribution Lubuntu gewählt, einfach weil es einen sehr schlichten Desktop mitbringt, einfach anzupassen ist und nicht so viel unnötigen Ballast mitschleppt. Während der Installation habe ich mir einen Admin-Bediener angelegt, der später für SSH-Zugriffe und zum lokalen Administrieren benötigt wird. Den Autologin habe ich an der Stelle auf „Nein“ stehen, da später ja mit einem Gast-Bediener gearbeitet werden soll.

Nach der Installation habe ich zunächst einmal auf der grafischen Oberfläche die Spracheinstellungen geöffnet, damit Lubuntu fehlende Sprachpakete nachinstalliert. Ansonsten ist z.B. Firefox in Englisch.

Danach folgen diese Befehle:

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install mc ssh net-tools
sudo apt-get remove light-locker apparmor

Die ersten beiden bringen erstmal das Linux und die Paketquellen auf den aktuellen Stand. Mit dem dritten installiere ich MidnightCommander (brauche ich immer), den SSH-Server und die net-tools, damit Befehle wie z.B. ifconfig funktionieren. Der letzte Befehl entfernt apparmor, weil der leider mit dem Gast-Bediener kollidiert und den Bidschirmschoner light-locker.

Wenn man light-locker deinstalliert, wird automatisch XScreensaver installiert, was wir dann im folgenden auch brauchen. Apparmor hat das Problem, das wenn der Gastbediener angemeldet wird, immer die Meldung „No session for pid XXX“ erscheint. Vermutlich kann man das auch hinbekommen, indem man den Apparmor richtig konfiguriert, aber das habe ich an der Stelle nicht gemacht.

Nun legen wir eine Datei /etc/lightdm/lightdm.conf mit folgendem Inhalt an:

[SeatDefaults]

autologin-guest=true

Hiermit wird automatisch der Gast-User beim Rechnerstart angemeldet. Wir bleiben noch als Admin angemeldet und konfigurieren nun den Firefox (z.B. Startseite), den Bildschirmschoner und die Energiespareinstellungen von xfce. Die Startkonfiguration die jedesmal nach der Anmeldung für den Gast-Benutzer verwendet wird, wird aus /etc/guest-session/skel/ in ein temporäres Profilverzeichnis kopiert. In das /etc/guest-session/skel/ müssen wir nun auch unsere „Wunschkonfiguration“ vom aktuellen Bediener reinkopieren. In meinem Beispiel wären das:

.xscreensaver -> Konfiguration vom Bildschirmschoner
.mozilla (Ordner) -> Konfiguration vom Firefox Browser
Schreibtisch (Ordner) -> Desktop-Icons
.config/xfce4/xfce-perchannel-xml/xfce4-power-manager.xml -> Energiespareinstellungen – hier habe ich eingestellt das der Rechner nicht in den Energiesparmodus geht.

Dann habe ich im Verzeichnis /etc/guest-session/skel/.config noch einen Ordner autostart angelegt und dort die Datei „firefox.desktop“ vom Schreibtisch reinkopiert, damit der Firefox automatisch gestartet wird. Außerdem habe ich im gleichen Ordner noch eine Datei „xscreensaver.desktop“ mit folgendem Inhalt angelegt:

[Desktop Entry]
Version=1.0
Name=XScreensaver
Comment=Bildschirmschoner
GenericName=Bildschirmschoner
Exec=xscreensaver -nosplash
Terminal=false
X-MultipleArgs=false
Type=Application
Icon=xscreensaver

Hiermit wird dann der Dienst vom XScreensaver nach der Anmeldung gestartet, sonst funktioniert der Bildschirmschoner nicht.

Nun ist Zeit für einen Neustart und schon ist unser Internet-Rechner fertig…

Und ja – mir ist bewusst, das es dann noch einiges an der Konfig zu tun gibt, wenn man es benötigt. Zum Beispiel nicht benötigte Anwendungen ausblenden oder das Startmenü und den Desktop soweit eindampfen, das nur das was tatsächlich benötigt wird angezeigt wird. Für meinen Einsatzzweck hat es aber so gereicht.

 

 

 

nginx/Plesk – Caching für statische Inhalte einschalten

Im letzten Beitrag habe ich erklärt, wie man die GZip-Komprimierung im nginx unter Plesk aktiviert. Google PageSpeed Insights hat außerdem noch bemängelt, das mein Server keine Cache-Informationen mitschickt. Diese Information ist für statische Inhalte wie JPG oder JS-Dateien sinnvoll, da hiermit dem Browser gesagt wird, wie lang er die aus dem lokalen Plattencache nutzen soll, anstatt sie erneut vom Server zu laden.

Leider kann man diese Option nicht auf Serverebene einstellen, sondern muss das pro Domain / Subdomain durchführen. Und zwar unter „Einstellungen für Apache & nginx“.

Dort trägt man den obenstehenden Text unter „Zusätzlich nginx-Anweisungen“ ein. Hier nochmal der Text als „Kopiervorlage“.

location ~* \.(?:ico|css|js|jpg|gif|jpeg|png|svg|woff)$ {
   expires 7d;
   add_header Pragma public;
   add_header Cache-Control "public";
}

Den Wert von 7d kann man bei Bedarf auch auf länger, z.B. 30d für 30 Tage anpassen.

Hier die Anzeige von Google PageSpeed Insights vor der Änderung:

und hier danach:

Der Wert ist also von 80 auf 85 gestiegen…

 

 

nginx/Plesk – GZIP-Komprimierung aktivieren

Kürzlich habe ich auf Google PageSpeed Insights mal meine eigene Webseite überprüft und als Antwort bekam ich ein „Poor“ zurück, d.h. die Lade- und Reaktionszeiten meines Servers waren schlecht.

Die einzelnen Punkte ging ich dann Schritt für Schritt durch. Einige Sachen wie große Grafiken optimieren oder weniger JavaScripts konnte ich teilweise umsetzen, aber ein Punkt machte mich stutzig: „Website-Daten komprimiert ausliefern“. Sofern der Besucher der Seite nicht gerade einen uralten Internet Explorer verwendet, kann der Server die Webseiten-Daten vor der übertragung mit gzip komprimieren. Scheinbar war das bei mir ausgeschaltet.

Auf der Homepage von Plesk gibt es eine Anleitung, die wie man das aktiviert. Aber leider ist die nur halb richtig, darum hier die korrigierte Fassung.

Zunächst legt man eine Datei „/etc/nginx/conf.d/gzip.conf“ mit folgendem Inhalt an:

gzip on; gzip_disable "MSIE [1-6]\.(?!.*SV1)"; gzip_proxied any; gzip_types text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript image/x-icon image/bmp image/svg+xml; gzip_vary on;

Der fett geschriebene Teil fehlt in der „offiziellen“ Anleitung. Danach einfach mal über /etc/init.d/nginx restart den nginx neu starten. Nun werden die gut komprimierbaren Dateitypen komprimiert. Es macht keinen Sinn, hier z.B. JPG-Dateien, die ja von sich aus schon komprimiert sind, nochmal zu komprimieren. Das würde nur Zeit kosten.

Wenn man weitere Dateitypen hinzufügen will, lohnt sich ein Blick in die Datei /etc/nginx/mime.types – hier sieht man, welche Dateiendung mit welchem MIME-Typ ausgeliefert wird. Den MIME-Typ schreibt man dann einfach in die gzip.conf mit rein.

SSH auf dem Raspberry Pi aktivieren (Headless-Installation)

Will man einen Raspberry Pi mit Raspian in Betrieb nehmen, ist es eigentlich ganz einfach: Raspian Image auf die SD-Karte schreiben und dann Maus, Tastatur und Bildschirm anschließen und das ganze konfigurieren.

Früher konnte man auch direkt per SSH zugreifen, d.h. man konnte sich den Weg sparen, erst eine Maus und Tastatur sowie einen Bildschirm anzuschließen. Aus Sicherheitsgründen geht das in den neueren Raspbian-Versionen nicht mehr, da hier der SSH-Server standardmäßig erstmal deaktiviert ist. Jetzt gibt es aber durchaus Situationen, in denen man einen Raspberry headless (also ohne Peripherigeräte) in Betrieb nehmen will und dann per SSH konfiguriert.

Auch das geht noch, wenn auch mit einem kleinen Trick: man legt einfach eine leere Datei Namens „ssh“ auf der SD-Karte an. Wird der Raspberry nun damit gestartet, löscht er diese leere Datei wieder und aktiviert SSH dauerhaft.

WICHTIG: Da man nun mit Standardpasswörtern auf den Raspberry kommt, sollte das erste sein, das man mit „passwd“ sofort das Passwort des Benutzers „pi“ ändert. So lange das nicht erfolgt ist, stellt SSH auf dem Raspberry durchaus ein Sicherheitsproblem dar.

 

Opel Autoradio CDR 500 – SAFE-PIN Eingabe nach Batteriewechsel

In meinem Opel Astra habe ich ein Opel CDR 500 Autoradio. Kürzlich musste ich die Batterie abklemmen und danach zeigte mir das Radio nur noch SAFE auf dem Display an und wollte, das ich den Sicherheitscode eingebe. Kein Problem dachte ich mir, da ich meinem iPhone gespeichert habe. Aber wie gibt man den nun ein?

Wenn man weiß wie es geht, dann ist es ganz einfach:

  1. Zündung einschalten
  2. Radio ausschalten
  3. AS-Taste drücken und gedrückt halten, Radio einschalten. Nach 3 Sekunden ertönt ein Bestätigungs-Geräusch. Taste AS loslassen. Im Display erscheint SAFE, nach wenigen Sekunden änder sich die Anzeige zu „10 – – – -„. Die Zahl (hier 10) gibt an, wie viele Versuche man noch hat.
  4. Mit den Stationstasten 1 – 4 kann man nun jeweils die 1. bis 4. Stelle um jeweils eins erhöhen. Wenn der Code also 0123 wäre, muss man 1x Taste 1, 2x Taste 2, 3x Taste 3 und 4x Taste 4 drücken. Im Display erscheint nun der eingegebene Code.
  5. Wenn der im Display angezeigte Code korrekt ist, bestätigt man diesen, indem man die AS-Taste einige Sekunden lang drückt. Es ertönt wieder ein Bestätigungston und die Sperre ist aufgehoben. Die AS-Taste kann man dann wieder los lassen.
  6. Hat man den falschen Code eingegeben, erscheint 9 SAFE und nach einigen Sekunden „9 – – – -„. Jetzt hat man nur noch 9 Versuche…
  7. War der Code korrekt, führt das Gerät noch einen Suchlauf durch und kann dann wieder normal genutzt werden.

 

mod_rewrite – 301 Redirects per .htaccess

Gestern habe ich die Adresse meines Blogs geändert. Das war dann der Zeitpunkt, um mich etwas intensiver mit der Datei .htaccess und mod_rewrite zu beschäftigen. Ziel war, das alle alten Links weiterhin funktionieren und einfach auf die neue Domain weitergeleitet werden.

Hierzu legt man zunächst auf dem alten Webspace eine Datei .htaccess im Webserver-root an.

Als erstes muss man in die Datei

RewriteEngine On

reinschreiben. Damit wird das mod_rewrite aktiviert.

Die nächsten Befehle, die von der alten auf die neue Domain umleiten, sind dann:

RewriteCond %{HTTP_HOST} ^alte-domain.de [NC,OR]
RewriteCond %{HTTP_HOST} ^www.alte-domain.de [NC]
RewriteRule ^(.*)$ http://www.neue-domain.de/$1 [L,R=301,NC]

Das sind auch die Befehle, die ich verwendet habe – Domainnamen natürlich angepasst. Wenn man jetzt aber auch die Links innerhalb der Seite geändert hat – z.B. wenn man von einem Blog-System auf ein anderes umstellt, dann macht es unter Umständen Sinn, das man von Unterseiten der alten Domain auf die Startseite der neuen Domain verweist. Das geht so:

RewriteCond %{REQUEST_URI} (.*)
RewriteRule ^(.*)$ http://www.neue-domain.de/ [L,R=301]

Seit es kostenlose SSL-Zertifikate dank Let’s Encrypt gibt, spricht auch nichts mehr dagegen, bei privaten Projekten SSL einzusetzen. Nun will man eventuell, das eine Seite nur noch per SSL ausgeliefert wird. Auch hier hilft mod_rewrite weiter. Mit dem folgenden kann man von nicht-SSL URLs auf welche mit SSL umleiten:

RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

Natürlich kann man mit mod_rewrite noch viel mehr machen. Aber die obigen Schnipsel sind schonmal das wichtigste, was man häufig braucht.

Aus weiland-thomas.de wird knowblog.de – alles neu?

Alles neu macht der Mai? Nicht ganz, in dem Fall ist es nun schon Juni geworden.

Seit einiger Zeit schon plane ich, diesem Blog eine neue Adresse zu geben und jetzt ist es endlich so weit. Ab sofort ist mein Blog – oder besser gesagt mein „öffentlicher, digitaler Notizzettel“ unter der neuen Adresse knowblog.de erreichbar.

Aber keine Angst: alle alten Links werden per mod_rewrite / .htaccess umgeleitet! Somit sollten alle Links auf diesen Blog weiterhin funktionieren.

Inhaltlich soll sich nicht allzuviel ändern. Ich werde weiterhin über Technik und Themen die mich beschäftigen oder Fragen die mir gestellt wurden und die auch für andere interessant sind berichten. Da ich im Mai Nachwuchs bekommen habe, wird wohl auch zu dem Thema nun ab und an mal ein Eintrag hier erscheinen…

Bearbeiten-Schutz von PDF-Dateien entfernen

Heute habe ich ein ausfüllbares PDF-Dokument bekommen, an dem wir vorgegebenen Text etwas verändern mussten.

Leider war das nicht möglich, da ein Kennwortschutz für das Ändern des Dokuments vorhanden war, der sich wie im folgenden Screenshot darstellte.

Der Ersteller des Dokuments war leider nicht kurzfristig zu greifen, so das eine andere Lösung gefunden werden musste. Der Tipp von Tante Google, man solle das Dokument einfach an einen PDF-Drucker drucken hätte zwar prinzipiell funktioniert, aber die Formularfelder im PDF waren danach weg. Also keine sinnvolle Lösung für mein Problem.

Ich fand dann folgende Lösung. Hierzu benötigt man GSView (ich habe Version 6 genommen) und Ghostscript. Beides kann man kostenlos bei Artifex herunterladen.

Nun öffnet man das entsprechende PDF-Dokument mit GSView und exportiert es über „File / Export“ entweder als Linearized PDF oder als Expanded PDF (ausprobieren – bei mir ging beides).

Und schon hat man das Ergebnis – ein PDF ohne Passwortschutz und die ausfüllbaren Felder im Dokument blieben voll erhalten.

 

Raspberry Pi 3 – WLAN und Bluetooth deaktivieren

Die große Neuerung am Raspberry Pi 3 ist das integrierte WLAN und Bluetooth-Modul. Einerseits ist das ja super, auf der anderen Seite ist es aber manchmal nicht gewünscht. Jetzt könnte man natürlich einen älteren Raspberry Pi 2 nehmen, aber wenn man den gerade nicht zur Hand hat, oder das mehr an Rechenleistung benötigt wird, dann kann man auch am Raspberry Pi 3 das WLAN und Bluetooth deaktivieren.

Am zuverlässigsten erledigt man das, indem man die Kernel-Module deaktiviert.

Das geht über die Datei /etc/modprobe.d/raspi-blacklist.conf

Hier fügt man folgende Zeilen hinzu:

#WiFi
blacklist brcmfmac
blacklist brcmutil
blacklist cfg80211
blacklist rfkill
#Bluetooth
blacklist btbcm
blacklist hci_uart

Für Bluetooth muss man noch einen Dienst deaktivieren, da sonst Fehlermeldungen auftreten können, da der versucht auf die Kernelmodule zuzugreifen. Das geht mit:

sudo systemctl disable hciuart

Nach einem Neustart ist Bluetooth und WLAN nicht mehr verfügbar. In einem Forum habe ich aber gelesen, das die Funkmodule trotzdem noch aktiv sind und auch munter vor sich hin funken. Aber zumindest vom Betriebssystem her können sie so nicht mehr angesprochen werden.