- 介绍
- 将NetBSD安装为特权domain (Dom0)
- 创建一个无特权的NetBSD domain (DomU)
- 创建一个无特权的Linux domain (DomU)
- 创建一个无特权的Solaris domain (DomU)
- 在 guest domains 中使用PCI设备
- 相关链接和更多的信息
NetBSD/xen Howto中文版
版主: lionux
NetBSD/xen Howto中文版
目录
1.介绍
Xen是一个x86硬件平台(需要类i686 CPU) 的一个虚拟机监视器, 这类x86硬件平台支持在单台主机上运行多个 guest 操作系统。Guest OSes (也被称为“domains”) 需要一个定制的内核,此内核必须支持把Xen hypercalls作为要访问的物理硬件。 启动时, 通过grub引导Xen内核 (也就是Xen hypervisor) 和第一个domain(被称为domain0) )的guest内核。domain0 具有访问物理设备(PCI和ISA设备)的特殊权限, 并管理其它的domains, 并向无权访问物理设备的这些domains提供虚拟设备(磁盘和网络) 。要获取更详尽的信息请参阅http://www.xen.org/.
NetBSD即可作为domain0 (Dom0),也可以是其它的无特权domain (DomU)。(实际上可以有多个具有特权的 domains 访问某个硬件的不同部分, 这些特权domains都向无特权domains提供虚拟设备。我们仅讨论系统内只有一个特权domain的情况, 也就是只有domain0). domain0 可以像普通的i386或amd64内核那样访问物理设备, 并且拥有物理控制台 (VGA或serial)。无特权 domains 则仅能访问由特权domain(通常是domain0)提供的一个只有字符界面的虚拟控制台, 虚拟磁盘 (xbd) 和 虚拟网络接口(xennet)。xbd设备被连接到特权domain的一个块设备上 (也就是说磁盘、raid或ccd等设备的一个分区) 。xennet被连接到一个特权domain的虚拟设备 xvif<domain编号>.<(该domain的)if编号>上, 例如, xvif1.0。xennet和xvif这个两个设备都被当成普通的以太设备 (可以将它们视为两台PC之间的交叉电缆) ,并且它们可以被指派地址 (可以使用IPF等对其进行路由、NAT、过滤等处理) 或被作为部件添加进网桥。
将NetBSD安装为特权domain (Dom0)
首先在x86构架上全新 安装一个 NetBSD/i386 或者 NetBSD/amd64 的NetBSD 5.0发行版。 二进制的发行版可以从 ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-5.0.2/ 上获取。二进制的当前版快照(snapshots) 和 netbsd-4 分支可以从 daily autobuilds 上获取。 当给磁盘分区时,因为grub的限制或者说bugs , 你不得不将 root 分区的大小限制在512Mb以下, 并且格式化为FFSv1、 8k block/1k fragments。如果你的root分区大于这个上限, 使用FFSv2,或者使用了不同的 block/fragment sizes, grub可能无法引导某些文件。同时要记住,你可能想为其它的domains提供虚拟磁盘, 所以要为这些虚拟磁盘保留一些分区。或者你也可以在文件系统内创建一些大文件, 将这些大文件映射到 vnd(4) 设备,然后将这些 vnd 设备输出给其它的domains。
下一个步骤是通过pkgsrc或者用二进制packages安装 sysutils/grub 和 sysutils/xentools3 这两个软件包。如果你不熟悉pkgsrc及/或如何处理二进制packages, 请参阅《NetBSD pkgsrc指南》 。虽然NetBSD自己的启动引导程序可以启动xen, 但是grub可以很方便地引导xen和domain0 内核这两者; xentools3包含了从 domain0 控制xen的程序。你也许还想安装 sysutils/xentools3-hvm ,它包含了运行未修改的使用HVM支持的操作系统的工具。 注意,你的CPU必须支持这一特性。Intel CPU必须具有 'VT' 结构, AMD CPU 具有'SVM' 的结构才可以。 你可以通过运行NetBSD的cpuctl命令轻松地判断出你的CPU是否具支持:
根据CPU的不同, 这要找的特征标志可能被称为 HVM, SVM 或者 VMX。
下面你就需要 Xen 3.x 内核本身了。你可以通过 pkgsrc (sysutils/xenkernel3) 安装它. 你要找的文件是 xen.gz。将其拷贝到的root文件系统。xen-debug.gz 是一个带有更多一致性检查和更详尽的控制台输出的内核,如果你使用一个串口控制台,它通常用于调试崩溃的guests。它对VGA控制台没用。
然后,你需要在root文件系统里有一个 NetBSD/Xen的domain0 内核。i386或者amd64二进制包里提供的 XEN3_DOM0 kernel 就正好, 但你也许希望定制一下这个内核。请先备份好你的原始内核文件, 因为可以用它恢复系统。 注意: domain0 内核必须支持 KERNFS,而且因为 xend 需要访问 /kern/xen/privcmd,所以 /kern 必须被挂载。
下面你需要安装 Grub 以便引导这个 xen.gz 内核, 而 NetBSD domain0 内核作为一个 module。
在 grub 配置里,你还需要指定分配给 domain0 的内存、使用的控制台...
这里有一个带注释的 /grub/menu.lst 文件:
用下列命令安装 grub :
首先在x86构架上全新 安装一个 NetBSD/i386 或者 NetBSD/amd64 的NetBSD 5.0发行版。 二进制的发行版可以从 ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-5.0.2/ 上获取。二进制的当前版快照(snapshots) 和 netbsd-4 分支可以从 daily autobuilds 上获取。 当给磁盘分区时,因为grub的限制或者说bugs , 你不得不将 root 分区的大小限制在512Mb以下, 并且格式化为FFSv1、 8k block/1k fragments。如果你的root分区大于这个上限, 使用FFSv2,或者使用了不同的 block/fragment sizes, grub可能无法引导某些文件。同时要记住,你可能想为其它的domains提供虚拟磁盘, 所以要为这些虚拟磁盘保留一些分区。或者你也可以在文件系统内创建一些大文件, 将这些大文件映射到 vnd(4) 设备,然后将这些 vnd 设备输出给其它的domains。
下一个步骤是通过pkgsrc或者用二进制packages安装 sysutils/grub 和 sysutils/xentools3 这两个软件包。如果你不熟悉pkgsrc及/或如何处理二进制packages, 请参阅《NetBSD pkgsrc指南》 。虽然NetBSD自己的启动引导程序可以启动xen, 但是grub可以很方便地引导xen和domain0 内核这两者; xentools3包含了从 domain0 控制xen的程序。你也许还想安装 sysutils/xentools3-hvm ,它包含了运行未修改的使用HVM支持的操作系统的工具。 注意,你的CPU必须支持这一特性。Intel CPU必须具有 'VT' 结构, AMD CPU 具有'SVM' 的结构才可以。 你可以通过运行NetBSD的cpuctl命令轻松地判断出你的CPU是否具支持:
代码: 全选
# cpuctl identify 0
cpu0: Intel Core 2 (Merom) (686-class), id 0x6f6
cpu0: features 0xbfebfbff<FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR>
cpu0: features 0xbfebfbff<PGE,MCA,CMOV,PAT,PSE36,CFLUSH,DS,ACPI,MMX>
cpu0: features 0xbfebfbff<FXSR,SSE,SSE2,SS,HTT,TM,SBF>
cpu0: features2 0x4e33d<SSE3,DTES64,MONITOR,DS-CPL,[I]VMX[/I],TM2,SSSE3,CX16,xTPR,PDCM,DCA>
cpu0: features3 0x20100800<SYSCALL/SYSRET,XD,EM64T>
cpu0: "Intel(R) Xeon(R) CPU 5130 @ 2.00GHz"
cpu0: I-cache 32KB 64B/line 8-way, D-cache 32KB 64B/line 8-way
cpu0: L2 cache 4MB 64B/line 16-way
cpu0: ITLB 128 4KB entries 4-way
cpu0: DTLB 256 4KB entries 4-way, 32 4MB entries 4-way
cpu0: Initial APIC ID 0
cpu0: Cluster/Package ID 0
cpu0: Core ID 0
cpu0: family 06 model 0f extfamily 00 extmodel 00
根据CPU的不同, 这要找的特征标志可能被称为 HVM, SVM 或者 VMX。
下面你就需要 Xen 3.x 内核本身了。你可以通过 pkgsrc (sysutils/xenkernel3) 安装它. 你要找的文件是 xen.gz。将其拷贝到的root文件系统。xen-debug.gz 是一个带有更多一致性检查和更详尽的控制台输出的内核,如果你使用一个串口控制台,它通常用于调试崩溃的guests。它对VGA控制台没用。
然后,你需要在root文件系统里有一个 NetBSD/Xen的domain0 内核。i386或者amd64二进制包里提供的 XEN3_DOM0 kernel 就正好, 但你也许希望定制一下这个内核。请先备份好你的原始内核文件, 因为可以用它恢复系统。 注意: domain0 内核必须支持 KERNFS,而且因为 xend 需要访问 /kern/xen/privcmd,所以 /kern 必须被挂载。
下面你需要安装 Grub 以便引导这个 xen.gz 内核, 而 NetBSD domain0 内核作为一个 module。
在 grub 配置里,你还需要指定分配给 domain0 的内存、使用的控制台...
这里有一个带注释的 /grub/menu.lst 文件:
代码: 全选
# 提供给NetBSD/Xen的Grub配置文件。拷贝为 /grub/menu.lst ,然后运行
# grub-install /dev/rwd0d (这里假设你的启动设备为 wd0).
#
# 默认引导选项是第一台设备
default=0
# 如果用户在10秒钟以内没有敲击键盘,将启动默认引导选项
timeout=10
# 为控制台配置一个serial。如果你只使用VGA可以忽略这个选项
serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1
# 让用户选择使用哪种控制台(serial或VGA), 10秒后默认是serial
terminal --timeout=10 serial console
# NetBSD/xen的一个选项, 使用 /netbsd 作为 domain0 的内核, 以及serial控制台。
# Domain0将被分配64MB内存。
# 假设NetBSD被安装在第一个MBR分区。
title Xen 3.0 / NetBSD (hda0, serial)
root(hd0,0)
kernel (hd0,a)/xen.gz dom0_mem=65536 com1=115200,8n1
module (hd0,a)/netbsd bootdev=wd0a ro console=ttyS0
# 同上, 但使用VGA控制台
# 我们可以使用 console=tty0 (Linux 语法) 或者 console=pc (NetBSD语法)
title Xen 3.0 / NetBSD (hda0, vga)
root(hd0,0)
kernel (hd0,a)/xen.gz dom0_mem=65536
module (hd0,a)/netbsd bootdev=wd0a ro console=tty0
# NetBSD/xen 使用一个备份的 domain0 内核 (在你将一个不能正常工作的内核指定为 /netbsd时,这个选项就有用了。)
title Xen 3.0 / NetBSD (hda0, backup, serial)
root(hd0,0)
kernel (hd0,a)/xen.gz dom0_mem=65536 com1=115200,8n1
module (hd0,a)/netbsd.backup bootdev=wd0a ro console=ttyS0
title Xen 3.0 / NetBSD (hda0, backup, VGA)
root(hd0,0)
kernel (hd0,a)/xen.gz dom0_mem=65536
module (hd0,a)/netbsd.backup bootdev=wd0a ro console=tty0
#引导一个常规的 NetBSD/i386 内核。这用于正好你的 /xen.gz 无法正常工作时很有用。
title NetBSD 4.0
root (hd0,a)
kernel --type=netbsd /netbsd-GENERIC
#启动NetBSD的bootloader, 让其引导NetBSD/i386内核。
#可能好于上面的方案, 因为grub不能将所有所需信息传递给
#NetBSD/i386内核 (例如,控制台, root device, ...)
title NetBSD chain
root (hd0,0)
chainloader +1
## end of grub config file.
用下列命令安装 grub :
代码: 全选
# grub --no-floppy
grub> root (hd0,a)
Filesystem type is ffs, partition type 0xa9
grub> setup (hd0)
Checking if "/boot/grub/stage1" exists... no
Checking if "/grub/stage1" exists... yes
Checking if "/grub/stage2" exists... yes
Checking if "/grub/ffs_stage1_5" exists... yes
Running "embed /grub/ffs_stage1_5 (hd0)"... 14 sectors are embedded.
succeeded
Running "install /grub/stage1 (hd0) (hd0)1+14 p (hd0,0,a)/grub/stage2 /grub/menu.lst"...
succeeded
Done.
创建一个无特权的NetBSD domain (DomU)
一旦你的 domain0 开始运行了, 你需要启动 xen tool 守护进程 (/usr/pkg/share/examples/rc.d/xend start) 以及xen backend 守护进程 (/usr/pkg/share/examples/rc.d/xenbackendd start)。请确认:在启动xend前 /dev/xencons 和 /dev/xenevt 存在。你可以用下面的命令创建它们:
xend将把日志写入 /var/log/xend.log 和 /var/log/xend-debug.log。然后你就可以用xm工具来控制xen了。 'xm list' 看起来像这样:
'xm create' 允许你建立一个新的domain。 它用PKG_SYSCONFDIR 参数指定目录下的一个配置文件。 默认情况下, 这个文件应该在 /usr/pkg/etc/xen/。在创建过程中, 必须指定一个内核, 这个内核将运行在新的domain里 (这个内核位于 domain0 文件系统内, 不是新domain的虚拟磁盘里; 但请注意, 你应该为domainU 安装同样的内核—— /netbsd, 这样是为了确保你的系统工具, 像 savecore(8) 可以正常工作)。i386和amd64二进制包里已经提供了一个的合适的内核: XEN3_DOMU。
这里是一份 /usr/pkg/etc/xen/nbsd 的示例配置文件:
现在,运行:
应该创建一个domain,并且在这个domain里面引导一个 NetBSD 内核。 (说明: 一旦完成创建,-c 会使 xm 连接到该 domain 的控制台。) 这个内核将尝试在xbd0(也就是wd0e)上寻找其root文件系统, 这个xbd0还未创建。wd0e在新的domain里将被视为一个磁盘设备, 所以它可以被划分为子分区(whoami:原文此处是 'sub-partitioned')。我们可以在 domain0 里附加一个 ccd 到 wd0e, 并为其分区, newfs 然后在那里释放 NetBSD/i386 或者 amd64 tarballs, 不过还有一个简单的方式: 导入NetBSD二进制组件里提供的 netbsd-INSTALL_XEN3_DOMU 内核。 就像安装其它内核一样, 它包含了一个和带有sysinst的ramdisk, 所以你可以在新的domain里使用sysinst安装NetBSD.
如果你想从一个CD镜像文件安装NetBSD/Xen, 应该在 /usr/pkg/etc/xen/nbsd 文件内使用这行:
一旦完成安装, halt -p 新的domain (请勿 reboot 或 halt, 否则即便你修改了配置文件,它仍会重新引导 INSTALL_XEN3_DOMU 内核), 将配置文件切换回 XEN3_DOMU 内核, 然后再次启动新的domain。 现在它应该可以使用xbd0a的root了,而你现在应该有了另一个安装在Xen上的可用的NetBSD了。
当新 domain 启动时,你将看见一些有关wscons 和pseudo-terminals的警告信息。这可以通过编辑 /etc/ttys 和 /etc/wscons.conf 文件来修正。你必须禁用 /etc/ttys 下所有的终端, 除了 console, 像这样:
最后, 所有的 screens 必须在 /etc/wscons.conf 里注释掉。
同样你还需要在 rc.conf 里添加
这样, 如果在domain0里使用了 xm shutdown -R 或 xm shutdown -H,这个doamin将被正确地关闭。
你的domain应该现在已经可以使用了,慢慢享用吧。;)
一旦你的 domain0 开始运行了, 你需要启动 xen tool 守护进程 (/usr/pkg/share/examples/rc.d/xend start) 以及xen backend 守护进程 (/usr/pkg/share/examples/rc.d/xenbackendd start)。请确认:在启动xend前 /dev/xencons 和 /dev/xenevt 存在。你可以用下面的命令创建它们:
代码: 全选
# cd /dev && sh MAKEDEV xen
xend将把日志写入 /var/log/xend.log 和 /var/log/xend-debug.log。然后你就可以用xm工具来控制xen了。 'xm list' 看起来像这样:
代码: 全选
# xm list
Name Id Mem(MB) CPU State Time(s) Console
Domain-0 0 64 0 r---- 58.1
'xm create' 允许你建立一个新的domain。 它用PKG_SYSCONFDIR 参数指定目录下的一个配置文件。 默认情况下, 这个文件应该在 /usr/pkg/etc/xen/。在创建过程中, 必须指定一个内核, 这个内核将运行在新的domain里 (这个内核位于 domain0 文件系统内, 不是新domain的虚拟磁盘里; 但请注意, 你应该为domainU 安装同样的内核—— /netbsd, 这样是为了确保你的系统工具, 像 savecore(8) 可以正常工作)。i386和amd64二进制包里已经提供了一个的合适的内核: XEN3_DOMU。
这里是一份 /usr/pkg/etc/xen/nbsd 的示例配置文件:
代码: 全选
# -*- mode: python; -*-
#============================================================================
# Python defaults setup for 'xm create'.
# Edit this file to reflect the configuration of your system.
#============================================================================
#----------------------------------------------------------------------------
# 内核镜像文件。这个内核将在新的domain里被引导。
kernel = "/home/bouyer/netbsd-XEN3_DOMU"
#kernel = "/home/bouyer/netbsd-INSTALL_XEN3_DOMU"
# 为新内核分配的内存 (以M为单位)。
memory = 128
# 为新domain设置便于记忆的名称。这个名称将出现在'xm list'里,
# 而且你可以在domain编号里用这个名称作为一个参数。
# 所有的domains必须有不同的名称。
#
name = "nbsd"
# 为此domain设置的虚拟的CPU数量。
#
vcpus = 1
#----------------------------------------------------------------------------
# 为新domain设置的网络接口。
# 网络接口数量 (至少为1).默认值是1。
nics = 1
# 定义接口的MAC 和/或 bridge。
#
# The MAC address specified in ``mac'' is the one used for the interface
# in the new domain. The interface in domain0 will use this address XOR'd
# with 00:00:00:01:00:00 (i.e. aa:00:00:51:02:f0 in our example). Random
# MACs are assigned if not given.
#
# ``bridge'' is a required parameter, which will be passed to the
# vif-script called by xend(8) when a new domain is created to configure
# the new xvif interface in domain0.
#
# In this example, the xvif is added to bridge0, which should have been
# set up prior to the new domain being created -- either in the
# ``network'' script or using a /etc/ifconfig.bridge0 file.
#
vif = [ 'mac=aa:00:00:50:02:f0, bridge=bridge0' ]
#----------------------------------------------------------------------------
# Define the disk devices you want the domain to have access to, and
# what you want them accessible as.
#
# Each disk entry is of the form:
#
# phy:DEV,VDEV,MODE
#
# where DEV is the device, VDEV is the device name the domain will see,
# and MODE is r for read-only, w for read-write. You can also create
# file-backed domains using disk entries of the form:
#
# file:PATH,VDEV,MODE
#
# where PATH is the path to the file used as the virtual disk, and VDEV
# and MODE have the same meaning as for ``phy'' devices.
#
# VDEV doesn't really matter for a NetBSD guest OS (it's just used as an index),
# but it does for Linux.
# Worse, the device has to exist in /dev/ of domain0, because xm will
# try to stat() it. This means that in order to load a Linux guest OS
# from a NetBSD domain0, you'll have to create /dev/hda1, /dev/hda2, ...
# on domain0, with the major/minor from Linux :(
# Alternatively it's possible to specify the device number in hex,
# e.g. 0x301 for /dev/hda1, 0x302 for /dev/hda2, etc ...
disk = [ 'phy:/dev/wd0e,0x1,w' ]
#disk = [ 'file:/var/xen/nbsd-disk,0x01,w' ]
#disk = [ 'file:/var/xen/nbsd-disk,0x301,w' ]
#----------------------------------------------------------------------------
# Set the kernel command line for the new domain.
# Set root device. This one does matter for NetBSD
root = "xbd0"
# extra parameters passed to the kernel
# this is where you can set boot flags like -s, -a, etc ...
#extra = ""
#----------------------------------------------------------------------------
# Set according to whether you want the domain restarted when it exits.
# The default is False.
#autorestart = True
# end of nbsd config file ====================================================
现在,运行:
代码: 全选
xm create -c /usr/pkg/etc/xen/nbsd
应该创建一个domain,并且在这个domain里面引导一个 NetBSD 内核。 (说明: 一旦完成创建,-c 会使 xm 连接到该 domain 的控制台。) 这个内核将尝试在xbd0(也就是wd0e)上寻找其root文件系统, 这个xbd0还未创建。wd0e在新的domain里将被视为一个磁盘设备, 所以它可以被划分为子分区(whoami:原文此处是 'sub-partitioned')。我们可以在 domain0 里附加一个 ccd 到 wd0e, 并为其分区, newfs 然后在那里释放 NetBSD/i386 或者 amd64 tarballs, 不过还有一个简单的方式: 导入NetBSD二进制组件里提供的 netbsd-INSTALL_XEN3_DOMU 内核。 就像安装其它内核一样, 它包含了一个和带有sysinst的ramdisk, 所以你可以在新的domain里使用sysinst安装NetBSD.
如果你想从一个CD镜像文件安装NetBSD/Xen, 应该在 /usr/pkg/etc/xen/nbsd 文件内使用这行:
代码: 全选
disk = [ 'phy:/dev/wd0e,0x1,w', phy:/dev/cd0a,0x2,r' ]
一旦完成安装, halt -p 新的domain (请勿 reboot 或 halt, 否则即便你修改了配置文件,它仍会重新引导 INSTALL_XEN3_DOMU 内核), 将配置文件切换回 XEN3_DOMU 内核, 然后再次启动新的domain。 现在它应该可以使用xbd0a的root了,而你现在应该有了另一个安装在Xen上的可用的NetBSD了。
当新 domain 启动时,你将看见一些有关wscons 和pseudo-terminals的警告信息。这可以通过编辑 /etc/ttys 和 /etc/wscons.conf 文件来修正。你必须禁用 /etc/ttys 下所有的终端, 除了 console, 像这样:
代码: 全选
console "/usr/libexec/getty Pc" vt100 on secure
ttyE0 "/usr/libexec/getty Pc" vt220 off secure
ttyE1 "/usr/libexec/getty Pc" vt220 off secure
ttyE2 "/usr/libexec/getty Pc" vt220 off secure
ttyE3 "/usr/libexec/getty Pc" vt220 off secure
最后, 所有的 screens 必须在 /etc/wscons.conf 里注释掉。
同样你还需要在 rc.conf 里添加
代码: 全选
powerd=YES
这样, 如果在domain0里使用了 xm shutdown -R 或 xm shutdown -H,这个doamin将被正确地关闭。
你的domain应该现在已经可以使用了,慢慢享用吧。;)
一个无特权的Linux domain (DomU)
建立无特权的Linux domain与NetBSD domain并没有很大的差别, 但是有一些你需要了解的细节。
首先, 第二个参数是指定义的磁盘 (下例中的 '0x1' )
这点对Linux很重要。这里它想获取一个Linux设备编号 (例如 0x300 代表 hda)。Linux 构建设备编号像这样: (major << 8 + minor),所以, 在linux系统里带有major 3和minor 1的hda1 的设备编号就是0x301。 另一个选择是可以使用设备名称 (hda, hdb, ...) ,因为 xentools 有一个表可以将这些名称映射为设备编号。要为liunx guest输出一个分区,这样:
它在Linux系统上将被显示为 /dev/hda , 并作为 root 分区使用。
要在这个分区上安装 Linux 系统的guest , 可用下面的方法: 从pkgsrc安装 sysutils/e2fsprogs 。使用mke2fs来格式化Linux系统root的分区, 并挂载。然后从一个正常运行的linux系统里拷贝文件, 在 /etc (fstab, network config)里进行调整。可能还需要找适当的工具直接将 .rpm 或 .deb 这样的二进制包直接释放到这个挂载的分区, 可能需要运行在NetBSD的linux环境下。一旦构建好这个文件系统, 卸载它。如果需要可以用 tune2fs -j 将这个文件系统转换为 ext3 格式。它现在应该就可以启动Linux guest domain了, 使用一个Xen二进制发行版的 vmlinuz-*-xenU 内核。
要想使用 linux 控制台, 你需要在配置里加上:
这是因为并非所有的linux发行版都自动给xen控制台附加一个tty。
建立无特权的Linux domain与NetBSD domain并没有很大的差别, 但是有一些你需要了解的细节。
首先, 第二个参数是指定义的磁盘 (下例中的 '0x1' )
代码: 全选
disk = [ 'phy:/dev/wd0e,0x1,w' ]
这点对Linux很重要。这里它想获取一个Linux设备编号 (例如 0x300 代表 hda)。Linux 构建设备编号像这样: (major << 8 + minor),所以, 在linux系统里带有major 3和minor 1的hda1 的设备编号就是0x301。 另一个选择是可以使用设备名称 (hda, hdb, ...) ,因为 xentools 有一个表可以将这些名称映射为设备编号。要为liunx guest输出一个分区,这样:
代码: 全选
disk = [ 'phy:/dev/wd0e,0x300,w' ]
root = "/dev/hda1 ro"
它在Linux系统上将被显示为 /dev/hda , 并作为 root 分区使用。
要在这个分区上安装 Linux 系统的guest , 可用下面的方法: 从pkgsrc安装 sysutils/e2fsprogs 。使用mke2fs来格式化Linux系统root的分区, 并挂载。然后从一个正常运行的linux系统里拷贝文件, 在 /etc (fstab, network config)里进行调整。可能还需要找适当的工具直接将 .rpm 或 .deb 这样的二进制包直接释放到这个挂载的分区, 可能需要运行在NetBSD的linux环境下。一旦构建好这个文件系统, 卸载它。如果需要可以用 tune2fs -j 将这个文件系统转换为 ext3 格式。它现在应该就可以启动Linux guest domain了, 使用一个Xen二进制发行版的 vmlinuz-*-xenU 内核。
要想使用 linux 控制台, 你需要在配置里加上:
代码: 全选
extra = "xencons=tty1"
这是因为并非所有的linux发行版都自动给xen控制台附加一个tty。
创建一个无特权的Solaris domain (DomU)
现在一个 Opensolaris 发行版 or 开发版快照 DVD镜像。将DVD镜像挂载到一个 vnd(4) 设备上。 将kernel和ramdisk文件系统镜像拷贝到 dom0 文件系统内。
确保 vnd(4) 已经配置了。 有些某些原因除非这个DVD镜像作为一个“phy”设备挂载到guest 上,否则启动过程可能会停止。 用一个最小为8G的空分区替换 /dev/wd0k 。
启动guest。
确保网络已经配置好。注意:可能要花一些时间才能显示出xnfo接口。
为 VNC 设置密码,然后启动在安装过程中提供X11显示的 VNC 服务器。
从一台远程主机上连接到这个 VNC 服务器。在guest上使用 ifconfig xnf0 来找出正确的有效IP地址。
也可以从能一台远程显示X11的主机上运行安装过程。
完成 GUI 安装后,系统要求你重新启动。在此之前你需要为新启动文件系统确定 ZFS ID 并更新相应的配置文件。返回guest控制台。
最终的配置文件应该像这样,请特别注意一下最后一行。
重新启动 guest 来校验一下是否工作正常。
现在一个 Opensolaris 发行版 or 开发版快照 DVD镜像。将DVD镜像挂载到一个 vnd(4) 设备上。 将kernel和ramdisk文件系统镜像拷贝到 dom0 文件系统内。
代码: 全选
dom0# mkdir /root/solaris
dom0# vnconfig vnd0 osol-1002-124-x86.iso
dom0# mount /dev/vnd0a /mnt
## for a 64-bit guest
dom0# cp /mnt/boot/amd64/x86.microroot /root/solaris
dom0# cp /mnt/platform/i86xpv/kernel/amd64/unix /root/solaris
## for a 32-bit guest
dom0# cp /mnt/boot/x86.microroot /root/solaris
dom0# cp /mnt/platform/i86xpv/kernel/unix /root/solaris
dom0# umount /mnt
确保 vnd(4) 已经配置了。 有些某些原因除非这个DVD镜像作为一个“phy”设备挂载到guest 上,否则启动过程可能会停止。 用一个最小为8G的空分区替换 /dev/wd0k 。
代码: 全选
memory = 640
name = 'solaris'
disk = [ 'phy:/dev/wd0k,0,w' ]
disk += [ 'phy:/dev/vnd0d,6:cdrom,r' ]
vif = [ 'bridge=bridge0' ]
kernel = '/root/solaris/unix'
ramdisk = '/root/solaris/x86.microroot'
# for a 64-bit guest
extra = '/platform/i86xpv/kernel/amd64/unix - nowin -B install_media=cdrom'
# for a 32-bit guest
#extra = '/platform/i86xpv/kernel/unix - nowin -B install_media=cdrom'
启动guest。
代码: 全选
dom0# xm create -c solaris.cfg
Started domain solaris
v3.3.2 chgset 'unavailable'
SunOS Release 5.11 Version snv_124 64-bit
Copyright 1983-2009 Sun Microsystems, Inc. All rights reserved.
Use is subject to license terms.
Hostname: opensolaris
Remounting root read/write
Probing for device nodes ...
WARNING: emlxs: ddi_modopen drv/fct failed: err 2
Preparing live image for use
Done mounting Live image
确保网络已经配置好。注意:可能要花一些时间才能显示出xnfo接口。
代码: 全选
opensolaris console login: jack
Password: jack
Sun Microsystems Inc. SunOS 5.11 snv_124 November 2008
jack@opensolaris:~$ pfexec sh
sh-3.2# ifconfig -a
sh-3.2# exit
为 VNC 设置密码,然后启动在安装过程中提供X11显示的 VNC 服务器。
代码: 全选
jack@opensolaris:~$ vncpasswd
Password: solaris
Verify: solaris
jack@opensolaris:~$ cp .Xclients .vnc/xstartup
jack@opensolaris:~$ vncserver :1
从一台远程主机上连接到这个 VNC 服务器。在guest上使用 ifconfig xnf0 来找出正确的有效IP地址。
代码: 全选
remote$ vncviewer 172.18.2.99:1
也可以从能一台远程显示X11的主机上运行安装过程。
代码: 全选
jack@opensolaris:~$ export DISPLAY=172.18.1.1:0
jack@opensolaris:~$ pfexec gui-install
完成 GUI 安装后,系统要求你重新启动。在此之前你需要为新启动文件系统确定 ZFS ID 并更新相应的配置文件。返回guest控制台。
代码: 全选
jack@opensolaris:~$ pfexec zdb -vvv rpool | grep bootfs
bootfs = 43
^C
jack@opensolaris:~$
最终的配置文件应该像这样,请特别注意一下最后一行。
代码: 全选
memory = 640
name = 'solaris'
disk = [ 'phy:/dev/wd0k,0,w' ]
vif = [ 'bridge=bridge0' ]
kernel = '/root/solaris/unix'
ramdisk = '/root/solaris/x86.microroot'
extra = '/platform/i86xpv/kernel/amd64/unix -B zfs-bootfs=rpool/43,bootpath="/xpvd/xdf@0:a"'
重新启动 guest 来校验一下是否工作正常。
代码: 全选
dom0# xm destroy solaris
dom0# xm create -c solaris.cfg
Using config file "./solaris.cfg".
v3.3.2 chgset 'unavailable'
Started domain solaris
SunOS Release 5.11 Version snv_124 64-bit
Copyright 1983-2009 Sun Microsystems, Inc. All rights reserved.
Use is subject to license terms.
WARNING: emlxs: ddi_modopen drv/fct failed: err 2
Hostname: osol
Configuring devices.
Loading smf(5) service descriptions: 160/160
svccfg import warnings. See /var/svc/log/system-manifest-import:default.log .
Reading ZFS config: done.
Mounting ZFS filesystems: (6/6)
Creating new rsa public/private host key pair
Creating new dsa public/private host key pair
osol console login:
在 guest domains 中使用PCI设备
domain0可以指定哪些PCI设备可由其它的domains访问。例如,这可以让一个无特权domain访问一个物理网络接口或者磁盘控制器。不过, 记住,让一个domain访问一个PCI设备等同于允许它直接读写所有的物理内存, 因为PCs没有一个IOMMU来限制内存访问具有DMA能力的设备 。而且, 也不可能提供一个ISA设备给那些非domain0的domains (这因为primary VGA适配器无法输出。 一个guest domain如果企图访问VGA寄存器将会导致混乱)。
这个功能就目前来说仅在NetBSD当前版的 domain0 和 domUs 有效。
将一个 PCI 设备输出给一个domU, 必须在domain0里添加 pciback 驱动。通过 pciback.hide boot 参数把设备传递给 domain0 将附加到 pciback 上,而不是常规的驱动。设备的清单以 (bus:dev.func)这种方式指定 , 这里的 bus 和 dev 是 两位hexadecimal 数值, 而func 是一位数值:
pciback devices会在domain0的启动信息里显示, 而这些设备将列在 /kern/xen/pci 目录下。
要输出给domU的PCI设备以格式 '0000dev.func' 列在domU配置文件的pci array里
在domU里,会显示一个xpci设备, 将会被附加到一个或多个PCI总线上。然后PCI驱动将常规地附件到PCI总线上。注意,默认的 NetBSD DOMU 内核并没有内嵌任何 PCI 驱动; 为了在domU里是哦那个PCI设备,你必须构建自己的内核。这里有一个内核配置的例子:
domain0可以指定哪些PCI设备可由其它的domains访问。例如,这可以让一个无特权domain访问一个物理网络接口或者磁盘控制器。不过, 记住,让一个domain访问一个PCI设备等同于允许它直接读写所有的物理内存, 因为PCs没有一个IOMMU来限制内存访问具有DMA能力的设备 。而且, 也不可能提供一个ISA设备给那些非domain0的domains (这因为primary VGA适配器无法输出。 一个guest domain如果企图访问VGA寄存器将会导致混乱)。
这个功能就目前来说仅在NetBSD当前版的 domain0 和 domUs 有效。
将一个 PCI 设备输出给一个domU, 必须在domain0里添加 pciback 驱动。通过 pciback.hide boot 参数把设备传递给 domain0 将附加到 pciback 上,而不是常规的驱动。设备的清单以 (bus:dev.func)这种方式指定 , 这里的 bus 和 dev 是 两位hexadecimal 数值, 而func 是一位数值:
代码: 全选
pciback.hide=(00:0a.0)(00:06.0)
pciback devices会在domain0的启动信息里显示, 而这些设备将列在 /kern/xen/pci 目录下。
要输出给domU的PCI设备以格式 '0000dev.func' 列在domU配置文件的pci array里
代码: 全选
pci = [ '0000:00:06.0', '0000:00:0a.0' ]
在domU里,会显示一个xpci设备, 将会被附加到一个或多个PCI总线上。然后PCI驱动将常规地附件到PCI总线上。注意,默认的 NetBSD DOMU 内核并没有内嵌任何 PCI 驱动; 为了在domU里是哦那个PCI设备,你必须构建自己的内核。这里有一个内核配置的例子:
代码: 全选
include "arch/i386/conf/XEN3_DOMU"
#include "arch/i386/conf/XENU" # in NetBSD 3.0
# Add support for PCI busses to the XEN3_DOMU kernel
xpci* at hypervisor?
pci* at xpci ?
# Now add PCI and related devices to be used by this domain
# USB Controller and Devices
# PCI USB controllers
uhci* at pci? dev ? function ? # Universal Host Controller (Intel)
# USB bus support
usb* at uhci?
# USB Hubs
uhub* at usb?
uhub* at uhub? port ? configuration ? interface ?
# USB Mass Storage
umass* at uhub? port ? configuration ? interface ?
wd* at umass?
# SCSI controllers
ahc* at pci? dev ? function ? # Adaptec [23]94x, aic78x0 SCSI
# SCSI bus support (for both ahc and umass)
scsibus* at scsi?
# SCSI devices
sd* at scsibus? target ? lun ? # SCSI disk drives
cd* at scsibus? target ? lun ? # SCSI CD-ROM drives
NetBSD/Xen 相关链接和更多的信息
相关链接和更多的信息
- The HowTo on Installing into RAID-1 gives some hints on using Xen (grub) with NetBSD's RAIDframe
- Harold Gutch wrote documentation on setting up a Linux DomU with a NetBSD Dom0
- Work in progress tutorial on how to install pkgsrc on a stripped down Solaris system.
- An example of how to use NetBSD's native bootloader to load NetBSD/Xen instead of Grub can be found in the i386/amd64 boot(4) and boot.cfg(4) manpages.
NetBSD/xen
About NetBSD/xen
NetBSD/xen
About NetBSD/xen
NetBSD/xen is a port of NetBSD to the Xen virtual machine monitor. It was first brought to NetBSD by Christian Limpach and committed to the source tree on March 11th, 2004.
Xen is a virtual machine monitor for x86 that supports execution of multiple guest operating systems with unprecedented levels of performance and resource isolation. Xen is Open Source software.
See http://www.xen.org/ for more details on Xen.
The current maintainer of NetBSD/xen is Manuel Bouyer.
NetBSD/xen News
2009-03-05: Xen3 PCI pass-through
PCI pass-through support has been added for both domain0 and domU. domain0 kernel gets a pciback PCI drivers, to which device specified in the pciback.hide boot parameter will attach. DomU kernels gets a xpci device, to which pci busses will attach. More details in the NetBSD/xen Howto.
2009-03-05: i386 PAE domain0 support
Missing pieces for a domain0 kernel supporting the i386 PAE extensions has been added to current. A new kernel XEN3PAE_DOM0 should show up in the next HEAD autobuild. This kernel can be used with a i386 PAE or x86_64 hypervisor. The sysutils/xenkernel3 and sysutils/xenkernel33 packages for i386 both provide i386 PAE hypervisor kernels.
2007-12-15: NetBSD/xen Howto updated
The NetBSD/xen Howto has been updated with some details about Xen on amd64.
2007-12-14: NetBSD runs on Xen/amd64
NetBSD current now includes amd64 kernels that will run on top of the x86_64 Xen hypervisor. NetBSD/amd64 can run as both domain 0 and domU, and supports the same features as i386 (including HVM support if the hardware supports it), and in addition can run 32bit guests which uses the PAE extensions.
2006-10-20: update to 3.0.3 and HVM support
Manuel Bouyer announced in a message to the port-xen mailing list that the xentools30 and xenkernel30 packages have been updated to the just-released Xen-3.0.3. A new package, xentools30-hvm, has been committed to pkgsrc-current. It provides the additional tools needed to run unmodified guests under a NetBSD domain0, using Intel VT-x or AMD SVM virtualization extensions. NetBSD, Linux and Windows XP have been successfully booted in a Xen HVM domain.
2006-07-04: New port maintainer
After Manuel Bouyer had already taken over most of the tasks of a port maintainer, due to Christian Limpach's lack of time, he is now the official maintainer of NetBSD/xen.
2006-07-03: NetBSD as Domain0 for Xen3
Manuel Bouyer announced in a message to the port-xen mailing list that NetBSD is finally usable as a Domain0 with version 3 of the Xen virtual machine monitor.
2006-04-07: Xen-3 support pulled up to netbsd-3
Manuel Bouyer pulled the Xen-3 domU support to the netbsd-3 branch. For dom0 support, you'll have to run -current or wait for NetBSD 4.0.
2006-03-22: Xen3 domU is now functional
Manuel Bouyer has continued his work on getting NetBSD to work on Version 3 of the Xen virtual machine monitor over the past few weeks and NetBSD should now be functional on Xen3 [unprivileged domains] with block and network devices.
2005-03-13: Xen 2.0 Howto
A short Xen 2.0 Howto has been made available.
2005-03-10: Xen 2.0 support
Manuel Bouyer has just merged the bouyer-xen2 branch into NetBSD -current; this means that support for Xen 2.0 (both in privileged and unprivileged mode) will be available in NetBSD 3.0. Support for Xen 1.2 has been removed.
About NetBSD/xen
NetBSD/xen
About NetBSD/xen
NetBSD/xen is a port of NetBSD to the Xen virtual machine monitor. It was first brought to NetBSD by Christian Limpach and committed to the source tree on March 11th, 2004.
Xen is a virtual machine monitor for x86 that supports execution of multiple guest operating systems with unprecedented levels of performance and resource isolation. Xen is Open Source software.
See http://www.xen.org/ for more details on Xen.
The current maintainer of NetBSD/xen is Manuel Bouyer.
NetBSD/xen News
2009-03-05: Xen3 PCI pass-through
PCI pass-through support has been added for both domain0 and domU. domain0 kernel gets a pciback PCI drivers, to which device specified in the pciback.hide boot parameter will attach. DomU kernels gets a xpci device, to which pci busses will attach. More details in the NetBSD/xen Howto.
2009-03-05: i386 PAE domain0 support
Missing pieces for a domain0 kernel supporting the i386 PAE extensions has been added to current. A new kernel XEN3PAE_DOM0 should show up in the next HEAD autobuild. This kernel can be used with a i386 PAE or x86_64 hypervisor. The sysutils/xenkernel3 and sysutils/xenkernel33 packages for i386 both provide i386 PAE hypervisor kernels.
2007-12-15: NetBSD/xen Howto updated
The NetBSD/xen Howto has been updated with some details about Xen on amd64.
2007-12-14: NetBSD runs on Xen/amd64
NetBSD current now includes amd64 kernels that will run on top of the x86_64 Xen hypervisor. NetBSD/amd64 can run as both domain 0 and domU, and supports the same features as i386 (including HVM support if the hardware supports it), and in addition can run 32bit guests which uses the PAE extensions.
2006-10-20: update to 3.0.3 and HVM support
Manuel Bouyer announced in a message to the port-xen mailing list that the xentools30 and xenkernel30 packages have been updated to the just-released Xen-3.0.3. A new package, xentools30-hvm, has been committed to pkgsrc-current. It provides the additional tools needed to run unmodified guests under a NetBSD domain0, using Intel VT-x or AMD SVM virtualization extensions. NetBSD, Linux and Windows XP have been successfully booted in a Xen HVM domain.
2006-07-04: New port maintainer
After Manuel Bouyer had already taken over most of the tasks of a port maintainer, due to Christian Limpach's lack of time, he is now the official maintainer of NetBSD/xen.
2006-07-03: NetBSD as Domain0 for Xen3
Manuel Bouyer announced in a message to the port-xen mailing list that NetBSD is finally usable as a Domain0 with version 3 of the Xen virtual machine monitor.
2006-04-07: Xen-3 support pulled up to netbsd-3
Manuel Bouyer pulled the Xen-3 domU support to the netbsd-3 branch. For dom0 support, you'll have to run -current or wait for NetBSD 4.0.
2006-03-22: Xen3 domU is now functional
Manuel Bouyer has continued his work on getting NetBSD to work on Version 3 of the Xen virtual machine monitor over the past few weeks and NetBSD should now be functional on Xen3 [unprivileged domains] with block and network devices.
2005-03-13: Xen 2.0 Howto
A short Xen 2.0 Howto has been made available.
2005-03-10: Xen 2.0 support
Manuel Bouyer has just merged the bouyer-xen2 branch into NetBSD -current; this means that support for Xen 2.0 (both in privileged and unprivileged mode) will be available in NetBSD 3.0. Support for Xen 1.2 has been removed.
回复: NetBSD/xen Howto中文版
试试 xen4吧,OpenBSD在xen3上有问题,NetBSD肯定没有问题了,我没有试其它的BSD。
在线用户
正浏览此版面之用户: Google [Bot] 和 0 访客