1.安装ubuntu时使用的virt-install的配置:

virt-install \
--name test4 \
--ram 1024 \
--disk path=/data/01_ubuntu/ubuntu4.img,size=6 \
--vcpus 1 \
--hvm \
--os-type linux \
--network network=default \
--os-variant ubuntuquantal \
--graphics none \
--console pty,target_type=serial \
--location /data/00_osfile/ubuntu-16.04.1-server-amd64.iso \
--extra-args 'console=ttyS0,115200n8 serial'

报错如下:

ERROR Couldn't find hvm kernel for Ubuntu tree.
Domain installation does not appear to have been successful.

通过查资料发现,virt-install可以开debug模式的,加入--debug选项即可

2.virt-install的debug模式得到的结果:

[Wed, 30 Nov 2016 11:16:07 virt-install 26900] DEBUG (urlfetcher:268) local hasFile: Couldn't find /var/lib/libvirt/boot/virtinstmnt.xPL9y1/current/images/MANIFEST
[Wed, 30 Nov 2016 11:16:07 virt-install 26900] DEBUG (urlfetcher:89) Fetching URI: /var/lib/libvirt/boot/virtinstmnt.xPL9y1/install/netboot/version.info
Retrieving file version.info... | 58 B 00:00:00
[Wed, 30 Nov 2016 11:16:07 virt-install 26900] DEBUG (urlfetcher:1164) Didn't find any known codename in the URL string
[Wed, 30 Nov 2016 11:16:07 virt-install 26900] DEBUG (urlfetcher:511) Detected distro name=Ubuntu osvariant=linux
[Wed, 30 Nov 2016 11:16:07 virt-install 26900] DEBUG (urlfetcher:268) local hasFile: Couldn't find /var/lib/libvirt/boot/virtinstmnt.xPL9y1/install/netboot/ubuntu-installer/i386/linux

这里就可以看出问题了,明明是64位的操作系统,为什么去找./install/netboot/ubuntu-install/i386/linux的路径

我们去看看iso文件中正确的路径是什么:

[root@11.102 01_ubuntu]$mount /data/00_osfile/ubuntu-16.04.1-server-amd64.iso /mnt
mount: /dev/loop2 is write-protected, mounting read-only
[root@11.102 01_ubuntu]$ls /mnt/install/netboot/ubuntu-installer/amd64/linux
/mnt/install/netboot/ubuntu-installer/amd64/linux

基本确定,如果将路径的i386改为amd64,virt-install安装就没有问题。

debug模式剩余的log:

[Wed, 30 Nov 2016 11:16:07 virt-install 26900] DEBUG (urlfetcher:320) Cleaning up mount at /var/lib/libvirt/boot/virtinstmnt.xPL9y1
[Wed, 30 Nov 2016 11:16:07 virt-install 26900] DEBUG (cli:305) File "/usr/share/virt-manager/virt-install", line 1077, in <module>
sys.exit(main())
File "/usr/share/virt-manager/virt-install", line 1071, in main
start_install(guest, continue_inst, options)
File "/usr/share/virt-manager/virt-install", line 775, in start_install
fail(e, do_exit=False)
File "/usr/share/virt-manager/virtinst/cli.py", line 305, in fail
logging.debug("".join(traceback.format_stack())) [Wed, 30 Nov 2016 11:16:07 virt-install 26900] ERROR (cli:306) Couldn't find hvm kernel for Ubuntu tree.
[Wed, 30 Nov 2016 11:16:07 virt-install 26900] DEBUG (cli:308)
Traceback (most recent call last):
File "/usr/share/virt-manager/virt-install", line 747, in start_install
dom = guest.start_install(meter=meter, noboot=options.noreboot)
File "/usr/share/virt-manager/virtinst/guest.py", line 491, in start_install
self._prepare_install(meter, dry)
File "/usr/share/virt-manager/virtinst/guest.py", line 304, in _prepare_install
self.installer.prepare(self, meter)
File "/usr/share/virt-manager/virtinst/installer.py", line 200, in prepare
self._prepare(guest, meter)
File "/usr/share/virt-manager/virtinst/distroinstaller.py", line 451, in _prepare
self._prepare_kernel_url(guest, fetcher)
File "/usr/share/virt-manager/virtinst/distroinstaller.py", line 360, in _prepare_kernel_url
kernel, initrd, args = store.acquireKernel(guest)
File "/usr/share/virt-manager/virtinst/urlfetcher.py", line 603, in acquireKernel
{"distro": self.name, "type" : self.type})
RuntimeError: Couldn't find hvm kernel for Ubuntu tree.

