什么是PXE
PXE(Pre-boot Execution Environment,预启动执行环境)是由Intel公司开发的最新技术,工作于Client/Server的网络模式,支持工作站通过网络从远端服务器下载映像,并由此支持通过网络启动操作系统,在启动过程中,终端要求服务器分配IP地址,再用TFTP(trivial file transfer protocol)或MTFTP(multicast trivial file transfer protocol)协议下载一个启动软件包到本机内存中执行,由这个启动软件包完成终端基本软件设置,从而引导预先安装在服务器中的终端操作系统。
严格来说,PXE 并不是一种安装方式,而是一种引导方式。进行 PXE 安装的必要条件是在要安装的计算机中必须包含一个 PXE 支持的网卡(NIC),即网卡中必须要有 PXE Client。PXE 协议可以使计算机通过网络启动。此协议分为 Client端和 Server 端,而PXE Client则在网卡的 ROM 中。当计算机引导时,BIOS 把 PXE Client 调入内存中执行,然后由 PXE Client 将放置在远端的文件通过网络下载到本地运行。运行 PXE 协议需要设置 DHCP 服务器和 TFTP 服务器。DHCP 服务器会给 PXE Client(将要安装系统的主机)分配一个 IP 地址,由于是给 PXE Client 分配 IP 地址,所以在配置 DHCP 服务器时需要增加相应的 PXE 设置。此外,在 PXE Client 的 ROM 中,已经存在了 TFTP Client,那么它就可以通过 TFTP 协议到 TFTP Server 上下载所需的文件了。
PXE工作流程
1. PXE Client 从自己的PXE网卡启动,向本网络中的DHCP服务器索取IP;
2. DHCP 服务器返回分配给客户机的IP 以及PXE文件的放置位置(该文件一般是放在一台TFTP服务器上) ;
3. PXE Client 向本网络中的TFTP服务器索取pxelinux.0 文件;
4. PXE Client 取得pxelinux.0 文件后之执行该文件;
5. 根据pxelinux.0 的执行结果,通过TFTP服务器加载内核和文件系统;
6. 进入安装画面, 此时可以通过选择HTTP、FTP、NFS 方式之一进行安装;
开始部署
环境介绍
[root@master ~]# cat /etc/redhat-release
CentOS Linux release 7.8.2003 (Core)
[root@master ~]# uname -r
3.10.0-1127.el7.x86_64
[root@master ~]# uname -m
x86_64
[root@master ~]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.0.0.60 netmask 255.255.255.0 broadcast 10.0.0.255
inet6 fe80::20c:29ff:fe44:15d7 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:44:15:d7 txqueuelen 1000 (Ethernet)
RX packets 19278 bytes 24593071 (23.4 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 6365 bytes 478120 (466.9 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.60 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::20c:29ff:fe44:15e1 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:44:15:e1 txqueuelen 1000 (Ethernet)
RX packets 60890 bytes 3685732 (3.5 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 260684 bytes 389641148 (371.5 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 108 bytes 5724 (5.5 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 108 bytes 5724 (5.5 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
安装DHCP服务
[root@master ~]# yum install dhcp -y
[root@master ~]# vim /etc/dhcp/dhcpd.conf
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.100 192.168.1.200; #可分配的起始IP-结束IP
option subnet-mask 255.255.255.0; #设定netmask
default-lease-time 21600; #设置默认的IP租用期限
max-lease-time 43200; #设置最大的IP租用期限
next-server 192.168.1.60; #告知客户端TFTP服务器的ip
filename "pxelinux.0";
}
[root@master ~]# systemctl start dhcpd
安装TFTP
[root@master ~]# yum -y install tftp-server xinetd
[root@master ~]# vim /etc/xinetd.d/tftp
disable = no
#将原先的disable = yes更改为disable = no
[root@master ~]# systemctl start xinetd.service
引导配置
Syslinux是一个功能强大的引导加载程序,而且兼容各种介质。SYSLINUX是一个小型的Linux操作系统,它的目的是简化首次安装Linux的时间,并建立修护或其它特殊用途的启动盘。如果没有找到pxelinux.0这个文件,可以安装一下。
[root@master ~]# yum -y install syslinux
[root@master ~]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
[root@master ~]# cd /var/lib/tftpboot/ 切换到站点中查看
[root@master tftpboot]# ll
total 28
-rw-r--r-- 1 root root 26759 2021-03-03 21:36 pxelinux.0
[root@master tftpboot]# mount /dev/cdrom /mnt/
[root@master tftpboot]# cd /mnt/images/pxeboot/
[root@master pxeboot]# cp initrd.img vmlinuz /var/lib/tftpboot/
[root@master pxeboot]# mkdir /var/lib/tftpboot/pxelinux.cfg
[root@master tftpboot]# cd /var/lib/tftpboot/pxelinux.cfg
[root@master pxelinux.cfg]# touch default
[root@master pxelinux.cfg]# cd /mnt/
[root@master mnt]# cd isolinux/
[root@master isolinux]# cp isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
[root@master isolinux]# cp * /var/lib/tftpboot/
新建虚拟机通过网络启动
kickstart实现无人值守
Kickstart是一种无人值守的安装方式。它的工作原理是在安装过程中记录人工干预填写的各种参数,并生成一个名为ks.cfg的文件。如果在自动安装过程中出现要填写参数的情况,安装程序首先会去查找ks.cfg文件,如果找到合适的参数,就采用所找到的参数;如果没有找到合适的参数,便会弹出对话框让安装者手工填写。所以,如果ks.cfg文件涵盖了安装过程中所有需要填写的参数,那么安装者完全可以只告诉安装程序从何处下载ks.cfg文件,然后就去忙自己的事情。等安装完毕,安装程序会根据ks.cfg中的设置重启/关闭系统,并结束安装。
创建ks.cfg文件,生成kickstart配置文件的三种方法:
方法1、 每安装好一台Centos机器,Centos安装程序都会创建一个kickstart配置文件,记录你的真实安装配置。如果你希望实现和某系统类似的安装,可以基于该系统的kickstart配置文件来生成你自己的kickstart配置文件。(生成的文件名字叫anaconda-ks.cfg位于/root/anaconda-ks.cfg)
方法2、Centos提供了一个图形化的kickstart配置工具。在任何一个安装好的Linux系统上运行该工具,就可以很容易地创建你自己的kickstart配置文件。kickstart配置工具命令为redhat-config-kickstart(RHEL3)或system-config-kickstart(RHEL4,RHEL5).网上有很多用CentOS桌面版生成ks文件的文章,如果有现成的系统就没什么可说。但没有现成的,也没有必要去用桌面版,命令行也很简单。
方法3、阅读kickstart配置文件的手册。用任何一个文本编辑器都可以创建你自己的kickstart配置文件。
[root@master ~]# yum -y install httpd
[root@master ~]# mkdir /var/www/html/{centos,ks_config}
[root@master ~]# mount /dev/cdrom /var/www/html/centos/
[root@master ~]# systemctl start httpd.service
浏览器测试一下(能访问接着往下走)
生成kickstart配置文件(这里我们找一台已经装好的系统拷贝anaconda-ks.cfg 修改修改)
[root@master ~]# cat anaconda-ks.cfg >/var/www/html/ks_config/ks.cfg
[root@master ~]# egrep -v "^#" /var/www/html/ks_config/ks.cfg
install
auth --enableshadow --passalgo=sha512
url --url="http://192.168.1.60/centos/"
text
firstboot --enable
ignoredisk --only-use=sda
keyboard --vckeymap=us --xlayouts='us'
lang en_US.UTF-8
network --bootproto=dhcp --device=link --onboot=yes
network --hostname=localhost.localdomain
rootpw --iscrypted $6$OugkG6HWAQL6yRRP$mIfoCTd7II7bDhEjOiOJ0z.jOy3gEvNkM5eZEzjwsOPGVjxDEkaqrtJgEPpRU3jZtXXCDgP/M9hMZz.ftCWki0
services --disabled="chronyd"
timezone Asia/Shanghai --isUtc --nontp
bootloader --location=mbr --boot-drive=sda
clearpart --none --initlabel
part /boot --fstype="xfs" --ondisk=sda --size=200
part pv.253 --fstype="lvmpv" --ondisk=sda --size=20279
volgroup centos --pesize=4096 pv.253
logvol swap --fstype="swap" --size=869 --name=swap --vgname=centos
logvol / --fstype="xfs" --size=19403 --name=root --vgname=centos
%packages
@^minimal
@compat-libraries
@core
@debugging
@development
%end
[root@master ~]# vim /var/lib/tftpboot/pxelinux.cfg/default
label linux
.....
# 在linux后添加
label ks
kernel vmlinuz
append initrd=initrd.img ks=http://192.168.1.60/ks_config/ks.cfg
关于ks.cfg文件说明
- 命令段
- 键盘类型,语言,安装方式等系统的配置,有必选项和可选项,如果缺少某项必选项,安装时会中断并提示用户选择此项的选项
- 软件包段
%packages
@groupname:指定安装的包组
package_name:指定安装的包
-package_name:指定不安装的包
在安装过程中默认安装的软件包,安装软件时会自动分析依赖关系。
- 脚本段(可选)
%pre:安装系统前执行的命令或脚本(由于只依赖于启动镜像,支持的命令很少)
%post:安装系统后执行的命令或脚本(基本支持所有命令)
install | 告知安装程序,这是一次全新安装,而不是升级 |
| 通过
|
| 从指定的
|
| 使用文本模式安装。 |
| 设置在安装过程中使用的语言以及系统的缺省语言。 |
| 设置系统键盘类型。 |
| 清除 |
| 系统引导相关配置。
|
| 为通过网络的
请注意所有配置信息都必须在一行上指定,不能使用反斜线来换行。
|
| 设置系统时区。 |
| 系统认证信息。 |
|
|
| 清空分区。 |
| 磁盘分区。
|
| 负责协助配置redhat一些重要的信息。
|
| 关闭 |
| 关闭防火墙。 |
| 设置日志级别。 |
| 设定安装完成后重启,此选项必须存在,不然kickstart显示一条消息,并等待用户按任意键后才重新引导,也可以选择 |
新建虚拟机测试
已经开始安装了(安装完成后root密码为123456)
作者:杨灏