背景:
在学校和公司机房新进了很多的未安装操作系统的电脑,我们不可能一台一台的用U盘安装,那怎么才能一次性给这么多电脑都安装上操作系统呢?没错就是我们要学的PXE(Preboot eXecution Environment)预启动执行环境
PXE工作过程:
PXE服务器和客户机的工作过程:
PXE是一种引导启动的方式。这种协议一般由两部分构成,一部分是服务器端,一个是客户端
PXE客户机发出DHCP请求,向服务器申请IP地址。
DHCP服务器响应PXE客户机的请求,自动从IP地址池中分配一个IP地址给PXE客户机,并且告知PXE客户机:TFTP(简单文件传输协议)服务器的IP地址和PXE引导程序文件pxelinux.0。
PXE客户机向TFTP服务器发起获取pxelinux.0引导程序文件的请求。
TFTP服务器响应PXE客户机的请求,将其共享的pxelinux.0文件传输给PXE客户机。
PXE客户机通过网络来启动到系统安装主界面。
PXE客户机向文件共享服务器发起获取centos或windows系统安装文件的请求。
文件共享服务响应PXE客户机的请求,将共享的系统安装文件传输给PXE客户机。
PXE客户机进入到安装提示向导界面,用户需要手动来完成系统的操作
最后安装系统时可以采用kickstart或者vim工具创建一个系统自动安装的应答文件,并用文件共享服务来共享ks.cfg文件(ks.cfg自动应答文件是记录系统安装的操作步骤,客户机在进行安装时会自动根据ks.cfg文件中的内容来完成安装操作)实现自动安装操作。
准备:
环境:
VMware
Server : CentOS7
Client : 这里我们使用一个没有添加镜像的虚拟机
CentOS7和CentOS6两者命令是有一些不同的
需要使用到的协议和软件:
-
Sysinux:用来提供pxelinux.0网络引导程序文件。
-
xinetd:服务访问控制,控制tftp
-
TFTP:是一个迷你的FTP共享协议软件,用来给PXE客户机提供网络启动的引导程序文件pxelinux.0。
-
文件共享:可以使用vsftpd、nfs、samba、http等软件来实现大型文件的共享。用来给PXE客户机提供操作系统文件。
-
DHPC:httpd软件是用来给PXE客户机自动分配TCP/IP设置(包括IP地址、子网掩码、网关、DNS等)。告知PXE客户机“TFTP服务器的IP地址和PXE启动文件名”
实验过程:
一.安装DHCP服务
- 下载DHCP
[root@localhost ~]#yum -y install dhcp
- 配置dhcp
dhcp配置具体可以自已百度,Linux在 /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example 有示例文件
[root@localhost ~]#vim /etc/dhcp/dhcpd.conf
# DHCP Server Configuration file.
# see /usr/share/doc/dhcp*/dhcpd.conf.example
# see dhcpd.conf(5) man page
ddns-update-style none;
ignore client-updates;
default-lease-time 259200;
max-lease-time 518400;
option domain-name-servers 192.168.253.128; #DNS服务器地址这里是我们的Server地址
#本机的地址是192.168.253.128 配置的地址池与本机同一网段
subnet 192.168.253.0 netmask 255.255.255.0 {
range 192.168.253.100 192.168.253.200; #地址池范围
option routers 192.168.253.128; #默认路由
option subnet-mask 255.255.255.0;
next-server 192.168.253.128; #指定的tftp服务器地址
filename "pxelinux.0"; #pxe启动的配置文件,文件在tftp默认文件夹/var/lib/tftpboot/下
}
- 启动服务,并设置开机自启
[root@localhost ~]#systemctl start dhcp.service
[root@localhost ~]#systemctl enable dhcp.service
二.准备yum源,使用HTTP服务
- 安装http服务:
[root@localhost ~]#yum -y install httpd
[root@localhost ~]#systemctl start httpd.service //启动服务
[root@localhost ~]#systemctl enable httpd.service //设置开机自启
- 在Server中准备要安装的系统镜像文件,可以使用VMTOOL直接拖进虚拟机,也可以使用U盘
- 创建文件,用于挂载iso文件使用的挂载点centos7
//在 /var/www/html,下创建准备挂载ISO的文件
[root@localhost ~]#mkdir -pv /var/www/html/centos7
- 挂载:修改/etc/fstab文件,fstab文件负责Linux开机自动挂载,计算机关机时会卸载已挂载的存储
挂载(mounting)是指由操作系统使一个存储设备(诸如硬盘、CD-ROM或共享资源)上的计算机文件和目录可供用户通过计算机的文件系统访问的一个过程。
一般来说,当计算机关机时,每个已挂载存储都将经历一次卸载,以确保所有排队的数据被写入,并保证介质上文件系统结构的完整性。
[root@localhost ~]# vim /etc/fstab
fstab文件内容如下:
#
# /etc/fstab
# Created by anaconda on Fri Nov 15 16:22:10 2019
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root / xfs defaults 0 0
UUID=45e5352c-1439-4e74-b183-98a67199c130 /boot xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0
#挂载命令:
#ISO系统文件位置 挂载点 文件类型 dump备份设置 fsck磁盘检查
/etc/sr0 /var/www/html/centos7/ iso9660 defaults 0 0
#这里我使用的是CentOS7里面自带的/etc/sr0文件
#自备ISO系统镜像跟这个一样
# ISO系统镜像/*/* 要挂载到的文件位置/new/filename/ iso9660 defaults 0 0
//修改后输入命令mount -a 刷新挂载
[root@localhost ~]# mount -a
....
[twilight@localhost ~]$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 17G 7.4G 9.7G 44% /
devtmpfs 470M 0 470M 0% /dev
tmpfs 487M 0 487M 0% /dev/shm
tmpfs 487M 8.6M 478M 2% /run
tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/sr0 4.3G 4.3G 0 100% /var/www/html/centos7
- 在浏览器查看效果
三.TFTP
tftp目录的最终结构:
[root@localhost tftpboot]# pwd;tree
/var/lib/tftpboot
.
├── centos7
│ ├── initrd.img
│ └── vmlinuz
├── menu.c32
├── pxelinux.0
└── pxelinux.cfg
└── default
- 下载TFTP
[root@localhost ~]#yum -y install tftpd
- 配置tftp
# default: off
# description: The tftp server serves files using the trivial file transfer \
# protocol. The tftp protocol is often used to boot diskless \
# workstations, download configuration files to network-aware printers, \
# and to start the installation process for some operating systems.
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /var/lib/tftpboot
disable = no #修改为no,表示开启此服务
per_source = 11
cps = 100 2
flags = IPv4
}
- 启动引导文件准备
(1)vmlinuz指的是内核,作用:进程管理、内存管理、文件管理、驱动管理、网络管理。
(2)initrd.img是一个小的映象, 放的是和启动相关的驱动模块。通常的步骤是先启动内核,然后内核挂载initrd.img,并执行里面的脚本来进一步挂载各种各样的模块。其中最重要的就是根文件系统驱动模块,有了它才能挂载根文件系统,继而运行用户空间的第一个应用程序init或者systemd,完成系统后续的启动
(3) pxelinux.0文件,它对整个引导器的作用就如同内核对系统的作用,它可以解释default文件(配置引导菜单文件)中的每个配置项,并根据配置项做出不同的反应。如等待的时间、启动器背景、启动菜单、内核引导等等
[root@localhost ~]#mkdir /var/www/html/centos7
[root@localhost ~]#
//复制vmlinuz,和 initrd.img 到TFTP访问目录的/var/lib/tftp/centos7目录中
[root@localhost ~]#cp /var/www/html/centos7/images/pxeboot/{initrd.img,vmlinuz} /var/lib/tftpboot/centos7/
[root@localhost ~]#mkdir /var/lib/tftpboot/pxelinux.cfg/
[root@localhost ~]#vim /var/lib/tftpboot/pxelinux.cfg/default
文件内容:
default menu.c32
prompt 0
timeout 300
ONTIMEOUT local
menu title ########## PXE Boot Menu ##########
label 1
menu label ^1) Install CentOS 7 x64 with HTTP
kernel centos7/vmlinuz #指定内核文件路径
append initrd=centos7/initrd.img #
method=http://192.168.253.128/centos7 devfs=nomount
最后:
参考文献:
https://blog.51cto.com/13588693/2355691
https://www.linuxidc.com/Linux/2019-11/161255.htm