栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

企业级基于Centos7.5配置IPXE服务批量部署windows方案

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

企业级基于Centos7.5配置IPXE服务批量部署windows方案

背景

假如有100台电脑需要安装个人订制系统,如何快速实现?注意关键词“100台、个人订制”,相信大家通过关键词搜到的都是PXE批量部署windows“原版iso”镜像,部署“个人订制”却几乎搜索不到吧!

实验环境

实验拓扑如下,规划出两个网段:生产(88.88.88.0/24)、办公(1.1.1.0/24),把IPXE服务器网络放于生产网络下,当然也可以直接从路由器接出来(路由器接口充足的情况下),也可以双网卡(办公、产线网络分别接入IPXE服务器,只是双网卡违背了网络隔离的初衷,存在安全隐患),这里把IPXE服务器接入生产网络,通过开通端口,让办公网络也能访问到IPXE服务器。

安装步骤
  • centos系统安装
  • 办公、产线交换机配置
  • IPXE相关服务安装配置
    • TFTP服务配置
      • 启动TFTP服务并设置开机自启
    • NFS服务配置
      • 启动NFS并设置开机自启
    • HTTP服务配置
  • IPXE及clonezilla配置
centos系统安装

系统安装没有特别需要注意的地方,正常安装即可,然后就是固定服务器IP地址为:88.88.88.160,子网掩码、dns、网关等等

办公、产线交换机配置

这很重要,请耐心看完!很多教程是直接在IPXE服务器上安装DHCP,然后配置地址池等,这样做不是不行,但有一个致命缺陷,实际的局域网中(交换机)已经配置了DHCP,然后IPXE再配置一个DHCP,会造成什么后果,客户机在获取IP地址时,谁先第一个响应请求,就从谁获取到IP地址,极易造成IP冲突(退一万步讲,即使不考虑地址冲突问题,假如网络开机时,客户机从交换机的DHCP获取到地址,而不是从IPXE的DHCP获取到地址,那它还能抓取到lpxelinux.0,实现网络开机吗?)
我这里应对的方法是:直接在DHCP交换机里指定PXE启动文件及IP不就解决了吗
例如办公DHCP交换机配置项如下(思科交换机):

 ip dhcp pool test                   # DHCP地址池名称为test
    network 1.1.1.0 255.255.255.0    # DHCP可分配的IP地址范围
    bootfile lpxelinux.0             # IPXE的启动文件
    next-server 88.88.88.160         # IPXE服务器的IP地址

注:lpxelinux.0是IPXE的启动文件,需要把他存放到TFTP的家目录,即后面说的/tftpboot/下;next-server即指向IPXE服务器的IP地址,如果IPXE是多网卡,则指向IPXE固定的此网段的IP地址(尽量别使用双网卡,后面会提到),这里在办公网段1.1.1.0/24指IPXE服务器IP(88.88.88.160),默认肯定是不通的(不同网段),因为IPXE开机,客户端抓取lpxelinux.0预启动文件,是通过TFTP传输,而TFTP端口为:69,把1.1.1.0/24去往88.88.88.160的69号端口打通不就行了!

IPXE相关服务安装配置

一个命令安装所有:

yum -y install  xinetd tftp-server tftp  httpd nfs-utils rpcbind 

注:xinetd是tftp-server的依赖;rpcbind 是 nfs-utils依赖

TFTP服务配置

TFTP作用:IPXE启动文件只能基于TFTP传输,如压缩内核vmlinuz与系统初始化文件initrd.img等启动文件
TFTP服务需要由xinetd服务来启动,修改 /etc/xinetd.d/tftp 文件,编辑disable = yes这一行,修改为 disable = no(如行9),在/下创建名为tftpboot目录,并把tftp目录指向/tftpboot(如行8),当然也可以默认TFTP的工作目录为/var/lib/tftpboot,个人习惯罢了。

service tftp
{
socket_type             = dgram
protocol                = udp
wait                    = yes
user                    = root
server                  = /usr/sbin/in.tftpd
server_args             = -s /tftpboot
disable                 = no
per_source              = 11
cps                     = 100 2
flags                   = IPv4
}

注:如果你发现根本不存在 /etc/xinetd.d/tftp 这个文件,那就手动创建它

启动TFTP服务并设置开机自启
systemctl start xinetd
systemctl start tftp
systemctl enable xinetd
systemctl enable tftp
NFS服务配置

