Як дізнатися, до якого (не встановленого) пакету належить файл на NixOS?


13

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

На даний момент я маю google файл та з'ясувати, до якого пакету він може належати, і знайти відповідний пакет у сховищі 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а в distr-get distro ви можете встановити apt-файл і робити, apt-file $fileале я не можу побачити еквівалент у nix-env -q.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.