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.代码中的"6AiIM4lJda4tg.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-8
  keyboard:
    layout: cn
  # 时区设置
  timezone: Asia/Shanghai

  # 用户和身份配置
  identity:
    hostname: ubuntu-server
    username: test
    password: "wadwadwaeawewadw"  # 随便填,反正下面会修改

  # 启用root并允许SSH登录,设置root和test的密码为Test@321
  ssh:
    install-server: true
    allow-pw: true
    allow-root: true
  user-data:
    disable_root: false
    chpasswd:
      list: |
        root:Test@321
        test:Test@321
      expire: false

  # 修复后的存储分区配置 (UEFI模式)
  storage:
    config:
      - type: disk
        id: disk0
        path: /dev/sda
        ptable: gpt
        wipe: superblock
        grub_device: true
      - type: partition
        id: efi-partition
        device: disk0
        size: 512M
        flag: boot
        grub_device: true
      - type: partition
        id: root-partition
        device: disk0
        size: -1  # 使用所有剩余空间
      - type: format
        id: efi-format
        volume: efi-partition
        fstype: fat32
      - type: format
        id: root-format
        volume: root-partition
        fstype: ext4
      - type: mount
        id: efi-mount
        device: efi-format
        path: /boot/efi
      - type: mount
        id: root-mount
        device: root-format
        path: /

  # 网络配置 (匹配所有网卡)
  network:
    version: 2
    ethernets:
      all-en:
        match:
          name: "*"
        dhcp4: true
        dhcp6: 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 Vlanif1000
 ip address 192.168.188.1 255.255.255.0
 dhcp select interface
 dhcp server ip-range 192.168.188.21 192.168.188.199
 dhcp server gateway-list 192.168.188.1
 dhcp server dns-list 223.5.5.5
 dhcp server next-server 172.16.201.45
 dhcp server option 67 ascii iventoy_loader_16000_uefi

#全局DHCP地址池
ip pool vlan100
 gateway-list 172.31.100.1
 network 172.31.100.0 mask 255.255.255.0
 excluded-ip-address 172.31.100.2 172.31.100.50
 dns-list 223.5.5.5
 next-server 172.16.201.45
 option 67 ascii iventoy_loader_16000_uefi

6.测试

先看一下效果图

相关推荐
A小辣椒1 天前
TShark:Wireshark CLI 功能
linux
A小辣椒1 天前
TShark:基础知识
linux
AlfredZhao1 天前
OCI 明明分配了 200G 系统盘,为什么 df 只看到 30G?
linux·oci
AlfredZhao2 天前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户9718356334662 天前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪2 天前
linux 拷贝文件或目录到指定的位置
linux
大树883 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠3 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质3 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
bush43 天前
嵌入式linux学习记录十四、术语
linux·嵌入式