Services unter systemd einrichten

Das Init-System systemd ist mittlerweile in vielen Linux-Distributionen angekommen. Auch unter Ubuntu ist es seit Version 15.04 integriert. Ein Vorteil des neuen Systems ist, das Services, im Gegensatz zum alten Init-System, relativ unkompliziert erstellt werden können. Dazu muss eine sogenannte Unit erstellt werden. Bei einer Unit handelt es sich um eine Textdatei mit einer entsprechenden Konfiguration. Neben den Units für die Konfiguration eines Services existieren weitere Unit-Typen wie z.B. die Typen mit der Endung .path oder .network. In diesem Artikel soll es allerdings nur um die Units vom Typ Service gehen.

Die Units liegen in unterschiedlichen Orten im Dateisystem. Die vom System vorinstallierten Units sind im Ordner /lib/systemd/system/ zu finden. Eigene Services werden im Ordner /etc/systemd/system/ hinterlegt. Hier können allerdings nur Nutzer mit administrativen Rechten entsprechende Service hinterlegen. Soll ein nicht privilegierter Nutzer eine Unit angelegen, so muss er diese im Verzeichnis ~/.config/systemd/user/ hinterlegen. In den meisten Fällen werden Units für Services im Dateisystem unter dem Pfad /etc/systemd/system/ angelegt. In diesem Ordner soll nun eine Datei für die Unit angelegt werden:

nano languagetool.service

Beispielhaft könnte eine solche Unit wie folgt aussehen:

[Unit]
Description=LanguageTool
After=syslog.target
After=network.target

[Service]
Type=simple
User=languagetool
Group=languagetool
WorkingDirectory=/home/languagetool/server
ExecStart=/usr/bin/java -cp /home/languagetool/server/languagetool-server.jar org.languagetool.server.HTTPServer --config languagetool.cfg --port 3001 --allow-origin "*"
Restart=always
Environment=USER=git HOME=/home/languagetool

[Install]
WantedBy=multi-user.target

Die Unit unterteilt sich in unterschiedliche Bereiche, in diesem Beispiel sind dies Unit, Service und Install. Der Bereich Service ist hierbei nur in Units vom Typ Service zu finden. Im Bereich Unit sind eine kurze Beschreibung des Services und die Abhängigkeiten der Unit hinterlegt. Dabei wird definiert, welche Systeme bereits gestartet sein müssen, bevor der Service gestartet wird. Ein Target entspricht dabei einer Gruppe von Diensten, meist mit einer bestimmten Bedeutung, wie z.B. das Target für die Herstellung der Netzwerkkonnektivität (network-online.target).

In der Service-Gruppe wird der Typ des Services und der Nutzer und die Gruppe definiert, mit welchem bzw. welcher er starten soll. Daneben wird das Arbeitsverzeichnis und die Kommandozeile zur Ausführung des Services definiert. Weiterhin kann das Verhalten des Service, über den Parameter Restart, weiter definiert werden. So kann angegeben werden, dass der Service nach seiner Beendigung wieder neugestartet wird.

In der Install-Sektion wird angeben, wann der Service gestartet werden soll. Das multi-user.target entspricht dem klassischen Start eines normalen Linux-Systems. Ist die Unit definiert, kann sie aktiviert und der Service gestartet werden:

systemctl enable languagetool
systemctl start languagetool

Die Option enable sorgt dafür das die entsprechende Unit aktiviert wird. Dies führt dazu das sie je nach Konfiguration z.B. automatisch beim Systemstart oder bei dem Anschluss bestimmter Hardware gestartet wird. Unter bestimmten Systemen wie Ubuntu, kann der Service auch über das service-Kommando gestartet werden:

service languagetool start

Neben den Optionen enable und start für systemctl, existieren weitere Optionen zur Steuerung der Units. Dies sind unter anderem stop, zum Stoppen des Services und disable zur Deaktivierung der Unit. Mit der Option status, kann der Status eines Service erfragt werden:

systemctl status languagetool

Anschließend erhält der Nutzer den aktuellen Status des Service. Eine weitere wichtige Option ist restart um einen Service manuell neuzustarten. Mithilfe der systemd-Units lassen sich somit schnell Services in ein Linux-System einbinden.

