将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是否具支持:
代码: 全选
# 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.