配置DHCP+TFTP+PXE+KICKSTART自动化安装CentOS 7

配置DHCP+TFTP+PXE+KICKSTART自动化安装CentOS 7

微信搜索 zze_coding 或扫描 👉 二维码关注我的微信公众号获取更多资源推送:

PXE 简介

PXE,全名 “Pre-boot Execution Environment”,即预启动执行环境。PXE 通过网络接口启动计算机,不依赖本地存储设备(如硬盘)或本地已安装的操作系统,它时由 Intel 和 Systemsoft 公司于 1999 年 9 月 20 日公布的技术。

PXE 工作于 Client/Server 的模式下,PXE 客户端会调用网际协议(IP)、用户数据报协议(UDP)、动态主机设定协议(DHCP)、小型文件传输协议(TFTP)等网络协议。

PXE 客户端(Client)这个术语是指机器在 PXE 启动过程中的角色。一个 PXE 客户端可以是一台服务器、笔记本电脑或者其他装有 PXE 启动代码的机器(如我们电脑的网卡)。

PXE 的工作流程如下:

  1. 网卡上的 PXE 芯片有 512 字节,存放了 DHCP 和 TFTP 的客户端;
  2. 启动计算机并选择网卡启动;
  3. PXE 上的 DHCP 客户端会向 DHCP 服务器申请 IP 地址;
  4. DHCP 服务器分配一个 IP 址地给它,同时 DHCP 配置文件还告诉 PXE TFTP 服务器的地址,让其并去下载一个 pxelinux.0 的文件;
  5. pxelinux.0 告诉 PXE 要下载的配置文件是 pxelinux.cfg 目录下面的 default
  6. PXE 依据下载的配置文件的内容下载启动必须的文件,并通过 kickstart 配置文件开始安装系统;

服务安装及配置

下面所有服务程序的安装都是在 IP 为 10.0.1.202 的主机上进行的。

DHCP

1、安装:

$ yum install dhcp -y

2、配置:

$ cat /etc/dhcp/dhcpd.conf
# option 用来指定分配出去的除了地址和掩码以外的其它属性, 比如网关、DNS 服务器
# 此处的 option 放在全局,所以对所有子网以及保留地址都生效,作用范围越小,优先级越高,若子作用域未配置,则会从上级作用域继承
# domain-name 用来指定搜索域
option domain-name "zze.xyz";
# domain-name-servers 用来指明域名服务器
option domain-name-servers 10.0.1.2, 223.5.5.5, 114.114.114.114;
# 默认租约期限,单位为秒
default-lease-time 600;
# 最大租约期限,单位为秒
max-lease-time 7200;
# 指定日志设施
log-facility local7;

# 为特定主机分配子网外的地址
# host ftpserver {
#     # 指定主机的 MAC 地址
#     hardware ethernet 00:50:56:c0:00:01;
#     # 分配特定的地址
#     fixed-address 10.0.1.101;
# }

# 每一个 subnet 用来定义一个子网,首先要为当前主机所在网络定义子网
subnet 10.0.1.0 netmask 255.255.255.0 {
    # 定义 121~140 的地址池,一共 20 个地址
    range 10.0.1.121 10.0.1.140;
}

3、启动:

$ systemctl start dhcpd

4、客户端安装:

$ yum install dhclient -y

5、测试使用客户端强行分配地址:

$ dhclient -d
Internet Systems Consortium DHCP Client 4.2.5
Copyright 2004-2013 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/

Listening on LPF/eth0/00:0c:29:87:f2:6b
Sending on   LPF/eth0/00:0c:29:87:f2:6b
Sending on   Socket/fallback

DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 6 (xid=0x6a8e879d)
DHCPREQUEST on eth0 to 255.255.255.255 port 67 (xid=0x6a8e879d)
DHCPOFFER from 10.0.1.202
DHCPACK from 10.0.1.202 (xid=0x6a8e879d)
bound to 10.0.1.121 -- renewal in 231 seconds.
No DHCPOFFERS received.
No working leases in persistent database - sleeping.

6、在 DHCP 服务端记录着已分配的地址:

$ cat /var/lib/dhcpd/dhcpd.leases
# The format of this file is documented in the dhcpd.leases(5) manual page.
# This lease file was written by isc-dhcp-4.2.5

server-duid "\000\001\000\001&#\"\202\000\014) \302\250";

lease 10.0.1.121 {
  starts 5 2020/04/10 12:30:48;
  ends 5 2020/04/10 12:40:48;
  cltt 5 2020/04/10 12:30:48;
  binding state active;
  next binding state free;
  rewind binding state free;
  hardware ethernet 00:0c:29:87:f2:6b;
}

7、修改客户端的网卡使用 DHCP 获取地址,重启网卡,查看分配的地址以及 DNS 服务器:

$ systemctl restart network
$ ifconfig | grep 'inet ' 
        inet 10.0.1.121  netmask 255.255.255.0  broadcast 10.0.1.255
        inet 127.0.0.1  netmask 255.0.0.0

$ cat /etc/resolv.conf 
# Generated by NetworkManager
search zze.xyz
nameserver 10.0.1.2
nameserver 223.5.5.5
nameserver 114.114.114.114

