PXE环境概述


在公司进行批量部署服务器安装方法: Kickstart (PXE+DHCP+TFTP+HTTP) 或 Cobbler

批量装机软件介绍

Kickstart和Cobbler。

  Kickstart是一种无人值守的安装方式。它的工作原理是在安装过程中记录人工干预填写的各种参数,并生成一个名为ks.cfg的文件。如果在自动安装过程中出现要填写参数的情况,安装程序首先会去查找ks.cfg文件,如果找到合适的参数,就采用所找到的参数;如果没有找到合适的参数,便会弹出对话框让安装者手工填写。所以,如果ks.cfg文件涵盖了安装过程中所有需要填写的参数,那么安装者完全可以只告诉安装程序从何处下载ks.cfg文件。等安装完毕,安装程序会根据ks.cfg中的设置重启/关闭系统,并结束安装。

  Cobbler集中和简化了通过网络安装操作系统需要使用到的DHCP、TFTP和DNS服务的配置。Cobbler不仅有一个命令行界面,还提供了一个Web界面,大大降低了使用者的入门水平。Cobbler内置了一个轻量级配置管理系统,但它也支持和其它配置管理系统集成。

什么是PXE

  PXE,全名Pre-boot Execution Environment,预启动执行环境;简单的说,Cobbler是对kickstart的封装,简化安装步骤、使用流程,并降低使用者的门槛。而kickstart实现方式依赖于PXE环境。通过网络接口启动计算机,不依赖本地存储设备(如硬盘)或本地已安装的操作系统;由Intel和Systemsoft公司于1999年9月20日公布的技术;运行在Client/Server的工作模式; PXE客户端会调用网际协议(IP)、用户数据报协议(UDP)、动态主机设定协议(DHCP)、小型文件传输协议(TFTP)等网络协议;PXE客户端(client)这个术语是指机器在PXE启动过程中的角色。一个PXE客户端可以是一台服务器、笔记本电脑或者其他装有PXE启动代码的机器(我们电脑的网卡)。

PXE工作流程图

  1. Client向PXE Server上的DHCP发送IP地址请求消息,DHCP检测Client是否合法(主要是检测Client的网卡MAC地址),如果合法则返回Client的IP地址,同时将启动文件pxelinux.0的位置信息一并传送给Client

  2. Client向PXE Server上的TFTP发送获取pxelinux.0请求消息,TFTP接收到消息之后再向Client发送pxelinux.0大小信息,试探Client是否满意,当TFTP收到Client发回的同意大小信息之后,正式向Client发送pxelinux.0

  3. Client执行接收到的pxelinux.0文件

  4. Client向TFTP Server发送针对本机的配置信息文件(在TFTP 服务的pxelinux.cfg目录下),TFTP将配置文件发回Client,继而Client根据配置文件执行后续操作

  5. Client向TFTP发送Linux内核请求信息,TFTP接收到消息之后将内核文件发送给Client

  6. Client向TFTP发送根文件请求信息,TFTP接收到消息之后返回Linux根文件系统

  7. Client启动Linux内核

  8. Client下载安装源文件,读取自动化安装脚本

PXE无人值守自动化安装系统


主服务器(192.168.36.101)安装DHCP服务、TFTP服务、HTTP服务

一、安装httpd

  搭建共享文件,使PXE客户端能从共享文件上轻松获取所需要的文件,工作在80端口

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

启动服务,创建共享目录

[root@centos ~]#systemctl start httpd.service
[root@centos ~]#systemctl enable httpd.service    # 开机启动httpd服务
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
[root@centos ~]#mkdir -pv /var/www/html/{ksdir,centos/{6,7}/iso/x86_64}   # 共享目录
mkdir: created directory ‘/var/www/html/centos’
mkdir: created directory ‘/var/www/html/centos/6’
mkdir: created directory ‘/var/www/html/centos/6/iso’
mkdir: created directory ‘/var/www/html/centos/6/iso/x86_64’
mkdir: created directory ‘/var/www/html/centos/7’
mkdir: created directory ‘/var/www/html/centos/7/iso’
mkdir: created directory ‘/var/www/html/centos/7/iso/x86_64’
[root@centos ~]#tree /var/www/html
/var/www/html
├── centos
│   ├── 6
│   │   └── iso
│   │       └── x86_64
│   └── 7
│       └── iso
│           └── x86_64
└── ksdir

8 directories, 0 files

加载光盘,并永久挂载centos6、centos7光盘到/vat/www/html下的指定位置

