¿Cómo saber a qué paquete (no instalado) pertenece un archivo en NixOS?

13

Estoy usando un administrador de paquetes Nix en NixOS . Supongamos que quiero instalar un paquete que proporciona un archivo libgtk-x11-2.0.so.0. ¿Cómo encuentro un paquete que proporcione este archivo, similar a otras distribuciones de GNU / Linux ?

Actualmente tengo que buscar en Google el archivo y averiguar a qué paquete pertenece y encontrar el paquete correspondiente en el repositorio de Nix, pero me gustaría un método más idiomático.

Mirzhan Irkegulov
fuente
1
Llegué a "configurar una base de datos ctags ..." nixos.org/wiki/… antes de rendirme .
thrig
Algunos administradores de paquetes (por ejemplo, yumy dnfen RPMland) le permiten decir "instalar archivo", descifran el paquete correcto e instalan ese.
vonbrand
2
Solo tenemos esto para ejecutables ATM ( $ command-not-found foo). Tenga en cuenta que buscar archivos nix (por ejemplo, con ctags) no ayudará allí. Debe realizar la compilación para encontrar lo que instala.
Vladimír Čunát
¿Por qué? ¿Hay otros gestores de paquetes que realmente tengan esa función? El método más "idiomático" es leer el INSTALLarchivo del paquete (para el que desea crear el entorno), es decir, la sección Requirements/ Dependenciespara los paquetes que debe tener preinstalados. Luego busque los paquetes en nixpkgs. (En otras palabras, los administradores de paquetes tratan sobre paquetes, no archivos ...)
Andrew Miloradovsky
3
@AndrewMiloradovsky, porque a veces se conoce el nombre de un comando (u otro nombre de archivo) pero no el nombre del paquete que lo proporciona. Y sí, otros gestores de paquetes tienen esa característica, por ejemplo, yum provides '*/bin/grep'or dnf provides '*/bin/grepo apt-file search 'fprintf.3.gz'.
maxschlepzig

Respuestas:

9

nix-index es lo que necesitas.

Instalar y construir el índice:

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

Localizar libgtk-x11-2.0.so.0:

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

Salida:

(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 última línea dice que el paquete gtk+-2.24.31con la ruta del atributo gnome2.gtkcontiene este archivo.

R. Taukulis
fuente
2

Mirando a través de la documentación, no parece que haya una manera fácil de hacerlo.

Con la distribución basada en yum puedes hacer yum provides $filey en apt-get distro puedes instalar apt-file y hacer apt-file $filepero no puedo ver un equivalente en nix-env -q.

sysadmiral
fuente