LinuxSir.Org  
| 网站首页 | 论坛帮助 |

欢迎来到LinuxSir.Org!
您还未登录,请登录后查看论坛,或者点击论坛上方的注册链接注册新账号。


发表新主题 回复
精华主题  
主题工具
旧 06-04-17, 19:40 第 1 帖
晨想 帅哥
 
晨想 的头像
 
 
资深版主  
  注册日期: Feb 2003
  我的住址: P.R.China
  帖子: 9,643
  精华: 9
 

标题: [LFS 幻想系列] QEMU 的安装以及使用。


使用的原因:
  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 --'/texi2html/s:.*:\techo &:g' 
         
-'/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
=
配置加速器的设备文件:
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=
然后运行 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







__________________
我的wiki: http://wiki.linuxgnu.org

马甲Show:终极幻想 黯然销魂 DawnFantasy FinalFantasy ArmageddonMa

此帖于 06-06-07 00:37 被 晨想 编辑.
  晨想 当前离线   回复时引用此帖
旧 06-04-17, 20:45 第 2 帖
soloforce 帅哥
 
soloforce 的头像
 
 
注册会员  
  注册日期: Dec 2004
  帖子: 2,280
  精华: 14
 

怒赞!真是好教材啊!

感谢终极兄手把手的教诲~







__________________
Athlon Phenom II X4 940 OC 3.6G / Kingston DDR2 4G / DFI 790X-M2RS / Sapphire HD4870 /Audigy2 ZS / 22' LCD / Acbel iPower660
  soloforce 当前离线   回复时引用此帖
旧 06-04-17, 21:11 第 3 帖
youbest
 
youbest 的头像
 
 
版主  
  注册日期: Jan 2005
  帖子: 1,524
  精华: 20
 

精华!非常详细啊.







__________________
我的第一本图书出版了!
http://blogold.chinaunix.net/u/13265/showart.php?id=2409099

青橄榄在入口的时候是苦的,过了一会你就可以长久的品味那淡淡而又清爽的甜味。

青橄榄 http://youbest.cublog.cn

青橄榄计划的第一步总算迈出来了,等待它的是万里长征.

做技术要有做技术的原则,决不拿技术做侵权的事情,更不能用来做违法的事情。工作丢了可以再找一个,原则丢了就找不回来了。

此帖于 06-04-17 21:18 被 youbest 编辑.
  youbest 当前离线   回复时引用此帖
旧 06-04-18, 18:32 第 4 帖
soloforce 帅哥
 
soloforce 的头像
 
 
注册会员  
  注册日期: Dec 2004
  帖子: 2,280
  精华: 14
 

引用:
作者: 终极幻想
使用的原因:
  1. 不想用 VMWare。
  2. Xen 中不能用 VMWare。
  3. VMWare 太大,而且网络设置的网桥设置很不爽,其他的方式也不喜欢。
  4. VMWare-tools 太麻烦了。
  5. 偶是BT!
qemu+grdesktop , 真是棒极了,vmware+vmtools可以扔掉了。
  soloforce 当前离线   回复时引用此帖
旧 06-04-18, 19:21 第 5 帖
d00m3d
 
d00m3d 的头像
 
 
资深版主  
  注册日期: Nov 2004
  帖子: 14,541
  精华: 10
 

Great!

印像中,好像哪位在软件版说个用 gcc-4 成功过。







__________________
nO ^^4+73R wH1<h d!5+R0z j00 42E U$1N9 7r% LpHZ 4+ l3457 oN(&
  d00m3d 当前离线   回复时引用此帖
旧 06-04-20, 02:23 第 6 帖
soloforce 帅哥
 
soloforce 的头像
 
 
注册会员  
  注册日期: Dec 2004
  帖子: 2,280
  精华: 14
 

对于用桥接(bridged)方式提供网络接口的,我写了个脚本,第一次启动qemu时将自动建立一个虚拟以太网桥并把一个以太接口接到网桥上, 之后每创建一个qemu-machine就自动生成一个以太接口并自动接入到网桥上。这样就可以省得每次手动创建了。

本脚本基于终极幻想的思路 :)

PHP 代码:
#!/bin/bash 
# ------------------------------------------------------
# author:     Lolita@linuxsir.org based on 
#        终极幻想@linuxsir.org 's idea
# date:        2006.04.20, small hours
# script name:     /etc/qemu-ifup
# description:    This script will be executed automatically 
#        when a qemu-machine instance is created. 
# note:        $1 is an ethernet interface usually tapX , 
#        where X is 0, 1, 2, etc. 
# -------------------------------------------------------
# Let the fun begin ^_^
#-----------------------

