Création d'une machine virtuelle Ubuntu à distribuer

19

Je suis un assistant technique pour un cours de programmation et chargé de créer une image de machine virtuelle basée sur Ubuntu 14.04 LTS avec tous les logiciels nécessaires (pour le développement C ++ et Python) préinstallés de telle sorte que les étudiants ont tous le même système virtuel en marche et nous évitons les difficultés de tout faire fonctionner sur une variété de machines et de systèmes d'exploitation différents. Nous avons l'intention d'utiliser Virtual Box en tant que logiciel VM hôte car il est gratuit et disponible sur plusieurs plates-formes.

Naïvement, je voudrais simplement utiliser l'image disque Ubuntu 14.04 LTS, l'exécuter dans ma boîte virtuelle, l'installer sur le disque dur virtuel (VDI), créer un compte "étudiant" avec un mot de passe prédéfini, installer tous les logiciels nécessaires, fermer sur la machine virtuelle et distribuez le fichier VDI. Nous demandons à chaque étudiant d'importer le VDI dans Virtual Box, de l'exécuter et de configurer son compte personnel (ou simplement d'utiliser le compte étudiant par défaut).

  • La procédure ci-dessus est-elle viable?
  • Quels sont les écueils à surveiller? Nous avons besoin que cela soit à peu près infaillible. Nous attendons plus de 80 étudiants et ne sommes que quatre assistants d'enseignement, nous ne pouvons donc pas fournir un soutien individuel.
  • Y a-t-il des inconvénients à utiliser un disque dur virtuel de type VDI alloué dynamiquement?
  • Puis-je installer les ajouts d'invité de Virtual Box dès le départ ou est-ce que cela fait quelque chose de spécifique à l'hôte?
  • Existe-t-il une manière plus élégante de gérer la création de compte utilisateur? Idéalement, Ubuntu leur ferait passer un assistant de création de compte et leur demanderait de définir leurs mots de passe (ainsi que de les ajouter au fichier sudoers) la première fois qu'ils démarreraient l'image. Ce n'est cependant pas une priorité. Je suppose qu'avoir un compte par défaut est bien.
Jonas Greitemann
la source
3
Notez que vous devez inclure une offre pour le code source, car vous distribuez des logiciels selon les termes de la GPL.
ChrisInEdmonton
@ChrisInEdmonton Bon point. Puisque je n'écris pas de code moi-même, est-ce techniquement une modification ou est-ce juste une redistribution? Est-il suffisant de diriger les étudiants vers Ubuntu ou des sources tierces s'ils demandent (ils ne le feront pas) ou suis-je légalement obligé de fournir les sources de manière proactive? Est-il important que je ne publie pas l'image mais la fournisse plutôt à un public limité avec un accès restreint?
Jonas Greitemann
Je vais simplement vous indiquer la GPL car je ne suis pas avocat. Il est très peu probable que cela devienne un problème ici. :)
ChrisInEdmonton
2
Je dirais que vous ne devez pas le faire ensemble avec l'image Ubuntu lui - même: gnu.org/licenses/... Il suffit d' écrire quelque part dans les instructions pour télécharger le code source.
Markon
1
Vous pouvez examiner attentivement les politiques de propriété intellectuelle et de redistribution de Canonical avant de procéder. Bien que le logiciel GPL soit libre de redistribuer avec la source, et presque toutes les autres licences sous lesquelles vous trouverez des logiciels sous licence dans une distribution Linux typique permettent une redistribution à des conditions raisonnables, au moins récemment, il y a eu une controverse sur la politique IP de Canonical.
un CVn

Réponses:

18

Bien que cette question soit quelque peu basée sur une certaine opinion:

Oui, cette procédure est viable - je crois qu'elle accomplirait ce que vous recherchez et c'est quelque chose que j'ai fait dans le passé avec d'autres distributions Linux.

