Ubuntu 云镜像有哪些不同版本可用?...Virt-manager 2021 中 Ubuntu 云镜像使用的通用指南

Ubuntu 云镜像有哪些不同版本可用?...Virt-manager 2021 中 Ubuntu 云镜像使用的通用指南

我非常高兴终于找到了预建的 Ubuntu 映像。我使用的是 osbox,但转换后的文件大小为 500GB,压缩起来很麻烦。全新安装很麻烦,尤其是当 90% 的人可以使用默认选项或轻松地从中央映像自定义时!

无论如何,有这么多版本。有什么区别?有些是显而易见的:img、tar.gz、vmdk、ova。我假设 azure vhd、vagrant、wsl 适用于这些平台。squashfs 可能是单个文件压缩版本。从下面的相关问题来看,kvm 有一个较小的 kvm 内核。lxd 版本实际上更大。root 版本是做什么用的?

编辑:我找到了 root 版本,请参阅下面的自我回复。我仍然无法在 Virt-manager 中设置其中一个,讨论也在下面,所以任何帮助都值得感激。如果有人想单独回答这个问题,我可以提出一个新问题。

EDIT2!:经过多次尝试和搜索,我终于能够让云映像 VM 正常工作,这是我的主要目标。我甚至找到了一个对我的主要问题的老答案,它帮助我实现了这个目标!


https://cloud-images.ubuntu.com/releases/focal/release/

[   ] ubuntu-20.04-server-cloudimg-amd64-azure.vhd.manifest  2021-11-08 22:37   18K  Ubuntu Server 20.04 LTS (Focal Fossa) released builds
[   ] ubuntu-20.04-server-cloudimg-amd64-azure.vhd.zip       2021-11-09 00:17  549M  Ubuntu Server 20.04 LTS (Focal Fossa) released builds
[   ] ubuntu-20.04-server-cloudimg-amd64-disk-kvm.img        2021-11-08 22:37  523M  Ubuntu Server 20.04 LTS (Focal Fossa) released builds
[   ] ubuntu-20.04-server-cloudimg-amd64-disk-kvm.manifest   2021-11-08 22:37   17K  Ubuntu Server 20.04 LTS (Focal Fossa) released builds
[   ] ubuntu-20.04-server-cloudimg-amd64-lxd.tar.xz          2021-11-08 22:42  832   Ubuntu Server 20.04 LTS (Focal Fossa) released builds
[   ] ubuntu-20.04-server-cloudimg-amd64-root.manifest       2021-11-08 22:40   17K  Ubuntu Server 20.04 LTS (Focal Fossa) released builds
[   ] ubuntu-20.04-server-cloudimg-amd64-root.tar.xz         2021-11-08 22:40  327M  Ubuntu Server 20.04 LTS (Focal Fossa) released builds
[   ] ubuntu-20.04-server-cloudimg-amd64-vagrant.box         2021-11-08 22:42  517M  Ubuntu Server 20.04 LTS (Focal Fossa) released builds
[   ] ubuntu-20.04-server-cloudimg-amd64-wsl.rootfs.manifest 2021-11-08 22:42   19K  Ubuntu Server 20.04 LTS (Focal Fossa) released builds
[   ] ubuntu-20.04-server-cloudimg-amd64-wsl.rootfs.tar.gz   2021-11-08 22:42  469M  Ubuntu Server 20.04 LTS (Focal Fossa) released builds
[   ] ubuntu-20.04-server-cloudimg-amd64.img                 2021-11-08 22:39  542M  Cloud image for 64-bit computers (USB image)
[   ] ubuntu-20.04-server-cloudimg-amd64.manifest            2021-11-08 22:40   17K  Cloud image for 64-bit computers (contents of live filesystem)
[   ] ubuntu-20.04-server-cloudimg-amd64.ova                 2021-11-08 22:40  525M  Cloud image for 64-bit computers (Open Virtualization Appliance)
[   ] ubuntu-20.04-server-cloudimg-amd64.squashfs            2021-11-08 22:41  371M  Ubuntu Server 20.04 LTS (Focal Fossa) released builds
[   ] ubuntu-20.04-server-cloudimg-amd64.squashfs.manifest   2021-11-08 22:41   17K  Ubuntu Server 20.04 LTS (Focal Fossa) released builds
[   ] ubuntu-20.04-server-cloudimg-amd64.tar.gz              2021-11-08 22:43  498M  Cloud image for 64-bit computers (Cloud Image/EC2 tarball)
[   ] ubuntu-20.04-server-cloudimg-amd64.vmdk                2021-11-08 22:42  525M  Ubuntu Server 20.04 LTS (Focal Fossa) released builds

