我配置了 isc-dhcp、ipxe 和 tftpboot,这样我就可以通过 PXE 通过网络启动了。ubuntu netinstall 映像使用 pxelinux.0 顺利启动。
我使用本教程创建了一个自定义 Live CDhttps://help.ubuntu.com/community/LiveCDCustomizationFromScratch。它在虚拟机中顺利启动。
现在我想将此映像连接到我的 pxe 环境。最好的方法是通过 http 启动并附加磁盘。有很多教程。但我无法挂载 squashfs。最好的方法是什么。我需要 pxelinux 吗?我需要 NFS 吗?我对所有不同的引导加载程序感到困惑。
非常感谢您的帮助。谢谢。
dhcpd.conf 的一部分
next-server 10.1.1.1;
if exists user-class and option user-class = "iPXE" {
filename "menu.ipxe";
} else {
filename "undionly.kpxe";
}
和 menu.ipxe
#!ipxe
set smartos-build 20121004T212912Z
######## MAIN MENU ###################
:start
menu Welcome
item
item --gap -- ------------------------- Operating systems ------------------------------
item cellos-storage Boot CellOS
item smartos Boot SmartOS (${smartos-build})
item ubuntu Boot Ubuntu Precise 12.04 netinstall
item --gap -- ------------------------------ Utilities ---------------------------------
item shell Enter iPXE shell
item reboot Reboot
item
item exit Exit (boot local disk)
choose --default cellos-storage --timeout 5000 target && goto ${target}
########## UTILITY ITEMS ####################
:shell
echo Type exit to get the back to the menu
shell
set menu-timeout 0
goto start
:reboot
reboot
:exit
exit
########## MENU ITEMS #######################
:cellos-storage
kernel /cellos/storage/cellos-latest/casper/vmlinuz
initrd /cellos/storage/cellos-latest/casper/initrd.lz
#chain http://10.1.1.1/boot/cellos/storage/cellos-latest.iso
boot
# SmartOS Root shadow is "root"
:smartos
kernel /smartos/${smartos-build}/platform/i86pc/kernel/amd64/unix -B root_shadow='$5$2HOHRnK3$NvLlm.1KQBbB0WjoP7xcIwGnllhzp2HnT.mDO7DpxYA'
initrd /smartos/${smartos-build}/platform/i86pc/amd64/boot_archive
boot
:ubuntu
kernel /ubuntu/precise/netinstall/ubuntu-installer/amd64/linux
initrd /ubuntu/precise/netinstall/ubuntu-installer/amd64/initrd.gz
boot
goto start
答案1
使用 Linux Mint 13 执行此操作,但应该与 Ubuntu 12.04 相同。我使用 mintconstructor 自定义我的 live-dvd,但应该使用 LiveCDCustomizationFromScratch。
我可以仅使用 iPXE(无 pxelinux)从实时 DVD 配置网络启动。
为此,我配置了一个 http 服务器(使用 apache)来发布 /var/www 中的内容。这是必要的,因为 initrd 和 vmlinuz 需要通过 http 访问。
我从 live-dvd 中取出 initrd.lz 和 vmlinuz 并将其放入 /var/www 中
将 /casper 中的所有文件(来自 live-dvd)放入 /var/www/casper。
在您的 Web 服务器上,还发布 /var/www 的 NFS 共享,以便文件也可通过 NFS 访问。这对于通过网络访问 squashfs(casper 文件夹)是必要的(似乎无法通过 http 访问)。
这是我的 /etc/exports (NFS)
/var/www *(ro,async)
你的 iPXE 脚本看起来应该像这样(相应地替换 IP):
#!ipxe
initrd http://10.54.9.43/initrd.lz
chain http://10.54.9.43/vmlinuz boot=casper netboot=nfs nfsroot=10.54.9.43:/var/www/ initrd=initrd.lz
这将通过 http 加载内核和 initrd,并通过 NFS 加载 squashfs...
关于 DHCP 部分,我使用的是 Windows Server DHCP ... 所以我无法帮助您。请遵循 iPXE 的文档。对于其他人,我做了以下操作:我在同一台服务器 (linux) 上配置了一个 TFTP 服务器。我将选项 66 配置为该服务器的 IP(在 DHCP 服务器上)。我将 undionly.kpxe (iPXE) 放在我服务器的 TFTP 文件夹中以链式加载 iPXE(检查 iPXE 文档)。我按照 iPXE 文档中所述配置了选项 67,以防止无限循环(由于链式加载)。
对于我来说,这一切有点难以弄清楚,因为网络上没有太多关于这方面的文档。