FreeBSD 主机可以从网络启动而无需本地磁盘就可操作, 使用的是从 NFS 服务器装载的文件系统。 除了标准的配置文件,无需任何的系统修改。 很容易设置这样的系统因为所有必要的元素都很容易得到:
至少有两种可能的方法从网络加载内核:
PXE:Intel® 的先启动执行环境 (Preboot eXecution Environment) 系统是一种灵活的引导 ROM 模式,这个 ROM 内建在一些网卡或主板的中。查看 pxeboot(8) 以获取更多细节。
Etherboot port (net/etherboot) 产生通过网络加载内核的可 ROM 代码。这些代码可以烧入网卡上的 PROM 上,或从本地软盘 (或硬盘) 驱动器加载,或从运行着的 MS-DOS® 系统加载。它支持多种网卡。
一个样板脚本
(/usr/share/examples/diskless/clone_root
)
简化了对服务器上的工作站根文件系统的创建和维护。
这个脚本需要少量的自定义,但您能很快的熟悉它。
/etc
存在标准的系统启动文件用于侦测和支持无盘的系统启动。
可以向 NFS 文件或本地磁盘进行交换(如果需要的话)。
设置无盘工作站有许多方法。 有很多相关的元素大部分可以自定义以适合本地情况。 以下将介绍一个完整系统的安装,强调的是简单性和与标准 FreeBSD 启动脚本的兼容。介绍的系统有以下特性:
无盘工作站使用一个共享的只读 /
文件系统和一个共享的只读/usr
。
root 文件系统是一份标准的 FreeBSD 根文件系统 (一般是服务器的),只是一些配置文件被特定于无盘操作的配置文件覆盖。
root 文件系统必须可写的部分被 md(4) 文件系统覆盖。 任何的改写在重启后都会丢失。
内核由 etherboot 或 PXE 传送和加载, 有些情况可能会指定使用其中之一。
如上所述,这个系统是不安全的。 它应该处于网络的受保护区域并不被其它主机信任。
这部分所有的信息均在 5.2.1-RELEASE 上测试过。
设置无盘工作站相对要简单而又易出错。 有时分析一些原因是很难的。例如:
编译时选项在运行时可能产生不同的行为。
出错信息经常是加密了的或根本就没有。
在这里, 涉及到的一些背景知识对于可能出现的问题的解决是很有帮助的。
要成功地引导系统还有些操作需要做。
机子需要获取初始的参数,如它的 IP 地址、执行文件、服务器名、根路径。这个可以使用 或 BOOTP 协议来完成。 DHCP 是 BOOTP 的兼容扩展, 并使用相同的端口和基本包格式。
只使用 BOOTP 来配置系统也是可行的。 bootpd(8) 服务程序被包含在基本的 FreeBSD 系统里。
不过,DHCP 相比 BOOTP 有几个好处 (更好的配置文件,使用 PXE 的可能性,以及许多其它并不直接相关的无盘操作), 接着我们会要描述一个 DHCP 配置, 可能的话会利用与使用 bootpd(8) 相同的例子。这个样板配置会使用ISC DHCP 软件包 (3.0.1.r12 发行版安装在测试服务器上)。
机子需要传送一个或多个程序到本地内存。 TFTP 或 NFS 会被使用。选择TFTP 还是 NFS 需要在几个地方的“编译时间”选项里设置。 通常的错误源是为文件名指定了错误的协议:TFTP 通常从服务器里的一个单一目录传送所有文件,并需要相对这个目录的文件名。 NFS 需要的是绝对文件路径。
介于启动程序和内核之间的可能的部分需要被初始化并执行。 在这部分有几个重要的变量:
PXE 会装入
pxeboot(8)――它是 FreeBSD 第三阶段装载器的修改版。
loader(8) 会获得许多参数用于系统启动,
并在传送控制之前把它们留在内核环境里。
在这种情况下,使用 GENERIC
内核就可能了。
Etherboot 会做很少的准备直接装载内核。 您要使用指定的选项建立 (build) 内核。
PXE 和 Etherboot 工作得一样的好。 不过, 因为一般情况下内核希望 loader(8) 做了更多的事情, PXE 是推荐的方法。
如果您的 BIOS 和网卡都支持 PXE, 就应该使用它。
最后,机子需要访问它的文件系统。 NFS 使用在所有的情况下。
查看 diskless(8) 手册页。
ISC DHCP 服务器可以回应 BOOTP 和 DHCP 的请求。
ISC DHCP 4.2 并不属于基本系统。首先您需要安装 net/isc-dhcp42-server port 或相应的“包”。
一旦安装了 ISC DHCP,
还需要一个配置文件才能运行 (通常名叫
/usr/local/etc/dhcpd.conf
)。
这里有个注释过的例子,里边主机 margaux
使用 Etherboot,
而主机corbieres
使用 PXE:
default-lease-time 600; max-lease-time 7200; authoritative; option domain-name "example.com"; option domain-name-servers 192.168.4.1; option routers 192.168.4.1; subnet 192.168.4.0 netmask 255.255.255.0 { use-host-decl-names on; option subnet-mask 255.255.255.0; option broadcast-address 192.168.4.255; host margaux { hardware ethernet 01:23:45:67:89:ab; fixed-address margaux.example.com; next-server 192.168.4.4; filename "/data/misc/kernel.diskless"; option root-path "192.168.4.4:/data/misc/diskless"; } host corbieres { hardware ethernet 00:02:b3:27:62:df; fixed-address corbieres.example.com; next-server 192.168.4.4; filename "pxeboot"; option root-path "192.168.4.4:/data/misc/diskless"; } }
这个选项告诉 dhcpd
发送 | |
| |
| |
|
这里紧跟的是一个等效的 bootpd
配置 (减少到一个客户端)。这个可以在
/etc/bootptab
里找到。
请注意:为了使用BOOTP,etherboot
必须使用非默认选项 NO_DHCP_SUPPORT
来进行编译,而且 PXE 需要
DHCP。bootpd
的唯一可见的好处是它存在于基本系统中。
.def100:\ :hn:ht=1:sa=192.168.4.4:vm=rfc1048:\ :sm=255.255.255.0:\ :ds=192.168.4.1:\ :gw=192.168.4.1:\ :hd="/tftpboot":\ :bf="/kernel.diskless":\ :rp="192.168.4.4:/data/misc/diskless": margaux:ha=0123456789ab:tc=.def100
Etherboot 的网站 包含有更多的文档 ――主要瞄准的是 Linux 系统,但无疑包含有有用的信息。 如下列出的是关于在 FreeBSD 系统里使用 Etherboot。
首先您必须安装net/etherboot 包或 port。
您可以改变 Etherboot 的配置
(如使用 TFTP 来代替 NFS),
方法是修改 Config
文件――在
Etherboot 源目录里。
对于我们的设置,我们要使用一张启动软盘。 对于其它的方法(PROM,或 MS-DOS®程序), 请参考 Etherboot 文档。
想要使用启动软盘,先插入一张软盘到安装有
Etherboot 的机器的驱动器里,
然后把当前路径改到 src
目录――在 Etherboot 树下,
接着输入:
#
gmake bin32/devicetype.fd0
devicetype
依赖于无盘工作站上的以太网卡的类型。
参考在同一个目录下的 NIC
文件确认正确的 devicetype
。
默认地,pxeboot(8) 装载器通过 NFS
装载内核。它可以编译来使用 TFTP――通过在文件
/etc/make.conf
里指定
LOADER_TFTP_SUPPORT
选项来代替。 请参见
/usr/share/examples/etc/make.conf
里的注释
了解如何配置。
除此之外还有两个未说明的 make.conf
选项――它可能对于设置一系列控制台无盘机器会有用:
BOOT_PXELDR_PROBE_KEYBOARD
和
BOOT_PXELDR_ALWAYS_SERIAL
。
当机器启动里,要使用 PXE,
通常需要选择 Boot from network
选项――在 BIOS 设置里,
或者在 PC 初始化的时候输入一个功能键 (function key)。
如果您正在使用 PXE 或 Etherboot――配置使用了 TFTP,那么您需要在文件服务器上启用 tftpd:
建立一个目录――从那里 tftpd
可以提供文件服务,如 /tftpboot
。
把这一行加入到 /etc/inetd.conf
里:
tftp dgram udp wait root /usr/libexec/tftpd tftpd -l -s /tftpboot
好像有一些版本的 PXE
需要 TCP 版本的 TFTP。
在这种情况下,加入第二行,使用 stream tcp
来代替 dgram udp
。
让 inetd 重读其配置文件。
要正确执行这个命令, 在 /etc/rc.conf
文件中必须加入
inetd_enable="YES"
:
#
/etc/rc.d/inetd restart
您可把 tftpboot
目录放到服务器上的什何地方。
确定这个位置设置在 inetd.conf
和
dhcpd.conf
里。
在所有的情况下,您都需要启用 NFS, 并且 NFS 服务器上导出相应的文件系统。
把这一行加入到/etc/rc.conf
里:
nfs_server_enable="YES"
通过往 /etc/exports
里加入下面几行(调整“载入点”列,
并且使用无盘工作站的名字替换
margaux corbieres
),
导出文件系统――无盘根目录存在于此:
/data/misc
-alldirs -romargaux corbieres
让 mountd
重读它的配置文件。如果您真的需要启用第一步的
/etc/rc.conf
里 NFS,
您可能就要重启系统了。
#
/etc/rc.d/mountd restart
如果您在使用 Etherboot, 您需要为无盘客户端建立内核配置文件, 使用如下选项(除了常使用的外):
options BOOTP # Use BOOTP to obtain IP address/hostname options BOOTP_NFSROOT # NFS mount root filesystem using BOOTP info
您可能也想使用 BOOTP_NFSV3
,
BOOT_COMPAT
和 BOOTP_WIRED_TO
(参考 NOTES
文件)。
这些名字具有历史性,并且有些有些误导, 因为它们实际上启用了内核里 (它可能强制限制 BOOTP 或 DHCP 的使用),与 DHCP 和 BOOTP 的无关的应用。
编译内核(参考第 9 章 配置FreeBSD的内核),
然后将它复制到 dhcpd.conf
里指定的地方。
当使用 PXE 里,
使用以上选项建立内核并不做严格要求(尽管建议这样做)。
启用它们会在内核启动时引起更多的 DHCP
提及过的请求,带来的小小的风险是在有些特殊情况下新值和由
pxeboot(8) 取回的值之间的不一致性。
使用它们的好处是主机名会被附带设置。否则,
您就需要使用其它的方法来设置主机名,如在客户端指定的
rc.conf
文件里。
为了使带有 Etherboot
的内核可引导,就需要把设备提示 (device hint)
编译进去。通常要在配置文件(查看 NOTES
配置注释文件) 里设置下列选项:
hints "GENERIC.hints"
您需要为无盘工作站建立根文件系统, 它就是
dhcpd.conf
里的 root-path
所指定的目录。
这种方法可以迅速安装一个彻底干净的系统 (不仅仅是根文件系统) 到
DESTDIR
。 您要做的就是简单地执行下面的脚本:
#!/bin/sh export DESTDIR=/data/misc/diskless mkdir -p ${DESTDIR} cd /usr/src; make buildworld && make buildkernel make installworld && make installkernel cd /usr/src/etc; make distribution
一旦完成,您可能需要定制 /etc/rc.conf
和 /etc/fstab
――根据您的需要放到
DESTDIR
里。
如果需要,位于服务器上的交换文件可以通过 NFS 来访问。
当用作根文件系统的服务器运行的是不
FreeBSD,您须要在 FreeBSD 机器上建立根文件系统,
然后把它复制到它的目的地,使用的命令可以是
tar
或 cpio
。
在这种情况下,有时对于 /dev
里的一些特殊的文件会有问题,原因就是不同的
“最大/最小”整数大小。
一种解决的方法就是从非 FreeBSD 服务里导出一个目录,
并把它载入 FreeBSD 到机子上, 并使用 devfs(5)
来为用户透明地分派设备节点。
本文档和其它文档可从这里下载: ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.
如果对于FreeBSD有问题,请先阅读
文档,如不能解决再联系
<[email protected]>.
关于本文档的问题请发信联系
<[email protected]>.