kb

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
kb [2016/03/29 08:06]
flacco
kb [2020/10/20 10:47] (aktuell)
flacco [AMaViS]
Zeile 9: Zeile 9:
 ==== Microsoft Actice Directory ==== ==== Microsoft Actice Directory ====
  
-"​Active Directory"​ ist eine von Microsoft entwickelte Kombination aus Kerberos, LDAP-Verzeichnis und Domain-Name-Service. Dabei dient Kerberos der Benutzer-Authentifizierung und ermöglicht sogenanntes "​Single-Sign-On",​ das LDAP-Verzeichnis dient als zentraler Informationsspeicher und DNS wird für eine Technik namens "​Service Location"​ genutzt. Eingeführt wurde "​Active Directory"​ mit Einführung des "​Microsoft Servers 2000"​.{{ :​active-directory_ms.png?​300|}}+"​Active Directory"​ ist eine von Microsoft entwickelte Kombination aus [[https://​de.wikipedia.org/​wiki/​Kerberos_%28Informatik%29|Kerberos]][[https://​de.wikipedia.org/​wiki/​Lightweight_Directory_Access_Protocol|LDAP]]-Verzeichnis und Domain-Name-Service. Dabei dient Kerberos der Benutzer-Authentifizierung und ermöglicht sogenanntes "​Single-Sign-On",​ das LDAP-Verzeichnis dient als zentraler Informationsspeicher und DNS wird für eine Technik namens "​Service Location"​ genutzt. Eingeführt wurde "​Active Directory"​ mit Einführung des "​Microsoft Servers 2000"​.{{ :​active-directory_ms.png?​300|}}
  
-Single-Sign-On (SSO) ermöglicht,​ dass nur eine Anmeldung am System auch als Autorisierung für alle im Netzwerk angebotenen Dienste gilt. D.h. es genügt beispielsweise sich am eigenen PC mit Benutzernamen und Passwort anzumelden um danach ohne weitere Angabe von Benutzernamen oder Passwort auch Zugriff auf Dienste wie beispielsweise einen Exchange-Server zu erhalten.+[[https://​de.wikipedia.org/​wiki/​Single_Sign-on|Single-Sign-On]] (SSO) ermöglicht,​ dass nur eine Anmeldung am System auch als Autorisierung für alle im Netzwerk angebotenen Dienste gilt. D.h. es genügt beispielsweise sich am eigenen PC mit Benutzernamen und Passwort anzumelden um danach ohne weitere Angabe von Benutzernamen oder Passwort auch Zugriff auf Dienste wie beispielsweise einen Exchange-Server zu erhalten.
  
 Kerberos seinerseits verwaltet keinerlei eigenen Datenbestand. Die Daten auf die Kerberos zurückgreift werden in einem sogenannten LDAP-Verzeichnis abgelegt. Das LDAP-Verzeichnis stellt somit den zentralen Informationsspeicher des Active Directories dar. LDAP (Lightweight Directory Access Protocol) steht dabei sowohl für das Netzwerkprotokoll über welches auf die Informationen im Verzeichnis zugegriffen wird, als auch den Informationsspeicher selbst. Der Datenspeicher arbeitet "​objektorientiert"​ und somit gänzlich anders als eine relationale Datenbank. Der objektorientierte Ansatz ermöglicht es Netzwerk- oder Organisationsstrukturen eins zu ein im Datenspeicher abzubilden. Kerberos seinerseits verwaltet keinerlei eigenen Datenbestand. Die Daten auf die Kerberos zurückgreift werden in einem sogenannten LDAP-Verzeichnis abgelegt. Das LDAP-Verzeichnis stellt somit den zentralen Informationsspeicher des Active Directories dar. LDAP (Lightweight Directory Access Protocol) steht dabei sowohl für das Netzwerkprotokoll über welches auf die Informationen im Verzeichnis zugegriffen wird, als auch den Informationsspeicher selbst. Der Datenspeicher arbeitet "​objektorientiert"​ und somit gänzlich anders als eine relationale Datenbank. Der objektorientierte Ansatz ermöglicht es Netzwerk- oder Organisationsstrukturen eins zu ein im Datenspeicher abzubilden.
Zeile 25: Zeile 25:
 Mit Einführung von Samba 4.0 brachte Samba eine eigene Implementation von Microsofts Active Directory mit. Dies ermöglichte uns den Umstieg von openLDAP auf Active Directory. Um alle Informationen die der invis Classic im LDAP speicherte auch im AD speichern zu können mussten wir eigene Schemaerweiterungen einspielen und darüber hinaus auch den von uns verwendeten DHCP-Server des ISC (Internet Systems Consortium) patchen. Mit Einführung von Samba 4.0 brachte Samba eine eigene Implementation von Microsofts Active Directory mit. Dies ermöglichte uns den Umstieg von openLDAP auf Active Directory. Um alle Informationen die der invis Classic im LDAP speicherte auch im AD speichern zu können mussten wir eigene Schemaerweiterungen einspielen und darüber hinaus auch den von uns verwendeten DHCP-Server des ISC (Internet Systems Consortium) patchen.
  
-Als DNS-Server verwenden wir nicht den "Samba Internal DNS", sondern weiterhin "​bind"​ (ebenfalls vom ISC). Dies wird allerdings von Samba direkt unterstützt. Die Anbindung erfolgt hier über einen DLZ-Treiber den Samba selbst mitbringt.+Als DNS-Server verwenden wir nicht den "Samba Internal DNS", sondern weiterhin "​bind"​ (ebenfalls vom ISC). Dies wird allerdings von Samba direkt unterstützt. Die Anbindung erfolgt hier über einen DLZ-Treiber ​([[http://​bind-dlz.sourceforge.net/​|Dynamic Loadable Zone]]) ​den Samba selbst mitbringt. Nebenbei bemerkt ist es auch in Microsoft AD-Umgebungen möglich den DNS-Dienst auszulagern,​ ich habe das mit "ISC bind" bereits erfolgreich getestet.
  
 Für die Benutzerverwaltung haben sich die Vorzeichen umgekehrt. Beim invis Classic wurden im LDAP prinzipiell POSIX-kompatible Benutzerkonten angelegt, die um Windows- respektive Samba-Attribute ergänzt wurden. Mit Active Directory bilden jetzt Windows-Benutzerkonten die Basis, die um POSIX-Attribute erweitert werden. Da Microsoft dies selbst unter Verwendung der eigenen Erweiterung "​Services for UNIX" (SFU) anbietet, bricht es nicht die Kompatibilität zur MS-Welt. Unter Samba wird diese Ergänzung "RFC 2307 Erweiterung"​ genannt. ​ Für die Benutzerverwaltung haben sich die Vorzeichen umgekehrt. Beim invis Classic wurden im LDAP prinzipiell POSIX-kompatible Benutzerkonten angelegt, die um Windows- respektive Samba-Attribute ergänzt wurden. Mit Active Directory bilden jetzt Windows-Benutzerkonten die Basis, die um POSIX-Attribute erweitert werden. Da Microsoft dies selbst unter Verwendung der eigenen Erweiterung "​Services for UNIX" (SFU) anbietet, bricht es nicht die Kompatibilität zur MS-Welt. Unter Samba wird diese Ergänzung "RFC 2307 Erweiterung"​ genannt. ​
  
-Die Anbindung von Linux-Clients wird über eine Kombination aus Samba und {{https://​fedoraproject.org/​wiki/​Features/​SSSD|SSSD}} (System Security Services Daemon) realisiert. Dabei wird Samba genutzt um (genau wie Windows Clients) der Domäne beizutreten und SSSD ist für die Abbildung der Benutzerkonten via PAM auf Linux-Systemen sowie die Benutzeranmeldung selbst zuständig. Selbstverständlich wird auch hier Kerberos verwendet.+Die Anbindung von Linux-Clients wird über eine Kombination aus Samba und [[https://​fedoraproject.org/​wiki/​Features/​SSSD|SSSD]] (System Security Services Daemon) realisiert. Dabei wird Samba genutzt um (genau wie Windows Clients) der Domäne beizutreten und SSSD ist für die Abbildung der Benutzerkonten via PAM auf Linux-Systemen sowie die Benutzeranmeldung selbst zuständig. Selbstverständlich wird auch hier Kerberos verwendet.
  
 Genau wie es für Windows-Domänenmitglieder möglich ist, ermöglicht der SSSD auch für Linux-Clients Offline-Logins an der Domäne. Genau wie es für Windows-Domänenmitglieder möglich ist, ermöglicht der SSSD auch für Linux-Clients Offline-Logins an der Domäne.
Zeile 42: Zeile 42:
  
 ^Protokoll ​ ^Transportprotokoll ​ ^Port  ^Bemerkung ​ ^ ^Protokoll ​ ^Transportprotokoll ​ ^Port  ^Bemerkung ​ ^
-|Kerberos ​ |  TCP & UDP  |  88  |    +|Kerberos ​ |  TCP & UDP  |  88  |  ​Benutzerauthentifizierung  ​
-|LDAP  |  TCP & UDP  |  389  |    +|LDAP  |  TCP & UDP  |  389  |  ​Daten-Backend,​ Benutzerveraltung,​ DNS, DHCP und invis-Portal  ​
-|LDAPs ​ |  TCP  |  636  |    +|LDAPs ​ |  TCP  |  636  |  ​s.o.  ​
-|DNS  |  TCP & UDP  |  53  |    |+|DNS  |  TCP & UDP  |  53  ​|  Namensauflösung und Service-Location ​ | 
 +|    ​|  TCP  | 1024  |  Zugriff auf DNS-Daten mittels RSAT  ​|
 |GC  |  TCP  |  3268  |  Global Catalog ​ | |GC  |  TCP  |  3268  |  Global Catalog ​ |
 +|GC  |  TCP  |  3269  |  Global Catalog SSL  |
 |SMB/​CIFS ​ |  TCP & UDP  |  445  |  Zugriff auf sysvol Freigabe ​ | |SMB/​CIFS ​ |  TCP & UDP  |  445  |  Zugriff auf sysvol Freigabe ​ |
 |RPC  |  TCP  |  135  |Früheres Microsoft Messaging Protokoll, wird genutzt für die Replikation der sysvol Freigabe. Dies wird von Samba noch nicht unterstützt. ​ | |RPC  |  TCP  |  135  |Früheres Microsoft Messaging Protokoll, wird genutzt für die Replikation der sysvol Freigabe. Dies wird von Samba noch nicht unterstützt. ​ |
 +|    |  TCP & UDP  |  464  |  Replication,​ User and Computer Authentication,​ Trusts ​ |
 +
 +==== ISC DHCP mit ActiveDirectory ====
 +
 +Um den DHCP-Server des ISC mit einem Active Directory als Backend zu verwenden, muss dieser so gepatcht werden, dass er andere LDAP-Attribut- und Objektklassen-Namen akzeptiert. Dies ist notwendig, da Microsoft für seinen DHCP-Server teils identische Namen für Attribute und Objektklassen verwendet. Ohne das Patchen führt der Versuch einen ISC DHCP-Server Datenbestand aus einem OpenLDAP Verzeichnis in ein Active Directory zu migrieren zu "​Objectclass Violations"​ die nicht zu beheben sind.
 +
 +=== LDAP Patch erzeugen ===
 +
 +Den Patch zu erstellen ist etwas umständlich,​ da im openSUSE-Paket bereits Patches auf die von uns zu patchenden Dateien angewendet werden. D.h. um unseren Patch zu erzeugen müssen zunächst die anderen Patches auf den Quellcode angewendet werden.
 +
 +Zu patchen sind folgende Dateien:
 +
 +  * server/​ldap.c
 +  * contrib/​ldap/​README.ldap
 +  * contrib/​ldap/​dhcpd-conf-to-ldap
 +  * contrib/​ldap/​dhcp.shema
 +
 +Im ersten Schritt müssen aus dem Repository "​network:​dhcp"​ (https://​build.opensuse.org/​package/​show/​network:​dhcp/​dhcp) des openSUSE Buildservice das Quellcode-Archiv (dhcp-4.x.y.tar.gz),​ sowie die beiden Patches "​0007-dhcp-4.2.6-ldap-mt01.patch"​ und "​0022-dhcp-4.2.x-contrib-conf-to-ldap-reorder.886094.patch"​ heruntergeladen werden.
 +
 +Das Quellcode-Archiv ist in ein Arbeitsverzeichnis zu extrahieren. Danach sind die beiden heruntergeladenen Patches darauf anzuwenden:
 +
 +<​code>​
 +heinzb@knurps:​~/​baustelle/​dhcp-4.2.6>​ patch -p1 server/​ldap.c 0007-dhcp-4.2.6-ldap-mt01.patch
 +heinzb@knurps:​~/​baustelle/​dhcp-4.2.6>​ patch -p1 contrib/​ldap/​dhcpd-conf-to-ldap 0022-dhcp-4.2.x-contrib-conf-to-ldap-reorder.886094.patch
 +</​code>​
 +
 +Treten dabei Fehler auf, sind diese in einer auf **.rej** endenden Datei im Verzeichnis der zu patchenden Datei zu finden. Sind die Fehler überschaubar,​ lassen sich die Änderungen auch manuell durchführen.
 +
 +Jetz sind per suchen und ersetzen der Attributnamen und Objektklassen mit **//sed//** neue Dateien mit den gewünschten Änderungen zu erzeugen:
 +
 +<​code>​
 +heinzb@knurps:​~/​baustelle/​dhcp-4.2.6>​ cat server/​ldap.c | sed /​dhcp[A-Z]/​s/​dhcp/​iscDhcp/​g > server/​ad.ldap.c
 +heinzb@knurps:​~/​baustelle/​dhcp-4.2.6>​ cat contrib/​ldap/​README.ldap | sed /​dhcp[A-Z]/​s/​dhcp/​iscDhcp/​g > contrib/​ldap/​ad.README.ldap
 +heinzb@knurps:​~/​baustelle/​dhcp-4.2.6>​ cat contrib/​ldap/​dhcpd-conf-to-ldap | sed /​dhcp[A-Z]/​s/​dhcp/​iscDhcp/​g > contrib/​ldap/​ad.dhcpd-conf-to-ldap
 +heinzb@knurps:​~/​baustelle/​dhcp-4.2.6>​ cat contrib/​ldap/​dhcp.schema | sed /​dhcp[A-Z]/​s/​dhcp/​iscDhcp/​g > contrib/​ldap/​ad.dhcp.schema
 +</​code>​
 +
 +Jetzt werden mit //​**diff**//​ einzelne Patches für jede der Dateien erzeugt:
 +<​code>​
 +heinzb@knurps:​~/​baustelle/​dhcp-4.2.6>​ diff -u server/​ldap.c server/​ad.ldap.c > ../​ldap.c.patch
 +heinzb@knurps:​~/​baustelle/​dhcp-4.2.6>​ diff -u contrib/​ldap/​README.ldap contrib/​ldap/​ad.README.ldap > ../​README.ldap.patch
 +heinzb@knurps:​~/​baustelle/​dhcp-4.2.6>​ diff -u contrib/​ldap/​dhcpd-conf-to-ldap contrib/​ldap/​ad.dhcpd-conf-to-ldap > ../​dhcpd-conf-to-ldap.patch
 +heinzb@knurps:​~/​baustelle/​dhcp-4.2.6>​ diff -u contrib/​ldap/​dhcp.schema contrib/​ldap/​ad.dhcp.schema > ../​dhcp.schema.patch
 +</​code>​
 +
 +Jetzt müssen noch die Kopfzeilen der Einzelpatches angepasst werden. Aus:
 +
 +<​code>​
 +--- server/​ldap.c ​      ​2015-03-26 14:​24:​44.905456906 +0100
 ++++ server/​ad.ldap.c ​   2015-03-26 17:​12:​52.783318249 +0100
 +</​code>​
 +
 +wird:
 +
 +<​code>​
 +--- a/​server/​ldap.c ​      ​2015-03-26 14:​24:​44.905456906 +0100
 ++++ b/​server/​ldap.c ​   2015-03-26 17:​12:​52.783318249 +0100
 +</​code>​
 +
 +Danach werden alle Einzelpatches zum Gesamtpatch zusammengesetzt:​
 +
 +<​code>​
 +heinzb@knurps:​~/​baustelle>​ cat ldap.c.patch > 0099-AD-LDAP.patch ​
 +heinzb@knurps:​~/​baustelle>​ cat README.ldap.patch >> 0099-AD-LDAP.patch ​
 +heinzb@knurps:​~/​baustelle>​ cat dhcpd-conf-to-ldap.patch >> 0099-AD-LDAP.patch ​
 +heinzb@knurps:​~/​baustelle>​ cat dhcp.schema.patch >> 0099-AD-LDAP.patch
 +</​code>​
 +
 +Danach den Patch in unser Testing-Repositorie hochladen und die Spec-Datei des dhcp-Paketes anpassen:
 +
 +Ab Zeile 138 (ca.)
 +<​code>​
 +# invis-server.org Stefan Schaefer
 +Patch99: ​       0099-AD-LDAP.patch
 +</​code>​
 +
 +Ab Zeile: 282 (ca.)
 +<​code>​
 +%if %{with_ldap}
 +# Stefan Schaefer - invis-server.org
 +%patch99 -p1
 +%endif
 +%endif
 +## clean up after patching
 +find . -type f -name \*.orig\* -exec rm -f {} \;
 +find . -type f -name \*.rej\* -exec rm -f {} \;
 +</​code>​
 +
 +Die Zeilenangaben sind natürlich nicht genau, das sich das Spec-File mit jeder neuen Version ändern kann. Wichtig ist nur, dass unser Patch als letzter angewendete wird.
 +
 +=== Paketbenennung und Konfliktverhalten ===
 +
 +Um nicht mit den regulären DHCP-Paketen in den SUSE Repositories in Konkurrenz zu geraten, haben wir unsere Pakete umbenannt. Sie tragen jetzt die Vorsilbe "​invis":​
 +
 +  * invisdhcp
 +  * invisdhcp-server
 +  * invisdhcp-client
 +  * invisdhcp-relay
 +  * invisdhcp-devel
 +  * invisdhcp-doc
 +
 +Die Umbenennung erfolgt im Specfile. Weiterhin wurde in den Paketen die Direktive "​Conflict"​ im Specfile verwendet. Dadurch können nur entweder die ungepatchten oder die gepatchten Pakete auf einem System installiert werden. Auch dies wird im Specfile eingetragen:​
 +
 +**Namensdefinition**
 +ab Zeile 35:
 +<​code>​
 +Name:           ​invisdhcp
 +%define originname dhcp
 +....
 +Source0: ​       dhcp-%{isc_version}.tar.gz
 +Source1: ​       dhcp-%{isc_version}.tar.gz.asc
 +Source2: ​       %{originname}.keyring
 +</​code>​
 +
 +Die Variable %originname musste hinzugefügt werden, da der Originalname weiterhin beim Paketbau benötigt wird.
 +
 +**Conflict & Requires Direktiven**
 +ab Zeile 146
 +<​code>​
 +Conflicts: dhcp
 +
 +%package server
 +Summary: ​       ISC DHCP Server
 +Group: ​         Productivity/​Networking/​Boot/​Servers
 +Requires: ​      ​invisdhcp = %{version}
 +Requires: ​      ​net-tools
 +Conflicts:​ dhcp-server
 +PreReq: ​        ​%insserv_prereq %fillup_prereq /bin/cat /bin/mkdir /bin/cp /​usr/​sbin/​useradd
 +
 +%package client
 +Summary: ​       ISC DHCP Client
 +Group: ​         Productivity/​Networking/​Boot/​Clients
 +Requires: ​      /​sbin/​arping
 +Requires: ​      /​usr/​bin/​host
 +Requires: ​      ​invisdhcp = %{version}
 +Requires: ​      ​iproute2
 +Requires: ​      ​net-tools
 +Conflicts:​ dhcp-client
 +PreReq: ​        ​%insserv_prereq %fillup_prereq /bin/cat /bin/mkdir /bin/cp /bin/grep
 +
 +%package relay
 +Summary: ​       ISC DHCP Relay Agent
 +Group: ​         Productivity/​Networking/​Boot/​Servers
 +Requires: ​      ​invisdhcp = %{version}
 +Requires: ​      ​net-tools
 +Conflicts:​ dhcp-relay
 +PreReq: ​        ​%insserv_prereq %fillup_prereq /bin/cat /bin/mkdir /​bin/​cp ​
 +
 +%package devel
 +Summary: ​       Header Files and Libraries for dhcpctl API
 +Group: ​         Development/​Libraries/​C and C++
 +Requires: ​      ​invisdhcp = %{version}
 +Conflicts:​ dhcp-devel
 +Conflicts: ​     bind-devel
 +
 +%if %{with_doc_package}
 +
 +%package doc
 +Summary: ​       Documentation
 +Conflicts:​ dhcp-doc
 +Group: ​         Productivity/​Networking/​Boot/​Servers
 +%endif
 +</​code>​
 +
 +Wie gezeigt sind Anpassungen in allen Einzelpaketen erforderlich. Mittels Conflicts und Requires werden die erforderlichen Paketabhängigkeiten gelöst.
 +
 ===== DNS-Server bind und LDAP (invis Classic) ===== ===== DNS-Server bind und LDAP (invis Classic) =====
  
Zeile 487: Zeile 655:
  
 ==== AMaViS ==== ==== AMaViS ====
 +
 +=== Konfiguration ===
  
 In der AMaViS-Konfiguration müssen keine besonderen Einstellungen für Annahme und Rückgabe der Mails vorgenommen werden, da die bisher besprochenen Transportwege den Standard-Vorgaben von AMaViS entsprechen. In der AMaViS-Konfiguration müssen keine besonderen Einstellungen für Annahme und Rückgabe der Mails vorgenommen werden, da die bisher besprochenen Transportwege den Standard-Vorgaben von AMaViS entsprechen.
Zeile 514: Zeile 684:
 </​code>​ </​code>​
  
 +=== Neue Konfigurationsdirektiven ab Version 2.6.x ===
 +
 +In Versionen neuer 2.6.x ist Amavis in der Lage eingehende SMTP-Verbindungen zu cachen. Das reduziert auf hochfrequentierten Servern die CPU-Last. Auf nur gering belasteten Servern kann es jedoch zu Timeouts bei der Mail-Übergabe an Amavis kommen. Hier die originale Dokumentation dazu:
 +
 +//"
 +  A current value of a global settings $smtp_connection_cache_enable
 +  controls whether a session will be retained after forwarding a message
 +  or not. Its default initial value is true.
 +
 +  A global setting $smtp_connection_cache_on_demand controls whether amavisd
 +  is allowed to dynamically change the $smtp_connection_cache_enable setting
 +  according to its estimate of the message frequency. The heuristics is
 +  currently very simple: if time interval between a previous task completion
 +  by this child process and the arrival of a current message is 5 seconds
 +  or less, the $smtp_connection_cache_enable is turned on (which will affect
 +  the next message); if the interval is 15 seconds or more, it is turned off.
 +  The default value of the $smtp_connection_cache_on_demand is true, thus
 +  enabling the adaptive behaviour.
 +
 +  On a busy server the connection caching can save some processing time.
 +  Savings are substantial if client-side TLS is enabled, otherwise just a
 +  few milliseconds are saved. On an idle server the feature may unnecessarily
 +  keep sessions to MTA open (until MTA times them out), so one can disable
 +  the feature by setting both controls to false (to 0 or undef).
 +"//
 +
 +D.h. beide Werte sind auf gering belasteten Servern auf "​0"​ zu setzen um Postfix nicht zu verwirren. Das Verhalten von Postfix im Falle eines Timeouts ist merkwürdig. Unter Umständen scheint die eingehende SMTP-Sitzung noch gecached zu sein, d.h. Postfix hat noch kein finales Reject, versucht aber dennoch die Mail ein zweites Mal an Amavis zu übergeben. Gelingt der zweite Zustellversuch kommt es dazu, dass eine Mail einerseits ankommt aber der Absender dennoch nach Ablauf eines Timouts des ersten Versuchs eine Undelivery Meldung erhält. Konfusion perfekt!
 +
 +Die Rückmail enthält folgende Fehlermeldung:​
 +
 +<​code>​
 +451 4.3.0 Error: queue file write error
 +</​code>​
 +
 +Wird eine neue Amavisd-Installation mit einer alten Konfigurationsdatei betrieben, fehlen die zugehörigen Konfigurationsdirektiven und müssen ergänzt werden:
 +
 +<​code>​
 +...
 +$smtp_connection_cache_on_demand = 0;
 +$smtp_connection_cache_enable = 0;
 +...
 +</​code>​
 +
 +Beide Direktiven sind auf 0 zu setzen.
 ==== Postfix - Rücknahme und Weitergabe an Dovecot ==== ==== Postfix - Rücknahme und Weitergabe an Dovecot ====
  
Zeile 621: Zeile 835:
 ...to be continued. ...to be continued.
  
 +===== Autostart von Docker Containern mittels Systemd =====
 +
 +Docker Container, die einen Dienst anbieten sollen natürlich beim Start eines Systems möglichst automatisch starten. Außer der Docker-eigenen "​Restart=always"​ Möglichkeit,​ die bisweilen ein wenig nervig sein kann, bietet sich die Verwendung von **//​systemd//​** an.
 +
 +Leider ist die in der Docker-Dokumentation beschriebene Service-Unit Vorlage ein wenig zu simpel gestrickt. Sie funktioniert nicht immer. Es kommt vor, dass es mit dieser Vorlage während des Systemstarts unzählige scheiternde Versuche gibt einen Container zu starten und **//​systemd//​** dann irgendwann aufgibt.
 +
 +Daher hier eine Vorlage, die auch mit störrischen Containern funktioniert:​
 +
 +<​code>​
 +[Unit]
 +Description=BlaBlaBla Firebird-Server Container
 +Requires=docker.service
 +After=docker.service network.service
 +
 +[Service]
 +Restart=on-failure
 +RestartSec=10
 +ExecStart=/​usr/​bin/​docker run --volume=/​srv/​docker/​blablafb/​data:/​data --publish=3050:​3050 --name=leberwurst blablablasoftware/​db_server
 +ExecStop=/​usr/​bin/​docker stop -t 2 leberwurst
 +ExecStopPost=/​usr/​bin/​docker rm -f leberwurst
 +
 +[Install]
 +WantedBy=multi-user.target
 +</​code>​
 +
 +Dieser Vorlage unterscheidet sich an mehreren Punkten von der in der Docker-Doku gezeigten.
 +
 +Zunächst wird für die Restart-Option der Parameter "​on-failure"​ statt "​always"​ genutzt. Dies verhindert unnötige Neustarts. Ich vermute, dass die Rückmeldungen von Docker nicht dem entsprechen,​ was //​**systemd**//​ erwartet und daher mit "​always"​ Neustarts ausgelöst werden, die nicht notwendig sind.
 +
 +Auch im Fehlerfall sollte zwischen den Neustarts eine Pause liegen, da der Docker-Container ggf. nicht so schnell agiert, wie //​**systemd**//​ das erwartet. "​RestartSec=10"​ setzt diese Pause auf 10 Sekunden.
 +
 +Da ich im Beispiel dem Container mit "​--name="​ einen reproduzierbaren Namen gebe, scheitern zu schnelle Neustarts oft daran, dass bereits ein Container mit diesem Namen existiert (...auch wenn dieser nicht funktioniert). Mit "​ExecStopPost="​ wird nach einem Stoppen des Containers dieser auch entfernt. Damit steht er einem Neustart unter gleichem Namen nicht im Weg.
 +
 +Gespeichert werden die Container-Service-Unit Dateien unter: <​file>/​etc/​systemd/​system</​file>​
 +
 +Eine Veränderung dieser Dateien muss mit
 +
 +<​code>​
 +linux:~ # systemctl daemon-reload
 +</​code>​
 +
 +übernommen werden.
  • kb.1459238763.txt.gz
  • Zuletzt geändert: 2016/03/29 08:06
  • von flacco