Apache mit http/2 auf Ubuntu Server 18.04

Durch die Verwendung von HTTP/2 wird die Verbindung bei SSL/TSL Verbindungen stark beschleudingt. Wir müssen den Apache2 für die Verwendung von HTTP/2 umstellen.

Hinweis: Das Modul mod_php verwendet das Prozessmodul mpm_prefork. Um das Protokoll HTTP/2 zu verwenden, müssen wir auf das Prozessmodul mpm_event mit FastCGI umstellen.

Die Installation von Apache2 und PHP7.2 erfolgt unter Ubuntu 18.04 wie folgt.

sudo apt install apache2 php7.2

Nach der Installation läuft der Apache mit Prefork als Prozessmodul. Für HTTP/2 brauchen wir das Prozessmodul Event.

Zuerst deaktivieren wir MPM Prefork und das Modul von PHP.

sudo a2dismod php7.2
sudo a2dismod mpm_prefork

Jetzt aktivieren das MPM Event Prozessmodul mit FastCGI.

sudo a2enmod mpm_event proxy_fcgi setenvif

Wir möchten PHP mit FastCGI verwenden und installier es jetzt.

sudo apt install php7.2-fpm
sudo a2enconf php7.2-fpm

PHP läuft als extra Dienst, welche wir aktivieren und starten.

sudo systemctl start php7.2-fpm
sudo systemctl enable php7.2-fpm

Nach dem Neustart von Apache sollte PHP wieder laufen.

sudo systemctl restart apache2

Für HTTP/2 aktivieren wir das Modul.

sudo a2enmod http2

Damit unsere Webseite das Protokoll HTTP/2 verwendet, müssen wir es in der Konfiguration hinterlegen.

sudo vim /etc/apache2/sites-enabled/your-host-ssl.conf

<VirtualHost *:443>
 Protocols h2 http/1.1
 SSLEngine On
 ...

Nach einem Neustart von Apache sollte das Protokoll HTTP/2 funktionieren.

sudo systemctl restart apache2

Den Funktionstest kann man mit dem Curl Tool durchführen. Hier am Beispiel von Google.

curl -k -v --http2 https://www.google.com/

Sollte es zu Problemen mit der Anzahl der Theads kommen, kann man die Anzahl begrenzen.

sudo vim /etc/apache2/mods-enabled/http2.load

H2MinWorkers 1
H2MaxWorkers 1

Das Protokoll HTTP/2 ermöglich auch das Vorrausladen (Preload) von Inhalten. Hier ein Beispiel für WordPress als Header.

Header add Link "</wp-content/themes/twentyseventeen/style.css>;rel=preload"
Header add Link "</wp-includes/js/jquery/jquery.js>;rel=preload"
Header add Link "</wp-includes/js/jquery/jquery-migrate.min.js>;rel=preload"
Header add Link "</wp-includes/js/wp-embed.min.js>;rel=preload"

Raspbian (Exim4) Konfiguration für SMTP Relay

In dem Raspbian Image ist Exim4 enthalten und muss für den Versand noch konfiguriert werden.

sudo dpkg-reconfigure exim4-config

Die Einstellung erfolgen Grafisch. Hier die Vorgaben für einem SMTP Relay (192.168.10.123) ohne Authentifizierung.

„Versand über Sendezentrale (Smarthost); keine lokale E-Mail-Zustellung“

E-Mail-Name des Systems: raspberrypi

IP-Adressen, an denen eingehende SMTP-Verbindungen erwartet werden: 127.0.0.1 ; ::1

Weitere Ziele, für die E-Mails angenommen werden sollen: raspberrypi

Sichtbarer Domänenname für lokale Benutzer: domain.com

IP-Adresse oder Rechnername der Sendezentrale für ausgehende E-Mails: 192.168.10.123

DNS-Anfragen minimieren (Automatische Einwahl, Dial-on-Demand)? Nein

Einstellungen auf kleine Dateien aufteilen? Nein

Empfänger der E-Mails an die Benutzer root und postmaster: pi

Jetzt ist der Versand per Mail möglich.

Raspberry Pi Zero W mit Raspbian Lite als Headless Server

Ziel ist es einen Raspberry Pi Zero W (also mit WLAN) ohne Monitor und Tastatur zu installieren.

