Sie können systemd-Voreinstellungen verwenden, um zu beeinflussen, ob ein systemd-Dienst bei der Installation standardmäßig aktiviert oder deaktiviert wird.
Die Debian-Voreinstellungen aktivieren standardmäßig alle Dienste, während sie installiert sind. Sie müssen also nur eine Voreinstellung an die Entwicklungsarbeitsstationen senden (das Standardverhalten entspricht dem, was in der Produktion geschehen soll), indem Sie eine Datei versenden, /etc/systemd/system-preset/80-foo.preset
die beispielsweise eine Zeile enthält, die sagt
disable foo.service
Wenn Sie Ihre Entwicklerarbeitsstationen mit einem System wie Puppet, Chef, Ansible usw. verwalten, können Sie mit ihnen eine solche voreingestellte Systemkonfiguration ausliefern, die es Ihnen erleichtern sollte, die Richtlinie nur auf Entwicklerarbeitsstationen und nicht auf die Produktion anzuwenden Maschinen.
Ihr .deb-Paket sollte den systemctl preset
Befehl verwenden, um den Dienst zu aktivieren, da dieser Befehl die voreingestellte Konfiguration berücksichtigt.
Wie @JdeBP und @sourcejedi hervorheben, rufen die Debian-Makros in Deb-Helfern (wie z. B. dh_systemd_enable
) dies bereits auf. Diese deb-systemd-helper
werden systemctl preset
standardmäßig verwendet (mit einer kleinen Einschränkung, wenn Sie das Paket entfernen (aber nicht löschen), und Wenn Sie es später erneut installieren, wird der Dienst nicht aktiviert, selbst wenn Sie die voreingestellte Datei entfernen.) Siehe diesen Kommentar in deb-systemd-helper
der enable
Operation :
# We use 'systemctl preset' on the initial installation only.
# On upgrade, we manually add the missing symlinks only if the
# service already has some links installed. Using 'systemctl
# preset' allows administrators and downstreams to alter the
# enable policy using systemd-native tools.
Weitere Informationen zur systemd-Funktion von Voreinstellungen finden Sie in der Manpage der systemd-Voreinstellungen und des Befehls, systemctl preset
der sie implementiert.
*.preset
Dateien als Teil dieses Pakets installieren .deb-systemd-helper
beim ersten Installieren eines Pakets konsultiert werden . Danach wird stattdessen die von den Debian-Tools verwaltete parallele Datenbank konsultiert, bis das Paket gelöscht wird. news.ycombinator.com/item?id=18320131deb-systemd-helper
Presets zu verwenden. Dies sollte funktionieren, ohne dass ein manueller systemctl-Voreinstellungsbefehl im .deb-Paket erforderlich ist. Die Debian-spezifische Eigenart ist, was passiert, wenn Sie das Paket entfernen (aber nicht löschen). Wenn Sie das Paket später erneut installieren, wird der Dienst nicht aktiviert, selbst wenn Sie die voreingestellte Datei entfernen. salsa.debian.org/debian/init-system-helpers/blob/debian/1.56/…Wenn Sie den Benutzer während der Installation auffordern möchten, sollten Sie verwenden
debconf
. Dies hat eine Reihe von Vorteilen, auch wenn Sie sich nicht in einem Kontext befinden, in dem die Debian-Richtlinie relevant ist: Es bietet eine konsistente Endbenutzererfahrung mit Unterstützung für eine Vielzahl von Frontends. es unterstützt verschiedene "Ebenen"; es unterstützt das Pre-Seeding. Pre-Seeding bedeutet, dass das Paket vorkonfiguriert werden kann. In diesem Fall wird es überhaupt nicht dazu aufgefordert. Aufgrund der verschiedenen Ebenen kann eine Eingabeaufforderung so eingerichtet werden, dass sie nur unter bestimmten Umständen angezeigt wird. Sie können das Paket dann ohne Aufforderung standardmäßig installieren lassen (für Ihre eingebetteten Ziele) und Ihre Entwickler anweisen, ihr Frontend bei der Installation des Pakets entsprechend einzurichten, damit sie die Eingabeaufforderung sehen.Ich denke jedoch, dass es besser ist, wenn möglich keine Eingabeaufforderungen zu vermeiden. Dies gilt insbesondere für Dienste, die andere Möglichkeiten zum Umgang mit Endbenutzereinstellungen haben und bei denen der Umgang mit Benutzereinstellungen die Betreuerskripte kompliziert (siehe die generierten Skripte in Ihrem Paket, sie behandeln bereits eine Reihe subtiler Probleme, indem
deb-systemd-helper
Sie - Sie verwenden Ich müsste all das replizieren, wobei Ihre Präferenzbehandlung an oberster Stelle steht.Wenn Ihre Entwickler den Dienst niemals ausführen müssen, können sie ihn vor der Installation des Pakets maskieren, und der Dienst wird niemals aktiviert:
Wenn Ihre Entwickler den Dienst manchmal mithilfe der systemd-Einheit ausführen müssen, können sie ihn nach der ersten Installation des Pakets deaktivieren. Bei nachfolgenden Installationen wird Folgendes berücksichtigt:
Die Standardeinstellung wäre dann, den Dienst zu aktivieren.
quelle
debconf
sieht aus wie das, was ich mir vorgestellt habe, aber ich stimme zu, dass es am besten ist, wenn möglich keine Aufforderung zu geben. Ich wusste von demsystemctl disable
, aber ich habe versucht, dem Benutzer zu helfen, ein "Überspringen eines Schritts" während der Installation zu vermeiden. Die*.presets
von Filippe vorgeschlagene Lösung löst dies.