Jak dowiedzieć się, do którego (niezainstalowanego) pakietu należy plik na NixOS?


13

Używam menedżera pakietów Nix na NixOS . Załóżmy, że chcę zainstalować pakiet, który udostępnia plik libgtk-x11-2.0.so.0. Jak znaleźć pakiet, który udostępnia ten plik, podobny do innych dystrybucji GNU / Linux ?

Obecnie muszę google znaleźć plik i dowiedzieć się, do którego pakietu może należeć, i znaleźć odpowiedni pakiet w repozytorium Nix, ale chciałbym bardziej idiomatyczną metodę.


1
Doszedłem do „skonfigurowania bazy danych ctags ...” nixos.org/wiki/… przed poddaniem się.
— thrig

Niektóre menedżery pakietów (np yumoraz dnfw RPMland) pozwala powiedzieć „zainstalować plik” one zorientować się w odpowiedni pakiet i zainstalować jeden.
— vonbrand,

2
Mamy to tylko dla plików wykonywalnych ATM ( $ command-not-found foo). Zauważ, że wyszukiwanie plików nix (np. Za pomocą ctags) nie pomoże. Musisz wykonać kompilację, aby znaleźć to, co instaluje.
— Vladimír Čunát,

Dlaczego? Czy inni menedżerowie pakietów naprawdę mają taką funkcję? Bardziej „idiomatyczną” metodą jest odczytanie INSTALLpliku pakietu (dla którego chcesz stworzyć środowisko), a mianowicie sekcji Requirements/ Dependenciesdla pakietów, które musisz mieć wstępnie zainstalowane. Następnie poszukaj pakietów w nixpkgs. (Innymi słowy, menedżerowie pakietów dotyczą pakietów, a nie plików ...)
— Andrew Miloradovsky,

3
@AndrewMiloradovsky, ponieważ czasami znasz nazwę polecenia (lub innej nazwy pliku), ale nie nazwę pakietu, który je udostępnia. I tak, inne menedżery pakietów mają taką cechę, jak np yum provides '*/bin/grep'lub dnf provides '*/bin/greplub apt-file search 'fprintf.3.gz'.
— maxschlepzig

Odpowiedzi:


9

Nix-index jest tym, czego potrzebujesz.

Zainstaluj i skompiluj indeks:

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

Znajdź libgtk-x11-2.0.so.0:

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

Wynik:

(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

Ostatni wiersz mówi, że pakiet gtk+-2.24.31ze ścieżką atrybutu gnome2.gtkzawiera ten plik.


2

Przeglądając dokumentację nie wydaje się, że istnieje prosty sposób, aby to zrobić.

Z dystrybucją opartą na yumie możesz zrobić, yum provides $fileaw dystrybucji apt-get możesz zainstalować apt-file i zrobić, apt-file $fileale nie widzę odpowiednika w nix-env -q.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.