Existe alguma maneira conveniente de executar o programa remoto em dados locais?

2

Eu tenho dois servidores rodando Linux, ou seja, A e B . Existe uma grande quantidade de dados em A , mas eu quero usar o programa x em B para processar esses dados. Seria ineficiente transferir todos os dados de A para B , enquanto também é irritante resolver todas as dependências para fazer x trabalhar em > A . Portanto, a melhor solução deve ser buscar x e suas dependências de biblioteca de B na memória de A e executar x em A localmente.

Então, eu gostaria de perguntar, existe alguma maneira conveniente ou ferramenta existente para executar um programa remoto para processar dados locais?

Minha idéia é montar o diretório raiz de B em A usando ferramentas como sshfs, ligar o diretório de dados no diretório raiz e chroot dentro dele. No entanto, isso não é muito conveniente e requer configuração adicional para sistemas de arquivos como /proc , /dev .

Para ser mais claro, há principalmente três aspectos inconvenientes:

  1. Eu preciso de permissão de root em A , o que geralmente não é concedido para um usuário típico de um servidor.
  2. Eu preciso configurar vários sistemas de arquivos do kernel no diretório raiz montado de B em A , como /proc , /sys , /dev . Executar como root em um servidor também requer cuidado adicional.
  3. Após o chroot, minhas configurações pessoais em A são substituídas por aquelas em B . Eu só quero usar x para processar meus dados e gostaria de permanecer em um ambiente familiar:)

BTW, eu preciso do chroot porque eu preciso rodar o programa x , que está em B ; Eu não consegui montar o diretório de dados em A para B porque eu quero evitar a transferência de dados; então eu só poderia transferir o programa de B para A , e eu preciso de chroot porque x precisa de bibliotecas diferentes que não estão disponíveis em A .

    
por jiakai 27.02.2014 / 08:31

1 resposta

1

Se o único problema são bibliotecas compartilhadas, então o mais simples é recompilar o programa com links estáticos, oferecendo um grande executável que não precisa de nenhuma biblioteca compartilhada.

Como alternativa, você pode encontrar as bibliotecas compartilhadas (com ldd ) e copiá-las. Use LD_LIBRARY_PATH (consulte a página ld.so man) para apontar o executável para o local das bibliotecas compartilhadas.

    
por 28.02.2014 / 11:16