Angenommen, ich nix-env
installiere ein Paket, das SystemD verwendet, auf einem Ubuntu-Host. Was muss getan werden, um Ubuntus SystemD auf die SystemD-Module aufmerksam zu machen, die aus Nix-Paketen stammen?
Versuchen wir, die von Nix installierten .service
Dateien /lib/systemd/system/
für das Apache Kafka- Paket zu finden und sie zu verknüpfen .
nix-env -i apache-kafka
sudo systemctl start apache-kafka # Failed to start apache-kafka.service: Unit apache-kafka.service not found.
sudo updatedb && locate apache-kafka.service # No dice
locate kafka | grep service # Just a bunch of `.nix` files
Hier errate ich den Dienstnamen basierend auf dem Namen der Dienstkonfiguration in der Nix- Paketdefinition . Ich konnte keine Dokumentation finden, die beschreibt, wie und wo diese Konfiguration zu einer SystemD-Dienstdatei wird.
Als das nicht funktionierte, fing ich an, mich wirklich umzuschauen, unter der Annahme, dass Nix diese Servicedatei irgendwo erstellt haben muss. Aber jetzt fange ich an zu bezweifeln, dass es existiert. Sollen vom Nix-Paketmanager installierte SystemD-Module außerhalb von NixOS funktionieren, und wenn ja, wie funktionieren sie?
.service
Dateien statt.system
Dateien?Antworten:
Unter NixOS können
environment.systemPackages = [ package ];
die systemd-Einheiten des Pakets im System installiert werden. BeweisEinheiten in
/nix/store/hash-package/lib/systemd/system
werden kopiert/run/current-system/sw/lib/systemd/system
, die dann von systemd als zusätzliches Dienstverzeichnis verwendet werden.Wenn Sie also bei der Installation des Pakets als Root Serviceeinheiten verwenden möchten, stellen Sie sicher, dass der Pfad
/root/.nix-profile/lib/systemd/system
zusätzlich zu systemd verwendet wird/etc/systemd/system
. Stellen Sie außerdem sicher, dass die Ableitung die Einheiten enthält.Völlig ungetestet, weil ich auf NixOS bin
quelle
Standort von * .service Dateien
Eelco Dolstra (Hauptautor von Nix) hat kürzlich eine ähnliche Frage beantwortet , wo sich die * .service- Dateien befinden :
Je nachdem, wie Sie eine Ableitung erstellen (offizieller Name für ein "Nix-Paket"), sollten die * .service- Dateien im resultierenden
$out/lib/systemd/system/
Verzeichnis verfügbar sein . (Wo für$out
Sie müssen möglicherweise unterschiedliche Werte eingesetzt werden, je nachdem, mit welchen Optionen Sie arbeitennix-build
.)Insbesondere wenn Sie nix-env -i verwenden (wie in Ihrem Fall), sollten Sie ~ / .nix-profile / als Ihr
$out
. Zum Beispiel auf einer meiner Maschinen:Aktivieren der Dienste in Ubuntus systemd
In Bezug auf diesen Teil der Frage bin ich mir im Moment nicht sicher, wie ich das machen soll, aber ich bin daran interessiert, etwas Ähnliches wie das zu konfigurieren, was Sie beschreiben.
Ich denke, die folgenden zusätzlichen "Teile" könnten benötigt werden:
~.nixprofile/...
Verzeichnis . (Übrigens: Ich glaube, dafür sollte ein spezieller Benutzer erstellt werden, da diese Dateien dann effektiv dem Sudo-Zugriff entsprechen.)systemctl enable --now $SERVICE
auf allen von Nix bereitgestellten Diensten ausgeführt wird;enabledServices = [ ... ];
.enabledServices
(möglicherweise durch Überprüfen der aktiven Dienste in systemctl, die vom Pfad geladen wurden.../.nix-profile/...
?).systemctl daemon-reload
?quelle
Es hört sich so an, als hätten Sie zwei Fragen:
Ihr
nix
Paket ist mit ziemlicher Sicherheit ein komprimiertes Archivformat wie.zip
oder a.tar.gz
, jedoch mit einer anderen Erweiterung. Sie können den Dateityp überprüfen, indem Sie das Nix-Paket herunterladen und dann dasfile
Tool verwenden:Angenommen, es verwendet das Format
.zip
oder.tar.gz
, können Sie den Inhalt des Pakets mit dem entsprechenden Befehlzip
odertar
Befehl auflisten. Normalerweise überlagern Paketinhalte das Dateisystem, sodass dies für Sie bestätigt, wenn es eine gibt.service
Datei im Paket befindet und wo sie möglicherweise installiert ist.Nix verfügt möglicherweise auch über einen Verpackungsbefehl, um die Frage zu beantworten, wo sich alle Dateien befinden, die zu diesem Paket gehören.
Die Antwort auf Ihre zweite Frage ist in
man systemd.unit
.systemd
sucht in den folgenden Verzeichnissen nach systemd- Systemeinheitendateien , in dieser Reihenfolge:Wenn sich Nix gut benimmt, hätte es
systemd
Dateien installiert/lib/systemd/system
. Wenn eine.service
Datei an einer anderen Stelle installiert wurde , sollten Sie sie kopieren oder verknüpfen./etc/systemd/system
Nur Paketmanager sollten die Dateien in ändern/lib/systemd/system
.quelle
Ich denke,
nix-env
installierte Pakete werden von systemd selbst unter NixOS nicht gefunden, und wenn ich von Systemdiensten spreche , würde ich es als Fehler betrachten, wenn es anders wäre. (Für Benutzerdienste wäre dies sinnvoll, aber ich kenne den Status des Supports nicht.)quelle