Làm thế nào để tìm ra gói (không được cài đặt) mà một tệp thuộc về NixOS?


13

Tôi đang sử dụng trình quản lý gói Nix trên NixOS . Giả sử tôi muốn cài đặt một gói cung cấp một tập tin libgtk-x11-2.0.so.0. Làm cách nào để tìm một gói cung cấp tệp này, tương tự như các bản phân phối GNU / Linux khác ?

Hiện tại tôi phải google tệp và tìm ra gói nào có thể thuộc và tìm gói tương ứng trên kho Nix, nhưng tôi muốn một phương thức thành ngữ hơn.


1
Tôi đã đi xa đến mức "thiết lập cơ sở dữ liệu ctags ..." nixos.org/wiki/ khuyên trước khi từ bỏ.
thrig

Một số trình quản lý gói (ví dụ yumdnftrong RPMland) cho phép bạn nói "cài đặt tệp", họ tìm ra gói phù hợp và cài đặt gói đó.
vonbrand

2
Chúng tôi chỉ có cái này để thực thi ATM ( $ command-not-found foo). Lưu ý rằng tìm kiếm tệp nix (ví dụ với ctags) sẽ không giúp ích ở đó. Bạn phải thực hiện việc xây dựng để tìm những gì nó cài đặt.
Vladimír Čunát

Tại sao? Là người quản lý gói khác thực sự có chức năng như vậy? Phương pháp "thành ngữ" khác là đọc INSTALLtệp của gói (mà bạn muốn tạo môi trường), cụ thể là Requirements/ Dependenciesphần cho các gói bạn phải cài đặt sẵn. Sau đó tìm kiếm các gói trong nixpkgs. (Nói cách khác, người quản lý gói là về các gói không phải tệp ...)
Andrew Miloradovsky

3
@AndrewMiloradovsky, vì đôi khi bạn biết tên của một lệnh (hoặc tên tệp khác) nhưng không phải tên của gói cung cấp nó. Và vâng, cán bộ quản lý gói khác có một tính năng như vậy, ví dụ yum provides '*/bin/grep'hay dnf provides '*/bin/grephay apt-file search 'fprintf.3.gz'.
maxschlepzig

Câu trả lời:


8

nix-index là những gì bạn cần.

Cài đặt và xây dựng chỉ mục:

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

Xác định vị trí libgtk-x11-2.0.so.0:

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

Đầu ra:

(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

Dòng cuối cùng nói rằng gói gtk+-2.24.31có đường dẫn thuộc tính gnome2.gtkchứa tệp này.


2

Nhìn qua các tài liệu có vẻ như không có cách nào dễ dàng để làm điều này.

Với phân phối dựa trên yum bạn có thể làm yum provides $filevà trong phân phối apt-get, bạn có thể cài đặt tệp apt và làm apt-file $filenhưng tôi không thể thấy tương đương nix-env -q.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.