Ubuntu 内核启动参数 `ip=` 不被遵守;无法确定原因

Ubuntu 内核启动参数 `ip=` 不被遵守;无法确定原因
  • 我有一台具有两个网络接口的机器。
  • 请参阅下文(上下文)了解设置...

我的启动参数如下:

  set i ${net0/ip}
  set ns 192.168.99.101
  set t tftp://${ns}/pxelinux.cfg
  set h http://${ns}:8070/api/1.0
  initrd ${t}/initrd.gz
  kernel ${t}/vmlinuz initrd=${t}/initrd.gz BOOTIF=${net0/mac} vga=788 net.ifnames=0 biosdevnames=0 auto url=${h}/preseed ip=192.168.99.89:::255.255.255.0::eth0:none ip=:::::eth1:dhcp BOOT_DEBUG=1 language=en country=US locale=en_US.UTF-8

启动成功,但内核 IP 配置没有发生。我没有从 NFS 启动,我知道ip=启动参数最初是为此设计的,但 Google 表示这应该仍然有效。

检查syslog测试机上的情况,除了这个条目外,我找不到任何对调试有用的东西:

INFO: Could not find valid BOOTIF= entry in /proc/cmdline

然而,/proc/cmdline是:

# cat /proc/cmdline
initrd=tftp://192.168.99.101/pxelinux.cfg/initrd.gz BOOTIF=08:00:27:5e:18:12 vga=788 net.ifnames=0 biosdevnames=0 auto url=http://192.168.99.101:8070/api/1.0/preseed ip=192.168.99.89:::::eth0:none ip=:::::eth1:dhcp BOOT_DEBUG=1 language=en country=US locale=en_US.UTF-8

在安装过程中,会出现一个对话框,指出已找到多个接口,并要求我选择要用作主接口的接口。我选择 eth1,因为是 DHCP,我希望出现此对话框的原因只是因为我的cmdline参数尚未处理。然而,在 eth0 发生 DHCP 后不久,我收到了无法找到预置的错误。这显然是因为参数尚未ip=处理。这就是我试图解决的问题。

以下是有关当前设置的更多背景信息...

  • 该 ISO 源自经过轻微重制的 Ubuntu 18.04 ISO,并使用 ipxe ROM 代替 pxelinux 内核。目前未使用undionly.kpxe...。
  • 测试机器是一个 Virtualbox VM,它将重新制作的 ISO 作为虚拟 CDROM 启动,因此我可以以交互方式运行启动命令(以创建 undionly)。
  • 当前按以下顺序运行手动步骤(在启动时):
    • config net0
      • IP地址:192.168.99.89
      • 网络掩码:255.255.255.0
      • 本地局域网不需要网关。
    • dhcp net1
    • ifopen
    • set i ${net0/ip}
    • set ns 192.168.99.101
    • set t tftp://${ns}/pxelinux.cfg
    • set h http://${ns}:8070/api/1.0
    • initrd ${t}/initrd.gz
    • kernel ${t}/vmlinuz initrd=${t}/initrd.gz BOOTIF=${net0/mac} vga=788 net.ifnames=0 biosdevnames=0 auto url=${h}/preseed ip=${i}:::255.255.255.0::eth0:none ip=:::::eth1:dhcp BOOT_DEBUG=1 language=en country=US locale=en_US.UTF-8
    • boot
  • 如前所述,虚拟机有两个接口。接口 1 是仅主机 (vboxnet0) 接口。接口 2 是桥接接口,桥接至主机上的 wifi 接口。
  • cdrom 包含安装所需的所有信息。tftp 服务器包含一个网络启动内核,但我目前没有使用网络启动,这可能是问题所在,接下来我将测试这个想法。
  • 那里的 API 是一个自主开发的服务(我正在编写),它是这个项目的根源。这是我为这个项目编写的配置管理工具。目前,它所做的只是出售预置文件。

最终目标是使用此网络配置自动安装动态创建的预置文件。

需要注意的一点是,如果我切换到测试机上的虚拟控制台并在 eth0 上设置 IP 地址,则安装可以完美进行。

顺便说一句,我知道在 ipxe 中加载initrd然后将其用作kernel行中的参数似乎是多余的,但出于某种原因,如果我不这样做,我会在启动时收到内核恐慌 VFS 错误。

相关内容