Digital Signage für den Raspberry Pi

Der Begriff Digital Signage beschreibt im Groben nichts anders als die Nutzung digitaler Schilder, was z.B. Bildschirme sein können. Möchte man einen solchen Bildschirm bespielen, kann man sich mit dem Raspberry Pi eine entsprechende Lösung zusammenbauen. Daneben gibt es eine spezialisierte Distribution für den Raspberry Pi. Diese hört auf den Namen Raspberry Digital Signage und stellt nach dem Booten einen Webbrowser im Vollbild dar. Als Browser wird Chromium genutzt. Daneben stellt die Distribution sicher, das man den Webbrowser nicht beenden oder anderweitig manipulieren kann.

binaryemotions.com

Zur Wartung und Nutzung der Distribution existiert ein Webinterface, in welchem die entsprechenden Einstellungen vorgenommen werden können. Heruntergeladen werden kann die Distribution von der Seite des Herstellers.

Linux-Distribution auf der Kommandozeile ermitteln

Vor ein paar Tagen stand ich vor dem Problem, das ich ermitteln wollte welche Distribution auf einem Server lief. Die Kernelversion einer Linux-Distribution kann dabei einfach über:

uname -or

ermittelt werden. Als Ausgabe erhält man z.B.

3.10.0-229.el7.x86_64 GNU/Linux

Um die Distribution weiter einzugrenzen könnte man Dateien nutzen welche sich auf eine bestimmte Distribution beziehen – unter Ubuntu wäre dies die Datei lsb-release. Distributionsübergreifender funktioniert die Ermittlung derselben mit:

cat /etc/issue

Für ein Ubuntu 14.04 LTS würde die Ausgabe dabei so aussehen:

Ubuntu 14.04.03 LTS

Bei bestimmten Distribution kann es allerdings auch bei der issue-Datei passieren, das diese Datei leer ist und man somit tiefer graben muss um die Distribution zu ermitteln.

Distrochooser

Durch einen Blogbeitrag bin ich auf den kleinen Dienst mit dem Namen Distrochooser gestoßen. Mit Hilfe dieses Dienstes kann man ermitteln welche Linux-Distribution für die eigene Nutzung in Frage kommen.

Die Startseite des Distrochooser

Die Startseite des Distrochooser

Nachdem man einige Fragen beantwortet hat, bekommt man eine Liste von Distributionen angezeigt, welche zu den Antworten passen. Interessant fand ich, das andere Distribution, als die von mir präferierten Distribution vorgeschlagen wurden. Eventuell sollte man noch eine Gewichtung der einzelnen Fragen einbauen, damit bestimmte Präferenzen (wie z.B. ein bestimmtes Paketsystem) klarer definiert werden können.

elementary OS

Linux-Distributionen gibt es förmlich wie Sand am Meer. Eine Distribution, welche ein wenig hervorsticht ist dabei „elementary OS“. Wenn man auf der Webseite umschaut, wird man feststellen, das die Oberfläche etwas an Mac OS X erinnert. elementary OS konzentriert sich dabei darauf, dem Nutzer eine konsistente Oberfläche und ein entsprechendes Nutzererlebnis zu liefern.

elementary1

Das führt dazu, das es unter elementary OS im Standardumfang nur Anwendungen gibt, welche GTK+ als Toolkit nutzen. Alle Standardanwendungen nutzen somit das gleiche Toolkit, was dem Look & Feel zu gute kommt. Wer hier einen Firefox sucht, wird enttäuscht werden.

Technisch basiert elementary OS auf Ubuntu 12.04, ist allerdings im Gegensatz zu diesem nur für die Plattformen x86 und x86-64 verfügbar. Eine Portierung auf ARM Prozessoren wäre wünschenswert. Durch die Deaktivierung unnötiger Dienste, fühlt sich das ganze in der Bedienung sehr flott an. Die offizielle Seite von elementary OS ist unter http://elementaryos.org/ zu finden.

Weitere Informationen gibt es unter:
https://de.wikipedia.org/wiki/Elementary_%28Software%29#elementary_OS