Come scoprire a quale pacchetto (non installato) appartiene un file su NixOS?


13

Sto usando un gestore di pacchetti Nix su NixOS . Supponiamo che io voglia installare un pacchetto che fornisce un file libgtk-x11-2.0.so.0. Come trovo un pacchetto che fornisce questo file, simile ad altre distribuzioni GNU / Linux ?

Attualmente devo cercare su Google il file e capire a quale pacchetto potrebbe appartenere e trovare il pacchetto corrispondente sul repository Nix, ma vorrei un metodo più idiomatico.


1
Sono arrivato a "impostare un database ctags ..." nixos.org/wiki/… prima di arrendermi.
thrig

Alcuni gestori di pacchetti (ad es. yumE dnfin RPMland) consentono di dire "installa file", trovano il pacchetto giusto e installano quello.
vonbrand,

2
Abbiamo questo solo per gli eseguibili ATM ( $ command-not-found foo). Nota che la ricerca di file nix (ad es. Con ctags) non ti aiuterà. Devi eseguire la build per trovare ciò che installa.
Vladimír Čunát,

Perché? Altri gestori di pacchetti hanno davvero una tale funzione? Il metodo più "idiomatico" è leggere il INSTALLfile del pacchetto (per il quale si desidera creare l'ambiente), in particolare la sezione Requirements/ Dependenciesper i pacchetti che devono essere preinstallati. Quindi cerca i pacchetti in nixpkgs. (In altre parole, i gestori di pacchetti riguardano pacchetti non file ...)
Andrew Miloradovsky

3
@AndrewMiloradovsky, perché a volte conosci il nome di un comando (o un altro nome file) ma non il nome del pacchetto che lo fornisce. E sì, altri gestori di pacchetti hanno una tale funzione, ad esempio yum provides '*/bin/grep'o dnf provides '*/bin/grepo apt-file search 'fprintf.3.gz'.
maxschlepzig,

Risposte:


9

nix-index è quello che ti serve.

Installa e crea l'indice:

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

Trova libgtk-x11-2.0.so.0:

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

Produzione:

(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

L'ultima riga dice che il pacchetto gtk+-2.24.31con il percorso dell'attributo gnome2.gtkcontiene questo file.


2

Guardando attraverso la documentazione non sembra che ci sia un modo semplice per farlo.

Con la distro basata su yum potresti fare yum provides $filee in apt-get distro potresti installare apt-file e farlo apt-file $filema non riesco a vedere un equivalente in nix-env -q.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.