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 的工作流程如下:
- 网卡上的 PXE 芯片有 512 字节,存放了 DHCP 和 TFTP 的客户端;
- 启动计算机并选择网卡启动;
- PXE 上的 DHCP 客户端会向 DHCP 服务器申请 IP 地址;
- DHCP 服务器分配一个 IP 址地给它,同时 DHCP 配置文件还告诉 PXE TFTP 服务器的地址,让其并去下载一个
pxelinux.0
的文件; pxelinux.0
告诉 PXE 要下载的配置文件是pxelinux.cfg
目录下面的default
;- 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 服务所在主机同网络的网卡,不用指定镜像,直接启动,进入如下界面:
接下来系统的安装将会自动进行,等待安装完成自动重启即可~~~
参考:
评论区