NFS作用:镜像存放,并且在镜像安装过程,传输镜像,也可以安装samba、ftp等来传输,也可以把NFS服务器独立,与IPXE服务器分开,可根据实际规划而定,这里把所有服务存放到一起
创建目录partimage,作为NFS工作目录,并赋权755

mkdir /home/nfs
chmod 755 -R /home/nfs 

编辑vim /etc/exports 添加如下配置:

/home/nfs/ *(rw,no_root_squash,no_all_squash,sync)
 1./home/nfs/          # 共享目录位置
 2. *                  # 客户端 IP 范围,* 代表所有皆可访问,也只指定IP段如:192.168.0.0/24 
 3. rw                 # 权限设置,可读可写
 4. sync               # 同步共享目录
 5. no_root_squash     # 可以使用 root 授权
 6. no_all_squash      # 可以使用普通用户授权

注:
1、如果没有/etc/exports目录,自己创建
2、如果要共享多个目录,则在exports下添加即可,这里添加了两个条目,一个是办公镜像共享,一个是产线镜像共享
3、通过showmount -e localhost查看本地共享的目录

[root@DRBL partimag]# showmount -e localhost
Export list for localhost:
/home/nfs/win1064-zhuanjia *
/home/nfs/office-win10x64  *
启动NFS并设置开机自启
 systemctl start rpcbind
 systemctl start nfs-server
 systemctl enable rpcbind
 systemctl enable nfs-server
HTTP服务配置

HTTP作用:客户机网络启动,进入PXE菜单后,例如要进入U启通(Win PE),客户端需要透过网络下载U启通到缓存,默认是通过TFTP传输,过程非常非常缓慢,若改用HTTP传输,传输速率可提升N倍
HTTP无需做任何特殊配置,把你需要的Win PE iso放到HTTP工作目录即可(/var/www/html),如:

[root@DRBL html]# pwd
/var/www/html
[root@DRBL html]# ll
总用量 5507176
-rw-r--r-- 1 root root  577798144 8月  20 16:35 CMDPE-2.9.9.7.ISO
-rw-r--r-- 1 root root  842784768 1月   7 2021 EasyU_v3.6.iso
-rwxrwxrwx 1 root root 1054935040 11月 13 17:01 EasyU_v3.7.iso
-rw-r--r-- 1 root root  850313216 11月 16 09:46 HDS_Win10PE.iso
-rw-r--r-- 1 root root  219451392 8月  11 08:16 WePE_64_V2.1.iso
-rw-r--r-- 1 root root  697827328 11月 16 17:13 Win10x64.iso
-rw-r--r-- 1 root root  428941312 11月 16 23:03 Win11PEx64.22000.318.iso
-rw-r--r-- 1 root root  967294976 6月  28 14:51 xiaoEasyU_v3.6.iso

后面会讲,如果通过IPXE配置文件调用这些PE文件

IPXE及clonezilla配置

首先需要理清楚几个概念:pxe, ipxe, pxelinux,以及几个名词:pxelinux.0, ipxelinux.0

  • pxe是一个协议,跟mbr是一个性质的东西,它规定了CPU启动后通过什么方式获取引导代码并执行。
  • pxe的实现有许多,不同的厂商有不同的实现。并且pxe的实现代码主要有两种存放位置,一种是存在主板上,一种是存在网卡里,现在新的网卡一般都自带了pxe的实现代码。(去mbr查找引导代码的实现是在主板上的。)
  • 由于pxe协议比较“落后”,仅支持tftp传输数据,性能差,灵活性也差,于是有了gpxe这个项目。gpxe是一种兼容pxe的实现,并且在pxe之上增加了许多特性,例如通过http/ftp等协议传输数据。
  • gpxe原先使用的域名的拥有者突然收回了该域名的使用权,于是这些人fork出去做了ipxe,gpxe现在已经不再开发,ipxe开发非常活跃。
  • 一些较新的intel的网卡里都带了gpxe的实现代码,最新的可能会带ipxe代码。
  • pxelinux是syslinux项目的一个部分,syslinux主要有三个产出,syslinux、isolinux、pxelinux,分别用于硬盘、光盘、网络启动,它的角色与grub相同。
    ​* 由于大多数网卡、主板都不自带gpxe/ipxe的代码,所以通常引导时需要这样的途径: pxe -> ipxe -> pxelinux.bin,后面这两步可以合并,于是大家就把ipxe与pxelinux.bin​的代码合体,做成了 ipxelinux.0 (gpxe+pxelinux.bin = gpxelinux.0)。一般习惯上裸的pxelinux镜像用.bin后缀,加上gpxe/ipxe之后用.0后缀。此外还会有.lkrn后缀,这是ipxe的东西,ipxe的代码默认只能通过pxe协议的方式加载,他们搞了另外一个代码入口,使得可以通过像linux kernel的方式一样加载(就是可以通过grub引导),这种镜像的后缀是lkrn.
  • 所以可行的引导过程可以有这些:
    • pxe(网卡) -> ipxe -> pxelinux.bin -> menu.c32
    • pxe -> ipxelinux.0 -> menu.c32
    • pxe -> syslinux.bin -> ipxe -> pxelinux.bin -> menu.c32
    • pxe -> syslinux.bin -> ipxelinux.0 -> menu.c32
    • grub -> ipxe.lkrn -> pxelinux.bin -> menu.c32
    • grub -> ipxelinux.lkrn -> menu.c32
    • ipxe(烧入网卡) -> pxelinux.bin

