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

  • 相关阅读:
    request.getParameter() 、 request.getInputStream()和request.getReader() 使用体会
    HTTP之Content-Length
    关于spring3中No Session found for current thread!and Transaction的配置和管理(转)
    Java数据类型和MySql数据类型对应一览
    Spring MVC 解读——View,ViewResolver(转)
    LeetCode 441. Arranging Coins
    LeetCode 415. Add Strings
    LeetCode 400. Nth Digit
    LeetCode 367. Valid Perfect Square
    LeetCode 326. Power of Three
  • 原文地址:https://www.cnblogs.com/shaohef/p/3801514.html
Copyright © 2011-2022 走看看