LXC: Automatizar la ejecución de una aplicación dentro de un contenedor

0

Estoy trabajando en un proyecto que compila, ejecuta y prueba automáticamente la salida de los programas enviados en C, C ++, Java y Python. Obviamente, esto debe suceder dentro de algún tipo de entorno seguro ya que se puede enviar cualquier tipo de código. Después de intentar crear el contenedor yo mismo con una cárcel chroot, que terminó no siendo práctica, recurrí a los contenedores.

Ahora, digamos que tengo un programa en C que toma un int iargumento y lo devuelve i+1. Quiero escribir un script que copie el programa C (digamos plusone.out), junto con una lista de entradas de prueba ( input.txt) en un contenedor LxC, ejecuta el programa dentro del contenedor, escribe las salidas en un archivo ( output.txt) y exporta ese archivo volver al sistema host para que la aplicación principal (que se ejecuta fuera del contenedor) pueda verificar los resultados. También debe haber algunas restricciones en los recursos, pero puedo hacerlo con la cgroupsimplementación incorporada de LxC .

Sé cómo hacer la mayoría de las cosas descritas anteriormente, pero por mi vida no puedo descubrir cómo copiar archivos desde el host al contenedor o al revés. Cada tutorial que veo demuestra el comportamiento al ejecutar lso echodentro del contenedor, pero nunca importa un script o programa desde el sistema host. ¿Alguien puede ayudarme, o posiblemente referirme a la documentación que me puede decir cómo lograr esto?

Ghijs Kilani
fuente
1
Ahórrese mucho dolor y mire a Docker.
Michael Hampton

Respuestas:

0

¿Se está ejecutando en un servidor web? Si es así, asegúrese de que el host y los contenedores estén realmente bloqueados. Si está en un sitio web público, asegúrate doblemente (parece que sabes hacer esto, pero pensé en mencionarlo)

Copie el binario directamente al sistema de archivos del contenedor

Suponiendo que su programa 'ejecutor' de host tenga privilegios de root, intente lo siguiente:

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

Rootfs es el sistema de archivos sin formato para el contenedor. Luego ejecutarías tu script haciendo algo como:

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

Si no se ejecuta como root, intente utilizar contenedores sin privilegios (esto podría ser mejor desde el punto de vista de la seguridad) . Luego puede copiar el archivo directamente al contenedor sin necesidad de root. Stephane Graber (uno de los desarrolladores de lxc para ubuntu) tiene una gran introducción en su blog: Introducción a los contenedores LXC sin privilegios

usuario71931
fuente
Curiosamente, envió esta respuesta el mismo día que terminé mi proyecto. Fui con Docker como sugirió el comentarista en mi pregunta, pero parece que su respuesta podría haber sido muy útil si hubiera elegido LXC, por lo que lo estoy aceptando de todos modos. ¡Gracias!
Ghijs Kilani
¡Fantástico! Me alegra que haya ayudado.
user71931