iPXE 学习 摆设Linux/Windows体系 支持IPv4/IPv6

鼠扑  金牌会员 | 2024-10-29 23:21:04 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 867|帖子 867|积分 2601

折腾了一周的iPXE,大概弄明白了,ipxe原理 文件的具体作用就不讲了 自己也半懂不懂
不外有一说一 这大概是全网最完全的iPXE情况摆设了
纪录自己操作的每一个步骤 ┭┮﹏┭┮
为了支持legacy BIOS 以及 UEFI 还要同时支持IPv4/IPv6
我先说一下  我的呆板是多网卡 
配置ipxe的端口连接了一个内网交换机  摆设的设备呆板(client)连接内网
yum 下载东西是通过外网口
前期准备

iPXE server :
   OS:CentOS Stream 9
  kernel:5.14.0-391.el9.x86_64
   1. 开启ssh远程登陆,方便远程操作
  1. vim /etc/ssh/sshd_config
  2. #PermitRootLogin prohibit-password
  3. PermitRootLogin yes
  4. :wq
  5. systemctl restart sshd
复制代码
2. 配置静态ip,根据自己需求配置就行,我准备用enp1s0作为dhcp端口
IPv4 设置为 10.10.10.10
IPv6 设置为 2024:1::1
IPv6 前缀天生:Unique Local IPv6 Generator (unique-local-ipv6.com)
  1. enp1s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
  2.         inet 10.10.10.10  netmask 255.255.255.0  broadcast 10.10.10.255
  3.         inet6 fe80::76fe:48ff:fe04:f56a  prefixlen 64  scopeid 0x20<link>
  4.         inet6 2024:1::1  prefixlen 64  scopeid 0x0<global>
  5.         ether 74:fe:48:04:f5:6a  txqueuelen 1000  (Ethernet)
  6.         RX packets 606  bytes 81017 (79.1 KiB)
  7.         RX errors 0  dropped 0  overruns 0  frame 0
  8.         TX packets 296  bytes 30501 (29.7 KiB)
  9.         TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
  10.         device memory 0x80800000-8087ffff
  11. enp2s0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
  12.         ether 74:fe:48:04:f5:6b  txqueuelen 1000  (Ethernet)
  13.         RX packets 0  bytes 0 (0.0 B)
  14.         RX errors 0  dropped 0  overruns 0  frame 0
  15.         TX packets 0  bytes 0 (0.0 B)
  16.         TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
  17.         device memory 0x80500000-805fffff
  18. enp3s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
  19.         inet 192.168.4.117  netmask 255.255.255.0  broadcast 192.168.4.255
  20.         inet6 fe80::2e0:4cff:fe68:3  prefixlen 64  scopeid 0x20<link>
  21.         ether 00:e0:4c:68:00:03  txqueuelen 1000  (Ethernet)
  22.         RX packets 49776  bytes 31614023 (30.1 MiB)
  23.         RX errors 0  dropped 2  overruns 0  frame 0
  24.         TX packets 10959  bytes 735874 (718.6 KiB)
  25.         TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
复制代码
3.配置yum源:阿里镜像源  
报错curl: (6) Could not resolve host 
改DNS 8.8.8.8 114.114.114.114
安装git
  1. yum install git
复制代码
4. 关闭防火墙 以及seLinux
  1. ##永久关闭
  2. [root@localhost ~]# systemctl stop firewalld.service
  3. [root@localhost ~]# systemctl disable firewalld.service
  4. ##添加规则
  5. [root@localhost ~]# firewall-cmd  --add-service=http --permanent
  6. FirewallD is not running
  7. [root@localhost ~]# firewall-cmd  --add-service=tftp --permanent
  8. FirewallD is not running
  9. [root@localhost ~]# firewall-cmd  --reload
  10. ##临时关闭selinux
  11. [root@localhost ~]# setenforce 0
  12. [root@localhost ~]#
  13. ##永久关闭
  14. vim /etc/selinux/config
  15. SELINUX=disabled
  16. :wq
复制代码

一、安装iPXE

1.1. 安装iPXE

下载地址:https://github.com/ipxe/ipxe.git
  1. [root@localhost ~]# git clone https://github.com/ipxe/ipxe.git
