如何在NixOS上找出文件属于哪个(未安装)软件包?


13

我在NixOS上使用Nix软件包管理器。假设我要安装一个提供文件的软件包。我如何找到提供此文件的软件包,类似于其他GNU / Linux发行版libgtk-x11-2.0.so.0

目前,我必须搜索该文件并找出它可能属于哪个程序包,然后在Nix存储库中找到相应的程序包,但是我想使用一种更加惯用的方法。


1
在放弃之前,我至“建立了一个ctags数据库...” nixos.org/wiki/…
thrig

一些软件包管理器(例如yumdnf在RPMland中)允许您说“安装文件”,他们找出正确的软件包并进行安装。
vonbrand,2015年

2
对于可执行文件ATM($ command-not-found foo),我们只有此功能。请注意,搜索nix文件(例如使用ctags)将无济于事。您必须执行构建以查找其安装内容。
弗拉基米尔·Čunát2015年

为什么?其他软件包管理器真的有这样的功能吗?更多“惯用的”方法是读取INSTALL软件包的文件(您要为其创建环境),即必须预安装的软件包的Requirements/ Dependencies部分。然后查找nixpkgs。(换句话说,程序包管理器是关于程序包而不是文件...)
Andrew Miloradovsky 2016年

3
@AndrewMiloradovsky,因为有时您知道命令的名称(或其他文件名),但不知道提供该命令的软件包的名称。是的,其他包经理有这样的功能,例如yum provides '*/bin/grep'dnf provides '*/bin/grepapt-file search 'fprintf.3.gz'
maxschlepzig

Answers:


9

nix-index是您所需要的。

安装并构建索引:

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

定位libgtk-x11-2.0.so.0

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

输出:

(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

最后一行说gtk+-2.24.31带有属性路径的包gnome2.gtk包含此文件。


2

浏览文档看起来似乎没有一种简单的方法可以做到这一点。

使用基于yum的发行版可以执行,yum provides $file而在apt-get发行版中可以安装apt-file并执行,apt-file $file但是我看不到中的等效项nix-env -q

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.