网上有很多的关于PXE无人值守安装linux系统,对此我也写过一些东西,对其中的流程·原理有较详细的介绍,这篇我是网上看到的一位好心网友给分享的一篇,写的也很不错,在这我也分享给各大网友,相互学习,相互勉励!

一、DHCP服务的配置

首先安装软件:yum -y install dhcp
修改主配置文件
# vim /etc/dhcpd.conf
ddns-update-style interim;
ignore client-updates;
allow booting;   //定义能够PXE启动
allow bootp;   // 定义支持bootp
next-server 192.168.175.133; //tftp 服务器ip地址
filename "pxelinux.0";    //pxe启动文件位置
subnet 192.168.175.0 netmask 255.255.255.0 {
option routers                  192.168.175.2;    //默认网关
option subnet-mask              255.255.255.0;    //子网掩码
range dynamic-bootp 192.168.175.10 192.168.175.254;    //地址池范围
default-lease-time 21600;
max-lease-time 43200;
}
# chkconfig dhcpd on   //开机自动启动
然后重启DHCP服务
#service dhcpd restart
二、tftp服务的配置
必要的软件:yum –y install tftp-server
修改配置文件
vim /etc/xinetd.d/tftp
将disable一项改为no如下:
service tftp
{
socket_type             = dgram
protocol                = udp
wait                    = yes
user                    = root
server                  = /usr/sbin/in.tftpd
server_args             = -s /tftpboot
disable                 = no
per_source              = 11
cps                     = 100 2
flags                   = IPv4
}
# chkconfig xinetd on   //开机自动启动
启动tftp服务
#service xinetd start
三、PXE引导配置(bootstrap)
创建tftp目录
#mkdir /tftpboot
cp /usr/lib/syslinux/pxelinux.0 /tftpboot/
将光盘镜像里的相关组件拷到相应的目录里
# cp /dev/cdrom/p_w_picpaths/pxeboot/{vmlinuz,initrd.img} /tftpboot/
接下来创建/tftpboot/pxelinux.cfg/ 目录,该目录用于存放客户端的配置文件。
# mkdir /tftpboot/pxelinux.cfg
将光盘中的 '''isolinux/isolinux.cfg''' 文件复制为  '''/tftpboot/pxelinux.cfg/default'''
cp /dev/cdrom/isolinux/isolinux.cfg /tftpboot/pxelinux.cfg/default
编辑default文件
#vim /tftpboot/pxelinux.cfg/default
# 默认启动的是 'label linux' 中标记的启动内核
default linux
# 显示 'boot: ' 提示符。为 '0' 时则不提示,将会直接启动 'default' 参数中指定的内容。
prompt 1
# 在用户输入之前的超时时间,单位为 1/10 秒。
timeout 60
#显示某个文件的内容,注意文件的路径。默认是在 /tftpboot 目录下。也可以指定位类似  'install/rhel4.4-inst/boot.msg' 这样的,路径+文件名。
display boot.msg
F1 boot.msg #按下 'F1' 这样的键后显示的文件。注意路径。默认是 /tftpboot。注:syslinux 官方网站上说目前只能使用  F1-F10。
F2 options.msg
F3 general.msg
F4 param.msg
F5 rescue.msg
# 'label' 指定你在 'boot:' 提示符下输入的关键字。
# 比如:
# boot: linux[ENTER]
# 这个会启动 'label linux' 下标记的 kernel 和 initrd.img 文件。
# 这里还定义了其它几个关键字:
# boot: text
# boot: ks
# kernel 参数指定要启动的内核。同样要注意路径,默认是 /tftpboot 目录。
# append 指定追加给内核的参数,能够在 gurb 里使用的追加给内核的参数,在这里也都可以使用。
# 使用 kickstart 安装。
# 可以在 ks 参数后直接指定 kickstart 文件的位置。
label linux
kernel vmlinuz
append ks=nfs:192.168.175.1:/mnt/install/ks.cfg initrd=initrd.img
label text
kernel vmlinuz
append initrd=initrd.img text
label ks
kernel vmlinuz
append ks initrd=initrd.img
… …
四、配置NFS服务
安装介质存储在服务器上的一个目录中,可以使用各种网络协议访问它,这里使用 NFS  服务来提供安装介质,只需要将系统光盘内容拷贝放到共享目录下即可。创建共享目录,并将光盘内容拷贝到共享目录中:
#mkdir /iso/install
然后将光盘镜像上传至/iso/install 下
配置共享
# vim /etc/exports
/iso *(ro,sync)
重启服务使配置生效。
service portmap restart
service nfs start
检查目录/mnt/install是否被正确共享:
shoumount –e
# chkconfig --level 35 nfs on
五、配置Kickstart
通常,我们在安装操作系统的过程需要大量的人机交互过程,减少交互过程,为了提高安装效率Red Hat Linux 开始支持一个称为 kickstart  的功能。使用这种方法,只需事先定义好一个Kickstart自动应答配置文件(通常存放在安装服务器上),并让安装程序知道该配置文件的位置,在安装过程中安装程序就可以自己从该文件中读取安装配置,这样就避免了繁琐的人机交互,实现无人值守的自动化安装。
我们可以通过多种方法生成Kickstart配置文件,无论使用哪种方法无非就是创建一个应答文件,当你安装好一台Red Hat Linux机器,Red  Hat Linux 安装程序都会创建一个 kickstart  配置文件,记录你的真实安装配置。如果你希望实现和某系统类似的安装,可以基于该系统的kickstart配置文件来生成你自己的kickstart配置文件。  该文件位于/root/anaconda-ks.cfg。
这里我贴出我的配置:
#vim /iso/ks.cfg
# Kickstart file automatically generated by anaconda.
text                                        //文本模式安装
nfs --server=192.168.175.133 --dir=/iso/iso   //指定到服务器192.168.175.133的NFS共享目录/iso/iso下寻找安装介质
key --skip     //跳过密钥输入
lang en_US.UTF-8
keyboard us
#xconfig --startxonboot
network --device eth0 --bootproto dhcp   //设置网卡的模式为DHCP
rootpw --iscrypted $1$Ebukjmti$kfUXk5k5V8XnTLXwpMkjT/
firewall --disabled         //设置防火墙状态为不可用
authconfig --enableshadow --enablemd5
selinux --permissive      //SElinux状态为关闭
timezone --utc Asia/Shanghai
bootloader --location=mbr --driveorder=sda --append="rhgb quiet"
# The following is the partition information you requested
# Note that any partitions you deleted are not expressed
# here so unless you clear all partitions first, this is
# not guaranteed to work
zerombr
clearpart --all --initlabel
part /boot --fstype ext3 --size=100
part pv.7 --size=100000
volgroup vol0 pv.7
logvol /home --fstype ext3 --name=home --vgname=vol0 --size=4096
logvol /var --fstype ext3 --name=var --vgname=vol0 --size=20480
logvol / --fstype ext3 --name=root --vgname=vol0 --size=51200
logvol swap --fstype swap --name=swap --vgname=vol0 --size=1024
reboot
%packages
#@admin-tools
@base
@chinese-support
@core
#@development-libs
#@development-tools
@editors
@gnome-desktop
#@graphical-internet
#@java
#@legacy-software-development
#@legacy-software-support
#@printing
#@system-tools
@text-internet
@base-x
createrepo
dstat
xorg-x11-utils
dialog
-Deployment_Guide-zh-CN
-Deployment_Guide-zh-TW
%post
mkdir -v /media/cdrom &> /dev/null
mkdir -v /media/floppy &> /dev/null
sed -i 's/^id:5:initdefault:$/id:3:initdefault:/' /etc/inittab  &>/dev/null   //设置默认启动界面为命令行模式
cat >> /root/.bashrc << "EOF"
#设置命令别名,可根据自己的习惯设置
# My specific aliases
alias mntcd='mount /dev/cdrom /media/cdrom'
alias cdr='cd /media/cdrom'
alias cds='cd /usr/src'
alias cdls='cd /usr/local/src'
alias yin='yum install'
EOF
#创建yum配置文件
cat >> /etc/yum.repos.d/media.repo << "EOF"
# repos on instructor for cla***oom use
# Main rhel5 server
[base]
name=Cla***oom Server Repository
baseurl=file:///media/cdrom/Server
gpgcheck=0
# This one is needed for xen packages
[VT]
name=VT Repository
baseurl=file:///media/cdrom/VT
gpgcheck=0
# This one is needed for clustering packages
[Cluster]
name=Cluster Repository
baseurl=file:///media/cdrom/Cluster
gpgcheck=0
# This one is needed for cluster storage (GFS, iSCSI target, etc...)  packages
[ClusterStorage]
name=ClusterStorage Repository
baseurl=file:///media/cdrom/ClusterStorage
gpgcheck=0
EOF
#设置开机欢迎信息
echo "Welcome to Red Hat Linux learning cla***oom!" >>  /etc/issue
echo -e "Please login as 'root' with password 'redhat'.\n" >>  /etc/issue
useradd redhat &> /root/postinstall.log
注意:关闭服务器端防火墙和SELINUX
最后设置客户端BIOS选择从网卡启动。具体方法因BIOS版本不同而异。 网卡中的PXE代码会联系DHCP服务器来获取IP地址以及启动镜像,然后启动镜像被载入并运行。
好了 至此PXE无人值守网络安装RedHat Linux操作系统 制作完成。