Tôi đang sử dụng nix
trong "chế độ một người dùng" trong một hệ thống mà tôi không phải là root (xem bên dưới để biết mô tả về thiết lập nix của tôi).
Tôi muốn nhanh chóng chạy một trong các nhị phân của mình được liên kết động với một thư viện không có trong hệ thống.
Vì vậy, tôi đã cài đặt thư viện với nix
:
$ nix-env -qa 'gmp'
gmp-4.3.2
gmp-5.1.3
$ nix-env -i gmp-5.1.3
Nhưng thư viện vẫn không được tìm thấy bởi trình liên kết:
$ ldd -r ../valencies
../valencies: /lib64/libc.so.6: version `GLIBC_2.15' not found (required by ../valencies)
../valencies: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by ../valencies)
linux-vdso.so.1 => (0x00007fffbbf28000)
/usr/local/lib/libsnoopy.so (0x00007f4dcfbdc000)
libgmp.so.10 => not found
libffi.so.5 => /usr/lib64/libffi.so.5 (0x00007f4dcf9cc000)
libm.so.6 => /lib64/libm.so.6 (0x00007f4dcf748000)
librt.so.1 => /lib64/librt.so.1 (0x00007f4dcf540000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f4dcf33c000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f4dcf11f000)
libc.so.6 => /lib64/libc.so.6 (0x00007f4dced8b000)
/lib64/ld-linux-x86-64.so.2 (0x00007f4dcfde7000)
undefined symbol: __gmpz_gcd (../valencies)
undefined symbol: __gmpn_cmp (../valencies)
undefined symbol: __gmpz_mul (../valencies)
undefined symbol: __gmpz_fdiv_r (../valencies)
undefined symbol: __gmpz_fdiv_q_2exp (../valencies)
undefined symbol: __gmpz_com (../valencies)
undefined symbol: __gmpn_gcd_1 (../valencies)
undefined symbol: __gmpz_sub (../valencies)
symbol memcpy, version GLIBC_2.14 not defined in file libc.so.6 with link time reference (../valencies)
undefined symbol: __gmpz_fdiv_q (../valencies)
undefined symbol: __gmpz_fdiv_qr (../valencies)
undefined symbol: __gmpz_add (../valencies)
undefined symbol: __gmpz_init (../valencies)
undefined symbol: __gmpz_ior (../valencies)
undefined symbol: __gmpz_mul_2exp (../valencies)
undefined symbol: __gmpz_xor (../valencies)
undefined symbol: __gmpz_and (../valencies)
symbol __fdelt_chk, version GLIBC_2.15 not defined in file libc.so.6 with link time reference (../valencies)
undefined symbol: __gmpz_tdiv_qr (../valencies)
undefined symbol: __gmp_set_memory_functions (../valencies)
undefined symbol: __gmpz_tdiv_q (../valencies)
undefined symbol: __gmpz_divexact (../valencies)
undefined symbol: __gmpz_tdiv_r (../valencies)
$
Hãy nhìn xem, nó có mặt trong hệ thống tập tin:
$ find / -name 'libgmp.so.10' 2>/dev/null
/nix/store/mnmzq0qbrvw6dv1k2vj3cwz9ffdh05zr-user-environment/lib/libgmp.so.10
/nix/store/fnww2w81hv5v3dl9gsb7p4llb7z7krzd-gmp-5.1.3/lib/libgmp.so.10
$
Tôi phải làm gì để các thư viện được cài đặt bởi nix
"hiển thị"?
Có lẽ, tập lệnh cài đặt người dùng chuẩn nix
sửa đổi .bash_profile
để thêm nó bin/
vào PATH
, nhưng không làm điều gì đó tương tự cho các thư viện.
Thiết lập nix của tôi:
Điều duy nhất tôi đã yêu cầu root thực hiện cho tôi là: mkdir -m 0755 /nix && chown ivan /nix
nếu không, tôi đã làm theo quy trình cài đặt nix đơn giản tiêu chuẩn. Vì vậy, bây giờ tôi có thể sử dụng các chương trình tùy chỉnh từ các gói nix. Tôi không thể làm điều này một cách độc đáo mà không có bất kỳ sự trợ giúp nào từ gốc, tức là không có /nix/
, bởi vì /nix/
không có sẵn cho tôi; Tất nhiên tôi có thể sử dụng một thư mục khác, nhưng sau đó các gói nhị phân dựng sẵn sẽ không hợp lệ và tất cả các gói sẽ phải được xây dựng lại, theo tài liệu nix. Trong trường hợp của tôi, nó đơn giản hơn để yêu cầu /nix/
cho tôi.
Một điều khác tôi đã làm là thêm vào ~/.bash_profile
:
export NIX_CONF_DIR=/nix/etc/nix
để tôi có thể chỉnh sửa nix.conf
. (Nó được cho là nằm trong quyền kiểm soát gốc /etc/
. Tôi đã làm điều đó bởi vì tôi muốn build-max-jobs
và build-cores
cài đặt trong đó.)
nix
là một trình quản lý gói hiện đại và nixOS là một bản phân phối và Hydra là một hệ thống để liên tục xây dựng lại các gói nix và nixOps là một công cụ để quản lý một cơ sở hạ tầng (một mạng gồm nhiều máy chủ) và disNix để quản lý một tập hợp các dịch vụ theo cách khai báo (trên cùng của một cơ sở hạ tầng). guix
là con đẻ của GNU nix
, với một bản phân phối (được quảng bá là IIC 100% miễn phí
guix
.
nix-env
, không đề cập đếnnix.conf
. Hệ điều hành này là gì? Ngoài ra, bạn lặp lại các tài liệu tham khảonix
có nghĩa là gì? Tôi chỉ nghe thấy nó được sử dụng như một từ viết tắtUnix
, nhưng có vẻ như bạn đang sử dụng nó trong một bối cảnh cụ thể hơn.