当前位置: 首页 > ds >正文

PXE实现Ubuntu,rockylinux,almalinux全自动安装

注意事项:

PXE服务器软件用的iventoy,iventoy不支持安全启动,所以使用本方法的同学记得先关闭安全启动

rockylinux和almalinux测试版本是9.2-10(9.0失败),低于9.2的切勿直接套脚本

Ubuntu仅测试了server版本,且版本大于20.04

仅支持UEFI模式的启动

1.iventoy下载及启动

本次使用windows进行部署,linux部署移步官网文档安装

把下载好的iventoy文件进行解压,得到以下文件,只需要记得一个点,ISO目录是存放ISO镜像的即可(需要PXE自动安装的系统ISO镜像要放到这个目录)

双击exe文件,可以看到如下提示框

2.软件配置

点击上图的打开链接,进入web管理页面

找到参数配置-DHCP服务器模式可以看到三种模式

这里简单讲解以下三个模式不同

internal

在已有DHCP服务器的基础上,软件再次作为DHCP服务器下发IP地址实现PXE(可能会与现网环境冲突,比如你设置internal模式分配的IP区间是192.168.1.230-240,同时有台主机静态设置了IP192.168.1.230,就有IP地址冲突)

External

External模式不再开启软件的DHCP功能而是侦听同网段的DHCP报文,然后下发给客户端启动文件(需在DHCP服务器指定next server为iventoy服务器IP,option67文件名为iventoy_loader_16000)

ExternalNet

ExternalNet模式也不会开启软件的DHCP功能,需要同网段以及跨网段的DHCP服务器配置next server为iventoy服务器IP,option67文件名为iventoy_loader_16000_uefi(官网也写了bios模式的参数,但是大多数情况支持uefi就够了;而且跨网段两种模式都想支持DHCP服务器只能是windows或者LINUX因为交换机,路由器等网络设备不能够根据DHCP报文的信息动态设置bootfile选项)

我是为了局域网内所有网段能够实现uefi的PXE去自动装机,所以用ExternalNet模式,下文全部用ExternalNet模式下的配置进行讲解,看到这一步也请把的DHCP服务器模式设置为ExternalNet模式

下载需要自动安装的镜像,把镜像放到前文所提到的ISO目录,放好后点击刷新,保证镜像看见

3.自动安装脚本

首先我们了解以下rockylinux以及almalinux的自动安装实现

kickstart

ks文件定义了系统在安装过程中的各个操作,例如:时区,用户,分区等等

所以我们通过编写ks.cfg自动应答脚本来实现自动安装

有以下注意事项:

1.该脚本用于单盘的情况,如果有多个硬盘,自己把这个脚本喂给AI处理

2.代码中的"$6$AiIM4lJda4tg.22v$y9tsaUfS8SuK43xi19RJd1.jmfZzm7xB8UiYMaoZdtWsC3mcawqaNX.YHDJcYKTZrdBsRBuhX67X9tiUHbhio0"其实是密码的加密,对应的密码是Test@321。

怎么生成自己的加密密钥呢,在现有的linux系统中输入以下命令进行生成

openssl passwd -6 'Test@321'(Test@321换成你自己的密码)

