Crear una máquina virtual Ubuntu para distribuir


19

Soy un TA para un curso de programación y tengo la tarea de crear una imagen de máquina virtual basada en Ubuntu 14.04 LTS con todo el software necesario (para el desarrollo de C ++ y Python) preinstalado para que todos los estudiantes tengan el mismo sistema virtual en ejecución y evitemos las dificultades de hacer que todo funcione en una variedad de máquinas y sistemas operativos diferentes. Tenemos la intención de usar Virtual Box como el software VM anfitrión ya que es multiplataforma gratuita y disponible.

Ingenuamente, usaría la imagen de disco Ubuntu 14.04 LTS, la ejecutaría en mi Virtual Box, la instalaría en el disco duro virtual (VDI), configuraría una cuenta de "estudiante" con una contraseña predefinida, instalaría todo el software necesario, cerraría baje la máquina virtual y distribuya el archivo VDI. Le pedimos a cada estudiante que importe el VDI a Virtual Box, lo ejecute y configure su cuenta personal (o simplemente use la cuenta de estudiante predeterminada).

  • ¿Es viable el procedimiento anterior?
  • ¿Cuáles son las trampas a tener en cuenta? Necesitamos que esto sea bastante infalible. Esperamos más de 80 estudiantes y solo somos cuatro TA, por lo que no podemos brindar apoyo individual.
  • ¿Existen desventajas al usar un HDD virtual de tipo VDI asignado dinámicamente?
  • ¿Está bien que instale Virtual Additions Guest Additions de inmediato o hace algo específico para el host?
  • ¿Hay alguna forma más elegante de manejar la creación de la cuenta de usuario? Idealmente, Ubuntu los sometería a un asistente de creación de cuentas y les haría establecer sus contraseñas (así como agregarlas al archivo sudoers) la primera vez que inicien la imagen. Sin embargo, esto no es una prioridad. Supongo que tener una cuenta predeterminada está bien.

3
Tenga en cuenta que debe incluir una oferta para el código fuente, ya que está distribuyendo software bajo los términos de la GPL.
ChrisInEdmonton

@ChrisInEdmonton Buen punto. Como yo mismo no escribo ningún código, ¿es técnicamente una modificación o es solo una redistribución? ¿Es suficiente señalar a los estudiantes las fuentes de Ubuntu o de terceros en caso de que pregunten (no lo harán) o estoy legalmente obligado a proporcionar las fuentes de manera proactiva? ¿Importa que no publique la imagen, sino que la proporcione a un público limitado con acceso restringido?
Jonas Greitemann

Simplemente te señalaré a la GPL ya que no soy abogado. Es muy poco probable que se convierta en un problema aquí. :)
ChrisInEdmonton

2
Yo diría que no tiene que hacer eso junto con la imagen de Ubuntu en sí: gnu.org/licenses/... Simplemente escriba en algún lugar de las instrucciones cómo descargar el código fuente.
Markon

1
Es posible que desee revisar detenidamente las políticas de redistribución y propiedad intelectual de Canonical antes de hacerlo. Si bien el software GPL es libre de redistribuir con la fuente, y casi todas las demás licencias con las que encontrará software con licencia en una distribución típica de Linux permiten la redistribución en términos razonables, al menos recientemente ha habido cierta controversia sobre la política de propiedad intelectual de Canonical.
un CVn

Respuestas:


18

Si bien esta pregunta es algo opinión basada en cierto grado:

Sí, este procedimiento es viable: creo que lograría lo que está buscando y es algo que he hecho en el pasado con otras distribuciones de Linux.

El único obstáculo real es el espacio entre discos ... asegúrese de que las máquinas de sus alumnos tengan suficiente espacio en disco para manejar el tamaño del disco virtual. Además, asegúrese de mantener una copia sin conexión en al menos una máquina para poder usar la plantilla / disco de referencia para recrear rápidamente un disco cuando un estudiante mata su máquina.

Las desventajas de un disco dinámico es que el sistema operativo host tiene que seguir asignando más y más espacio en disco a medida que la VM crece con datos / actualizaciones. Esto tiene una sobrecarga de rendimiento que a veces puede ser un dolor de cabeza, especialmente si está ejecutando en una máquina virtual de baja potencia (la potencia de la máquina host menos la energía que se usa para expandir un disco tiende a hacer que las máquinas virtuales se retrasen un poco) ... luego no se puede portar (no todas las máquinas en su laboratorio pueden tener 100GB + una vez que un estudiante se ha metido con su VM)

Los complementos invitados no son específicos de la máquina ... son más o menos un conjunto de controladores. Cuando importa la VM a un nuevo host, los controladores de la VM detectarán y ajustarán su hardware para que funcione en el nuevo host.

Creación elegante del usuario: ¿no está seguro, tal vez un script que se ejecuta en el primer lanzamiento y le pide al usuario que cree una nueva cuenta antes de que el script se autodestruya? Investigaré un poco y me pondré en contacto con usted cuando tenga 5 minutos de sobra.

Espero que esto al menos en parte ayude.


2
Gracias, ayuda bastante. Mi principal preocupación es no estropear lo básico. No gastes demasiado tiempo en la creación de usuarios. Realmente no es tan importante. Solo pensé que, como estaba preguntando de todos modos, podría preguntar si hay algún mecanismo incorporado para manejarlo, ya que supongo que es un problema bastante común.
Jonas Greitemann

1
absolutamente, y es completamente posible que haya una solución integrada, por lo que quiero encontrarla.
Fazer87

13

