由于考虑到公司以后会批量进行部署服务器,所以想去架构一个基于PXE的快速、批量安装系统的架构服务,后来在网络上搜索了一遍,但都是关于RHEL5的配置文档,但是其配置和在RHEL6上有很大的出入,所以决定自己摸索着把相关配置过程进行一遍,先把其配置过程发布出来,以供自己和各位linux爱好者查看、使用!其中写的不对的地方,还望各位大神指出~~谢谢!

一、PXE的介绍

PXE当初是作为Intel的有线管理体系的一部分,Intel 和 Systemsoft于1999年9月20日公布其规格(版本2.1)。通过使用像网际协议(IP)、用户数据报协议(UDP)、动态主机设定协定(DHCP)、小型文件传输协议(TFTP)等几种网络协议和全局唯一标识符(GUID)、通用网络驱动接口(UNDI)、通用唯一识别码(UUID)的概念并通过对客户机(通过PXE自检的电脑)固件扩展预设的API来实现目的。

   PXE 客户机(client)这个术语是指机器在PXE启动过程中的角色。一个PXE 客户机(client)可以是一台服务器、桌面级电脑、笔记本电脑或者其他装有PXE启动代码的机器。

二、PXE的工作过程

   1.客户机从自己的PXE网卡启动,向本网络中的DHCP服务器索取IP

   2.DHCP服务器返回分给客户机IP以及bootstrap文件的放置位置(该文件一般是放在一台TFTP服务器上)

   3.客户机向本网络中的TFTP服务器索取bootstrap文件

   4.客户机取得bootstrap文件后之执行该文件

   5.根据bootstrap的执行结果,通过TFTP服务器加载内核和文件系统

   6.进入安装画面, 此时可以通过选择FTP,HTTP,NFS方式之一进行安装 从这里我们不难得到实现PXE网络安装必需的4个要素

   1.客户机的网卡必须为PXE网卡

   2.网络中必须要有DHCP和TFTP服务器,当然这两个服务器可以是同一台物理主机

   3.所安装的操作系统必须支持网络安装,即必须提供自己的bootstrap

   4.必须要有FTP,HTTP,NFS至少一个服务器,当然也可以和DHCP和TFTP服务器同为一台物理主机

三、RHEL6-64bits基于PXE的实例实现

011248376.png

1、配置相关环境,这里使用yum安装,把本地的磁盘做成yum源

    本机IP设置

DEVICE="eth0"
BOOTPROTO="static"
IPADDR="192.168.7.1"
NETMASK="255.255.255.0"
NM_CONTROLLED="yes"
ONBOOT="yes"
TYPE="Ethernet"

   service network restart   #重启网络服务,使配置的IP地址生效!

   yum配置

[root@localhost ~]# vim /etc/yum.repos.d/server.repo 增加yum配置文件,添加如下内容:
[base]
name=base
baseurl=file:///media/Server
gpgcheck=0
enabled=1
[HighAvailability]
name=HighAvailability
baseurl=file:///media/HighAvailability
gpgcheck=0
enabled=1
[LoadBalancer]
name=LoadBalancer
baseurl=file:///media/LoadBalancer
gpgcheck=0
enabled=1
[ResilientStorage]
name=ResilientStorage
baseurl=file:///media/ResilientStorage
gpgcheck=0
enabled=1
[ScalableFileSystem]
name=ScalableFileSystem
baseurl=file:///media/ScalableFileSystem
gpgcheck=0
enabled=1
挂载光盘到指定的挂载点
[root@localhost ~]# mount /dev/cdrom /media

2、安装所需的软件包

[root@localhost ~]#  yum -y install dhcp tftp-server nfs-utils syslinux vsftpd

3、配置dhcpd服务器

[root@localhost ~]# vim /etc/dhcp/dhcpd.conf  添加如下内容
default-lease-time 600;
max-lease-time 7200;
allow booting;
allow bootp;
authoritative;
subnet 192.168.7.0 netmask 255.255.255.0 {
        range 192.168.7.80 192.168.7.90;
        next-server 192.168.7.1;  #tftp服务器
        filename "pxelinux.0";    #PXE客户端访问时候的文件
}
[root@localhost ~]# service dhcpd start #启动HDCP服务

