在 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

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

使用 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

请注意,从 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 目录中)导入它们。