1、Linux无盘工作站搭建Linux无盘工作站网络环境构建说明书 脉山龙股份公司1 无盘工作站及其原理1.1 无盘工作站无盘工作站是没有硬盘的计算机终端。它本身不含有硬存储设备,机器引导时需要借助网络上的服务器来传输操作系统启动文件到本地内存,才可以完成启动。因此,无盘工作站必须具有CPU、主板、内存、网卡和远程启动设备。远程启动设备主要以芯片的形式固化或接插在网卡上,在系统启动时负责连接服务器,获取IP地址,指导服务器上的操作系统启动文件到本地内存的传输。目前,远程启动芯片主要有RPL和PXE两种,后者为前者的升级版,目前正在被广泛使用。1.2 PXE芯片启动原理PXE芯片在远程启动时,首先要
2、进行一个DHCP会话过程来获取一个IP地址和相关信息,以便进行后续的文件传送;IP地址获取成功后,PXE芯片触发TFTP会话过程,根据DHCP过程获取的相关信息向服务器请求启动文件,服务器接到请求后,根据本地策略,发送相应的启动文件,工作站接收到启动文件后,开始本地启动过程。以上是PXE芯片无盘工作站启动过程的简单描述,DHCP协议的相关内容可参考RFC2131标准化文档,TFTP协议的相关内容可参考RFC1350标准化文档。对于Linux操作系统来说,PXE所需要下载的启动文件是配置文件和内核文件。其中,配置文件在DHCP应答报文中包含,通过TFTP会话过程获取;内核文件的名称和位置在配置文
3、件中给出,同样需要通过TFTP会话过程获取;内核文件获取成功后,系统开始进行本地启动,当启动过程进行到需要装载文件系统时,PXE会根据配置文件,向服务器请求连接根文件系统(该文件系统为NFS网络根文件系统)所对应的服务器目录,若成功,则启动结束。下页图1-1给出了这一过程的交互模型。Linux无盘工作站的详细启动流程如下:Step 1 工作站加电,PXE芯片进行自检;Step 2 准备启动,PXE芯片发送DHCP请求;Step 3 服务器收到工作站送出的请求,发送DHCP应答,内容包括客户端的IP地址,预设网关,DNS服务器及开机映象文件(配置文件和内核)位置;Step 4 工作站上的PXE芯
4、片根据配置文件位置,开始TFTP会话请求下载该文件;Step 5 加载映象文件,开始本地启动,挂载NFS网络根文件系统;Step 6 出现Login行,启动成功。图1-1 PXE芯片启动过程中的网络交互1.3 配置过程概述根据上面的叙述不难得知,配置无盘工作网络环境的核心工作在于无盘网络文件服务器的配置,而文件服务器的配置又是由DHCP、TFTP等几个部分组成的。因此不难得知,配置Linux无盘工作站的网络环境,依次需要完成以下工作:(1)选择并安装无盘网络文件服务器上的Linux操作系统;(2)配置该操作系统的基本网络环境;(3)配置DHCP服务器;(4)配置TFTP服务器;(5)为工作站创
5、建工作目录、配置文件和内核文件;(6)为工作站构建合理的、标准化的Linux文件系统;(7)启动工作站,进行必要的调试。2 详细配置说明2.1 操作系统的选择和安装首先,要为服务器选择一个适用于无盘工作站网络环境的操作系统。这个操作系统应该具有网络功能强大,处理速度优化,稳定性高等特点。在选择操作系统时,切忌选择具有服务器版本的PC机系统,而是要选择专门为服务器和大机器应用而开发的网络操作系统。经过考虑,本次配置决定选择Red Hat Enterprise Linux Advanced Server 4(RHAS4)操作系统,该系统是Red Hat公司专门为企业服务器所设计的操作系统,其内核版
6、本高低适中,稳定性好,网络功能十分强大,贴近标准Linux,易于操作和管理。2.2 基本网络环境配置构建最基本的网络环境是任何网络服务器都必须做好的事情。这一部分的内容包括配置IP地址、子网掩码、主机名称和DNS服务器等内容,如果使用拨号或虚拟拨号网络,还应该配置相应的Modem和PPP协议支持。这部分操作在RHAS4中十分简单,只需在桌面环境下的最顶部依次选择“应用程序”“系统设置”“网络”,即可按照提示完成,如果未安装桌面环境,则使用ifconfig命令配置即可。2.3 配置DHCP服务DHCP服务需要对/etc/dhcpd.conf文件进行配置,将这个文件用vi或gedit打开就可以进行
7、配置了。在命令行中输入vi /etc/dhcpd.conf或者gedit /etc/dhcpd.conf,将以下内容按括号中的说明修改后粘贴进去,保存退出即可。(开头有#的行为注释行,不必粘贴)- 下面是我个人的dhcpd.conf配置文件实例:rootserver # cat /etc/dhcpd.conf ddns-update-style interim;ignore client-updates;allow bootp;allow booting;subnet 192.168.1.0 netmask 255.255.255.0 # - default gateway option ro
8、uters 192.168.1.5; option subnet-mask 255.255.255.0;# option nis-domain domain.org;# option domain-name domain.org; option domain-name-servers 192.168.1.5;# option time-offset -18000; # Eastern Standard Time# option ntp-servers 192.168.1.5;# option netbios-name-servers 192.168.1.5;# - Selects point-
9、to-point node (default is hybrid). Dont change this unless# - you understand Netbios very well# option netbios-node-type 2; range dynamic-bootp 192.168.1.128 192.168.1.249; default-lease-time 21600; max-lease-time 43200; server-name server; next-server 192.168.1.5; # we want the nameserver to appear
10、 at a fixed address host c1 server-name server; next-server 192.168.1.5; hardware ethernet 00:0c:29:ff:b3:22; fixed-address 192.168.1.128; filename /tftpboot/pxelinux.0; option root-path tftpboot/192.168.1.128; #(若还有其他机器,则按这种方法继续进行配置 host c2) DHCP服务随开机系统启动,dhcpd服务启动,可以用命令:chkconfig level 345 dhcpd o
11、n2.4 配置TFTP服务TFTP服务需要在/etc/xinetd.d中进行注册性配置,将这个文件用vi或gedit打开就可以进行配置了。在命令行中输入vi /etc/xinetd.conf或者gedit /etc/xinetd.conf,将以下内容追加到文件末尾,保存退出即可。includedir /etc/xinetd.dservice tftpsocket_type = dgramprotocol = udpwait = yesuser = rootserver = /usr/sbin/in.tftpd让系统启动自动加载tftp服务:在etcxinetd.dtftp中的disable=y
12、es改成no即可2.5 工作系统内核编译无盘工作站需要根据它自身的特殊性来量身定做特殊的内核,因此首先要了解无盘工作站有哪些特点。经上述叙述不难得知,无盘工作站必须支持DHCP/BOOTP协议启动,而且必须支持NFS文件系统为其根文件系统,还要支持相关的网络设备。内核的选取也十分重要,版本太低的内核功能很少,安全性差;版本太高的内核又会不稳定。经过考虑,本次配置采用了2.6.18版本的Linux内核,该内核源码包的下载地址为:http:/www.at.kernel.org/pub/linux/kernel/v2.6/linux-2.6.18.tar.gz注:内核源代码包获取分两种情况,第一种是
13、通过在系统安装光盘中获得当前系统的内核源码,这种内核包的格式多数是rpm的;第二种是通过在www.kernel.org获得更高版本的内核源码,这种内核包的格式多数是tar.gz的;我们现在来讨论第二种方法,从htttp:/www.at.kernel.org/pub/linux/kernel/v2.6/linux-2.6.18.tar.gz大家刚才看到的这个52M的软件包就是内核源码包,使用tar zxvf linux-2.6.18.tar.gz来解压缩出来,如果成功,该包会安装在/usr/src目录下,产生一个linux-2.6.18的文件夹,里面就是内核源码的内容内核下载完成后,依次在终端中
14、执行如下命令:Cp linux-2.6.18.tar.gz /usr/srccd /usr/srctar zxvf linux-2.6.18.tar.gzcd linux-2.6.18在编译执行之前,需要系统的一些底层环境的支持,也就是说需要事前在系统中具备和安装相应的软件包。 否则无法正常进入编译内核包界面,或者安装内核包之后,会在下一步操作中提示出错。 这些软件包括:gcc ncurses make dev86 glibc-kernheader cpp binutils ,注明:glibc-kernheader软件包可能没有,我们需要找安装的软件为:glibc-headers-2.5-34
15、.i386.rpm;kernel-headers-2.6.18-8.1.3.lspp.81.el5.i386.rpm来安装, 检查软件是否安装使用rpm -qa | grep packagename命令就行下面是本人在实验当中编译开始前的报错及解决过程:rootserver linux-2.6.18# make mrproperrootserver linux-2.6.18# make menuconfig HOSTCC scripts/basic/fixdep在包含自 /usr/include/features.h:352 的文件中, 从 /usr/include/sys/types.h:2
16、7, 从 scripts/basic/fixdep.c:105:/usr/include/gnu/stubs.h:7:27: 错误:gnu/stubs-32.h:没有那个文件或目录make1: * scripts/basic/fixdep 错误 1make: * scripts_basic 错误 2报错,需要安装软件包glibc-devel,在第二光盘里找安装上解决再次执行:rootserver linux-2.6.18# make mrproperrootserver linux-2.6.18# make menuconfig报错为: rootserver linux-2.6.18# mak
17、e menuconfig HOSTCC scripts/basic/fixdep HOSTCC scripts/basic/docproc HOSTCC scripts/kconfig/conf.o HOSTCC scripts/kconfig/kxgettext.o HOSTCC scripts/kconfig/mconf.o SHIPPED scripts/kconfig/zconf.tab.c SHIPPED scripts/kconfig/lex.zconf.c SHIPPED scripts/kconfig/zconf.hash.c HOSTCC scripts/kconfig/zc
18、onf.tab.o HOSTLD scripts/kconfig/mconf HOSTCC scripts/kconfig/lxdialog/checklist.o在包含自 scripts/kconfig/lxdialog/checklist.c:24 的文件中:scripts/kconfig/lxdialog/dialog.h:31:20: 错误:curses.h:没有那个文件或目录In file included from scripts/kconfig/lxdialog/checklist.c:24:scripts/kconfig/lxdialog/dialog.h:128: 错误:ex
19、pected =, , ;, asm or _attribute_ before use_colorsscripts/kconfig/lxdialog/dialog.h:129: 错误:expected =, , ;, asm or _attribute_ before use_shadowscripts/kconfig/lxdialog/dialog.h:131: 错误:expected =, , ;, asm or _attribute_ before attributesscripts/kconfig/lxdialog/dialog.h:143: 错误:expected ) before
20、 * tokenscripts/kconfig/lxdialog/dialog.h:146: 错误:expected ) before * tokenscripts/kconfig/lxdialog/dialog.h:147: 错误:expected ) before * tokenscripts/kconfig/lxdialog/dialog.h:148: 错误:expected ) before * tokenscripts/kconfig/lxdialog/dialog.h:149: 错误:expected ) before * tokenscripts/kconfig/lxdialog
21、/dialog.h:151: 错误:expected ) before * tokenscripts/kconfig/lxdialog/checklist.c:31: 错误:expected ) before * tokenscripts/kconfig/lxdialog/checklist.c:59: 错误:expected ) before * tokenscripts/kconfig/lxdialog/checklist.c:95: 错误:expected ) before * tokenscripts/kconfig/lxdialog/checklist.c: In function
22、dialog_checklist:scripts/kconfig/lxdialog/checklist.c:117: 错误:WINDOW 未声明 (在此函数内第一次使用)scripts/kconfig/lxdialog/checklist.c:117: 错误:(即使在一个函数内多次出现,每个未声明的标识符在其scripts/kconfig/lxdialog/checklist.c:117: 错误:所在的函数内只报告一次。)scripts/kconfig/lxdialog/checklist.c:117: 错误:dialog 未声明 (在此函数内第一次使用)scripts/kconfig/lxd
23、ialog/checklist.c:117: 错误:list 未声明 (在此函数内第一次使用)scripts/kconfig/lxdialog/checklist.c:117: 警告:逗号表达式的左操作数不起作用scripts/kconfig/lxdialog/checklist.c:121: 警告:隐式声明函数 endwinscripts/kconfig/lxdialog/checklist.c:122: 警告:隐式声明函数 fprintfscripts/kconfig/lxdialog/checklist.c:122: 警告:隐式声明与内建函数 fprintf 不兼容scripts/kco
24、nfig/lxdialog/checklist.c:122: 错误:stderr 未声明 (在此函数内第一次使用)scripts/kconfig/lxdialog/checklist.c:140: 错误:COLS 未声明 (在此函数内第一次使用)scripts/kconfig/lxdialog/checklist.c:141: 错误:LINES 未声明 (在此函数内第一次使用)scripts/kconfig/lxdialog/checklist.c:143: 警告:隐式声明函数 draw_shadowscripts/kconfig/lxdialog/checklist.c:143: 错误:st
25、dscr 未声明 (在此函数内第一次使用)scripts/kconfig/lxdialog/checklist.c:145: 警告:隐式声明函数 newwinscripts/kconfig/lxdialog/checklist.c:146: 警告:隐式声明函数 keypadscripts/kconfig/lxdialog/checklist.c:146: 错误:TRUE 未声明 (在此函数内第一次使用)scripts/kconfig/lxdialog/checklist.c:148: 警告:隐式声明函数 draw_boxscripts/kconfig/lxdialog/checklist.c:
26、148: 错误:attributes 未声明 (在此函数内第一次使用)scripts/kconfig/lxdialog/checklist.c:149: 警告:隐式声明函数 wattrsetscripts/kconfig/lxdialog/checklist.c:150: 警告:隐式声明函数 mvwaddchscripts/kconfig/lxdialog/checklist.c:152: 警告:隐式声明函数 waddchscripts/kconfig/lxdialog/checklist.c:156: 警告:隐式声明函数 print_titlescripts/kconfig/lxdialog
27、/checklist.c:159: 警告:隐式声明函数 print_autowrapscripts/kconfig/lxdialog/checklist.c:166: 警告:隐式声明函数 subwinscripts/kconfig/lxdialog/checklist.c:191: 警告:隐式声明函数 print_itemscripts/kconfig/lxdialog/checklist.c:197: 警告:隐式声明函数 print_arrowsscripts/kconfig/lxdialog/checklist.c:200: 警告:隐式声明函数 print_buttonsscripts/k
28、config/lxdialog/checklist.c:202: 警告:隐式声明函数 wnoutrefreshscripts/kconfig/lxdialog/checklist.c:204: 警告:隐式声明函数 doupdatescripts/kconfig/lxdialog/checklist.c:207: 警告:隐式声明函数 wgetchscripts/kconfig/lxdialog/checklist.c:214: 错误:KEY_UP 未声明 (在此函数内第一次使用)scripts/kconfig/lxdialog/checklist.c:214: 错误:KEY_DOWN 未声明 (
29、在此函数内第一次使用)scripts/kconfig/lxdialog/checklist.c:224: 错误:FALSE 未声明 (在此函数内第一次使用)scripts/kconfig/lxdialog/checklist.c:225: 警告:隐式声明函数 scrollokscripts/kconfig/lxdialog/checklist.c:226: 警告:隐式声明函数 wscrlscripts/kconfig/lxdialog/checklist.c:235: 警告:隐式声明函数 wrefreshscripts/kconfig/lxdialog/checklist.c:285: 警告:
30、隐式声明与内建函数 fprintf 不兼容scripts/kconfig/lxdialog/checklist.c:286: 警告:隐式声明函数 delwinscripts/kconfig/lxdialog/checklist.c:290: 错误:KEY_LEFT 未声明 (在此函数内第一次使用)scripts/kconfig/lxdialog/checklist.c:291: 错误:KEY_RIGHT 未声明 (在此函数内第一次使用)make2: * scripts/kconfig/lxdialog/checklist.o 错误 1make1: * menuconfig 错误 2make: * menuconfig 错误 2按照错误,我们需要安装软件包:ncurses-devel ,在第二光盘内找到安装上,报错解决再次执行:rootserver linux-2.6.18# make mrproperrootserver linux-2.6.18# make menuconfig我们可以看到已经能正常进入到内核编译选择项的界面了,接着我们可以开始进入内核编译的步骤了。按照无盘工作站的特点,设定内核编译选项,包括CPU
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1