18.04 ISO 的 PXE 启动

18.04 ISO 的 PXE 启动

之前,我已经通过将 ISO 提取到 NFS 挂载并使用一些 iPXE 脚本魔法将 vmlinuz.efi 和 initrd.gz 从 casper 复制到 tftpboot 目录来设置 Ubuntu LiveCD 的 PXE 启动。

这对于 16.04、16.10 和 17.10 (Artful) 来说运行完美。

使用 18.04 时,我首先发现 vmlinuz.efi 不再存在于 casper 中,但 vmlinuz 仍然存在。因此,我再次尝试更改一些名称...

现在它仍然没有完成启动。我进入了“紧急模式”。输入“journalctl -xb”(按照紧急模式提示)并浏览,结果如下:

Unit sys-fs-fuse-connections has begun starting up.
ubuntu systemd[1]: Failed to set up mount unit: Device or resource busy
ubuntu systemd[1]: Failed to set up mount unit: Device or resource busy
sys-kernel-config.mount: Mount process finished, but there is no mount.
sys-kernel-config.mount: Failed with result 'protocol'.
Failed to mount Kernel Configuration File System.

帮助!

添加于2018-04-30:

用于提取 ISO 以进行 PXE 挂载的脚本代码(TARGET 设置为映像名称,例如 bionic):

set -e

# Look for bionic.iso as the ISO I am going to extract.
TARGET=invalid.iso
[ -f bionic.iso ] && TARGET=bionic
echo TARGET=$TARGET

# Mount the ISO to the /tmp directory
sudo rm -rf /var/nfs/$TARGET/*
sudo rm -rf /tmp/$TARGET
mkdir /tmp/$TARGET
sudo mount -o loop ~/$TARGET.iso /tmp/$TARGET

# Clear up the NFS directory where things will be copied (and copy them)
sudo rm -rf /var/nfs/$TARGET
sudo mkdir /var/nfs/$TARGET
sudo rsync -avH /tmp/$TARGET/ /var/nfs/$TARGET

# I've not had luck with iPXE changing filesystems to find
# vmlinuz, vmlinuz.efi, or initrd.gz... so I copy those files
# specifically to the tftp directory structure so the boot loader
# can load them.
sudo rm -rf /var/lib/tftpboot/$TARGET
sudo mkdir /var/lib/tftpboot/$TARGET
sudo cp /tmp/$TARGET/casper/vmlinuz* /var/lib/tftpboot/$TARGET/.
sudo cp /tmp/$TARGET/casper/initrd.lz /var/lib/tftpboot/$TARGET/.

# Cleanup: unmount the ISO and remove the temp directory
sudo umount /tmp/$TARGET/
sudo rm -rf /tmp/$TARGET/
echo Done.

答案1

我按照“Woodrow Shen”的建议解决了 iPXE 中的这个问题Launchpad 错误追踪器

基本上我改编了我们旧条目以适应 ubuntu 16.04.3:

:deployUbuntu-x64-16.04.3
set server_ip 123.123.123.123
set nfs_path /opt/nfs-exports/ubuntu-x64-16.04.3
kernel nfs://${server_ip}${nfs_path}/casper/vmlinuz.efi || read void
initrd nfs://${server_ip}${nfs_path}/casper/initrd.lz || read void
imgargs vmlinuz.efi initrd=initrd.lz root=/dev/nfs boot=casper netboot=nfs nfsroot=${server_ip}:${nfs_path} ip=dhcp splash quiet -- || read void
boot || read void

对于 ubuntu 18.04 来说看起来像这样:

:deployUbuntu-x64-18.04
set server_ip 123.123.123.123
set nfs_path /opt/nfs-exports/ubuntu-x64-18.04
kernel nfs://${server_ip}${nfs_path}/casper/vmlinuz || read void
initrd nfs://${server_ip}${nfs_path}/casper/initrd.lz || read void
imgargs vmlinuz initrd=initrd.lz root=/dev/nfs boot=casper netboot=nfs nfsroot=${server_ip}:${nfs_path} ip=dhcp splash quiet toram -- || read void
boot || read void

请注意以下变化:

  • 重命名vmlinuz.efivmlinux第 4 行和第 6 行
  • 将选项添加toram到第 6 行
  • 显然改变nfs_path以匹配新提取 ISO 的位置

请注意,正如 Launchpad 上指出的那样,此toram选项需要额外的 RAM。在我的测试中,我需要确保我的虚拟机分配了 4GB 的 RAM

请注意,这也适用于我们的 EFI 和传统 BIOS 系统。

答案2

周末过后,我发现了一个报告的错误,描述了我的确切症状(并提供了一个交互式的解决方法)。

https://bugs.launchpad.net/ubuntu/+source/casper/+bug/1755863

显然我会等到 18.04.1。至少我现在知道我还没有(完全)疯掉!

答案3

更新如下 - 不要使用 live iso,使用可以像我以前一样进行 PXE 启动的传统 iso


对于 ubuntu 14.04 和 16.04,我只是环回安装了完整的服务器 DVD ISO,以便可以通过 Web 服务器访问,并以通常的方式设置 PXE 启动(将内核和 initrd 复制到 tftp 守护程序、DHCP 下一个服务器选项、pxe 菜单等)。

我们有一个 kickstart 流程来完全自动化节点的部署。

这根本无法在 18.04 上运行,安装目录中没有内核,也没有 install/netboot/ubuntu-installer/amd64 目录!所以我尝试了 casper 目录中的内核和 initrd,但也没用。我获取了 netinstall DVD iso 并使用了其中的内核和 initrd。它实际上启动了文本安装程序,但坚持认为镜像缺少一个文件,但我的 http 服务器的日志没有给出任何 404!

总的来说,我觉得 ubuntu 18.04 服务器 ISO 对于想要进行自动安装的人来说是一个倒退的步骤。


我也尝试将其添加到 kickstart

预先设置 live-installer/net-image 字符串http://myreposerver/ubuntu-18.04-live-server-amd64/casper/filesystem.squashfs

这有点像我为了让 Ubuntu 14.04 PXE 启动自动化所做的事情

相关内容