创建要分发的 Ubuntu VM

创建要分发的 Ubuntu VM

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

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

  • 上述程序可行吗?
  • 需要注意哪些陷阱?我们需要确保万无一失。我们预计会有 80 多名学生,但只有 4 名助教,因此我们无法提供个人支持。
  • 使用动态分配的 VDI 类型虚拟 HDD 有什么缺点吗?
  • 我可以立即安装 Virtual Box 的 Guest Additions 吗?或者它是否执行任何特定于主机的操作?
  • 有没有更优雅的方式来处理用户帐户的创建?理想情况下,Ubuntu 会让他们通过帐户创建向导,并在他们第一次启动映像时设置密码(以及将密码添加到 sudoers 文件中)。不过,这不是优先事项。我想有一个默认帐户就好了。

答案1

虽然这个问题在某种程度上是基于观点的:

是的,这个过程是可行的 - 我相信它可以实现您所寻找的,而且这也是我过去在其他 Linux 发行版中所做的事情。

唯一真正的陷阱是磁盘空间……确保学生的机器有足够的磁盘空间来处理虚拟磁盘的大小。此外,确保至少在一台机器上保留一份离线副本,这样当学生关闭他们的机器时,您可以使用模板/参考磁盘快速重新创建磁盘。

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

客户插件不是特定于机器的,它们几乎是一组驱动程序。当您将虚拟机导入新主机时,虚拟机驱动程序将检测并调整您的硬件以在新主机上运行。

优雅的用户创建 - 不确定,也许是一个在首次启动时运行的脚本,并在脚本自毁之前要求用户创建一个新帐户?我会做一些调查,并在有 5 分钟空闲时间时回复您。

希望这至少能起到一定帮助。

答案2

准确回答您的问题,如果您需要定制虚拟机并向他们提供可交付的 VirtualBox 虚拟机,我建议使用打包机将 VM 与所有必需的依赖项一起预先打包。它就是为此目的而构建的,可让您启动ISO 中的图像,针对该映像执行任何所需的配置,然后创建可交付的 VirtualBox VM 映像。这对您也有好处,因为它准确记录了对可交付成果所做的操作,以防您想要重现它/向其中添加内容。此外,您可以将项目签入源代码控制系统并进行更改。 以下是一个例子这一切都是为了帮助您入门。

但是,如果你想让它们快速运行,我建议使用流浪汉并向你的学生分发一个 Vagrantfile,该文件在标准 Ubuntu 映像。这有几个优点:

  • Vagrant 与 VirtualBox 开箱即用,并将为学生处理所有困难的部分,例如设置共享文件夹以便他们可以轻松地在虚拟机和主机之间复制文件、配置网络以允许互联网访问该机器等。这也节省了您为他们记录/调试 VirtualBox 设置问题的时间。
  • Vagrantfile 比可交付的 VM 小得多。如果您想要在课程进行到一半时更改/向 VM 添加某些内容,则无需重建新的 VM,只需向他们提供更新的 Vagrantfile 即可。
  • 如果他们搞砸了某件事,超出了他们修复能力的范围,他们可以轻松地再次销毁/重新部署虚拟机
  • Vagrantfile 将向您的学生展示对 VM 所做的具体操作,以便当他们足够理解时,他们可以看到幕后发生的事情,并可能从中学习。

以下是一个 Vagrantfile 示例展示如何在 Ubuntu 14.04 映像上进行一些配置。

答案3

完全可行。替代方案是使用 Vagrant、Puppet、Chef 或类似工具从头开始构建 VM,但设置起来需要做大量工作。

我的一个站点上的开发团队也做同样的事情,以便让新开发人员快速上手。
图像中包含 1 个预设帐户(具有 sudo 权限)和一个简短的说明文档,其中包含创建个人帐户必须采取的步骤。

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

相关内容