答案1

我找到了一些错误的解决方案。由于某种原因,即使添加了 cidata.iso,cloud-init 也无法启动。

为了解决这个问题,必须设置 SMBIOS“串行”字符串参数。来源:https://paulgorman.org/technical/cloud-init.txt.html

这个例子对我来说不起作用,并且我在 RH 发现了一些错误报告:

$ virt-install --sysinfo type=smbios,system_serial=ds=nocloud

但是这个例子有效:

$ virt-install --qemu-commandline="-smbios type=1,serial=ds=nocloud" ...

然后 cloudinit 按需要接管并设置所有设置。

答案2

EDIT2:有一种方法可以通过添加一个文件来禁用 cloud-init:touch /etc/cloud/cloud-init.disabled https://cloudinit.readthedocs.io/en/latest/howto/disable_cloud_init.html 原始问题的答案在这里:ubuntu 的 amd64-disk-kvm.img 和常规的 amd64.img 云镜像有什么区别?

编辑:请参阅下面的“上次更新”部分,了解使图像正常工作所需的最少事项。看起来他们设置为使用 VNC 查看器来获取启动时显示的自动生成的 IP 和登录信息,除非绕过。

好的,这是我发现的有效指南经过两天的反复试验。Ubuntu 社区应该为本地用户发布一些说明。https://www.agiliq.com/blog/2012/07/using-ubuntu-cloud-images-in-kvm/

我能够在上面云图像发布链接中隐藏的“解压”文件夹中找到“vmlinuz-virtual-generic”版本内核。https://cloud-images.ubuntu.com/focal/current/unpacked/. 主页上有除 Focal 之外的其他版本https://cloud-images.ubuntu.com这是最重要的部分,因为 initrd-userve.img 无法识别根磁盘。您也可以使用普通的ubuntu 内核。

要点是使用qemu-img create -b ubuntu-*-server-cloudimg-amd64.img -f qcow2 samename.img.qcow2命令创建 VM(或者直接使用 virt-mgr 中的 GUI 创建)。它将提供在安装之前配置然后启动 VM 的选项。您需要将“解压”下载中的内核和 initrd 添加到 Boot Options 下的 Direct Boot 部分以及以下启动参数:ro init=/usr/lib/cloud-init/uncloud-init root=/dev/vda ds=nocloud ubuntu-pass=initialpassword您必须启动两次才能使密码生效。 其实,只需rw root=/dev/vda1 init=/bin/bash创建一个新的用户和密码即可。

请注意这些说明说vda。我不得不使用,vda1因为有两个启动分区 vda14 用于 GPT/bios_boot,vda15 用于 EFI/ESP/boot-flagagged 分区。原始的 .img 文件使用 sdaX,仅供参考。转换为 qcow2 或仅使用 qemu-img 显然会改变这一点。

更多细节:

较旧的帮助页面说内核文件和软盘捆绑在 tar 文件中。现在显然情况不再如此,这导致我进行了更多的尝试和错误。常见错误是“GRUB_FORCE_PARTUUID 尝试无 initrd 启动”、“错误未知命令 hwmatch”和“随机:快速初始化完成”。实际上,前两个是在不使用直接启动时出现的。VirtualBox 中的 Ova 导入确实会自行启动,因此它会以某种方式找出内部内核文件。我很想知道如何在 KVM 中做到这一点。我查看了 XML 文件,但在它旁边没有看到明显的线索来设置软盘,这让我开始搜索以找到软盘,这让我进入了上面的主要指南页面。我引用的第三个错误是当找不到这些内部内核文件时,即使 fstab 具有正确的启动驱动器标签。它甚至没有进入 grub,所以我无法在那里指定磁盘 UUID,尽管它们在 grub 文件中匹配(显然是因为使用直接启动不会改变任何内容)。

以下是我最初问题的答案。同样基于软盘等的旧 tar 内容。它确实让我更深入地寻找“vmlinuz-virtual”文件:关于 OpenStack 上 Ubuntu 云客户映像的使用记录在哪里?

其他资源:

