PXE(preboot execute environment,预启动执行环境)是由Intel公司开发的最新技术,工作于Client/Server的网络模式,支持工作站通过网络从远端服务器下载映像,并由此支持通过网络启动操作系统,在启动过程中,终端要求服务器分配IP地址,再用TFTP(trivial file transfer protocol)或MTFTP(multicast trivial file transfer protocol)协议下载一个启动软件包到本机内存中执行,由这个启动软件包完成终端(客户?)基本软件设置,从而引导预先安装在服务器中的终端操作系统。
下面是我在linux上配的PXE服务,纯脚本,可以直接复制成文本pxe.sh,在系统执行即可。
#################################脚本开始####################################
########执行脚本前,确定linux系统上已经配置好了yum服务,否则执行脚本会报错##########
###############我是把脚本放在/root下执行的,实际位置对脚本没有什么影响#############
#安装BIND包,即DNS服务
yum -y install bind bind-chroot
#生成BIND key
rndc-confgen -r /dev/urandom -a
#查看状态
#rndc status
#cat /etc/rndc.key
#ls -l /etc/rndc.key
#属主、属组,或者说是权限调整
chown named:named /etc/rndc.key
chmod 644 /etc/rndc.key
#rndc status
#/etc/init.d/named start
#修改主配置文件,RHEL6之后BIND配置与RHEL5有较大不同
sed -i 's/127.0.0.1/any/g' /etc/named.conf
#备份原区域配置文件
mv /etc/named.rfc1912.zones /etc/named.rfc1912.zones.bak
#编写区域配置文件
echo 'zone "pxe.com" IN {
type master;
file "pxe.zone";
};
zone "90.168.192.in-addr.arpa" IN {
type master;
file "90.168.192.zone";
};' > /etc/named.rfc1912.zones
#主、区域配置文件的属主、属组,即权限
cd /etc
chown named:named named.conf named.rfc1912.zones
#编写区域文件库
#正向解析文件,111.111.111.111是测试地址,测试时注意修改/etc/resolv.conf
echo '$TTL 3600
@ IN SOA @ root.pxe.com.(
2014062500
28800
14400
17200
86400)
NS @
A 127.0.0.1
www A 111.111.111.111
$GENERATE 100-200 pc$ IN A 172.16.90.$' > /var/named/pxe.zone
#反向解析文件
#这里的@表示:90.168.192.in-addr.arpa 。与RHEL5有较大不同,注意。
echo '$TTL 3600
@ IN SOA @ root.pxe.com.(
2014062500
28800
14400
17200
86400)
NS @
A 127.0.0.1
199 PTR www.pxe.com.
$GENERATE 100-200 $ IN PTR pc$.pxe.com.' > /var/named/90.168.192.zone
#修改属主、属组
cd /var/named
chown named:named pxe.zone 90.168.192.zone
#安装DHCP服务,这里我自己定义了网卡信息,可以根据实际情况进行修改
#修改时要和BIND文件里相对应,否则会出错,网卡也可以自己定义
echo '请保证服务器有一个静态的IP地址'
read -p '键入yes系统将自动配置IP相关信息,键入no退出:' flag
if [ $flag == 'yes' or 'y' ];then
echo 'continue'
else
if [ $flag == 'no' or 'n' ];then
exit
fi
fi
yum -y install dhcp
sed -ri 's/^IPADDR/d' /etc/sysconfig/network-scripts/ifcfg-eth1
sed -ri 's/^NETMASK/d' /etc/sysconfig/network-scripts/ifcfg-eth1
sed -ri 's/^GATEWAY/d' /etc/sysconfig/network-scripts/ifcfg-eth1
sed -ri 's/^DNS/d' /etc/sysconfig/network-scripts/ifcfg-eth1
echo 'IPADDR=172.16.90.222
NETMASK=255.255.255.0
GATEWAY=172.16.90.1' >> /etc/sysconfig/network-scripts/ifcfg-eth1
sed -ri 's/(ONBOOT=)(no)/\1yes/g' /etc/sysconfig/network-scripts/ifcfg-eth1
sed -ri 's/(NM_CONTROLLED=)(yes)/\1no/g' /etc/sysconfig/network-scripts/ifcfg-eth1
sed -ri 's/(BOOTPROTO=)(.*)/\1static/g' /etc/sysconfig/network-scripts/ifcfg-eth1
#next-server指TFTP服务地址,一般就是本机(PXE服务器)
#pxelinux.0网卡引导文件
#修改网段信息时,注意和BIND文件中的地址及反向区域解析文件名保持一致
echo 'ddns-update-style interim;
ignore client-updates;
subnet 172.16.90.0 netmask 255.255.255.0 {
option routers 172.16.90.1;
option subnet-mask 255.255.255.0;
option domain-name "pxe.com";
option domain-name-servers 172.16.90.1;
option time-offset -18000;
range dynamic-bootp 172.16.90.100 172.16.90.200;
default-lease-time 21600;
max-lease-time 43200;
next-server 172.16.90.222;
filename "pxelinux.0";
}' > /etc/dhcp/dhcpd.conf
#安装TFTP服务
yum -y install tftp-server
yum -y install syslinux
mkdir -p /tftpboot/pxelinux.cfg
#这里一定要把要安装系统的ISO镜像文件挂载上,否则无法安装
umount /dev/cdrom
mount /dev/cdrom /media
#拷贝系统内核
cp /media/isolinux/vmlinuz /tftpboot
#拷贝内核镜像
cp /media/isolinux/initrd.img /tftpboot
#拷贝网卡引导文件
cp /usr/share/syslinux/pxelinux.0 /tftpboot
#修改TFTP配置文件,更改根目录以及打开xinetd.d服务托管
sed -ri '13s#(.*)(=)( )(.*)#\1\2\3-s /tftpboot#g' /etc/xinetd.d/tftp
sed -ri '14s/(.*)(=)( )yes/\1\2\3no/g' /etc/xinetd.d/tftp
#编写引导操作系统的Default文件
#改文件也可以从ISO里拷贝cp /media/isolinux/isolinux.cfg /tftpboot/pxelinux.cfg/default,然后修改一下即可,这里我根据拷贝的文件自己写了一个default文件,方便脚本执行
#ksdevice=eth0,如果要安装系统的服务器上有多网卡的话,在这里指定即可,后面无人值守安装时就不会出现选择网卡的信息
#ks=nfs:172.16.90.222:/ks/ks.cfg,这是kickstart文件的路径,后续有具体配置
echo 'default linux6
prompt 1
timeout 600
display boot.msg
menu background splash.jpg
menu title Welcome to Red Hat Enterprise Linux 6.4!
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 linux6
menu label ^Install or upgrade an existing system
menu default
kernel vmlinuz
append initrd=initrd.img ksdevice=eth0 ks=nfs:172.16.90.222:/ks/ks.cfg
label vesa
menu label Install system with ^basic video driver
kernel vmlinuz
append initrd=initrd.img xdriver=vesa nomodeset
label rescue
menu label ^Rescue installed system
kernel vmlinuz
append initrd=initrd.img rescue
label local
menu label Boot from ^local drive
localboot 0xffff
label memtest86
menu label ^Memory test
kernel memtest
append -' > /tftpboot/pxelinux.cfg/default
#安装NFS包
yum -y install nfs-utils
mkdir -p /ks
#添加共享文件
echo '/ks *(ro)' > /etc/exports
echo '/media *(ro)' >> /etc/exports
echo '/tftpboot *(ro)' >> /etc/exports
#生成自应答文件
echo '##########################################################
#-------------------ks.cfg的权限给777--------------------#
#--安装不同版本系统时,可对比其/root/anaconda-ks.cfg文件-#
##########################################################
# Kickstart file automatically generated by anaconda.
#version=DEVEL
install
#告诉系统来安装全新的系统而不是在现有系统上升级.这是缺省的模式.必须指定安装的类型,如cdrom,harddrive,nfs或url(FTP 或HTTP安装).install命令和安装方法命令必须处于不同的行上.
nfs --server=172.16.90.222 --dir=/media
#指定安装路径 --server:PXE服务器地址 --dir:光盘挂载路径
#cdrom
#从系统上的第一个光盘驱动器中安装
lang zh_CN.UTF-8
#设置在安装过程中使用的语言以及系统的缺省语言
keyboard us
#设置系统键盘类型
network --onboot no --device eth0 --bootproto dhcp --noipv6
#network --onboot no --device eth1 --bootproto dhcp --noipv6
#为系统配置网络信息
rootpw --iscrypted $6$8BEv0.LPITKkIQp9$eoNGB63kZocA83zRVZxtZdt8QWOdifMJEUDUbJZ490KyKE0nhc6g.zQWXnc25cbIhfeoiRy6lXBDe4oSZ5B440
#把系统的根口令设置为<password>参数. 我这里密码为111111
#rootpw [--iscrypted] <password> --iscrypted,如果该选项存在,口令就会假定已被加密.
firewall --service=ssh
#这个选项对应安装程序里的「防火墙配置」屏幕:
authconfig --enableshadow --passalgo=sha512
#为系统设置验证选项.在缺省情况下,密码通常被加密但不使用影子文件(shadowed).
selinux --disable
#在系统里设置SELinux状态
timezone --utc Asia/Shanghai
#设置系统时区
zerombr yes
#如果指定了zerombr(yes是它的唯一参数),任何磁盘上的无效分区表都将被初始化.这会毁坏有无效分区表的磁盘上的所有内容.
#没有这一步,安装时会提示选择数据存储的问题
#bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet"
bootloader --location=mbr --driveorder=sda --append="auto rhgb quiet"
#指定引导装载程序怎样被安装.对于安装和升级,这个选项都是必需的.
clearpart --drives=sda --initlabel
#clearpart --all #删除系统上所有分区.
#--drives=,指定从哪个驱动器上清除分区.
#在创建新分区之前,从系统上删除分区.默认不会删除任何分区.
part /boot --fstype ext4 --size=200 --ondrive=sda
part swap --size=2048 --ondrive=sda
part / --fstype ext4 --grow --size=10240 --ondrive=sda
#创建分区,--size=,以MB为单位的分区最小值.
#--grow,告诉分区使用所有可用空间(若有),或使用设置的最大值.
#这里根据实际情况进行更改
# 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
#clearpart --none
#part /boot --fstype=ext4 --size=200
#part swap --size=2048
#part / --fstype=ext4 --grow --size=200
#选择需要安装的软件包.
%packages
@base
@chinese-support
@core
@development
@hardware-monitoring
@server-policy
python-dmidecode
sgpio
device-mapper-persistent-data
%end
reboot' > /ks/ks.cfg
#调整权限
chmod 777 /ks/ks.cfg
#重启相关服务
/etc/init.d/iptables stop
/etc/init.d/named stop &> /dev/null
/etc/init.d/named start
/etc/init.d/network restart
/etc/init.d/dhcpd stop &> /dev/null
/etc/init.d/dhcpd start
/etc/init.d/xinetd stop &> /dev/null
/etc/init.d/xinetd start
/etc/init.d/rpcbind stop &> /dev/null
/etc/init.d/rpcbind start
/etc/init.d/nfs stop &> /dev/null
/etc/init.d/nfs start
#PXE服务安装完成,可以进行测试了