Erstellen einer Ubuntu-VM zum Verteilen

19

Ich bin ein TA für einen Programmierkurs und habe die Aufgabe, ein virtuelles Maschinen-Image auf der Basis von Ubuntu 14.04 LTS mit der erforderlichen Software (für die C ++ - und Python-Entwicklung) zu erstellen, die so vorinstalliert ist, dass auf allen Schülern dasselbe virtuelle System ausgeführt wird, und wir vermeiden die Probleme alles auf einer Vielzahl von verschiedenen Maschinen und Betriebssystemen zum Laufen zu bringen. Wir beabsichtigen, Virtual Box als Host-VM-Software zu verwenden, da es kostenlos und plattformübergreifend verfügbar ist.

Naiv, ich würde einfach das Ubuntu 14.04 LTS Disk-Image verwenden, es in meiner Virtual Box ausführen, es auf der virtuellen Festplatte (VDI) installieren, ein "Student" -Konto mit einem vordefinierten Passwort einrichten, die gesamte erforderliche Software installieren, schließen Fahren Sie die virtuelle Maschine herunter und verteilen Sie die VDI-Datei. Wir bitten jeden Schüler, das VDI in Virtual Box zu importieren, es auszuführen und sein persönliches Konto einzurichten (oder einfach das Standardschülerkonto zu verwenden).

  • Ist das obige Verfahren durchführbar?
  • Worauf ist zu achten? Wir brauchen das, um ziemlich idiotensicher zu sein. Wir erwarten 80+ Studenten und sind nur vier TAs, daher können wir keine individuelle Unterstützung bieten.
  • Gibt es Nachteile bei der Verwendung einer dynamisch zugewiesenen virtuellen VDI-Festplatte?
  • Ist es für mich in Ordnung, die Guest Additions von Virtual Box von Anfang an zu installieren, oder kann es etwas Host-spezifisches tun?
  • Gibt es eine elegantere Möglichkeit, die Erstellung eines Benutzerkontos zu handhaben? Im Idealfall führt Ubuntu sie beim ersten Start des Images durch einen Assistenten zum Erstellen eines Kontos und lässt sie ihre Passwörter festlegen (sowie sie zur sudoers-Datei hinzufügen). Dies ist jedoch keine Priorität. Ich denke, ein Standardkonto ist in Ordnung.
Jonas Greitemann
quelle
3
Beachten Sie, dass Sie ein Angebot für den Quellcode einreichen müssen, da Sie Software unter den Bedingungen der GPL vertreiben.
ChrisInEdmonton
@ ChrisInEdmonton Guter Punkt. Da ich selbst keinen Code schreibe, ist dies technisch eine Modifikation oder nur eine Neuverteilung? Reicht es aus, die Schüler auf Ubuntu oder Quellen von Drittanbietern hinzuweisen, wenn sie danach fragen (sie werden es nicht tun), oder bin ich gesetzlich verpflichtet, die Quellen proaktiv bereitzustellen? Ist es wichtig, dass ich das Bild nicht veröffentliche, sondern einem begrenzten Publikum mit eingeschränktem Zugriff zur Verfügung stelle?
Jonas Greitemann
Ich werde Sie einfach auf die GPL hinweisen, da ich kein Anwalt bin. Es ist sehr unwahrscheinlich, dass es hier zu Problemen kommt. :)
ChrisInEdmonton
2
Ich würde sagen, dass Sie das nicht zusammen mit dem Ubuntu-Image selbst tun müssen : gnu.org/licenses/… Schreiben Sie einfach irgendwo in die Anleitung, wie Sie den Quellcode herunterladen.
Markon
1
Möglicherweise möchten Sie die Richtlinien zu geistigem Eigentum und Weiterverteilung von Canonical sorgfältig prüfen, bevor Sie dies tun. GPL-Software kann zwar kostenlos mit dem Quellcode weitergegeben werden, und fast jede andere Lizenz, unter der eine typische Linux-Distribution lizenziert ist, ermöglicht die Weitergabe zu angemessenen Bedingungen. In letzter Zeit gab es jedoch Kontroversen über die IP-Richtlinien von Canonical.
ein Lebenslauf vom

Antworten:

18

Während diese Frage zu einem gewissen Grad eine Meinung ist:

Ja, dieses Verfahren ist durchführbar - ich glaube, es würde das erreichen, wonach Sie suchen, und es ist etwas, was ich in der Vergangenheit mit anderen Linux-Distributionen getan habe.

