使用云图像的解决方案

使用云图像的解决方案

我需要为教学制作定制的 VirtualBox VM(以 .ova 形式发布):一个是带有终端界面和 LAMP 的 Ubuntu 服务器,另一个是带有仅提供选定应用程序的极简 Ubuntu 桌面。我需要它们是轻量级的,因为学生使用它们进行联网,并且他们的 BYOD 计算机的质量各不相同。

过去(18.04LTS),我曾经下载一个最小的 .iso 并逐步进行。现在这不再可能了,因为只有完整的 .iso 可用(例如关联) 为 20.04。我不想逐步进行,因为结果不是最优的、不确定的,而且很耗时。

我浏览了网页,但(令人惊讶的是)没有找到解决方案。我怀疑我错过了一些相关内容,所以我在这里问了,而不是花时间去寻找沸水。

感谢您的帮助!

答案1

使用云图像的解决方案

我的问题是从最小虚拟机开始创建自定义 Ubuntu VirtualBox VM。结果应包括在本地 VirtualBox 安装中运行的 VM(而不是在云中)。

此任务以前使用最小安装 mini.iso 执行。但此磁盘映像现在已过时,尽管仍可非正式使用。

我想要一个有据可查的长期解决方案,最好是基于官方发布的。浏览互联网后,我发现了各种建议,但都不是完整的解决方案。下面是基于这些建议的分步指南。

该解决方案可能解释了为什么基于“mini.iso”的解决方案将被放弃。事实上,新解决方案执行速度更快,并且返回的 VM 可能更适合在 VirtualBox 环境中使用。此外,该过程可能完全自动化(请参阅或者),而旧版需要手动安装,耗时较长。

解决方案从云图像开始,正如关于该主题的一篇文章所建议的那样(如何进行 20-04 的最小安装)。

我将针对 Linux 系统设计的流程分为几个步骤:

  • 安装云镜像
  • 配置虚拟机
  • 配置云镜像
  • 定义用户凭证
  • 准备定制

我还给出了一些在 Windows 环境中使用它的未经测试的建议。

安装云映像

云镜像有多种来源。本指南适用于 Ubuntu 官方网站上的镜像,该网站提供各种版本。我选择了 OVA 格式的 20.04,它在 VirtualBox 中很容易使用(关联)。编辑 URL 你会发现其他格式和 repo。

下载映像,然后使用 VirtualBox GUI 中的文件 -> 导入虚拟应用程序创建 VM,而无需启动它。将描述中的名称更改为更简单的名称(双击描述行)可能会很方便,例如“minimal-focal”。

配置 VM

联网

在虚拟机的网络配置中,将网络适配器配置为“NAT”,并且(在“高级”框中)将主机端口 2222(或任何您喜欢的端口)重定向到 22。这样,您的虚拟机将连接到 Internet 并可通过 ssh 访问。

贮存

在虚拟机的存储配置中:

  • 删除无用的软盘驱动程序
  • 创建新的 DVD 驱动器并将其留空

配置云镜像

创建一个 .iso 映像,其中包含 cloud-init 在 VM 启动时将使用的文件。在方便的位置,创建以下两个 YAML 文件:

  • 元数据:

     instance-id: desktop
     local-hostname: vb-desktop
    
  • 用户数据:

     #cloud-config
     users:
       - name: user
         sudo: ['ALL=(ALL) NOPASSWD:ALL']
         shell: /bin/bash
    

在这里,您可以选择在虚拟机中配置两个详细信息:主机名(此处为元数据文件中“local-hostname”字段的“vb-desktop”值)和用户名(此处为用户数据文件中“name”字段的“user”值)。检查手动的更多细节。

接下来,使用以下命令创建 .iso 文件(例如 ciconf.iso)

 $ cloud-localds ciconf.iso user-data meta-data

''cloud-localds'' 命令位于“cloud-image-utils”包中,(在 Debian/Ubuntu 中)可以使用以下命令安装

 $ sudo apt install cloud-image-utils

Windows 用户也可以使用相同的功能。

