[转帖] QEMU 的安装以及使用

Kvm、VMware、Virtualbox、Xen、Qemu 等
回复
头像
Einhorn
帖子: 114
注册时间: 2006-04-29 10:24

[转帖] QEMU 的安装以及使用

#1

帖子 Einhorn » 2006-05-14 13:27

使用的原因:

1. 不想用 VMWare。
2. Xen 中不能用 VMWare。
3. VMWare 太大,而且网络设置的网桥设置很不爽,其他的方式也不喜欢。
4. VMWare-tools 太麻烦了。
5. 偶是 BT,天才 DBT。


安装中,我选用 TAP 网卡模式,如果是 user net 的话,可以忽略所有的网卡设置,包括 Bridge 等。
QEMU 支持USB(不完全支持),支持声卡。很方便。

说明一下我的配置环境:
系统:CLFS x86 32Bit
内核:Kernel 2.6.16.5
防火墙:关闭。(避免受到影响)

软件下载:
qemu-snapshot-2006-04-14_23:

http://qemu.dad-answers.com/download/qemu/

kqemu-1.3pre5:

http://fabrice.bellard.free.fr/qemu/download.html


1. 安装。

安装 qemu-
# 去掉HTML格式的帮助文件的安装。因为我没有需要的 texi2html。不过仍然可以 man qemu。
PHP 代码:
sed -i -e '/texi2html/s:.*:\techo &:g'
-e '/install -m 644 qemu-doc.html/s:.*:\techo &:g' Makefile
要指定 gcc 编译。因为我的 gcc 默认是 4.1.0,QEMU 不能正确得编译。
PHP 代码:
./configure --prefix=/usr --enable-alsa --enable-system --enable-user --cc=i686-pc-linux-gnu-gcc-3.3.6 --host-cc=i686-pc-linux-gnu-gcc-3.3.6
make
make install

安装内核加速器 kqemu,这里不需要指定gcc,gcc 要和你编译内核的版本一样。加入加速器支持。这样可以明显加快处理速度。
PHP 代码:
./configure && make && make install

2. 配置。

PHP 代码:
内核:
要选上 TUN/TAP 和 Bridge,以及VLAN。
CONFIG_TUN=y
CONFIG_BRIDGE=y
VLAN_8021Q=y
配置加速器的设备文件:
LFS 的:
PHP 代码:
/etc/sysconfig/create 加入
/dev/kqemu dev 0666 root users char 250 0
/etc/sysconfig/modules 加入
kqemu
其他的想办法每次启动运行以下命令:
PHP 代码:
modprobe kqemu
mknod -m 666 /dev/kqemu c 250 0

sudo 设置,这个是一个非常低的安全设置,自己调整!:
允许用户创建 tapX,visudo 后加入:
PHP 代码:
Cmnd_Alias QEMU=/sbin/ifconfig, /sbin/modprobe, /sbin/brctl
ALL ALL=NOPASSWD:QEMU


Bridge 的创建:
这里推荐使用 6 楼 Lolita 给出的脚本,更方便。加入那个脚本后,就可以开始 Windows 安装了。

要先创建一个 bridge,并且设置 IP。(暂时手动进行。)
PHP 代码:
#!/bin/bash
MYBR="emu0"
MYBR_IP="192.168.0.2"
brctl addbr $MYBR
brctl stp $MYBR off
ifconfig $MYBR "${MYBR_IP}" netmask 255.255.255.0
ifconfig $MYBR up

创建 /etc/qemu-ifup,供 qemu 程序使用:
PHP 代码:
#!/bin/bash
#$1 is the ethernet(usually tapX)
MYBR="emu0"
MYBR_IP="192.168.0.2"
echo "Executing /etc/qemu-ifup"
echo "Bringing up $1 for bridged mode..."
sudo /sbin/ifconfig $1 0.0.0.0 promisc up
echo "Adding $1 to $MYBR..."
sudo /usr/sbin/brctl addif $MYBR $1
sleep 1
记得执行 chmod +x /etc/qemu-ifup


2. 安装 Windows。

# 创建一个 16G 大小的硬盘,sparse的,不占用多余的硬盘空间。
qemu-img create -f raw ~/VM_Image/qemu_Win2K 16G

安装 Windows的时候:

如果是 Win2K ,不要开加速器,不然黑屏;记得加上 -win2k-hack,XP 和 2003 都不需要这个。
如果是 WinXP,第一次重启后可以用加速器
如果是 Win2003,全程可以用加速器
如果是 Win2003,那么请用 -net nic,model=rtl8139 代替 -net nic。(感谢Lolita 提供)
如果是 XP 或者 2003,那么请用 -soundhw es1370 代替 -soundhw all。(感谢 Lolita 提供)
我的机器很奇怪,如果用256,就会死机。所以我用 -m 128。另外,64/128/192/512 等也没此问题。
如果用的是实际的 CD 安装,那么用 -cdrom /dev/hdX 就可以了。很方便。ISO 文件的话,用 -cdrom /xxx/abc.iso。

# 加速器选择参数:-no-kqemu 或者 -kernel-kqemu。

