东东东 陈煜东的博客

标签存档: qemu

qemu和libvirt在pci pass through下动态迁移失败

最近的项目是虚拟机在PCI pass-through下做动态迁移,目前还没有一个好的解决方案,需要我们小组去讨论并提出一个解决方案来.既然是要做PCI pass through下做动态迁移的解决方案,那就得要先在这样的情况下做个迁移,看看到底会出现什么样的问题.

方案一:使用virsh进行动态迁移

在前面的文章中,我们进行的虚拟机的pci pass through,如果对pci pass through有不会的地方,参考之前的文章来进行设置.

接下来,我们要进行虚拟机的动态迁移.使用virsh启动虚拟机,运行以下命令进行迁移

virsh migrate --live vdisk qemu+ssh://211.87.***.45/system --unsafe

运行完后会出现问题.报了一个这样的错误.

error: Requested operation is not valid: domain has assigned non-USB host devices

上面的错误说明,现在的请求操作的非法的,因为虚拟机使用了非USB设备.

可以看到libvirt的源码 src/qemu/qemu_migration.c

/* Validate whether the domain is safe to migrate.  If vm is NULL,
 * then this is being run in the v2 Prepare stage on the destination
 * (where we only have the target xml); if vm is provided, then this
 * is being run in either v2 Perform or v3 Begin (where we also have
 * access to all of the domain's metadata, such as whether it is
 * marked autodestroy or has snapshots).  While it would be nice to
 * assume that checking on source is sufficient to prevent ever
 * talking to the destination in the first place, we are stuck with
 * the fact that older servers did not do checks on the source. */
bool
qemuMigrationIsAllowed(virQEMUDriverPtr driver, virDomainObjPtr vm,
                       virDomainDefPtr def, bool remote, bool abort_on_error)
{
    int nsnapshots;
    int pauseReason;
    bool forbid;
    size_t i;

    if (vm) {
        if (qemuProcessAutoDestroyActive(driver, vm)) {
            virReportError(VIR_ERR_OPERATION_INVALID,
                           "%s", _("domain is marked for auto destroy"));
            return false;
        }

        /* perform these checks only when migrating to remote hosts */
        if (remote) {
            nsnapshots = virDomainSnapshotObjListNum(vm->snapshots, NULL, 0);
            if (nsnapshots < 0)
                return false;

            if (nsnapshots > 0) {
                virReportError(VIR_ERR_OPERATION_INVALID,
                               _("cannot migrate domain with %d snapshots"),
                               nsnapshots);
                return false;
            }

            /* cancel migration if disk I/O error is emitted while migrating */
            if (abort_on_error &&
                virDomainObjGetState(vm, &pauseReason) == VIR_DOMAIN_PAUSED &&
                pauseReason == VIR_DOMAIN_PAUSED_IOERROR) {
                virReportError(VIR_ERR_OPERATION_INVALID, "%s",
                               _("cannot migrate domain with I/O error"));
                return false;
            }

        }

        if (virDomainHasDiskMirror(vm)) {
            virReportError(VIR_ERR_OPERATION_INVALID, "%s",
                           _("domain has an active block job"));
            return false;
        }

        def = vm->def;
    }

    /* Migration with USB host devices is allowed, all other devices are
     * forbidden.
     */
    forbid = false;
    for (i = 0; i < def->nhostdevs; i++) {
        virDomainHostdevDefPtr hostdev = def->hostdevs[i];
        if (hostdev>mode != VIR_DOMAIN_HOSTDEV_MODE_SUBSYS ||
            hostdev->source.subsys.type != VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_USB) {
            forbid = true;
            break;
        }
    }
    if (forbid) {
        virReportError(VIR_ERR_OPERATION_INVALID,"%s",
                       _("domain has assigned non-USB host devices"));
        return false;
    }

    return true;
}

可以看到源码上显示,只要检测到虚拟机上使用了非USB的PCI设备,直接将borbid设置为true,禁止虚拟机的迁移.

如果要添加可以迁移的PCI设备,那么需要在这里进行相应的修改.

方案二:使用qemu进行动态迁移

在source host运行以下命令以启动虚拟机

/usr/bin/qemu-kvm -name vdisk -enable-kvm -m 512 -smp 2 
-hda /mnt/nfs/vdisk.img 
-monitor stdio 
-vnc 0.0.0.0:0 
-device pci-assign,host=00:1b.0

在dest host上运行以下命令,等待虚拟机的迁移:

