说起无盘工作站,大家一定不会陌生,当年Novell下的无盘DOS工作站很是流行,后来又
% _, W/ Z r, O) W流行过Win95无盘工作站,只是由于问题多多,后来
微软自己停止了对无盘
Windows的支持。
8 a9 O2 b' ^% @* @
随着
Linux的日益流行,使用
Linux的人越来越多,其实
Linux 对远程引导的支持非常好,
, ~1 j5 U" L- ]+ LLinnx内核自身又支持
网络文件
系统,因此非常适合做无盘工作站,本文将以一个实例向大家
) s" q4 p5 E) l. S7 ]3 Q! j( M
详细介绍无盘Linux工作站的安装办法。
3 f# v/ J2 _, A, a- ]
这个网络是一个小的局域网,有1台
服务器和4台 Linux 无盘工作站,彼此之间用双绞
7 h# B) G8 A1 Z }' r. z% K6 n- H线通过HUB连接,服务器的IP地址定为192.168.0.80 ,名字是server ,5台无盘工作站的
0 X% L4 F' o( V* R$ x0 K
地址由服务器动态分配,地址范围从 192.168.0.1 到 192.168.0.4 ,名字分别是c1,c2,
: L n& D5 e5 h% {& _c3,c4,服务器和无盘工作站使用的都是 NE2000 兼容
网卡,无盘工作站使用的网卡上都安
5 N& \8 h1 {) u装了BOOTROM 启动
芯片,服务器
操作系统安装的是 RedHat Linux 6.0 ,安装时选用定制
: S" D& D4 }& v. `" |2 D" k% x
安装,并安装了全部
软件。
F1 V# j2 [. S) \ Linux的远程引导有两种方式,一是利用Bootp协议,有一个专门的项目EtherBoot 提供
8 z" u. w8 y1 E4 ?. |$ [+ m! w5 G
支持(http://www.slug.org.au/etherboot/),这种方式引导 Linux 的
速度是最快的,
. T K" i/ _0 y+ Y- g/ a) t+ W/ H[color=#FFFFFF']
1 r+ R1 X% `9 Q
5 w; d4 L9 B/ ~/ T
但这种方式有一个最大的问题,就是在市场上找不到支持这种远程引导协议的 BOOTROM 启动
" ]" |9 F6 b. `; R3 A8 `
芯片(除非自己刻录),因为市场上几乎所有的 BOOTROM 启动芯片都是遵循NOVELL远程引导
) Z1 B1 P! r+ U
协议的,于是有人提出另外一种方式,就是服务器端用 NetWare 服务器,客户端就可以用现
$ @3 U+ X# R+ x5 B有的BOOTROM 启动芯片了,说到这里大家一定胡涂了,作Linux无盘工作站岂不是还一台
; }0 |' D: G% m& l0 oNetWare 服务器?不是的,因为
神通广大的 Linux 可以模拟 NetWare 服务器,就象Samba
$ g2 A% r& {; E
可以把 Linux 模拟成 NT 一样,mars_nwe 可以把 Linux 模拟成 NetWare,不仅能提供
8 r, U- g) B- | o7 aNetWare 文件和打印服务,还能提供远程引导支持(知道Linux的厉害了吧),本文讲述的
$ }, v2 x* K: S- }$ q* C/ A% RLinux 无盘工作站就是用这种方式作远程引导的。
9 t7 S$ W5 n/ N- r准备启动盘
- T; o1 z! R2 ^1 D* m
由于在 Linux 下没有制作符合 NetWare 远程引导协议启动映象的工具,所以只能用早
; S) g6 i& ^" U2 y% S. R期的Win95()提供的工具(遗憾)。找一台装有 Win95 的
机器启动后按 F8 进入纯DOS方式,
! Y1 p9 S# N* G: m5 K& s7 I+ {6 W9 ^
格式化一张启动盘 format a: /s ,然后将RedHat Linux安装光盘上 dosutils 目录下的
/ h. m- h8 {/ k8 p. Y$ ]' yloadlin.exe复制到启动盘,在启动盘上作一个 autoexec.bat 文件,代码只有一行
3 S; g' S w; m" V
[color=#FFFFFF']
8 Y0 N S# ]1 h' P! Z( X* y3 m4 ^; ^) l6 \3 h! K
loadlin.exe bzImage root=/dev/nfsroot
4 B. K- e# q6 N从 Windows 95 安装光盘的 Win95 目录下的cab文件中解出 rplboot.sys 文件放在启动
1 e- K" F* a+ j, u; w* U. _ G
盘上,命令如下:
* O; x) I/ Y8 u$ B2 Sextract.exe /a /l a:\ win95-27.cab rplboot.sys
; i, I" ?+ S0 s7 |) Q: z# T( }一张用来做启动映象的启动盘就作好了,保存好启动盘,以后作启动映象时会用到它。
! y% R+ C0 [) T8 ]( {% C编译内核
9 p: S% }0 }) s: y& H9 X2 v3 T 用于无盘工作站的Linux内核与用于从本地
硬盘引导的Linux内核是不同的,无盘工作
* N9 H; R) b2 E( Y
站的内核必须支持NFS作为根文件系统,即远程根文件系统,所以必须编译无盘工作站专
& n; u/ y$ P6 j( V
用的内核。笔者使用的内核代码版本是2.2.16,将内核
源代码解压到/usr/src下,
0 q' E$ P8 E! I9 @cd /usr/src/linux 进入内核子目录,执行命令make menuconfig 进行内核编译配置,下
. H! _9 o+ s2 h, ?" P/ b* e列项目必须按要求设置:
; [( P1 e1 C9 uProcessor
type and features 该项目下面的选项必须根据无盘工作站的
CPU类型设
! y6 }1 M) U. m& S X& d
置,而不是根据服务器的CPU类型设置
& b' y/ w, K0 X1 w: V0 a+ S8 R% RLoadable module support 该项目下面的所有选项都禁止,即不支持模块
功能
6 e, b8 q3 C$ ?! ^* l* s6 CPlug and Play support 设置为有效
) Z: j" _( `6 }$ e6 Y
Block devices 该项目下面的
8 Y! A5 m; U/ a" U' ]
[color=#FFFFFF']
! ?8 w. W% _1 o" J
" L6 H8 y1 ]! C8 ~2 J# }
Loopback device support
, {3 u; i, `( g& C. f
Network block device support
& p2 y g4 N" S/ W
都设置为有效
$ G" B \, F+ [1 u3 M1 M9 q3 T
Networking option 该项目下面的
- P5 c3 R E+ t: q: m kernel level autoconfiguration
, ]& t1 j2 f8 z7 |8 |6 O
DHCP support (NEW)
: h' \2 A S$ K" U% T L5 c+ |6 N 都设置为有效
* {. k: y6 S2 @ G% t
Network device support 该项目下面的选项必须根据无盘工作站使用的网卡进
' `, Q) ]' `5 J" p
行设置,本例中使用的是NE2000兼容网卡,选项
- t- R9 O( f* x- s Ethernet (10 or 100Mbit)
* ~$ M) H5 p! J f1 _! v+ Z- ?, a Other ISA cards
9 E i# X1 t% o9 y6 J5 [ NE2000/NE1000 support (NEW)
4 ^, k6 R0 f; M: B E 都设置为有效
' b s# ^( f$ b$ {9 eFilesystems 该项目下面的Network File
Systems子项目下面的
, n7 l# D( ^5 c: ?4 G" H
NFS filesystem support
3 ~# ?5 Y( r. B: B+ r" l+ w Root file system on NFS (NEW)
' \/ S+ b% ^( w$ W1 Z 都设置为有效
) o; w) k$ s, Q
其它的选项可以不用理会,直接用缺省值就可以了,当然如果你的无盘工作站有些其它需
. |5 F+ i: r: b5 @! X2 n要使用的设备,你也可以将有关的选项设为有效,比如,本例中的无盘工作站使用了声霸
2 `1 l: ~8 E2 c
卡兼容的
声卡,下面的选项
8 ~5 l M$ s5 `( D0 }
OSS sound modules (NEW)
, G& d5 [/ u8 f& }5 |3 ^$ j5 F% c
100% Sound Blaster compatibles (SB16/32/64, ESS, Jazz16) support
/ u' c M- O+ W) f
FM synthesizer (YM3812/OPL-3) support (NEW)
0 h$ p. ^6 Z- Q; ] Q
都设置为有效
, B A& u4 `+ T/ |/ X以上设置完成后,退出内核编译设置
程序,会出现一个对话框
* P8 T C" N F" U! ]' M6 r4 [
Do you wish to save your new kernel configuration?
& f7 \, w5 c3 t6 t4 f0 l回答
! q% e- g! A. c2 ~
然后执行
& f; s2 M; x% t+ A% _: X$ o- G+ Z. |make dep %26;amp;%26;amp; make bzImage
( F1 ?/ F" l3 {9 T进行内核编译,这个过程得花一点
时间,特别是如果
计算机的速度不快的话,花的时间会
3 p h0 Y, e; T2 F0 c( ~- @
更长一些。编译内核如果没有错误,会得到内核映象文件
: G1 [0 t6 A5 A8 c5 ]4 E2 M/usr/src/linux/arch/i386/boot/bzImage ,
- ~; u$ u+ p' M. w6 Y. D! ~# H7 B/ |- j将启动软盘插入计算机,执行下面的命令
8 \ W4 ]7 h5 I8 `: |
mount -t vfat /dev/fd0 /mnt/floopy
* N0 g$ w4 I8 I! X: f
cp /usr/src/linux/arch/i386/boot/bzImage /mnt/floppy
! T& d( m1 E0 U V% R! Xumount /dev/fd0
4 ]) m) A) z( K( Y' m好了,启动盘上的文件都准备齐全了,等会儿用它到Win95
环境下制作启动映象。
6 r8 | G+ t3 b; J4 P, a服务器设置
9 t) ~. L( c- F4 \: f
服务器端需要运行nfsd、dhcpd、mars_new等几个服务进程,这些软件在ReHat Linux
. {6 I/ G. E7 m
发行套件里都有,如果在安装 Linux 的时候选择全部安装,这些软件都会随着安装操作
! b$ z9 c0 P/ g- W1 ^系统而装好了,下面对这些软件进行设置,注意,下面的操作要以 root 身份进行。
; c/ j( t8 [# H I
1、 NFS 守护进程nfsd
: p8 J* X9 c! K0 K0 z# \
首先要建立几个供无盘工作站使用的目录,并通过nfsd 导出,命令如下:
* x* {6 O* A' E0 K% \, \; N; Wmkdir /tftpboot
! N6 u/ j% A) R& B$ V. c然后
编辑文件 /etc/hosts ,加入下面的内容
; D0 G7 Y2 ?7 S$ t v192.168.0.80 server server.domain
4 v" M# ~) t1 W* F# q
192.168.0.1 c1 c1.domain
" A# P/ W9 B) m" H; B& r6 K1 G/ G192.168.0.2 c2 c2.domain
& K8 M" J' D e2 f192.168.0.3 c3 c3.domain
5 ?. q1 H( r* b5 N
192.168.0.4 c4 c4.domain
# O& g4 o7 `8 [* t1 {% z/ ^第一台工作站的工作目录设置方法如下:
& n4 K: B# f B5 Kmkdir /tftpboot/192.168.0.1
1 @ f: R: ~- `$ |# e
cd /tftpboot/192.168.0.1
& @* _' a' t) ~c000p -a /bin .
2 t! x: t- S' bcp -a /dev .
; l ]+ ^. W, F8 e/ j2 [! t
mknod dev/nd0 b 43 0
! D& ?! i% o' A5 D% C
chmod 600 dev/nd0
/ [) I+ p' h8 L7 W9 k! qcp -a /etc .
2 \7 J* \* v+ h! ~4 X) Y- Ycp -a /home .
, P9 d( z/ j @4 Fcp -a /lib .
8 U, I, `* s- J7 n
rm -rf lib/modules
9 C1 q/ y" }0 w+ U0 vcp -a /root .
$ Y! u. z3 ]. i* acp -a /sbin .
2 O! b; u4 F/ f& y# vcp -a /var .
0 p) F9 l8 O( G. m; d0 J
mkdir proc
, g% \! R3 g6 S( F* O# }" i8 omkdir usr
* @' C( r1 p+ y) Z- H" g& i. Nmkdir tmp
0 h$ b' J9 b" p( Y2 j9 Z5 S
chmod 777 tmp
. F6 e- e2 L- ?4 K
touch fastboot
1 @: C/ y" S. }7 L/ {% Mchattr i fastboot
' b* K1 o* H- W) u$ k5 @6 @( s) ]# gcd etc
! f- T1 R% W# y" o6 }$ C
编辑文件 sysconfig/network-scripts/ifcfg-eth0
6 S9 M3 c- l. N, k! O/ X7 }
保留其中的
# B r" v7 q) l) {( w
DEVICE=eth0
* c6 i( j8 J+ z' a/ yONBOOT=yes
8 _7 L- x5 G0 a7 B5 I4 w4 [1 e% p/ t其余的行全部删除,然后增加一行
7 K7 H. V7 O4 o
BOOTPROTO=dhcp
) Q0 @% d" T' O; k' v O) F
编辑文件 rc.d/rc.sysinit ,在文件最后加上两行
R A( F# F! c5 Z
mount -t nfs server:/usr /usr
/ r" z: ]. Y9 s" @4 }
/usr/X11R6/bin/xfs
/ c: h7 l( o$ x" g% a, M编辑文件 fstab
. O% H V) t" X保留其中的
9 d" m: |% o/ Y7 d8 i- N- H( n: s1 Gnone /proc proc defaults 0 0
: o- {6 K% Q4 B M2 M& N& y6 A其余的行全部删除,然后增加一行
( t' r7 D* S d! }$ Nserver:/tftpboot/192.168.0.1 / nfs defaults 1 1
& f$ V" b. U" h% `* G4 ^% G, v. q[color=#FFFFFF']
( A# P& ?/ M N/ }
/ O6 X8 x9 m' r. N4 Z" I其它工作站的工作目录设置方法就简单多了
; R" V& ]9 v- B5 N4 ~* Hcd /tftpboot
9 e2 h- D$ a5 T7 u$ Z3 }" R0 n# d
cp -a 192.168.0.1 192.168.0.2
3 Y7 C$ W8 s+ \7 {9 ~, R9 bcp -a 192.168.0.1 192.168.0.3
, M- K& |+ q+ C: P3 Z) f" _0 @
cp -a 192.168.0.1 192.168.0.4
" u. D0 x( [8 q8 a6 a a
编辑文件 /etc/exports ,加入以下内容
; O; _( v R; L7 S. r! a5 R/usr (ro,no_root_squash)
& l) n8 p9 ]2 x- n3 {) V' A/tftpboot/192.168.0.1 (rw,no_root_squash)
! F5 c9 x& J8 e% C! ^3 d/tftpboot/192.168.0.2 (rw,no_root_squash)
7 H3 k J$ K7 o- q
/tftpboot/192.168.0.3 (rw,no_root_squash)
8 p( r% u5 l$ a$ S& l/tftpboot/192.168.0.4 (rw,no_root_squash)
/ Q u6 c. {# y s* {3 v% _2 ?6 G2 S2、动态主机配置协议服务器 dpchd
1 t4 a- Z. C$ k# A检查一下文件/etc/dhcpd.leases是否存在,若不存在就用命令touch /etc/dhcpd.leases
# j3 c1 B; p. V) u) g创建一个,然后编辑文件 /etc/dhcpd.conf ,加入以下内容
! e% g) V) W0 X
subnet 192.168.0.0 netmask 255.255.255.0 {
$ n, z, F+ ~; `+ `- i
range 192.168.0.1 192.168.0.4;
' u9 r1 t5 U' @! X9 ^2 F
}
8 W# z5 }! \) N0 o; {3 M
3、NetWare 模拟器 marsw_nwe
' q! q9 |+ r* t3 p$ M7 x- s9 ~
编辑文件 /etc/nwserv.conf,找到下面的行
; y2 g1 z' l1 m$ r# 4 0x10 eth0 802.3 1
5 h6 q$ M! @3 y1 f" Y: C
将该行开头的'#'去掉,再找到
G9 m- y- ]) U4 D9 T6 E* w4 0x0 * 802.3 1
+ U+ K! Z0 b! B% B
在该行开头加上'#'
: R- s' }) f' `7 u. D' \; ~ c* I
制作启动映象
. u8 O% t) W' b4 \( p# ]
进入Win95,将Win95(早期的版本,可以用服务器安装方式安装)安装光盘的
8 i- D, [" R# Z" R- k9 R
admin\nettools\netsetup\rplimage.exe 复制到硬盘,将启动软盘插入软驱,然后在
; }2 q1 [% y5 t+ m, t6 [) a0 A纯MSDOS方式下执行 rplimage a: 就会得到启动映象 net$dos.sys,再将启动映象
Z" N# i' z: ?+ c' n7 q6 M, [6 m
net$dos.sys 复制到启动盘上(如果启动盘
空间不够,可以先删除启动盘上的一些文件以
7 @# D' y& m* X3 o" \# m
留出空间)。
7 k, V, S, {7 A. [5 V& j$ w' O 启动 Linux 服务器,以 root 用户登录,将启动软盘插入软驱,执行下面的命令
( R7 s% u! L, v. S M
mount -t vfat /dev/fd0 /mnt/floppy
' m1 U8 Y9 P1 w) rcp /mnt/floppy/net\$dos.sys /var/mars_nwe\sys\login
) D/ |8 ^6 ]* p0 A
umount /dev/fd0
z3 n* p/ s0 O8 X% ~
然后执行 setup ,移动光棒至 System services 选项回车,出现 Services 设置画面,
( Y( t: o" V) r5 F将dhcpd,nfs,mars-nwe 都设为有效,退出 setup 程序,执行以下的命令以启动上述服
9 j; f& R% z& U4 A- S% c
务进程:
2 S, x- S `# i' G1 ~* a/etc/rc.d/rc3.d/*mars-nwe restart
9 i' @$ u& C" ^+ w2 ?% s G
/etc/rc.d/rc3.d/*dhcpd restart
# A. `. t8 B6 E
/etc/rc.d/rc3.d/*nfs restart
( ^3 M1 C4 \3 N! E: }* u' k* d! X
下一次再启动服务器时,上述服务进程会自动执行。
/ {6 o4 e! j- p5 |! Y, W4 i 至此,所有的设置工作全部完成了,联好网络随便打开一台无盘工作站,稍等一下,
7 y/ r5 X ? c8 K I
出现远程引导的
信息,接着会启动 Win95 ,接下来很快就会装载 Linux ,在一大堆
' d8 ]8 M2 q# s3 _5 O$ b- z4 n/ H
Linux 的启动信息之后如果看到 Linux 的登录提示,就说明远程启动成功了。
2 }& o0 ?0 Q4 r' c/ k2 E
Linux 无盘工作站虽然运转起来了,但还有一个问题,就是交换的问题,因为Linux
2 E7 l r$ j% e: ~8 @6 Q
是一个支持虚拟存储的操作系统,当机器
内存不够时,Linux 就会把
内存中暂时不用的数
& _! I/ ]2 M+ T# j/ v% ^* ~
据换出到交换设备上,等需要时再换回来,刚才我们没有设置交换区,在无盘工作站上用
/ p. l2 b5 n" ? [; K4 @/ ^free 命令就会发现交换区为零,如果无盘工作站内存较大,运行一些不大的程序,没有
7 E' o0 z( s4 ^4 i% u" W
交换区还是可以的,但若运行大型程序就会出问题,下面介绍在服务器上设置交换区即远
# Y4 G4 ]+ E( `" d* T
程交换的方法。
, n3 _, }! x) Z7 p) o 对于2.1.101版以前的内核,要实现远程交换可有点费事,得从网络上
下载有关的补
: ^ S: v, d: q; u* O" D* ^丁来修改内核代码,然后再编译内核映象,从2.1.101版后内核支持网络块设备,实现远
% ^. N* x$ T% P' K* f3 o' e程交换就容易了,首先编译内核时要使 Network block device support 选项有效(刚才
8 A0 X2 r4 V# {, x$ \2 f0 H8 `. c2 q编译内核时就是这么作的),再从http://atrey.karlin.mff.cuni.cz/"pavel/nbd/nbd.html
1 r8 K) p" v) e) p5 f5 O: p k
下载实用程序 nbd.14.tar.gz ,执行下面的命令
/ w. |- G( t, x# E+ p" C3 p! q
tar zxvf nbd.14.tar.gz
/ [+ w3 |2 o" Z1 f. d2 s% ^
cd nbd
. _4 p3 I t. }/ ]
./configure
6 U, l' u, v4 v6 E- `/ N5 ]make
/ y2 S6 Y7 ]: [8 ]4 T, L3 l& H1 E; E
编译完后会得到文件 nbd-server 和 nbd-client,将它们复制到 /usr/sbin 下面:
0 Z7 [$ O F P9 r4 B; v
cp nbd-server nbd-client /usr/sbin
( F; p/ L( ?/ H2 r3 ^: o- r
然后编辑文件 /etc/rc.d/rc.sysinit,在文件最后加上一行
8 C/ J' F/ O3 t/usr/sbin/nbd-server 7999 /tftpboot/%s/swap %26gt; /dev/null %26;amp;
0 ] w" @7 ~0 J( Y% ^执行刚才的命令激活nbd服务:
\7 n$ v/ G8 w1 b/usr/sbin/nbd-server 7999 /tftpboot/%s/swap %26gt; /dev/null %26;amp;
2 g0 o: s! q; q下一次服务器启动时,上述命令会自动执行。
' n; Y5 b, N; y) f再在服务器上每个工作站目录(/tftpboot/192.168.0.1,/tftpboot/192.168.0.2等等)下
' w. ^: C7 O( R: m+ S6 m* l M为各个无盘工作站建立交换文件,命令如下(本例中交换区大小为32M):
0 T. N1 N- h: e# k$ Ndd if=/dev/zero of=swap count=32768 bs=1024
5 }2 U. v6 w& X, T' m5 gmkswap swap
3 o' j( Z7 G( G$ O0 c
在每个工作站目录下文件 /etc/rc.d/rc.sysinit 的最后加上两行
1 F) r3 n U$ c/ E' U8 ?- k1 |( I/usr/sbin/nbd-client server 7999 /dev/nd0
) x) o" |& O) a U6 b+ T
swapon /dev/nd0
0 S7 W" `1 x' b& k
就这么简单,再打开无盘工作站试一试启动成功后登录系统,执行命令 free 就会看到在
2 d5 w3 y) {- X& M显示信息的最后有这样一行:
* R# n7 x* [( b; zSwap: 32764 XX XXXX
% r( ], ~* g1 [说明交换区设置成功了。
$ f" S3 J1 h3 A* X, D E
这样,一个完整的 Linux 无盘工作站网络就作好了,Linux 无盘工作站的用法很灵
, G% c- V+ s" w6 M- ~% T8 ?7 g$ Z活,既可以象使用普通有盘工作站一样使用,还可以把无盘工作站当成别的
Unix 主机的
% ]4 h3 \! `8 q9 G: s3 Z
终端,特别是可以作为 X 终端,运行远程 Unix 主机上的 X 应用。
9 ^0 ?8 c B6 h 最后告诉大家,如果你想采用BOOTP方式作 Linux 远程引导,我可以提供 EPROM 刻录
) S5 M0 J8 V% s# I" A9 a; z. p
服务,当然要收取少量的刻录费用.