我有一个功能齐全的 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
永远等待 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 数据源。