PXE+Kickstart无人值守安装系统

大憨熊 提交于 2019-12-03 17:44:28

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

#关闭防火墙
[root@CentOS7 ~]$systemctl stop firewalld.service #关闭当前系统防火墙
[root@CentOS7 ~]$systemctl disable firewalld.service #关闭防火墙开机启动
[root@CentOS7 ~]$systemctl status firewalld.service #查看防火墙的状态

#关闭SELINUX
[root@CentOS7 ~]$sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
[root@CentOS7 ~]$setenforce 0

 

2.安装相关软件包

#安装相关软件包
yum install -y httpd tftp-server dhcp syslinux system-config-kickstart

  • httpd
  • tftp-server
  • dhcp
  • syslinux
  • system-config-kickstart

 

3.配置共享文件服务

#启动httpf服务
[root@CentOS7 ~]$systemctl enable httpd
[root@CentOS7 ~]$systemctl start httpd

#准备好CentOS6和7的系统光盘
[root@CentOS7 ~]$df /dev/{sr0,sr1}
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sr0 3878870 3878870 0 100% /run/media/root/CentOS_6.9_Final
/dev/sr1 8086368 8086368 0 100% /run/media/root/CentOS 7 x86_64

#创建CentOS6和7的共享文件,并将准备好的光盘进行挂载
[root@CentOS7 ~]$mkdir -p /var/www/html/centos/{6,7}
[root@CentOS7 ~]$mount /dev/sr0 /var/www/html/centos/6
[root@CentOS7 ~]$mount /dev/sr1 /var/www/html/centos/7

注意:此处为了省略复制的时间,将光盘直接挂载到对应目录下,实际生产过程中,应该复制到对应目录下,并重建repodata.

 

4.准备Kickstart文件

#创建CentOS6和7各自的ks.cfg文件
[root@CentOS7 ~]$mkdir /var/www/html/ksdir
[root@CentOS7 ~]$cp /root/anaconda-ks.cfg /var/www/html/ksdir/ks7.cfg
#CentOS6的ks.cfg文件需要单独编辑
[root@CentOS7 ~]$touch /var/www/html/ksdir/ks6.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文件格式
[root@CentOS7 ~]$ksvalidator /var/www/html/ksdir/ks6.cfg
[root@CentOS7 ~]$ksvalidator /var/www/html/ksdir/ks7.cfg

 

5.配置tftp服务

#设置tftp服务开机自启动(CentOS6:chkconfig tftp on)
[root@CentOS7 ~]$systemctl enable tftp.socket
#设置启动tftp服务(CentOS6:service xined restart)
[root@CentOS7 ~]$systemctl start tftp.socket

  • 测试tftp服务

#创建tftp服务器测试文件
[root@CentOS7 ~]$echo 'tftp ok!' > /var/lib/tftpboot/text

  • 查看tftp服务端口

#查看69端口是否开启
[root@CentOS7 ~]$ss -nul |grep 69
UNCONN 0 0 :::69 :::* t

#使用客户端进行访问测试
[root@Centos6 ~]$tftp 192.168.15.71
tftp> get text
tftp> quit
[root@Centos6 ~]$cat text
tftp ok!

 

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配置内容
[root@CentOS7 ~]$vim /etc/dhcp/dhcpd.conf
# DHCP server to understand the network topology.
subnet 192.168.15.0 netmask 255.255.255.0 {
range 192.168.15.50 192.168.15.100;
option routers 192.168.15.1;
next-server 192.168.15.71;
filename "pxelinux.0";
}

  • 启动DHCP服务

#将DHCP服务设置开机自启动
[root@CentOS7 ~]$systemctl enable dhcpd
#启动DCHP服务
[root@CentOS7 ~]$systemctl start dhcpd
#查看DCHP端口是否启动
[root@CentOS7 ~]$ss -nul|grep 67

 

7.制作PXE文件


[root@CentOS7 ~]$mkdir /var/lib/tftpboot/pxelinux.cfg/
[root@CentOS7 ~]$mkdir /var/lib/tftpboot/centos{6,7}
[root@CentOS7 ~]$cp /usr/share/syslinux/{pxelinux.0,menu.c32} /var/lib/tftpboot/
#将内核文件和initrd文件加入tftp文件中
[root@CentOS7 ~]$cp /var/www/html/centos/6/isolinux/{initrd.img,vmlinuz} /var/lib/tftpboot/centos6
[root@CentOS7 ~]$cp /var/www/html/centos/7/isolinux/{initrd.img,vmlinuz} /var/lib/tftpboot/centos7

  • 查看生成文件
[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 defaulttimeout 来实现批量的系统自动安装。后面我们还会使用自动化工具来进行系统的安装,逐步向着运维自动化的方向努力。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!