使用 ISO 映像位置的 virt-install 不再起作用

使用 ISO 映像位置的 virt-install 不再起作用

我已经将操作系统升级到 Ubuntu 16.04,并尝试使用我的KVM管理工具我已经在 Ubuntu 14.04 上成功使用了一段时间。不幸的是,virt-install 似乎已经发生了变化,不再接受--location带有 ISO 映像的参数,因为它会输出以下错误:

Starting install...
ERROR    Could not find an installable distribution at '/home/programster/apps/KVM-Command-Generator/installation_media/Ubuntu_14.04.iso'

The location must be the root directory of an install tree.

但是,如果我现在使用--cdrom参数代替--location它,我就不再喜欢这样一个事实:我有一个--extra-args参数指定 kickstart/preseed 文件的位置,并且控制台要使用 ttyS0。

--extra-args "console=ttyS0 ks=http://pastebin.com/raw.php?i=SrTvbt6Z"

此时,我尝试从 CD 中删除 --extra-args 参数进行安装,但如果您这样做,您将无法在 CLI 中看到安装的任何输出。我猜它希望您通过 VNC 或其他不太理想的方式进行连接。

作为参考,原始安装命令是:

qemu-img create -f qcow2 -o preallocation=metadata,lazy_refcounts=on /home/programster/apps/KVM-Command-Generator/vms/ubuntu14.04.img 20G
virt-install --connect qemu:///system  \
--nographics \
--os-type linux \
--accelerate \
--hvm \
--network network=default,model=virtio \
--name ubuntu14.04 \
--os-variant=ubuntu14.04 \
--location /home/programster/apps/KVM-Command-Generator/installation_media/Ubuntu_14.04.iso \
--extra-args "console=ttyS0 ks=http://pastebin.com/raw.php?i=SrTvbt6Z" \
--disk /home/programster/apps/KVM-Command-Generator/vms/ubuntu14.04.img,bus=virtio,format=qcow2 \
--ram 512 \
--vcpus 2

新的命令如下:

qemu-img create -f qcow2 -o preallocation=metadata,lazy_refcounts=on /home/programster/apps/KVM-Command-Generator/vms/ubuntu14.04.img 20G
virt-install --connect qemu:///system  \
--nographics \
--os-type linux \
--accelerate \
--hvm \
--network network=default,model=virtio \
--name ubuntu14.04 \
--os-variant=ubuntu14.04 \
--cdrom /home/programster/apps/KVM-Command-Generator/installation_media/Ubuntu_14.04.iso \
--disk /home/programster/apps/KVM-Command-Generator/vms/ubuntu14.04.img,bus=virtio,format=qcow2 \
--ram 512 \
--vcpus 2

问题

我怎样才能让 virt-install 从本地 ISO 映像进行安装,并使用额外的参数来指定 kickstart/preseed 文件的位置,并允许我查看进度并可能通过 CLI 而不是使用 VNC 选择选项?

也许我必须指定一个 Web URL 而不是 ISO 映像--location,但如果我可以传递本地位置,以防互联网质量不佳,我会更喜欢。

额外信息

答案1

@Programster - 我已向 virt-manager 维护人员的邮件列表报告了此问题。请参阅http://www.redhat.com/archives/virt-tools-list/2016-August/msg00009.html。您可以关注该主题了解更多详细信息。知道这在 Ubuntu 14.04 中有效,而在 Ubuntu 16.04 中无效是解决问题的关键。

最重要的是,这个问题现在已在https://github.com/virt-manager/virt-manager

修复该问题的提交是:https://github.com/virt-manager/virt-manager/commit/3f15a489cda87f8028828d567848193dd2640a43

我不确定什么时候会将其添加到各种 virt-manager 软件包中。但您可以获取源代码并从那里运行 virt-install。(注意:您需要添加一些软件包,并且可能应该创建一个 Python 虚拟环境,因此您可能需要在 VM 上进行实验,然后再在需要保持稳定和清洁的系统上使用额外的软件包。)

答案2

在阅读了--locationvirt-install 手册页中的相关部分后,它看起来像一个应该仍然能够用来location指定 ISO 映像的路径,但对我来说不起作用。幸运的是,它给出了一些示例,其中列出了适用于 Ubuntu 的示例:

http://us.archive.ubuntu.com/ubuntu/dists/wily/main/installer-amd64/

对我来说,使用它很有效,因此为了安装 Ubuntu 14.04,我所做的就是将其更改wilytrustyBob's your uncle!我希望我可以从本地 mini.iso 安装,但与此同时,这对我和其他人应该都有效。

答案3

我今天遇到了同样的问题,以前的一些答案帮助我找到了解决方法。我的解决方案是在 virt-install 手册中关于 iso 安装的找到的,因为我使用的是 net install iso,所以需要指定额外的内核和 initrd 参数,指示 iso 中的路径来找到它们。多亏了这个--debug选项,我找到了安装程序代码以便更好地了解发生了什么。因此,最终配置行变成了这样:

virt-install --name centos7 \
             --virt-type kvm \
             --memory 2048 \
             --vcpus 2 \
             --disk path='/path_to_isos/CentOS-7-x86_64-NetInstall-2003.iso',device=cdrom \
             --disk path=centos7.qcow2,device=disk \
             --location '/path_to_isos/CentOS-7-x86_64-NetInstall-2003.iso',initrd=isolinux/initrd.img,kernel=isolinux/vmlinuz \
             --graphics none \
             --os-type Linux \
             --os-variant centos7.0 \
             --network type=direct,source=enp3s0,source_mode=bridge,model=virtio \ 
             --extra-args 'console=ttyS0,115200n8 serial' \
             --console pty,target_type=serial \
             --debug

这里的关键是位置上的附加参数,指定vmlinuz为内核和initrd.img。为了在 iso 中查找路径,我使用了isoinfo以下命令:

$ isoinfo -J -i '/path_to_isos/CentOS-7-x86_64-NetInstall-2003.iso' -l

因此,在本例中,我在 isolinux 文件夹中找到了它们。此外,我还定义了 cdrom 设备的磁盘,以便在安装时可以访问它,但由于在本例中我使用的是网络存储库,因此我通过基于文本的安装菜单将源定义为 CentOS 7 的镜像之一。我猜如果需要,源可以是完整的 CD/DVD iso。使用位置可以启用额外参数,因此我可以在整个安装过程中使用文本控制台访问它。希望这有助于完成对原始问题的回答。

答案4

以下内容对我从 Ubuntu 16.04 主机系统安装 Debian 10 有用:

cd /usr/share/virt-manager/virtinst/
patch <<.
--- urlfetcher.py.orig 2019-07-25 13:54:37.496567791 +1200
+++ urlfetcher.py      2019-07-25 13:54:43.180373257 +1200
@@ -663,6 +663,8 @@
                 ]
     _hvm_paths = [("pxeboot/vmlinuz",
                     "images/pxeboot/initrd.img"),       # Fedora
+                  ("install.amd/vmlinuz",
+                    "install.amd/initrd.gz"),   # Debian
                 ]
     _iso_paths = ["images/boot.iso",                   # RH/Fedora
                    "boot/boot.iso",                     # Suse
.

virt-install --debug ... --location=/srv/software/Debian/debian-10.0.0-amd64-netinst.iso --extra-args='console=tty0 console=ttyS0,115200n8'

相关内容