PXE + Kickstart无人值守安装系统
前言
什么是PXE
PXE(preboot execute environment,预启动执行环境)是由Intel公司开发。工作于Client/Server的网络模式,支持工作站通过网络从远端服务器下载映像,并由此支持通过网络启动操作系统,在启动过程中,终端要求服务器分配IP地址,再用TFTP(trivial file transfer protocol)或MTFTP(multicast trivial file transfer protocol)协议下载一个启动软件包到本机内存中执行,由这个启动软件包完成终端(客户端)基本软件设置,从而引导预先安装在服务器中的终端操作系统。
PXE 其实并不是一种安装方式,而是一种引导的方式。进行 PXE 安装的必要条件是要安装的计算机中包含一个 PXE 支持的网卡。PXE可以引导多种操作系统,如:Windows和Linux等系列系统。
PXE工作原理
Client向PXE Server上的DHCP发送IP地址请求消息, DHCP检测Client是否合法(主要是检测Client的网卡MAC地址),如果合法则返回Client的IP地址,同时将启动文件pxelinux.0的位置信息一并传送给Client
Client向PXE Server上的TFTP发送获取pxelinux.0请求消息, TFTP接收到消息之后再向Client发送pxelinux.0大小信息,试探Client是否满意,当TFTP收到Client发回的同意大小信息之后,正式向Client发送pxelinux.0
Client执行接收到的pxelinux.0文件
Client向TFTP Server发送针对本机的配置信息文件(在TFTP 服务的pxelinux.cfg目录下), TFTP将配置文件发回Client,继而Client根据配置文件执行后续操作。
Client向TFTP发送根文件请求信息, TFTP接收到消息之后返回Linux根文件系统
Client启动Linux内核
Client下载安装源文件,读取自动化安装脚本
Kickstart
KickStart是一种无人职守安装方式。KickStart的工作原理是通过记录典型的安装过程中所需人工干预填写的各种参数,并生成一个名为ks.cfg的文件。在之后的安装过程中(不只局限于生成KickStart安装文件的机器)当出现要求填写参数的情况时,安装程序会首先去查找KickStart生成的文件。如果找到合适的参数时,就匹配找到的参数,而没有找到合适的参数时,才需要手工干预安装。当KickStart文件涵盖了安装过程中出现的所有需要填写的参数时,安装者完全可以只告诉安装程序从何处取ks.cfg文件,系统便会自动安装,做到无人值守安装系统。
PXE+Kickstart 安装流程图
(图片来自——http://blog.zhubiaook.com/linux/2017/09/17/PXE+DHCP+Apache+KickStart/)
安装过程
安装条件
- DHCP服务器:为 PXE-client 分配 IP ,获得安装程序文件位置
- TFTP服务器:传输安装文件、内核、菜单文件等给 PXE-client
- Kickstart:生成的ks.cfg配置文件
- HTTP/NFS/FTP 服务中的任意一种,用于传送安装源文件给 PXE-client
本实验中,我们是使用一台CentOS7设备作为Server端,实现CentOS6和7系统安装。
安装步骤
1.安装前准备
关闭 防火墙 和 SELINUX
#关闭防火墙 |
#关闭SELINUX |
2.安装相关软件包
#安装相关软件包 |
- httpd
- tftp-server
- dhcp
- syslinux
- system-config-kickstart
3.配置共享文件服务
#启动httpf服务 |
#准备好CentOS6和7的系统光盘 |
#创建CentOS6和7的共享文件,并将准备好的光盘进行挂载 |
注意:此处为了省略复制的时间,将光盘直接挂载到对应目录下,实际生产过程中,应该复制到对应目录下,并重建repodata.
4.准备Kickstart文件
#创建CentOS6和7各自的ks.cfg文件 |
#给ks.cfg文件加上读权限 [root@CentOS7 ~]$chmod +r /var/www/html/ksdir/ks{6,7}.cfg“` |
编辑CentOS6的ks.cfg文件
#配置ks6.cfg文件
# Kickstart file automatically generated by anaconda.
#version=DEVEL
install
#cdrom #光盘安装方式
url --url=http://192.168.15.71/centos/6 #指定通过http安装源的路径
text #采用文本安装的方式
reboot #安装自动重启(此处设置与顺序无关)
zerombr #任何磁盘上的无效分区表都将被初始化.这会毁坏有无效分区表的磁盘上的所有内容,如果后面加参数yes,则命令生效
lang en_US.UTF-8
keyboard us
network --onboot yes --device eth0 --bootproto dhcp --noipv6 #设置网卡开机自启动
rootpw --iscrypted $6$fo5PVsYpQzE2RC..$vZ2FT3sHNJBR2aopg8uzWWM2.59BykYcelOD7rBryYUuYpeNKpqAneREqaaO4x3btGdBJGbc4vHvjwaGLBGVG1
firewall --service=ssh
authconfig --enableshadow --passalgo=sha512
selinux --disabled #关闭selinux
timezone --utc Asia/Shanghai #设置时区
bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet"
# The following is the partition information you requested
# Note that any partitions you deleted are not expressed
# here so unless you clear all partitions first, this is
# not guaranteed to work
#clearpart --none
clearpart --all #清空全部分区
part /boot --fstype=ext4 --size=1000
part / --fstype=ext4 --size=50000
part /app --fstype=ext4 --size=50000
part swap --size=2000
#repo --name="CentOS" --baseurl=cdrom:sr0 --cost=100
%packages #要安装的软件包,根据需求在下面添加
@core
@server-policy
@workstation-policy
%end
编辑CentOS7的ks.cfg文件
#配置ks7.cfg文件
#version=DEVEL
# System authorization information
auth --enableshadow --passalgo=sha512
# Use CDROM installation media
#cdrom
url --url=http://192.168.15.71/centos/7 #指定通过http安装源的路径
# Use graphical install
text #文本安装方式
#graphical #图形安装方式
# Run the Setup Agent on first boot
firstboot --enable
ignoredisk --only-use=sda
# Keyboard layouts
keyboard --vckeymap=us --xlayouts='us'
# System language
lang en_US.UTF-8
# Network information
network --bootproto=dhcp --device=ens33 --onboot=on --ipv6=auto --activate #设置网卡开机自启动
network --hostname=CentOS7.ghy
# Root password
rootpw --iscrypted $6$b6IsAJZX.ac.hCsu$1iDlxJDC6SBcnd0FZ9kYHVAVLtivXVMZ3yK.mU76O2XheycVXNNMoXNEF48ypWmimKj8xvAkm1nc7B1ju8A///
# System services
services --disabled="chronyd"
# System timezone
timezone Asia/Shanghai --isUtc --nontp
user --name=ghy --password=$6$.oWz.8rfJZ/Haxcs$VMLedlOaOkU5kcb/0hzZyd2w.r0EiVHCFo1la6pvA.1T/XCFSu6KhW7bi8mAFSegOGe2yDxQAfUB/8HjWb9qp1 --iscrypted --gecos="ghy"
# X Window System configuration information
xconfig --startxonboot
# System bootloader configuration
bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=sda
# Partition clearing information
clearpart --none --initlabel
zerombr
clearpart --all
# Disk partitioning information
part /boot --fstype="xfs" --ondisk=sda --size=1024
part / --fstype="xfs" --ondisk=sda --size=51200
part /app --fstype="xfs" --ondisk=sda --size=51200
part swap --fstype="swap" --ondisk=sda --size=2048
reboot
%packages
@core
@wget
@vim
%end
注意:CentOS6和7上权限必须是所有用户可读,否则之后安装无法进行
检查ks文件格式
#检查ks.cfg文件格式 |
5.配置tftp服务
#设置tftp服务开机自启动(CentOS6:chkconfig tftp on) |
- 测试tftp服务
#创建tftp服务器测试文件 |
- 查看tftp服务端口
#查看69端口是否开启 |
#使用客户端进行访问测试 |
6.配置DHCP服务
因为默认的DHCP配置文件是空的,所以我们通过系统自带的模板文件覆盖默认的DHCP配置文件,然后进行编辑,最后启动DHCP服务
#将模板文件覆盖默认DHCP配置文件
[root@CentOS7 ~]$cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf
- 编辑DHCP配置文件
#更改dhcpd.conf文件中的DHCP配置内容 |
- 启动DHCP服务
#将DHCP服务设置开机自启动 |
7.制作PXE文件
|
- 查看生成文件
[root@CentOS7 ~]tree /var/lib/tftpboot/
/var/lib/tftpboot/
├── centos6
│ ├── initrd.img
│ └── vmlinuz
├── centos7
│ ├── initrd.img #伪文件系统文件
│ └── vmlinuz #内核文件
├── menu.c32 #纯文本菜单
├── pxelinux.0 #引导文件,相当于grub。
└── pxelinux.cfg
8.制作启动菜单
[root@CentOS7 ~]vim /var/lib/tftpboot/pxelinux.cfg/default
default menu.c32
timeout 600 #控制等待时间,单位是十分之一秒
menu title CentOS Linux PXE Install
label centos7 #自动安装centos7
menu label Auto Install CentOS Linux ^7
kernel centos7/vmlinuz
append initrd=centos7/initrd.img ks=http://192.168.15.71/ksdir/ks7.cfg #应答文件所在路径
label centos6 #自动安装centos6
menu label Auto Install CentOS Linux ^6
kernel centos6/vmlinuz
append initrd=centos6/initrd.img ks=http://192.168.15.71/ksdir/ks6.cfg
label manual7 #手动安装centos7
menu label ^Manual Install CentOS Linux 7
kernel centos7/vmlinuz
append initrd=centos7/initrd.img inst.repo=http://192.168.15.71/centos/7
label manual6 #手动安装centos6
menu label Manual ^Install CentOS Linux 6
kernel centos6/vmlinuz
append initrd=centos6/initrd.img inst.repo=http://192.168.15.71/centos/6
label local #本地硬盘启动
menu default #默认启动项
menu label Boot from ^local drive
localboot 0xffff
menu end
9.系统安装
新建空白虚拟机,将网卡设置为仅主机,然后启动虚拟机
进入PXE安装界面。
总结
我们可以通过对启动菜单文件的配置,修改 menu default
和 timeout
来实现批量的系统自动安装。后面我们还会使用自动化工具来进行系统的安装,逐步向着运维自动化的方向努力。
来源:CSDN
作者:Ghoy
链接:https://blog.csdn.net/oWangChen1234567/article/details/78015737