4、配置tftp服务,此处使用xinetd超级进程来管理tftp服务

[root@localhost ~]# vim /etc/xinetd.d/tftp #修改配置文件
service tftp
{
        socket_type             = dgram
        protocol                = udp
        wait                    = yes
        user                    = root
        server                  = /usr/sbin/in.tftpd
        server_args             = -s /var/lib/tftpboot
        disable                 = no #只需把此处修改为no即可
        per_source              = 11
        cps                     = 100 2
        flags                   = IPv4
}
[root@localhost ~]#  service xinetd restart #重启服务,使其配置生效

5、设置tftp服务,并设置安装系统的磁盘挂载目录


[root@localhost ~]# mkdir /var/ftp/pub/rhel6 #创建挂载点
[root@localhost ~]# mount /dev/cdrom /var/ftp/pub/rhel6/  #挂载
[root@localhost ~]# cd /var/lib/tftpboot/
[root@localhost tftpboot]# cp -a /var/ftp/pub/rhel6/isolinux/* .   #拷贝光盘上的isolinux目录下的所有文件拷贝到当前目录内
[root@localhost tftpboot]# mkdir pxelinux.cfg  #建立PXE初始化目录
[root@localhost tftpboot]# cp isolinux.cfg pxelinux.cfg/default
[root@localhost tftpboot]# vim pxelinux.cfg/default  #修改为如下内容

   提供kickstart文件

022256209.png

提供ks.cfg文件

[root@localhost tftpboot]# cp /root/anaconda-ks.cfg /var/ftp/pub/ks.cfg

这是使用的本机的anaconda-ks.cfg文件,当然,如果我们需要自己定制,可用安装yum install system-config-kickstart软件包,然后利用命令system-config-kickstart启动一个gui界面进行相关的配置生成kickstart配置文件,这里使用本机的kickstart文件进行测试了~

   其配置文件详细命令如下

# Firewall configuration
firewall --enabled --ssh
# Install OS instead of upgrade
install
# Use network installation
url --url="ftp://192.168.7.1/pub/rhel6"
# Root password
rootpw --iscrypted $6$bgA6iounYImIucBq$8xtCdixNgcLPBsLOrFmtmrfPezUd.DAgDPBJDYzKYCegvj2oxUF3UGRWWXPaEitnPyckBInZ.RJXG4Vj.uTZd1
# System authorization information
auth  --useshadow  --passalgo=sha512
# System keyboard
keyboard us
# System language
lang en_US
# SELinux configuration
selinux --disabled
# Do not configure the X Window System
skipx
# Installation logging level
logging --level=info
# Reboot after installation
reboot
# System timezone
timezone --isUtc Asia/Shanghai
# Network information
network  --bootproto=dhcp --device=eth0 --onboot=on
# System bootloader configuration
bootloader --location=mbr
# Clear the Master Boot Record
zerombr
# Partition clearing information
clearpart --all --initlabel
# Disk partitioning information
part /boot --asprimary --fstype="ext4" --size=256
part swap --asprimary --fstype="swap" --size=2048
part / --asprimary --fstype="ext4" --size=10000
part /data --asprimary --fstype="ext4" --size=20000
%packages
@base
@chinese-support
%end

   注意:需要给其文件增加权限:

   chmod 644 /var/ftp/pub/ks.cfg

   然后复制PXE的cp /usr/share/syslinux/pxelinux.0  /var/lib/tftpboot/目录下,到处我们的配置已经完成!重启相关服务即可:

service vsftpd restart
service dhcpd restart
service xinetd restart

6、新建一个虚拟机,让其使用PXE进行安装系统,测试如下

025248662.png

025249721.png

025249721.png

025249174.png

025249685.png


   在我们部署的时候还有基于http、nfs等方式的架构,其大致内容都是相似的,只是在指定kickstart的配置文件的时候不同而已~

   最后把一键配置所用功能的脚本分享给大家~只需在PXE和kickstart服务器上执行以下这个脚本,就可以自动完成上面的所有配置,具体如下:

