Eu tenho uma ferramenta que não pode ser executada no meu Desktop Linux. Então, eu gostaria de criar uma pasta que contenha todos os seus requisitos e executá-la na pasta. Máquina virtual ou contêiner não é uma solução aqui por algum motivo.
Eu inicializei um Ubuntu Trusty no /data/LTS
.e tenho tudo que a ferramenta precisa instalada executando um chroot jail no /data/LTS
.
Agora eu emito:
PATH=/data/LTS/usr/local/sbin:/data/LTS/usr/local/bin:/data/LTS/usr/sbin:/data/LTS/usr/bin:/data/LTS/sbin:/data/LTS/bin \
LD_LIBRARY_PATH=/data/LTS/usr/local/lib:/data/LTS/usr/lib/x86_64-linux-gnu:/data/LTS/usr/lib:/data/LTS/lib/x86_64-linux-gnu:/data/LTS/lib \
PYTHONHOME=/data/LTS/usr \
/data/LTS/usr/bin/python /tmp/test.py
Eu recebo:
Inconsistência detectada por ld.so: dl-close.c: 759: _dl_close: Asserção `map->l_init_call' falhou!
O que devo fazer?
Responder1
Isso parece um problema com o carregador. Ou seja, você está usando o carregador do ambiente externo.
Tente prefixar o comando com /data/LTS/lib/ld.so ou ld-XYso Este é o carregador e ao fazer isso você usará aquele do sistema fechado.
Responder2
Razão encontrada. É por causa do caminho absoluto para ld.so. Sem modificações adicionais, /data/LTS/usr/bin/python usará ld.so do sistema real em vez do ambiente falso.
/data/LTS/lib/ld.so /data/LTS/usr/bin/python /tmp/test.py
funciona.