Linux无盘工作站搭建.docx
《Linux无盘工作站搭建.docx》由会员分享,可在线阅读,更多相关《Linux无盘工作站搭建.docx(17页珍藏版)》请在冰豆网上搜索。
Linux无盘工作站搭建
Linux无盘工作站
网络环境构建说明书
脉山龙股份公司
1无盘工作站及其原理
1.1无盘工作站
无盘工作站是没有硬盘的计算机终端。
它本身不含有硬存储设备,机器引导时需要借助网络上的服务器来传输操作系统启动文件到本地内存,才可以完成启动。
因此,无盘工作站必须具有CPU、主板、内存、网卡和远程启动设备。
远程启动设备主要以芯片的形式固化或接插在网卡上,在系统启动时负责连接服务器,获取IP地址,指导服务器上的操作系统启动文件到本地内存的传输。
目前,远程启动芯片主要有RPL和PXE两种,后者为前者的升级版,目前正在被广泛使用。
1.2PXE芯片启动原理
PXE芯片在远程启动时,首先要进行一个DHCP会话过程来获取一个IP地址和相关信息,以便进行后续的文件传送;IP地址获取成功后,PXE芯片触发TFTP会话过程,根据DHCP过程获取的相关信息向服务器请求启动文件,服务器接到请求后,根据本地策略,发送相应的启动文件,工作站接收到启动文件后,开始本地启动过程。
以上是PXE芯片无盘工作站启动过程的简单描述,DHCP协议的相关内容可参考RFC2131标准化文档,TFTP协议的相关内容可参考RFC1350标准化文档。
对于Linux操作系统来说,PXE所需要下载的启动文件是配置文件和内核文件。
其中,配置文件在DHCP应答报文中包含,通过TFTP会话过程获取;内核文件的名称和位置在配置文件中给出,同样需要通过TFTP会话过程获取;内核文件获取成功后,系统开始进行本地启动,当启动过程进行到需要装载文件系统时,PXE会根据配置文件,向服务器请求连接根文件系统(该文件系统为NFS网络根文件系统)所对应的服务器目录,若成功,则启动结束。
下页图1-1给出了这一过程的交互模型。
Linux无盘工作站的详细启动流程如下:
Step1工作站加电,PXE芯片进行自检;
Step2准备启动,PXE芯片发送DHCP请求;
Step3服务器收到工作站送出的请求,发送DHCP应答,内容包括客户端的IP地址,预设网关,DNS服务器及开机映象文件(配置文件和内核)位置;
Step4工作站上的PXE芯片根据配置文件位置,开始TFTP会话请求下载该文件;
Step5加载映象文件,开始本地启动,挂载NFS网络根文件系统;
Step6出现Login行,启动成功。
图1-1PXE芯片启动过程中的网络交互
1.3配置过程概述
根据上面的叙述不难得知,配置无盘工作网络环境的核心工作在于无盘网络文件服务器的配置,而文件服务器的配置又是由DHCP、TFTP等几个部分组成的。
因此不难得知,配置Linux无盘工作站的网络环境,依次需要完成以下工作:
(1)选择并安装无盘网络文件服务器上的Linux操作系统;
(2)配置该操作系统的基本网络环境;
(3)配置DHCP服务器;
(4)配置TFTP服务器;
(5)为工作站创建工作目录、配置文件和内核文件;
(6)为工作站构建合理的、标准化的Linux文件系统;
(7)启动工作站,进行必要的调试。
2详细配置说明
2.1操作系统的选择和安装
首先,要为服务器选择一个适用于无盘工作站网络环境的操作系统。
这个操作系统应该具有网络功能强大,处理速度优化,稳定性高等特点。
在选择操作系统时,切忌选择具有服务器版本的PC机系统,而是要选择专门为服务器和大机器应用而开发的网络操作系统。
经过考虑,本次配置决定选择RedHatEnterpriseLinuxAdvancedServer4(RHAS4)操作系统,该系统是RedHat公司专门为企业服务器所设计的操作系统,其内核版本高低适中,稳定性好,网络功能十分强大,贴近标准Linux,易于操作和管理。
2.2基本网络环境配置
构建最基本的网络环境是任何网络服务器都必须做好的事情。
这一部分的内容包括配置IP地址、子网掩码、主机名称和DNS服务器等内容,如果使用拨号或虚拟拨号网络,还应该配置相应的Modem和PPP协议支持。
这部分操作在RHAS4中十分简单,只需在桌面环境下的最顶部依次选择“应用程序”—“系统设置”—“网络”,即可按照提示完成,如果未安装桌面环境,则使用ifconfig命令配置即可。
2.3配置DHCP服务
DHCP服务需要对/etc/dhcpd.conf文件进行配置,将这个文件用vi或gedit打开就可以进行配置了。
在命令行中输入vi/etc/dhcpd.conf或者gedit/etc/dhcpd.conf,将以下内容按括号中的说明修改后粘贴进去,保存退出即可。
(开头有#的行为注释行,不必粘贴)
---------------------------------------------------------------------------------------------------------------
下面是我个人的dhcpd.conf配置文件实例:
[root@server~]#cat/etc/dhcpd.conf
ddns-update-styleinterim;
ignoreclient-updates;
allowbootp;
allowbooting;
subnet192.168.1.0netmask255.255.255.0{
#---defaultgateway
optionrouters192.168.1.5;
optionsubnet-mask255.255.255.0;
#optionnis-domain"domain.org";
#optiondomain-name"domain.org";
optiondomain-name-servers192.168.1.5;
#optiontime-offset-18000;#EasternStandardTime
#optionntp-servers192.168.1.5;
#optionnetbios-name-servers192.168.1.5;
#---Selectspoint-to-pointnode(defaultishybrid).Don'tchangethisunless
#--youunderstandNetbiosverywell
#optionnetbios-node-type2;
rangedynamic-bootp192.168.1.128192.168.1.249;
default-lease-time21600;
max-lease-time43200;
server-name"server";
next-server192.168.1.5;
#wewantthenameservertoappearatafixedaddress
hostc1{
server-name"server";
next-server192.168.1.5;
hardwareethernet00:
0c:
29:
ff:
b3:
22;
fixed-address192.168.1.128;
filename"/tftpboot/pxelinux.0";
optionroot-path"tftpboot/192.168.1.128";
}
}
#(若还有其他机器,则按这种方法继续进行配置hostc2…)
DHCP服务随开机系统启动,dhcpd服务启动,可以用命令:
chkconfig–level345dhcpdon
2.4配置TFTP服务
TFTP服务需要在/etc/xinetd.d中进行注册性配置,将这个文件用vi或gedit打开就可以进行配置了。
在命令行中输入vi/etc/xinetd.conf或者gedit/etc/xinetd.conf,将以下内容追加到文件末尾,保存退出即可。
includedir/etc/xinetd.d
servicetftp
{
socket_type=dgram
protocol=udp
wait=yes
user=root
server=/usr/sbin/in.tftpd
}
让系统启动自动加载tftp服务:
在"etc\xinetd.d\tftp"中的'disable=yes'改成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
注:
内核源代码包获取分两种情况,第一种是通过在系统安装光盘中获得当前系统的内核源码,这种内核包的格式多数是rpm的;第二种是通过在www.kernel.org获得更高版本的内核源码,这种内核包的格式多数是tar.gz的;我们现在来讨论第二种方法,从htttp:
//www.at.kernel.org/pub/linux/kernel/v2.6/linux-2.6.18.tar.gz
大家刚才看到的这个52M的软件包就是内核源码包,使用tarzxvflinux-2.6.18.tar.gz来解压缩出来,如果成功,该包会安装在/usr/src目录下,产生一个linux-2.6.18的文件夹,里面就是内核源码的内容
内核下载完成后,依次在终端中执行如下命令:
Cplinux-2.6.18.tar.gz/usr/src
cd/usr/src
tarzxvflinux-2.6.18.tar.gz
cdlinux-2.6.18
在编译执行之前,需要系统的一些底层环境的支持,也就是说需要事前在系统中具备和安装相应的软件包。
否则无法正常进入编译内核包界面,或者安装内核包之后,会在下一步操作中提示出错。
这些软件包括:
gccncursesmakedev86glibc-kernheadercppbinutils,注明:
glibc-kernheader软件包可能没有,我们需要找安装的软件为:
glibc-headers-2.5-34.i386.rpm;
kernel-headers-2.6.18-8.1.3.lspp.81.el5.i386.rpm来安装,检查软件是否安装——使用rpm-qa|greppackagename命令就行
下面是本人在实验当中编译开始前的报错及解决过程:
[root@serverlinux-2.6.18]#makemrproper
[root@serverlinux-2.6.18]#makemenuconfig
HOSTCCscripts/basic/fixdep
在包含自/usr/include/features.h:
352的文件中,
从/usr/include/sys/types.h:
27,
从scripts/basic/fixdep.c:
105:
/usr/include/gnu/stubs.h:
7:
27:
错误:
gnu/stubs-32.h:
没有那个文件或目录
make[1]:
***[scripts/basic/fixdep]错误1
make:
***[scripts_basic]错误2
报错,需要安装软件包glibc-devel,在第二光盘里找安装上解决
再次执行:
[root@serverlinux-2.6.18]#makemrproper
[root@serverlinux-2.6.18]#makemenuconfig
报错为:
[root@serverlinux-2.6.18]#makemenuconfig
HOSTCCscripts/basic/fixdep
HOSTCCscripts/basic/docproc
HOSTCCscripts/kconfig/conf.o
HOSTCCscripts/kconfig/kxgettext.o
HOSTCCscripts/kconfig/mconf.o
SHIPPEDscripts/kconfig/zconf.tab.c
SHIPPEDscripts/kconfig/lex.zconf.c
SHIPPEDscripts/kconfig/zconf.hash.c
HOSTCCscripts/kconfig/zconf.tab.o
HOSTLDscripts/kconfig/mconf
HOSTCCscripts/kconfig/lxdialog/checklist.o
在包含自scripts/kconfig/lxdialog/checklist.c:
24的文件中:
scripts/kconfig/lxdialog/dialog.h:
31:
20:
错误:
curses.h:
没有那个文件或目录
Infileincludedfromscripts/kconfig/lxdialog/checklist.c:
24:
scripts/kconfig/lxdialog/dialog.h:
128:
错误:
expected‘=’,‘,’,‘;’,‘asm’or‘__attribute__’before‘use_colors’
scripts/kconfig/lxdialog/dialog.h:
129:
错误:
expected‘=’,‘,’,‘;’,‘asm’or‘__attribute__’before‘use_shadow’
scripts/kconfig/lxdialog/dialog.h:
131:
错误:
expected‘=’,‘,’,‘;’,‘asm’or‘__attribute__’before‘attributes’
scripts/kconfig/lxdialog/dialog.h:
143:
错误:
expected‘)’before‘*’token
scripts/kconfig/lxdialog/dialog.h:
146:
错误:
expected‘)’before‘*’token
scripts/kconfig/lxdialog/dialog.h:
147:
错误:
expected‘)’before‘*’token
scripts/kconfig/lxdialog/dialog.h:
148:
错误:
expected‘)’before‘*’token
scripts/kconfig/lxdialog/dialog.h:
149:
错误:
expected‘)’before‘*’token
scripts/kconfig/lxdialog/dialog.h:
151:
错误:
expected‘)’before‘*’token
scripts/kconfig/lxdialog/checklist.c:
31:
错误:
expected‘)’before‘*’token
scripts/kconfig/lxdialog/checklist.c:
59:
错误:
expected‘)’before‘*’token
scripts/kconfig/lxdialog/checklist.c:
95:
错误:
expected‘)’before‘*’token
scripts/kconfig/lxdialog/checklist.c:
Infunction‘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/lxdialog/checklist.c:
117:
错误:
‘list’未声明(在此函数内第一次使用)
scripts/kconfig/lxdialog/checklist.c:
117:
警告:
逗号表达式的左操作数不起作用
scripts/kconfig/lxdialog/checklist.c:
121:
警告:
隐式声明函数‘endwin’
scripts/kconfig/lxdialog/checklist.c:
122:
警告:
隐式声明函数‘fprintf’
scripts/kconfig/lxdialog/checklist.c:
122:
警告:
隐式声明与内建函数‘fprintf’不兼容
scripts/kconfig/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_shadow’
scripts/kconfig/lxdialog/checklist.c:
143:
错误:
‘stdscr’未声明(在此函数内第一次使用)
scripts/kconfig/lxdialog/checklist.c:
145:
警告:
隐式声明函数‘newwin’
scripts/kconfig/lxdialog/checklist.c:
146:
警告:
隐式声明函数‘keypad’
scripts/kconfig/lxdialog/checklist.c:
146:
错误:
‘TRUE’未声明(在此函数内第一次使用)
scripts/kconfig/lxdialog/checklist.c:
148:
警告:
隐式声明函数‘draw_box’
scripts/kconfig/lxdialog/checklist.c:
148:
错误:
‘attributes’未声明(在此函数内第一次使用)
scripts/kconfig/lxdialog/checklist.c:
149:
警告:
隐式声明函数‘wattrset’
scripts/kconfig/lxdialog/checklist.c:
150:
警告:
隐式声明函数‘mvwaddch’
scripts/kconfig/lxdialog/checklist.c:
152:
警告:
隐式声明函数‘waddch’
scripts/kconfig/lxdialog/checklist.c:
156:
警告:
隐式声明函数‘print_title’
scripts/kconfig/lxdialog/checklist.c:
159:
警告:
隐式声明函数‘print_autowrap’
scripts/kconfig/lxdialog/checklist.c:
166:
警告:
隐式声明函数‘subwin’
scripts/kconfig/lxdialog/checklist.c:
191:
警告:
隐式声明函数‘print_item’
scripts/kconfig/lxdialog/checklist.c:
197:
警告:
隐式声明函数‘print_arrows’
scripts/kconfig/lxdialog/checklist.c:
200:
警告:
隐式声明函数‘print_buttons’
scripts/kconfig/lxdialog/checklist.c:
202:
警告:
隐式声明函数‘wnoutrefresh’
scripts/kconfig/lxdialog/checklist.c:
204:
警告:
隐式声明函数‘doupdate’
scripts/kconfig/lxdialog/checklist.c:
207:
警告:
隐式声明函数‘wgetch’
scripts/kconfig/lxdialog/checklist.c:
214:
错误:
‘KEY_UP’未声明(在此函数内第一次使用)
scripts/kconfig/lxdialog/checklist.c:
214:
错误:
‘KEY_DOWN’未声明(在此函数内第一次使用)
scripts/kconfig/lxdialog/checklist.c:
224:
错误:
‘FALSE’未声明(在此函数内第一次使用)
scripts/kconfig/lxdialog/checklist.c:
225:
警告:
隐式声明函数‘scrollok’
scripts/kconfig/lxdialog/checklist.c:
226:
警告:
隐式声明函数‘wscrl’
scripts/kconfig/lxdialog/checklist.c:
235:
警告:
隐式声明函数‘wrefresh’
scripts/kconfig/lxdialog/checklist.c:
285:
警告:
隐式声明与内建函数‘fprintf’不兼容
scripts/kconfig/lxdialog/checklist.c:
286:
警告:
隐式声明函数‘delwin’
scripts/kconfig/lxdialog/checklist.c:
290:
错误:
‘KEY_LEFT’未声明(在此函数内第一次使用)
scripts/kconfig/lxdialog/checklist.c:
291:
错误:
‘KEY_RIGHT’未声明(在此函数内第一次使用)
make[2]:
***[scripts/kconfig/lxdialog/checklist.o]错误1
make[1]:
***[menuconfig]错误2
make:
***[menuconfig]错误2
按照错误,我们需要安装软件包:
ncurses-devel,在第二光盘内找到安装上,报错解决
再次执行:
[root@serverlinux-2.6.18]#makemrproper
[root@serverlinux-2.6.18]#makemenuconfig
我们可以看到已经能正常进入到内核编译选择项的界面了,接着我们可以开始进入内核编译的步骤了。
按照无盘工作站的特点,设定内核编译选项,包括CPU