https://prettyxw.com/article/2014/02/14/the-quick-guide-to-qemu-setup-translate/
本文翻譯自 Linux for You 網站上的文章 The Quick Guide to QEMU Setup (2011.5)
正文如下
在接下來的一系列文章中,我們將逐一介紹 QEMU 的基本使用、操作系統安裝、QEMU 的網絡設置 以及 利用 QEMU 針對 ARM 架構進行嵌入式開發。下面我們從 QEMU 基礎開始我們的第一部分。
當我最初使用電腦的時候,我驚呆了。只需要點一下鼠標就能放音樂、看電影、玩遊戲,這對於當時的我來說很神奇。時過變遷,我瞭解了編譯和代碼。我的好奇心激起了我對代碼熱情。即使已經編譯好的軟件包越來越容易獲取,但我還是傾向於源碼安裝。我對 QEMU 就這麼做。
QEMU 是最好的模擬器之一。當然,仍然沒有多少人能夠物盡其用。本篇文章內容比較基礎,但是可以期待在後面有一些有趣的東西。
源碼安裝 QEMU
第一步,下載 QEMU 源碼;目前最新版本是 0.14,這裏有下載地址。解壓源碼包,進入 QEMU 目錄:
1
2
|
$ tar
-zxvf qemu-0.14.0. tar .gz $ cd
qemu-0.14.0 |
運行配置腳本。我們將針對 i386 架構進行編譯。 (它也可爲其他架構編譯,如 ARM、PPC、SPARC 等。) 接下來我們要在虛擬機裏面安裝 Ubuntu 發行版——這就是我們爲什麼選擇針對 i386 架構編譯 QEMU:
1
|
$ . /configure
–target-list=i386-softmmu |
希望你在運行 configure 腳本的時候沒有碰到什麼錯誤。如果出現問題,可能是因爲缺少了某個庫或者頭文件。去找到它然後安裝就能解決問題。
當 configure 腳本執行完畢,使用 make
命令編譯代碼。編譯完成後,QEMU 的二進制文件應該安裝到合適的位置。在我的 Fedora 系統上,我使用
su
命令來獲得必要的 root 權限,然後使用 make install
來安裝。
使用 qemu
命令來檢查一下 QEMU 是否安裝成功,如果運行時彈出一個像圖1一樣的窗口那麼說明安裝成功。
創建新虛擬機
如果你熟悉其他的虛擬化軟件,你可能好奇如何使用 QEMU 創建一個新的虛擬機。第一步是爲虛擬機創建一個硬盤鏡像。然後就可以安裝 Ubuntu 9.10 了;這裏我們創建一個 10GB 的硬盤鏡像就足夠了。使用以下命令創建:
1
2
3
|
$ qemu-img create ubuntu.img 10G $ ls
-lh ubuntu.img -rw-r--r--. 1 root root 10G Mar 11 11:54 ubuntu.img |
下一步是安裝 Ubuntu (我已經下載好了 Ubuntu 9.10 (Karmic) 的 ISO 鏡像,放在我的工作目錄下) :
1
|
$ qemu -hda ubuntu.img -boot d -cdrom . /ubuntu-9 .10-desktop-i386.iso -m 512 |
在上面的命令中,-hda
選項用來指定磁盤鏡像文件;-cdrom
用來指定 CD-ROM 或者 ISO 鏡像來作爲虛擬機的光驅。-m
選項指定虛擬機所使用的內存大小 (此種情況下,內存大小我申請爲 512MB;你可以根據自己的需要和硬件狀況來決定) 。最後,我們使用
-boot d
選項讓 QEMU 從 ISO 鏡像啓動虛擬機。運行上述命令後,虛擬機啓動,然後出現 Ubuntu 啓動菜單 (見圖2) 。
下面就像你在真機上安裝系統一樣的操作。安裝完成後,你可以直接使用以下命令從硬盤鏡像啓動虛擬機。
1
|
$ qemu -m 512 -hda ubuntu.img |
圖3爲從硬盤鏡像啓動的虛擬機
下一步我們要做的是設置網絡。
QEMU 網絡設置
設置 QEMU 虛擬機的網絡是很麻煩的事情。我們使用與硬件以太網設備不同的內核虛擬網絡設備 TAP 和 TUN;TAP 和 TUN 只有內核支持 (如,只在軟件中) 。TAP 工作在數據鏈層,而 TUN 工作在網絡層。
QEMU 可以使用 TAP 接口爲虛擬機提供完整的網絡支持。在此之前,我們需要在宿主機上安裝 VPN (虛擬專用網) 軟件包,然後在 host 和 guest 之間建立橋接。安裝
openvpn
和 bridge-utils
軟件包:
1
2
|
$ yum install
openvpn $ yum install
bridge-utils |
現在,用以下內容創建 qemu—qemu-ifup
和 qemu-ifdown
兩個腳本:
1
2
3
4
5
6
7
8
9
10
11
|
#qemu-ifup /sbin/ifconfig
eth1 down /sbin/ifconfig
eth1 0.0.0.0 promisc up openvpn --mktun --dev tap0 ifconfig
tap 0 0.0.0.0 up brctl addbr br0 brctl addif br0 eth1 brctl addif br0 tap0 brctl stp br0 off ifconfig
br0 10.10.10.2 netmask 255.255.255.0 |
上面這個腳本用來開啓 QEMU 網絡設置,第一行,禁用 Ethernet 設備,由於 Ethernet 接口是橋接網絡的一部分,所以我們在第二行將其 IP 地址設置爲 0.0.0.0。在第三、四行,我們創建了並且啓動了 TAP/tap0。下面幾步,使用 eth1 和 tap0 創建橋接。最後,給橋指定一個 IP 地址。
下面是 qemu-ifdown
腳本:
1
2
3
4
5
6
7
|
#qemu-ifdown ifconfig
eth1 down ifconfig
eth1 -promisc ifup eth1 ifconfig
br0 down brctl delbr br0 openvpn --rmtun --dev tap0 |
這個腳本用來關閉 QEMU 網絡;見文知義,關閉兩個接口,刪除網橋,和 tap0 設備。
把這兩個腳本複製到你的 /etc
目錄下,然後進行測試:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
$ /etc/qemu-ifup Wed Apr 6 15:53:50 2011 TUN /TAP
device tap0 opened Wed Apr 6 15:53:50 2011 Persist state
set to: ON
$ ifconfig
br0 br0 Link encap:Ethernet HWaddr 00:25:11:74:5B:0C
inet addr:10.10.10.2 Bcast:10.10.10.255 Mask:255.255.255.0
inet6 addr: fe80::225:11ff:fe74:5b0c /64
Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:29 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 b) TX bytes:7539 (7.3 KiB)
$ ifconfig
tap0 tap0 Link encap:Ethernet HWaddr C2:10:27:8C:B8:35
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b) |
虛擬設備 tap0 和網橋 br0 都啓動了,腳本運行正常。
1
2
3
4
|
$ /etc/qemu-ifdown Error: Connection activation failed: Device not managed by NetworkManager Wed Apr 6 15:56:44 2011 TUN /TAP
device tap0 opened Wed Apr 6 15:56:44 2011 Persist state
set to: OFF |
一切設置正常;是時候啓動完整網絡支持的 Ubuntu 虛擬機了。
開啓網絡 (使用 root 用戶) :
1
|
$ /etc/qemu-ifup |
然後啓動虛擬機 (使用普通用戶) :
1
|
$ qemu -m 512 -hda ubuntu.img -net nic -net tap,ifname=tap0,script=no |
當機器啓動之後,在虛擬機裏設置 eth0
接口的IP地址:
1
|
$ sudo
ifconfig eth0 10.10.10.100 netmask 255.255.255.0 |
試着 ping 以下網橋的 IP (結果見圖4) :
1
|
$ ping
10.10.10.2 |
現在虛擬機的網絡正常了,可以做一些實驗了。試着在 host 上建立一個代理服務器,然後從 guest 連接到網絡。
上述爲 QEMU 的簡單介紹。你可以期待接下來的更多文章!