Comment savoir à quel package (non installé) appartient un fichier sur NixOS?

13

J'utilise un gestionnaire de packages Nix sur NixOS . Supposons que je veuille installer un package qui fournit un fichier libgtk-x11-2.0.so.0. Comment puis-je trouver un package qui fournit ce fichier, similaire aux autres distributions GNU / Linux ?

Actuellement, je dois google le fichier et déterminer à quel package il pourrait appartenir et trouver le package correspondant sur le référentiel Nix, mais je voudrais une méthode plus idiomatique.

Mirzhan Irkegulov
la source
1
Je suis allé jusqu'à "configurer une base de données ctags ..." nixos.org/wiki/… avant d'abandonner.
thrig
Certains gestionnaires de paquets (par exemple yumet dnfdans RPMland) vous permettent de dire "installer le fichier", ils trouvent le bon paquet et installent celui-ci.
vonbrand
2
Nous ne l'avons que pour les exécutables ATM ( $ command-not-found foo). Notez que la recherche de fichiers nix (par exemple avec ctags) n'y aidera pas. Vous devez effectuer la génération pour trouver ce qu'elle installe.
Vladimír Čunát
Pourquoi? D'autres gestionnaires de packages ont-ils vraiment une telle fonction? Une méthode plus "idiomatique" consiste à lire le INSTALLfichier du package (pour lequel vous souhaitez créer l'environnement), à savoir la section Requirements/ Dependenciespour les packages que vous devez préinstaller. Recherchez ensuite les packages dans nixpkgs. (En d'autres termes, les gestionnaires de packages concernent les packages et non les fichiers ...)
Andrew Miloradovsky
3
@AndrewMiloradovsky, car parfois vous connaissez le nom d'une commande (ou un autre nom de fichier) mais pas le nom du package qui la fournit. Et oui, d'autres gestionnaires de packages ont une telle fonctionnalité, par exemple yum provides '*/bin/grep'ou dnf provides '*/bin/grepou apt-file search 'fprintf.3.gz'.
maxschlepzig

Réponses:

9

nix-index est ce dont vous avez besoin.

Installez et construisez l'index:

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

Localiser libgtk-x11-2.0.so.0:

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

Production:

(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

La dernière ligne indique que le package gtk+-2.24.31avec le chemin d'attribut gnome2.gtkcontient ce fichier.

R. Taukulis
la source
2

En parcourant la documentation, il ne semble pas qu'il existe un moyen simple de le faire.

Avec la distribution basée sur yum, vous pouvez le faire yum provides $fileet dans la distribution apt-get, vous pouvez installer apt-file et faire, apt-file $filemais je ne vois pas d'équivalent dans nix-env -q.

amiral
la source