Zuerst laden wir uns das Betriebssystem ist Rasbian Lite auf unseren PC.

Der Download ist als ZIP-Datei möglich.

Nach dem Entpacken kann man die Datei auf Windows per Win32DiskImager auf eine SD Karte übertragen.

Für Linux gibt es eine Anleitung.

Die ZIP-Datei entpacken und das Image auf eine SD Karte übertragen.

unzip -p 2018-06-27-raspbian-stretch-lite.zip | sudo dd of=/dev/mmcblk0 bs=4M conv=fsync

Nach dem Übertragen müssen wir noch das WLAN und SSH einrichten, damit wir Headless sofort den Raspberry Pi Zero W starten können.

Wir entfernen die SD Karte und stecken die Karte wieder in den PC. Bei vielen Betriebssystem erfolgt das Mounten automatisch.

Auf der SD Karte gibt es zwei Partitionen (boot/root).

Die Boot Partition hat das vfat Format, die Root Partition das ext4 Format.

Die WLAN Einstellungen (SSID, Passwort) werden in der Root Partition hinterlegt.

sudo vim /media/user/rootfs/etc/wpa_supplicant/wpa_supplicant.conf

network={
   ssid="WLAN-SSID"
   psk="WLAN-PASSWORT"
}

Für den automatisch start des SSH Server müssen wir eine leere Datei in der Boot Partition erstellen.

touch /media/user/boot/ssh

Jetzt können wir die SD Karte in den Raspberry Pi Zero W stecken und starten. Monitor und Tastatur ist nicht notwendig.

Jetzt können wir uns per SSH zu dem Paspberry Pi verbinden. Das Kennwort für den Benutzer „pi“ lautet „raspberry“.

ssh pi@192.168.10.123

Mit dem Tool Raspi-Config können wir weitere Einstellungen vornehmen.

sudo raspi-config

Diese Punkte sollten wir ändern.

– Change User Password
– Network Options / Hostname
– Localisation Options / Change Locale
– Localisation Options / Timezone
– Localisation Options / Keyboard Layout
– Localisation Options / Wi-fi Country

Die Pakete sollte man aktualisieren.

sudo apt update
sudo apt dist-upgrade

Die Tools (htop, iotop, iftop und vim) finde ich sehr sinnvoll.

sudo apt install vim htop iotop iftop

Will man die Lebenszeit der SD Karte verlängern und Fehler bei einem Spannungsverlust vorbeugen, sollte man die Schreibvorgänge auf die Karte unterbinden.

Auf das Swap File sollte wir deshalb verzichten.

sudo systemctl stop dphys-swapfile
sudo systemctl disable dphys-swapfile
sudo rm /var/swap

Die Partitionen können wir auf Read Only (ro) setzen und die Log-Dateien in dem RAM schreiben.

sudo vim /etc/fstab

proc              /proc     proc    defaults              0   0
PARTUUID=xxxx-01  /boot     vfat    ro,defaults           0   2
PARTUUID=xxxx-02  /         ext4    ro,defaults,noatime   0   1
# a swapfile is not a swap partition, no line here
#   use  dphys-swapfile swap[on|off]  for that
 
tmpfs   /tmp            tmpfs   nosuid,nodev,size=20M    0   0
tmpfs   /var/log        tmpfs   nosuid,nodev,size=50M    0   0
tmpfs   /var/tmp        tmpfs   nosuid,nodev,size=10M    0   0

Optional kann man diese Installationen entfernen.

sudo apt remove --purge cron logrotate triggerhappy dphys-swapfile fake-hwclock samba-common
sudo apt autoremove --purge

Einige Dienste schreiben Informationen auf das Dateisystem. Das müssen wie wieder ermöglichen.

sudo rm -rf /var/lib/dhcp/ /var/spool /var/lock /var/cache/unbound/resolvconf_resolvers.conf
sudo ln -s /tmp /var/lib/dhcp
sudo ln -s /tmp /var/spool
sudo ln -s /tmp /var/lock
sudo ln -s /tmp/resolv.conf /etc/resolv.conf
sudo ln -s /tmp/resolvconf_resolvers.conf /var/cache/unbound/resolvconf_resolvers.conf

Die automatischen Jobs sollten wir deaktivieren. Dazu entziehen wir Ihnen einfach die Execute Rechte.