3.修改virt-manager代码:

通过上面的报错,发现virt-manager使用python写的!正好想看什么源码来自,这个正好!

通过对virt-manager这一项目一步步debug,找到问题:

[root@11.102 ~]$grep -n -A22 "class DebianDistro" /usr/share/virt-manager/virtinst/urlfetcher.py
1076:class DebianDistro(Distro):
1077- # ex. http://ftp.egr.msu.edu/debian/dists/sarge/main/installer-i386/
1078- # daily builds: http://d-i.debian.org/daily-images/amd64/
1079- name = "Debian"
1080- urldistro = "debian"
1081- os_variant = "linux"
1082-
1083- def __init__(self, *args, **kwargs):
1084- Distro.__init__(self, *args, **kwargs)
1085-
1086- # Pull the tree's arch out of the URL text
1087- self._treeArch = 'i386'
1088- for pattern in ["^.*/installer-(\w+)/?$",
1089- "^.*/daily-images/(\w+)/?$"]:
1090- arch = re.findall(pattern, self.uri)
1091- if arch:
1092- self._treeArch = arch[0]
1093- break
1094-
1095- self._url_prefix = 'current/images'
1096- self._installer_dirname = self.name.lower() + "-installer"
1097- self._set_media_paths()

发现基于Debian的系统,__init__方法中self._treeArch初始化时是i386,估计是virt-manager读取ubuntu的iso文件时,出了什么问题,没读出该系统是x86_64类型,将该值改为amd64,就可以了。

再次运行virt-install,成功进入ubuntu安装界面!

附:CentOS命令行使用KVM安装64位ubuntu报"Couldn't find hvm kernel for Ubuntu tree."的解决办法

grep -n -A21 'class DebianDistro' /usr/lib/python2.6/site-packages/virtinst/OSDistro.py 命令可以查看DebianDistro类的__init__方法
[root@2 virtinst]$grep -n -A21 'class DebianDistro' /usr/lib/python2.6/site-packages/virtinst/OSDistro.py
892:class DebianDistro(Distro):
893- # ex. http://ftp.egr.msu.edu/debian/dists/sarge/main/installer-i386/
894- # daily builds: http://people.debian.org/~joeyh/d-i/
895-
896- name = "Debian"
897- os_type = "linux"
898-
899- def __init__(self, uri, arch, vmtype=None, scratchdir=None):
900- Distro.__init__(self, uri, arch, vmtype, scratchdir)
901- if uri.count("installer-i386"):
902- self._treeArch = "i386"
903- elif uri.count("installer-amd64"):
904- self._treeArch = "amd64"
905- else:
906- self._treeArch = "i386"
907-
908- if re.match(r'i[4-9]86', arch):
909- self.arch = 'i386'
910-
911- self._installer_name = self.name.lower() + "-" + "installer"
912- self._prefix = 'current/images'
913- self._set_media_paths()

改变__init__方法里的else:条件下面的一行,将"i386"改为"amd64"即可

- self._treeArch = 'i386'
+ self._treeArch = 'amd64'

