一、PXE简介

二、PXE自动化安装系统的流程

三、在CentOS 7上搭建PXE环境

四、在CentOS 6上搭建PXE环境



一、PXE简介


PXE的全称为Preboot eXecution Environment,即与预启动执行环境,也称为预执行环境,是一种通过网路实现自动化安装系统的机制,由Intel研发。PXE是基于C/S架构的,使用PXE机制能使没有任何操作系统的主机基于网络完成操作系统的安装,实现PXE客户端主机自动化安装操作系统,因此无需依赖于客户端的硬盘。客户端启动时,其网卡上的ROM中的代码可以扮演成DHCP服务器的客户端,从而获取一个IP地址(注意是网卡地址,不是内核地址,因为还没安装操作系统),再扮演成文件服务器的客户端去获取安装系统所需要的文件,加载至内存中,从而完成操作系统的安装。



二、PXE自动化安装系统的流程


使用PXE机制安装系统,要求网卡支持网络引导,整个启动安装流程如下。

  • PXE网卡启动

  • PXE网卡附加的ROM上的代码扮演成DHCP Server的客户端,此时DHCP会分配一个IP地址及子网掩码给Client,并告知启动引导文件pxelinux.0的存放位置(该文件一般存放在TFTP服务器上)

  • PXE Client(PXE网卡)向TFTP Server请求pxelinux.0文件,TFTP Server将pxelinux.0发给Client

  • PXE Client执行接受到的pxelinux.0文件

  • PXE Client向TFTP Server请求配置文件(pxelinux.cfg/default),TFTP Server将配置文件发给Client,而Client则根据配置文件执行后续操作

  • PXE Client向TFTP Server请求vmlinuz,TFTP Server收到请求后将vmlinuz发给Client

  • PXE Client向TFTP Server请求initrd.img,TFTP Server收到请求后将initrd.img发给Client

  • PXE Client进入系统安装步骤,并通过向TFTP Server请求获取kickstart文件,实现自动化安装系统



三、在CentOS 7上搭建PXE环境


实验环境:

DHCP Server和TFTP Server为同一台主机,IP地址为192.168.10.150,主机名为centos7。


实验前提:

确保SElinux和防火墙不会影响实验。


涉及到的服务:

(1) dhcp服务(提供ip/netmask, gw, dns; filename, next-server)

(2) tftp服务(提供bootloader, kernel, initrd)

(3) yum仓库(可由ftp、http(s)、nfs服务提供)

(4) kickstart文件


1、DHCP的安装配置

安装

[root@centos7 ~]# yum -y install dhcp

配置

复制并修改模板文件,如下。

[root@centos7 ~]# cp /usr/share/doc/dhcp*/dhcpd.conf.example /etc/dhcp/dhcpd.conf
[root@centos7 ~]# vim /etc/dhcp/dhcpd.conf

option domain-name "itab.com";
option domain-name-servers 114.114.114.114;
option routers 192.168.10.2;

default-lease-time 43200;
max-lease-time 86400;

log-facility local7;

subnet 192.168.10.0 netmask 255.255.255.0 {
	range 192.168.10.101 192.168.10.140;
	filename "pxelinux.0";         # 指明引导文件名称
	next-server 192.168.10.150;    # 指明引导文件所在服务器主机的IP地址
}

启动

[root@centos7 ~]# systemctl restart dhcpd.service
[root@centos7 ~]# systemctl enable dhcpd.service
[root@centos7 ~]# ss -unl | grep :67
UNCONN     0      0            *:67                       *:*


2、TFTP的安装配置

TFTP全称为Trivial FTP,即简单文件传输服务,用于在客户端和服务器端之间传输开销不大的文件,监听在69/UDP端口上。

安装

[root@centos7 ~]# yum -y install tftp tftp-server

注意:tftp是客户端程序包,tftp-server是服务器程序包。

启动

