创建一个Ubuntu VM进行分发


19

我是一名编程课程的助教,负责基于Ubuntu 14.04 LTS创建虚拟机映像,并预先安装了所有必需的软件(用于C ++和Python开发),这样学生们都可以运行相同的虚拟系统,从而避免了麻烦使一切都可以在各种不同的机器和操作系统上工作的想法。我们打算将Virtual Box用作主机VM软件,因为它是免费的并且可以跨平台使用。

天真的,我只需要使用Ubuntu 14.04 LTS磁盘映像,在我的Virtual Box中运行它,将其安装到虚拟硬盘(VDI),使用预定义的密码设置一个“学生”帐户,安装所有必需的软件,关闭关闭虚拟机并分发VDI文件。我们要求每个学生将VDI导入Virtual Box,然后运行它并设置他们的个人帐户(或仅使用默认的学生帐户)。

  • 上述程序可行吗?
  • 需要注意的陷阱是什么?我们需要这是非常简单的。我们希望有80多名学生,并且只有四个TA,所以我们无法提供个人支持。
  • 使用动态分配的VDI型虚拟HDD是否有缺点?
  • 我可以立即安装Virtual Box的Guest Additions,还是可以做特定于主机的事情?
  • 有没有更优雅的方式来处理用户帐户创建?理想情况下,Ubuntu会让它们通过帐户创建向导,并让它们在首次引导映像时设置密码(以及将其添加到sudoers文件中)。但是,这不是优先事项。我想拥有一个默认帐户就可以了。

3
请注意,因为您要按照GPL条款分发软件,所以您必须提供源代码的报价。
ChrisInEdmonton

@ChrisInEdmonton好点。由于我自己没有编写任何代码,因此从技术上讲这是修改还是只是重新分发?将学生指向他们应该问的(不是)Ubuntu或第三方资源是否足够?我是否有法律义务主动提供资源?我不发布图像而是将其提供给访问受限的有限受众是否重要?
Jonas Greitemann '16

我只是将您指向GPL,因为我不是律师。在这里成为问题的可能性很小。:)
ChrisInEdmonton

2
我要说的是,您不必与Ubuntu映像本身一起执行此操作:gnu.org/licenses / ...只需在说明中的某个位置写上如何下载源代码即可。
马肯

1
在执行此操作之前,您可能需要仔细检查Canonical的知识产权和重新分配政策。尽管GPL软件可以自由地随源进行重新分发,并且您会发现在典型的Linux发行版本中获得许可的软件中几乎所有其他许可都可以在合理的条件下进行重新分发,但至少在最近,Canonical的IP政策存在一些争议
CVn

Answers:


18

虽然这个问题在一定程度上是基于意见的:

是的,此过程是可行的-我相信它会完成您要寻找的内容,这是我过去在其他Linux发行版中所做的事情。

唯一真正的陷阱是磁盘空间...确保学生计算机有足够的磁盘空间来处理虚拟磁盘的大小。另外,请确保您在至少一台计算机上使副本保持脱机状态,以便当学生杀死他们的计算机时,可以使用模板/参考磁盘快速重新创建磁盘。

动态磁盘的缺点是,随着VM随着数据/更新的增长,主机OS必须不断分配越来越多的磁盘空间。这样的性能开销有时可能令人头疼-尤其是在低功率VM上运行时(主机功率减去用于扩展磁盘的功率确实会使VM滞后)。则不可移植(一旦学生弄乱了他们的虚拟机,并非实验室中的所有机器都可能具有100GB +)

来宾附加组件不是特定于机器的..它们几乎是一个驱动程序集。当您将VM导入新主机时,VM驱动程序将检测并调整您的硬件以在新主机上工作。

优雅的用户创建-不确定,也许脚本在首次启动时运行并要求用户在脚本自我破坏之前创建一个新帐户吗?如果有5分钟的空闲时间,我会进行一些挖掘,然后与您联系。

希望这至少可以有所帮助。


2
谢谢,它确实有很大帮助。我主要关心的是不要弄乱基础知识。不要在用户创建方面花太多时间。真的不是那么重要。我只是想,因为无论如何我都在问,所以我也最好问是否有一些内置的机制来处理它,因为我认为这是一个非常普遍的问题。
乔纳斯·格里特曼