复制代码
若是git 报错 如下处理; 重新下载iPXE
  1. ##编辑
  2. vim /etc/hosts
  3. 140.82.113.4 github.com
  4. 140.82.114.4 gist.github.com
  5. :wq
  6. ##重启网络
  7. systemctl restart NetworkManager
  8. [root@localhost ~]# git clone https://github.com/ipxe/ipxe.git
  9. Cloning into 'ipxe'...
  10. remote: Enumerating objects: 59629, done.
  11. remote: Counting objects: 100% (13184/13184), done.
  12. remote: Compressing objects: 100% (1723/1723), done.
  13. remote: Total 59629 (delta 11831), reused 11543 (delta 11461), pack-reused 46445
  14. Receiving objects: 100% (59629/59629), 17.87 MiB | 5.01 MiB/s, done.
  15. Resolving deltas: 100% (45094/45094), done.
  16. [root@localhost ~]#
复制代码
1.2. 安装iPXE编译坏境

  1. yum install gcc binutils make perl liblzma mtools mkisofs xz-devel
复制代码
  1. [root@localhost ~]# yum install gcc binutils make perl liblzma mtools mkisofs xz-devel
  2. Last metadata expiration check: 0:25:50 ago on Fri 26 Jan 2024 03:24:40 PM CST.
  3. Package gcc-11.4.1-2.3.el9.x86_64 is already installed.
  4. Package binutils-2.35.2-42.el9.x86_64 is already installed.
  5. Package make-1:4.3-7.el9.x86_64 is already installed.
  6. No match for argument: liblzma
  7. Package mtools-4.0.26-4.el9.x86_64 is already installed.
  8. Package xorriso-1.5.4-4.el9.x86_64 is already installed.
  9. Package xz-devel-5.2.5-8.el9.x86_64 is already installed.
  10. Error: Unable to find a match: liblzma
复制代码
不用管liblzma  (liblzma or xz header files)
假如报错Can't locate FindBin.pm in @INC (you may need to install the FindBin module)
缘故原由perl 没有下载 下载perl后重新编译
编译成功:表现ipxe的相关用法  我们背面自定义image
  1. ===========================================================
  2. To create a bootable floppy, type
  3.     cat bin/ipxe.dsk > /dev/fd0
  4. where /dev/fd0 is your floppy drive.  This will erase any
  5. data already on the disk.
  6. To create a bootable USB key, type
  7.     cat bin/ipxe.usb > /dev/sdX
  8. where /dev/sdX is your USB key, and is *not* a real hard
  9. disk on your system.  This will erase any data already on
  10. the USB key.
  11. To create a bootable CD-ROM, burn the ISO image
  12. bin/ipxe.iso to a blank CD-ROM.
  13. These images contain drivers for all supported cards.  You
  14. can build more customised images, and ROM images, using
  15.     make bin/<rom-name>.<output-format>
复制代码
二、摆设PXE引导iPXE 

通过PXE服务引导iPXE
具体情况就是通过sever上网卡(PXE) 引导加载编译好的iPXE image (包罗了其他全部网卡)
2.1 下载tftp dhcpd httpd

留意: CentOS 8版本 以前的体系需要安装xinetd
在 RHEL/CentOS 的更高版本中,我们大概不需要 xinetd,因为在以前的版本中,tftp 是由 xinetd 管理的,关于xinetd的配置在后文
  1. yum install dhcp-server  tftp-server  httpd
复制代码
  1. [root@localhost ~]# yum install dhcp-server   httpd   tftp-server
  2. Last metadata expiration check: 5:07:54 ago on Tue 30 Jan 2024 10:51:22 AM CST.
  3. Package dhcp-server-12:4.4.2-19.b1.el9.x86_64 is already installed.
  4. Package httpd-2.4.57-6.el9.x86_64 is already installed.
  5. Package tftp-server-5.2-37.el9.x86_64 is already installed.
  6. Dependencies resolved.
  7. Nothing to do.
  8. Complete!
复制代码
2.2 配置ipv4 ipv6 dhcp 服务器

参拷/usr/share/doc/dhcp-server/dhcpd.conf.example 编辑 /etc/dhcp/dhcpd.conf 配置文件
参拷/usr/share/doc/dhcp-server/dhcpd6.conf.example 编辑 /etc/dhcp/dhcpd6.conf 配置文件
关于DHCP 配置 PXE 参数的可以检察 RedHat or CentOS官方的参拷链接
关于DHCP PXE文件参数的说明 参拷 博主 lvbibir的博客 
关于DHCP 服务相关参数 见 本文 参考资料
说明:
   ipxe.efi   UEFI 启动引导文件  
  undionly.kpxe  Legacy 启动引导文件 
  已经编译好的文件:
  链接:https://pan.baidu.com/s/1RoFpb5aeTIJqPeijjLeLTQ 
提取码:1111 
 
  是自定义编译iPXE后天生的  这里先在DHCP配置中文件写好了。
  参数为什么如许写参拷 lvbibir 博客
  1. # 启用 PXE 支持
  2. allow booting;
  3. allow bootp;
  4. # PXE 定义命名空间
  5. option space pxelinux;
  6. option pxelinux.magic code 208 = string;
  7. option pxelinux.configfile code 209 = text;
  8. option pxelinux.pathprefix code 210 = text;
  9. option pxelinux.reboottime code 211 = unsigned integer 32;
  10. option architecture-type code 93 = unsigned integer 16;   # RFC4578
  11. authoritative;
  12. one-lease-per-client true;
  13. # 不使用DNS动态更新
  14. ddns-update-style none;
  15. # 忽略客户端DNS更新
  16. ignore client-updates;
  17. # 使用 PXE 的网络
  18. subnet 10.10.10.0 netmask 255.255.255.0 {
  19.      option routers             10.10.10.10;
  20. #    option domain-name-servers 8.8.8.8;
  21.      option subnet-mask         255.255.255.0;
  22.      range dynamic-bootp        10.10.10.20 10.10.10.254;
  23.      default-lease-time         28800;
  24.      max-lease-time             43200;
  25.      next-server                10.10.10.10;
  26.      class "pxeclients" {
  27.           # 这里判断 option 60 选项的值的前9个字符是否是 PXEClient
  28.           match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
  29.           # 这里通过 if 判断 arch 代码来决定如何去分配对应的 pxe 引导程序
  30.           # Legacy
  31.           if option system-arch = 00:00 {
  32.              filename "undionly.kpxe";
  33.           }
  34.              # UEFI-64
  35.              else if option system-arch = 00:07 {
  36.                         filename "UEFI/ipxe.efi";
  37.           }
  38.           # aarch64 ( arm 64 bit)
  39.           else if option system-arch = 00:0b {
  40.               filename "arm/ipxe.efi";
  41.           }
  42.           else
  43.           {
  44.               filename "undionly.kpxe";
  45.           }
  46.      }
复制代码
dhcp6 配置配置文件
  1. allow booting;
  2. allow bootp;
  3. option dhcp6.bootfile-url code 59 = string;
  4. option dhcp6.vendor-class code 16 = {integer 32, integer 16, string};
  5. option dhcp6.user-class code 15 = { integer 16, string };
  6. option dhcp6.name-servers 2024:1::1;
  7. option dhcp6.bootfile-url "tftp://[2024:1::1]/ipv6/ipxe.efi";
  8. subnet6 2024:1::/64 {
  9.             range6 2024:1::100 2024:1::ffff;
  10.              }
复制代码
2.3 下载 radvd

路由广告守护进程 radvd( (router advertisement daemon))发送路由器公告信息,这是 IPv6 无状态自动配置所需的。这可让用户根据这些公告自动配置其地址、设置、路由和选择默认路由。
下载radvd
  1. yum install radvd
复制代码
2.4 配置 radvd

  1. vim /etc/radvd.conf
复制代码
  1. interface enp1s0
  2. {
  3.         AdvSendAdvert on;
  4.         MinRtrAdvInterval 30;
  5.         MaxRtrAdvInterval 600;
  6.         AdvManagedFlag on;
  7.         AdvOtherConfigFlag on;
  8.         prefix 2024:1::/64
  9.         {
  10.                 AdvPreferredLifetime 3600;
  11.                 AdvValidLifetime 7200;
  12.         };
  13.         route 2024:1::/64
  14.         {
  15.         };
  16. };
复制代码
 2.5 启动radvd 服务

设置开机自启动
  1. systemctl start radvd
  2. systemctl enable radvd
复制代码
2.6 启动dhcp dhcp6服务

设置开机自启动
  1. #设置开机自启动
  2. [root@localhost ~]# systemctl start dhcpd
  3. [root@localhost ~]# systemctl enable dhcpd
  4. [root@localhost ~]#
  5. [root@localhost ~]# systemctl start dhcpd6
  6. [root@localhost ~]# systemctl enable dhcpd6
复制代码
2.7 dhcp服务检查

若局域网内有其他呆板处于开机状态可以看看有没有自动分配ipv4 ipv6地址
Ping检查通讯正常

2.8 配置tftp(RHEL/CentOS 8/9可以省略此步)7版本必须配置

下载xinetd服务
  1. yum install xinetd -y
复制代码
编辑vim /etc/xinetd.d/tftp文件 若没有 需要手动创建
  1. vim /etc/xinetd.d/tftp
复制代码
disable = yes  改为 no 
默认路径 /var/lib/tftpboot 
  1. service tftp
  2. {
  3.     socket_type = dgram
  4.     protocol = udp
  5.     wait = yes
  6.     user = root
  7.     server = /usr/sbin/in.tftpd
  8.     server_args = -s /var/lib/tftpboot -c  #文件路径  /tftpboot
  9.     disable = no
  10.     per_source = 11
  11.     cps = 100 2
  12.     flags = IPv 4
  13. }
复制代码
启动xinetd服务
  1. #设置开机自启动
  2. systemctl start xinetd
  3. systemctl enable xinetd
复制代码
2.9 配置tftp服务

在 RHEL/CentOS 的更高版本中,我们大概不需要 xinetd,因为在以前的版本中,tftp 是由 xinetd 管理的,但是现在它由 systemd 管理。
RHEL/CentOS 8/9  检察 systemd 单位文件的路径
  1. rpm -ql tftp-server | grep -E "service|socket"
复制代码
  1. [root@localhost tftpboot]#  rpm -ql tftp-server | grep -E "service|socket"
  2. /usr/lib/systemd/system/tftp.service
  3. /usr/lib/systemd/system/tftp.socket
  4. [root@localhost tftpboot]# cat /usr/lib/systemd/system/tftp.service
  5. [Unit]
  6. Description=Tftp Server
  7. Requires=tftp.socket
  8. Documentation=man:in.tftpd
  9. [Service]
  10. ExecStart=/usr/sbin/in.tftpd -s /var/lib/tftpboot
  11. StandardInput=socket
  12. [Install]
  13. Also=tftp.socket
  14. [root@localhost tftpboot]# pwd
  15. /var/lib/tftpboot
复制代码
2.10 启动 tftp 服务

设置开机自启动
  1. systemctl daemon-reload
  2. systemctl restart tftp.service
  3. systemctl enable tftp.service --now
复制代码
一段时间后,服务大概表现为非运动状态,这是意料之中的,由于tftp服务由tftp套接字管理,因此套接字启动并运行是很紧张的。当有传入的TFTP哀求时,套接字将自动启动服务。
检查套接字的状态以确保它已成功启动。
  1. systemctl status tftp.socket
复制代码
  1. [root@localhost tftpboot]# systemctl status tftp.socket
  2. ● tftp.socket - Tftp Server Activation Socket
  3.      Loaded: loaded (/usr/lib/systemd/system/tftp.socket; enabled; preset: disabled)
  4.      Active: active (listening) since Tue 2024-01-30 14:13:30 CST; 1h 40min ago
  5.       Until: Tue 2024-01-30 14:13:30 CST; 1h 40min ago
  6.    Triggers: ● tftp.service
  7.      Listen: [::]:69 (Datagram)
  8.       Tasks: 0 (limit: 201875)
  9.      Memory: 4.0K
  10.         CPU: 271us
  11.      CGroup: /system.slice/tftp.socket
  12. Jan 30 14:13:30 localhost systemd[1]: Listening on Tftp Server Activation Socket.
  13. [root@localhost tftpboot]#
复制代码
2.11 配置 http服务

备份welcome.conf文件
  1. cd /etc/httpd/conf.d
  2. mv welcome.conf welcome.conf.bak
复制代码
2.12 启动 http服务

设置开机自启动
  1. [root@localhost ~]# systemctl start httpd
  2. [root@localhost ~]# systemctl enable httpd
  3. [root@localhost ~]# systemctl status httpd
  4. ● httpd.service - The Apache HTTP Server
  5.      Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; preset: disabled)
  6.      Active: active (running) since Tue 2024-01-30 14:13:43 CST; 1h 52min ago
  7.        Docs: man:httpd.service(8)
  8.    Main PID: 1408 (httpd)
  9.      Status: "Total requests: 0; Idle/Busy workers 100/0;Requests/sec: 0; Bytes served/sec:   0 B/sec"
  10.       Tasks: 214 (limit: 201875)
  11.      Memory: 43.8M
  12.         CPU: 4.970s
  13.      CGroup: /system.slice/httpd.service
  14.              ├─1408 /usr/sbin/httpd -DFOREGROUND
  15.              ├─1587 /usr/sbin/httpd -DFOREGROUND
  16.              ├─1588 /usr/sbin/httpd -DFOREGROUND
  17.              ├─1589 /usr/sbin/httpd -DFOREGROUND
  18.              ├─1590 /usr/sbin/httpd -DFOREGROUND
  19.              └─1591 /usr/sbin/httpd -DFOREGROUND
  20. Jan 30 14:13:43 localhost.localdomain systemd[1]: Starting The Apache HTTP Server...
  21. Jan 30 14:13:43 localhost.localdomain httpd[1408]: AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using localhost.locald>
  22. Jan 30 14:13:43 localhost.localdomain httpd[1408]: Server configured, listening on: port 443, port 80
  23. Jan 30 14:13:43 localhost.localdomain systemd[1]: Started The Apache HTTP Server.
  24. lines 1-21/21 (END)
复制代码
2.13 上传操作体系镜像至OS

上传iPXE 需要摆设的镜像ISO到server
背面介绍Windows怎么摆设
  1. -rw-r--r--. 1 root root 4712300544 Jan 10 10:50 CentOS-7-x86_64-DVD-2009.iso
  2. -rw-r--r--  1 root root 6102130688 May  4  2023 zh-cn_windows_10_consumer_editions_version_22h2_updated_april_2023_x64_dvd_80cec13e.iso
  3. [root@localhost ~]#
复制代码
创建目次
  1. mkdir /var/www/html/centos7.9
复制代码
挂载镜像
  1. mount CentOS-7-x86_64-DVD-2009.iso /mnt/
复制代码
拷贝体系文件到 http 目次
注:若使用其他方式拷贝镜像,需要保证目的体系镜像目次下有隐藏文件.treeinfo
  1. cp -a /mnt/* /var/www/html/centos7.9
复制代码
  1. [root@localhost centos7.9]# ls -a
  2. .   CentOS_BuildTag  EFI   GPL     isolinux  Packages  RPM-GPG-KEY-CentOS-7          TRANS.TBL
  3. ..  .discinfo        EULA  images  LiveOS    repodata  RPM-GPG-KEY-CentOS-Testing-7  .treeinfo
  4. [root@localhost centos7.9]#
复制代码
2.14 重启httpd服务

  1. systemctl restart httpd
复制代码
2.15 http服务检查

局域网内可以通过浏览器正常访问
IPv4

 IPv6

若提示
Forbidden
You don't have permission to access XXX on this server
请参拷此设置 : CentOS7下Apache服务器提示无权访问 
若提示网页无法访问 检查是否开启了 代理   或者 科学上网
参拷: 【办理方案】Microsoft Edge 浏览器 出现“无法访问该页面”问题_we couldn鈥檛 load the requested page. please try ag-CSDN博客

三、创建定义iPXE引导

3.1 编写demo.ipxe 冲破循坏

   demo.ipxe 的作用:冲破无限循环的另一种方法是使用嵌入式脚本构建 iPXE   
  boot.php 的作用:启动菜单配置文件
   在/root/ipxe/src目次下 vim demo.ipxe文件
 在/root/ipxe/src目次下 vim demo-ipv6.ipxe文件
  1. cd  /root/ipxe/src
  2. [root@localhost src]# cat demo.ipxe
  3. #!ipxe
  4. dhcp
  5. chain http://10.10.10.10/boot.php
  6. [root@localhost src]#
复制代码
  1. [root@localhost src]# vim demo-ipv6.ipxe
  2. [root@localhost src]# cat demo-ipv6.ipxe
  3. #!ipxe
  4. dhcp
  5. chain http://[2024:1::1]/ipv6/boot-ipv6.php
  6. [root@localhost src]#
复制代码
您可以通过网络启动某些内容。与传统的 PXE ROM 不同,iPXE 可以或许通过广域网(如 Internet)启动。假如要测试的盘算机已连接到 Internet,则可以启动 iPXE
chain 下令的作用 下载并启动可实行映像
  1. chain http://boot.ipxe.org/demo/boot.php
复制代码
3.2  嵌入脚本编译 ipxe 引导文件

   编译legacy mode 引导
  IPv6 PXE不支持legacy boot
  1. [root@localhost src]# make bin/undionly.kpxe EMBED=demo.ipxe
复制代码
  1. [root@localhost src]# make bin/undionly.kpxe EMBED=demo.ipxe
  2.   [DEPS] image/embedded.c  [BUILD] bin/embedded.o  [AR] bin/blib.a  [VERSION] bin/version.undionly.kpxe.o  [LD] bin/undionly.kpxe.tmp  [BIN] bin/undionly.kpxe.bin  [ZINFO] bin/undionly.kpxe.zinfo  [ZBIN] bin/undionly.kpxe.zbin  [FINISH] bin/undionly.kpxerm bin/undionly.kpxe.bin bin/undionly.kpxe.zinfo bin/version.undionly.kpxe.o bin/undionly.kpxe.zbin[root@localhost src]#
复制代码
   编译 UEFI mode 引导
  1. [root@localhost src]# make bin-x86_64-efi/ipxe.efi EMBED=demo.ipxe
复制代码
  1. [root@localhost src]# make bin-x86_64-efi/ipxe.efi EMBED=demo.ipxe
  2.   [PARSEROM]
  3.   [DEPS] core/version.c
  4.   [DEPS] arch/x86/transitions/librm.S
  5.   [DEPS] arch/x86/transitions/libpm.S
  6. ..............................................................
  7. ..............................................................
复制代码
等候编译完成
创建目次/var/lib/tftpboot/UEFI/   mkdir /var/lib/tftpboot/ipv6/
  1. mkdir /var/lib/tftpboot/UEFI/
  2. mkdir /var/lib/tftpboot/ipv6/
复制代码
 拷贝至/var/lib/tftpboot目次下
  1. cp /root/ipxe/src/bin/undionly.kpxe /var/lib/tftpboot/
  2. cp /root/ipxe/src/bin-x86_64-efi/ipxe.efi /var/lib/tftpboot/UEFI/
复制代码
修改vim /root/ipxe/src/config/general.h 文件 第38行 取消注释
  1. 33  * Network protocols
  2. 34  *
  3. 35  */
  4. 36
  5. 37 #define NET_PROTO_IPV4          /* IPv4 protocol */
  6. 38 #define NET_PROTO_IPV6  /* IPv6 protocol */
  7. 39 #undef  NET_PROTO_FCOE          /* Fibre Channel over Ethernet protocol */
  8. 40 #define NET_PROTO_STP           /* Spanning Tree protocol */
  9. 41 #define NET_PROTO_LACP          /* Link Aggregation control protocol */
  10. 42 #define NET_PROTO_EAPOL         /* EAP over LAN protocol */
  11. 43 //#define NET_PROTO_LLDP        /* Link Layer Discovery protocol */
复制代码
再次编译demo-ipv6.ipxe
  1. [root@localhost src]# make bin-x86_64-efi/ipxe.efi EMBED=demo-ipv6.ipxe
复制代码
  1. [root@localhost src]# make bin-x86_64-efi/ipxe.efi EMBED=demo-ipv6.ipxe
  2.   [DEPS] image/embedded.c  [BUILD] bin-x86_64-efi/embedded.o  [AR] bin-x86_64-efi/blib.a  [VERSION] bin-x86_64-efi/version.ipxe.efi.o  [LD] bin-x86_64-efi/ipxe.efi.tmp  [FINISH] bin-x86_64-efi/ipxe.efirm bin-x86_64-efi/version.ipxe.efi.o[root@localhost src]#
复制代码
 拷贝至/var/lib/tftpboot目次下
  1. cp /root/ipxe/src/bin-x86_64-efi/ipxe.efi /var/lib/tftpboot/ipv6
复制代码

 3.3  编写boot.php启动菜单配置文件

我们打开boot.php文件里的内容 看看
可以看到下载了kernel 和 img 然后启动 

   Legacy 和 UEFI模式可共用同一启动菜单配置文件 boot.php 
  WindowsPE引导待会在做
  kickstart 文件配置参拷Kickstart 安装 :: CentOS Docs Site
  现在我们在 /var/www/html/ 目次下编写一个一样的boot.php文件以及boot-ipv6.php文件
boot menu参数参拷:iPXE启动菜单详解-CSDN博客
关于内外网 boot.php 参拷 ipxe菜单 内嵌实现自动判定服务器,外网内网全协议自动判定启动 - 网络启动区 - 无忧启动论坛 - Powered by Discuz! (wuyou.net)
  1. vim boot.php
  2. #!ipxe
  3. #打印信息
  4. echo platform..........: ${platform}
  5. echo chip .............: ${chip}
  6. echo mac...............: ${mac}
  7. echo ip................: ${ip}
  8. echo netmask...........: ${netmask}
  9. echo gateway...........: ${gateway}
  10. echo dns...............: ${dns}
  11. echo domain............: ${domain}
  12. echo dhcp-server.......: ${dhcp-server}
  13. echo filename..........: ${filename}
  14. echo next-server.......: ${next-server}
  15. echo boot menu will show in 5 seconds
  16. sleep 10
  17. #启动菜单
  18. :start
  19. menu iPXE Boot Menu --BootType-[${platform}]--${ip}
  20. item --gap -- Linux OS
  21. item --key R reboot R---- Reboot
  22. item --key L local L---- Boot To Local Drive
  23. item --key 0 CentOS7.9 0---- CentOS 7.9
  24. item --gap -- Microsoft Windows
  25. item --key 1 WIN10 1---- Windows 10
  26. item --gap -- Tool
  27. item --key S shell S---- iPXE shell
  28. #等60S默认启动reboot
  29. choose --default reboot --timeout 60000 target && goto ${target}
  30. #kickstart 安装 CentOS
  31. :CentOS7.9
  32. kernel http://{next-server}/centos7.9/images/pxeboot/vmlinuz initrd=initrd.img inst.repo=http://{next-server}/centos7.9 ks=http://{next-server}/centos7u9.cfg
  33. initrd http://{next-server}/centos7.9/images/pxeboot/initrd.img
  34. boot
  35. #安装Windows
  36. :WIN10
  37. kernel http://{next-server}/wimboot
  38. initrd http://{next-server}/win10pe/install.bat install.bat
  39. initrd http://{next-server}/win10pe/winpeshl.ini winpeshl.ini
  40. initrd http://{next-server}/win10pe/Boot/BCD BCD
  41. initrd http://{next-server}/win10pe/Boot/boot.sdi boot.sdi
  42. initrd http://{next-server}/win10pe/sources/boot.wim boot.wim
  43. initrd http://{next-server}/win10pe/bootmgr.efi bootmgr.efi
  44. boot
  45. #从硬盘启动
  46. :local
  47. sanboot --no-describe --drive 0x80 || goto start
  48. :shell
  49. shell || goto start
  50. :reboot
  51. reboot
  52. :wq
复制代码
boot-ipv6.php 文件 和 boot.php 同等 更换 url 即可
创建 mkdir /var/www/html/ipv6/ 文件夹用存放boot-ipv6.php
  1. :CentOS7.9
  2. kernel http://[2024:1::1]/centos7.9/images/pxeboot/vmlinuz initrd=initrd.img inst.repo=http://[2024:1::1]/centos7.9 ks=http://[2024:1::1]/centos7u9.cfg
  3. initrd http://[2024:1::1]/centos7.9/images/pxeboot/initrd.img
  4. boot
  5. :WIN10
  6. kernel http://[2024:1::1]/wimboot
  7. initrd http://[2024:1::1]/win10pe/install.bat install.bat
  8. initrd http://[2024:1::1]/win10pe/winpeshl.ini winpeshl.ini
  9. initrd http://[2024:1::1]/win10pe/Boot/BCD BCD
  10. initrd http://[2024:1::1]/win10pe/Boot/boot.sdi boot.sdi
  11. initrd http://[2024:1::1]/win10pe/sources/boot.wim boot.wim
  12. initrd http://[2024:1::1]/win10pe/bootmgr.efi bootmgr.efi
  13. boot
复制代码
ok 这里就根本完成了
重启一下 httpd服务
  1. systemctl restart httpd
复制代码
现在局域网的其他设备可以通过BIOS-->XE boot 验证一下CentOS启动了

四、 Windows安装情况配置

4.1 下载Windows ADK 制作PE

ADK下载:Download and install the Windows ADK | Microsoft Learn
安装完成之后以管理员身份运行 Deployment and Imaging Tools Environment

这里我只创建了64位PE 
  1. mkdir C:\temp\winpe
  2. ## 创建32位PE
  3. copype x86 C:\temp\winpe\x86
  4. ## 创建64位PE
  5. copype amd64 C:\temp\winpe\amd64
复制代码
目次 C:\winpe\media 下即为 WINPE 文件
新建mkdir /var/www/html/win10pe文件夹
  1. mkdir /var/www/html/win10pe
复制代码
将media文件的内容拷贝至/var/www/html/win10pe
用scp传输输入root暗码
  1. C:\winpe\media>scp -r C:\winpe\media\  root@192.168.4.117:/var/www/html/win10pe
复制代码
  1. [root@localhost win10pe]# ls
  2. bg-bg    bootmgr.efi  de-de  en-gb  es-mx  fr-ca  hu-hu        ja-jp  lv-lv  pl-pl  ro-ro  sl-si            sr-latn-rs  uk-ua         zh-tw
  3. Boot     cs-cz        EFI    en-us  et-ee  fr-fr  install.bat  ko-kr  nb-no  pt-br  ru-ru  smb.conf-backup  sv-se       winpeshl.ini
  4. bootmgr  da-dk        el-gr  es-es  fi-fi  hr-hr  it-it        lt-lt  nl-nl  pt-pt  sk-sk  sources          tr-tr       zh-cn
  5. [root@localhost win10pe]#
复制代码
4.2 下载 wimboot

   wimboot 为一款 Windows 镜像格式文件的引导步伐,可让你可以或许启动到 WinPE 情况
   下载地址:https://github.com/ipxe/wimboot/releases/latest/download/wimboot
   您可以从 https://github.com/ipxe/wimboot/releases/latest/download/wimboot 下载最新版本的二进制文件。这是一个混淆二进制文件,可在 BIOS 和 64 位 UEFI 体系(包括启用了安全启动的 UEFI 体系)上运行。wimboot
  您还可以从 Release v2.7.6 (2023-08-16) · ipxe/wimboot · GitHub 下载替换二进制文件(例如用于 32 位 UEFI 体系)。
  旧版本可从 Releases · ipxe/wimboot · GitHub 获得。
  源代码生存在 GitHub - ipxe/wimboot: WIM bootloader 的存储库中。git
  将winboot上传至 /var/www/html  
  1. [root@localhost html]# ll
  2. total 84
  3. -rw-r--r--   1 root root  1739 Feb  1 12:03 boot.php
  4. drwxr-xr-x.  8 root root  4096 Jan 26 17:48 centos7.9
  5. -rw-r--r--.  1 root root  1945 Jan 26 18:37 centos7u9.cfg
  6. drwxr-xr-x   2 root root    27 Feb  1 13:44 ipv6
  7. -rw-r--r--   1 root root 67200 Jan 29 17:30 wimboot
  8. drwxr-xr-x  40 root root  4096 Jan 29 17:36 win10pe
  9. [root@localhost html]# pwd
  10. /var/www/html
  11. [root@localhost html]#
复制代码
4.3 安装smaba服务传输Windows文件

  1. yum install samba samba-client
复制代码
创建共享目次和 samba 用户
  1. mkdir /smbshare
  2. useradd smbuser
  3. smbpasswd -a smbuser
  4. chown smbuser:smbuser /smbshare
复制代码
修改和添加以下配置。为配置方便,此 samba 配置为答应匿名访问
 
  1. vim /etc/samba/smb.conf
复制代码
  1. [global]
  2.         workgroup = WORKGROUP
  3.         guest account = root
  4. [smbshare]
  5.         comment = Windows Media
  6.         path = /smbshare
  7.         public = yes
  8.         writeable = no
  9.         browseable = yes
  10.         guest ok = yes
复制代码
设置开机自启动
  1. systemctl start smb
  2. systemctl enable smb
复制代码
拷贝Windows镜像到smaba目次
  1. mount Win10.iso /mnt
  2. cp -a /mnt/* /smbshare/win10
复制代码
4.4. 验证samba服务器正常访问

通过局域网的Windows访问samba服务

4.5 创建的批处理文件 install.bat

创建的批处理文件 install.bat 中包罗连接文件服务器和运行 Windows 安装步伐的下令
  1. wpeinit
  2. net use z: \\10.10.10.10\smbshare\win10
  3. z:\setup.exe
复制代码
4.6 创建指示文件 winpeshl.ini

  1. vim /var/www/html/win10pe/winpeshl.ini
复制代码
  1. [LaunchApps]
  2. "install.bat"
复制代码
ok 至此全部步骤都已完成!!!
五、iPXE 情况验证


本人IPv4 / IPv6 PXE均可正常安装
Windows:

win11 报错 this pc can't run windows 11 参拷:
怎样办理安装Windows11时出现“这台电脑无法运行Windows11”_这台电脑无法运行win11-CSDN博客
win11 跳过联网参拷: 
Windows11跳过联网激活 & 跳过登陆操作 - 个人文章 - SegmentFault 思否

Linux:

legacy mode 也没问题的


在局域网的虚拟机legacy BIOS 引导不了iPXE好奇怪 ip都正常分配了 大概是我用的虚拟机版本太新了吧 

UEFI可以



其他:

想说点什么  

参拷资料: 

iPXE - open source boot firmware [start]
第 24 章 准备网络安装 Red Hat Enterprise Linux 7 | Red Hat Customer Portal
 14.5. DHCP for IPv6 (DHCPv6) Red Hat Enterprise Linux 7 | Red Hat Customer Portal
准备使用 PXE 从网络安装 :: CentOS Docs Site
pxe 怎样应对复杂的服务器硬件情况 | lvbibir's Blog
动态主机配置协议 (DHCP) 和引导协议 (BOOTP) 参数 (iana.org)
Dynamic Host Configuration Protocol for IPv6 (DHCPv6) (iana.org)
Kickstart 安装 :: CentOS Docs Site

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

鼠扑

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表