[root@centos ~]#echo "- - -" > /sys/class/scsi_host/host2/scan    # 刷新网卡
[root@centos ~]#blkid | grep sr
/dev/sr0: UUID="2018-11-26-14-22-58-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos"
/dev/sr1: UUID="2018-06-29-11-20-20-00" LABEL="CentOS_6.10_Final" TYPE="iso9660" PTTYPE="dos"
[root@centos ~]#tail -2 /etc/fstab    # 开机自动挂载
/dev/sr0 /var/www/html/centos/7/iso/x86_64 iso9660 defaults 0 0
/dev/sr1 /var/www/html/centos/6/iso/x86_64 iso9660 defaults 0 0
[root@centos ~]#df -h | grep sr
/dev/sr0         11G   11G     0 100% /var/www/html/centos/7/iso/x86_64
/dev/sr1        3.8G  3.8G     0 100% /var/www/html/centos/6/iso/x86_64

使用system-config-kickstart工具生成应答文件,并将其移动到共享目录/var/www/html/ksdir下

搭建epel源

[root@centos yum.repos.d]#rpm -ivh ~/epel-release-latest-7.noarch.rpm
warning: /root/epel-release-latest-7.noarch.rpm: Header V3 RSA/SHA256 Signature, key ID 352c64e5: NOKEY
Preparing...                          ################################# [100%]
Updating / installing...
   1:epel-release-7-11                ################################# [100%]
[root@centos yum.repos.d]#ls
bak  CentOS.repo  epel.repo  epel-testing.repo
[root@centos yum.repos.d]#yum repolist

安装工具包

[root@centos ~]#yum install -y system-config-kickstart    # 生成应答文件的工具

执行system-config-kickstart生成应答文件

安装软件选择,本次实验采用最小化安装,默认即可

file-->save保存文件至共享目录

注:若想在安装完系统执行一些脚本进行环境的配置,可以再Post-Installation Script中写入要执行的内容。

centos7应答文件内容

[root@centos ksdir]#cat ks_mini7.cfg
#platform=x86, AMD64, or Intel EM64T
#version=DEVEL
# Install OS instead of upgrade
install
# Keyboard layouts
keyboard 'us'
# Root password
rootpw --iscrypted $1$Tyo.RXcB$GcWeYoXa/uPKb/JlLeYkl/
# Use network installation
url --url="http://192.168.36.101/centos/7/iso/x86_64"   # url指定网络安装路径
# System language
lang en_US
# System authorization information
auth  --useshadow  --passalgo=sha512
# Use text mode install
text
firstboot --disable
# SELinux configuration
selinux --disabled

# Firewall configuration
firewall --disabled
# Network information
network  --bootproto=dhcp --device=ens33    # 网卡名称
# Reboot after installation
reboot
# System timezone   
timezone Asia/Shanghai    # 地区
# System bootloader configuration
bootloader --location=mbr
# Clear the Master Boot Record
zerombr
# Partition clearing information
clearpart --all --initlabel
# Disk partitioning information   # 分区
part / --fstype="ext4" --size=10240
part /boot --fstype="ext4" --size=500
part /home --fstype="ext4" --size=1024
part swap --fstype="swap" --size=2048

%packages
@core

%end

centos6应答文件

[root@centos ksdir]#cat ks_mini6.cfg
#platform=x86, AMD64, or Intel EM64T
#version=DEVEL
# Install OS instead of upgrade
install
# Keyboard layouts
keyboard 'us'
# Root password
rootpw --iscrypted $1$Tyo.RXcB$GcWeYoXa/uPKb/JlLeYkl/
# Use network installation
url --url="http://192.168.36.101/centos/6/iso/x86_64"
# System language
lang en_US
# System authorization information
auth  --useshadow  --passalgo=sha512
# Use text mode install
text
firstboot --disable
# SELinux configuration
selinux --disabled

# Firewall configuration
firewall --disabled
# Network information
network  --bootproto=dhcp --device=eth0
# Reboot after installation
reboot
# System timezone
timezone Asia/Shanghai
# System bootloader configuration
bootloader --location=mbr
# Clear the Master Boot Record
zerombr
# Partition clearing information
clearpart --all --initlabel
# Disk partitioning information
part / --fstype="ext4" --size=10240
part /boot --fstype="ext4" --size=500
part /home --fstype="ext4" --size=1024
part swap --fstype="swap" --size=2048

%packages
@core

%end

安装syslinux、tftp-server

  简单文件传输协议也称小型文件传输协议(Trivial File Transfer Protocol, TFTP),工作在UDP/69 端口

[root@centos ksdir]#yum install -y syslinux
[root@centos ksdir]#yum install -y tftp-server
[root@centos tftpboot]#cd /var/lib/tftpboot
[root@centos tftpboot]#mkdir -pv centos{6,7} pxelinux.cfg
mkdir: created directory ‘centos6’
mkdir: created directory ‘centos7’
mkdir: created directory ‘pxelinux.cfg’

