1. 程式人生 > >kvm,我跟你沒完——Centos7下編譯並安裝qemu

kvm,我跟你沒完——Centos7下編譯並安裝qemu

由於使用yum安裝qemu安裝之後好像沒有qemu-system-x86_64這個命令,但是我就偏偏不想用virt-install,所以留給我的只有一條路,編譯qemu。從此,走上了一條不歸路

第一步:獲取qemu原始碼

sudo yum install git

    這一步是安裝git,如果沒有git這個命令就需要安裝,如果之前安裝過git可以跳過這一步

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

第二步:準備編譯環境

sudo yum install gzlib-devel glib2-devel pixman-devel gcc

    由於編譯需要zlib-devel.x86_64  glib2-devel.x86_64 pixman-devel.x86_64這三個軟體(由於我的系統是64位所以後綴是x86_64,如果不確定系統可以去除.x86_64這部分就可以自動匹配安裝),以及cc命令所需要的包gcc

第三步:配置生成編譯檔案MakeFile

cd /home/feng/qemu

    先進入剛才下載好的原始碼資料夾中,原始碼是剛才第一步下載的

sudo ./configure

第四步:編譯原始碼

sudo make

第五步:安裝原始碼

sudo make install

特別注意,從三步進入原始碼包資料夾後,第三步的第二個命令和第四步,第五步都必須在原始碼包資料夾裡執行

由於各個系統內建的軟體不同,可能在第三步的生成編譯檔案這一步會報錯,可能是提示說沒有make命令等,這樣的話還需要安裝autoconf automake libtool這三個軟體中的一個或多個,安裝命令也很簡單

sudo yum install autoconf automake libtool

以上是這三個軟體的安裝命令,你可以根據提示,需要哪個就安裝哪個

第六步:橋接網絡卡

sudo yum install bridge-utils

    在配置橋接網絡卡之前先把橋接工具安裝上,為什麼要安裝這個包呢?因為回頭啟動 qemu時新增tap引數時需要用到/etc/qemu-ifup等指令碼,而這個指令碼實際呼叫的是brctl命令,所以需要安裝

sudo vi /etc/sysconfig/network-script/ifcfg-ens33

    可能你的網絡卡配置檔案並不是ifcfg-ens33,這個根據具體情況,配置如下

TYPE=Ethernet
BOOTPROTO=none
NAME=ens33
DEVICE=ens33
ONBOOT=yes
BRIDGE=br0
NM_CONTROLLED=no

    這些配置專案是必要的,另外像UUID,HWADDR等可以保留

sudo vi /etc/sysconfig/network-script/ifcfg-br0
    ifcfg-br0這個檔案是自己建的,也可以拷貝ens33,但是要UUID,HWADDR這塊刪掉
TYPE=Bridge
BOOTPROTO=dhcp
NAME=br0
DEVICE=br0
ONBOOT=yes
NM_CONTROLLED=no

    進行到了這裡,我們需要重啟一下網絡卡,順帶重啟一下NetworkManager(如果想關掉它也行)

sudo systemctl restart NetworkManager

    這條命令是重啟NetworkManager

sudo systemctl restart network

    這條命令是重啟network

    !!注意:重啟之後使用ip -a就會發現此時多了一個br0,且br0的ip和ens33一樣,如果重啟之後沒有成功,可能是需要系統重新讀取一下網路配置檔案,可以選擇關機或者使用以下命令,如果一切正常則不需要執行這步

sudo source /etc/sysconfig/network-script/ifcfg-ens33
sudo source /etc/sysconfig/network-script/ifcfg-br0

    執行完這個之後還需要在重啟一下網絡卡和NetworkManager,命令同上

第七步:安裝vnc

sudo yum install tigervnc-server

    使用此命令可以安裝vnc,安裝之後首次使用vncserver命令時會提示設定密碼

第八步:編輯qemu-ifup和qemu-ifdown

sudo vi /etc/qemu-ifup
    這個檔案應該是沒有的,自己建立,內容如下
#!/bin/bash
switch=br0
if [ -n "$1" ];then
    ip link set $1 up
    sleep 1
    brctl addif ${switch} $1
    exit 0
else
    echo "Error:no interface specified"
    exit 1
fi

    這個是qemu-ifup指令碼,最好自己手打上去,複製的話可能因為字型編碼等問題會導致指令碼執行失敗

sudo vi /etc/qemu-ifup

    這個檔案應該也是沒有的,自己建立,內容如下

#!/bin/bash
switch=br0
if [ -n "$1" ];then
    ip link set $1 down
    sleep 1
    brctl delif ${switch} $1
    exit 0
else
    echo "Error:no interface specified"
    exit 1
fi

    這個是qemu-ifdown指令碼,建議手打

第九步:建立虛擬機器

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

    建立一個虛擬機器映象檔案(目前這個檔案很小,安裝虛擬機器後虛擬機器的所有檔案都會在這個映象中,類似於vmware的vmx)

qemu-system-x86_64 -m 1024 --enable-kvm -cdrom /home/ubuntu-16.04.iso -net nic -net tap -vnc 192.168.1.110:2 ubuntu.qcow2

    由於我的ip是192.168.1.110所以vnc後跟的是192.168.1.110:2,如果使用vnc客戶端(如vncviwer)連線時候地址應該是192.168.1.110:5902,(為什麼埠是5902而不是2,因為vnc的服務是5900開始的,冒號(:n)後面的數字可以理解為+n

    -m:這個引數設定記憶體

    --enable-kvm:這個引數設定kvm加速

     -cdrom:這個引數設定系統映象

    -net:這個引數是指定網絡卡模式

    -vnc:指定使用哪個ip及埠的

第十步:啟動虛擬機器

qemu-system-x86_64 -m 1024 --enable-kvm -net nic -net tap -vnc 192.168.1.110:2 ubuntu.qcow2

    在第九步使用vnc安裝完系統之後,如果想啟動系統可以使用如上命令,由於和第九步命令只差一個cdrom引數,在此不在解釋引數意義

    !!注意:如果第九步和第十步出現許可權拒絕問題,可以在命令前加sudo或者切換到root使用者執行