由于考虑到公司以后会批量进行部署服务器,所以想去架构一个基于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的实例实现

20130603093949313.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地址生效!www.it165.net

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 ~]# 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 #重启服务,使其配置生效

提供kickstart文件

20130603093949734.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进行安装系统,测试如下

20130603093950191.png

20130603093950951.png

20130603093950951.png

20130603093951549.png

20130603093952557.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 <a href="http://www.it165.net/os/oslin/" target="_blank" class="keylink">Linux</a> 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 
# SE<a href="http://www.it165.net/os/oslin/" target="_blank" class="keylink">Linux</a> 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

源地址:http://www.it165.net/os/html/201306/5331.html#comment_iframe