# Generated by Anaconda 34.25.5.17
# Generated by pykickstart v3.32
#version=RHEL9
# Use graphical install
graphical%addon com_redhat_kdump --enable --reserve-mb='auto'
%end# Keyboard layouts  设置键盘为中文
keyboard --xlayouts='cn'
# System language 设置语言为中文
lang zh_CN.UTF-8# SELinux configuration 关闭selinux
selinux --disabled%pre
#!/bin/sh
wipefs -a /dev/sda              # 清除所有文件系统签名
dd if=/dev/zero of=/dev/sda bs=1M count=10  # 清除分区表和引导区
vgremove -f $(vgs -o vg_name --noheadings) 2>/dev/null || true  # 强制删除卷组
pvremove -ff /dev/sda* 2>/dev/null || true  # 强制删除物理卷 这一步的意义是本身有系统的话,先把硬盘的东西删除
%end%packages
@^minimal-environment	#最小化安装%end# Run the Setup Agent on first boot 同意eula以及关闭快速启动
eula --agreed
firstboot --disable# Disk partitioning - 这一步的意义就是创建启动分区,分20G给home目录,其他全给根目录
ignoredisk --only-use=sda
clearpart --all --initlabel --drives=sda
part /boot/efi --fstype="efi" --ondisk=sda --size=600 --fsoptions="umask=0077,shortname=winnt"
part /boot --fstype="xfs" --ondisk=sda --size=1024
part pv.116 --fstype="lvmpv" --ondisk=sda --size=1 --grow
volgroup linux --pesize=4096 pv.116
logvol /home --fstype="xfs" --size=20480 --name=home --vgname=linux
logvol / --fstype="xfs" --size=1 --grow --name=root --vgname=linux# System timezone 设置时区
timezone Asia/Shanghai --utc# Root password  配置root密码以及允许ssh登录,因为我没打算创建新用户直接使用root
rootpw --iscrypted --allow-ssh $6$AiIM4lJda4tg.22v$y9tsaUfS8SuK43xi19RJd1.jmfZzm7xB8UiYMaoZdtWsC3mcawqaNX.YHDJcYKTZrdBsRBuhX67X9tiUHbhio0#安装后自动重启
reboot

同样的乌班图基于autoinstall进行自动安装,我们通过编写user-data脚本(注意user-data没有后缀)如下

#cloud-config
autoinstall:version: 1# 语言和键盘设置locale: zh_CN.UTF-8keyboard:layout: cn# 时区设置timezone: Asia/Shanghai# 用户和身份配置identity:hostname: ubuntu-serverusername: testpassword: "wadwadwaeawewadw"  # 随便填,反正下面会修改# 启用root并允许SSH登录,设置root和test的密码为Test@321ssh:install-server: trueallow-pw: trueallow-root: trueuser-data:disable_root: falsechpasswd:list: |root:Test@321test:Test@321expire: false# 修复后的存储分区配置 (UEFI模式)storage:config:- type: diskid: disk0path: /dev/sdaptable: gptwipe: superblockgrub_device: true- type: partitionid: efi-partitiondevice: disk0size: 512Mflag: bootgrub_device: true- type: partitionid: root-partitiondevice: disk0size: -1  # 使用所有剩余空间- type: formatid: efi-formatvolume: efi-partitionfstype: fat32- type: formatid: root-formatvolume: root-partitionfstype: ext4- type: mountid: efi-mountdevice: efi-formatpath: /boot/efi- type: mountid: root-mountdevice: root-formatpath: /# 网络配置 (匹配所有网卡)network:version: 2ethernets:all-en:match:name: "*"dhcp4: truedhcp6: false# 安装选项和软件包source:id: ubuntu-server  # server安装packages:- vim                     # 安装vim,nano,wget软件- nano- wget# 安装前后命令early-commands:- systemctl stop ssh  # 防止安装时SSH冲突# 安装后配置和重启late-commands:# 确保允许root登录- curtin in-target --target /target -- sed -i 's/#\?PermitRootLogin.*/PermitRootLogin yes/g' /etc/ssh/sshd_config# 重启SSH服务- curtin in-target --target /target -- systemctl restart ssh# 安装完成后自动重启- shutdown -r now# 确保安装完成后自动重启shutdown: reboot

文档供大家参阅以及修改脚本

Ubuntu:

自动安装配置参考手册 - Ubuntu 安装文档https://canonical-subiquity.readthedocs-hosted.com/en/latest/reference/autoinstall-reference.html#packagesalmalinux以及rockylinux:

Introduction · kickstart 系统安装中文文档https://octowhale.gitbooks.io/kickstart/content/

