【Linux运维培训】PXE预启动执行环境实践详解!

作者:IT科技类资讯 来源:应用开发 浏览: 【】 发布时间:2025-11-04 00:19:48 评论数:

  工作环境中,运预启想要安装Linux但是维培计算机没有光驱,或者是训P行环有大批量的计算机需要同时安装Linux, 就需要通过部署环境 PXE + DHCP + TFTP + HTTP + kickstart 方式来实现了

  PXE协议详解

  PXE,预启动执行环境(Preboot eXecution Environment,动执PXE,境实践详解也被称为预执行环境)提供了一种使用网络接口(Network Interface)启动计算机的运预启机制

  这种机制让计算机的启动可以不依赖本地数据存储设备(如硬盘)或本地已安装的操作系统

  PXE(Pre-boot Execution Environment)是由Intel设计的协议,它可以使计算机通过网络启动

  协议分为client和server两端,维培支持工作站通过网络从远端服务器下载映像,训P行环并由此支持来自网络的动执操作系统的启动过程,其启动过程中,境实践详解终端要求服务器分配IP地址,运预启再用TFTP(trivial file transfer protocol)或MTFTP(multicast trivial file transfer protocol)协议下载一个启动软件包到本机内存中并执行,维培由这个启动软件包完成终端基本软件设置,训P行环从而引导预先安装在服务器中的动执终端操作系统

  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 ,b2b信息网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的基础使用,希望能够给你们带来帮助。