sudo chmod -x /etc/{cron.hourly,cron.daily,cron.weekly,cron.monthly}/*

Der Dienst Sshd möchte gerne in Datei /var/log/lastlog schreiben. Diese Datei müssen wir nach einem Neustart in /var/log anlegen.

sudo vim /etc/rc.local

touch /var/log/lastlog /var/spool/rsyslog
chgrp utmp /var/log/lastlog
chmod 664 /var/log/lastlog
bash -c 'mkdir -p /var/log/{apache2,fsch,apt,ConsoleKit,watchdog}'

Nach dem Neustart ist die SD Karte schreibgeschützt und kann durch einen Stromausfall
nicht mehr beschädigen werden.

sudo reboot

Der Re-Mount als Read-Write ist zur Lautzeit möglich.

sudo mount -o remount,rw /dev/mmcblk0p1 /boot
sudo mount -o remount,rw /dev/root /

PowerDNS als Secondary DNS mit SQLite

Wir möchten einen Secondary DNS auf Basis von PowerDNS und SQLite als Backend installieren. Wir verwenden Ubuntu Server 18.04 (bionic) mit PowerDNS 4.1 aus dem Repository.

Die Installation ist sehr einfach. Die Abhängigkeiten werden automatisch mit installiert.

sudo apt install pdns-backend-sqlite3

Bei der Einrichtung antworten wir mit „YES“. Damit wird die Einrichtung zu 90% durchgeführt. Wer die Frage mit „NO“ beantwortet muss selber Hand anlegen. Weitere Informationen am Ende von dem Artikel.

Der Start von dem Dienst „PDNS“ ist fehlgeschlagen.

Systemd enthält einen DNS Resolver für die Namensauflösung. Der Dienst läuft auch auf Port 53 und auf der IP Adresse 127.0.0.1.

Deshalb müssten wir PowerDNS auf die richtig IP Adresse des Server legen und nicht auf alle IP Adessen (0.0.0.0).

sudo vim /etc/powerdns/pdns.d/pdns.local.conf

local-address=123.123.123.123
local-ipv6=2a0:1:2:3:ff::1
local-port=53
version-string=anonymous
 
master=no
slave=yes
 
disable-axfr=yes
disable-tcp=no
slave-cycle-interval=60

Nach der Änderung sollten die Dienste PowerDNS und Resolver ohne Fehler starten.

sudo systemctl restart systemd-resolved pdns

Die Tabellen von PowerDNS wurden mit der Installation automatisch angelegt. Jetzt müssen noch weitere Einstellung hinterlegt werden.

Für den Primary DNS wird in der Tabelle „supermasters“ der Hostname und die IP Adresse von dem Haupserver eingetragen.

sudo sqlite3 /var/lib/powerdns/pdns.sqlite3 "insert into supermasters values ('123.123.123.123', 'ns1.domain.com', 'admin');"

Sollten Sie bei der Einrichtung die Frage mit „NO“ beantwortet haben, fehlt die Tabelle. Dann müssen Sie die Datenbank selbst anlegen.

wget -O /tmp/schema.sqlite3.sql https://raw.githubusercontent.com/PowerDNS/pdns/master/modules/gsqlite3backend/schema.sqlite3.sql
sudo sqlite3 /var/lib/powerdns/pdns.sqlite3 < /tmp/schema.sqlite3.sql

Der Import ist auch mit der Command Line Shell so möglich.

sudo sqlite3 /var/lib/powerdns/pdns.sqlite3
.read schema.sqlite3.sql
.quit

Die Datenbank braucht auch die richtig Rechte.

sudo chown pdns:pdns /var/lib/powerdns/pdns.sqlite3

Die Datenbank muß manuell für das PowerDNS Backend konfiguriert werden.

sudo vim /etc/powerdns/pdns.d/pdns.local.gsqlite3.conf

launch+=gsqlite3
 
# Database location
gsqlite3-database=/var/lib/powerdns/pdns.sqlite3
gsqlite3-dnssec=on

Hier noch einige Hinweise zur Fehlersuche.

Sollte es nicht auf Anhieb funktionieren, kann man PowerDNS aus als Anwendung starten und sieht auf der Konsole die Fehlermeldungen.

sudo /usr/sbin/pdns_server

Mit dem Tool „dig“ kann man die Funktion und Erreichbarkeit des Primary und Secondary DNS überprüfen.

dig @ns2.domain.com meinname.info AXFR

Quellen: Powerdns Backend Sqlite

Ubuntu Desktop 18.04 mit xRDP und Sound

In Ubuntu 18.04 ist die xRDP Version 0.9.5 enthalten. Mit dieser Version ist es möglich auch Sound per RDP zu übertragen.

Als Desktop wird bei mir Ubuntu Mate verwendet. Natürlich können Sie auch andere Manager verwenden, aber Wayland ist zur Zeit noch nicht möglich.

Die Installation von XRDP erfolgt mit APT.

sudo apt install xrdp xorgxrdp xrdp-pulseaudio-installer

Für die Wiedergabe des Sound wird Plusaudio verwendet. Leider muss man für XRDP zwei Module selbst compilieren. Dafür brauchen wir die Quellen von Pulseaudio aus dem Archiv.

cd /tmp
apt source pulseaudio
cd pulseaudio-11.1
./configure

Nach erfolgreichem Kompilieren von Pulseaudio, kann man die XRDP Module für Pulseaudio kompilieren und installieren. Das Ubuntu Paket xrdp-pulseaudio-installer enthält die Quellen von
Github.

cd /usr/src/xrdp-pulseaudio-installer/
sudo make PULSE_DIR="/tmp/pulseaudio-11.1"
sudo install -s -m 644 module-xrdp-sink.so /usr/lib/pulse-11.1/modules
sudo install -s -m 644 module-xrdp-source.so /usr/lib/pulse-11.1/modules

Ein wichtiger Hinweis befand sich auf Github. Scheinbar funktioniert die Soundausgabe nur, wenn das Host-System eine reale Soundkarte verbaut hat. Server oder virtuelle Umgebung haben eigentlich keine Soundkarte On-Board. Ohne Soundkarte scheitert aber die Wiedergabe mit Pulseaudio und damit auch die Weiterleitung zum Client per RDP Verbindung.

Weitere Anleitungen:
How to set up audio redirection
Audio Output Virtual Channel-support in XRDP

Eintrag im DNS ansehen

Um die Eintragungen im Nameserver (DNS) anzusehen, gibt es unter Linux und Windows das Tool „nslookup“.

In dem Beispeil verwenden wir den Nameserver dns.quad9.net [9.9.9.9]. Sie können aber auch jeden anderen öffentlichen oder privaten Nameserver verwenden.

nslookup - dns.quad9.net
> set q=ANY
> domain.de
> quit

nslookup -q=ANY domain.de dns.quad9.net

Unter Windows sieht die Eingabe so aus.

nslookup -"set q=all" domain.de dns.quad9.net

Ein anderes Tool ist „dig“. Es gehört aber nicht immer zu jedem Linux dazu und muss ggf. später installiert werden.

dig ANY domain @dns.quad9.net

Microsoft SQL Server 2017 in Docker

In diesem Artikel geht es um den neuen Microsoft SQL Server 2017 Linux für Docker.

Natürlich kann man auch MS SQL 2017 direkt unter Ubuntu installieren. Microsoft stellt dafür die Pakete und Docker Images auf dem Docker HUB bereit.

Als minimale Vorraussetzung wird auf der Festplatten rund 4GB Speicherplatz und 4GB RAM benötigt. Eine laufende Docker Installation setzten wir vorraus.

In den allgemeinen Docker Image von Microsoft sind unterschiedliche SQL Editionen verein. Über einen Docker Parameter wird die jeweilige Edition gesetzt.

SQL Developer edition -> MSSQL_PID=Express
SQL Express edition -> MSSQL_PID=Developer

Mit „docker pull“ starten wir den Download von dem Microsoft SQL Server 2017 vom Docker Hub. Im Anschluss erzeugen wir mit „docker run“ eine laufende SQL Express Instanz am Netzwerkport 1433. Unsere Datenbank soll nicht im Docker Container gespeichert werden, sondern im Verzeichnis /my/data/. Das erleichter spätere Updates vom Container. Das Kennword für den Benutzer „SA“ kann natürlich individuell gestalltet werden.

sudo docker pull microsoft/mssql-server-linux
sudo docker run --name mssql1 -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=KennW@rt1' -e 'MSSQL_PID=Express' -p 1433:1433 -v /my/data:/var/opt/mssql/data -d microsoft/mssql-server-linux:2017-latest
sudo docker ps -a

Damit ist die Installation schon abgeschlossen. Jetzt können wir uns per Kommandozeile auf die Datenbank verbinden.

sudo docker exec -it mssql1 /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P 'KennW@rt1'

Als Beispiel erzeugen wir die Datenbank „TestDB“ mit der Tabelle „Inventory“ und zwei Datensätzen. Per SQL Kommando kann man auch das Kennwort von Benutzer „SA“ ändern.

CREATE DATABASE TestDB
GO
USE TestDB
CREATE TABLE Inventory(ID INT, Name NVARCHAR(50), Quantity INT)
GO
INSERT INTO Inventory VALUES (1, 'banana', 25);
INSERT INTO Inventory VALUES (2, 'orange', 14);
SELECT * FROM Inventory WHERE quantity > 15;
GO
ALTER LOGIN SA WITH PASSWORD='Neues!Kennwort'
GO
QUIT

Microsoft stellt das SQL Server Management Studio Version 17 für Windows als grafisches Tool bereit. Die IDE ist sehr Umfangreich und setzt viele Resourcen vorraus.

Eine alternative IDE stellt HeidiSQL dar.

USB Festplatte in Standby versetzen

Aufgabe ist es die Lebenszeit einer externen Festplatte zu verlängern, indem wir Sie nach einiger Zeit runter fahren.

Dazu brauchen wir das HDParm Tool, mit dem wir die Werte in der Festplatte setzen können. Ist HDParm noch installiert, so machen wir jetzt.

sudo apt install hdparm

Jetzt können wir die Festplatte sofort in Standby setzt.

sudo hdparm -y /dev/sda

Soll die Festplatte automatisch nach 50 Sekunden runter fahren, können wir den Parameterwert -S 10 setzen (10 * 5 Sekunden = 50 Sekunden). Möglich Werte sind von 1 bis 240. Die Einstellung sind nicht statisch und müssen nach einem Neustart wieder gesetzt werden.

sudo hdparm -S 10 /dev/sda

Wir können den Status der Festplatte prüfen.

sudo hdparm -C /dev/sda

Mit einer UDev-Regel können wir die Werte für die USB Festplatte nach dem Anstecken automatisch setzen.

sudo vim /etc/udev/rules.d/50-hdparm.rules

ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="1", RUN+="/usr/bin/hdparm -B 127 -S 120 /dev/%k"

Der Parameter -B 127 aktiviert das Energiemanagement der Festplatte. Der Parameter -S setzt den Timeout-Wert von 10 Minuten (120*5 Sekunden).

Die UDev-Regeln müssen neu geladen werden.

sudo udevadm control --reload-rules
sudo udevadm trigger

Raspberry Pi als Videorekorder

In diesem Projekt wollen wir mit Hilfe von einem Raspberry Pi und einem DVB Stick einen Videorekorder aufbauen. Ich beschreibe die Installation mit einem Terratec Cinergy HTC USB XS HD, der sich heute noch bei Kabel (DVB-C) eignet. Es gibt viele andere DVB USB Sticks, welche sich auch dafür eignen. Eine externe Festplatte mit USB Anschluss dient als Speichermedium.

Als Betriebssystem verwenden ich Raspbian oder Ubuntu Server für den Raspberry Pi.

TVheadend 4.0.8 Raspbian Light
TVheadend 4.2.7 Ubuntu Classic Server 16.04

Nach dem Download sollte das Image entpackt und auf eine SD Karte kopiert werden.
Die SD Karte wird im Raspberry Pi eingesetzt und gestartet. Nach dem Start sollten die aktuellen Updates und Patches installieren werden.

sudo apt update
sudo apt dist-upgrade

Für den Betrieb von dem DVB Stick brauchen wir noch die Firmware und den Kernel 4.4 oder größer.

cd /lib/firmware/
sudo wget https://github.com/OpenELEC/dvb-firmware/raw/master/firmware/dvb-usb-terratec-htc-stick-drxk.fw

Das Update vom Kernel ist schnell gemacht.

sudo apt install rpi-update
sudo rpi-upgrade
sudo reboot
uname -a

Sollte es Probleme geben, dann kann man hiermit die Fehler suchen.

lsusb
dmesg

Unseren Server wollen wir mit eine festen IP Adresse betreiben und nicht per DHCP.

sudo vim /etc/network/interfaces

auto eth0
iface eth0 inet static
  address 192.168.187.100
  netmask 255.255.255.0
  gateway 192.168.187.1
  dns-nameservers 192.168.187.1

Den DHCP Dienst können wir stoppen und deaktivieren.

sudo service dhcpcd stop
sudo systemctl disable dhcpcd

Für den Betrieb als Headless-Server ist SSH notwendig.

sudo apt install openssh-server
sudo systemctl start ssh
sudo systemctl enable ssh
sudo touch /boot/ssh

Weitere Einstellung wie Hostname, Ländereinstellung, Tastatur kann man einfach mit dem Konfig-Tool vornehmen.

sudo raspi-config

Diese Tools helfen uns beim Betrieb weiter.

sudo apt install vim htop iotop iftop

Das Swap-File kann man ausschalten und deinstallieren.

sudo dphys-swapfile swapoff
sudo apt purge dphys-swapfile

Wenn die USB Festplatte mit dem NTFS Dateisystem verwendet wird, dann ist die Installation von extra Tools notwendig.

sudo apt install ntfs-3g

Für die Einbingung ist eine Eintragung in der Konfig „fstab“ notwendig.

sudo vim /etc/fstab

/dev/sda1 /media   ntfs  defaults,uid=hts,umask=0022,nosuid,nodev,noexec   0  0

Jetzt erfolgt die Installation von TVheadend.

curl http://apt.tvheadend.org/repo.gpg.key | sudo apt-key add -
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 379CE192D401AB61

Ab Version 4.2.7 ist dieser Key notwendig.

curl https://doozer.io/keys/tvheadend/tvheadend/pgp | sudo apt-key add -

sudo apt-get install apt-transport-https

Bei Rasbian wird diese Einstellung verwendet.

sudo sh -c 'echo "deb https://dl.bintray.com/tvheadend/deb jessie release" > /etc/apt/sources.list.d/tvheadend.list'

Bei Ubuntu Server 16.04 wird diese Einstellung verwendet.

sudo sh -c 'echo "deb https://dl.bintray.com/tvheadend/deb xenial release-4.2" > /etc/apt/sources.list.d/tvheadend.list'

Ab Version 4.2.7 liegen die Pakete für ARMv7 (armhf) hier:

sudo sh -c 'echo "deb https://apt.tvheadend.org/stable $(lsb_release -sc) main" | tee -a /etc/apt/sources.list.d/tvheadend.list'

sudo apt update
sudo apt install tvheadend

Das Login und Password ist für den Betrieb notwendig.

http://192.168.178.100:9981/

Der Rest der Einrichtung erfolgt per Web-Interface und ist hier beschrieben.

Die Metadaten für die Aufzeichnung werden in dem Verzeichnis /home/hts/.hts/tvheadend/dvr/log gespeichert.

Der Zugriff auf die Kanalliste vom Live Stream mit VLC erfolgt über die Url.

http://login:passwort@192.168.187.100:9981/playlist/channels

Noch ein Hinweis für die Senderlogos. Leider ist die Einrichtung sehr schlecht beschrieben. Hier meine Konfiguration unter dem Menü „Configuration / General / Base / Picon“.

Channel icon path: picon://%C.png
Picon path: file:///home/pi/logos/

Das User Icon lautet dann zum Beispiel „picon://Das_Erste.png“ und „picon“ wird durch den Path ersetzt zu „file:///home/pi/logos/Das_Erste.png“.

Die Senderlogos findet man im Internet.

Als Client Anwendung für den Zugriff auf TVheadend gibt es unterschiedliche Plugins.

Ubuntu enthält im Repository den Kodi Mediaplayer und das Plugin für TVheadend.

sudo apt install kodi kodi-pvr-hts

Die Einstellung der IP-Adresse für Tvheadend ist nicht einfach zu finden.

Add-ons > PVR clients | All > Tvheadend HTSP Client > Enable + Configure

Die Sprache, Tastatur und Zeitzone kann man in Kodi auch ändern.

Settings > Interface settings > Regional > Language, Keyboard layouts, Timezone