Respondiendo exactamente a su pregunta, si necesita adaptar la VM y entregarles una VM VirtualBox entregable, le recomiendo usar Packer para preempaquetar la VM con todas las dependencias requeridas. Está diseñado solo para este propósito y le permite girar una imagen desde un ISO , realizar cualquier aprovisionamiento que desee contra esa imagen y luego crear una imagen VM VirtualBox entregable. Esto también es bueno para usted porque documenta exactamente lo que se hizo para la entrega en caso de que alguna vez quiera reproducirlo / agregarle algo. Además, puede registrar el proyecto en un sistema de control de código fuente y realizar cambios. Aquí hay un ejemplo de lo que se está haciendo para comenzar.

Sin embargo, si desea que se ejecuten rápidamente, le recomiendo usar Vagrant y distribuir a sus estudiantes un Vagrantfile que realice el aprovisionamiento deseado que necesita en una imagen estándar de Ubuntu . Esto tiene varias ventajas:

  • Vagrant funciona de forma inmediata con VirtualBox y se encargará de todas las partes difíciles para los estudiantes, como configurar carpetas compartidas para que puedan copiar archivos fácilmente entre la máquina virtual y la máquina host, configurar la red para permitir el acceso de Internet a la caja para ellos , etc. Esto también le ahorra el tiempo de tener que documentar / depurar los problemas de configuración de VirtualBox para ellos.
  • Un Vagrantfile es mucho más pequeño que una VM entregable. Si desea cambiar / agregar algo a la VM a mitad del curso, no tiene que reconstruir una nueva VM, solo deles un Vagrantfile actualizado.
  • Si ensucian algo más allá de su capacidad para repararlo, pueden destruir / redesplegar sin problemas la VM nuevamente
  • Un Vagrantfile mostrará a sus alumnos exactamente lo que se hizo a la VM para que cuando lleguen al punto en que entiendan lo suficiente, puedan ver lo que está sucediendo debajo del capó y posiblemente también aprender de eso.

Aquí hay un ejemplo de Vagrantfile que muestra cómo hacer un poco de aprovisionamiento en una imagen de Ubuntu 14.04.


3
Vagabundo y / o empacador son el camino a seguir para esto.
Sandy Chapman

9

Perfectamente factible. La alternativa sería Vagrant, Puppet, Chef o algo similar para construir las máquinas virtuales desde cero, pero eso es mucho trabajo para configurar.

El equipo de desarrollo de uno de mis sitios hace lo mismo para que los nuevos desarrolladores se pongan en marcha rápidamente.
1 cuenta preestablecida (con derechos de sudo) en la imagen y un breve documento de instrucciones con los pasos que deben seguir para crear su cuenta personal.

Tenga en cuenta: lo más probable es que necesite acceso a la red / internet dentro de la VM. Eso puede ser puenteado o NATado en el host. Independientemente de cuál elija, tendrá que instruir a sus alumnos sobre cómo configurar el lado host de esto. Simplemente configure la NIC dentro de la VM como dispositivo DHCP. Ese es un punto de partida seguro para la mayoría de las configuraciones, incluso si el usuario posteriormente debe configurar manualmente una dirección IP estática.
Poner una dirección IP estática en la VM realmente está pidiendo problemas. Está obligado a que otra VM ya esté en uso en línea en la misma LAN ...


3
Sin embargo, la "gran cantidad de trabajo para configurar" depende de la frecuencia con la que tenga que crear imágenes. ¿Estás tomando el mismo curso el próximo semestre de nuevo? ¿Quizás estés TA un curso similar con un idioma diferente el próximo semestre? ¿Quieres hacer la vida más fácil para tus sucesores? Los compiladores de C ++ tienen errores que se corrigen en versiones posteriores. Un nuevo estándar C ++ sale en 2017. Recuerde, un programador es una persona que dedica 2 horas a escribir un programa para realizar una tarea en 2 segundos que hubiera tomado 2 minutos a mano. ;-)
Jörg W Mittag el

2
@ JörgWMittag Por supuesto, tienes un punto. Pero si no está familiarizado con Vagrant y similares, la curva de aprendizaje puede ser bastante empinada / lenta. Personalmente, probablemente buscaría la solución VM para una solución rápida este semestre y durante el semestre pasar algún tiempo desarrollando la otra solución para un enfoque a largo plazo.
Tonny

2
Con respecto al acceso a la red, las máquinas virtuales distribuidas probablemente tendrán direcciones MAC idénticas. Puede que no sea un problema con NAT, pero es una buena idea restablecer las direcciones MAC de todos modos.
user1937198

1
@ user1937198 El MAC lo establece VirtualBox / vmdk, no se establece en el VDI mismo. Si señala y hace clic en una nueva VM en VirtualBox y luego agrega el archivo VDI, obtendrá un MAC nuevo. (Al importar desde OVA, se le pedirá si restablece o no el MAC). Pero tiene razón. Es algo más a considerar y ciertamente un problema si la red se ejecuta en puente.
Tonny

1
@SteveBarnes Estoy especialmente de acuerdo con tu última frase: no importa cuán buena sea la instrucción de trabajo, las personas se equivocarán cuando la sigan. Se saltan pasos (o los hacen en orden incorrecto), hacen errores tipográficos en los comandos que necesitan ejecutar o piensan que saben mejor y se desvían del guión. Si es automatizable (mi corrector ortográfico no está seguro de si eso es realmente una palabra), el mejor enfoque sigue siendo automatizarlo: no hay margen de error.
Tonny
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.