Как узнать, к какому (не установленному) пакету относится файл в NixOS?


13

Я использую менеджер пакетов Nix на NixOS . Предположим, я хочу установить пакет, который предоставляет файл libgtk-x11-2.0.so.0. Как мне найти пакет, который предоставляет этот файл, похожий на другие дистрибутивы GNU / Linux ?

В настоящее время я должен погуглить файл и выяснить, к какому пакету он может принадлежать, и найти соответствующий пакет в репозитории Nix, но мне нужен более идиоматический метод.


1
Я дошел до "установки базы данных ctags ..." nixos.org/wiki/… прежде чем сдаться.
Thrig

Некоторые менеджеры пакетов (например, yumи dnfв RPMland) позволяют вам сказать «установить файл», они выясняют правильный пакет и устанавливают тот.
vonbrand

2
У нас это только для исполняемых файлов ATM ( $ command-not-found foo). Обратите внимание, что поиск файлов nix (например, с помощью ctags) там не поможет. Вы должны выполнить сборку, чтобы найти то, что она устанавливает.
Владимир Чунат

Почему? Есть ли у других менеджеров пакетов такая функция? Более «идиоматическим» методом является чтение INSTALLфайла пакета (для которого вы хотите создать среду), а именно раздел Requirements/ Dependenciesдля пакетов, которые вы должны предварительно установить. Тогда ищите пакеты в nixpkgs. (Другими словами, менеджеры пакетов - это пакеты, а не файлы ...)
Андрей Милорадовский

3
@AndrewMiloradovsky, потому что иногда вы знаете имя команды (или другое имя файла), но не имя пакета, который ее предоставляет. И да, другие менеджеры пакетов имеют такую ​​функцию, например, yum provides '*/bin/grep'или dnf provides '*/bin/grepили apt-file search 'fprintf.3.gz'.
maxschlepzig

Ответы:


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 distro вы можете установить apt-file и делать, apt-file $fileно я не вижу эквивалентного в nix-env -q.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.