![如何使用 dnsmasq 和 syslinux 通过 PXE 引导 Linux 内核?](https://linux22.com/image/62192/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20dnsmasq%20%E5%92%8C%20syslinux%20%E9%80%9A%E8%BF%87%20PXE%20%E5%BC%95%E5%AF%BC%20Linux%20%E5%86%85%E6%A0%B8%EF%BC%9F.png)
这些dnsmasq.conf
选项可以吗:
port=0
interface=enp0s20u2u1
bind-interfaces
dhcp-range=192.168.2.50,192.168.2.220,12h
dhcp-boot=boot/syslinux/lpxelinux.0
dhcp-option-force=209,boot/syslinux/pxe.cfg
dhcp-option-force=210,/
enable-tftp
tftp-root=/mnt/pxe/
我的问题是 syslinux(版本 6.03)无法启动到内核。在 pxe 启动从 dhcp 服务器检索网络信息并弹出 syslinux 引导加载程序后,我陷入了 syslinux 蓝色启动菜单。
这是我的 pxe syslinux 配置:
# Default boot option to use
DEFAULT menu.c32
# Prompt user for selection
PROMPT 0
# Menu Configuration
MENU WIDTH 80
MENU MARGIN 10
MENU PASSWORDMARGIN 3
MENU ROWS 12
MENU TABMSGROW 18
MENU CMDLINEROW 18
MENU ENDROW 24
MENU PASSWORDROW 11
MENU TIMEOUTROW 20
MENU TITLE 64Bit (x64) OS Choice
# Return to Main Menu
LABEL MainMenu
MENU DEFAULT
MENU LABEL ^Main Menu
KERNEL menu.c32
LABEL rear_nfs
TEXT HELP
Boot REAR. Allows you to recover bare metal.
ENDTEXT
MENU LABEL Boot PXE rear
KERNEL ../phlaplen.kernel
INITRD ../phlaplen.initrd.cgz
我假设 syslinux 找不到我的内核或 initrd 文件。
在以下树输出中,您可以看到我的 TFTP 根目录和文件(在 dnsmasq.conf 中指定的路径)。
tree
.
|-- boot
| |-- phlaplen.initrd.cgz
| |-- phlaplen.kernel
| `-- syslinux
| |-- altmbr.bin
| |-- altmbr_c.bin
| |-- altmbr_f.bin
| |-- cat.c32
| |-- chain.c32
| |-- cmd.c32
| |-- cmenu.c32
| |-- config.c32
| |-- cptime.c32
| |-- cpu.c32
| |-- cpuid.c32
| |-- cpuidtest.c32
| |-- debug.c32
| |-- dhcp.c32
| |-- disk.c32
| |-- dmi.c32
| |-- dmitest.c32
| |-- elf.c32
| |-- ethersel.c32
| |-- gfxboot.c32
| |-- gptmbr.bin
| |-- gptmbr_c.bin
| |-- gptmbr_f.bin
| |-- gpxecmd.c32
| |-- gpxelinux.0
| |-- gpxelinuxk.0
| |-- hdt.c32
| |-- hexdump.c32
| |-- host.c32
| |-- ifcpu.c32
| |-- ifcpu64.c32
| |-- ifmemdsk.c32
| |-- ifplop.c32
| |-- isohdpfx.bin
| |-- isohdpfx_c.bin
| |-- isohdpfx_f.bin
| |-- isohdppx.bin
| |-- isohdppx_c.bin
| |-- isohdppx_f.bin
| |-- isolinux-debug.bin
| |-- isolinux.bin
| |-- kbdmap.c32
| |-- kontron_wdt.c32
| |-- ldlinux.c32
| |-- lfs.c32
| |-- libcom32.c32
| |-- libgpl.c32
| |-- liblua.c32
| |-- libmenu.c32
| |-- libutil.c32
| |-- linux.c32
| |-- lpxelinux.0
| |-- ls.c32
| |-- lua.c32
| |-- mboot.c32
| |-- mbr.bin
| |-- mbr_c.bin
| |-- mbr_f.bin
| |-- memdisk
| |-- meminfo.c32
| |-- menu.c32
| |-- pci.c32
| |-- pcitest.c32
| |-- phlaplen.initrd.cgz
| |-- phlaplen.kernel
| |-- pmload.c32
| |-- poweroff.c32
| |-- prdhcp.c32
| |-- pwd.c32
| |-- pxe.cfg
| |-- pxechn.c32
| |-- pxelinux.0
| |-- reboot.c32
| |-- rosh.c32
| |-- sanboot.c32
| |-- sdi.c32
| |-- sysdump.c32
| |-- syslinux.c32
| |-- vesa.c32
| |-- vesainfo.c32
| |-- vesamenu.c32
| |-- vpdtest.c32
| |-- whichsys.c32
| `-- zzjson.c32
|-- phlaplen.initrd.cgz
`-- phlaplen.kernel
我缺少什么?
更新1: 按照 Nasha 的建议使用绝对路径,我可以成功启动内核。我必须使用 dhcp-option-force=210 中指定的绝对路径,而不是 tftp-root 选项中指定的绝对路径。
/etc/dnsmasq.conf
:
port=0
interface=enp0s20u2u1
bind-interfaces
dhcp-range=192.168.2.50,192.168.2.220,12h
dhcp-boot=boot/syslinux/lpxelinux.0
dhcp-option-force=209,syslinux/pxe.cfg
dhcp-option-force=210,/boot/
enable-tftp
tftp-root=/mnt/pxe/
tftp 服务器上的 pxe.cfg。
LABEL rear_nfs
TEXT HELP
Boot REAR. Allows you to recover bare metal.
ENDTEXT
MENU LABEL Boot PXE rear
KERNEL /phlaplen.kernel
INITRD /phlaplen.initrd.cgz