由于pxe代码是主板、网卡自带的,所以兼容性最好(至少本机的代码兼容本机的设备)。而ipxe兼容性略差(只是相对来说,因为我们编译时可能会漏掉一些网卡,或者一些特殊问题不好解决),曾经尝试过直接一步 pxe -> ipxelinux.0,但是发现有一些机器无法启动,加载ipxe之后就停住了。所以后来退而求其次,用两步加载,对于ipxe不支持的设备,可以在第一步pxe->pxelinux.bin之后手快一些按任意键中断,然后仍然可以使用pxe,不过之后我们一直没有维护通过tftp加载的pxelinux以及配置文件,所以那部分内容其实现在都已经严重过时了。通过论坛查看详细说明
废话不多说,回到正题!
下载所需IPXE启动文件:点击这里下载

里面包括有 lpxelinux.0,menu.c32,ldlinux.c32,libutil.c32,memdisk 等PXE引导需要用的文件。也可以自己安装centos8,然后安装syslinux,把以上几个内核文件拷贝下来(centos7版本自带的syslinux版本号还是4.05,所以如果要6.04版本,最好从centos8里提取)
把提取的文件存放到/tftpboot/下赋权777,并创建pxelinux.cfg目录,如:

[root@DRBL tftpboot]# pwd
/tftpboot
[root@DRBL tftpboot]# ll
总用量 36012
-rwxrwxrwx. 1 root root 264945664 11月 24 15:16 filesystem.squashfs  #再生龙启动文件
-rwxrwxrwx. 1 root root  29770260 11月 24 15:16 initrd.img           #再生龙镜像文件
-rwxrwxrwx. 1 root root   6821216 11月 24 15:16 vmlinuz              #再生龙内核
-rwxrwxrwx. 1 root root     74907 11月 24 15:16 lpxelinux.0          #IPXE预启动
-rwxrwxrwx. 1 root root    116096 11月 24 15:16 ldlinux.c32          #IPXE预启动依赖
-rwxrwxrwx. 1 root root     22804 11月 24 15:16 libutil.c32          #IPXE预启动依赖
drwxrwxrwx. 2 root root        21 11月 24 15:16 pxelinux.cfg         #IPXE配置文件目录
-rwxrwxrwx. 1 root root     25756 11月 24 15:16 memdisk              #window PE预启动
-rwxrwxrwx. 1 root root     26272 11月 24 15:16 menu.c32             #默认蓝色背景预启动菜单(不可自定义菜单背景等)
-rwxrwxrwx. 1 root root     26788 11月 24 15:16 vesamenu.c32         #标准菜单(可自定义菜单背景、颜色等)
-rwxrwxrwx. 1 root root    180668 11月 24 15:16 libcom32.c32         #标准菜单依赖
-rwxrwxrwx. 1 root root    259251 11月 24 15:15 background.png       #自定义的菜单背景(只支持640x480)

以上是IPXE全部的预启动文件,而启动配置文件存放在pxelinux.cfg/default里(名字只能是default),vim/pxelinux.cfg/default编辑启动菜单配置文件:

