我需要为教学制作定制的 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 命令的步骤是使用用户数据文件中的特定字段执行的。