1
绝对-并且完全有可能有内置的解决方案,所以我想找到它。
Fazer87年

13

准确回答您的问题,如果您需要定制VM并将其交付给他们可交付使用的VirtualBox VM,我建议使用Packer将VM与所有必需的依赖项一起预打包。它是专为此目的而构建的,它允许您从ISO旋转映像,针对该映像执行所需的任何调配,然后创建可交付的VirtualBox VM映像。这也对您有好处,因为它准确地记录了可交付成果所做的操作,以防您想要对其进行复制/添加某些内容。另外,您可以将项目检入到源代码管理系统中并进行更改。 这是一个使您入门的示例

但是,如果您希望他们快速运行,我建议使用Vagrant并将一个Vagrantfile分发给您的学生,该文件可以在标准Ubuntu映像上执行所需的配置。这有几个优点:

  • Vagrant可以与VirtualBox一起使用,可以为学生处理所有困难的部分,例如设置共享文件夹,以便他们可以轻松地在VM和主机之间复制文件,配置网络以允许他们通过Internet访问该盒子等等。这还为您节省了为其编写文档/调试VirtualBox安装问题的时间。
  • Vagrantfile比可交付的VM小得多。如果您想在课程中途更改或向VM添加某些内容,而不必重建新的VM,只需给他们一个更新的Vagrantfile。
  • 如果他们弄乱了东西,无法修复,则可以轻松地销毁/重新部署虚拟机
  • Vagrantfile会向您的学生确切显示对VM所做的操作,以便当他们了解足够的程度时,他们可以了解引擎盖下正在发生的事情,并且也可以从中学习。

这是一个Vagrantfile示例,显示了如何在Ubuntu 14.04映像上进行一些配置。


3
无家可归和/或包装工是解决这个问题的方法。
桑迪·查普曼,

9

完全可行。另一种选择是Vagrant,Puppet,Chef或类似的从头开始构建VM的东西,但是要进行大量的设置工作。

我其中一个站点上的开发团队做了同样的工作,以使新开发人员快速启动并运行。
图像中有1个预设帐户(带有sudo权限)和简短的说明文档,其中包含创建个人帐户所必须执行的步骤。

请注意:您很可能需要在VM内进行网络/互联网访问。可以桥接或将其NAT到主机上。无论选择哪种,都必须指导学生如何配置主机。只需将VM内的NIC设置为DHCP设备。这是大多数配置的安全起点,即使用户以后必须手动配置静态IP地址也是如此。
在VM中放置一个静态IP地址确实很麻烦。它已被另一个在同一LAN上联机的VM所使用。


3
但是,“设置工作量”取决于创建映像的频率。您下学期再次参加同一门课程吗?下学期,您是否可能会用另一种语言来教类似的课程?您想让继任者的生活更轻松吗?C ++编译器的错误已在更高版本中得到修复。2017年推出了新的C ++标准。请记住,程序员是一个人,他花2个小时编写程序来在2秒内执行任务,而这花了2分钟的时间。;-)
约尔格W¯¯米塔格

2
@JörgWMittag当然,您有一个要点。但是,如果您不熟悉Vagrant等,学习曲线可能会非常陡峭/耗时。就我个人而言,我可能会在本学期寻求VM解决方案的快速解决方案,并在本学期中花一些时间开发长期解决方案的其他解决方案。
托尼

2
关于网络访问,分布式VM可能具有相同的MAC地址。NAT可能不是问题,但是无论如何都要重置MAC地址是一个好主意。
user1937198 '16

1
@ user1937198 MAC由VirtualBox / vmdk设置,而不是在VDI本身中设置。如果在VirtualBox中同时指向并单击新的VM,然后添加VDI文件,则将获得新的MAC。(通过从OVA导入,系统会要求您是否重置MAC。)但是,您是对的。如果网络在桥接中运行,这是要考虑的其他问题,当然是一个问题。
托尼

1
@SteveBarnes我特别同意你的最后一句话:无论工作指导多么出色,人们遵循它都会出错。他们跳过步骤(或以错误的顺序执行),在需要执行的命令中输入错别字,或者认为他们更了解脚本并偏离脚本。如果它是可自动化的(我的拼写检查器不确定是否确实是一个单词),最好的方法仍然是使其自动化:没有错误的余地。
Tonny
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.