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.
测试检查
-
虚拟网卡必须和主服务器一致,保证dhcp能准确获取到IP
-
开机启动进入菜单栏选择要安装的系统
-
加载内核文件
-
PXE无人值守安装成功