跳转至

在 Amazon EC2 中使用 iPXE

你可以使用 iPXE 通过公共 iPXE AMI 启动 Amazon(AWS)EC2 实例。你可以使用 iPXE 脚本指示 EC2 实例通过 iPXE 支持的任何方式启动。例如,你可以从托管在同一 AWS 区域的单个服务器,使用 HTTPS 或 iSCSI 启动一组无盘 EC2 实例。

启动

EC2 iPXE 镜像发布在 AWS Marketplace 之外,由账户 833372943033 直接共享。

从下表中启动适用于你的 AWS 区域和 CPU 架构的最新 iPXE AMI:

AWS 区域 CPU 架构 AMI ID
af-south-1 arm64 ami-0a8d486a75228afc1
af-south-1 x86_64 ami-02102efc9e5297c42
ap-east-1 arm64 ami-0adc71d2662044e4a
ap-east-1 x86_64 ami-0b0b87498a3740383
ap-east-2 arm64 ami-0d19934045e048bb0
ap-east-2 x86_64 ami-049223ea574e1e8d0
ap-northeast-1 arm64 ami-084043efec207f04f
ap-northeast-1 x86_64 ami-0fad9f4958b1d342f
ap-northeast-2 arm64 ami-082b6eb307fc50465
ap-northeast-2 x86_64 ami-0bf0804eb47ad4b2e
ap-northeast-3 arm64 ami-03dae2424348edbd7
ap-northeast-3 x86_64 ami-031a9fabe6f68fc69
ap-south-1 arm64 ami-02a2a34afce79e399
ap-south-1 x86_64 ami-0eb74dcde1dc6e319
ap-south-2 arm64 ami-0e7ae245ffc96a987
ap-south-2 x86_64 ami-074bd031f8cd9effb
ap-southeast-1 arm64 ami-04b88f08788f98d9e
ap-southeast-1 x86_64 ami-01ede6688bcbd35b9
ap-southeast-2 arm64 ami-0349d3121e05ba840
ap-southeast-2 x86_64 ami-01571b86b89a4165c
ap-southeast-3 arm64 ami-0f2e5dcf011c34233
ap-southeast-3 x86_64 ami-0fc4d880c31d7bb35
ap-southeast-4 arm64 ami-0631d5acc400b75f7
ap-southeast-4 x86_64 ami-05333b6744bd33f16
ap-southeast-5 arm64 ami-0e559373fbbbdf9fd
ap-southeast-5 x86_64 ami-004cce596b54b5c66
ap-southeast-6 arm64 ami-01b67977ffbcc1d6f
ap-southeast-6 x86_64 ami-05e6658e20bf71d09
ap-southeast-7 arm64 ami-0015de053a60f3425
ap-southeast-7 x86_64 ami-0f0dc2b629f632755
ca-central-1 arm64 ami-00781e9e4603318a8
ca-central-1 x86_64 ami-0a587172a53d5b61b
ca-west-1 arm64 ami-0b706df9d52c2e83c
ca-west-1 x86_64 ami-0584f1e1d837c5ab2
eu-central-1 arm64 ami-049472191eda8fb26
eu-central-1 x86_64 ami-0c43395ba8adaaf6e
eu-central-2 arm64 ami-0855a0b724cf9b487
eu-central-2 x86_64 ami-05fa9ba3f1eeb9f04
eu-north-1 arm64 ami-07c3b4c29511e3778
eu-north-1 x86_64 ami-0c9dcf5ed4c09f4e5
eu-south-1 arm64 ami-04af0105d3e352f2d
eu-south-1 x86_64 ami-06100caf5d587f381
eu-south-2 arm64 ami-028b47f6350d54c13
eu-south-2 x86_64 ami-09168177ab2056e82
eu-west-1 arm64 ami-0638f981d3166df3d
eu-west-1 x86_64 ami-05b6834774f9e88e1
eu-west-2 arm64 ami-0b6b6ba6093cd937b
eu-west-2 x86_64 ami-0363c05ecff3f3a57
eu-west-3 arm64 ami-090785926e957ba2d
eu-west-3 x86_64 ami-0675218e02d340657
il-central-1 arm64 ami-0f56ef99f041fc067
il-central-1 x86_64 ami-0ea5d6d16a4322289
mx-central-1 arm64 ami-00ff6e8aaec27798f
mx-central-1 x86_64 ami-03a2ce17cfb958340
sa-east-1 arm64 ami-0302ee9ffcfc368a2
sa-east-1 x86_64 ami-0010c225e8c086513
us-east-1 arm64 ami-00f18f77a815bca91
us-east-1 x86_64 ami-0aa6de01d8464ede0
us-east-2 arm64 ami-0bd3a8c6148d295c5
us-east-2 x86_64 ami-0e9b6a3e30cc2dd11
us-west-1 arm64 ami-04a73023760ba2b60
us-west-1 x86_64 ami-0a2e2817228175b96
us-west-2 arm64 ami-07761029bc1813eeb
us-west-2 x86_64 ami-01f69597e603c2f79