[root@centos7 ~]# systemctl start tftp.socket
[root@centos7 ~]# systemctl enable tftp.socket
[root@centos7 ~]# ss -unl | grep :69
UNCONN     0      0           :::69                      :::*

注意:

①TFTP服务器的默认文件根目录是/var/lib/tftpboot/

②在CentOS 6上tftp服务是由xinetd服务代理,需要先安装xinetd服务,并执行chkconfig tftp on命令开启tftp服务。


3、yum仓库准备

yum仓库可以自己定制,也可以使用互联网上的yum仓库。这里直接将光盘yum仓库挂载在http下,以让客户端能够访问。

安装

[root@centos7 ~]# yum -y install httpd

挂载

[root@centos7 ~]# mkdir -p /var/www/html/centos/7/x86_64
[root@centos7 ~]# mount -r /dev/sr0 /var/www/html/centos/7/x86_64    # 只读挂载

启动

[root@centos7 ~]# systemctl start httpd.service
[root@centos7 ~]# systemctl enable httpd.service
[root@centos7 ~]# ss -tnl | grep :80
LISTEN     0      128         :::80                      :::*

可以看到httpd能够正常提供服务,如下。


4、kickstart文件准备

以系统安装的kickstart文件为模板,并根据需要进行修改(可使用system-config-kickstart修改),这里的kickstart文件放在httpd服务器上。

[root@centos7 ~]# mkdir /var/www/html/kickstarts
[root@centos7 ~]# cp ~/anaconda-ks.cfg /var/www/html/kickstarts/centos7.cfg
[root@centos7 ~]# vim /var/www/html/kickstarts/centos7.cfg    # 修改模板后,如下

#version=DEVEL
# System authorization information
auth --enableshadow --passalgo=sha512
url --url=http://192.168.10.150/centos/7/x86_64    # 指定安装源位置(由httpd提供)
text                                               # 文本界面安装
# Run the Setup Agent on first boot
firstboot --disable
reboot                                             # 安装后重启
ignoredisk --only-use=sda
# Keyboard layouts
keyboard --vckeymap=us --xlayouts='us'
# System language
lang en_US.UTF-8
# Network information
network  --bootproto=dhcp --device=eno16777736 --onboot=on --ipv6=auto --activate  # 网卡配置
network  --hostname=cento7
# Root password
rootpw --iscrypted $1$1uGcgMef$MUVhg/xFGVZve5oUXQzmN/
# System services
services --disabled="chronyd"
# System timezone
timezone Asia/Shanghai --isUtc --nontp
# System bootloader configuration
bootloader --append="crashkernel=auto vga=785" --location=mbr --boot-drive=sda
# Partition clearing information
clearpart --none --initlabel
# Disk partitioning information
part swap --fstype="swap" --ondisk=sda --size=2048
part / --fstype="xfs" --ondisk=sda --size=10240
part /boot --fstype="xfs" --ondisk=sda --size=512

%packages
@^minimal
@core
kexec-tools
%end

%addon com_redhat_kdump --enable --reserve-mb='auto'
%end

为kickstart文件添加读权限。

[root@centos7 ~]# chmod a+r /var/lib/tftpboot/kickstarts/centos7.cfg


5、配置PXE环境

a.安装syslinux

syslinux是一个功能强大的bootloader,其详细介绍可使用“yum info syslinux”命令查看。

[root@centos7 ~]# yum -y install syslinux


b.准备引导文件

[root@centos7 ~]# rpm -ql syslinux | grep "\"
/usr/share/syslinux/pxelinux.0
[root@centos7 ~]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/


c.准备内核等文件

[root@centos7 ~]# cp /var/www/html/centos/7/x86_64/p_w_picpaths/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/
[root@centos7 ~]# cp /usr/share/syslinux/{chain.c32,mboot.c32,menu.c32,memdisk} /var/lib/tftpboot/

注意:memdisk可以将内存模拟为硬盘,用于将initrd.img在内存中展开并模拟成硬盘使用。