Das einzig wahre Problem ist der Festplattenabstand. Vergewissern Sie sich, dass Ihre Schülercomputer über ausreichend Festplattenspeicher verfügen, um die Größe der virtuellen Festplatte zu bewältigen. Stellen Sie außerdem sicher, dass Sie eine Kopie auf mindestens einem Computer offline halten, damit Sie mithilfe der Vorlage / des Referenzdatenträgers schnell einen Datenträger neu erstellen können, wenn ein Schüler seinen Computer beendet.

Der Nachteil einer dynamischen Festplatte besteht darin, dass das Host-Betriebssystem immer mehr Festplattenspeicher zuweisen muss, wenn die VM mit Daten / Aktualisierungen wächst. Dies hat einen Performance-Overhead, der manchmal Kopfzerbrechen bereiten kann - insbesondere, wenn Sie auf einer VM mit niedriger Leistung arbeiten (Host-Rechner-Strom minus Strom, der zum Erweitern einer Festplatte verwendet wird, führt dazu, dass VMs etwas nacheilen) dann nicht portierbar (möglicherweise haben nicht alle Computer in Ihrem Labor mehr als 100 GB, sobald ein Schüler mit seiner VM in Konflikt geraten ist)

Gast-Addons sind nicht maschinenspezifisch. Sie sind so ziemlich ein Treibersatz. Wenn Sie die VM in einen neuen Host importieren, werden die VM-Treiber Ihre Hardware erkennen und optimieren, damit sie auf dem neuen Host funktioniert.

Elegante Benutzererstellung - Sie sind sich nicht sicher, ob ein Skript beim ersten Start ausgeführt wird und einen Benutzer auffordert, ein neues Konto zu erstellen, bevor sich das Skript selbst zerstört? Ich werde ein bisschen graben und mich bei Ihnen melden, wenn ich 5 Minuten Zeit habe.

Hoffe das hilft zumindest teilweise.

Fazer87
quelle
2
Danke, es hilft ziemlich viel. Mein Hauptanliegen ist es, die Grundlagen nicht durcheinander zu bringen. Verbringen Sie nicht zu viel Zeit mit der Erstellung von Benutzern. Es ist wirklich nicht so wichtig. Ich dachte nur, da ich sowieso gefragt habe, könnte ich genauso gut fragen, ob es einen eingebauten Mechanismus gibt, um damit umzugehen, da ich davon ausgehe, dass es ein ziemlich häufiges Problem ist.
Jonas Greitemann
1
absolut - und es ist durchaus möglich, dass es eine eingebaute Lösung gibt, also möchte ich sie finden.
Fazer87
13

Wenn Sie Ihre Frage genau beantworten müssen, um die VM anzupassen und eine lieferbare VirtualBox-VM zu übergeben, empfehle ich, Packer zu verwenden, um die VM mit allen erforderlichen Abhängigkeiten vorab zu packen. Es wurde speziell für diesen Zweck entwickelt und ermöglicht es Ihnen, ein Image von einem ISO-Image zu erstellen , die gewünschten Provisionierungen für dieses Image durchzuführen und anschließend ein zu lieferndes VirtualBox-VM-Image zu erstellen. Dies ist auch für Sie von Vorteil, da es genau dokumentiert, was mit dem Ergebnis gemacht wurde, falls Sie es jemals reproduzieren oder etwas hinzufügen möchten. Sie können das Projekt auch in ein Versionsverwaltungssystem einchecken und Änderungen vornehmen. Hier ist ein Beispiel dafür, wie Sie anfangen können.

Wenn Sie jedoch möchten, dass sie schnell zum Laufen kommen, empfehle ich, Vagrant zu verwenden und Ihren Schülern eine Vagrant- Datei zu übergeben, die die gewünschte Bereitstellung für ein Standard-Ubuntu-Image vornimmt . Dies hat mehrere Vorteile:

  • Vagrant ist mit VirtualBox sofort einsatzbereit und übernimmt alle wichtigen Aufgaben für die Schüler, z. B. das Einrichten von freigegebenen Ordnern, damit sie problemlos Dateien zwischen der VM und dem Hostcomputer kopieren und das Netzwerk so konfigurieren können, dass sie über das Internet auf die Box zugreifen können Dies erspart Ihnen auch die Zeit, die Sie für das Dokumentieren / Debuggen von VirtualBox-Setup-Problemen benötigen.
  • Eine Vagrant-Datei ist viel kleiner als eine lieferbare VM. Wenn Sie in der Mitte des Kurses etwas an der VM ändern / hinzufügen möchten, müssen Sie keine neue VM erstellen, sondern geben ihnen einfach eine aktualisierte Vagrant-Datei.
  • Wenn sie etwas durcheinander bringen, das nicht mehr repariert werden kann, können sie die VM problemlos wieder zerstören / erneut bereitstellen
  • Ein Vagrantfile zeigt Ihren Schülern genau, was mit der VM geschehen ist, sodass sie, wenn sie den Punkt erreicht haben, an dem sie genug verstanden haben, sehen können, was unter der Haube vor sich geht, und möglicherweise auch daraus lernen.

