跳转至

在阿里云中使用 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

Alibaba Cloud iPXE boot

恭喜你成功使用 iPXE 启动阿里云实例!

Success

使用 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}&regionId=${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 目录中)导入它们。