QEMU 快速使用指南 (譯) ******************

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一樣的窗口那麼說明安裝成功。

Install-Test
圖1:測試QEMU的安裝

創建新虛擬機

如果你熟悉其他的虛擬化軟件,你可能好奇如何使用 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) 。

Install-Ubuntu
圖2:使用QEMU安裝Ubuntu

下面就像你在真機上安裝系統一樣的操作。安裝完成後,你可以直接使用以下命令從硬盤鏡像啓動虛擬機。

1
$ qemu -m 512 -hda ubuntu.img

圖3爲從硬盤鏡像啓動的虛擬機

Boot-Ubuntu
圖3:啓動已安裝的操作系統

下一步我們要做的是設置網絡。

QEMU 網絡設置

設置 QEMU 虛擬機的網絡是很麻煩的事情。我們使用與硬件以太網設備不同的內核虛擬網絡設備 TAP 和 TUN;TAP 和 TUN 只有內核支持 (如,只在軟件中) 。TAP 工作在數據鏈層,而 TUN 工作在網絡層。

QEMU 可以使用 TAP 接口爲虛擬機提供完整的網絡支持。在此之前,我們需要在宿主機上安裝 VPN (虛擬專用網) 軟件包,然後在 host 和 guest 之間建立橋接。安裝 openvpnbridge-utils 軟件包:

1
2
$ yum install openvpn
$ yum install bridge-utils

現在,用以下內容創建 qemu—qemu-ifupqemu-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

QEMU-Networking
圖4:QEMU 使用內核網絡虛擬設備

現在虛擬機的網絡正常了,可以做一些實驗了。試着在 host 上建立一個代理服務器,然後從 guest 連接到網絡。

上述爲 QEMU 的簡單介紹。你可以期待接下來的更多文章!

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章