Hier ist ein Beispiel für Vagrantfile, in dem gezeigt wird, wie ein Ubuntu 14.04-Image bereitgestellt wird.

Joel B
quelle
3
Vagrant und / oder Packer sind der richtige Weg dafür.
Sandy Chapman
9

Perfekt machbar. Die Alternative wäre Vagrant, Puppet, Chef oder ähnliches, um die VMs von Grund auf neu zu bauen, aber das ist eine Menge Arbeit, die eingerichtet werden muss.

Das Entwicklungsteam auf einer meiner Sites unternimmt dasselbe, um neue Entwickler schnell zum Laufen zu bringen.
1 voreingestelltes Konto (mit Sudo-Rechten) im Bild und eine kurze Anleitung mit den Schritten, die sie ausführen müssen, um ihr persönliches Konto zu erstellen.

Bitte beachten Sie: Sie benötigen höchstwahrscheinlich einen Netzwerk- / Internetzugang in der VM. Dies kann entweder überbrückt oder per NAT auf den Host übertragen werden. Unabhängig davon, welche Option Sie auswählen, müssen Sie Ihre Schüler anweisen, die Host-Seite davon zu konfigurieren. Richten Sie einfach die Netzwerkkarte in der VM als DHCP-Gerät ein. Dies ist ein sicherer Ausgangspunkt für die meisten Konfigurationen, auch wenn der Benutzer später eine statische IP-Adresse manuell konfigurieren muss.
Das Einfügen einer statischen IP-Adresse in die VM ist wirklich problematisch. Es wird bestimmt schon von einer anderen VM benutzt, die im selben LAN online geht ...

Tonny
quelle
3
Der "Arbeitsaufwand" hängt jedoch davon ab, wie oft Sie Bilder erstellen müssen. Gehst du nächstes Semester wieder in den gleichen Kurs? Haben Sie vielleicht nächstes Semester einen ähnlichen Kurs mit einer anderen Sprache? Möchten Sie Ihren Nachfolgern das Leben erleichtern? C ++ - Compiler haben Fehler, die in späteren Versionen behoben werden. Ein neuer C ++ - Standard kommt 2017 heraus. Denken Sie daran, ein Programmierer ist eine Person, die 2 Stunden damit verbringt, ein Programm zu schreiben, um eine Aufgabe in 2 Sekunden auszuführen, die 2 Minuten von Hand gedauert hätte. ;-)
Jörg W Mittag
2
@ JörgWMittag Natürlich hast du einen Punkt. Aber wenn Sie nicht mit Vagrant und dergleichen vertraut sind, kann die Lernkurve ziemlich steil / zeitaufwändig sein. Persönlich würde ich mich in diesem Semester wahrscheinlich für die VM-Lösung entscheiden, um eine schnelle Lösung zu finden, und während des Semesters einige Zeit damit verbringen, die andere Lösung für einen langfristigen Ansatz zu entwickeln.
Tonny
2
In Bezug auf den Netzwerkzugriff haben die verteilten VMs wahrscheinlich identische MAC-Adressen. Es mag kein Problem mit NAT sein, aber es ist eine gute Idee, die MAC-Adressen trotzdem zurückzusetzen.
user1937198
1
@ user1937198 Der MAC wird von VirtualBox / vmdk festgelegt und nicht in der VDI selbst. Wenn Sie in VirtualBox auf eine neue VM zeigen und darauf klicken und dann die VDI-Datei hinzufügen, erhalten Sie einen neuen MAC. (Beim Import von OVA werden Sie gefragt, ob Sie den MAC zurücksetzen möchten oder nicht.) Aber Sie haben Recht. Es ist etwas anderes zu beachten und sicherlich ein Problem, wenn das Netzwerk in Bridging ausgeführt wird.
Tonny
1
@SteveBarnes Dem letzten Satz stimme ich ganz besonders zu: Egal wie gut die Arbeitsanweisung ist, die Leute werden es falsch machen, wenn sie sie befolgen. Sie überspringen Schritte (oder führen sie in falscher Reihenfolge aus), machen Tippfehler in den Befehlen, die sie ausführen müssen, oder sie denken, sie wissen es besser und weichen vom Skript ab. Wenn es automatisierbar ist (meine Rechtschreibprüfung ist sich nicht sicher, ob das tatsächlich ein Wort ist), besteht der beste Ansatz immer noch darin, es zu automatisieren: Kein Platz für Fehler.
Tonny