安装 Windows,用这个命令:
PHP 代码:
qemu -no-kqemu -localtime -m 128 -k en-gb -soundhw all -usb -net nic -net tap -cdrom /winiso/Win2000_SP4.iso -win2k-hack -boot d -hda ~/VM_Image/qemu_Win2K

# 第一次重启后,改变启动顺序。如果是Win2K,可以去掉 -win2k-hack了。
PHP 代码:
qemu -kernel-kqemu -localtime -m 256 -k en-gb -soundhw all -usb -net nic -net tap -cdrom /winiso/Win2000_SP4.iso -boot c -hda ~/VM_Image/qemu_Win2K

3. 运行 Windows。

#使用加速器:
PHP 代码:
qemu -localtime -m 64 -k en-gb -soundhw all -usb -kernel-kqemu -net nic -net tap -boot c -hda VM_Image/qemu_Win2K

#不用加速器:
PHP 代码:
qemu -no-kqemu -localtime -m 128 -k en-gb -soundhw all -usb -net nic -net tap -boot c -hda qemu_Win2K

使用加速器后,速度快如飞!安装Win2K3,一个小时搞定。

注意事项:
1. 因使用了TAP,guest 可以很方便的使用主机上各种服务,比如 Samba / FTP / Web 代理 等。

2. 如果只有一块网卡的话,那么 Bridge 的时候有点麻烦,会断开网络的。这个要根据实际情况决定如何解决。
这里我给出一个简单的方法,虽然不一定是最好的。用 dummy 网卡模拟一个虚拟网卡,用来和主机通讯。

可以考虑把这些加入脚本,每次启动都运行。
1. 在 /etc/modprobe.conf 里边加入 alias dummy0 dummy
2. 加载模块,运行:modprobe dummy0
3. 运行 ifconfig dummy0 看看是否成功加载。
4. 把 dummy0 加入 bridge。
PHP 代码:
ifconfig dummy0 0.0.0.0 promisc arp up
brctl addif emu0 dummy0
这样的话,guest 就可以跟客户机通讯了。

LFS 的用户,可以用这个方法来修改你的网络配置,请看:
http://wiki.linuxfromscratch.org/blf...rkingUtilities
是我写的,测试通过。

3. 如果客户机需要上网,主机作 NAT 用 MASQUARADE 比较方便。也可以开代理。最简单的方法(记得把eth0 换成连接Internet 的接口):
PHP 代码:
# echo 1 > /proc/sys/net/ipv4/ip_forward
# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
4. 如果2个实例一起开启的话,MAC 地址是一样的。启动参数中要定义 -net nic,macaddr=addr。比如:
PHP 代码:
qemu -localtime -m 192 -k en-gb -soundhw all -usb -kernel-kqemu -net nic,macaddr=52:54:00:12:34:01,model=rtl8139 -net tap -boot c -hda VM_Image/qemu_Win2003

5. 内核版本有改动的时候 (如升级),一定要重新编译 kqemu,而且记得是要运行configure命令,不然一启动QEMU就死机。我的系统死了N次才发现:(。
PHP 代码:
make clean && ./configure && make && make install && depmod -ae
rmmod kqemu && modprobe kqemu

6. Udev 的设置。
如果你的系统是用 udev 来建立程序的,那么需要设置一下tun 和 kqemu的权限。
创建 /etc/udev/rules.d/98-qemu.rules 并且加入:

PHP 代码:
KERNEL=="tun", NAME="net/%k", GROUP="users", MODE="0660"
KERNEL=="kqemu", NAME="%k", GROUP="users", MODE="0660"

/etc/modprobe.conf 中加入
PHP 代码:
options kqemu major=0

然后运行 depmod -ae && rmmod qemu && modprobe qemu,看看 /dev/kqemu 文件的权限是否正确。


Changelog:
2006-04-18
--加入 2003 的声卡支持。
--加入防火墙说明。
--加入内核变动说明。
2006-04-19
--加入 udev 配置说明。
--进行整理,加强可读性。
--加入 CDROM 的访问方法。
--加入 XP 安装窍门。
2006-04-20
--改善 /etc/qemu-ifup 脚本。由 Lolita 提供,在此感谢。
--进行整理,加强可读性。
2006-04-23
--加入软件版本说明以及下载地址。感谢 utstart 指出。
--加入上网设置。用 iptables 的 MASQUARADE 方式。

转贴请保持完整。

By 终极幻想@LinuxSir.Org
alcor_yy
帖子: 48
注册时间: 2005-07-19 17:41

#2

帖子 alcor_yy » 2006-09-08 17:31

可以用c:的现有windows吗?
NICMICHAEL
帖子: 309
注册时间: 2006-01-04 19:26

#3

帖子 NICMICHAEL » 2006-09-10 22:43

速度比VMWARE下快吗?
PS:我现在就是在VMWARE下使用XP
Athlon 64 X2 Dual Core Processor 4200+ Socket 939 OC 2.8 GHZ
G.Skill DDR400 2 3 2 5 1GB *2 Dual Channel OC DDR500
Szgalaxy 8600 GTE 650MHZ/2000MHZ
Seagate 80GB *2 RAID 0+Maxtor 80G
DFI LanParty UT NF4-D
kernel 2.6.22-ck1 再见,Con Kolivas!
回复