daemontools unter CentOS 7 installieren

Vor einigen Jahren waren DJBs daemontools ein hervorragendes Werkzeug, um Services unter Linux und Unix zu managen. Heute kennt kaum noch ein Administrator die daemontools. Aber sie sind nach wie vor sehr in einigen Fällen sehr nützlich, daher habe ich sie auf meinem RaspberryPi 2 unter CentOS 7 installiert.

In diesem Artikel möchte ich erklären, wie das funktioniert.

Zunächst benötigt man make, patch und gcc. Diese Pakete installiert man am besten mit yum.

Die daemontools sind als Quellcode nach wie vor auf der Website von DJB zu finden: daemontools-0.76.tar.gz
(SHA256 ist a55535012b2be7a52dcd9eccabb9a198b13be50d0384143bd3b32b8710df4c1f)

Herunterladen geht ganz einfach:

wget https://cr.yp.to/daemontools/daemontools-0.76.tar.gz

Anschließend noch auspacken:

tar xvfz daemontools-0.76.tar.gz

Jetzt sollte im aktuellen Pfad ein neues Verzeichnis mit dem Namen admin existieren.

Die daemontools waren immer ein Alien, was die üblichen Verzeichnisstrukturen unter Linux und Unix angeht. Sie waren nicht invasiv, aber sie arbeiteten mit Verzeichnissen, die irgendwie fehl am Platze wirkten. Um die daemontools unter /usr/local zu installieren und /var/service als Ort für die Services zu verwenden, muss ein Patch genutzt werden. Es braucht auch einige Patches, um sie mit dem aktuellen GCC unter CentOS 7 zu übersetzen.

Der Patch, den ich verwende, ist aus verschiedenen Quellen zusammengestellt:

diff -Nur admin.orig/daemontools-0.76/src/conf-cc admin/daemontools-0.76/src/conf-cc
--- admin.orig/daemontools-0.76/src/conf-cc     2001-07-12 18:49:49.000000000 +0200

@@ -1,3 +1,3 @@
-gcc -O2 -Wimplicit -Wunused -Wcomment -Wchar-subscripts -Wuninitialized -Wshadow -Wcast-qual -Wcast-align -Wwrite-strings
+gcc -O2 -Wimplicit -Wunused -Wcomment -Wchar-subscripts -Wuninitialized -Wshadow -Wcast-qual -Wcast-align -Wwrite-strings -I.

 This will be used to compile .c files.
diff -Nur admin.orig/daemontools-0.76/src/conf-ld admin/daemontools-0.76/src/conf-ld
--- admin.orig/daemontools-0.76/src/conf-ld     2001-07-12 18:49:49.000000000 +0200

@@ -1,3 +1,3 @@
-gcc -s
+gcc -s -I.

 This will be used to link .o files into an executable.
diff -Nur admin.orig/daemontools-0.76/src/error.h admin/daemontools-0.76/src/error.h
--- admin.orig/daemontools-0.76/src/error.h     2001-07-12 18:49:49.000000000 +0200

@@ -3,7 +3,7 @@
# ifndef ERROR_H
# define ERROR_H

-extern int errno;
+#include <errno.h>

 extern int error_intr;
 extern int error_nomem;
diff -Nur admin.orig/daemontools-0.76/src/home admin/daemontools-0.76/src/home
--- admin.orig/daemontools-0.76/src/home        1970-01-01 01:00:00.000000000 +0100

@@ -0,0 +1 @@
+/usr/local
 No newline at end of file
diff -Nur admin.orig/daemontools-0.76/src/sys/time.h admin/daemontools-0.76/src/sys/time.h
--- admin.orig/daemontools-0.76/src/sys/time.h  1970-01-01 01:00:00.000000000 +0100

@@ -0,0 +1,2 @@
+#include </usr/include/sys/time.h>
+#include </usr/include/time.h>

Dieser Patch sollte im gleichen Verzeichnis platziert werden, wie die Quellen der daemontools, und wie folgt angewendet werden:

cd admin && patch -p1 \< ../daemontools-0.76.patch

Nun können die daemontools kompiliert werden:

cd admin/daemontools-0.76/src && make

Nach dem Kompilieren müssen die Tools nach /usr/local/bin kopiert werden. Leider kann das Makefile das nicht, daher muss das manuell erfolgen:

cd admin/daemontools-0.76/src && cp svscan svscanboot supervise svc svok svstat fghack pgrphack readproctitle multilog tai64n tai64nlocal softlimit setuidgid envuidgid envdir setlock /usr/local/bin

Nun braucht es noch das Verzeichnis für die Services:

mkdir /var/service

CentOS verwendet systemd, dem die daemontools noch bekannt gemacht werden müssen. Dazu braucht es zwei Dateien im Verzeichnis /etc/systemd/system.

[Unit]
Description=Daemontools service monitor

[Path]
DirectoryNotEmpty=/var/service/
Unit=svscan.service

[Install]
WantedBy=multi-user.target
[Unit]
Description=Daemontools service scanner

[Service]
ExecStart=/usr/local/bin/svscan /var/service/
Restart=always

[Install]
WantedBy=multi-user.target

Sind die beiden Dateien unter /etc/systemd/system vorhanden, muss systemd neu geladen werden:

systemctl daemon-reload

Zu guter Letzt kann svscan als zentraler Teil der daemontools gestartet werden:

systemctl enable svscan
systemctl start svscan

Gratulation, die daemontools laufen jetzt auf dem RaspberryPi unter CentOS.

Print Friendly, PDF & Email

Schreibe einen Kommentar

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