d.定制启动菜单

[root@centos7 ~]# mkdir /var/lib/tftpboot/pxelinux.cfg
[root@centos7 ~]# vim /var/lib/tftpboot/pxelinux.cfg/default
default menu.c32                    # 所用菜单文件
prompt 5
timeout 30
menu title CentOS 7 PXE Menu        # 主标题"CentOS 7 PXE Menu"

label linux_autoinst                # 选项标题"linux_autoinst"
    menu label Install CentOS 7 x86_64
    kernel vmlinuz
    append initrd=initrd.img inst.repo=http://192.168.10.150/centos/7/x86_64 ks=http://192.168.10.150/kickstarts/centos7.cfg
                                    # kickstart文件由http服务提供

查看TFTP Server文件根目录结构。

[root@centos7 ~]# tree /var/lib/tftpboot/
/var/lib/tftpboot/
├── chain.c32
├── initrd.img
├── mboot.c32
├── memdisk
├── menu.c32
├── pxelinux.0
├── pxelinux.cfg
│   └── default
└── vmlinuz

1 directory, 8 files


6、在主机上自动化安装操作系统实现

a.使用vmware软件进行实验,根据以上步骤配置好PXE Server,然后新建虚拟机,作为PXE Client,期望其实现自动化安装系统

基于PXE实现自动化安装系统_第1张图片


b.自动化安装过程



安装完成!



四、在CentOS 6上搭建PXE环境


实验环境:

DHCP Server和TFTP Server为同一台主机,IP地址为192.168.10.128,主机名为centos6。


1、DHCP的安装配置

安装

[root@centos6 ~]# yum -y install dhcp

配置

复制并修改模板文件,如下。

[root@centos6 ~]# cp /usr/share/doc/dhcp*/dhcpd.conf.example /etc/dhcp/dhcpd.conf
[root@centos6 ~]# vim /etc/dhcp/dhcpd.conf

option domain-name "itab.com";
option domain-name-servers 114.114.114.114;
option routers 192.168.10.2;

default-lease-time 43200;
max-lease-time 86400;

log-facility local7;

subnet 192.168.10.0 netmask 255.255.255.0 {
	range 192.168.10.101 192.168.10.140;
	filename "pxelinux.0";         # 指明引导文件名称
	next-server 192.168.10.128;    # 指明引导文件所在服务器主机的IP地址
}

启动

[root@centos6 ~]# service dhcpd configtest    # 检查语法错误
Syntax: OK
[root@centos6 ~]# service dhcpd start                                           [  OK  ]
[root@centos6 ~]# chkconfig dhcpd on
[root@centos6 ~]# ss -unl
State      Recv-Q Send-Q                                          Local Address:Port                                            Peer Address:Port 
UNCONN     0      0                                                           *:67                                                         *:*


2、TFTP的安装配置

安装

[root@centos6 ~]# yum -y install tftp-server

启动

[root@centos6 ~]# chkconfig tftp on
[root@centos6 ~]# service xinetd restart
[root@centos6 ~]# chkconfig xinetd on

在CentOS如果要使tftp服务开机自动启动,除了以上使用"chkconfig tftp on"命令外,还有另一种方法,那就是编辑/etc/xinetd.d/tftp文件,将其中的"disable = yes"修改为"disable = no"。因为tftp服务在CentOS 6上是由xinetd服务控制,因此xinetd服务也要设置为开机自动启动,这样tftp服务才能开机自动启动。


3、yum仓库准备

此处为了实验方便,直接将yum仓库挂载在ftp服务下,让客户端能够访问。

安装

[root@centos6 ~]# yum -y install vsftpd

挂载

[root@centos6 ~]# mkdir -p /var/ftp/pub/centos/7/x86_64
[root@centos6 ~]# mount -r /dev/sr0 /var/ftp/pub/centos/7/x86_64

启动

