无人值守一键全自动装机?快来试试Cobbler
前言
最近在研究 DHCP 服务,注意到 DHCP 可以配挺多 Option 的,其中我觉得最有意思的就是 Option66 和 Option67 了,指定这两个参数就可以实现网络启动,通过搭建 PXE 服务就可以实现无人值守一键装机,不需要 U 盘,不需要人看着,只需要插上网线就能搞定,是不是很有意思?今天咱们就来安装一套 PXE 服务!
准备阶段
选型
概述
网上的教程基本上都是把 DHCP 服务和 PXE 服务安装在一台机器上面,在实际的网络环境中,往往已经存在了 DHCP 服务(路由器 or 交换机),而且这种通过手写配置的 DHCP 并不好进行管理,所以本次部署我们将 DHCP 和 PXE 分开。
顺带一提,如果需要把 DHCP 和 PXE 放在一台机器上运行,可以不装 dhcp 包,试试 ISC DHCP 加上 glass 管理界面,前几天搭了一套还挺好看。不过 glass 是一个 DashBoard ,只能看状态不能做设置,WEB 上给了一个写设置的地方但是其实是一个网页编辑器,还是要写文本的配置,不小心改错了就寄()
DHCP
DHCP 的话,可以用内网现有的 DHCP 服务器,如果没有的话,可以试试 ROS 或者 OPNsense ,ROS 的话,现在 CHR 版本可以白嫖了,优点是 DHCP 的 Option 支持比较全,各种该有的功能都有了,CLI 类似交换机,缺点是 WinBox 配置和逻辑上手稍复杂一点,加上没有中文版,OPNsense 算是 pfSense 的继任,基于 FreeBSD,在做 PXE 的时候优点是 Option67 比较灵活,可以根据启动类型指定文件(也就是能同时支持 Legacy 和 UEFI ,不然只能选一个,服务器一般都用 Legacy 所以倒是也无妨)。两者都非常稳定,我试用了一下,我个人的话偏向用 ROS ,实际部署的时候上虚拟机开网卡直通应该就能达到正常物理机的效果
PXE
选用的是 CentOS7 + Cobbler ,Cobbler 同时支持 Linux 和 Windows 的自动安装,集成了 KickStart 支持,联动 Apache 、DHCP(这里我们不装)、TFTP 、PXE 、电源管理、仓库管理等服务,全家桶一次安排上,很好用
安装
环境准备
准备一台 CentOS7 的机器
首先关闭防火墙
systemctl disable firewalld && systemctl stop firewalld |
关闭 SELinux ,Cobbler 和 SELinux 不兼容
setenforce 0 |
换源,提升下载速度,选用 tuna 源
sed -e 's|^mirrorlist=|#mirrorlist=|g' \ |
安装 Cobbler
升级系统软件包 安装 Cobbler 以及相关服务 |
配置 TFTP
编辑 tftp 服务配置文件 /etc/xinetd.d/tftp
service tftp |
针对 Debian 系,调整 deb 源
yum -y install debmirror |
安装电源管理工具
yum -y install fence-agents |
修改 WEB 管理密码
WEB 的地址是 https://IP/cobbler_web
/etc/cobbler/users.conf #Web服务授权配置文件 |
完成配置,重启相关服务
systemctl restart tftp |
check 完成之后应该只剩一个问题,说不能支持多架构的操作系统,因为我们只需要支持 x86_64 所以无所谓,在 CentOS7 的 yum 源装出来的 cobbler 是不支持 cobbler get-loader 命令的所以也没有办法解决,只需要确保 SYSLINUX 包安装即可
yum install -y syslinux |
配置 distro
主要用来定义和设置系统发行版本,包含了系统的内核,引导文件,以及安装包等内容,一个 ISO 文件配置一个 distro
挂载 iso 文件
mount /opt/CentOS-7-x86_64-DVD-2009.iso /mnt |
导入镜像
cobbler import --path=/mnt/ --name=CentOS-7-x86_64 --arch=x86_64 |
后期想改名字的话,可以在 WEB 页面轻松修改
自定义配置 profile
定义自动安装应答文件
主要用来定义 kickstart 配置文件,安装时依据配置文件进行定制化自动安装,配置此项时要和distro进行关联
准备 KickStart 文件
在进行 profile 配置之前,我们需要准备 kickstart 文件对安装进行自动应答,kickstart 文件的生成方式有以下几种
- 购买红帽订阅,可以在红帽支持网站生成
- 使用 kickstart 的 GUI (应该是叫 system-config-kickstart 这个包来着),不大推荐,有些系统的不一定能生成,而且有些参数需要微调,建议用它生成一个模板参考,对小白比较友好
- RHEL 系安装后在 /root 文件夹生成的 anaconda-ks.cfg 记录了本次安装的设置信息(推荐),手动安装一次,参考这个配置来做 kickstart
- 参考官方文档手写 kickstart 文件,像 OpenEuler 、Fedora 官方都给了示例
生成了 Kickstart 文件之后,我们指定了用户密码,时区,硬盘分区,网络,语言,键盘,安装源,安装的软件包,安装后操作等等,即可用它完成 profile的配置
将 kickstart 文件上传到以下位置
/var/lib/cobbler/kickstarts/
编辑配置文件,命令行导入时会自动使用一个 kickstart 文件(按默认配置完成安装,需要改成我们制作的文件完成定制自动安装)
cobbler profile edit --name=CentOS-7-x86_64 --kickstart=/var/lib/cobbler/kickstarts/ks_centos7_9_2009x64.cfg |
name 是 distro 的名称
tips:对 KickStart 文件怎么写没有头绪?本文最下面提供一份脱敏的 KickStart 文件示例供参考
针对网络安装的内核启动选项调整
需要把网卡归一化命名为 eth0 ,方便搭配 KickStart 文件使用(针对 CentOS7 及以后的 Linux 操作系统)
如图,修改 Profile 的内核启动参数,Kernel Options=biosdevname=0 net.ifnames=0
这样电脑的网卡名称就一定是 eth0 ,写 KickStart 的时候就可以把网卡名称指定为 eth0
在启动时 TAB 查看启动参数,发现已经添加这个参数到启动选项中
修改引导界面的菜单
你可能注意到了,上面的引导菜单里面的标题你和我的不一样,如果想修改的话,修改下面的文件
vi /etc/cobbler/pxe/pxedefault.template |
配置 DHCP 服务器
需要配置的有三项
- Next Server -> TFTP 服务器 IP ,本例和 PXE 部署在同服务器
- Option66 -> PXE 服务器 IP
- Option67 -> 启动文件:pxelinux.0
配置的时候不同设备方法不一样,以下介绍三种设备的配置方法供参考
文本转十六进制在线工具:http://www.ab126.com/goju/1711.html
iKuai
需要转16进制并进行处理,具体请参考 iKuai 的文档
假设 PXE 服务器 IP 为 192.168.1.123
Option66、67需要把原值转十六进制去掉0x并用英文冒号“**:**”两两隔开
Next Server:192.168.1.123
Option66:31:39:32:2e:31:36:38:2e:31:2e:31:32:33
Option67:70:78:65:6c:69:6e:75:78:2e:30
ROS
需要转16进制并进行处理,具体可参考 ROS从入门到精通v6.7e
假设 PXE 服务器 IP 为 192.168.1.123
Option66、67需要把原值转十六进制去掉0x并在最前添加0x
IP->DHCP Server->Options
Name | Code | Value |
---|---|---|
option66 | 66 | 0x3139322e3136382e312e313233 |
option67 | 67 | 0x7078656c696e75782e30 |
IP->DHCP Server->Networks
选择需要修改的 IP 地址段->Next Server:192.168.1.123
华为交换机
看官方文档即可,不需要转16进制,比较省事儿
[SwitchA] interface vlanif 10 |
顺带一提,有趣的是,正是这篇文档让我确定能够把 DHCP 服务和 PXE 分开部署,网上的教程都是不分开,这很不合鲤的说
蛤为队拿下一分
体验自动装机
马上来体验一下
开机时选择网卡启动,然后选择你想要安装的系统,喝杯茶,散散步,回来系统就自己装好了
我的评价是:你已经是一台成熟的机器了,要学会自己给自己装系统
题外话:这个印章最近挺火的,我也去找店家对了暗号整了一个,心奈阔耐捏
过段时间再去进点儿ba新壁纸放博客
针对特殊镜像的特殊处理
手动导入
部分最新系统使用 Cobbler import 时会出错,这时我们需要手动导入
首先使用正常的方式导入
mount /opt/ Fedora-Server-dvd-x86_64-36.iso /mnt |
发现报 Task Failed!
此时虽然 Task Failed 了,但是系统已经导入到相关文件夹了,这时我们需要去 Cobbler 的 WEB 界面进行手动导入
Configuration->Distros-> Create New Distro
填写以下参数
其中
- Kernel 参数是 /var/www/cobbler/ks_mirror/ 加上 http://服务器IP/cobbler/ks_mirror/ 这个目录下镜像的 vmlinuxz 文件位置,一般是在 images/pxeboot/ 下。以 Fedora Server 36 为例,这个文件在 Fedora-Server-dvd-x86_64-36-x86_64/images/pxeboot/vmlinuxz
- Initrd 参数同理,参照 Kernel 参数填写,文件是 vmlinuxz 同目录下 initrd.img 文件
- Kernel Option 参数见下面一节的说明
- KickStart Metadata 暂时没法填写,先提交一次之后在 http://服务器IP/cblr/links/ 下就能找到相应文件,写上 tree=http://@@http_server@@/cblr/links/ 加上系统文件夹名称
- Architecture 填写系统架构
- Breed 根据系统类型填写
- OS Version 在找不到同款的情况下填写最接近的即可
Tips:以这种方法导入的需要手动创建 Profile ,创建 Profile 之后即可在启动菜单看到该项
RHEL9(Fedora 36 | RockyLinux 9.0)
注意事项
inst. 前缀
根据 Fedora 文档 的说法,想要装新版的 RHEL 系列系统,不能直接使用 ks= 参数了,也就是说,Cobbler 提供给我们的参数不再能够使用,需要把 ks= 选项换成 inst.ks= (也就是说需要加个前缀)
stage2
同时发现,这些系统还需要手动提供 stage2 参数(指定 root 挂载文件的地址,不提供会报 missing /dev/root 的错误),同样需要加 inst. 前缀
修改启动选项
ks 选项
如图,在 profile 中的内核启动参数添加
inst.ks=http://192.168.208.33/Fedora-Server-dvd-x86_64-36.cfg |
同时指定 KickStart 文件为空,效果可以在 PXE 启动界面按 TAB 键确认
指定 stage2
stage2 需要指定为解压出来的镜像 iso 的文件位置,在 Distro 中添加内核参数
记得也需要添加 inst. 前缀
inst.stage2=http://【服务器IP】/cblr/links/【系统文件夹名称】/ |
Windows 自动部署
你没看错, Windows 也是可以用 Cobbler 部署的,类似 KickStart 文件,Windows 在有了相应的应答文件之后也是可以自动装机的,准备以下东西就OK
- SMB 服务器
- 定制 WinPE ISO
- 应答文件
应答文件
先说最重要的应答文件,它的作用类似 KickStart ,帮咱们选择正常安装 Windows 时的选项,有了它,就能完成自动安装。那么这个文件怎么生成捏?那就需要我们去巨硬的官网下载 ADK 工具了,网上的教程多是基于 Windows7 的 AIK 工具制作的教程,我也用这个试了一下,发现一些 OEM 机器的螃蟹网卡 Win7 PE 是不支持的,所以我们使用 Win10 的 ADK 工具,版本选择 1607 ,能够保持较好的兼容性
Tips:以下操作()均需要在 Windows 上进行
注:这里是在讲应答文件的生成,为什么提到了 WinPE 呢?
因为 ADK 工具和 WinPE 预安装环境是配套使用的
安装了 ADK 和 WinPE add-on 之后,咱们就可以开始制作应答文件了
首先,你需要准备好需要安装的原版镜像一份,挂载镜像,把 .\source\install.wim 这个文件复制出来
打开系统映像管理器
在左下角的“选择 Windows 映像或编录文件”选择 install.wim 文件,右边添加应答文件,选择映像时选择要自动安装的系统并记下它在菜单里面的位置(是第几个,从1开始)
在左边“Windows 映像”区域添加属性到应答文件那边,在网上找了一张图供参考,实际配置时稍有不同,下面我会结合我的配置说一下
安装语言请务必改为 en-US 否则某些系统可能会安装出错(比如我这里的 Windows Server 2022 DataCenter),这里只影响 Windows 安装程序语言,不影响实际使用
这里的 Restart 是安装后自动重启
这里选择 WillWipeDisk 清除已有分区
这里 Size 是分区大小,单位是 MB ,Type 选择 Primary 主分区
这里设置 C 盘文件系统和驱动器名称,盘符
这里的数字是选择安装的系统,最上面让记下来是第几个用来填在这里
这里填写 GVLK 密钥,用于搭配 KMS 服务器激活
这里填写系统基本配置,时区,计算机名,OEM名,组织名,等等
这里填写自动更新选项和网络位置
这里填写 Administrator 的密码,明文写在这里,保存的时候会转换成加密的密码
最后保存这个 XML 格式的应答文件即可
SMB 服务器
Windows 的基本文件共享,无需赘述,记得创建只读共享,而且记得创建一个新用户给 PXE 的 WinPE 用,安全性更高
如果是按照我的教程使用 Win10 来做 WinPE 的话,注意 SMBv1 已经被禁用了,系统默认会用 SMBv3 ,所以不能再用 CentOS7 + SAMBA 来起 SMB 服务了,你需要另外找一台 Windows 服务器起一个 SMB 服务器,否则大概率在 PE 里面挂载不了 SMB 盘,Windows 不能通过 Linux 的 HTTP 获取文件,只能用 SMB
在 SMB 对应的共享文件夹内存放系统 ISO 文件里面的全部内容(复制粘贴)以及应答文件(在同目录下)
定制 WinPE ISO
还是上面那张图,这里还有一个“部署和映像工具环境”,这次需要用这个
打开之后依次输入以下命令,这里假设你的 SMB 服务器是 192.168.1.123 ,SMB 共享路径是 ./share ,SMB 账号 luckykeeper ,密码 cocoa ,同时注意应答文件名称和系统 iso 解压文件(cd win2022)存放位置,请根据实际情况修改
copype amd64 C:\winpex |
Cobbler 配置
把 XML 自动应答文件上传到 Cobbler 的 kickstart 文件夹下,把 WinPE ISO 上传到一个合适的位置
cobbler distro add --name=windows2022 --kernel=/var/lib/tftpboot/memdisk --initrd=/windows_isos/winpe_cobbler_amd64.iso --kopts="raw iso" |
其中 kernel 是固定值不能修改,initrd 填写 WinPE ISO 文件的位置
然后去添加 Profile
这里的 kickstart 文件实际上不起作用,这里填写只是为了参数占位,实际使用的应答文件由制作 WinPE ISO 时指定
cobbler profile add --name=WindowsServer2022DC --distro=windows2022 --kickstart=/var/lib/cobbler/kickstarts/AutoRunWin2022.xml |
最后即可体验一键安装 Windows 咯~
Windows 为防止你重复安装误清除数据,在蓝色的 PXE 界面加载 WinPE ISO 完成之后会让你按下任意键确认从 WinPE 启动,这个时间很短,一定不要错过
关于 Debian 系
因为 KickStart 是红帽家整的 ,使用 Debian 系的能用但是支持的不好,Ubuntu Server 在 GitHub 上有第三方写的过时的(作者自己说的)KickStart 文件,Ubuntu 官方文档推荐你用它自己的那套东西,因为我这里实际部署基本上都是 RHEL 系的,需要 Debian 系的时候很少,所以我没有进行尝试,根据网上的说法,你需要去定制镜像文件,感兴趣的可以自己去试试看
附录
Windows 10 1607 ADK 和 WinPE add-on ,方便下载不便的用户自取
CentOS 7 脱敏 KickStart 文件,供参考
其它参考资料,可供参考,我搭建服务的时候主要综合这些文字参考,感谢各位大佬
- 配置DHCP服务器实现为客户端分配PXE启动相关参数示例 - S9300, S9300X V200R021C00, C01 配置指南-IP业务 - 华为
- 【详细步骤】CentOS7部署Cobbler无人职守批量自动化装机服务 - 知乎
- RouterOS入门到精通 – YuS
- cobbler之安装windows server 2019(win10)篇 - 知乎
- Releases/34/ChangeSet - Fedora Project Wiki
- Tree - fedora-kickstarts - Pagure.io
- Windows 7 SP1无人值守自动应答文件制作 - impluse - 博客园
- 使用Cobbler批量安装windows_林锋Space的博客-CSDN博客_cobbler安装windows
- Download WinPE (Windows PE) | Microsoft Learn
- Windows系统挂载SMB文件系统