#!/bin/bash
#NAME:pxeinstallos.rhel6.1.sh
#DESCRIPTION:NULL
#AUTHOR:Beck
#VERSION:0.0.1
#DATATIME:2013-05-17 18:24:37
#USAGE:pxeinstallos.rhel6.1.sh
pxeip="192.168.2.30"
vsftpip="192.168.2.30"
dhcpip="192.168.2.30"
subnetip="192.168.2"
rangeip="192.168.2.50 192.168.2.60"
#准备工作需将rhel6的安装光盘放进光驱
mount /dev/cdrom /media
cat > /etc/yum.repos.d/localcdrom.repo << EOF
[base]
name=base
baseurl=file:///media/Server
gpgcheck=0
enabled=1
[HighAvailability]
name=HighAvailability
baseurl=file:///media/HighAvailability
gpgcheck=0
enabled=1
[LoadBalancer]
name=LoadBalancer
baseurl=file:///media/LoadBalancer
gpgcheck=0
enabled=1
[ResilientStorage]
name=ResilientStorage
baseurl=file:///media/ResilientStorage
gpgcheck=0
enabled=1
[ScalableFileSystem]
name=ScalableFileSystem
baseurl=file:///media/ScalableFileSystem
gpgcheck=0
enabled=1
EOF
yum clean all && yum repolist
yum -y install dhcp tftp-server syslinux vsftpd system-config-kickstart.noarch
func_tftp() {
sed -i "s@disable.*@disable                 = no@" /etc/xinetd.d/tftp
cp -a /media/isolinux/* /var/lib/tftpboot
mkdir /var/lib/tftpboot/pxelinux.cfg
#cp -a /var/lib/tftpboot/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
#vim /var/lib/tftpboot/pxelinux.cfg/default
cat > /var/lib/tftpboot/pxelinux.cfg/default << EOF
default vesamenu.c32
#prompt 1
timeout 5
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 linux
  menu label ^Install or upgrade an existing system
  menu default
  kernel vmlinuz
  append initrd=initrd.img ks=ftp://$pxeip/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 -
EOF
cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot
service xinetd restart
}
func_dhcp() {
mv /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf.bak
cat > /etc/dhcp/dhcpd.conf <<EOF
ddns-update-style interim;
ignore client-updates;
next-server $pxeip;
filename "pxelinux.0";
subnet $subnetip.0 netmask 255.255.255.0 {
        option routers  $pxeip;
        option subnet-mask  255.255.255.0;
        option nis-domain   "beckli.com";
        option domain-name  "beckli.com";
        option domain-name-servers  $pxeip;
        option ntp-servers  $pxeip;
                option time-offset  -18000; # Eastern Standard Time
        allow bootp;
        allow booting;
                range dynamic-bootp $rangeip;
                default-lease-time 21600;
                max-lease-time 43200;
}
EOF
service dhcpd restart
}
func_vsftp() {
service vsftp restart
umount /media
mkdir /var/ftp/rhel6
mount /dev/cdrom /var/ftp/rhel6
cat > /var/ftp/ks.cfg <<EOF
#platform=x86, AMD64, or Intel EM64T
#version=DEVEL
# Firewall configuration
firewall --enabled --ssh
# Install OS instead of upgrade
install
# Use network installation
url --url="ftp://$pxeip/rhel6"
# Root password
rootpw --iscrypted $6$bgA6iounYImIucBq$8xtCdixNgcLPBsLOrFmtmrfPezUd.DAgDPBJDYzKYCegvj2oxUF3UGRWWXPaEitnPyckBInZ.RJXG4Vj.uTZd1
# System authorization information
auth  --useshadow  --passalgo=sha512
# System keyboard
keyboard us
# System language
lang en_US
# SELinux configuration
selinux --disabled
# Do not configure the X Window System
skipx
# Installation logging level
logging --level=info
# Reboot after installation
reboot
# System timezone
timezone --isUtc Asia/Shanghai
# Network information
network  --bootproto=dhcp --device=eth0 --onboot=on
# System bootloader configuration
bootloader --location=mbr
# Clear the Master Boot Record
zerombr
# Partition clearing information
clearpart --all --initlabel
# Disk partitioning information
part /boot --asprimary --fstype="ext4" --size=256
part swap --asprimary --fstype="swap" --size=2048
part / --asprimary --fstype="ext4" --size=10000
part /data --asprimary --fstype="ext4" --size=20000
                            
%packages
@base
@chinese-support
                            
%end
EOF
}
func_tftp
func_vsftp
func_dhcp