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

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

Estou trabalhando em um projeto que compila, executa e testa automaticamente a saída de programas submetidos 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 sozinho o container com um chroot jail, o que acabou não sendo prático, recorri aos containers.

Agora, digamos que eu tenha um programa C que receba um int iargumento como e retorne isso i+1. Quero escrever um script que copie o programa C (digamos plusone.out), junto 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 exporte esse arquivo de volta ao sistema host para que o aplicativo principal (que é executado fora do contêiner) possa verificar os resultados. Também é necessário que haja algumas restrições quanto aos recursos, mas posso fazer isso com a cgroupsimplementação integrada do LxC.

Eu sei como fazer a maioria das coisas descritas acima, mas durante toda a minha vida não consigo descobrir como copiar arquivos do host para o contêiner ou vice-versa. Cada tutorial que vejo demonstra comportamento ao executar lsou echodentro 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 possa me dizer como fazer isso?

Responder1

Isso está sendo executado em um servidor web?Nesse caso, certifique-se de que o host e os contêineres estejam 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 contêiner

Supondo que o programa 'executor' do seu host tenha privilégios de root, tente o seguinte:

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

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

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

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

informação relacionada