我非常高兴终于找到了预建的 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 云客户映像的使用记录在哪里?
其他资源:
- 有关版本的信息
-kvm
。想知道除了尺寸略小之外,这是否还能改善其他方面:ubuntu 的 amd64-disk-kvm.img 和常规的 amd64.img 云镜像有什么区别?,特别是如果有一个单独的 vmlinuz-virtual 版本。 - 使用 virt-v2v 导入 .ova 的方法(对我来说不起作用):https://www.redhat.com/en/blog/importing-vms-kvm-virt-v2v
- 设置密码的一种方法:Ubuntu Cloud 镜像的默认用户名/密码?
- 实际的 cloud-init 文档页面:https://cloudinit.readthedocs.io/en/latest/topics/network-config.html
- 删除 cloud-init 的两种方法:https://blog.rylander.io/2020/12/23/how-to-remove-cloud-init-from-ubuntu-server-20-04/
touch /etc/cloud/cloud-init.disabled
- 删除 cloud-init 的官方方法,只有弃用的方法对我有用:https://blog.wikichoon.com/2020/09/virt-install-cloud-init.html`virt-customize -a MY-CLOUD-IMAGE.qcow2 --root-password 密码:SUPER-SECRET-PASSWORD --uninstall cloud-init'
- 如何修复“错误未知命令 hwmatch:错误未知命令 hwmatch
- 以前尝试使用 extlinux 进行启动,但在新镜像中不起作用:如何在 VirtualBox 中设置云映像?
- 如何配置使用 EFI,这不会改变任何东西并且没有必要,因为工作方法使用 Bios/SeaBios 启动:https://unix.stackexchange.com/questions/612813/virt-manager-change-firmware-after-installation
- 手动运行 cloud-init 的方法,但这并不能显示密码:https://stackoverflow.com/questions/23151425/how-to-run-cloud-init-manually
- cloud-init 创建了一个解释默认密码的页面:Ubuntu 18.04 OVA 默认凭据
- GH 上有关 cloud-init 参数的官方手册页:https://github.com/virt-manager/virt-manager/blob/master/man/virt-install.rst#--cloud-init
- 有关 GRUB_FORCE_PARTUUID 错误的信息:https://unix.stackexchange.com/questions/450946/grub2-using-wrong-boot-partition
- 带有来自 Ubuntu 的过时说明链接的问题:如何在 KVM 中启动 Ubuntu Cloud 映像?
- Ubuntu 社区的帮助页面提供了如何在主要云提供商上(但不在本地虚拟机管理程序上)使用它的说明:https://help.ubuntu.com/community/CloudInit
- 一种 Ovf (vdmk) 方法可能有助于解决非直接启动方法。qemu-img 是否会制作一个 5 秒超时的 grub 菜单?:https://askubuntu.com/a/334546/795299
内核参数uncloud-init
告诉 cloud-init 它是一个本地虚拟机,并且nocloud
参数设置本地网络(而不必进入并更改 /etc/netplan/*yaml 以删除固定的 mac 地址,然后netplan apply
使用systemctl restart networking
)
以下是我了解到的更多信息:
- 图片中有文档
/usr/share/doc/cloud-init/examples/..
,可能与此处相同:https://cloudinit.readthedocs.io/en/latest/topics/examples.html - 日志位于:
/var/log/cloud-init.log
和/var/log/cloud-init-output.log
- 有一种方法可以在本地使用 cloud-init,即创建和安装小型 iso 或图像,或者指向“seedfrom”目录或文件。
- 使用图像的信息:https://superuser.com/questions/827977/use-cloud-init-with-virtualbox
- 有关使用 iso 的信息:https://sumit-ghosh.com/articles/create-vm-using-libvirt-cloud-images-cloud-init/
- 有关使用目录的信息:https://discourse.ubuntu.com/t/automated-server-install-quickstart/16614
- 作为本地文件的“seedfrom”的信息:https://cloudinit.readthedocs.io/en/latest/topics/datasources/nocloud.html#datasource-nocloud
- CentOS 有图像:https://cloud.centos.org/centos/7/images/
尝试使用本地文件轻松设置 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 rw
hidden
menu
update-grub
答案3
编辑:请参阅我的其他答案。以下内容现在有点不相关,我有一个可以运行的虚拟机,除了使用 virt-v2v 时没有解决的权限问题。该工具有一个特定于 Ubuntu 的版本,称为 virt-convert,但我最终使用了 qemu-img,它成功了,没有权限问题。
根版本实际上是整个 Linux 文件系统,即 boot、dev 等。
/boot 没有任何文件,例如 grub。因此,我正在寻找最简单的版本来创建 Virt-manager VM。我是否应该使用直接启动并添加rw init/=bin/bash
到root=/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。