当年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 无盘工作站就是用这种方式作远程引导的。
准备启动盘 [color=#FFFFFF'][/color]
由于在 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 进行内核编译配置,下列项目必须按要求设置:
[color=#FFFFFF'][/color]
Processor type and features 该项目下面的选项必须根据无盘工作站的CPU类型设置,而不是根据服务器的CPU类型设置
Loadable module support 该项目下面的所有选项都禁止,即不支持模块功能
Plug and Play support设置为有效
Block devices该项目下面的
[color=#FFFFFF'][/color]
Loopback device support
[color=#FFFFFF'][/color]
Network block device support
[color=#FFFFFF'][/color]
都设置为有效
[color=#FFFFFF'][/color]
Networking option该项目下面的
kernel level autoconfiguration
DHCP support (NEW)
都设置为有效
[color=#FFFFFF'][/color]
Network device support 该项目下面的选项必须根据无盘工作站使用的网卡进行设置,本例中使用的是NE2000兼容网卡,选项
Ethernet (10 or 100Mbit)
Other ISA cards
[color=#FFFFFF'][/color]
NE2000/NE1000 support (NEW)
都设置为有效
Filesystems 该项目下面的Network File Systems子项目下面的
NFS filesystem support
[color=#FFFFFF'][/color]
Root file system on NFS (NEW)
都设置为有效
以上设置完成后,退出内核编译设置程序,会出现一个对话框:Do you wish to save your new kernel configuration?
[color=#FFFFFF'][/color]
然后执行make dep &;amp;&;amp; 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
[color=#FFFFFF'][/color]
首先要建立几个供无盘工作站使用的目录,并通过nfsd 导出,命令如下:
[color=#FFFFFF'][/color]
mkdir /tftpboot
然后编辑文件 /etc/hosts ,加入下面的内容
192.168.0.80server server.domain
192.168.0.1 c1 c1.domain
192.168.0.2 c2 c2.domain
192.168.0.3 c3 c3.domain
[color=#FFFFFF'][/color]
192.168.0.4 c4 c4.domain
第一台工作站的工作目录设置方法如下:
mkdir /tftpboot/192.168.0.1
[color=#FFFFFF'][/color]
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
[color=#FFFFFF'][/color]
cp -a /root .
cp -a /sbin .
[color=#FFFFFF'][/color]
cp -a /var .
mkdir proc
[color=#FFFFFF'][/color]
mkdir usr
mkdir tmp
chmod 777 tmp
touch fastboot
chattr i fastboot
cd etc
编辑文件 sysconfig/network-scripts/ifcfg-eth0
[color=#FFFFFF'][/color]
保留其中的
DEVICE=eth0
[color=#FFFFFF'][/color]
ONBOOT=yes
[color=#FFFFFF'][/color]
其余的行全部删除,然后增加一行
BOOTPROTO=dhcp
编辑文件 rc.d/rc.sysinit ,在文件最后加上两行
mount -t nfs server:/usr /usr
/usr/X11R6/bin/xfs
编辑文件 fstab
保留其中的
none/procprocdefaults0 0
[color=#FFFFFF'][/color]
其余的行全部删除,然后增加一行
server:/tftpboot/192.168.0.1/nfs defaults1 1
其它工作站的工作目录设置方法就简单多了
cd /tftpboot
[color=#FFFFFF'][/color]
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 ,加入以下内容
[color=#FFFFFF'][/color]
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,找到下面的行
# 40x10eth0802.31
将该行开头的'#'去掉,再找到
40x0 *802.31
在该行开头加上'#'
制作启动映象 进入Win95,将Win95(早期的版本,可以用服务器安装方式安装)安装光盘的admin\nettools\netsetup\rplimage.exe 复制到硬盘,将启动软盘插入软驱,然后在纯MSDOS方式下执行 rplimage a: 就会得到启动映象 net$dos.sys,再将启动映象 net$dos.sys 复制到启动盘上(如果启动盘空间不够,可以先删除启动盘上的一些文件以留出空间)。
启动 Linux 服务器,以 root 用户登录,将启动软盘插入软驱,执行下面的命令 mount -t vfat /dev/fd0 /mnt/floppycp /mnt/floppy/net\$dos.sys /var/mars_nwe\sys\login umount /dev/fd0然后执行 setup ,移动光棒至 System services 选项回车,出现 Services 设置画面,将dhcpd,nfs,mars-nwe 都设为有效,退出 setup 程序,执行以下的命令以启动上述服务进程:
[color=#FFFFFF'][/color]
/etc/rc.d/rc3.d/*mars-nwe restart
/etc/rc.d/rc3.d/*dhcpd restart
/etc/rc.d/rc3.d/*nfs restart
下一次再启动服务器时,上述服务进程会自动执行。
[color=#FFFFFF'][/color]
至此,所有的设置工作全部完成了,联好网络随便打开一台无盘工作站,稍等一下,出现远程引导的信息,接着会启动 Win95,接下来很快就会装载 Linux ,在一大堆 Linux 的启动信息之后如果看到 Linux 的登录提示,就说明远程启动成功了。
Linux 无盘工作站虽然运转起来了,但还有一个问题,就是交换的问题,因为Linux 是一个支持虚拟存储的操作系统,当机器内存不够时,Linux 就会把内存中暂时不用的数 据换出到交换设备上,等需要时再换回来,刚才我们没有设置交换区,在无盘工作站上用 free 命令就会发现交换区为零,如果无盘工作站内存较大,运行一些不大的程序,没有交换区还是可以的,但若运行大型程序就会出问题,下面介绍在服务器上设置交换区即远 程交换的方法。
[color=#FFFFFF'][/color]
对于2.1.101版以前的内核,要实现远程交换可有点费事,得从网络上下载有关的补丁来修改内核代码,然后再编译内核映象。从2.1.101版后的内核支持网络块设备,这样,实现远程交换就容易了。首先编译内核时要使 Network block device support 选项有效(刚才编译内核时就是这么作的),再从
http://atrey.karlin.mff.cuni.cz/"pavel/nbd/nbd.html 下载实用程序 nbd.14.tar.gz ,执行下面的命令
[color=#FFFFFF'][/color]
tar zxvf nbd.14.tar.gz
cd nbd
[color=#FFFFFF'][/color]
./configure
[color=#FFFFFF'][/color]
make
编译完后会得到文件 nbd-server 和 nbd-client,将它们复制到 /usr/sbin 下面:
cp nbd-server nbd-client /usr/sbin
然后编辑文件 /etc/rc.d/rc.sysinit,在文件最后加上一行
[color=#FFFFFF'][/color]
/usr/sbin/nbd-server 7999 /tftpboot/%s/swap > /dev/null &;amp;
执行刚才的命令激活nbd服务:
/usr/sbin/nbd-server 7999 /tftpboot/%s/swap > /dev/null &;amp;
下一次服务器启动时,上述命令会自动执行。
再在服务器上每个工作站目录(/tftpboot/192.168.0.1,/tftpboot/192.168.0.2等等)下为各个无盘工作站建立交换文件,命令如下(本例中交换区大小为32M):
[color=#FFFFFF'][/color]
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 就会看到在显示信息的最后有这样一行:
[color=#FFFFFF'][/color]
Swap:32764XX XXXX
这说明交换区设置成功了。
通过以上步骤,一个完整的 Linux 无盘工作站网络就作好了,Linux 无盘工作站的用法很灵活,既可以象使用普通有盘工作站一样使用,还可以把无盘工作站当成别的 Unix 主机的终端,特别是可以作为 X 终端,运行远程 Unix 主机上的 X 应用。