Le seul véritable écueil réside dans l'espacement des disques ... assurez-vous que les machines de vos élèves disposent d'un espace disque suffisant pour gérer la taille du disque virtuel. Assurez-vous également de conserver une copie hors ligne sur au moins une machine afin de pouvoir utiliser le modèle / disque de référence pour recréer rapidement un disque lorsqu'un élève tue sa machine.

Les inconvénients d'un disque dynamique sont que le système d'exploitation hôte doit continuer d'allouer de plus en plus d'espace disque à mesure que la machine virtuelle grandit avec les données / mises à jour. Cela a un surcoût de performance qui peut parfois être un casse-tête - surtout si vous exécutez sur une machine virtuelle de faible puissance (la puissance de la machine hôte moins la puissance utilisée pour étendre un disque a tendance à ralentir un peu les machines virtuelles). puis non portable (toutes les machines de votre laboratoire peuvent ne pas avoir 100 Go + une fois qu'un étudiant a gâché sa machine virtuelle)

Les modules complémentaires invités ne sont pas spécifiques à la machine .. ils sont à peu près un ensemble de pilotes. Lorsque vous importez la machine virtuelle dans un nouvel hôte, les pilotes de machine virtuelle détecteront et modifieront votre matériel pour fonctionner sur le nouvel hôte.

Création d'utilisateur élégante - pas sûr, peut-être un script qui s'exécute au premier lancement et demande à un utilisateur de créer un nouveau compte avant que le script ne s'autodétruise? Je vais creuser et vous recontacter lorsque j'aurai 5 minutes à perdre.

J'espère que cela aide au moins en partie.

Fazer87
la source
2
Merci, cela aide beaucoup. Ma principale préoccupation est de ne pas gâcher les bases. Ne consacrez pas trop de temps à la création d'utilisateurs. Ce n'est vraiment pas si important. Je pensais juste, puisque je le demandais de toute façon, je ferais aussi bien de demander s'il existe un mécanisme intégré pour le gérer, car je suppose que c'est un problème assez courant.
Jonas Greitemann
1
absolument - et il est tout à fait possible qu'il existe une solution intégrée, donc je veux la trouver.
Fazer87
13

Répondant exactement à votre question, si vous avez besoin d'adapter la machine virtuelle et de lui remettre une machine virtuelle VirtualBox livrable, je recommande d'utiliser Packer pour préemballer la machine virtuelle avec toutes les dépendances requises. Il est conçu à cet effet et vous permet de faire tourner une image à partir d' une image ISO , d'effectuer tout approvisionnement souhaité contre cette image, puis de créer une image VM VirtualBox livrable. Cela est également bon pour vous car il documente exactement ce qui a été fait pour le livrable au cas où vous voudriez le reproduire / ajouter quelque chose. Vous pouvez également archiver le projet dans un système de contrôle de source et apporter des modifications. Voici un exemple de ce qui est fait pour vous aider à démarrer.

Cependant, si vous souhaitez qu'ils fonctionnent rapidement, je recommande d'utiliser Vagrant et de distribuer à vos étudiants un Vagrantfile qui effectue le provisioning souhaité dont vous avez besoin sur une image Ubuntu standard . Cela présente plusieurs avantages:

  • Vagrant fonctionne immédiatement avec VirtualBox et gérera toutes les parties difficiles pour les étudiants, comme la configuration de dossiers partagés afin qu'ils puissent copier facilement des fichiers entre la machine virtuelle et la machine hôte, configurer la mise en réseau afin de permettre à Internet d'accéder à la boîte pour eux. , etc. Cela vous évite également d'avoir à documenter / déboguer les problèmes de configuration de VirtualBox pour eux.
  • Un Vagrantfile est beaucoup plus petit qu'une VM livrable. Si vous souhaitez modifier / ajouter quelque chose à la machine virtuelle à mi-parcours du cours, vous n'avez pas à reconstruire une nouvelle machine virtuelle, donnez-leur simplement un fichier Vagrant mis à jour.
  • S'ils gâchent quelque chose au-delà de leur capacité à le réparer, ils peuvent à nouveau détruire / redéployer sans douleur la machine virtuelle
  • Un Vagrantfile montrera à vos élèves exactement ce qui a été fait à la machine virtuelle afin que lorsqu'ils arrivent au point où ils comprennent suffisamment, ils puissent voir ce qui se passe sous le capot et éventuellement en tirer des leçons.

Voici un exemple de Vagrantfile montrant comment effectuer un approvisionnement sur une image Ubuntu 14.04.

Joel B
la source
3
Vagrant et / ou Packer sont la voie à suivre pour cela.
Sandy Chapman
9

Parfaitement réalisable. L'alternative serait Vagrant, Puppet, Chef ou quelque chose de similaire pour construire les VM à partir de zéro, mais c'est beaucoup de travail à configurer.

L'équipe de développement de l'un de mes sites fait de même pour que les nouveaux développeurs soient rapidement opérationnels.
1 compte prédéfini (avec sudo-droits) dans l'image et un bref document d'instructions avec les étapes à suivre pour créer leur compte personnel.

Remarque: vous avez probablement besoin d'un accès réseau / Internet à l'intérieur de la machine virtuelle. Cela peut être ponté ou NATté sur l'hôte. Quel que soit votre choix, vous devrez expliquer à vos élèves comment configurer le côté hôte de cette opération. Configurez simplement la carte réseau à l'intérieur de la machine virtuelle en tant que périphérique DHCP. Il s'agit d'un point de départ sûr pour la plupart des configurations, même si l'utilisateur doit ultérieurement configurer manuellement une adresse IP statique.
Mettre une adresse IP statique dans la machine virtuelle pose vraiment des problèmes. Il est lié à être déjà utilisé par une autre machine virtuelle se connectant sur le même réseau local ...

Tonny
la source
3
Le "beaucoup de travail à configurer" dépend de la fréquence à laquelle vous devez créer des images. Envisagez-vous à nouveau le même cours le semestre prochain? Envisagez-vous peut-être un cours similaire avec une langue différente au semestre prochain? Vous souhaitez faciliter la vie de vos successeurs? Les compilateurs C ++ ont des bogues qui sont corrigés dans les versions ultérieures. Un nouveau standard C ++ sort en 2017. N'oubliez pas, un programmeur est une personne qui passe 2 heures à écrire un programme pour effectuer une tâche en 2 secondes qui aurait pris 2 minutes à la main. ;-)
Jörg W Mittag
2
@ JörgWMittag Bien sûr, vous avez raison. Mais si vous n'êtes pas familier avec Vagrant et autres, la courbe d'apprentissage peut être assez abrupte / longue. Personnellement, j'irais probablement pour la solution VM pour une solution rapide ce semestre et pendant le semestre, je passerais du temps à développer l'autre solution pour une approche à long terme.
Tonny
2
Concernant l'accès au réseau, les VM distribuées auront probablement des adresses MAC identiques. Ce n'est peut-être pas un problème avec NAT, mais c'est quand même une bonne idée de réinitialiser les adresses MAC.
user1937198
1
@ user1937198 Le MAC est défini par VirtualBox / vmdk, non défini dans le VDI lui-même. Si vous pointez et cliquez sur une nouvelle machine virtuelle ensemble dans VirtualBox, puis ajoutez le fichier VDI, vous obtiendrez un nouveau MAC. (Par importation depuis OVA, vous serez invité à réinitialiser ou non le MAC.) Mais vous avez raison. C'est autre chose à considérer et certainement un problème si le réseau est exécuté en pontage.
Tonny
1
@SteveBarnes Je suis particulièrement d'accord avec vous la dernière phrase: Peu importe la qualité de l'instruction de travail, les gens se tromperont quand ils la suivront. Ils sautent des étapes (ou les font dans le mauvais ordre), font des fautes de frappe dans les commandes dont ils ont besoin pour exécuter ou ils pensent qu'ils connaissent mieux et s'écartent du script. S'il est automatisable (mon correcteur orthographique n'est pas sûr qu'il s'agisse réellement d'un mot), la meilleure approche est toujours de l'automatiser: pas de place pour l'erreur.
Tonny