Como descobrir a qual pacote (não instalado) um arquivo pertence no NixOS?

13

Estou usando um gerenciador de pacotes Nix no NixOS . Suponha que eu queira instalar um pacote que forneça um arquivo libgtk-x11-2.0.so.0. Como encontro um pacote que fornece esse arquivo, semelhante a outras distribuições GNU / Linux ?

Atualmente, tenho que pesquisar no Google e descobrir qual pacote ele pode pertencer e encontrar o pacote correspondente no repositório Nix, mas gostaria de um método mais idiomático.

Mirzhan Irkegulov
fonte
1
Cheguei a "configurar um banco de dados ctags ..." nixos.org/wiki/… antes de desistir.
thrig
Alguns gerenciadores de pacotes (por exemplo, yume dnfno RPMland) permitem que você diga "arquivo de instalação", eles descobrem o pacote correto e o instalam.
vonbrand
2
Só temos isso para executáveis ​​ATM ( $ command-not-found foo). Observe que pesquisar arquivos nix (por exemplo, com ctags) não ajudará lá. Você precisa executar a compilação para encontrar o que instala.
Vladimír Čunát 30/12/2015
Por quê? Outros gerenciadores de pacotes realmente têm essa função? Um método mais "idiomático" é ler o INSTALLarquivo do pacote (para o qual você deseja criar o ambiente), ou seja, a seção Requirements/ Dependenciespara os pacotes que você precisa ter pré-instalado. Em seguida, procure os pacotes no nixpkgs. (Em outras palavras, gerenciadores de pacotes são cerca de pacotes de arquivos não ...)
Andrew Miloradovsky
3
@AndrewMiloradovsky, porque às vezes você sabe o nome de um comando (ou outro nome de arquivo), mas não o nome do pacote que o fornece. E sim, outros gerenciadores de pacotes têm esse recurso, por exemplo, yum provides '*/bin/grep'ou dnf provides '*/bin/grepou apt-file search 'fprintf.3.gz'.
maxschlepzig

Respostas:

9

nix-index é o que você precisa.

Instale e construa o índice:

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

Localize libgtk-x11-2.0.so.0:

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

Resultado:

(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

A última linha diz que o pacote gtk+-2.24.31com o caminho do atributo gnome2.gtkcontém esse arquivo.

R. Taukulis
fonte
2

Examinando a documentação, parece que não há uma maneira fácil de fazer isso.

Com a distro baseada no yum, você pode fazer yum provides $filee no apt-get distro você pode instalar o apt-file e o make, apt-file $filemas não consigo ver um equivalente no nix-env -q.

sysadmiral
fonte