/usr/bin/qemu-kvm -name vdisk -enable-kvm -m 512 -smp 2 
-hda /mnt/nfs/vdisk.img 
-monitor stdio 
-vnc 0.0.0.0:0 
-incoming tcp:0.0.0.0:8888
  • 参数-incoming tcp:0.0.0.0:8888说明的是,虚拟机在监听tcp的8888端口,等待源虚拟机被迁移过来.

此时虚拟机的状态是inmigration状态,等待被迁移过来.

在source host上输入以下命令,进行虚拟机的迁移.

(qemu) migrate -d -b tcp:dest_ip:8888

 -d 可以在迁移的过程中查询迁移状态,否则只能在迁移结束后查询。
 -b 迁移虚拟机存储文件
 tcp:dest_ip:8888 数据迁移的协议、目的主机和端口。协议和端口必须和目的主机上虚拟机的 -incoming 参数一致。

运行这个命令后,出报这样的错误

(qemu) migrate -d tcp:dest_ip:8888
migrate: State blocked by non-migratable device '0000:00:04.0/pci-assign'

应该也是进行了检查,使用了一个不可迁移设备即pci pass through的设备.

通过libvirt和qemu的动态迁移出先的问题,基本可以定位到相应的代码,那么只要提供一种相应的解决方案,那么就可以迁移其他的设备了.

声明:未经允许禁止转载 东东东 陈煜东的博客 文章,谢谢。如经授权,转载请注明: 转载自东东东 陈煜东的博客

本文链接地址: qemu和libvirt在pci pass through下动态迁移失败 – https://www.chenyudong.com/archives/live-migrate-with-pci-pass-through-fail-with-libvirt-and-qemu.html

分类: 虚拟化

查看virsh管理qemu虚拟机日志信息和libvirtd日志信息

在软件的开发和运行过程中,程序的运行日志log是不能少的。我们可以从log中发现程序的运行状态,以及可能出先的一些error.通常运行日志log上有时间、信息级别(level)、消息输出(message)。通过分析日志,我们可以从中获得程序的运行信息,方便我们的调试、恢复等.

在libvirt程序管理VM虚拟机时,也会有日志的记录.既有libvirtd的后台程序的日志,也有vm日志.接下来,我们设置一些日志的信息.

libvirtd的运行日志

在运行libvirtd的时候,我们需要获得lbivirtd的运行信息.所以我们需要找到他的日志文件.一般情况下,它是在/var/log/libvirt/libvirtd.log路径下.

可能在这个目录下没有发现这个的日志文件.那么就要配置一些libvitd的参数了.

编辑文件/etc/libvirt/libvirtd.conf

#将日志级别设置为 1(调试)
log_level = 1
#指定日志输出文件名称
log_outputs="1:file:/var/log/libvirt/libvirtd.log"
注意 :libvirtd. 日志文件可能会飞速增长。 用户应配置logrotate ,否则您的 /var 文件系统最后会装满内容。

以上的日志的输出级别为debug级别.这个级别的日志是最多的,一般只在开发以及测试的时候使用.而在生产运行环境中,日志的级别为info,warn,error,fatal. 以下前面的数字为他们的level.

  • 1 debug
  • 2 info
  • 3 warn
  • 4 error
  • 5 fatal

重启libvirtd 。虚拟机Guest操作系统正在运行时可重启 libvirtd。

# /etc/init.d/libvirtd restart

如果在目录下还是没发现日志文件,那么你可能需要使用一下命令来运行libvirtd.

libvirtd --daemon --listen --config /etc/libvirt/libvirtd.conf

查看virsh管理qemu虚拟机的信息

在使用virsh管理qemu的虚拟机时候,也是有日志的输出的.

具体的log在目录/var/log/livirt/qemu/ 下面,具体的log文件名与虚拟机名字关联.

声明:未经允许禁止转载 东东东 陈煜东的博客 文章,谢谢。如经授权,转载请注明: 转载自东东东 陈煜东的博客

本文链接地址: 查看virsh管理qemu虚拟机日志信息和libvirtd日志信息 – https://www.chenyudong.com/archives/qemu-vm-log-and-libvirtd-log.html

分类: 虚拟化

virsh使用qemu+tcp访问远程libvirtd

因为ssh的不能访问 所以使用tcp进行对远程libvirtd进行连接访问,例如

virsh -c qemu+tcp://example.com/system

