总结一下,我遇到的问题就是当我使用 PXE 启动 UEFI 系统时,我卡在了一个grub>
提示符处。看来 UEFI 系统没有加载 grub.cfg 文件,我真不知道为什么。
由于 22.04 不再为我们提供 mini.iso 或 netboot.iso 选项,我一直在(在我们的实验室中)构建“新”系统部署自动化方法的 POC。在大多数情况下,我一直遵循以下两个 URL 中的说明:
- https://www.molnar-peter.hu/en/ubuntu-jammy-netinstall-pxe.html
- https://www.golinuxcloud.com/uefi-pxe-boot-server-ubuntu-20-04-cloud-init/
目前,我的 PoC 全部位于一个小型 Hyper-V 实验室中。网络配置非常简单,因为我有一个 pfSense FW,可让我的实验室网络访问互联网,并且 FW 后面的所有内容都在封闭(私有)网络上。这使我可以完全控制 DHCP 等内容。
在我称之为 PXE 的服务器上,我安装了:
- 阿帕奇2
- isc-dhcp 服务器
- tftpd-hpa
TFTP目录结构:
├── boot
│ ├── bootx64.efi
│ ├── grub
│ │ ├── font.pf2
│ │ ├── grub.cfg
│ │ ├── unicode.pf2
│ │ └── x86_64-efi
│ │ ├── command.lst
│ │ ├── crypto.lst
│ │ ├── fs.lst
│ │ └── terminal.lst
│ ├── grubx64.efi
│ ├── jammy
│ │ ├── initrd
│ │ └── vmlinuz
│ ├── ldlinux.c32 -> ./syslinux/bios/ldlinux.c32
│ ├── libutil.c32 -> ./syslinux/bios/libutil.c32
│ ├── menu.c32 -> ./syslinux/bios/menu.c32
│ ├── pxelinux.0
│ ├── pxelinux.cfg
│ │ └── default
│ └── syslinux
│ └── bios
│ ├── ldlinux.c32
│ ├── libutil.c32
│ └── menu.c32
└── grub -> ./boot/grub/
/etc/dhcp/dhcpd.conf
allow booting;
allow bootp;
option arch code 93 = unsigned integer 16;
subnet 172.16.1.0 netmask 255.255.255.0 {
range 172.16.1.100 172.16.1.110;
}
host test1 {
hardware ethernet 00:15:5d:01:21:07;
if option arch = 00:07 {
filename "boot/bootx64.efi";
} else {
filename "boot/pxelinux.0";
}
next-server 172.16.1.50;
fixed-address 172.16.1.60;
}
host test2 {
hardware ethernet 00:15:5d:01:21:08;
if option arch = 00:07 {
filename "boot/bootx64.efi";
} else {
filename "boot/pxelinux.0";
}
next-server 172.16.1.50;
fixed-address 172.16.1.61;
}
笔记:我希望我的 pfSense 服务器能够发出 DHCP,但我发现让 isc-dhcp-server 启动的唯一方法是指定某种类型或范围。我需要解决这个问题,但目前看来,由于所有内容都在同一个子网上,因此使用此配置一切运行良好。
在/etc/default/tftpd-hpa中
# /etc/default/tftpd-hpa
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/tftp"
TFTP_ADDRESS=":69"
TFTP_OPTIONS="--secure
/etc/default/isc-dhcp 服务器
# Defaults for isc-dhcp-server (sourced by /etc/init.d/isc-dhcp-server)
# Path to dhcpd's config file (default: /etc/dhcp/dhcpd.conf).
#DHCPDv4_CONF=/etc/dhcp/dhcpd.conf
#DHCPDv6_CONF=/etc/dhcp/dhcpd6.conf
# Path to dhcpd's PID file (default: /var/run/dhcpd.pid).
#DHCPDv4_PID=/var/run/dhcpd.pid
#DHCPDv6_PID=/var/run/dhcpd6.pid
# Additional options to start dhcpd with.
# Don't use options -cf or -pf here; use DHCPD_CONF/ DHCPD_PID instead
#OPTIONS=""
# On what interfaces should the DHCP server (dhcpd) serve DHCP requests?
# Separate multiple interfaces with spaces, e.g. "eth0 eth1".
INTERFACESv4="eth0"
INTERFACESv6="eth0"
/tftp/boot/grub/grub.cfg
set timeout=30
loadfont unicode
set menu_color_normal=white/black
set menu_color_highlight=black/light-gray
menuentry "Install Ubuntu Jammy (22.04)" {
set gfxpayload=keep
linux /boot/jammy/vmlinuz ip=dhcp cloud-config-url=/dev/null url=http://172.16.1.50/isos/jammy/ubuntu-22.04-live-server-amd64.iso autoinstall ds="nocloud-net;s=http://172.16.1.50/cloud-init/jammy/" --- # Don't forget the slash at the end.
initrd /boot/jammy/initrd
}
tcpdump -n -i eth0 端口 69
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), snapshot length 262144 bytes
01:26:56.188414 IP 172.16.1.60.1332 > 172.16.1.50.69: TFTP, length 59, RRQ "boot/bootx64.efi" octet tsize 0 blksize 1482 windowsize 4
01:26:56.189458 IP 172.16.1.60.1333 > 172.16.1.50.69: TFTP, length 51, RRQ "boot/bootx64.efi" octet blksize 1482 windowsize 4
01:26:56.225401 IP 172.16.1.60.1334 > 172.16.1.50.69: TFTP, length 50, RRQ "boot/grubx64.efi" octet blksize 512 windowsize 4
grub> 回显 $prefix
(tftp,172.16.1.50)/boot/grub
不管怎样,我已经验证了 Apache2 目录是否正确提供服务,事实上,通过上述配置,我能够使用 pxelinux.0 以 PXE 方式启动基于 BIOS 的系统。
无论出于什么原因,UEFI 系统(或者在我的情况下是 Hyper-V Gen2)都会在菜单中“卡住” grub>
。
任何帮助或建议都将不胜感激。我知道我已经很接近了。
干杯!
答案1
我们也遇到了这个问题。请grubnetx64.efi
从下载文件http://archive.ubuntu.com/ubuntu/dists/jammy/main/uefi/grub2-amd64/current/并替换现有grubx64.efi
文件。它应该可以工作。
答案2
我隐约记得 ubuntu20 也存在这个问题,然后找到了我的笔记……ISO 中的原版 grubx64.efi 不支持网络启动。相反,你必须从镜像中获取几个包并提取所需的文件:
++++对于U22.04:
cd /var/tmp
wget http://mirrors.kernel.org/ubuntu/pool/main/g/grub2-signed/grub-efi-amd64-signed_1.180+2.06-2ubuntu7_amd64.deb
wget http://mirrors.kernel.org/ubuntu/pool/main/s/shim-signed/shim-signed_1.51+15.4-0ubuntu9_amd64.deb
dpkg -x grub-efi-amd64-signed_1.180+2.06-2ubuntu7_amd64.deb grub
dpkg -x shim-signed_1.51+15.4-0ubuntu9_amd64.deb shim
这些是截至今天的镜像路径,如果重要的话,您可能需要确保获取最新版本......
cp shim/usr/lib/shim/shimx64.efi.signed /tftpboot/bootx64.efi
cp grub/usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed /tftpboot/grubx64.efi
当然,适当调整您的 /tftpboot... 路径。