一、实现过程

客户端通过网卡PXE启动-->连接到DHCP服务器-->获得IP地址-->客户端从TFTP服务器下载pxelinux.0,根据配置文件 (default)下载指定的vmlinuz,initrd-->启动系统内核,加载初始化镜像文件(加载参数是否有ks)-->安装初始化完成-->到 指定的位置(NFS|FTP|HTTP服务器上)下载软件包进行安装。

服务器端根据不同的设置,可实现RHEL的手动或自动安装,配置救援模式。还可用于同时安装其他版本的LINUX,如OPEN SUSE LINUX,UBUNTU,Fedora,CentOS等,服务器端配置略有不同。

这里测试的环境是在CentOS6.0上面搭建服务,PXE网络启动安装RHEL6.0的系统。本文比较了在RHEL5.x(适用于CentOS5.x)环境中搭建PXE无人职守安装服务器的差异,并进行了注解。

注:对于RHEL5.x(适用于CentOS5.x)以下称“5的版本”

 

二、配置步骤

1、最小化安装配置CentOS6.0系统;
2、安装配置TFTP;3、安装配置DHCP;
4、安装配置NFS或HTTP,FTP(ubuntu的安装源必须放在HTTP服务器下);
5、要实现自动安装,需配置KickStart;
6、要实现自动分配主机名,需要配置DNS。

三、具体实现 第一步:配置服务器静态IP。

CentOS6.0默认使用NetworkManager管理网络连接,这是一个Gnome环境的网络管理工具。最小化安装的系统并不会安装NetworkManager服务程序,所以在命令行中对ifcfg-eth0做如下修改,并重启网络服务。