内核参数uncloud-init告诉 cloud-init 它是一个本地虚拟机,并且nocloud参数设置本地网络(而不必进入并更改 /etc/netplan/*yaml 以删除固定的 mac 地址,然后netplan apply使用systemctl restart networking


以下是我了解到的更多信息:


尝试使用本地文件轻松设置 cloud-init yaml 文件,让我找到了使用 cloud-init 和 Ubuntu 服务器 iso 的解决方案:https://discourse.ubuntu.com/t/automated-server-install-quickstart/16614。它有几个简单的命令来创建文件,然后运行一个简洁的单行服务器来创建种子网络位置。它使用 Kvm 安装和启动。不幸的是,在使用原始映像在 Virtmanager 中创建 VM 后,它无法启动,因为它出于某种原因找不到 /stillmounted/casper/initrd。因此,我从已安装的 iso 中复制了内核文件并尝试使用它们(因为我怀疑上面的云映像在其内核中没有音频驱动程序),但它也挂在 casper/initrd 文件上。

所以我回到了 VirtualBox ova。my-seed.iso 可以更改服务器名称。经过长时间搜索如何传递内核参数(除了几个使用 vboxmanage setextradata 的参数外,您无法传递),我重新发现您可以在启动时按 shift 来编辑 Grub 参数。在使用 init=/bin/bash 最终设置密码并使用 vga=792 增加显示尺寸后,我在 visudo 文件中的图像中发现了一个错误,即#include..缺少一个空格,这会杀死 sudo。在获得 apt 更新后,我发现 VirtualBox 有一个错误,它不允许在最新版本中使用双向剪贴板:https://superuser.com/questions/1293042/bidirectional-clipboard-not-working-in-virtualbox。 但至少我终于有办法创建一个基本的 Ubuntu VM,而不必经历整个安装过程。此方法应该适用于许多其他发行版。(哦,此外,touch /etc/cloud/cloud-init.disabled上面的命令似乎也有效)。


后续消息:

  • my-config.iso 仅在第一次运行时有效。(除非有办法触发 cloud-init)。
  • 按住 shift 进入 Grub。使用内核参数vga=792获得更大的终端。在 /etc/default/grub 中设置 grub 超时并运行 update-grub。
  • 如果不安装,这些云图像上的音频将无法工作apt install linux-generic(约 800Mbs)。并在 Vbox 中启用音频输出。

最后更新:我终于找到了不使用直接启动文件来启动云镜像的关键。基本上,要么使用 安装非 kvm、通用内核版本apt install linux-image-$(uname -r),然后将 kvm 更改为通用 (~90Mb),要么使用 kvm 内核并使用 ssh 进入 VM ,然后。最初让用户使用内核参数。然后删除或移动两个文件 /etc/grub.d/01.. 和 /etc/default/grub.d/50..,并注释掉 /etc/default/grub.d/40-force-partuuid.cfg 的第一行。将 /etc/default/grub 更改为,调整超时等(如果需要)。然后它应该可以工作。systemctl enable [email protected] && systemctl start [email protected]virtsh console <vm-name>root=/dev/vda1 init=/bin/bash rwhiddenmenuupdate-grub

答案3

编辑:请参阅我的其他答案。以下内容现在有点不相关,我有一个可以运行的虚拟机,除了使用 virt-v2v 时没有解决的权限问题。该工具有一个特定于 Ubuntu 的版本,称为 virt-convert,但我最终使用了 qemu-img,它成功了,没有权限问题。

根版本实际上是整个 Linux 文件系统,即 boot、dev 等。

/boot 没有任何文件,例如 grub。因此,我正在寻找最简单的版本来创建 Virt-manager VM。我是否应该使用直接启动并添加rw init/=bin/bashroot=/dev/sda1内核参数以在 initrd 中获取 shell,然后以某种方式使用 grub-update 安装 grub?我可以从主机 linux 挂载并复制 /boot 目录,但这似乎不是推荐的方法。我还尝试boot使用附加的 Gparted live iso 将 sda1 卷标记为 img 版本。我想我可以使用 fdisk 或 cfdisk 来做到这一点。我想知道它是否有 MBR。

我也尝试过转换 ova 版本。我尝试过 img 版本的 Ubuntu Minimal,但不得不使用直接内核启动。我尝试让 Virt-manager SeaBIOS 识别 MBR,但有 3 个分区(单独的启动和 esp/efi),并且 grub_force_partuuid 尝试无 initrd 启动时出错。尝试连接到 UEFI 分区是否更好?

我刚刚尝试使用 virt-v2v 转换 ova,成功了,但出现此错误:无法打开“/var/lib/libvirt/images/ubuntu-focal-20.04-cloudimg-20211108-sda”:权限被拒绝。因此,我尝试将其 chmod 为 777,并尝试以 root 身份从 CLI 运行 virsh start ubuntu-focal-20.04-cloudimg-20211108,但出现相同错误。同一目录中的其他图像运行良好,但我没有对它们使用 virt-v2v。

相关内容