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.