[root@365linux ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE="eth0"
HWADDR="00:0C:29:AD:FE:AC"
NM_CONTROLLED="no"
ONBOOT="yes"
BOOTPROTO="static"
IPADDR="192.168.166.200"
NETMASK="255.255.255.0"
GATEWAY="192.168.166.254" 
 
[root@365linux ~]# service network restart



第二歩:安装所需的服务和软件包,通过 YUM 和RPM的安装方式都可以,这里以YUM为例。

1、安装tftp服务器端
2、安装dhcp服务器
3、安装nfs服务器
4、安装syslinux

5、安装网络引导目录相关文件system-config-netboot(可选,但装了方便配置很多。经测试RHEL6包括CentOS6已经移 除了system-config-netboot软件包,红帽建议使用Cobbler和Red Hat Satellite,当然后者是要付费的。)

安装使用的命令如下:



[root@365linux ~]# yum install -y tftp-server
[root@365linux ~]# yum install -y dhcp
[root@365linux ~]# yum install -y nfs-utils rpcbind    //注:rpcbind是端口地图服务,在5的版本里面被称作portmap
[root@365linux ~]# yum install -y syslinux



第三歩:配置相关的服务

——————DHCP的配置————————



[root@365linux ~]# cat /usr/share/doc/dhcp-4.1.1/dhcpd.conf.sample /etc/dhcp/dhcpd.conf 
 
[root@365linux ~]# vim /etc/dhcp/dhcpd.conf
option domain-name "365linux.com";     //搜索域;
option domain-name-servers 192.168.166.200, 202.96.128.86;   //指定DNS服务器地址;
default-lease-time 600;              //租约时间;
max-lease-time 7200;
log-facility local7;             //日志方式;
subnet 192.168.166.0 netmask 255.255.255.0 {         //网段,要与dhcpd监听的网卡处在同一网段;
  range dynamic-bootp 192.168.166.1 192.168.166.253;    //分配IP地址范围;
  option routers 192.168.166.254;     //指定客户端路由;
  filename "linux-install/pxelinux.0";    //pxe启动引导文件,放置在tftp的根目录下,使用相对路径;
  server-name "192.168.166.200";       //网络引导服务器的IP,也可以使用next-server。
}



——————TFTP的配置————————



[root@365linux ~]# vim /etc/xinetd.d/tftp
disable                 = no   //修改yes为no,xinetd超级守护进程启动时即启动被托管的tftp服务器。



注:值得一提的是,在5的版本中,tftp服务器的根目录为/tftpboot,而在6的版本中为/var/lib/tftpboot/。

——————NFS的配置————————


[root@365linux ~]# mkdir -p /systemiso/rhel6
[root@365linux ~]# vim /etc/exports
/systemiso/rhel6 *(ro,sync)



NFS 共享目录,将要安装的系统ISO镜像放在此目录下。所有网段内的主机只读访问,光盘镜像就放到这里来,NFS方式在局域网内最方便速度最快,而且不用将系统ISO解开。

注意:如果是RHEL6(CentOS6)的版本,即使不解开ISO,也需要将镜像中的images目录提取出来放到NFS镜像目录。

第四歩:创建tftp目录下引导文件

在5的版本中,如果安装了system-config-netboot,那么在/tftpboot的目录下自动生成一个linux-install文件夹,我们将所有的文件统一放到这个目录下面,以便需要提供多个系统安装时方便管理。

在RHEL6版本里没有该软件包,我们只能手动一步步建立需要的目录跟文件了。



[root@365linux ~]# mkdir /var/lib/tftpboot/linux-install/



创建PXE工作的根目录,在DHCP服务器中定义过,保持目录名一致。



[root@365linux ~]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/linux-install/



注:5版本里面路径是/usr/lib/syslinux/pxelinux.0
复制PXE网络引导程序到工作目录。该程序有syslinux软件包提供,理论上光盘中的isolinux/isolinux.bin也可以。



[root@365linux ~]# mount -o loop /dev/cdrom /mnt



挂载光盘到系统目录,我们需要几个系统安装引导的文件。



[root@365linux ~]# mkdir /var/lib/tftpboot/linux-install/pxelinux.cfg
[root@365linux ~]# cp /mnt/isolinux/isolinux.cfg /var/lib/tftpboot/linux-install/pxelinux.cfg/default



从光盘中复制启动引导配置菜单到工作目录的下的pxelinux.cfg目录下。稍后根据要引导安装的系统修改菜单的内容。



[root@365linux ~]# cp /mnt/isolinux/boot.msg /var/lib/tftpboot/linux-install/pxelinux.cfg/



一个字符终端界面的背景图,可以写一些提示上去。5版本主要靠这个文件实现都系统引导的提示。



[root@365linux ~]# cp /mnt/isolinux/vesamenu.c32  /var/lib/tftpboot/linux-install/pxelinux.cfg/



如果你想使用RHEL6版本支持的的图形菜单的话,需要这个文件。



[root@365linux ~]# cp /root/gdlc_splash.jpg /var/lib/tftpboot/linux-install/pxelinux.cfg/



为启动菜单创建一个背景图,我这里是定制的,大小为640×480像素的jpg图片,你可以使用默认的。

第五歩:提取准备安装的系统的安装引导内核文件



[root@365linux ~]# mkdir /var/lib/tftpboot/linux-install/rhel6
[root@365linux ~]# umount /mnt
[root@365linux ~]# mount -o loop /systemiso/rhel6/rhel-server-6.0-i386-dvd.iso  /mnt
[root@365linux mnt]# cd /mnt/images/pxeboot/
[root@365linux isolinux]# cp vmlinuz initrd.img /var/lib/tftpboot/linux-install/rhel6/



从RHEL6的光盘中提取内核vmlinuz和驱动镜像initrd.img到安装工作目录下的RHEL6子目录。

第六步:针对性的修改default文件,形成菜单。



[root@365linux ~]# vim /var/lib/tftpboot/linux-install/pxelinux.cfg/default
default pxelinux.cfg/vesamenu.c32    //默认使用图形菜单,注意这个文件的相对路径;
prompt 1   //不使用图形菜单,而是用boot.msg定义的菜单时,要启用该项;
timeout 600 //等待时间60秒
display pxelinux.cfg/boot.msg  //文本背景模式;
menu background pxelinux.cfg/gdlc_splash.jpg  //图形背景模式;
menu title Welcome to gdlc installation system!  //菜单标题;
menu color border 0 #ffffffff #00000000  //颜色定义;
menu color sel 7 #ffffffff #ff000000
menu color title 0 #ffffffff #00000000
menu color tabmsg 0 #ffffffff #00000000
menu color unsel 0 #ffffffff #00000000
menu color hotsel 0 #ff000000 #ffffffff
menu color hotkey 7 #ffffffff #ff000000
menu color scrollbar 0 #ffffffff #00000000
label rhel6  //菜单选项,这里有两个,安装RHEL6和从本地启动。  
menu label ^Install or upgrade RHEL6 X86  
kernel rhel6/vmlinuz  
append initrd=rhel6/initrd.img
label local  
menu label Boot from ^local drive  
menu default    //60秒后默认加载的选项。  
localboot 0xffff   //启动本地系统。



第七步:启动所有服务


[root@365linux ~]# service dhcpd restart
[root@365linux ~]# service xinetd restart
[root@365linux ~]# /etc/init.d/rpcbind restart
[root@365linux ~]# /etc/init.d/nfs restart 
 
[root@365linux ~]# chkconfig dhcpd on
[root@365linux ~]# chkconfig xinetd on
[root@365linux ~]# chkconfig rpcbind on
[root@365linux ~]# chkconfig nfs on



 



进入后选择nfs



server-name填服务器的IP地址



路径填/systemiso/rhel6