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 的简单介绍。你可以期待接下来的更多文章!