Estoy usando el nix
"modo de usuario único" en un sistema en el que no soy la raíz (ver más abajo para una descripción de mi configuración de nix).
Quería ejecutar rápidamente uno de mis archivos binarios que está vinculado dinámicamente con una biblioteca que está ausente en el sistema.
Entonces, instalé la biblioteca con nix
:
$ nix-env -qa 'gmp'
gmp-4.3.2
gmp-5.1.3
$ nix-env -i gmp-5.1.3
Pero el enlazador todavía no encuentra la biblioteca:
$ 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)
$
Mira, está presente en el sistema de archivos:
$ 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
$
¿Qué hago para que las bibliotecas instaladas por nix
sean "visibles"?
Probablemente, la secuencia de comandos de usuario a la instalación estándar de la nix
modifica .bash_profile
para añadir su bin/
dentro PATH
, pero no hace algo similar para las bibliotecas.
Mi configuración de nix:
Lo único que le pedí a la raíz que hiciera por mí fue: de lo mkdir -m 0755 /nix && chown ivan /nix
contrario, he seguido el procedimiento estándar de instalación de nix simple. Entonces ahora puedo usar programas personalizados de paquetes nix. No podría hacer esto bien sin ninguna ayuda de la raíz, es decir, sin /nix/
, porque /nix/
no estaba disponible para mí; Por supuesto, podría usar otro directorio, pero los paquetes binarios precompilados no serían válidos y todos los paquetes tendrían que reconstruirse, de acuerdo con la documentación de nix. En mi caso, fue más sencillo preguntar /nix/
por mí.
Otra cosa que he hecho es agregar a ~/.bash_profile
:
export NIX_CONF_DIR=/nix/etc/nix
para que yo pueda editar nix.conf
. (De lo /etc/
contrario, se suponía que estaba controlado por la raíz . Lo hice porque quería build-max-jobs
y la build-cores
configuración en él).
nix
es un administrador de paquetes moderno , y nixOS es una distribución, y Hydra es un sistema para reconstruir constantemente paquetes de nix, y nixOps es una herramienta para administrar una infraestructura (una red de varios hosts) declarativamente, y disNix para administrar un conjunto de servicios declarativamente (encima de una infraestructura). guix
es una descendencia de GNU nix
, con una distribución (promovida como 100% libre IIC
guix
.
nix-env
, por no mencionarnix.conf
. ¿Qué sistema operativo es este? Además, ¿quénix
significan referencias repetidas ? Solo he escuchado que se usa como abreviaturaUnix
, pero parece que lo está usando en un contexto más específico.