【Linux运维培训】PXE预启动执行环境实践详解!
老男孩IT教育
技术博客
2022年8月10日 17:41
工作环境中,想要安装Linux但是计算机没有光驱,或者是有大批量的计算机需要同时安装Linux, 就需要通过部署环境 PXE + DHCP + TFTP + HTTP + kickstart 方式来实现了
工作环境中,想要安装Linux但是计算机没有光驱,或者是有大批量的计算机需要同时安装Linux, 就需要通过部署环境 PXE + DHCP + TFTP + HTTP + kickstart 方式来实现了
PXE协议详解
PXE,预启动执行环境(Preboot eXecution Environment,PXE,也被称为预执行环境)提供了一种使用网络接口(Network Interface)启动计算机的机制
这种机制让计算机的启动可以不依赖本地数据存储设备(如硬盘)或本地已安装的操作系统
PXE(Pre-boot Execution Environment)是由Intel设计的协议,它可以使计算机通过网络启动
协议分为client和server两端,支持工作站通过网络从远端服务器下载映像,并由此支持来自网络的操作系统的启动过程,其启动过程中,终端要求服务器分配IP地址,再用TFTP(trivial file transfer protocol)或MTFTP(multicast trivial file transfer protocol)协议下载一个启动软件包到本机内存中并执行,由这个启动软件包完成终端基本软件设置,从而引导预先安装在服务器中的终端操作系统
PXE工作原理
①PXE client从自己的PXE网卡启动,向本网络中的DHCP服务器请求ip地址
②DHCP服务器收到dhcp请求后,分配dhcp地址池中ip给PXE client
③PXE client向本网络中的TFTP服务器索取bootstarp文件
④PXE client取得bootstarp文件后之执行pxelinux.0文件引导,使用pxelinux环境来引导os安装程序
⑤PXE client然后读取pxelinux.cfg文件夹中的default(isolinux.cfg)引导文件,通过TFTP服务器加载内核vmlinuz和根文件系统(boot.msg,vesamenu.c32,initrd.img,splash.jpg),通过http服务器加载ks.cfg引导文件
⑥启动linux内核完成安装
在上图中,PXE client是需要安装Linux的计算机,TFTP Server和DHCP Server运行部署在在PXE Server端
Bootstrap文件、配置文件、Linux内核以及Linux根文件系统都放置在Linux Server上TFTP服务器的根目录下
| PXE必要条件
1、pxe client必须支持pxe用户端功能,并且开机时选择网络启动,这样系统才能以网络的方式进入pxe启动程序
2、pxe服务器必须至少提供DHCP及TFTP的服务才行,且其中DHCP服务器必须能够除未pxe client分配ip地址外,还需告知tftp所在的位置(即pxelinux.0的文件位置)
TFTP服务器则为pxe client 提供bootloader 及 kernel 等重要文件下载服务
4、使用NFS/HTTP/FTP之一的服务器提供pxe client所需程序及软件来源等通讯协议
| PXE工作流程图
PXE安装DHCP
动态主机设置协议(Dynamic Host Configuration Protocol,DHCP)是一种使网络管理员能够集中管理和自动分配IP网络地址的通信协议,使用UDP协议工作,DHCP使用统一端口作为BOOTP:
服务器端使用67/udp,客户端使用68/udp。主要有两个用途:
①用于内部网络或网络服务供应商自动分配IP地址给用户
②用于内部网络管理员作为对所有电脑作中央管理的手段
DHCP协议的工作流程:
①客户端在局域网广播DHCPDISCOVER报文,请求获得ip地址、网关、dns地址 等信息;
②DHCP服务器收到DHCPDISCOVER报文后 ,发送DHCPOFFER 报文进行响应;
③客户端收到DHCPOFFER报文后,发送DHCPREQUEST 报文进行请求;
④最终DHCP 服务器发送 DHCPACK报文进行确认
| 安装配置DHCP
# 安装 DHCP 服务
yum install -y dhcp
# 调整配置文件
cat > /etc/dhcp/dhcpd.conf <<'EOF'
# dhcpd.conf
#
option domain-name "oldboy.com"; # 全局定义域名
option domain-name-servers 223.5.5.5; # 全局定义dns 地址
default-lease-time 600; # 全局定义默认租约期限
max-lease-time 7200; # 全局定义最长租约期限
log-facility local7; # 文件属性
subnet 10.0.0.0 netmask 255.255.255.0 { # 这里改为分配的网段和掩码
range 10.0.0.100 10.0.0.200; # 改为分配的IP的范围
option routers 10.0.0.2; # 如果有网关,这里改为网关地址
next-server 10.0.0.3; # 添加 tftp服务器地址
filename="pxelinux.0"; # 告诉TFTP目录下的bootstarp文件
}
EOF
| 启动dhcp并验证dhcpd进程是否处于监听状态
# 启动dhcp
systemctl start dhcpd.service
systemctl enable dhcpd.service
# 验证dhcpd是否启动
ps aux | grep dhcpd
PXE 安装 TFTP
简单文件传输协议也称小型文件传输协议(Trivial File Transfer Protocol, TFTP),工作在UDP/69 端口,是一种于1981年在RFC 783中定义的简化的文件传输协议(FTP)
瞬时(非独立)守护进程:他们无需定义在运行级别下,只需要一次性的定义xinetd的运行级别
xinetd——为那些极少接受用户请求的服务,专门提供监听功能,如 监听tftpd进程
独立(standlone)守护进程 :能自我管理,无须xinet 提供监听服务的进程
| 安装TFTP
安装TFTP和xinetd
# yum install xinetd tftp-server -y
相关目录
/etc/xinetd.d/tftp # 配置文件路径
/var/lib/tftpboot # 默认tftp存储目录
修改配置文件
# vi /etc/xinetd.d/tftp
· · ·
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /var/lib/tftpboot # 默认tftp存储目录
disable = no # no 表明tftp处于启用状态 ,yes 表示tftp处于禁用状态
per_source = 11
cps = 100 2
flags = IPv4
}
启动服务
# systemctl start xinetd.service
# systemctl enable xinetd.service
# ss -tunl | grep 69
udp UNCONN 0 0 *:69 *:*
| 使用 syslinux 提供的bootstart
# 安装syslinux
yum install syslinux -y
# 相关目录文件
/usr/share/syslinux # pxelinux.0 文件存储目录
# 复制pxelinux.0到 /var/lib/tftpboot 目录
cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
# 挂载镜像光盘
mkdir /oldboyedu/iso/centos -p
mount /dev/cdrom /oldboyedu/iso/centos/
| 配置pxelinux.cfg 文件
# 创建pxelinux.cfg 文件夹
mkdir /var/lib/tftpboot/pxelinux.cfg
# 把isolinux.cfg引导文件拷贝到tftpd存储目录下的pxelinux.cfg文件中,并命名为default
cp /oldboyedu/iso/centos/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
# 修改linux内核引导文件
# 于/var/lib/tftpboot/pxelinux.cfg/default的第61行加入
label linux
kernel vmlinuz
menu label ### PXE Install CentOS 7 ###
append initrd=initrd.img inst.repo=http://10.0.0.3/centos/os/
inst.ks=http://10.0.0.3/ks.cfg
| 把内核及根文件拷贝到tftpd存储目录
cp /oldboyedu/iso/centos/images/pxeboot/{initrd.img,vmlinuz} /var/lib/tftpboot/
cp /oldboyedu/iso/centos/isolinux/{boot.msg,vesamenu.c32,splash.png} /var/lib/tftpboot/
PXE环境HTTPD部署
创建kickstart文件方式:
①复制模板 /root/anaconda-ks.cfg ,而后使用vim编辑配置
②使用system-config-kickstart 来生成,建议也使用/root/anaconda-ks.cfg 作为模板来进行
ksvalidator 查看ks文件语法是否正确
kickstat文件的组成部分:
1、命令段:用于配置系统 ,如:install ,firewall, part,lv 等
2、软件包段%packages;指定要安装的程序包组(@组包名)及程序包(程序包名),每行一个 ;在程序包之前加 “-”号,表示不希望安装
3、%pre %post脚本段:安装过程开始之前、后执行的安装预备式脚本
| 关闭防火墙
# 永久关闭firewalld防火墙
systemctl stop firewalld
systemctl disable firewalld
# 永久关闭SELinux防火墙
setenforce 0
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/sysconfig/selinux
| httpd安装
# 安装httpd
yum install httpd -y
# 启动httpd
systemctl start httpd.service
systemctl enable httpd.service
# 拷贝模板到/var/www/html 目录,并重命名为ks.cfg
cp /root/anaconda-ks.cfg /var/www/html/ks.cfg
# 分配权限,为pxe client引导安装使用
chmod o+r /var/www/html/ks.cfg
# 拷贝安装系统
mkdir /var/www/html/centos/os -p
cp -rp /oldboyedu/iso/centos/* /var/www/html/centos/os/
# root密码加密,“1”为密码
perl -e 'print crypt("1",q($6$gWOj2dVM8nQl2OTG)),"\n"'
以/root/anaconda.cfg 为模板,配置ks.cfg文件 ,配置repo url 和 ks.cfg
ks引用格式如下:
| 调整配置文件
cat >/var/www/html/ks.cfg<<'EOF'
#platform=x86, AMD64, or Intel EM64T
#version=DEVEL
# Install OS instead of upgrade
install
# Keyboard layouts
keyboard --vckeymap=us --xlayouts='us'
# Root password
rootpw --iscrypted $6$gWOj2dVM8nQl2OTG$5ZOKI81g1N82ygU95hT5fMZFBKRKCWXksYi/jkfCWfNXtI2mioQs/nDNBgWbha8dml2BiDjARyUtXITZXe6pr1
# Use network installation
url --url="http://10.0.0.3/centos/os" //指定网络安装的服务地址及目录
# System language
lang en_US.UTF-8 --addsupport=zh_CN.UTF-8 //语言
# Firewall configuration
firewall --disabled
# System authorization information
auth --useshadow --passalgo=sha512
# Use graphical install
graphical
firstboot --disable
# SELinux configuration
selinux --disabled
# Network information
network --bootproto=dhcp --device=ens33 --onboot=yes --noipv6 --activate //启动并激活网卡的名称
# Reboot after installation
reboot
# System timezone
timezone Asia/Shanghai --isUtc --nontp //设置时区
# System bootloader configuration
bootloader --location=mbr --boot-drive=sda
# Clear the Master Boot Record
zerombr //清除mbr信息
# Partition clearing information
clearpart --all --initlabel
# Disk partitioning information //磁盘为20G的硬盘,这里根据自己来进行修改
part /boot --fstype="xfs" --size=1024
part / --fstype="xfs" --size=17408
part swap --fstype="swap" --size=1024
%packages
@base
@compat-libraries
@desktop-debugging
@development
@dial-up
@fonts
@gnome-apps
@gnome-desktop
@legacy-x
@platform-devel
@remote-desktop-clients
@x11
vinagre
%end
EOF
# 安装ksvalidator 软件
yum -y install pykickstart
# ksvalidator验证ks.cfg语法是否正确,如有报错去掉中文注释即可
ksvalidator /var/www/html/ks.cfg
| ks.cfg及repo验证
注:ks.cfg若不能正常打开,确认是否有读权限
注:若不能显示以上连接方式,确认httpd配置文件中,是否开启相关选项
至此,PXE服务器环境部署完成,出现问题时,一般需要查看系统日志,如:/var/log/messages, 通过日志报错信息进行解决
centos PXE环境测试,安装,启动
配置PXE client 客户端,网络需与PXE服务器处于同一网段 10.0.0.0/24
客户机操作系统为 Linux系统的 CentOS 7 64位版本
开启虚拟机,选择第一个选项
确认为自动分区后点击开始安装
设置 root 密码
系统重启
安装完成
总结:在本文中,我们通过一些示例学习了如何去部署PXE和对PXE的基础使用,希望能够给你们带来帮助。
