PXE+Kickstack实现无人值守安装CentOS 7操作系统

Posted yanlibo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PXE+Kickstack实现无人值守安装CentOS 7操作系统相关的知识,希望对你有一定的参考价值。

实验目的

掌握在实际工作工作环境中根据需求通过网络进行系统自动化批量部署安装操作。

实验需求

1.PXE说明

所谓的PXE是Preboot Execution Environment的缩写,即预启动的执行环境。

要达成PXE必须要有两个环节:

(1)客户端的网卡必须要支持PXE用户端功能,并且开机时选择从网卡启动,这样系统才会以网卡进入PXE客户端的程序;

(2)PXE服务器必须要提供至少含有DHCP以及TFTP的服务!

· DHCP服务必须要能够提供客户端的网络参数,还要告知客户端TFTP所在的位置;

· TFTP则提供客户端的boot loader及kernel file下载路径。

还要加上NFS/FTP/HTTP(选择一样即可)等提供安装文件(安装镜像的解压文件),才算是比较完整的PXE服务器。一般TFTP和DHCP服务都由同一台服务器提供,且大多数时候还提供NFS/FTP/HTTP服务,所以PXE服务器一般是提供3合一的服务。

2.PXE启动流程

(1).Client向PXE Server上的DHCP发送IP地址请求消息,DHCP检测Client是否合法(主要是检测Client的网卡MAC地址),如果合法则返回Client的IP地址,同时将pxe环境下的Boot loader文件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请求pxelinux.cfg文件(其实它是目录,里面放置的是是启动菜单,即grub的配置文件),TFTP将配置文件发回Client,继而Client根据配置文件执行后续操作。

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

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

(7).Client加载Linux内核(启动参数已经在4中的配置文件中设置好了)。

(8).Client通过nfs/ftp/http下载系统安装文件进行安装。如果在4中的配置文件指定了kickstart路径,则会根据此文件自动应答安装系统。

实验环境

如下图,192..168.33.11是PXE服务器,提供dhcp+tftp+http服务。其他该网段内的主机为待安装系统的主机群。

实验步骤

提示

1.关闭防火墙和selinux,将DHCP服务器设置为静态地址