echo
echo 
"Executing /etc/qemu-ifup ... "

virtual_bridge="vbr0"
virtual_bridge_ip="192.168.1.1"

## if a virtual bridge is not found, create it.
if [ ! "$(sudo /sbin/ifconfig | grep $virtual_bridge )" ]; then
if [   "$(sudo /sbin/ifconfig | grep $virtual_bridge_ip )" ]; then
    
echo "IP $virtual_bridge_ip has been occupied by other interfaces. "
    
echo "Virtual bridge cannot be created !"
    
exit 1
else
    
## add a virtual bridge
    
sudo /sbin/brctl addbr $virtual_bridge 
        
    
## turn off the spanning tree protocol, if there is 
    ## only one bridge in your net and no loop topology. 
    
sudo /sbin/brctl stp $virtual_bridge off
    
    
## config this bridge interface
    
sudo /sbin/ifconfig $virtual_bridge $virtual_bridge_ip netmask 255.255.255.0
    sudo 
/sbin/ifconfig $virtual_bridge up
    
    
echo "Bringing up bridge $virtual_bridge with IP $virtual_bridge_ip ... done"
    
sleep 1
fi
fi


sudo 
/sbin/ifconfig $1 0.0.0.0 promisc up
echo "Bringing up ethernet interface $1 to promiscuous mode ... done"

sudo /sbin/brctl addif $virtual_bridge $1
echo "Attaching $1 to bridge $virtual_bridge ... done"

sleep 1

## end of script 

此帖于 06-04-20 02:27 被 soloforce 编辑.
  soloforce 当前离线   回复时引用此帖
旧 06-04-20, 03:51 第 7 帖
晨想 帅哥
 
晨想 的头像
 
 
资深版主  
  注册日期: Feb 2003
  我的住址: P.R.China
  帖子: 9,643
  精华: 9
 

非常感谢。:)。加入文章中。。


对了,Lolita,这样安装 XP 的话,可以用加速器,速度快很多。
PHP 代码:
第一次重启的时候,改变启动顺序,并且加入加速器支持。这样可以明显减少所需时间(XP测试通过
  晨想 当前离线   回复时引用此帖
旧 06-04-20, 07:16 第 8 帖
soloforce 帅哥
 
soloforce 的头像
 
 
注册会员  
  注册日期: Dec 2004
  帖子: 2,280
  精华: 14
 

甚好!否则我装个XP至少3个小时,花儿都凋谢了 :S
  soloforce 当前离线   回复时引用此帖
旧 06-04-22, 19:33 第 9 帖
xep007
 
xep007 的头像
 
 
注册会员  
  注册日期: Nov 2001
  帖子: 1,861
  精华: 3
 

我的系统是ubuntu-amd64位,老提示qemu: invalid option -- '-kernel-kqemu'
。难道64位的不支持kqemu吗?但是configure是提示kqemu是支持的。







__________________
CPU:sempron(闪龙)2800+/754/64位
主板:七彩虹C.NF4-4X
内存:1G DDR400
硬盘:希捷SATA 80G
显卡:七彩虹PCI-E 16x
主板集成网卡声卡。
  xep007 当前离线   回复时引用此帖
旧 06-04-22, 20:01 第 10 帖
srlmm
 
 
 
注册会员  
  注册日期: Feb 2005
  帖子: 203
  精华: 0
 

好东西,一定要顶
  srlmm 当前离线   回复时引用此帖
旧 06-04-22, 20:09 第 11 帖
晨想 帅哥
 
晨想 的头像
 
 
资深版主  
  注册日期: Feb 2003
  我的住址: P.R.China
  帖子: 9,643
  精华: 9
 

引用:
作者: xep007
我的系统是ubuntu-amd64位,老提示qemu: invalid option -- '-kernel-kqemu'
。难道64位的不支持kqemu吗?但是configure是提示kqemu是支持的。
还没用上64,不清楚,不过按照错误提示就是说你编译的qemu不支持内核加速,重新configure一下,再make && make install 试试。

至于 kqemu,dmesg 可以看到加载的情况。
  晨想 当前离线   回复时引用此帖
旧 06-04-23, 12:12 第 12 帖
lllkkk
 
lllkkk 的头像
 
 
注册会员  
  注册日期: Aug 2004
  帖子: 56
  精华: 0
 

引用:
作者: Lolita
对于用桥接(bridged)方式提供网络接口的,我写了个脚本,第一次启动qemu时将自动建立一个虚拟以太网桥并把一个以太接口接到网桥上, 之后每创建一个qemu-machine就自动生成一个以太接口并自动接入到网桥上。这样就可以省得每次手动创建了。

本脚本基于终极幻想的思路 :)

