跳转至

在 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

GCE iPXE boot

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

Success

故障排除

你可以通过 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 目录中)导入它们。