使用 Syslinux 通过 PXEBoot 部署 Ubuntu 22.04

使用 Syslinux 通过 PXEBoot 部署 Ubuntu 22.04

我有一个功能齐全的 DHCP、ftp 和 tftp 服务器,其中有一个 tftpboot 目录,其中 PXEboot 中配置的机器可以从网络顺利加载 syslinux。

我正在尝试通过 SYSLINUX 在 PXE 中安装 ubuntu 22.04。

我已经关注了邮政为了达成这个。

在这篇文章中,它说,你必须从 ubuntu 22.04 服务器安装程序 ISO 中提取 vmlinuz 和 initrd 内核文件,并将其放入 tftpboot 目录中。然后从位于 pxelinux.cfg 目录中名为 default 的配置文件加载 ISO。下面是与 jammy 相关的 tftpboot 目录的非详尽示意图(省略了 syslinux 传统使用的其余文件)

└── tftpboot    
    ├── pxelinux.0
    ├── jammy
    │   ├── initrd
    │   └── vmlinuz
    ├── pxelinux.cfg
    │   └── default
    └── syslinux (All the Syslinux boot files)
        └── bios
            ├── ldlinux.c32
            ├── libutil.c32
            └── menu.c32

这是我的 ftp 目录

└── ftp   
    └── Ubuntu-22.04
        ├── ubuntu-22.04.1-live-server-amd64.iso
        └── Kickstart
            ├── user-data
            └── meta-data

这是我首先尝试最小安装的用户数据文件。元数据可以为空:

#cloud-config
autoinstall:
  identity:
    hostname: jammy-minimal
    password: $6$gnqbMUzHhQzpDEw.$.cCNVVDsDfj5Feebh.5O4VbOmib7tyjmeI2ZsFP7VK2kWwgJFbfjvXo3chpeAqCgXWVIW9oNQ/Ag85PR0IsKD/
    username: ubuntu
  version: 1

这是我设置的默认配置文件。

default menu.c32
menu title Ubuntu installer

LABEL ubuntu
    MENU LABEL Install Ubuntu Jammy Server
    MENU DEFAULT
    KERNEL jammy/vmlinuz
    IPAPPEND 1
    APPEND initrd=jammy/initrd ip=dhcp url=ftp://172.16.0.4/Ubuntu-22.04/ubuntu-22.04.1-live-server-amd64.iso autoinstall ds=nocloud-net;s=ftp://172.16.0.4/Ubuntu-22.04/Kickstart

最后,在 ftp 中添加用户数据(云配置)和元数据文件,默认文件将能够使用它来下载其配置以启动自动安装,用户数据具有我们之前手动选择的所有步骤,以便无需手动干预(语言、格式等)即可进行安装。

内核和 ISO 已正确加载,并启动安装过程直至安装菜单,但当需要加载云配置(用户数据)文件以启动自动安装时,问题就出现了。即使我在默认文件中指定了它,它也无法找到它。下图中就是这种情况。

加载 ISO

加载 ISO

永远等待 cloud-init

永远等待 cloud-init

然后最终启动菜单

然后最终启动菜单

显然,如果我从默认 syslinux 文件加载用户数据文件,它将被忽略。这怎么可能?我必须从默认文件以外的其他地方加载它吗?我已经考虑过尝试从修改后的 ISO 加载它。这是一个好的选择吗?谢谢

答案1

永远等待 cloud-init

你检查了吗cloud-init 的日志文件? 你看见什么了?

我怀疑 cloud-init 永远等待的原因是您没有提供有效的 NoCloudNet 字符串。Cloud-init 的 NoCloud 数据源不支持ftp。来自文档

如果 ds=nocloud,seedfrom 值必须以 / 或 file:// 开头。如果 ds=nocloud-net,seedfrom 值必须以 http:// 或 https:// 开头,并以尾随的 / 结尾。

如果你检查你的 cloud-init 日志,我敢打赌你会看到这个警告

更新:在 24.2 版本中,FTP 将被添加到 cloud-init 的 NoCloud 数据源。

相关内容