J'utilise nix
en "mode mono-utilisateur" dans un système où je ne suis pas root (voir ci-dessous pour une description de ma configuration nix).
Je voulais exécuter rapidement l'un de mes fichiers binaires qui est lié dynamiquement à une bibliothèque absente du système.
J'ai donc installé la bibliothèque avec nix
:
$ nix-env -qa 'gmp'
gmp-4.3.2
gmp-5.1.3
$ nix-env -i gmp-5.1.3
Mais la bibliothèque n'est toujours pas trouvée par l'éditeur de liens:
$ 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)
$
Regardez, il est présent dans le système de fichiers:
$ 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
$
Que dois-je faire pour que les bibliothèques installées par nix
soient "visibles"?
Probablement, le script d'installation utilisateur standard de nix
modifie .bash_profile
pour l'ajouter bin/
à PATH
, mais ne fait pas quelque chose d'analogue pour les bibliothèques.
Ma configuration nix:
La seule chose que j'ai demandé à la racine de faire pour moi était mkdir -m 0755 /nix && chown ivan /nix
:, sinon j'ai suivi la procédure d'installation standard de nix simple. Alors maintenant, je peux utiliser des programmes personnalisés à partir de packages nix. Je ne pouvais pas le faire correctement sans aucune aide de la racine, c'est-à-dire sans /nix/
, car il /nix/
n'était pas disponible pour moi; Je pourrais bien sûr utiliser un autre répertoire, mais les packages binaires pré-construits ne seraient pas valides et tous les packages devraient être reconstruits, selon la documentation de nix. Dans mon cas, c'était plus simple de /nix/
me demander .
J'ai également ajouté ~/.bash_profile
:
export NIX_CONF_DIR=/nix/etc/nix
afin que je puisse éditer nix.conf
. (Il était censé être contrôlé /etc/
par la racine sinon. Je l'ai fait parce que je le voulais build-max-jobs
et les build-cores
paramètres.)
nix
est un gestionnaire de packages moderne , et nixOS est une distribution, et Hydra est un système pour reconstruire constamment des packages nix, et nixOps est un outil pour gérer une infrastructure (un réseau de plusieurs hôtes) de manière déclarative, et disNix pour gérer un ensemble de services de manière déclarative (au-dessus d'une infrastructure). guix
est une progéniture GNU de nix
, avec une distribution (promu comme 100% libre IIC
guix
.
nix-env
, sans parlernix.conf
. De quel OS s'agit-il? Aussi, que voulez-vous répéter les référencesnix
? Je ne l'ai jamais entendu que utilisé comme abréviationUnix
, mais il semble que vous l'utilisiez dans un contexte plus spécifique.