TFTP

1、安装:

$ yum install xinetd tftp-server -y

2、启动:

$ vim /etc/xinetd.d/tftp 
 disable         = no

$ systemctl restart xinetd

3、复制测试文件到 tftp 服务的共享目录:

$ cp /etc/fstab /var/lib/tftpboot

4、安装客户端:

$ yum install tftp -y
$ tftp 10.0.1.202
tftp> get fstab

5、测试获取成功后删除测试文件。

PXE

1、安装 syslinux 获取引导文件复制到 tftp 的共享目录:

$ yum -y install syslinux
$ cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/

2、挂载系统光盘镜像,将需要的文件复制到 tftp 共享根目录:

$ mount -r /dev/cdrom /mnt/
$ cd /mnt/images/pxeboot
$ cp vmlinuz initrd.img /var/lib/tftpboot/
$ cp /usr/share/syslinux/{chain.c32,mboot.c32,menu.c32,memdisk} /var/lib/tftpboot/

3、用 CentOS 7 光盘提供一个 yum 源:

$ mkdir /data/centos7 -p
$ mount --bind /mnt/  /data/centos7
$ yum install nginx -y
$ vim /etc/nginx/conf.d/centos7.conf 
server {
        listen 80 default_server;
        root /data/;

        location / {
                autoindex on;
        }
}
$ systemctl start nginx

4、编写引导配置文件:

$ mkdir /var/lib/tftpboot/pxelinux.cfg
$ vim /var/lib/tftpboot/pxelinux.cfg/default 
default menu.c32
  prompt 0
  timeout 30
  MENU TITLE CentOS 7 PXE Menu

  LABEL centos7
  MENU LABEL Install CentOS 7 x86_64
  KERNEL vmlinuz
  APPEND initrd=initrd.img inst.repo=http://10.0.1.202/centos7/ inst.ks=http://10.0.1.202/centos7.cfg net.ifnames=0 biosdevname=0 ksdevice=eth0

5、修改 DHCP 配置文件并重启 DHCP 服务:

$ cat /etc/dhcp/dhcpd.conf
option domain-name "zze.xyz";
option domain-name-servers 10.0.1.2, 223.5.5.5, 114.114.114.114;
default-lease-time 600;
max-lease-time 7200;
log-facility local7;

subnet 10.0.1.0 netmask 255.255.255.0 {
    range 10.0.1.121 10.0.1.140;
        option routers 10.0.1.2;
        filename "pxelinux.0";
        next-server 10.0.1.202;
}

$ systemctl restart dhcpd

6、在站点目录下准备 kickstart 文件,文件名为 centos7.cfg,内容如下:

$ vim /data/centos7.cfg
# 告知这是一次安装程序
install                                                   
# 设置系统键盘类型为 us
keyboard 'us'                                             
# root密码
rootpw root1234     					
# 通过 ftp 或 http 从远程服务器安装的地址
url --url="http://10.0.1.202/centos7/"                
# 设置安装过程中使用的语言字符集
lang en_US                                                
# 系统认证信息,设置密码加密方式为 sha512,启用shadow文件
auth  --useshadow  --passalgo=sha512           
# 使用文本模式安装
text                                                      
# 关闭selinux
selinux --disabled                                        
# 不使用图形化界面
skipx

# 关闭防火墙
firewall --disabled                                       
# 配置网卡
network  --bootproto=dhcp --device=eth0                  
# 设置安装完成后重启,必须存在
reboot                                                    
# 设置时区为亚洲上海
timezone Asia/Shanghai
# 指定引导记录被写入的位置
bootloader --location=mbr                                 
# 清除 mbr 引导信息
zerombr                                                   
# 清空分区,清空所有分区
clearpart --all --initlabel                              
# # 为分区设置文件系统类型为 xfs
part /boot --fstype="xfs"  --size=1024
part swap --fstype="swap"  --size=1024
part / --fstype="xfs" --grow  --size=1

# 这一部分是要安装的一些包,以 %packages 开头,以 %end 结束
%packages                               
@^minimal
@core
@development
kexec-tools
wget
vim
%end

# 以 %pre 开头,以 %end 结束,在安装完系统之前执行的相关 Linux 命令、脚本
%pre
%addon com_redhat_kdump --enable --reserve-mb='auto'
%end

# 安装后执行的命令,如果要一键化搭建集群,这里可以执行写好的 shell 或 ansible 剧本进行搭建 
# 以 %post 开头,以 %end 结束,在安装完系统之后执行的相关 Linux 命令、脚本
%post                                  
systemctl disable postfix.service      
%end

测试

新建自定义虚拟机,内存设为 2G 以上,并将网卡设为同 DHCP 服务所在主机同网络的网卡,不用指定镜像,直接启动,进入如下界面:

image.png

接下来系统的安装将会自动进行,等待安装完成自动重启即可~~~

参考:

Copyright: 采用 知识共享署名4.0 国际许可协议进行许可

Links: https://www.zze.xyz/archives/centos7-dhcp-tftp-pxe-kickstart.html

Buy me a cup of coffee ☕.