在阿里云中使用 iPXE¶
你可以使用 iPXE 通过公共 iPXE 镜像启动阿里云弹性计算服务(ECS)实例。你可以使用 iPXE 脚本指示 ECS 实例通过 iPXE 支持的任何方式启动。例如,你可以从托管在同一阿里云区域的单个服务器,使用 HTTPS 或 iSCSI 启动一组无盘 ECS 实例。
启动¶
ECS iPXE 镜像作为社区镜像发布,由账户 5967261230407415 拥有。
| CPU 架构 | 镜像系列名称 |
|---|---|
x86_64 |
acs:5967261230407415:ipxe |
x86_64(UEFI) |
acs:5967261230407415:ipxe-uefi-x86-64 |
arm64(UEFI) |
acs:5967261230407415:ipxe-uefi-arm64 |
你可以使用如下命令启动实例:
aliyun ecs RunInstances \
--ImageFamily acs:5967261230407415:ipxe \
...
你可以使用任何兼容的 ECS 实例类型。
配置¶
iPXE ECS 实例通过存储为实例 user-data 的 iPXE 脚本进行控制。iPXE 镜像包含一个嵌入式脚本,它会自动通过 DHCP 获取 IP 地址,打印一些有用的诊断信息,然后下载并执行 http://100.100.100.200/latest/user-data。
你可以在创建实例时使用 --UserData 选项设置 user-data。你必须使用 Base64 编码对 user-data 进行编码。例如:
aliyun ecs RunInstances \
--ImageFamily acs:5967261230407415:ipxe \
--UserData $(base64 my-ipxe-boot-script.ipxe) \
...
你可以使用这个元数据 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 启动阿里云实例!

使用 cloud-init¶
如果你使用 cloud-init 来配置你的 EC2 实例,那么你可能希望使用 user-data 同时存储 cloud-init 配置和你的 iPXE 启动脚本。
你可以使用 cloud-init 工具创建一个包含你的 cloud-init 配置和 iPXE 启动脚本的 MIME 多部分归档。你可以使用任何文件名和 MIME 类型 text/x-ipxe 附加你的 iPXE 启动脚本。例如:
cloud-init devel make-mime --force \
--attach config.yml:cloud-config \
--attach boot.ipxe:x-ipxe \
> user-data
故障排除¶
你可以通过浏览以下 URL,使用阿里云 ECS VNC 控制台直接与你的 ECS 实例交互:
https://ecs.console.alibabacloud.com/vnc/index.htm?instanceId=${INSTANCE_ID}®ionId=${REGION}
(根据需要把 ${INSTANCE_ID} 和 ${REGION_ID} 替换为实例和区域标识符)。
理论上,你也可以通过使用 aliyun ecs GetInstanceConsoleOutput 获取串口输出来查看 iPXE 输出。然而,在阿里云 ECS 中获取串行控制台输出出了名的不可靠,失败率超过 90%。
作为最后的手段,你也可以停止 ECS 实例,然后使用 ali-int13con 工具(位于 iPXE 源代码树的 contrib 目录中)获取 iPXE 磁盘控制台日志。
从源代码构建¶
你可以使用以下命令构建你自己的公共 iPXE 镜像版本:
make CONFIG=cloud EMBED=config/cloud/ali.ipxe \
bin-x86_64-pcbios/ipxe.usb \
bin-x86_64-efi/ipxe.usb \
bin-arm64-efi/ipxe.usb
并使用 ali-import 工具(位于 iPXE 源代码树的 contrib 目录中)导入它们。