4.镜像绑定自动安装脚本

还是到管理界面,点击镜像管理选择要绑定自动安装脚本的镜像,然后点击右下方的新增,添加脚本的绝对路径,比如我把user-data放到了桌面,我的路径就是:C:\Users\Administrator\Desktop\user-data;添加上去后会自动变成反斜杠的格式,这个不用管。然后默认自动脚本编号是0代表不选择自动安装脚本,把它改成1(对应下面的编号),然后设置一个超时时间

下图是rockylinux和almalinux的;不过脚本变成了ks.cfg,大家一定要注意

回到启动信息,点击绿色按钮启动

5.DHCP网络配置

前面提到了ExternalNet模式不侦听DHCP报文,所以同网段和其他网段都得指定DHCP next server和option67参数,以华为交换机为例配置如下(172.16.201.45是iventoy服务器的IP地址,iventoy_loader_16000_uefi是前文提到的引导文件):

#接口DHCP
interface Vlanif1000ip address 192.168.188.1 255.255.255.0dhcp select interfacedhcp server ip-range 192.168.188.21 192.168.188.199dhcp server gateway-list 192.168.188.1dhcp server dns-list 223.5.5.5dhcp server next-server 172.16.201.45dhcp server option 67 ascii iventoy_loader_16000_uefi#全局DHCP地址池
ip pool vlan100gateway-list 172.31.100.1network 172.31.100.0 mask 255.255.255.0excluded-ip-address 172.31.100.2 172.31.100.50dns-list 223.5.5.5next-server 172.16.201.45option 67 ascii iventoy_loader_16000_uefi

6.测试

先看一下效果图

http://www.xdnf.cn/news/15684.html

相关文章:

  • 第五届计算机科学与区块链国际学术会议(CCSB 2025)
  • MEF 在 WPF 中的简单应用
  • 多人协作游戏中,团队共同获取的装备如何确定按份共有或共同共有
  • 基于Llama的RAG 3种模型配置方法
  • Django REST Framework 入门指南:从 0 到 1 实现 RESTful API
  • Linux-局域网构建+VLAN 划分 + 端口 MAC-IP 绑定 + 静态 DHCP
  • Python 进阶学习之全栈开发学习路线
  • 如何删除 VSCode 账号的远程同步备份记录数据
  • 如何使用VScode使用ssh连接远程服务器不需要输入密码直接登录
  • 信息收集知识总结
  • LabVIEW液压机智能监控
  • gem install报错解析
  • 【C# in .NET】11. 探秘泛型:类型参数化革命
  • JAVA面试宝典 -《分布式ID生成器:Snowflake优化变种》
  • 基于CentOS的分布式GitLab+Jenkins+Docker架构:企业级CI/CD流水线实战全记录
  • 基于 Spring Boot 构建的文件摆渡系统(File Ferry System)
  • 更灵活方便的初始化、清除方法——fixture【pytest】
  • AWS WebRTC 并发 Viewer 拉流失败分析:0.3 秒等待为何如此关键?
  • 消息转换器--通过此工具进行时间转换
  • Mybatis-2快速入门
  • 【WRFDA数据教程第一期】LITTLE_R 格式详细介绍
  • 【源力觉醒 创作者计划】百度携文心 4.5 入局,开源大模型市场再添一员猛将,与 Qwen3 对比如何?
  • 3DGS之COLMAP
  • iOS 抓包工具选择与配置指南 从零基础到高效调试的完整流程
  • Android动态获取当前应用占用的内存PSS,Java
  • 汽车功能安全-相关项集成和测试(系统集成测试系统合格性测试)-12
  • 从电子管到CPU
  • 迁移学习的概念和案例
  • 【前端Vue】this.resetForm(“form“)重置表单时出现indexOf报错的解决方案
  • Java 增强 switch 语句详解:从基础到进阶的全面指南