04.ubuntu下kvm 命令行安装64位ubuntu报"Couldn't find hvm kernel for Ubuntu tree."的问题的更多相关文章

  1. Ubuntu下全命令行安装Android SDK

    为了在AWS云服务器上实现自动化打包Android APP的APK包,我需要远程命令行环境下安装Android SDK,当然还要用代理或者科学上网,这里简单整理一下过程: 首先,由于墙的原因,Andr ...

  2. Mac下通过命令行安装npm install -g 报错,如何解决?

    1, 使用 sudo npm install -g n2, 或者 sudo chmod -R 777 /usr/local/lib,然后 npm install -g

  3. Ubuntu下用命令行快速打开各类型文件(转)

    nautilus /media/pm/文档/book/system/必读nautilus /media/pm/文档/book/android/ndk 内核/framerwork/android wai ...

  4. mac下使用命令行安装、卸载ipa包、查看日志

    mac下使用命令行安装.卸载ipa包.查看日志 https://www.cnblogs.com/lily1989/p/8383916.html

  5. win10下使用命令行安装配置appium环境

    安装列表 安卓sdk目录,即ANDROID_HOME设置 关于sdk的安装配置此处略,参考之前文章<Appium+Java(一) Windows环境搭建篇> node运行环境 appium ...

  6. Ubuntu下用命令行快速打开各类型文件

    在Ubuntu下,通常用命令行打开文本文件,比如用命令gedit.more.cat.vim.less.但当需要打开其他格式文件时,比如pdf. jpg.mp3格式文件,咱们通常做法是进入到文件所在的目 ...

  7. ubuntu下使用命令行创建一个android项目

    在ubuntu中配置好jdk和android_sdk环境后,可以通过命令行方式创建一个android工程. 具体命令如下: android create project --target <ta ...

  8. Ubuntu下SVN命令行递归加入文件夹文件(免去一个一个的加入 --force)

    因为在Linux下一直没有找到好的svn工具(类似于TortiseSVN的).当然eSVN这些也不错,但就是使用上认为还不是很习惯.终于还是选择了svn原始的命令行工具来进行版本号控制操作. 命令行的 ...

  9. Ubuntu 下用命令行快速打开html,mp3等文件

    想用命令行打开网页文件,实现方法如下: 1.Ctrl+Alt+T可以打开shell,F11可以全屏显示,输入以下命令即可打开js17.html,并且指定浏览器,比如指定chrome, google-c ...

随机推荐

  1. SQL Server 在多个数据库中创建同一个存储过程(Create Same Stored Procedure in All Databases)

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 遇到的问题(Problems) 实现代码(SQL Codes) 方法一:拼接SQL: 方法二: ...

  2. JavaScript权威设计--JavaScript脚本化文档Document与CSS(简要学习笔记十五)

    1.Document与Element和TEXT是Node的子类. Document:树形的根部节点 Element:HTML元素的节点 TEXT:文本节点   >>HtmlElement与 ...

  3. JS中 call() 与apply 方法

    1.方法定义 call方法: 语法:call([thisObj[,arg1[, arg2[,   [,.argN]]]]]) 定义:调用一个对象的一个方法,以另一个对象替换当前对象. 说明: call ...

  4. 【JAVA框架】Hibernate 与Mybatis 区别

    Hibernate Mybatis 简介 区别 与联系 欢迎提出见解及转载. 1 简单简介     1.1    Hibernate 框架          Hibernate是一个开放源代码的对象关 ...

  5. 简单动态规划-LeetCode198

    题目:House Robber You are a professional robber planning to rob houses along a street. Each house has ...

  6. Android面试一天一题(1Day)

    写在前面 该博客思路源于在简书看到goeasyway博主写的Android面试一天一题系列,无copy之意,仅为让自己总结知识点,成长一点点.先感谢各位大神的无私分享~! 关于题目,大部分则出自And ...

  7. C#组件系列———又一款日志组件:Elmah的学习和分享

    前言:好久没动笔了,都有点生疏,12月都要接近尾声,可是这月连一篇的产出都没有,不能坏了“规矩”,今天还是来写一篇.最近个把月确实很忙,不过每天早上还是会抽空来园子里逛逛.一如既往,园子里每年这个时候 ...

  8. 代码的坏味道(11)——霰弹式修改(Shotgun Surgery)

    坏味道--霰弹式修改(Shotgun Surgery) 霰弹式修改(Shotgun Surgery) 类似于 发散式变化(Divergent Change) ,但实际上完全不同.发散式变化(Diver ...

  9. .Net语言 APP开发平台——Smobiler学习日志:快速实现应用中的图片、声音等文件上传功能

    最前面的话:Smobiler是一个在VS环境中使用.Net语言来开发APP的开发平台,也许比Xamarin更方便 样式一 一.目标样式 我们要实现上图中的效果,需要如下的操作: 1.从工具栏上的&qu ...

  10. TabControl 伸缩式菜单 仿照 uwp SplitView

    留下备用笔记 之前用的Frame+Page的切换content<类似于一个contentControl 干多个事情>,但是发现页面content内容控件多的时候,每一次切换都有点卡,点击了 ...