ISO 18.04的PXE引导


12

以前,我通过将ISO提取到NFS挂载,并使用iPXE脚本魔术将vmlinuz.efi和initrd.gz从casper复制到tftpboot目录中,来设置Ubuntu LiveCD的PXE引导。

对于16.04、16.10和17.10(有效),此功能完美运行。

在18.04中,我首先发现caslin中不再存在vmlinuz.efi,但是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设置为映像名称,例如仿生):

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.

这是“干净的”安装,意味着内核所在的驱动器是新格式化的吗?还是在另一个OS之上/之上?
乔纳森

1
有问题的目标计算机没有硬盘驱动器,并且正在通过网络引导加载18.04桌面LiveCD。没有以前的配置。想象一组机器,而不是使用USB密钥或CD引导liveCD,而是通过网络使用iPXE引导实时CD。
乔·马利

Answers:


7

通过在Launchpad Bug Tracker上遵循“ Woodrow Shen”的建议,我在iPXE中解决了此问题。

基本上,我将旧条目改编为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的位置

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

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


1
谢谢DrGecko-该toram选项对薄荷19 有用!
布莱恩·西德伯瑟姆

这也适用于lubuntu 18.04.1(LTS),这正是我所需要的。谢谢!
乔·马利

1
还有另一种选择,它不需要toram并且允许以更少的RAM引导计算机:将第6行的结尾更改为ip=dhcp systemd.mask=tmp.mount ro -- || read void
Ricflomag

@Ricflomag非常感谢,我有一堆配备2GB RAM的计算机。在Ubuntu MATE 18.04.1和Linux Mint 19.1上进行测试并可以工作,由于它基于Ubuntu 18.04,因此存在相同的问题。
Skylar Ittner'1


0

在下面进行更新-不要使用实时iso,请使用可以像我以前一样通过PXE引导的传统iso


对于ubuntu 14.04和16.04,我只需环回安装完整的服务器DVD ISO,以便可以通过Web服务器对其进行访问,然后以通常的方式设置PXE引导(将内核和initrd复制到tftp守护程序,DHCP下一台服务器选项) ,pxe菜单等)。

我们有一个启动过程,可以完全自动化节点的部署。

这在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启动可自动化的事情

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.