AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 1284477
Accepted
MastroGeppetto
MastroGeppetto
Asked: 2020-10-18 00:00:06 +0800 CST2020-10-18 00:00:06 +0800 CST 2020-10-18 00:00:06 +0800 CST

自定义 Ubuntu 20.04 VirtualBox VM

  • 772

我需要为教学制作定制的 VirtualBox VM(以 .ova 形式提供):一个是带有终端接口和 LAMP 的 Ubuntu 服务器,另一个是最小的桌面 Ubuntu,只有选定的应用程序可用。我需要它们是轻量级的,因为学生将它们都用于网络,并且他们的 BYOD 计算机的质量各不相同。

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

我浏览了网络,但(非常令人惊讶)没有找到解决方案。我怀疑我错过了一些相关的东西,所以在花时间发现沸水之前我在这里问。

谢谢您的帮助!

customization virtualbox 20.04
  • 1 1 个回答
  • 1884 Views

1 个回答

  • Voted
  1. Best Answer
    MastroGeppetto
    2020-10-20T08:51:33+08:002020-10-20T08:51:33+08:00

    使用云图像的解决方案

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

    此任务以前是使用最小安装 mini.iso 执行的。但是这个磁盘映像现在是遗留的,尽管仍然非官方可用。

    我想要一个有据可查的长期解决方案,可能基于官方版本。浏览互联网我发现了各种建议,但不是一个完整的解决方案。以下是基于此类建议的分步指南。

    该解决方案可以解释为什么基于“mini.iso”的解决方案将被解雇。事实上,新的执行速度更快,并返回一个可能更好地配置为在 VirtualBox 环境中使用的 VM。此外,该过程可能是完全自动化的(参见this或this),而旧版本需要手动安装需要很长时间。

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

    我将这个专为 Linux 机器设计的过程分为几个步骤:

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

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

    安装云镜像

    云图像可从多个来源获得。本指南适用于 Ubuntu 官方网站上的用户,该网站提供各种风格。我选择了 OVA 格式的 20.04,它在 VirtualBox 中很容易使用(链接)。编辑 URL,您会发现其他格式和 repo。

    下载映像,然后在 VirtualBox GUI 中使用 File -> Import virtual application 创建 VM,无需启动它。使用更简单的名称(例如“minimal-focal”)更改描述中的名称(双击描述行)可能会很方便。

    配置虚拟机

    联网

    在虚拟机的网络配置中,将网络适配器配置为“NAT”,并(在“高级”框中)将主机端口2222(或您喜欢的任何一个)重定向到22。这样,您的VM将连接到互联网并通过 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
      

    在这里,您可以选择在 VM 中配置两个详细信息:主机名(这里是元数据文件中的 ''local-hostname'' 字段的 ''vb-desktop'' 值)和用户名(这里是 '用户数据文件中“名称”字段的“用户”值)。查看手册以获取更多详细信息。

    接下来,使用命令创建 .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 的 Storage 部分中,安装您刚刚在上一步中创建的 IDE 驱动器中创建的 .iso 文件。

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

    定义用户凭据

    移动到 VM 虚拟磁盘的目录(可能是 ~/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'')。

    完成后,卸载 VM 磁盘映像:

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

    如果您忘记卸载,VM 磁盘已损坏,您需要重新启动整个设备。在继续之前仔细检查。

    准备定制

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

    也可以通过 PC 的命令行访问 VM

     $ ssh user@localhost -p 2222
    

    (''user''替换成你的用户名,2222是第一步配置的端口号)。

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

    登录 VM 并使用行编辑器修复 VM 中“/etc/hosts 文件”中缺少的详细信息:在“localhost”行的末尾添加新机器的名称,在示例“最小焦点”。

    接下来给出以下命令:

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

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

    最终检查和结论

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

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

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

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

    • 3

相关问题

  • vmware/virtualbox 3d 加速

  • 如何将主机 Ubuntu 上的 VPN (tun0) 网络适配器映射到 VirtualBox 来宾 Windows?

  • 使用 SquashFS 编辑 Live CD?

  • 如何在 Ubuntu 中运行 Windows XP

  • 在自定义安装以维护升级路径时,应遵循哪些准则?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve