假如有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服务配置
- TFTP服务配置
- IPXE及clonezilla配置
系统安装没有特别需要注意的地方,正常安装即可,然后就是固定服务器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 tftpNFS服务配置
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-serverHTTP服务配置
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效果展示
未完待续(最近比较忙)
。
。
。
其他文档
再生龙部署教程
推荐其他大神写的部署教程



