zoukankan      html  css  js  c++  java
  • [虚拟化/云][全栈demo] 为qemu增加一个PCI的watchdog外设(三)

    我们已经设计了一个基于qemu的watchdog了。下一步工作就是创建一个含有我们的watchdog的虚拟计算机器了。

    准备工作:

    1. 使用virt-manager或者virsh创建一个虚拟机器。

    2. 并安装一个操作系统。我选择了ubuntu12.04

    3. 保存这个虚拟机的镜像。

    为虚拟机器创建一个网络

    比较流行的网络可以是bridge网络,macvtap网络,和NAT网络。当然还有一些高级的,open-vswitch等等。

    为了将问题简单化,我们将利用libvirt的default network网络. 该网络是一个NAT的网络。

    参考:libvirt的default network网络

    我们的目的不是配置NAT,有关NAT的资料请参考netfilter的官网,howto 相关的文章。

    1. 查看 defualt network的信息。

    $ sudo virsh net-dumpxml default |grep bridge

      <bridge name='virbr2' stp='on' delay='0'/>
    2. 查看defualt network的网段

    $ sudo virsh net-dumpxml default |grep "ip address"
      <ip address='192.168.122.1' netmask='255.255.255.0'>

    bridge 也可以手动创建

           brctl addbr virbr2

           ifconfig virbr2 192.168.122.1  netmask 255.255.255.0 up

           如果将eth0加到这个bridge的话, 需要设置

           # 添加 # iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 原来的IP

           echo "1" > /proc/sys/net/ipv4/ip_forward

           # 也可以 /etc/sysctl.conf 修改net.ipv4.lp_forward=1,执行一下 sysctl -p生效

           iptables -t nat -A POSTROUTING -s 192.168.122.0/24 -o eth0 -j MASQUERADE

    使用qemu启动虚拟机

    使用 virt-manager 启动qemu 安装guest

    qemu的参数很多,我们需要$ man qemu 来弄清楚qemu的每个参数, 比较好的办法是先用virt-manager启动,然后挑选我们需要的qemu的各种参数。

    $ ps -ef |grep qemu
    qemu     13670     1 13 Jun19 ?        06:11:05 /usr/bin/qemu-system-x86_64 -machine accel=kvm -name ubuntu12.04 -S -machine pc-i440fx-1.6,accel=kvm,usb=off -m 1024 -realtime mlock=off -smp 1,sockets=1,cores=1,threads=1 -uuid 1631a77d-f447-4f74-92a6-bce68ae52f9f -no-user-config -nodefaults -chardev socket,id=charmonitor,path=/var/lib/libvirt/qemu/ubuntu12.04.monitor,server,nowait -mon chardev=charmonitor,id=monitor,mode=control -rtc base=utc -no-shutdown -device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 -drive file=/home/shhfeng/iso/image/ubuntu.12.04.img,if=none,id=drive-virtio-disk0,format=qcow2,cache=none -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x5,drive=drive-virtio-disk0,id=virtio-disk0,bootindex=1 -drive file=/home/shhfeng/iso/ubuntu-12.04.4-desktop-amd64.iso,if=none,id=drive-ide0-1-0,readonly=on,format=raw -device ide-cd,bus=ide.1,unit=0,drive=drive-ide0-1-0,id=ide0-1-0,bootindex=2 -netdev tap,fd=25,id=hostnet0 -device rtl8139,netdev=hostnet0,id=net0,mac=52:54:00:6e:ae:39,bus=pci.0,addr=0x3 -spice port=5900,addr=0.0.0.0,disable-ticketing,seamless-migration=on -device cirrus-vga,id=video0,bus=pci.0,addr=0x2 -device intel-hda,id=sound0,bus=pci.0,addr=0x4 -device hda-duplex,id=sound0-codec0,bus=sound0.0,cad=0 -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x6
    上面的蓝色部分是启动虚拟机器所需要的参数,除了netdev,其他的的参数都可以直接使用。

    使用qemu直接启动 guest安装 guest。

    $ x86_64-softmmu/qemu-system-x86_64 -enable-kvm -m 1024 -smp 1,sockets=1,cores=1,threads=1 -device cstl-watchdog -drive file=/home/shhfeng/iso/image/ubuntu.12.04.img,if=none,id=drive-virtio-disk0,format=qcow2,cache=none -device virtio-blk-pci,scsi=off,drive=drive-virtio-disk0,id=virtio-disk0,bootindex=1 -drive file=/home/shhfeng/iso/ubuntu-12.04.4-desktop-amd64.iso,if=none,id=drive-ide0-1-0,readonly=on,format=raw -device ide-cd,bus=ide.1,unit=0,drive=drive-ide0-1-0,id=ide0-1-0,bootindex=2 -spice port=5900,addr=0.0.0.0,disable-ticketing,seamless-migration=on -device cirrus-vga,id=video0 -chardev stdio,id=mon0 -mon chardev=mon0,mode=readline

    启动完成时候,我们可以安装guest的OS。注意:这个guest没有指定网卡。

    为guest指定一个网卡

    这里给guest创建基于nat网络的tap网卡。

    自行创建/启动一个tap设备

    $ sudo tunctl -t tap0
    Set 'tap0' persistent and owned by uid 0

    $ ifconfig tap0 0.0.0.0 promisc up

    in guest OS

    $ sudo ifconfig tap0 192.168.122.254  hw ether 52:54:00:6e:ae:39 up

    in guest OS

    $ cat /etc/network/interfaces

    # configue eth0 
    auto eth0 
    iface eth0 inet static
    address 192.168.123.145
    netmask 255.255.255.0


    将该设备加入到default 的network中 virbr2

    $ sudo brctl addif virbr2 tap0

     以上是手动模式,我们也可以创建一个虚拟机,使用up和down的script脚本自动完成tap的创建和配置。参考: centos6.5下kvm网络配置之NAT

    $ x86_64-softmmu/qemu-system-x86_64 -enable-kvm -m 1024 -smp 1,sockets=1,cores=1,threads=1 -device cstl-watchdog -device virtio-blk-pci,scsi=off,drive=drive-virtio-disk0,id=virtio-disk0,bootindex=1 -drive file=/home/shhfeng/iso/image/ubuntu.12.04.img,if=none,id=drive-virtio-disk0,format=qcow2,cache=none -chardev stdio,id=mon0 -mon chardev=mon0,mode=readline  -net nic,model=virtio,macaddr=52:54:00:6e:ae:39 -net tap,ifname=tap0,script=no,downscript=no -spice port=5900,addr=0.0.0.0,disable-ticketing,seamless-migration=on -device cirrus-vga,id=video0,bus=pci.0,addr=0x2

     

    通过qemu-bridge-helper创建一个tap设备。

    以上创建guest的网卡过程比较复杂, 使用-net bridge参数可以简化工作。

    -net bridge,br=virbr2,helper=/home/shhfeng/qemu/debug/qemu-bridge-helper -net nic,model=virtio
    该参数, qemu会自动的创建一个tap设备,并且将该tap设备直接连接到libvirt的default bridge “virbr2”

    /home/shhfeng/qemu/ 是我们编译qemu是设置的prefix路径。

    $ sudo x86_64-softmmu/qemu-system-x86_64 -enable-kvm -m 1024 -smp 1,sockets=1,cores=1,threads=1 -device cstl-watchdog -device virtio-blk-pci,scsi=off,drive=drive-virtio-disk0,id=virtio-disk0,bootindex=1 -drive file=/home/shhfeng/iso/image/ubuntu.12.04.img,if=none,id=drive-virtio-disk0,format=qcow2,cache=none -chardev stdio,id=mon0 -mon chardev=mon0,mode=readline  -net bridge,br=virbr2,helper=/home/shhfeng/qemu/debug/qemu-bridge-helper -net nic,model=virtio -spice port=5900,addr=0.0.0.0,disable-ticketing,seamless-migration=on -device cirrus-vga,id=video0

  • 相关阅读:
    指针数组、数组指针以及二维数组
    jquery的基本动画方法
    jquery面试需要看的基本东西
    bootstrap
    node全栈工程师
    setTimeout 0秒
    随便写的
    Bootstrap2和3的区别
    记忆的代码
    offsetWidth与scrollLeft
  • 原文地址:https://www.cnblogs.com/shaohef/p/3801514.html
Copyright © 2011-2022 走看看