你可以使用任何兼容的 EC2 实例类型(包括使用增强网络或 SR-IOV 网络的实例类型)。

配置

iPXE EC2 实例通过存储为实例 user-data 的 iPXE 脚本进行控制。iPXE AMI 包含一个嵌入式脚本,它会自动通过 DHCP 获取 IP 地址,打印一些有用的诊断信息,然后下载并执行 http://169.254.169.254/latest/user-data

你可以使用这个 user-data iPXE 脚本来引导网络启动过程的其余部分。例如,要下载并启动 Tiny Core Linux,你可以把实例的 user-data 设置为包含:

  #!ipxe
  set base http://tinycorelinux.net/12.x/x86/release/distribution_files/
  kernel ${base}/vmlinuz64
  initrd ${base}/rootfs.gz
  initrd ${base}/modules64.gz
  boot

EC2 iPXE boot

恭喜你成功使用 iPXE 启动了 EC2 实例!

Success

使用 cloud-init

如果你使用 cloud-init 来配置 EC2 实例,那么你可能希望用 user-data 同时存储 cloud-init 配置和你的 iPXE 启动脚本。

你可以使用 cloud-init 工具创建一个 MIME 多部分归档,其中同时包含你的 cloud-init 配置和 iPXE 启动脚本。你可以使用任意文件名和 MIME 类型 text/x-ipxe 附加你的 iPXE 启动脚本。例如:

  cloud-init devel make-mime --force \
    --attach config.yml:cloud-config \
    --attach boot.ipxe:x-ipxe \
    > user-data

iSCSI

你可以使用 user-data 脚本指示 iPXE 从 iSCSI 目标启动。例如:要从托管在同一 VPC 内另一台 EC2 实例 172.16.0.1 上的 iSCSI 目标启动,你可以把实例的 user-data 设置为包含:

  #!ipxe
  sanboot iscsi:172.16.0.1::::iqn.1995-08.org.example.iscsitarget:disk1

请注意,iSCSI 目标磁盘上的操作系统需要包含适当的软件和配置,以便识别自己的 iSCSI 根磁盘。你可以安装 sanbootable 之类的软件来帮助完成所需的配置。

IPv6

iPXE AMI 同时包含 IPv4 和 IPv6 支持。你应该在 VPC 中启用 IPv6 以加快启动速度,否则 iPXE 会花费几秒钟尝试获取 IPv6 地址。

故障排除

你可以通过 EC2 的系统日志或实例屏幕截图查看 iPXE 输出。例如:

  aws ec2 get-console-output --query Output --output text \
          --instance-id i-04549ed5e420eae6e

你应该会看到类似如下的输出:

  iPXE 1.21.1+ (gfa012) -- Open Source Network Boot Firmware -- http://ipxe.org
  Features: DNS HTTP HTTPS iSCSI TFTP SRP AoE ELF MBOOT PXE bzImage Menu PXEXT
  Amazon EC2 - iPXE boot via user-data
  CPU: GenuineIntel Intel(R) Xeon(R) CPU E5-2676 v3 @ 2.40GHz
  net0: 06:ee:8d:98:cc:67 using netfront on vif/0 (Ethernet) [closed]
    [Link:up TX:0 TXE:0 RX:0 RXE:0]
  Configuring (net0 06:ee:8d:98:cc:67)...... ok
  net0: 172.31.41.104/255.255.240.0 gw 172.31.32.1
  net0: fe80::4ee:8dff:fe98:cc67/64
  http://169.254.169.254/latest/user-data... ok

Warning

请注意,从 EC2 获取系统日志或实例屏幕截图通常会有几分钟的时间延迟——这是 EC2 本身长期存在的问题,与 iPXE 无关。你可能需要重试该命令几次(或者可能需要停止实例)才能获得任何输出。

从源代码构建

你可以使用如下命令构建自己的公共 iPXE AMI 版本:

  make CONFIG=cloud EMBED=config/cloud/aws.ipxe \
       bin-x86_64-pcbios/ipxe.usb bin-arm64-efi/ipxe.usb

然后使用 aws-import 工具(位于 iPXE 源代码树的 contrib 目录中)导入它们。