7、实例应用:用Slackware+Xen虚拟Fedora 5.0
7.1 Fedora 安装运行于一个物理分区中;
7.11 下载Fedora 5.0的基础系统;
请到: http://jailtime.org
7.12 解压和提取相应文件;
我们把下载下来的Fedora 5 基础系统,存放到/opt/fedora5vm目录中;然后解压;
[root@localhost ~]# mkdir /opt/fedora5vm
[root@localhost ~]# mv fedora.fc5.20060401.img.tgz /opt/fedora5vm
[root@localhost ~]# cd /opt/fedora5vm
[root@localhost fedora5vm]# tar zxvf fedora.fc5.20060401.img.tgz
[root@localhost fedora5vm]# ls
fedora.fc5.20060401.img.tgz fedora.fc5.img fedora.fc5.xen.cfg fedora.swap
7.13 规划硬盘的物理分区并创建文件系统;
您可以在您的硬盘上创建一个物理分区,如果有空闲的物理分区可用也行。然后创建一下文件系统。分区工具用fdisk 工具就行。
分区工具,请参考:《实例解说 fdisk 使用方法》
创建文件系统,请参考:《Linux 创建文件系统及挂载文件系统流程详解》
比如我们想把Fedora 放在/dev/hda5上,我们可以用mkfs.ext3来格式化/dev/hda5。
[root@localhost ~]# /sbin/mkfs.ext3 /dev/hda5
7.14 构建Fedora 5 的基础系统;
因为我们已经下载了,Fedora Core 5的基础系统的映像文件,也做了解压。会看到 fedora.fc5.img这个映像文件; 我们把这个映像挂载,然后把它的内容复制到我们刚才创始的文件系统的分区中,也就是/dev/hda5;
[root@localhost ~]# mkdir /mnt/tmp
[root@localhost ~]# mkdir /mnt/fedora
[root@localhost ~]# mount -o loop /opt/fedora5vm/fedora.fc5.img /mnt/tmp
[root@localhost ~]# mount /dev/hda5 /mnt/fedora
复制fedora.fc5.img中的内容,到/dev/hda5中;
[root@localhost ~]# cp -rp /mnt/tmp/* /mnt/fedora
[root@localhost ~]# umount /mnt/tmp
然后是chroot 到/mnt/fedora目录中,实际就是操作Fedora 5系统,我们要创建Fedora 5的root密码;
[root@localhost ~]# chroot /mnt/fedora/
root@localhost:/#
root@localhost:/# passwd root
Changing password for user root.
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully.
root@localhost:/# exit
然后我们卸载/dev/hda5分区;
[root@localhost ~]# umount /dev/hda5
7.15 创建Fedora 5 引导文件;
我们在解压 fedora.fc5.20060401.img.tgz 时看到一个文件fedora.fc5.xen.cfg ,这个就是Fedora 5的引导文件,人家洋人都为我们写好了。我们只是改一改就能用了;
我们要回到fedora.fc5.xen.cfg的存放目录/opt/fedora5vm中;复制fedora.fc5.xen.cfg名为fc5vm.cfg的文件。然后我们把fc5vm.cfg作为被虚拟的Fedora 5的引导文件;
[root@localhost ~]# cd /opt/fedora5vm
[root@localhost fedora5vm]# cp fedora.fc5.xen.cfg fc5vm.cfg
我们要对fc5vm.cfg做一下修改;
在fc5vm.cfg中,我们会看到如下的内容:
kernel = "/boot/vmlinuz-2.6-xenU"
memory = 128
name = "fedora.fc5"
nics = 1
dhcp = "dhcp"
disk = ['file:/xen/fedora/fedora.fc5.img,sda1,w', 'file:/xen/fedora/fedora.swap,sda2,w']
root = "/dev/sda1 ro"
首先我们看kernel 这行,这行是定义虚拟操作系统内核的,我们要用到我们安装xen是所安装的内核。要在虚拟平台/boot目录中找。比如我用Slackware虚拟 Fedora 。那虚拟平台就是Slackware。我应试在Slackware的/boot中找文件名中包含vmlinuz和xenU字样的文件。比如我找以的是:
[root@localhost ~]# ls -lh /boot/vmlinuz*xenU*
lrwxrwxrwx 1 root root 21 2006-04-12 07:49 /boot/vmlinuz-2.6-xenU -> vmlinuz-2.6.12.6-xenU
lrwxrwxrwx 1 root root 21 2006-04-12 07:49 /boot/vmlinuz-2.6.12-xenU -> vmlinuz-2.6.12.6-xenU
-rw-r--r-- 1 root root 1.1M 2006-04-12 07:49 /boot/vmlinuz-2.6.12.6-xenU
我们看到有类似的三个文件,实际上只有一个,也就是 vmlinuz-2.6.12.6-xenU,其它的都是他的链接文件。所以我们在kernel行中指定内核时,可以用这三个中的任何一个;比如我们用 vmlinuz-2.6-xenU;
memory是指定内存大小的,我们设置被虚拟的Fedora 5的虚拟内存大小是 128M;
name 是定义虚拟操作系统的名字的,可以通过xm list中显示出来,我们也改简单点,改为fc5
nics=1 不变
dhcp 这行,是用来指定获取Fedora 5系统的IP是通过DHCP获取的,不过您也可以指定IP。可以不要这行;
vif = ['mac=aa:00:00:00:00:11'] 用来指定Fedora 5的网卡的物理地址;可以自己定义。
ip = "192.168.1.144" 用来指定虚拟网卡的IP
netmask="255.255.255.0" 用来指定掩码
disk这行是用来定义Fedora所处的物理分区映射点,及物理交换分区及映射点的;因为物理分区是通过phy:来指定的。所以我们得改一改。因为我们已经把Fedora放在了/dev/hda5了。另外交换分区在哪呢?可以通过swapon -s来查看物理交换分区,要在虚拟平台中查看;比如我得到的是/dev/hda8是交换分区。所以disk这行就应该这样写:
disk = ['phy:hda5,sda1,w','phy:hda8,sda2,w']
不过真实物理分区的映射点,比如/dev/hda5映射到了/dev/sda1,交换分区/dev/hda8映射到了/dev/sda2。映射过后,Fedora的root文件系统就用映射后的/dev/sda1。慢慢理解;物理分区的映射点是可以在Linux系统设备定义的许可范围内进行。自己尝试着换一换映射点。如果Fedora的root所处的物理分区的映射点改变后,Fedora的root=的值也得跟着改变。另外还要改Fedora系统中的/etc/fstab文件;
root一行,来指定Fedora的所有的虚拟物理分区(就是映射点)。映射到哪里了呢?Fedora 安装到了/dev/hda5,映射后虚拟到了/dev/sda1。所以Fedora系统引导时就寻找/dev/sda1做为文件系统。
所以root这行可写为:
root = "/dev/sda1 ro"
所以我们可以这样写Fedora 5的引导配置文件;
第一种:如果是用DHCP来获取IP:
kernel = "/boot/vmlinuz-2.6-xenU"
memory = 128
name = "fc5"
nics = 1
vif = ['mac=aa:00:00:00:00:11']
dhcp = "dhcp"
disk = ['phy:hda5,sda1,w','phy:hda8,sda2,w']
root = "/dev/sda1 ro"
第二种:如果是指定IP的话:
kernel = "/boot/vmlinuz-2.6-xenU"
memory = 128
name = "fc5"
nics = 1
vif = ['mac=aa:00:00:00:00:11']
disk = ['phy:hda5,sda1,w','phy:hda8,sda2,w']
root = "/dev/sda1 ro"
ip = "192.168.1.144"
netmask="255.255.255.0"
再举一例:
比如Fedora 被安装在了/dev/hda5分区,物理交换分区为/dev/hda8。通过DHCP获得IP。我想映射/dev/hda5到/dev/hda5,并且想映射/dev/hda8到/dev/hda8。我们应该如何修改一些配置文件呢?
Fedora的引导文件内容应该是:
kernel = "/boot/vmlinuz-2.6-xenU"
memory = 128
name = "fc5"
nics = 1
vif = ['mac=aa:00:00:00:00:11']
dhcp = "dhcp"
disk = ['phy:hda5,hda5,w','phy:hda8,hda8,w']
root = "/dev/hda5 ro"
然后我们应该再把装有Fedora的/dev/hda5分区挂载,然后修改Fedora系统的/etc/fstab。注意:不是修改虚拟平台的/etc/fstab。不要弄混了!!!!
应该先挂载Fedora 5所处的分区:
[root@localhost ~]# mount /dev/hda5 /mnt/fedora/
然后修改Fedora 5的/etc/fstab文件,也就是/mnt/fedora/etc/fstab文件:找到如下两行:
/dev/sda1 / ext3 defaults 1 1
/dev/sda2 none swap sw 0 0
改为:
/dev/hda5 / ext3 defaults 1 1
/dev/hda8 none swap sw 0 0
接着再umount /mnt/fedora
[root@localhost ~]# umount /mnt/fedora
7.16 引导Fedora 5 ;
引导运行Fedora 5.0就好办了,就是用xm 工具来引导;首先要确认你的Fedora 5的配置文件放在哪里。比如我是放在了/opt/fedora5vm中。并且文件名为fc5vm.cfg。所以我就可以这样来引导Fedora 5。
[root@localhost ~]# /usr/sbin/xm create -c /opt/fedora5vm/fc5vm.cfg
7.17 虚拟操作系统网卡不能激活的处理方法 ;
modprobe: FATAL: Could not load /lib/modules/2.6.12.6-xenU/modules.dep:
No such file or directory
如果出现类似上面的现象,请复制虚拟平台的中的/lib/modues/下的2.6.12.6-xenU 到Fedora系统中;
方法是先挂载Fedora 所处的物理分区,然后用cp -rp 来复制;
首先要关掉Fedora,然后再复制;
[root@localhost ~]# xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 462 1 r----- 2192.9
fc5 2 128 1 -b---- 6.4
以上面虚拟操作系统的ID为准,比如fc5的ID是 2,就要运行如下命令;
[root@localhost ~]# xm destroy 2
然后mount 挂载Fedora所处的物理分区/dev/hda5;
[root@localhost ~]# mount /dev/hda5 /mnt/fedora
[root@localhost ~]# mkdir /mnt/fedora/lib/modules
注:在Fedora中的/lib目录中创建modules。如果有了就不创建;
[root@localhost ~]# cp -rp /lib/modules/2.6.12.6-xenU/ /mnt/fedora/lib/modules/
[root@localhost ~]# chmod -R 755 /mnt/fedora/lib/modules/
[root@localhost ~]# umount /mnt/fedora
7.2 Fedora 安装运行于一个映像文件中;
7.21 下载Fedora 5.0的基础系统;
请到: http://jailtime.org
7.22 解压和提取相应文件;
我们把下载下来的Fedora 5 基础系统,存放到/opt/fedora5vm目录中;然后解压;
[root@localhost ~]# mkdir /opt/fedora5vm
[root@localhost ~]# mv fedora.fc5.20060401.img.tgz /opt/fedora5vm
[root@localhost ~]# cd /opt/fedora5vm
[root@localhost fedora5vm]# tar zxvf fedora.fc5.20060401.img.tgz
[root@localhost fedora5vm]# ls
fedora.fc5.20060401.img.tgz fedora.fc5.img fedora.fc5.xen.cfg fedora.swap
7.23 修改引导运行Fedora的配置文件;
我们从fedora.fc5.20060401.img.tgz 解压出来一个fedora.fc5.xen.cfg ,这个就是用来引导Fedora 5的配置文件。我们改一改以适合我们的需要。我们把这个文件复制为fc5vm.cfg
[root@localhost ~]# cp /opt/fedora5vm/fedora.fc5.xen.cfg /opt/fedora5vm/fc5vm.cfg
fc5vm.cfg 内容如下:
kernel = "/boot/vmlinuz-2.6-xenU"
memory = 128
name = "fc5"
nics = 1
vif = ['mac=aa:00:00:00:00:11']
dhcp = "dhcp"
disk = ['file:/opt/fedora5vm/fedora.fc5.img,sda1,w', 'file:/opt/fedora5vm/fedora.swap,sda2,w']
root = "/dev/sda1 ro"
注解:
首先我们看kernel 这行,这行是定义虚拟操作系统内核的,我们要用到我们安装xen是所安装的内核。要在虚拟平台/boot目录中找。比如我用Slackware虚拟 Fedora 。那虚拟平台就是Slackware。我应试在Slackware的/boot中找文件名中包含vmlinuz和xenU字样的文件。比如我找以的是:
[root@localhost ~]# ls -lh /boot/vmlinuz*xenU*
lrwxrwxrwx 1 root root 21 2006-04-12 07:49 /boot/vmlinuz-2.6-xenU -> vmlinuz-2.6.12.6-xenU
lrwxrwxrwx 1 root root 21 2006-04-12 07:49 /boot/vmlinuz-2.6.12-xenU -> vmlinuz-2.6.12.6-xenU
-rw-r--r-- 1 root root 1.1M 2006-04-12 07:49 /boot/vmlinuz-2.6.12.6-xenU
我们看到有类似的三个文件,实际上只有一个,也就是 vmlinuz-2.6.12.6-xenU,其它的都是他的链接文件。所以我们在kernel行中指定内核时,可以用这三个中的任何一个;比如我们用 vmlinuz-2.6-xenU;
memory是指定内存大小的,我们设置被虚拟的Fedora 5的虚拟内存大小是 128M;
name 是定义虚拟操作系统的名字的,可以通过xm list中显示出来,我们也改简单点,改为fc5
nics=1 不变
dhcp 这行,是用来指定获取Fedora 5系统的IP是通过DHCP获取的,不过您也可以指定IP。可以不要这行;
vif = ['mac=aa:00:00:00:00:11'] 用来指定Fedora 5的网卡的物理地址;可以自己定义。
ip = "192.168.1.144" 用来指定虚拟网卡的IP
netmask="255.255.255.0" 用来指定掩码
disk来定义Fedora 5.0 所用的文件系统,因为我们这次用的是映像文件。所以要用file:来指定,Fedora 5用的交换分区,也是一个映像文件;所以有:
disk = ['file:/opt/fedora5vm/fedora.fc5.img,sda1,w', 'file:/opt/fedora5vm/fedora.swap,sda2,w']
指定fedora.fc5.img映像文件虚拟映射到/dev/sda1;交换分区文件fedora.swap映射到了/dev/sda2。映射过后,Fedora的root文件系统就用映射后的/dev/sda1。虚拟映射设备是可以在Linux系统设备定义的许可范围内进行。自己尝试着换一换映射点。如果Fedora的虚拟映射设备变了,我们得改变Fedora中的/etc/fstab。
root一行,来指定Fedora的root位于哪个映射后的设备。映射到哪里了呢?Fedora 安装到了/dev/sda1,映射后虚拟到了/dev/sda1。所以Fedora系统引导时就寻找/dev/sda1做为文件系统。
所以root这行可写为:
root = "/dev/sda1 ro"
所以我们可以这样写Fedora 5的引导配置文件;
第一种:如果是用DHCP来获取IP:
kernel = "/boot/vmlinuz-2.6-xenU"
memory = 128
name = "fc5"
nics = 1
vif = ['mac=aa:00:00:00:00:11']
dhcp = "dhcp"
disk = ['file:/opt/fedora5vm/fedora.fc5.img,sda1,w', 'file:/opt/fedora5vm/fedora.swap,sda2,w']
root = "/dev/sda1 ro"
第二种:如果是指定IP的话:
kernel = "/boot/vmlinuz-2.6-xenU"
memory = 128
name = "fc5"
nics = 1
vif = ['mac=aa:00:00:00:00:11']
disk = ['file:/opt/fedora5vm/fedora.fc5.img,sda1,w', 'file:/opt/fedora5vm/fedora.swap,sda2,w']
root = "/dev/sda1 ro"
ip = "192.168.1.144"
netmask="255.255.255.0"
7.24 引导Fedora 5 ;
引导运行Fedora 5.0就好办了,就是用xm 工具来引导;首先要确认你的Fedora 5的配置文件放在哪里。比如我们在这个例子中是放在了/opt/fedora5vm中。并且文件名为fc5vm.cfg。所以我就可以这样来引导Fedora 5。
[root@localhost ~]# /usr/sbin/xm create -c /opt/fedora5vm/fc5vm.cfg
7.25 网卡不能激活的处理;
modprobe: FATAL: Could not load /lib/modules/2.6.12.6-xenU/modules.dep:
No such file or directory
如果出现类似上面的现象,请复制虚拟平台的中的/lib/modues/下的2.6.12.6-xenU 到Fedora系统中;
方法是先挂载Fedora 所处的物理分区,然后用cp -rp 来复制;
首先要关掉Fedora,然后再复制;
[root@localhost ~]# xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 462 1 r----- 2192.9
fc5 2 128 1 -b---- 6.4
以上面虚拟操作系统的ID为准,比如fc5的ID是 2,就要运行如下命令;
[root@localhost ~]# xm destroy 2
然后mount 挂载Fedora所处的物理分区/dev/hda5;
[root@localhost ~]# mount -o loop /opt/fedora5vm/fedora.fc5.img /mnt/fedora
[root@localhost ~]# mkdir /mnt/fedora/lib/modules
注:在Fedora中的/lib目录中创建modules。如果有了就不创建;
[root@localhost ~]# cp -rp /lib/modules/2.6.12.6-xenU/ /mnt/fedora/lib/modules/
[root@localhost ~]# chmod -R 755 /mnt/fedora/lib/modules/
[root@localhost ~]# umount /mnt/fedora
然后再来引导Fedora 5,进入系统后用ifconfig来查看网卡的IP之类的,如果没有激活,请用下面的命令来加载网卡模块;在要Fedora中执行;
[root@fc5_pristine ~]# modprobe xennet
[root@fc5_pristine ~]# dhclient 如果您用DHCP获取IP,请执行;
7.26 Fedora 映像文件太小的解决办法;
我们会发现我们下载的Fedora基础系统的映像文件体积太小。体积小空间就小的了。Fedora 5.0如果只安装基础系统,倒占用不了多少空间,如果再安装一个桌面环境可能会占用大一点的地方。比如安装GNOME或KDE。
我们可以自己创建一个映像文件,创建好文件系统。然后从我们下载下来的Fedora映像文件中的所有文件,也就是Fedora的基础系统,复制到我们新创建的映像中。前面已经说过创建映像文件的办法了。这个应该好办吧。
[root@localhost ~]# dd if=/dev/zero of=fc5.img bs=2k seek=2048k count=1
[root@localhost ~]# ls -lh fc5.img
-rw-r--r-- 1 root root 4.1G 2006-04-13 11:22 fc5.img
[root@localhost ~]# /sbin/mkfs.ext3 fc5.img
mke2fs 1.38 (30-Jun-2005)
fc5.img is not a block special device.
Proceed anyway? (y,n) y
[root@localhost ~]# mkdir /mnt/tmp 注:在/mnt/中创建tmp目录
[root@localhost ~]# mkdir /mnt/fedora 注:在/mnt中创建fedora目录
[root@localhost ~]# mount -o loop fc5.img /mnt/fedora/ 注:挂载我们新创建的fc5.img文件到 /mnt/fedora
[root@localhost ~]# mount -o loop fedora.fc5.img /mnt/tmp/ 注:挂载我们下载下来的映像文件到/mnt/tmp
[root@localhost ~]# cp -rp /mnt/tmp/* /mnt/fedora/ 注:复制Fedora基础系统到新的映像文件;
[root@localhost ~]# umount /mnt/tmp 注:卸载 fedora.fc5.img ;
[root@localhost ~]# umount /mnt/fedora 注:卸载fc5.img
然后就是改一改引导Fedora 5的配置文件,注意改一下disk:那行;要到fc5.img指定进去。要仔细看一下fc5所处的目录;这个应该好办,不多说了;
8、强制终止正在运行的虚拟操作系统;(重要)
在xm这个管理工具中,我们把xm destroy 单列出来,就是因为这个工具是极为重要的;有时被虚拟的系统一直退不出去,但由于启动过程中遇到问题,又不能终止。这时我们要用到这个工具强制被虚拟的系统退出。
[root@localhost ~]# xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 586 1 r----- 2236.5
fc5 1 128 1 -b---- 13.7
[root@localhost ~]# xm destroy 1
或
[root@localhost ~]# xm destroy fc5
这时您再用xm list查看,肯定fc5这个Domain已经退出。
xm destroy 这个指令还是极为有用的,所以我们单列出来。希望新手弟兄注意一下。
9、关于基础系统安装后,虚拟操作系统的软件补充安装;
基础系统安装好以后,下一步就是其它软件的安装。在各个系统都有软件包管理工具; 在主流发行版中,都有相应的软件包管理工具,比如Fedora有rpm 和yum 工具;Debian有 apt工具。
或者通过chroot来安装一些比较重要的软件包。总之方法太多了;
总之,后续软件的补充安装并不是什么问题;
10、关于虚拟操作系统的桌面访问及远程访问;
被虚拟的操作系统,我们要把它看成一台独立运行的计算机。计算机与计算机之间通过什么访问来?ssh 或vnc。所以我们要在被虚拟的操作系统上安装vncserver 和sshd;
如果您虚拟的是Fedora ,我们可以在Fedora中执行yum install vnc来安装vncserver ;
#yum install vnc
如果您虚拟的是 Debian ,您可以用apt-get install vncserver 来安装vncserver ;
#apt-get install vncserver
当然客户端也要安装vncview才行,您要自己在客户端上安装vncview;
关于vnc远程桌面的访问,您可以参考这篇:《Fedora Core 5.0 用 Xen 虚拟Slackware 10.2》
另外sshd服务器,也要安装openssh 的软件包;这个也省略不说了,比较简单,再说目前大多基础系统已经提供这个软件包了。并且在被虚拟的系统在启动时,sshd也自动运行了;连接sshd服务器的命令是;
#ssh 用户名@ip
比如
#ssh root@192.168.1.12
11、常见问题处理;
11.1 不能找到root分区;
表现如下症状;
VFS: Cannot open root device "sda8" or unknown-block(2,0)
Please append a correct "root=" boot option
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(2,0)
引导虚拟操作系统的配置文件有问题,主要查看disk:那行和root那行是否用的是一个虚拟映射点。
比如是由于引导Fedora 的配置文件中disk行和root行如下:
disk = ['phy:hda5,sda1,w','phy:hda8,sda2,w']
root = "/dev/sda8 ro"
我们发现/dev/hda5被虚拟映射到/dev/sda1了。也就是说,被虚拟的操作系统引导运行,它的root应该位于/dev/sda1。而在这里定义的却是/dev/sda8。所以应该改为
disk = ['phy:hda5,sda1,w','phy:hda8,sda2,w']
root = "/dev/sda1 ro"
11.2 出现/tmp/.ICE-unix 类似的错误;
chown: changing ownership of `/tmp/.ICE-unix': Read-only file system
再比较/tmp/xxxx之类的不能写入,只读之类的,请用xm destrony 先关掉被虚拟的操作系统。然后把被虚拟的系统的分区或映像文件挂载,删除/tmp目录中的临时文件。注意.file是隐藏的。您可以通过ls -la来查看。然后再来删除;
另外如果一直出现这个错误,说明文件系统有问题了,这在ext3的文件系统中是经常发生的。您可以用/sbin/fsck.ext3 工具来修复文件系统。当然您的文件系统不能处于挂载状态。应该先umout 才能进行;
比如修复一个分区,应该类似如下的命令;
[root@localhost ~]# /sbin/fsck.ext3 /dev/hda5
如果中间遇到是否修复时,按提示的就是y或yes吧;
如果被虚拟的文件系统位于一个映像文件,也是用这种办法,比如:
[root@localhost ~]# /sbin/fsck.ext3 fc5.img
11.3 Device 0 (vif) could not be connected
Warning: The nics option is deprecated. Please use an empty vif entry instead:
vif = [ '' ]
Error: Device 0 (vif) could not be connected. Hotplug scripts not working.
如果出现上面这种错误,应该看一下配置文件中有没有 vif=['']的定义;
12、关于本文;
本文是在阅读《xen v3.0 用户手册》的基础上实践而成。本文和我前几天写的《Fedora Core 5.0 用 Xen 虚拟Slackware 10.2》有点类似。通过实践看来Xen还不是太难用,应该说比较容易。至于高深的东西,我也不会,所以只能写一写新手入门性的文档。可能有的弟兄认为本文没有任何价值,我想也是这么回事,如果有一个弟兄认为有点价值,那就送给他用吧~~~
13、后记;
还要挖一挖Xen的文档?好象没有太大的必要了~~~,看情况吧;
14、参考文档;