在 VirtualBox GUI 的存储部分,安装您刚刚在上一步中创建的 IDE 驱动器中的 .iso 文件。

启动虚拟机并等待终端登录,然后“关闭 ACPI”。由于您没有凭证,因此无法登录。

定义用户凭据

移动到虚拟机虚拟磁盘的目录(可能是 ~/VirtualBox VMs/minimal-focal),然后挂载磁盘映像。需要 qemu 包,它通过以下方式安装:

 $ sudo apt install qemu

要安装磁盘映像,请按以下步骤操作:

 $ sudo modprobe nbd max_part=8
 $ sudo qemu-nbd -c /dev/nbd0 ubuntu-focal-20.04-cloudimg.vdi
 $ sudo mount /dev/nbd0p1 /mnt

''ubuntu-focal-20.04-cloudimg.vdi'' 指的是镜像文件,请替换为您自己的文件。最后,VM 文件系统在 /mnt 目录中可用。

要创建 VM 文件系统的用户凭证“chroot”,请更改用户凭证(“passwd”命令将提示您输入新密码),然后退出“chroot”环境:

 $ sudo chroot /mnt
 $ passwd user
 $ sync
 $ exit

将“user”替换为上一步配置的用户名。使用 chroot 命令弄乱系统的可能性有限,因此请小心使用。如果您不了解,请查看手册页。

仅当您安全离开 ''chroot'' 环境(仔细检查)后,才将您的公钥(我假设您有一个)复制到 VM 文件系统内:

 $ mkdir /mnt/home/user/.ssh
 $ cat ~/.ssh/id_rsa.pub >> /mnt/home/user/.ssh/authorized_keys

上述步骤是可选的,但非常方便。如果您没有公钥,有成千上万的教程可以参考(“ssh-keygen”)。

完成后,卸载虚拟机磁盘映像:

 $ sync
 $ sudo umount /dev/nbd0p1
 $ sudo qemu-nbd -d /dev/nbd0
 $ sudo rmmod nbd

如果忘记卸载,虚拟机磁盘将损坏,您需要重新启动整个系统。继续操作之前请仔细检查。

准备定制

从 VirtualBox GUI 界面启动机器并使用“用户”用户名和定义的密码登录。

您还可以通过 PC 上的命令行访问虚拟机

 $ ssh user@localhost -p 2222

(其中“user”替换为你的用户名,2222是第一步配置的端口号)。

然后使用你喜欢的方式(我建议使用''ssh'')来完成工作。

登录虚拟机并使用行编辑器修复虚拟机中“/etc/hosts 文件”中缺失的细节:在“localhost”行末尾添加新机器的名称,例如“minimal-focal”。

接下来给出以下命令:

 $ sudo dpkg-reconfigure keyboard-configuration
 $ sudo apt update
 $ sudo apt upgrade
 $ sudo apt install linux-modules-extra-$(uname -r) tasksel

第一个命令使 VM 键盘适应您使用的键盘,其余命令则更新配置,安装包含云映像中缺少的模块的捆绑包和可用于自定义的 taskel 实用程序。

最终检查和结论

使用“tasksel”命令,您可以安装各种类型的软件包,例如 LAMP 服务器。但您可以决定安装您最喜欢的软件包集合,就像使用 mini.iso 一样。

从概念上讲,上述过程比使用 mini.iso 执行的过程更困难,但速度更快,大约需要 10 分钟即可让机器准备好进行自定义。相比之下,您需要下载比 mini.iso 更大的 VDI。最后,云技术将继续存在,所以我希望在 mini.iso 最终被放弃后,这种模式将适用于多个 Ubuntu 版本。

最后的检查可能包括使用tasksel安装桌面发行版,如Xubuntu。该测试对于检查显示管理器是否可以正常运行非常重要。要运行检查,请克隆VM并从VM终端调用“tasksel”。接下来选择(使用“空格”)“最小Xubuntu桌面”。等到安装完成并重新启动。

Windows 用户应该能够使用相同的策略,但是需要安装 VM 文件系统和 chroot 命令的步骤是使用用户数据文件中的特定字段执行的。

相关内容