Estou usando o nix
"modo de usuário único" em um sistema em que não sou o root (veja abaixo uma descrição da minha configuração do nix).
Eu queria executar rapidamente um dos meus binários que está dinamicamente vinculado a uma biblioteca que está ausente no sistema.
Então, eu instalei a biblioteca com nix
:
$ nix-env -qa 'gmp'
gmp-4.3.2
gmp-5.1.3
$ nix-env -i gmp-5.1.3
Mas a biblioteca ainda não foi encontrada pelo vinculador:
$ 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)
$
Olha, ele está presente no sistema de arquivos:
$ 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
$
O que faço para que as bibliotecas instaladas por nix
sejam "visíveis"?
Provavelmente, o script de instalação padrão do usuário nix
modifica .bash_profile
para adicionar o bin/
arquivo PATH
, mas não faz algo análogo às bibliotecas.
Minha configuração nix:
A única coisa que pedi para o root fazer por mim foi: mkdir -m 0755 /nix && chown ivan /nix
caso contrário, segui o procedimento de instalação simples padrão do nix. Então agora eu posso usar programas personalizados dos pacotes nix. Eu não poderia fazer isso muito bem sem nenhuma ajuda da raiz, ou seja, sem /nix/
, porque /nix/
não estava disponível para mim; É claro que eu poderia usar outro diretório, mas os pacotes binários pré-criados não seriam válidos e todos os pacotes teriam que ser reconstruídos, de acordo com a documentação do nix. No meu caso, era mais simples pedir /nix/
por mim.
Outra coisa que fiz foi adicionar a ~/.bash_profile
:
export NIX_CONF_DIR=/nix/etc/nix
para que eu possa editar nix.conf
. (Era para ser controlado pela raiz, /etc/
caso contrário. Fiz isso porque queria build-max-jobs
e build-cores
configurações nele.)
nix
é um gerenciador de pacotes moderno e o nixOS é uma distribuição, e o Hydra é um sistema para reconstruir constantemente pacotes nix, e o nixOps é uma ferramenta para gerenciar declaradamente uma infraestrutura (uma rede de vários hosts) e o disNix para gerenciar declarativamente um conjunto de serviços (em cima de uma infraestrutura). guix
é um nix
guix
.
nix-env
, para não mencionarnix.conf
. Que SO é esse? Além disso, o que você repetiu referências paranix
significar? Eu só ouvi isso como abreviaçãoUnix
, mas parece que você está usando em um contexto mais específico.