PHP 代码:
#!/bin/bash 
# ------------------------------------------------------
# author:     Lolita@linuxsir.org based on 
#        终极幻想@linuxsir.org 's idea
# date:        2006.04.20, small hours
# script name:     /etc/qemu-ifup
# description:    This script will be executed automatically 
#        when a qemu-machine instance is created. 
# note:        $1 is an ethernet interface usually tapX , 
#        where X is 0, 1, 2, etc. 
# -------------------------------------------------------
# Let the fun begin ^_^
#-----------------------

echo
echo 
"Executing /etc/qemu-ifup ... "

virtual_bridge="vbr0"
virtual_bridge_ip="192.168.1.1"

## if a virtual bridge is not found, create it.
if [ ! "$(sudo /sbin/ifconfig | grep $virtual_bridge )" ]; then
if [   "$(sudo /sbin/ifconfig | grep $virtual_bridge_ip )" ]; then
    
echo "IP $virtual_bridge_ip has been occupied by other interfaces. "
    
echo "Virtual bridge cannot be created !"
    
exit 1
else
    
## add a virtual bridge
    
sudo /sbin/brctl addbr $virtual_bridge 
        
    
## turn off the spanning tree protocol, if there is 
    ## only one bridge in your net and no loop topology. 
    
sudo /sbin/brctl stp $virtual_bridge off
    
    
## config this bridge interface
    
sudo /sbin/ifconfig $virtual_bridge $virtual_bridge_ip netmask 255.255.255.0
    sudo 
/sbin/ifconfig $virtual_bridge up
    
    
echo "Bringing up bridge $virtual_bridge with IP $virtual_bridge_ip ... done"
    
sleep 1
fi
fi


sudo 
/sbin/ifconfig $1 0.0.0.0 promisc up
echo "Bringing up ethernet interface $1 to promiscuous mode ... done"

sudo /sbin/brctl addif $virtual_bridge $1
echo "Attaching $1 to bridge $virtual_bridge ... done"

sleep 1

## end of script 
弱弱的问一下这个脚本应该保存到哪里,是自己手动运行吗?







__________________
仰首攀南斗,翻身倚北辰。舉頭天外望,無我這般人。
http://www.kylinx.net/
  lllkkk 当前离线   回复时引用此帖
旧 06-04-23, 12:26 第 13 帖
utstar
 
utstar 的头像
 
 
注册会员  
  注册日期: Jan 2005
  帖子: 120
  精华: 0
 

great!thanks!
  utstar 当前离线   回复时引用此帖
旧 06-04-23, 12:27 第 14 帖
utstar
 
utstar 的头像
 
 
注册会员  
  注册日期: Jan 2005
  帖子: 120
  精华: 0
 

好像没介绍qemu的版本啊?
  utstar 当前离线   回复时引用此帖
旧 06-04-23, 12:31 第 15 帖
晨想 帅哥
 
晨想 的头像
 
 
资深版主  
  注册日期: Feb 2003
  我的住址: P.R.China
  帖子: 9,643
  精华: 9
 

引用:
作者: lllkkk
弱弱的问一下这个脚本应该保存到哪里,是自己手动运行吗?
/etc/qemu-ifup

我里边不是说了么,而且脚本里边也说了啊。


引用:
作者: utstar
好像没介绍qemu的版本啊?
谢谢提醒,已经添加。

此帖于 06-04-23 12:34 被 晨想 编辑.
  晨想 当前离线   回复时引用此帖
发表新主题 回复


主题工具

发帖规则
您 [不可以] 发表新主题
您 [不可以] 回复主题
您 [不可以] 上传附件
您 [不可以] 编辑您的帖子

已 [启用] BB 代码
已 [启用] 表情符号
已 [启用] IMG 代码
已 [禁用] HTML 代码
[论坛跳转…]


所有时间均为[北京时间]。现在的时间是 11:07


Powered by vBulletin 版本 3.6.8
版权所有 ©2000 - 2012, Jelsoft Enterprises Ltd.
官方中文技术支持: vBulletin 中文
版权所有 ©2002 - 2011, LinuxSir.Org