复制启动时所需要的内核文件
[root@centos tftpboot]#cp -p /var/www/html/centos/6/iso/x86_64/isolinux/initrd.img ./centos6/
[root@centos tftpboot]#cp -p /var/www/html/centos/6/iso/x86_64/isolinux/vmlinuz ./centos6/
[root@centos tftpboot]#cp -p /var/www/html/centos/7/iso/x86_64/isolinux/vmlinuz ./centos7/
[root@centos tftpboot]#cp -p /var/www/html/centos/7/iso/x86_64/isolinux/initrd.img ./centos7/
[root@centos tftpboot]#cp -p /usr/share/syslinux/pxelinux.0 .
[root@centos tftpboot]#cp -p /usr/share/syslinux/menu.c32 .
[root@centos tftpboot]#tree
.
├── centos6
│   ├── initrd.img
│   └── vmlinuz
├── centos7
│   ├── initrd.img
│   └── vmlinuz
├── menu.c32
├── pxelinux.0
└── pxelinux.cfg

3 directories, 6 files
[root@centos tftpboot]#cp /var/www/html/centos/7/iso/x86_64/isolinux/isolinux.cfg ./pxelinux.cfg/default
[root@centos tftpboot]#cat ./pxelinux.cfg/default   # 编辑开机菜单栏选项
default menu.c32
timeout 60
menu title Install CentOS

label linux
  menu label Install CentOS Mini ^6
  kernel centos6/vmlinuz    # 指定内核文件
  append initrd=centos6/initrd.img ks=http://192.168.36.101/ksdir/ks_mini7.cfg    # 指定共享的应答文件

label linux
  menu label Install CentOS Mini ^7
  kernel centos7/vmlinuz
  append initrd=centos7/initrd.img ks=http://192.168.36.101/ksdir/ks_mini7.cfg

label returntomain    # 本地启动,default为默认选项
  menu default
  menu label Return to ^local
  menu exit

menu end

启动服务,并设置开机自启动

[root@centos ~]#systemctl start tftp.service
[root@centos ~]#systemctl enable tftp.service
Created symlink from /etc/systemd/system/sockets.target.wants/tftp.socket to /usr/lib/systemd/system/tftp.socket.
[root@centos ~]#ps -ef | grep tftp
root      12752      1  0 14:34 ?        00:00:00 /usr/sbin/in.tftpd -s /var/lib/tftpboot
root      12754   7152  0 14:34 pts/0    00:00:00 grep --color=auto tftp

DHCP

DHCP简介

  动态主机设置协议(Dynamic Host Configuration Protocol,DHCP)是一种使网络管理员能够集中管理和自动分配IP网络地址的通信协议,使用UDP协议工作,DHCP使用统一端口作为BOOTP:服务器端使用67/udp,客户端使用68/udp。主要有两个用途:用于内部网络或网络服务供应商自动分配IP地址给用户;用于内部网络管理员作为对所有电脑作中央管理的手段。

DHCP协议的工作流程:

  客户端在局域网广播DHCPDISCOVER报文,请求获得ip地址、网关、dns地址 等信息;DHCP服务器收到DHCPDISCOVER报文后 ,发送DHCPOFFER 报文进行响应 ;客户端收到DHCPOFFER报文后,发送DHCPREQUEST 报文进行请求 ;最终DHCP 服务器发送 DHCPACK报文进行确认 。

安装配置DHCP

[root@centos ~]#yum install -y dhcp
[root@centos ~]#cp -p /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf   # 配置文件模板
cp: overwrite ‘/etc/dhcp/dhcpd.conf’? y
[root@centos ~]#cat /etc/dhcp/dhcpd.conf    # 修改配置文件
option domain-name "magedu.com";    # 域名
option domain-name-servers 114.114.114.114;   # DNS

default-lease-time 6000;    # 租赁时间
max-lease-time 72000;   # 最长租赁时间

subnet 192.168.36.0 netmask 255.255.255.0 {   # DHCP网段和子网掩码配置
  range 192.168.36.10 192.168.36.100;   # DHCP分配IP的范围
  option routers 192.168.36.254;    # 网关
  server-name "192.168.36.101";   # TFTP服务器地址
  filename "pxelinux.0";    # pxe启动文件
}
[root@centos ~]#systemctl start dhcpd.service   # 启动dhcpd服务
[root@centos ~]#systemctl enable dhcpd.service    # 设置开机启动
Created symlink from /etc/systemd/system/multi-user.target.wants/dhcpd.service to /usr/lib/systemd/system/dhcpd.service.

测试检查

  1. 虚拟网卡必须和主服务器一致,保证dhcp能准确获取到IP

  2. 开机启动进入菜单栏选择要安装的系统

  3. 加载内核文件

  4. PXE无人值守安装成功

>>利用Cobbler安装操作系统,具体操作请点击查看
至此实验完成,感谢观看。