Wie finde ich heraus, zu welchem ​​(nicht installierten) Paket eine Datei auf NixOS gehört?

13

Ich verwende einen Nix-Paketmanager unter NixOS . Angenommen, ich möchte ein Paket installieren, das eine Datei bereitstellt libgtk-x11-2.0.so.0. Wie finde ich ein Paket, das diese Datei enthält, ähnlich wie andere GNU / Linux-Distributionen ?

Derzeit muss ich die Datei googeln und herausfinden, zu welchem ​​Paket es gehören könnte, und das entsprechende Paket im Nix-Repository finden, aber ich hätte gerne eine idiomatischere Methode.

Mirzhan Irkegulov
quelle
1
Ich bin bis zum "Einrichten einer ctags-Datenbank ..." gekommen, bevor ich aufgegeben habe.
Am
Bei einigen Paketmanagern (z. B. yumund dnfin RPMland) können Sie "install file" sagen, sie finden das richtige Paket und installieren dieses.
Vonbrand
2
Wir haben dies nur für ausführbare Dateien ATM ( $ command-not-found foo). Beachten Sie, dass das Durchsuchen von nix-Dateien (zB mit ctags) dort nicht hilft. Sie müssen den Build ausführen, um herauszufinden, was er installiert.
Vladimír Čunát
Warum? Haben andere Paketmanager wirklich eine solche Funktion? Eine "idiomatische" Methode ist das Lesen der INSTALLDatei des Pakets (für das Sie die Umgebung erstellen möchten), nämlich des Abschnitts Requirements/ Dependenciesfür die Pakete, die Sie vorinstallieren müssen. Dann suchen Sie nach den Paketen in nixpkgs. (Mit anderen Worten, bei Paketmanagern geht es um Pakete, nicht um Dateien ...)
Andrew Miloradovsky
3
@AndrewMiloradovsky, weil Sie manchmal den Namen eines Befehls (oder einen anderen Dateinamen) kennen, aber nicht den Namen des Pakets, das ihn bereitstellt. Und ja, andere Paketmanager haben eine solche Funktion, z . B. yum provides '*/bin/grep'oder dnf provides '*/bin/grepoder apt-file search 'fprintf.3.gz'.
Maxschlepzig

Antworten:

8

nix-index ist was du brauchst.

Installieren und erstellen Sie den Index:

nix-env -iA nixos.nix-index
nix-index

Suchen Sie libgtk-x11-2.0.so.0:

nix-locate -w libgtk-x11-2.0.so.0

Ausgabe:

(zed.out)                                             0 s /nix/store/bc4mngklj2j7hmm21jra4641x4pm9r8z-node-webkit-env/lib/libgtk-x11-2.0.so.0
(thrust.out)                                          0 s /nix/store/wzg0k4i2cy0qsm3hwxlywxxbga019hbq-env-thrust/lib/libgtk-x11-2.0.so.0
(nwjs_0_12.out)                                       0 s /nix/store/js6klvzjfi5q4djmwb0bqzfb4x0vzm6g-nwjs-env/lib/libgtk-x11-2.0.so.0
(node_webkit_0_11.out)                                0 s /nix/store/30vm6a7bmc56ckl575rqassw60ccxjpg-node-webkit-env/lib/libgtk-x11-2.0.so.0
(mumble_overlay.out)                                  0 s /nix/store/wayx023w1nslqg2z0c5v4n0b4jxn5n06-gtk+-2.24.31/lib/libgtk-x11-2.0.so.0
gnome2.gtk.out                                        0 s /nix/store/3iqchhncghm5s458lzy99c3prfymrnp2-gtk+-2.24.31/lib/libgtk-x11-2.0.so.0

In der letzten Zeile steht, dass das Paket gtk+-2.24.31mit dem Attributpfad gnome2.gtkdiese Datei enthält.

R. Taukulis
quelle
2

In der Dokumentation sieht es nicht so aus, als gäbe es eine einfache Möglichkeit, dies zu tun.

Mit yum-basierter Distribution können Sie yum provides $fileapt-file installieren und in apt-get distro können Sie apt-file installieren und tun, apt-file $fileaber ich kann kein Äquivalent in sehen nix-env -q.

Sysadmiral
quelle