修改文件vim /etc/sysconfig/libvirtd,用来启用tcp的端口

LIBVIRTD_CONFIG=/etc/libvirt/libvirtd.conf

LIBVIRTD_ARGS="--listen"

修改文件vim /etc/libvirt/libvirtd.conf

listen_tls = 0

listen_tcp = 1

tcp_port = "16509"

listen_addr = "0.0.0.0"

auth_tcp = "none"

运行 libvirtd

service libvirtd restart

如果没起效果(我的就没有生效 :( ),那么使用命令行:

libvirtd --daemon --listen --config /etc/libvirt/libvirtd.conf

查看运行进程

[root@ddd run]# ps aux | grep libvirtd
root 16563 1.5 0.1 925880 7056 ? Sl 16:01 0:28 libvirtd -d -l --config /etc/libvirt/libvirtd.conf

查看端口

[root@ddd run]# netstat -apn | grep tcp
tcp        0      0 0.0.0.0:16509           0.0.0.0:*               LISTEN      13971/libvirtd      

在source host连接dest host远程libvirtd查看信息

virsh -c qemu+tcp://211.87.***.97/system

Welcome to virsh, the virtualization interactive terminal.

Type: 'help' for help with commands
'quit' to quit

成功使用tcp去访问libvirtd。

声明:未经允许禁止转载 东东东 陈煜东的博客 文章,谢谢。如经授权,转载请注明: 转载自东东东 陈煜东的博客

本文链接地址: virsh使用qemu+tcp访问远程libvirtd – https://www.chenyudong.com/archives/libvirt-connect-to-libvirtd-with-tcp-qemu.html

分类: 虚拟化

qemu安装kvm虚拟机

用qemu命令来创建虚拟机.

第一步,创建一个虚拟机的硬盘,将来来存放虚拟操作系统的.这个虚拟硬盘是利用文件系统来进行模拟的.

qemu-img create -f qcow2 vdisk.img 10G 

qcow2是一种硬盘的格式,比qcow更新,qcow2 is an updated version of the qcow format, intended to supersede it. The main difference with the original is that qcow2 supports multiple virtual machine snapshots through a new, flexible model for storing snapshots. qcow支持数据大小动态的增加.而不是一开始就固定大小了.直接分配那么大的位置占空间

第二步,安装iso,并运行

qemu-system-x86_64 -enable-kvm -m 512 -smp 1 -boot order=dc -hda /opt/vdisk.img -cdrom /home/d/Downloads/CentOS-6.4-x86_64-minimal.iso

其中,-enable-kvm 是使用kvm内核,不用qemu的内核,开启虚拟机加速, -m 2048 是给客户机分配512MB内存,-smp 1 是给客户机分配1个CPU,-boot order=dc 是指定系统的启动顺序为光驱(d: CD-ROM)、硬盘(c: hard Disk),-hda ** 是分配给客户机的IDE硬盘(即前面准备的镜像文件),-cdrom ** 是分配客户机的光驱。默认情况下,QEMU会启动一个VNC server端口(如上面的::1:5900),可以用vncviwer工具来连接到QEMU的VNC端口查看客户机。

出现

VNC server running on `127.0.0.1:5900'

这意味着,你的虚拟机已经开启了,并且,开通了一个端口给你,你可以利用5900端口去远程桌面连接.有个图片

接下来就是普通的安装操作系统了.在安装结束后,我们需要进行重启,可能就出现问题了.这是将原先的虚拟机ctrl+c强制结束了.然后再次运行虚拟机

第三步,运行刚刚安装的操作系统

# qemu-system-x86_64 vdisk.img -m 512 -enable-kvm

If you’re on Fedora/RHEL/CentOS (and installed a kvm package and not built kvm yourself from source) then substitute qemu-kvm for qemu-system-x86_64

查看进程的一些xinxi ps -eLo ruser,pid,ppid,lwp,psr,args | grep qemu

参考: qcow2、raw、vmdk等镜像格式 http://www.prajnagarden.com/?p=248

运行刚刚安装的操作系统 http://www.linux-kvm.org/page/HOWTO1#Running_the_newly-installed_guest

声明:未经允许禁止转载 东东东 陈煜东的博客 文章,谢谢。如经授权,转载请注明: 转载自东东东 陈煜东的博客

本文链接地址: qemu安装kvm虚拟机 – https://www.chenyudong.com/archives/qemu-install-kvm-vm.html

分类: 虚拟化

libvirt kvm 虚拟机上网 – Bridge桥接

通过艰难的过程,终于使用libvirt安装完qemu kvm虚拟机了.但是发现虚拟机不能上网.虚拟机想要上网,有很多中方法.

先说两个定义:Guest机器为虚拟机,Host机器为开机运行的真实机器.

查看libvirt的教程,看到网络配置有许多中方式.详情可以访问http://libvirt.org/formatdomain.html#elementsNICS

  • NAT (默认上网) 虚拟机利用host机器的ip进行上网.对外显示一个ip
  • Bridge 将虚拟机桥接到host机器的网卡上,guest和host机器都通过bridge上网.对外不同的ip,

Bridge桥接原理

Bridge方式即虚拟网桥的网络连接方式,是客户机和子网里面的机器能够互相通信。可以使虚拟机成为网络中具有独立IP的主机。

桥接网络(也叫物理设备共享)被用作把一个物理设备复制到一台虚拟机。网桥多用作高级设置,特别是主机多个网络接口的情况。

Bridge桥接原理

如上图,网桥的基本原理就是创建一个桥接接口br0,在物理网卡和虚拟网络接口之间传递数据。

在host机器配置桥接网络

首先可以按照ibm 文章的虚拟机配置一下host机的网络情况,这个的目的就是让host生成一个不日多个桥接,大家都通过这个桥接上网.下面我们来看看具体的步骤.

查看网卡是否工作

确保你想使用bridge网桥的网卡能够为kvm虚拟机模块提供网络连接能力并且网卡是否可以工作.这个网卡应该要能够给guest的kvm虚拟机提供相同的网络支持.接下来例子说明了网卡的配置,并且可以被外部网络访问.这个例子中,使用eth0网卡.

# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:14:5E:C2:1E:40
          inet addr:10.10.1.152  Bcast:10.10.1.255  Mask:255.255.255.0
          inet6 addr: fe80::214:5eff:fec2:1e40/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:664 errors:0 dropped:526 overruns:0 frame:0
          TX packets:163 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:69635 (68.0 KiB)  TX bytes:25091 (24.5 KiB)
          Interrupt:74 Memory:da000000-da012800
................

备份network-scripts网络脚本文件

备份网络配置到不同的目录下,将来可以用来恢复网络配置,. 根据下面的命令将网络脚本ifcfg-eth0 网卡到 /root目录:

# cp /etc/sysconfig/network-scripts/ifcfg-eth0 /root/.
注意:不要把文件copy到/etc/sysconfig/network-scripts/目录或者其子目录

进入network-scripts目录

进入/etc/sysconfig/network-scripts/目录.

cd /etc/sysconfig/network-scripts/

为桥接新建配置文件

为Linux的bridge创建一个新的配置文件为/etc/sysconfig/network-scripts/ifcfg-br0,这里br0是bridge网桥的名字,同eth0类似.使用以下命令

cp ifcfg-eth0 ifcfg-br0 

具体的内容是基于已有的配置文件来进行的.

编辑bridge网桥配置文件

编辑配置文件,让数据包通过bridge(网桥)进行上网.你的网络配置很可能是通过静态ip(BOOTPROTO=static)上网或者是从DHCP服务器获得ip(BOOTPROTO=dhcp)上网的.

如果你的网络是通过静态ip地址来配置的,那么你的配置很可能是和下面一样的:

DEVICE=eth0
BOOTPROTO=static
HWADDR=00:14:5E:C2:1E:40
IPADDR=10.10.1.152
NETMASK=255.255.255.0
ONBOOT=yes

下面的表格显示了eth0和br0的静态ip配置内容,可以根据下面进行编辑

**** static ip配置 *****
/etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE=eth0
TYPE=Ethernet
HWADDR=00:14:5E:C2:1E:40
ONBOOT=yes
NM_CONTROLLED=no
BRIDGE=br0
DEVICE=br0
TYPE=Bridge
NM_CONTROLLED=no
BOOTPROTO=static
IPADDR=10.10.1.152
NETMASK=255.255.255.0
ONBOOT=yes

下面表格显示的eth0和br0的DHCP配置情况.

**** DHCP配置 ****
/etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE=eth0
TYPE=Ethernet
HWADDR=00:14:5E:C2:1E:40
ONBOOT=yes
NM_CONTROLLED=no
BRIDGE=br0
DEVICE=br0
TYPE=Bridge
NM_CONTROLLED=no
BOOTPROTO=dhcp
ONBOOT=yes

重启网络服务

重启网络以验证网络配置是否工作.

如果网络配置不正确,网络连接将会断开,你的电脑将失去访问能力.这样的话,检查以下配置文件,然后使用以下的命令重启以下网络服务:

# service network restart

禁用网络过滤器

向文件/etc/sysctl.conf添加以下代码:

 net.bridge.bridge-nf-call-ip6tables = 0
 net.bridge.bridge-nf-call-iptables = 0
 net.bridge.bridge-nf-call-arptables = 0
 

重新加载kernel参数

# sysctl -p 
net.ipv4.ip_forward = 0 
...
net.bridge.bridge-nf-call-ip6tables = 0 
net.bridge.bridge-nf-call-iptables = 0 
net.bridge.bridge-nf-call-arptables = 0

验证配置是否成功

通过运行ifconfig来验证以下配置是否成功.如果出现两个项,即网桥的br0和现在在工作的eth0:

br0       Link encap:Ethernet  HWaddr 00:14:5E:C2:1E:40
          inet addr:10.10.1.152  Bcast:10.10.1.255  Mask:255.255.255.0
          inet6 addr: fe80::214:5eff:fec2:1e40/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:125 errors:0 dropped:0 overruns:0 frame:0
          TX packets:81 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:16078 (15.7 KiB)  TX bytes:18542 (18.1 KiB)
eth0      Link encap:Ethernet  HWaddr 00:14:5E:C2:1E:40
          inet6 addr: fe80::214:5eff:fec2:1e40/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:206 errors:0 dropped:0 overruns:0 frame:0
          TX packets:58 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:27308 (26.6 KiB)  TX bytes:13881 (13.5 KiB)
          Interrupt:74 Memory:da000000-da012800
注意:你可能发现eth0的网络信息里面没有ipv4的地址了.或者你的GUI界面的网络显示你是断网的. 这不用担心.因为eth0的网络能力已经通过br0进行工作.你的host网络还是能正常工作的.

也可以使用以下的命令来查看网桥是否工作.

# brctl show
bridge name     bridge id               STP enabled     interfaces
virbr0          8000.000000000000       yes
br0             8000.000e0cb30550       no              eth0

如果是类似的输出,那么你的Linux的Bridge网桥就配置的差不多了.

为Guest虚拟机配置网络

配置Guest虚拟机的xml文件

在虚拟机的xml配置文件进行设置网络的连接方式为bridge桥接,并且桥接的设备为br0.其中mac地址要改变!不然MAC相同,局域网MAC地址相同的电脑不能上网.

<interface type="bridge"> <!--虚拟机网络连接方式-->
    <source bridge="br0" /> <!-- 当前主机网桥的名称-->
    <mac address="00:16:e4:9a:b3:6a" /> <!--为虚拟机分配mac地址,务必唯一,否则dhcp获得同样ip,引起冲突-->
</interface>

在虚拟机配置网络

我使用的是CentOS Minimal Installation的发行版.使用以下命令就可以进行上网了. 一开始只有lo显示.没有看到eth0,后来想到了eth0被禁用了,于是开启即可.

# ifconfig eth0 up
# dhclient eth0

现在还有个问题是,网络不随开机启动. 我打开/etc/sysconfig/network-scripts/ifcfg-eth0显示:

DEVICE=eth0
HWADDR=52:54:00:12:34:56
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=dhcp

虽然设置了开机启动,但是每次开机都需要运行上面的两个命令.这样就没办法远程控制主机了.

后来发现是udev弄的.udev在/etc/udev/rules.d/下面搞了一个持久命名规则(persistent-net.rules),对于网卡的持久命令,就采取了MAC地址的匹配方式

原来虚拟机安装后自带MAC网卡地址和我xml定义的网卡不一样.于是我就将虚拟机的MAC网卡提取出来,替换xml文件的MAC网卡信息.然后undefine和define以下虚拟机.

重启虚拟机,发现这次网络能够自动开机获得了.

参考资料

声明:未经允许禁止转载 东东东 陈煜东的博客 文章,谢谢。如经授权,转载请注明: 转载自东东东 陈煜东的博客

本文链接地址: libvirt kvm 虚拟机上网 – Bridge桥接 – https://www.chenyudong.com/archives/libvirt-kvm-bridge-network.html

分类: 虚拟化

Linux下编译安装qemu和libvirt

KVM虚拟机(英语:Kernel-based Virtual Machine),是一种用于Linux内核中的虚拟化基础设施。KVM目前支援Intel VT及AMD-V的原生虚拟技术。KVM在2007年2月被导入Linux 2.6.20核心中。它也被引入FreeBSD。在Mac OS X中,也可以见到KVM。

因为kvm已经集成到Linux中了,所有就不用安装kvm了。

安装qemu

qemu介绍

QEMU 是一个面向完整 PC 系统的开源仿真器。除了仿真处理器外,QEMU 还允许仿真所有必要的子系统,如连网硬件和视频硬件。它还允许实现高级概念上的仿真(如对称多处理系统(多达 255 个 CPU)和其他处理器架构(如 ARM 和 PowerPC)。

下载源文件

下面从git安装qemu最新版qemu官网的git地址:

http://git.qemu-project.org/qemu.git

使用以下命令下载qemu代码到本地来,将来可以用来自己编译和修改,然后发布自己新的qemu。

git clone git://git.qemu.org/qemu.git

编译安装

下载完后,进行编译安装.

### 如果你是从压缩包下载来的,先解压缩
cd /tmp
tar zxvf qemu-x.y.z.tar.gz
cd qemu-x.y.z
### Then you configure QEMU and build it (usually no options are needed):

###git下载及源码包下载都一样了
./configure
 make
### Then type as root user:

make install
### to install QEMU in /usr/local.

你可能在./courfigure出现问题

注意:可能在安装的时候,许多的软件没有安装,需要提前安装,不过会提示你会少了什么

yum install gcc
yum install zlib-devel.x86_64
yum install glib2-devel.x86_64
yum install pixman-devel.x86_64
git submodule update --init dtc   ###会提示缺某个模块,在当前的git目录下运行

安装libvirt

libvirt介绍

libvirt是目前使用最为广泛的对KVM虚拟机进行管理的工具和应用程序接口(API),而且一些常用的虚拟机管理工具(如virsh、virt-install、virt-manager等)和云计算框架平台(如OpenStack、OpenNebula、Eucalyptus等)都在底层使用libvirt的应用程序接口。

下载libvirt

git项目的位置http://libvirt.org/git/?p=libvirt.git

新建一个文件夹,存放git的文件

git clone git://libvirt.org/libvirt.git

编译安装

这部分是参考http://libvirt.org/compiling.html文章

###个人不推荐这个方法,见下面
$ ./autogen.sh --prefix=$HOME/usr
$ make
$ sudo make install

默认状态下,配置和编译后安装的目录与Linux操作系统发行版提供的默认目录可能是不一致的,例如:RHEL 6.3中用系统的RPM包安装的libvirtd、virsh等可执行程序被安装 /usr/sbin/ 目录下,libvirt.so、libvirt-qemu.so等共享库文件被安装在 /usr/lib64/ 目录下,而从前面步骤中可知自己编译安装时,默认会将libvirtd、virsh等安装在 /usr/local/sbin 目录下,而libvirt.so、libvirt-qemu.so 等被安装在 /usr/local/lib/ 目录下。如果想保持对操作系统发型版中安装可执行程序和共享库的目录的一致性, autogen.sh 脚本提供了“–system”参数,带有这个参数来配置,就会尽可能保证安装目录与原生系统的一致性,其命令行操作如下.

###个人推荐这个方法##保持对操作系统发型版中安装可执行程序和共享库的目录的一致性
$ ./autogen.sh --system
### 或者 ./configure --prefix=/usr --localstatedir=/var  --sysconfdir=/etc
$ make
$ sudo make install

安装libvirt可能也会缺少一些软件,比如

yum install libtool.x86_64
autopint : yum install gettext-devel.x86_64
python-config : yum install python-devel.x86_64
pciaccess : yum install libpciaccess.devel.x86_64

检查已经安装的libvirt

# which libvirtd
/usr/sbin/libvirtd

# which virsh
/usr/bin/virsh

参考资料

声明:未经允许禁止转载 东东东 陈煜东的博客 文章,谢谢。如经授权,转载请注明: 转载自东东东 陈煜东的博客

本文链接地址: Linux下编译安装qemu和libvirt – https://www.chenyudong.com/archives/install-qemu-libvirt-in-fedora-linux.html

分类: 虚拟化

Copyright © 2017 东东东 陈煜东的博客 粤ICP备13059639号-1

SITEMAP回到顶部 ↑