[root@node ~]# service vsftpd start
[root@node ~]# chkconfig vsftpd on


可以看到vsftpd能够正常提供服务,如下。


4、kickstart文件准备

以系统安装的kickstart文件为模板,并根据需要进行修改(可使用system-config-kickstart修改),这里的kickstart文件放在vsftpd服务器上。

[root@centos6 ~]# mkdir /var/ftp/kickstarts
[root@centos6 ~]# cp ks.cfg /var/ftp/kickstarts/centos6.cfg
[root@centos6 ~]# vim /var/ftp/kickstarts/centos6.cfg    # 修改模板后,如下

#platform=x86, AMD64, or Intel EM64T
#version=DEVEL
# Firewall configuration
firewall --disabled
# Install OS instead of upgrade
install
# Use network installation
url --url="ftp://192.168.10.128/pub/centos/7/x86_64"           # 指定安装源位置(由httpd提供)
# Root password
rootpw --iscrypted $1$wakiRJZe$7pfhY4KCgf9B9ZEp/WPQN0
# System authorization information
auth  --useshadow  --passalgo=sha512
# Use text mode install
text                                                            # 文本界面安装
# 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  Asia/Shanghai
# Network information
network  --bootproto=dhcp --device=eth0 --onboot=on         # 网卡配置
# System bootloader configuration
bootloader --append="crashkernel=auto rhgb quiet vga=785" --location=mbr --driveorder="sda"
# Clear the Master Boot Record
zerombr
# Partition clearing information
clearpart --all --initlabel
# Disk partitioning information
part /boot --fstype="ext4" --size=512
part / --fstype="ext4" --size=10240
part swap --fstype="swap" --size=2048

%post
echo "Hello~My Tab!"

rm -rf /etc/yum.repo.d/*
cat > /etc/yum.repo.d/local.repo < /etc/yum.repo.d/epel <> /etc/fstab
%end

%packages
@base
@console-internet

%end


5、配置PXE环境

a.安装syslinux

[root@centos6 ~]# yum -y install syslinux


b.准备引导文件

[root@centos6 ~]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/


c.准备内核等文件

[root@centos6 ~]# mount --bind /var/ftp/pub/centos/7/x86_64/ /media/cdrom/
[root@centos6 ~]# cp /media/cdrom/p_w_picpaths/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/
[root@centos6 ~]# cp /media/cdrom/isolinux/{boot.msg,vesamenu.c32,splash.jpg} /var/lib/tftpboot/


d.定制启动菜单

[root@centos6 ~]# mkdir /var/lib/tftpboot/pxelinux.cfg/
[root@centos6 ~]# cp /media/cdrom/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
[root@centos6 ~]# vim /var/lib/tftpboot/pxelinux.cfg/default 

default vesamenu.c32                              # 所用菜单文件
#prompt 1
timeout 50

display boot.msg

menu background splash.jpg
menu title Welcome to CentOS 6.8 iTab!            # 主标题
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_autoinst
  menu label ^Install CentOS 6.8 automatically    # 选项标题
  menu default
  kernel vmlinuz
  append initrd=initrd.img ks=ftp://192.168.10.128/kickstarts/centos6.cfg    # kickstart文件由http服务提供
label linux
  menu label ^Install or upgrade an existing system
  kernel vmlinuz
  append initrd=initrd.img
label vesa
  menu label Install system with ^basic video driver
  kernel vmlinuz
  append initrd=initrd.img 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 -


查看TFTP Server文件根目录结构。

[root@centos6 ~]# tree /var/lib/tftpboot/
/var/lib/tftpboot/
├── boot.msg
├── initrd.img
├── pxelinux.0
├── pxelinux.cfg
│   └── default
├── splash.jpg
├── vesamenu.c32
└── vmlinuz

1 directory, 7 files


6、在主机上自动化安装操作系统实现

a.创建虚拟机


b.自动安装系统



安装完成!