2.完成yum仓库配置搭建(参考链接:https://www.cnblogs.com/bob-yanlibo/p/8144840.html

1.部署DHCP服务

(1)使用yum仓库安装DHCP服务端程序,并设置服务开启自启动:

[root@pxe-s ~]# yum -y install dhcp

[root@pxe-s ~]# systemctl enable dhcpd.service
 

DHCP主要是提供客户端网络参数与TFTP的位置,以及boot loader的文件名。同时告知内网客户机TFTP的相关位置,所以可以编辑/etc/dhcp/dhcpd.conf在subnet的区块内加入两个参数即可。其中PXE上专门为PXE客户端下载的boot loader文件名称为pxelinux.0。

(2)编辑DHCP服务配置文件,修改配置如下:

提示:默认安装完成DHCP服务后,dhcpd.conf配置文件为空,建议复制模版文件(/usr/share/doc/dhcp-4.2.5/dhcpd.conf.example)覆盖安装生成的配置文件。

[root@pxe-s ~]# vim /etc/dhcp/dhcpd.conf 
option domain-name "wczy.cn";
option domain-name-servers 114.114.114.114, 202.103.24.68;

default-lease-time 600;
max-lease-time 7200;
#option routers 192.168.33.11

subnet 192.168.33.0 netmask 255.255.255.0 {
range 192.168.33.20 192.168.33.200;
option domain-name-servers 8.8.8.8;
option routers 192.168.33.11;
next-server 192.168.33.11;          #指定TFTP服务器地址
filename "pxelinux.0";  #告知客户机从TFTP根目录下载的boot loader文件名
}

(3)重启服务并进行验证。

[root@pxe-s ~]# systemctl restart dhcpd.service

提示:DHCP服务重启无报错,表示服务配置生效成功。查看服务对应端口是否处于监听或使用与PXE服务主机同一网络的主机,设置IP地址为自动获取,查看能否顺利拿到IP地址即可。若是在虚拟机中进行,还请注意相关网络配置。

 

2.部署TFTP服务器

(1)使用yum仓库安装TFTP服务程序,设置服务开机自启动:

[root@pxe-s ~]# yum -y install tftp-server
[root@pxe-s ~]# systemctl start tftp.socket
[root@pxe-s ~]# systemctl enable tftp

提示:若使用的是CnetOS 6的系统版本,tftp服务为非独立服务,需要安装xinetd服务并修改对应服务配置文件,使之开机自启。也可以在CentOS 7 的版本上使用Cent OS 6的配置方法,同时需要安装xinetd服务,配置过程如下:

[root@pxe-s ~]# yum -y remove xinetd
[root@pxe-s xinetd.d]# systemctl enable xinetd
[root@pxe-s xinetd.d]# vim tftp
# default: off
# description: The tftp server serves files using the trivial file transfer \\
#       protocol. The tftp protocol is often used to boot diskless \\
#       workstations, download configuration files to network-aware printers, \\
#       and to start the installation process for some operating systems.
service tftp
{
      socket_type             = dgram
      protocol                = udp
      wait                    = yes
      user                    = root
      server                  = /usr/sbin/in.tftpd
      server_args             = -s /var/lib/tftpboot
      disable                 = no     #默认配置这里是yes,需要修改为no   用来设置服务开机自启
      per_source              = 11
      cps                     = 100 2
      flags                   = IPv4
}

3.配置文件共享服务(使用httpd服务对文件进行共享操作)

(1)安装httpd服务,并设置服务开机自启动

[root@pxe-s ~]# yum -y install httpd
[root@pxe-s ~]# systemctl start httpd
[root@pxe-s ~]# systemctl enable httpd

(2)使用http服务对外提供文件(如应答文件、软件包等)共享服务

[root@pxe-s html]# mkdir -pv centos/7 
[root@pxe-s html]# echo "/dev/sr0 /var/www/html/centos/7 iso9660 defaults 0 0" >> /etc/fstab
[root@pxe-s html]# mount -a

提示:使用浏览器访问http://192.168.33.11/centos/7/就可以看通过http服务共享出来的文件。

(3)cfg应答文件配置

提示

  • 使用system-config-kickstart生成配置文件,配置如下:

    [root@pxe-s ~]# yum -y install system-config-kickstart
    [root@pxe-s ~]# system-config-kickstart   # 注意执行这条命令时,建议在图形化界面打开终端执行

    上述命令执行后,会弹出对话窗口,根据实际情景进行选择配置,最后对文件进行命名保存。

  • 直接使用已安装完成系统生成cfg文件进行配置修改。

此处cfg配置文件,将使用第二种方式。

[root@pxe-s ~]# mkdir /var/www/html/ksdir/7/    #创建cfg文件保存的目录
[root@pxe-s 7]# cp /root/anaconda-ks.cfg /var/www/html/ksdir/7/ks_7.cfg #将应答文件复制到该目录

提示:使用浏览器访问http://192.168.33.11/ksdir/7/ks_7.cfg查看cfg文件发现没有权限,执行下面命令。

[root@pxe-s 7]# chmod 644 ks_7.kfg 

接着根据实际需求来进行应答文件的修改。

[root@pxe-s 7]# vim ks_7.kfg 
#version=DEVEL
# System authorization information
url --url=http://192.168.33.11/centos/7/   #指定共享文件的访问路径
# Use graphical install     使用图形化或文本方式进行安装
text
# 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 --addsupport=zh_CN.UTF-8

# Network information
network  --bootproto=dhcp --device=ens33 --onboot=on --activate
network  --hostname=test

# Root password
rootpw --iscrypted $6$aeMqL.CqTTsyYqmk$yp7FXlkgik8BiuLbhHokdzuPxrnCZSA1BNsSDwBbl0R7YGkPVXoQUiDTchWTtIQ3wN8NB0zteUah0sLs/.5Bm1
# System services
services --disabled="chronyd"
# System timezone
timezone Asia/Shanghai --isUtc --nontp
user --name=yanlibo --password=$6$qsOlUxJ.F1KLKfB3$Ljsq.h5I5KXN6/abgyN3BraBWtSf5X1d4cnEtCjd9vjPLMPjtmcptMORaVSCdMAd2lpnDCUzo/.iUQFTDS2zX/ --iscrypted --gecos="yanlibo"
# X Window System configuration information
xconfig  --startxonboot
# System bootloader configuration
bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=sda
# Partition clearing information
zerombr
clearpart --none --initlabel
#Disk parttion clearing infomation
part /data --fstype="xfs" --ondisk=sda --size=10240
part / --fstype="xfs" --ondisk=sda --size=20480
part /boot --fstype="xfs" --ondisk=sda --size=1024
part swap --fstype="swap" --ondisk=sda --size=2048

%packages
@base
@compat-libraries
@core
@development
@fonts
@gnome-desktop
@guest-agents
@guest-desktop-agents
@input-methods
@internet-browser
@print-client
@security-tools
@x11
autofs
%end

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

%end

%anaconda
pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty
pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok
pwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty
%end

%post
systemctl disable initial-setup
systemctl set-default multi-user.target
mkdir /root/.ssh
cat > /root/.ssh/authorized_keys <<EOF
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCnXtjOKNpzPKfnNNf4JWTUzb4Ao/yBReLowWjLsCgqGXVW6Kqdsg/3qYBgiNQv3/ANkBA6j2q02n2D5898aUHIfZojA0X2EoauGfa7SpGmGRj8RiBNIyrGTsIOgDpLDuEVOH52v1hPJVSxZ17HOR1G+p5ARynmjkfJZR+w9YdZaUGnT+XCcrewfFDKNvh9otK4blq9GUt06NfNb2YanF/Uwd/jIFnyJ5zRXI6cr8M7Z2OHjf9eo3GteAiqDPH9aDucDnSJuIhoCVhZ4OQUaNV17wE3UY3B/1sp7i1+s3PMR0NZ0A8mvJ2Uf40fYm2Pu3/KyyZtWNK6eZMn+YjwRZvL root@zabbix-server
EOF
%end
%post
rm -rf /etc/yum.repos.d/*
cat > /etc/yum.repos.d/base.repo <<EOF
[base]
name=base
baseurl=http://192.168.33.11/centos/7
enabled=1
gpgcheck=0
EOF
%end

上述cfg配置文件已经时修改之后的,仅供参考。修改配置文件后,可以使用cat -A 检测文件行尾是否有其他字符。也可以使用ksvalidator对脚本检查,但是无法检查语法错误。

4.提供PXE服务需要用到的bootloader和相关配置文件

(1)在TFTP目录下新建一个pxelinux.cfg目录

[root@pxe-s ~]# mkdir /var/lib/tftpboot/pxelinux.cfg/

(2)复制相关文件到tftp服务默认工作目录并对菜单文件进行自定义配置

提示:菜单文件由syslinux软件包,建议先检查该软件包是否安装,并查找列出该软件包安装完后生成的文件找到对应文件。

[root@pxe-s ~]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
[root@pxe-s tftpboot]# cp /usr/share/syslinux/menu.c32 /var/lib/tftpboot/
[root@pxe-s tftpboot]# cp /centos7/isolinux/{vmlinuz,initrd.img} /var/lib/tftpboot/ #复制内核文件到tftp默认工作目录
[root@pxe-s tftpboot]# cp /centos7/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default  
[root@pxe-s tftpboot]# vim pxelinux.cfg/default
default menu.c32
timeout 600

menu title Auto Install   CnetOS

label desktop
menu label Install ^Desktop CentOS 7
kernel vmlinuz
append initrd=initrd.img ks=http://192.168.33.11/ksdir/7/ks_7.kfg

label mini
menu label Install ^Mini Cent OS 7
kernel vmlinuz
append initrd=initrd.img ks=http://192.168.33.11/ksdir/7/ks_7_mini.kfg

label local
menu label Boot from ^local drive
localboot 0xffff

menu end

提示:上述配置已经是修改完成后的。最后完成此步操作后,TFTP默认工作目录下:有1个目录,5个文件。如下图:

 

5.所有配置成功完成后,将客户机设置为从网卡启动,即可实现PXE 无人值守安装CentOS 7操作系统。

提示:使用CentOS 6来作为PXE服务实现无人值守批量安装系统,需要注意tftp server和xinetd服务,pxlinux.0这个文件由syslinux-nonlinux软件包提供,在TFTP服务默认工作目录下面,需要initrd.img、vmlinuz、pxelinux.0、pxelinux.cfg/default、splash.jpg、boot.msg、vesamenu.c32文件。

6.在一台CentOS7主机使用PXE实现既可以安装CentOS 6又可以安装CentOS 7

(1)准备两个yum源,即CentOS6和CentOS7。

(2)安装dhcp、tftp-server、syslinux、httpd服务并进行配置

(3)使用http服务对光盘文件进行共享,需在/var/www/html下面新建两个目录(建议创建centos/6和centos/7),然后设置挂载;cfg文件也需要进行共享配置,在/var/www/html下面新建两个目录(建议创建/ksdir/6和/ksdir/7)。

(4)tftp服务新建两个目录,分别为centos6和centos7存放各自的内核文件。

(5)修改pxelinux.cfg/default文件,注意指定内核文件所在位置。最后tftp服务默认工作目录下面文件如图所示。

以上是关于PXE+Kickstack实现无人值守安装CentOS 7操作系统的主要内容,如果未能解决你的问题,请参考以下文章

PXE实现无人值守安装

PXE高效批量网络装机实现Kickstart无人值守安装

如何不费吹灰之力的装机?部署PXE实现Kickstart无人值守安装 — 装机界的最强王者

PXE配置Kickstart实现高效批量安装——实现无人值守自动安装

PXE网络装机实现kickstart无人值守装机

PXE 网络装机——实现无人值守批量装机