default vesamenu.c32  #标准菜单(默认是menu.c32蓝色菜单)
prompt 0
timeout 600           #菜单等待时间(60秒)
ontimeout local       #超时本地启动
display boot.msg      #显示描述信息(有描述信息的话)

menu clear
menu background background.png             #自定义背景
menu title FOXCONN Ems2 IPXE Boot Menu     #启动菜单抬头
   menu color screen   37;40               #80ffffff #00000000 std
   menu color border   30;44               #400060 #00000000 std
   menu color title   1;36;44              #20ff00 #00000000 std
   menu color unsel   37;44                #ffff00 #00000000 std
   menu color hotkey   1;37;44             #ffffffff #00000000 std
   menu color sel      7;37;40             #ff0000 #20ff8000 all
   menu color hotsel   1;7;37;40           #e0400000 #20ff8000 all
   menu color disabled   1;30;44           #60cccccc #00000000 std
   menu color scrollbar   30;44            #20ff00 #00000000 std
   menu color tabmsg   31;40               #2000ff #00000000 std
   menu color cmdmark   1;36;40            #c000ffff #00000000 std
   menu color cmdline   37;40              #c0ffffff #00000000 std
   menu color pwdborder   30;47            #80ffffff #20ffffff std
   menu color pwdheader   31;47            #80ff8080 #20ffffff std
   menu color pwdentry   30;47             #80ffffff #20ffffff std
   menu color timeout_msg   37;40          #600000 #00000000 std
   menu color timeout   1;37;40            #40ffff #00000000 std
   menu color help      37;40              #c0ffffff #00000000 std
   menu color msg07   37;40                #90ffffff #00000000 std

#本地启动#
label local
menu default     #默认菜单                                                       
menu label Boot from local disk
localboot 0xffff

#微PE启动#
label WePE_64_V2.1
menu label WePE with HTTP
kernel memdisk
append initrd=http://88.88.88.160/WePE_64_V2.1.iso iso raw

#再生龙启动,自动安装win10x64-office系统,HTTP传输#
label clonezilla-live-2.7.3-19-amd64
menu label Install win10x64-office with HTTP
kernel http://88.88.88.160/clonezilla/vmlinuz
append initrd=http://88.88.88.160/clonezilla/initrd.img boot=live union=overlay noswap noeject nolocales vga=788 locales=zh_CN.UTF-8 keyboard-layouts=NONE method=http://88.88.88.160/clonezilla/filesystem.squashfs ocs_live_run="sudo /usr/sbin/ocs-sr -e1 auto -e2 -t -r -c -k -scr -p reboot -f sda1 restoreparts office-win10x64 sda1" ocs_repository="nfs://88.88.88.160/home/partimag/office-win10x64/"

#再生龙启动,手动安装,HTTP传输#
label clonezilla-live-2.7.3-19-amd64
menu label clonezilla-live with HTTP
kernel http://88.88.88.160/clonezilla/vmlinuz
append initrd=http://88.88.88.160/clonezilla/initrd.img boot=live union=overlay noswap noeject nolocales vga=788 locales=zh_CN.UTF-8 keyboard-layouts=NONE method=http://88.88.88.160/clonezilla/filesystem.squashfs 

#再生龙启动,手动安装,TFTP传输#
label clonezilla-live-2.7.3-19-amd64
menu label clonezilla-live with TFTP
kernel vmlinuz
append initrd=initrd.img boot=live union=overlay noswap noeject nolocales vga=788 locales=zh_CN.UTF-8 keyboard-layouts=NONE fetch=tftp://88.88.88.160/filesystem.squashfs

#U启通3.6#
label EasyU_v3.6.iso
menu label EasyU_v3.6_PE with HTTP
kernel memdisk
append initrd=http://88.88.88.160/EasyU_v3.6.iso iso raw

#老毛桃#
label LaoMaoTao.iso
menu label LaoMaoTao_PE with HTTP
kernel memdisk
append initrd=http://88.88.88.160/LaoMaoTao.iso iso raw

#centos 安装测试#
label install centos
menu label install centos with HTTP
kernel vmlinuz
initrd=initrd.img method=http://88.88.88.160/centos devfs=nomount
效果展示

未完待续(最近比较忙)


特别声明

其他文档
再生龙部署教程
推荐其他大神写的部署教程

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/599409.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号