在 Google Cloud 中使用 iPXE¶
你可以使用 iPXE 通过公共 iPXE 镜像启动 Google Cloud Compute Engine (GCE) 实例。你可以使用 iPXE 脚本指示 GCE 实例通过 iPXE 支持的任何方式启动。例如,你可以从托管在同一 Google Cloud 区域的单个服务器,使用 HTTPS 或 iSCSI 启动一组无盘 GCE 实例。
启动¶
GCE iPXE 镜像从 ipxe-images 项目发布。
| CPU 架构 | 项目名称 | 镜像系列名称 |
|---|---|---|
x86_64 |
ipxe-images |
ipxe |
x86_64(UEFI) |
ipxe-images |
ipxe-uefi-x86-64 |
arm64(UEFI) |
ipxe-images |
ipxe-uefi-arm64 |
你可以使用如下命令启动实例:
gcloud compute instances create \
--image-project ipxe-images --image-family ipxe \
...
你可以使用任何兼容的 GCE 实例类型(包括启用了 Google Virtual NIC(gVNIC)的实例类型)。
配置¶
iPXE GCE 实例通过存储为实例元数据的 iPXE 脚本进行控制,键名为 ipxeboot。iPXE 镜像包含一个嵌入式脚本,它会自动通过 DHCP 获取 IP 地址,打印一些有用的诊断信息,然后下载并执行 http://metadata.google.internal/computeMetadata/v1/instance/attributes/ipxeboot。
你可以在创建实例时使用 --metadata-from-file 选项设置 ipxeboot 元数据。例如:
gcloud compute instances create \
--image-project ipxe-images --image-family ipxe \
--metadata-from-file=ipxeboot=my-ipxe-boot-script.ipxe \
...
你可以使用这个元数据 iPXE 脚本来引导网络启动过程的其余部分。例如,要下载并启动 Tiny Core Linux,你可以把实例的 ''ipxeboot'' 元数据设置为包含:
#!ipxe
set base http://tinycorelinux.net/12.x/x86/release/distribution_files/
kernel ${base}/vmlinuz64 initrd=rootfs.gz initrd=modules64.gz
initrd ${base}/rootfs.gz
initrd ${base}/modules64.gz
boot

恭喜你成功使用 iPXE 启动 Google Cloud 实例!

故障排除¶
你可以通过 GCE 串口输出查看 iPXE 输出。例如:
gcloud compute instances get-serial-port-output <name>
你应该会看到类似以下的输出:
iPXE 1.21.1+ -- Open Source Network Boot Firmware -- https://ipxe.org
Features: DNS HTTP HTTPS iSCSI TFTP SRP AoE ELF MBOOT PXE bzImage Menu PXEXT
Google Compute Engine - iPXE boot via metadata
CPU: GenuineIntel Intel(R) Xeon(R) CPU @ 2.20GHz
net0: 42:01:0a:9a:00:25 using gve on 0000:00:04.0 (Ethernet) [closed]
[Link:down, TX:0 TXE:0 RX:0 RXE:0]
[Link status: Unknown (https://ipxe.org/1a086101)]
Waiting for link-up on net0... ok
Configuring (net0 42:01:0a:9a:00:25)...... ok
net0: 10.154.0.37/255.255.255.255 gw 10.154.0.1
net0: fe80::4001:aff:fe9a:25/64
http://metadata.google.internal/computeMetadata/v1/instance/attributes/ipxeboot... ok
从源代码构建¶
你可以使用以下命令构建你自己的公共 iPXE 镜像版本:
make CONFIG=cloud EMBED=config/cloud/gce.ipxe \
bin-x86_64-pcbios/ipxe.usb \
bin-x86_64-efi/ipxe.usb \
bin-arm64-efi/ipxe.usb
并使用 gce-import 工具(位于 iPXE 源代码树的 contrib 目录中)导入它们。