基本概念如下:个人电脑会经由 bootp 协定从启动伺服器中来取得它的 IP 位址。 用 0.0.0.0 为初始 IP 位址,而它的核心程序会经由 tftp 协定。
跳过区段的启动 (经由路由器router) 并不是个简单问题,所以,不是将伺服器以及无磁盘机的机器放置在同一个网路 区段,就只有建构一个 UDP 辅助位址在你的 router 到伺服器的位址上。细节请参考你的 router 产器手册。
以下是我们的步骤
取得 nfsboot 套件 (可从你较喜欢的 linux mirror 镜射站的 /pub/Linux/system/Linux-boot
目录取得)。它包含了一个给 wd8013卡可直接烧录用的 booteprom 映像档。
还有其他方法可以准备个人电脑部份:
这个映像档包含了 bootp 以及 tftp 客户端程序。 你也需要准备一个 linux 核心程序码,它含有 nfs-root 选项。
参考 patch(1)
它可以在 bootpd-2.4.tar.gz
套件中找到
(可从你较喜欢的 linux mirror 镜射站的 /pub/Linux/system/Network/boot.net
目录内)。取得这个套件,
编译并安装它。如果你其他的 Unix 机器也是用 Slackware Linux 的,那么标准的供应版本就
有 bootpd 了,所以你可以跳过这部份。 daemon 可以直接发出命令来执行
bootpd -s
或是使用 inetd,但你需修改:
# tftp dgram udp wait root /usr/sbin/in.tftpd tftpd /export
# bootps dgram udp wait root /usr/sbin/in.bootpd bootpd
bootps 67/tcp # BOOTP server
tftp 69/udp # TFTP server
kill -HUP <process id of inetd>.
由先, bootpd 有个叫 bootptab 的建构档,它通常被放在 /etc 内。你必须修改 它,加上你的无磁盘机器的闸道 IP 位址、 dns 伺服器,以及乙太网路位址(es)。 范例如下 /etc/bootptab:
global.prof:\
:sm=255.255.255.0:\
:ds=192.168.1.5:\
:gw=192.168.1.19:\
:ht=ethernet:\
:bf=linux:
machine1:hd=/export/root/machine1:tc=global.prof:ha=0000c0863d7a:ip=192.168.1.140:
machine2:hd=/export/root/machine2:tc=global.prof:ha=0800110244e1:ip=192.168.1.141:
machine3:hd=/export/root/machine3:tc=global.prof:ha=0800110244de:ip=192.168.1.142:
global.prof 是 host 项目的一般样本,其中
之后,每一台机器应该有下面这行
TFTP (Trivial File Transfer Protocol
) 是一个文档传输协定,就像 ftp 一样,但
它比比较简化,因此可以容易地在 EPROM 里来编码。 TFTP 的使用方法有二种:
/export/root/machine1
。
当使用安全的 tftp 时, /export 被当成根目录,而 /export 变成 / ,且 hd 栏就变成 /root/machine1
了。
这包含 Slackware供应版内的 a, ap, n, 及 x 部份。要安装更多的套件也可以;但 是上面的套件已足够一个无磁盘 X 终端机的需求了。首先你需要一个已在运转的 Linux 系统。在硬件机器里找一个磁盘空间并 export 它成为可读写并挂上它到 Linux 机器的文档系统上的某一处 (例如 /mnt)。开始 Linux 设定并改变root 选项从 / 变为 /mnt。然后设立如上面所说的套件,如果你只是要执行一个无磁盘的 Linux 那 么就不需要做其他改变。另一方面,如果你计划使用超过一个以上的无磁盘机器, 那么上面的设定就需要些许的修改,因为有些文档以及目录必须只有机器本身使用。 我们可以以移开 /usr 目录(它包含非私人的资料)的方式跳过这个问题, 然后建立一个分开的子目录给每一个无磁盘机器。例如,如果 /export/linux/machine1 被挂在 /mnt 上,那么在初始设定后目录结构会像这样
/export/linux/machine1/bin
/export/linux/machine1/sbin
/export/linux/machine1/lib
/export/linux/machine1/etc
/export/linux/machine1/var
/export/linux/machine1/usr
改变后你会有
/export/linux/machine1/bin
/export/linux/machine1/sbin
/export/linux/machine1/lib
/export/linux/machine1/etc
/export/linux/machine1/var
/export/linux/usr
现在为其他的机器建立目录。从现在开始我们假设你的无磁盘机器分别叫做 machine1、machine2、 machine3等等; 使用以下的 bash 命令手稿来设立其他的目录
cd /export/linux
for x in machine2 machine3 ; do
mkdir $x; cd $x
(cd ../machine1; tar cf - *) | tar xvf -
done
然后做下列的 export:
下面范列是依照 SunOs 4.1.3 的 exports 文档的语法来做:
# This file is /etc/export
# for remote linux X terminals by Buci
# this line is only once
/export/root/usr -access=linuxnet
# these lines once for every host
/export/root/machine1 rw=machine1,root=machine1
/export/root/machine2 rw=machine2,root=machine2
/export/root/machine3 rw=machine3,root=machine3
请不要忘了执行 exportfs -a
现在该是建构 tftp 伺服器的时候了。如果你不需要一个安全的 tftp 那很简单, 因为你的客户端已经可以从 /export 目录来启动。
如果一个安全的 tftp 被采用,那么你可以在 /tftpboot 目录下做个完整的 /export/linux 目录结构。 (用一个实体核心程序及连结给其他机器的符号连结), 或是让 /export 目录成为安全的 tftpd 的根目录。或者如果你有一另外的 tftpboot 目录,那么,同样地,你只需要原来的目录结构,然后用一个实体核心程序来 符号连结其他机器) 。 你可以执行下列命令来完成这个设定:
mkdir -p /tftpboot/export/linux/machine1
cd /tftpboot/export/linux/machine1
cp /export/linux/machine1/<name of the kernel> .
然后执行下面:
mkdir -p /tftpboot/export/linux/machine2
cd ../machine2
ln -s ../machine2/<name of the kernel>
最后,你必须插入
/sbin/mount nfs_server:/export/linux/usr /usr
到
/export/linux/<machinex>/etc/rc.d/rc.S
的第一行。在这里 <machinex> 指的是 machine1, machine2等等。