LXC: Automatizando a execução de um aplicativo dentro de um contêiner

0

Estou trabalhando em um projeto que automaticamente compila, executa e testa a saída de programas enviados em C, C ++, Java e Python. Obviamente, isso precisa acontecer dentro de algum tipo de ambiente seguro, já que qualquer tipo de código pode ser enviado. Depois de tentar criar o contêiner com uma cadeia chroot, que acabou não sendo prática, eu me virei para contêineres.

Agora, digamos que eu tenha um programa em C que use um argumento int i como e retorne esse i+1 . Eu quero escrever um script que copie o programa C (digamos plusone.out ), juntamente com uma lista de entradas de teste ( input.txt ) para um contêiner LxC, execute o programa dentro do contêiner, grave as saídas em um arquivo ( output.txt ) e exporta esse arquivo de volta para o sistema host para que o aplicativo principal (que é executado fora do contêiner) possa verificar os resultados. Também precisa haver algumas restrições nos recursos, mas posso fazer isso com a implementação cgroups do LxC.

Eu sei como fazer a maioria das coisas descritas acima, mas para a vida de mim não consigo descobrir como copiar arquivos do host para o recipiente ou vice-versa. Cada tutorial que vejo demonstra o comportamento executando ls ou echo dentro do contêiner, mas nunca importando um script ou programa do sistema host. Alguém pode me ajudar ou possivelmente me encaminhar para documentação que pode me dizer como fazer isso?

    
por Ghijs Kilani 18.04.2015 / 18:17

1 resposta

0

Isso está sendo executado em um servidor da Web? Nesse caso, verifique se o host e os contêineres estão realmente bloqueados. Se estiver em um site público, tenha certeza absoluta (parece que você sabe fazer isso, mas pensei em mencioná-lo)

Copie o binário diretamente para o sistema de arquivos do contêiner

Assumindo que o programa 'executor' do seu host tenha privs root, tente o seguinte:

cp test_runner /var/lib/lxc/<container_name>/rootfs/tmp/

Rootfs é o sistema de arquivos raw do contêiner. Você executaria seu script fazendo algo como:

lxc-attach -n container -- /tmp/testprogram

Se não estiver sendo executado como root, tente usar contêineres sem privilégios (isso pode realmente ser melhor do ponto de vista de segurança) . Você pode copiar o arquivo diretamente para o container sem precisar de root. Stephane Graber (um dos desenvolvedores do lxc para o Ubuntu) tem uma ótima introdução em seu blog: Introdução aos Recipientes LXC Sem Prevalência

    
por 09.06.2015 / 05:44