作者:严军勇 (
[email protected])
说起无盘工作站,大家一定不会陌生,当年Novell下的无盘DOS工作站很是流行,后来又流行过Win95无盘工作站,只是由于问题多多,后来微软自己停止了对无盘Windows的支持。
随着Linux的日益流行,使用Linux的人越来越多,其实Linux 对远程引导的支持非常好,Linnx内核自身又支持网络文件系统,因此非常适合做无盘工作站,本文将以一个实例向大家详细介绍无盘Linux工作站的安装办法。
这个网络是一个小的局域网,有1台服务器和4台 Linux 无盘工作站,彼此之间用双绞线通过HUB连接,服务器的IP地址定为192.168.0.80 ,名字是server ,5台无盘工作站的地址由服务器动态分配,地址范围从 192.168.0.1 到 192.168.0.4 ,名字分别是c1,c2,c3,c4,服务器和无盘工作站使用的都是 NE2000 兼容网卡,无盘工作站使用的网卡上都安
装了BOOTROM 启动芯片,服务器操作系统安装的是 RedHat Linux 6.0 ,安装时选用定制安装,并安装了全部软件。
Linux的远程引导有两种方式,一是利用Bootp协议,有一个专门的项目EtherBoot 提供支持(http://www.slug.org.au/etherboot/),这种方式引导 Linux 的速度是最快的,但这种方式有一个最大的问题,就是在市场上找不到支持这种远程引导协议的 BOOTROM 启动芯片(除非自己刻录),因为市场上几乎所有的 BOOTROM 启动芯片都是遵循NOVELL远程引导协议的,于是有人提出另外一种方式,就是服务器端用 NetWare 服务器,客户端就可以用现有的BOOTROM 启动芯片了,说到这里大家一定胡涂了,作Linux无盘工作站岂不是还一台NetWare 服务器?不是的,因为神通广大的 Linux 可以模拟 NetWare 服务器,就象Samba可以把 Linux 模拟成 NT 一样,mars_nwe 可以把 Linux 模拟成 NetWare,不仅能提供 NetWare 文件和打印服务,还能提供远程引导支持(知道Linux的厉害了吧),本文讲述的
Linux 无盘工作站就是用这种方式作远程引导的。
准备启动盘
由于在 Linux 下没有制作符合 NetWare 远程引导协议启动映象的工具,所以只能用早期的Win95()提供的工具(遗憾)。找一台装有 Win95 的机器启动后按 F8 进入纯DOS方式,格式化一张启动盘 format a: /s ,然后将RedHat Linux安装光盘上 dosutils 目录下的loadlin.exe复制到启动盘,在启动盘上作一个 autoexec.bat 文件,代码只有一行
loadlin.exe bzImage root=/dev/nfsroot
从 Windows 95 安装光盘的 Win95 目录下的cab文件中解出 rplboot.sys 文件放在启动盘上,命令如下:
extract.exe /a /l a: win95-27.cab rplboot.sys
一张用来做启动映象的启动盘就作好了,保存好启动盘,以后作启动映象时会用到它。
编译内核
用于无盘工作站的Linux内核与用于从本地硬盘引导的Linux内核是不同的,无盘工作站的内核必须支持NFS作为根文件系统,即远程根文件系统,所以必须编译无盘工作站专用的内核。笔者使用的内核代码版本是2.2.16,将内核源代码解压到/usr/src下,cd /usr/src/linux 进入内核子目录,执行命令make menuconfig 进行内核编译配置,下列项目必须按要求设置:
Processor type and features 该项目下面的选项必须根据无盘工作站的CPU类型设
置,而不是根据服务器的CPU类型设置
Loadable module support 该项目下面的所有选项都禁止,即不支持模块功能
Plug and Play support 设置为有效
Block devices 该项目下面的
Loopback device support
Network block device support
都设置为有效
Networking option 该项目下面的
kernel level autoconfiguration
DHCP support (NEW)
都设置为有效
Network device support 该项目下面的选项必须根据无盘工作站使用的网卡进
行设置,本例中使用的是NE2000兼容网卡,选项
Ethernet (10 or 100Mbit)
Other ISA cards
NE2000/NE1000 support (NEW)
都设置为有效
Filesystems 该项目下面的Network File Systems子项目下面的
NFS filesystem support
Root file system on NFS (NEW)
都设置为有效
其它的选项可以不用理会,直接用缺省值就可以了,当然如果你的无盘工作站有些其它需
要使用的设备,你也可以将有关的选项设为有效,比如,本例中的无盘工作站使用了声霸
卡兼容的声卡,下面的选项
OSS sound modules (NEW)
100% Sound Blaster compatibles (SB16/32/64, ESS, Jazz16) support
FM synthesizer (YM3812/OPL-3) support (NEW)
都设置为有效
以上设置完成后,退出内核编译设置程序,会出现一个对话框
Do you wish to save your new kernel configuration?
回答
然后执行
make dep && make bzImage
进行内核编译,这个过程得花一点时间,特别是如果计算机的速度不快的话,花的时间会
更长一些。编译内核如果没有错误,会得到内核映象文件
/usr/src/linux/arch/i386/boot/bzImage ,
将启动软盘插入计算机,执行下面的命令
mount -t vfat /dev/fd0 /mnt/floopy
cp /usr/src/linux/arch/i386/boot/bzImage /mnt/floppy
umount /dev/fd0
好了,启动盘上的文件都准备齐全了,等会儿用它到Win95环境下制作启动映象。
服务器设置
服务器端需要运行nfsd、dhcpd、mars_new等几个服务进程,这些软件在ReHat Linux发行套件里都有,如果在安装 Linux 的时候选择全部安装,这些软件都会随着安装操作系统而装好了,下面对这些软件进行设置,注意,下面的操作要以 root 身份进行。
1、 NFS 守护进程nfsd
首先要建立几个供无盘工作站使用的目录,并通过nfsd 导出,命令如下:
mkdir /tftpboot
然后编辑文件 /etc/hosts ,加入下面的内容
192.168.0.80 server server.domain
192.168.0.1 c1 c1.domain
192.168.0.2 c2 c2.domain
192.168.0.3 c3 c3.domain
192.168.0.4 c4 c4.domain
第一台工作站的工作目录设置方法如下:
mkdir /tftpboot/192.168.0.1
cd /tftpboot/192.168.0.1
c000p -a /bin .
cp -a /dev .
mknod dev/nd0 b 43 0
chmod 600 dev/nd0
cp -a /etc .
cp -a /home .
cp -a /lib .
rm -rf lib/modules
cp -a /root .
cp -a /sbin .
cp -a /var .
mkdir proc
mkdir usr
mkdir tmp
chmod 777 tmp
touch fastboot
chattr +i fastboot
cd etc
编辑文件 sysconfig/network-scripts/ifcfg-eth0
保留其中的
DEVICE=eth0
ONBOOT=yes
其余的行全部删除,然后增加一行
BOOTPROTO=dhcp
编辑文件 rc.d/rc.sysinit ,在文件最后加上两行
mount -t nfs server:/usr /usr
/usr/X11R6/bin/xfs
编辑文件 fstab
保留其中的
none /proc proc defaults 0 0
其余的行全部删除,然后增加一行
server:/tftpboot/192.168.0.1 / nfs defaults 1 1
其它工作站的工作目录设置方法就简单多了
cd /tftpboot
cp -a 192.168.0.1 192.168.0.2
cp -a 192.168.0.1 192.168.0.3
cp -a 192.168.0.1 192.168.0.4
编辑文件 /etc/exports ,加入以下内容
/usr (ro,no_root_squash)
/tftpboot/192.168.0.1 (rw,no_root_squash)
/tftpboot/192.168.0.2 (rw,no_root_squash)
/tftpboot/192.168.0.3 (rw,no_root_squash)
/tftpboot/192.168.0.4 (rw,no_root_squash)
2、动态主机配置协议服务器 dpchd
检查一下文件/etc/dhcpd.leases是否存在,若不存在就用命令touch /etc/dhcpd.leases
创建一个,然后编辑文件 /etc/dhcpd.conf ,加入以下内容
subnet 192.168.0.0 netmask 255.255.255.0 {
range 192.168.0.1 192.168.0.4;
}
3、NetWare 模拟器 marsw_nwe
编辑文件 /etc/nwserv.conf,找到下面的行
# 4 0x10 eth0 802.3 1
将该行开头的#去掉,再找到
4 0x0 * 802.3 1
在该行开头加上#
制作启动映象
进入Win95,将Win95(早期的版本,可以用服务器安装方式安装)安装光盘的
adminnettoolsnetsetuprplimage.exe 复制到硬盘,将启动软盘插入软驱,然后在
纯MSDOS方式下执行 rplimage a: 就会得到启动映象 net$dos.sys,再将启动映象
net$dos.sys 复制到启动盘上(如果启动盘空间不够,可以先删除启动盘上的一些文件以
留出空间)。
启动 Linux 服务器,以 root 用户登录,将启动软盘插入软驱,执行下面的命令
mount -t vfat /dev/fd0 /mnt/floppy
cp /mnt/floppy/net$dos.sys /var/mars_nwesyslogin
umount /dev/fd0
然后执行 setup ,移动光棒至 System services 选项回车,出现 Services 设置画面,
将dhcpd,nfs,mars-nwe 都设为有效,退出 setup 程序,执行以下的命令以启动上述服
务进程:
/etc/rc.d/rc3.d/*mars-nwe restart
/etc/rc.d/rc3.d/*dhcpd restart
/etc/rc.d/rc3.d/*nfs restart
下一次再启动服务器时,上述服务进程会自动执行。
至此,所有的设置工作全部完成了,联好网络随便打开一台无盘工作站,稍等一下,
出现远程引导的信息,接着会启动 Win95 ,接下来很快就会装载 Linux ,在一大堆
Linux 的启动信息之后如果看到 Linux 的登录提示,就说明远程启动成功了。
Linux 无盘工作站虽然运转起来了,但还有一个问题,就是交换的问题,因为Linux
是一个支持虚拟存储的操作系统,当机器内存不够时,Linux 就会把内存中暂时不用的数
据换出到交换设备上,等需要时再换回来,刚才我们没有设置交换区,在无盘工作站上用
free 命令就会发现交换区为零,如果无盘工作站内存较大,运行一些不大的程序,没有
交换区还是可以的,但若运行大型程序就会出问题,下面介绍在服务器上设置交换区即远
程交换的方法。
对于2.1.101版以前的内核,要实现远程交换可有点费事,得从网络上下载有关的补
丁来修改内核代码,然后再编译内核映象,从2.1.101版后内核支持网络块设备,实现远
程交换就容易了,首先编译内核时要使 Network block device support 选项有效(刚才
编译内核时就是这么作的),再从http://atrey.karlin.mff.cuni.cz/~pavel/nbd/nbd.html
下载实用程序 nbd.14.tar.gz ,执行下面的命令
tar zxvf nbd.14.tar.gz
cd nbd
./configure
make
编译完后会得到文件 nbd-server 和 nbd-client,将它们复制到 /usr/sbin 下面:
cp nbd-server nbd-client /usr/sbin
然后编辑文件 /etc/rc.d/rc.sysinit,在文件最后加上一行
/usr/sbin/nbd-server 7999 /tftpboot/%s/swap > /dev/null &
执行刚才的命令激活nbd服务:
/usr/sbin/nbd-server 7999 /tftpboot/%s/swap > /dev/null &
下一次服务器启动时,上述命令会自动执行。
再在服务器上每个工作站目录(/tftpboot/192.168.0.1,/tftpboot/192.168.0.2等等)下
为各个无盘工作站建立交换文件,命令如下(本例中交换区大小为32M):
dd if=/dev/zero of=swap count=32768 bs=1024
mkswap swap
在每个工作站目录下文件 /etc/rc.d/rc.sysinit 的最后加上两行
/usr/sbin/nbd-client server 7999 /dev/nd0
swapon /dev/nd0
就这么简单,再打开无盘工作站试一试启动成功后登录系统,执行命令 free 就会看到在
显示信息的最后有这样一行:
Swap: 32764 XX XXXX
说明交换区设置成功了。
这样,一个完整的 Linux 无盘工作站网络就作好了,Linux 无盘工作站的用法很灵活,既可以象使用普通有盘工作站一样使用,还可以把无盘工作站当成别的 Unix 主机的终端,特别是可以作为 X 终端,运行远程 Unix 主机上的 X 应用。
最后告诉大家,如果你想采用BOOTP方式作 Linux 远程引导,我可以提供 EPROM 刻录服务,当然要收取少量的刻录费用.