Sto usando nix
in "modalità utente singolo" in un sistema in cui non sono il root (vedi sotto per una descrizione della mia configurazione di nix).
Volevo eseguire rapidamente uno dei miei binari che è dinamicamente collegato a una libreria che è assente nel sistema.
Quindi, ho installato la libreria con nix
:
$ nix-env -qa 'gmp'
gmp-4.3.2
gmp-5.1.3
$ nix-env -i gmp-5.1.3
Ma la libreria non è ancora stata trovata dal linker:
$ 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)
$
Guarda, è presente nel filesystem:
$ 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
$
Cosa devo fare affinché le librerie installate da nix
siano "visibili"?
Probabilmente, lo script di user-installazione standard di nix
modifica .bash_profile
per aggiungere la sua bin/
in PATH
, ma non fare qualcosa di analogo per le biblioteche.
La mia configurazione nix:
L'unica cosa che ho chiesto al root di fare per me è stata: mkdir -m 0755 /nix && chown ivan /nix
altrimenti ho seguito la semplice procedura di installazione standard di nix. Quindi ora posso usare programmi personalizzati dai pacchetti nix. Non potrei farlo bene senza alcun aiuto dalla radice, cioè senza /nix/
, perché /nix/
non era disponibile per me; Potrei ovviamente usare un'altra directory, ma poi i pacchetti binari pre-compilati non sarebbero validi e tutti i pacchetti dovrebbero essere ricostruiti, secondo la documentazione di nix. Nel mio caso, è stato più semplice chiedere /nix/
di me.
Un'altra cosa che ho fatto è aggiungere a ~/.bash_profile
:
export NIX_CONF_DIR=/nix/etc/nix
in modo che io possa modificare nix.conf
. (Doveva essere nel root-controllato /etc/
altrimenti. L'ho fatto perché volevo build-max-jobs
e build-cores
impostazioni in esso.)
nix
è un moderno gestore di pacchetti e nixOS è una distro e Hydra è un sistema per la ricostruzione costante di pacchetti nix e nixOps è uno strumento per gestire una infrastruttura (una rete di più host) in modo dichiarativo e disNix per gestire un insieme di servizi in modo dichiarativo (sopra un'infrastruttura). guix
è un figlio di GNU nix
, con una distro (promossa da 100% libre IIC
guix
.
nix-env
, per non parlarenix.conf
. Che sistema operativo è questo? Inoltre, cosa vuoinix
dire con riferimenti ripetuti ? L'ho mai sentito solo usato come abbreviazione diUnix
, ma sembra che tu lo stia usando in un contesto più specifico.