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.