Amazon Web Services 的 Arch Linux AMI

来自 ArchWiki


公共社区 Arch AMI

注意: Arch Linux 目前不提供官方的 Amazon Machine Images。此处列出的 AMI 由社区创建。

AMI

Arch Linux AMI 在此处列出: http://arch-ami-list.drzee.net/

AMI 每月构建两次(每月 1 日和 15 日 - UTC 时间凌晨 2:00),并且适用于所有未明确要求“选择加入”的区域 - 请参阅 区域列表。如果某个区域需要 AMI,但目前该区域不可用,则可以将 AMI 复制到该区域。

AMI 是 EBS HVM AMI,并提供两种不同的内核

  • std - 使用来自默认 Arch 存储库的标准 Arch Linux 内核,并配置了 EC2 使用所需的模块。调度程序和 I/O 未针对云进行优化。AMI 中软件包的完整列表: [1]
  • ec2 - 使用由 UplinkLabs 创建并托管在专用存储库中的标准 Arch Linux 内核的 EC2 优化内核 - 单击 此处 了解更多详细信息。AMI 中软件包的列表: [2]

这两个内核都已在许多不同的 EC2 实例类型(t2、t3、t3a、m/r/c5、m/r/c6 以及带有 GPU 的高级硬件)上进行了测试,并且可以正常启动。

注意: 截至 2023-06-12,已确认来自 UplinkLabs 的 EC2 优化内核在使用 XEN 虚拟机监控程序(例如 t2-micro)的实例系列上运行时会挂起启动。XEN 内核模块未包含在最新的内核中,这就是启动失败的原因。请仅使用使用新的 Nitro 虚拟机监控程序的实例系列 - 请参阅: 基于 Nitro 构建的实例。这些仍然可以使用 EC2 优化内核。
注意: ec2 存储库除了 linux-ec2 内核外,还附带其他软件包。默认情况下,ec2 设置为 pacman.conf 中最顶层的存储库。因此,来自 ec2 的软件包可能比来自 官方存储库 的软件包具有更高的优先级。这可能会导致一些不一致的行为,具体取决于软件包的实际版本。

不构建带有 LTS 内核的 AMI。

列出 AMI 的 REST API

REST API 可用于获取可用 AMI 的 JSON

注意: API 端点现在使用自定义域名,该域名应保持静态。

首次运行

注意: AMI 中内置的镜像列表是在映像构建时生成的,并且使用的是德国的服务器。

启动 AMI 后,建议/需要执行以下步骤来初始化 pacman 并选择快速的本地存储库

# pacman-key --init
# pacman-key --populate
# reflector --country "ISO 3166-1 Alpha-2 Country Code" --protocol https,http --score 20 --sort rate --save /etc/pacman.d/mirrorlist
# pacman -Syu

AMIs 中预装了 Reflector 软件包。

建议在 /etc/xdg/reflector/reflector.conf 中为 reflector 设置适当的配置,并启用计时器服务以定期刷新镜像列表。有关详细信息,请参阅 Reflector 软件包文档。

为了方便起见,包含了一个脚本: /etc/pacman.d/pacman_init.sh

使用 sudo 执行脚本将自动运行上述 pacman-key 命令,并通过写入 /etc/xdg/reflector/reflector.conf 来设置 Reflector。最后,它将运行 Reflector 以生成镜像列表。

Reflector 的国家/地区选择是根据实例运行的 AWS 区域完成的。以下显示了区域和国家/地区代码之间的映射(仅支持 AMI 分发的区域)

# region_to_country['eu-west-1']='IE,UK,DE'
# region_to_country['eu-west-2']='UK,IE,DE'
# region_to_country['eu-west-3']='FR,DE,UK'
# region_to_country['eu-central-1']='DE,FR,UK'
# region_to_country['eu-north-1']='SE,FI,NO,DE'
# region_to_country['us-east-1']='US,CA'
# region_to_country['us-east-2']='US,CA'
# region_to_country['us-west-1']='US,CA'
# region_to_country['us-west-2']='US,CA'
# region_to_country['ap-south-1']='IN,SG,US'
# region_to_country['ap-northeast-1']='JP,KR,TW,US'
# region_to_country['ap-northeast-2']='KR,JP,TW,US'
# region_to_country['ap-northeast-3']='JP,KR,TW,US'
# region_to_country['ap-southeast-1']='SG,ID,TH,US'
# region_to_country['ap-southeast-2']='AU,NZ,US'
# region_to_country['ca-central-1']='CA,US'
# region_to_country['sa-east-1']='BR,CL,US'

对于 EMEA 区域,“DE”(德国),对于美国/亚太/南美区域,“US”(美国),始终作为最后的手段包含在内,以防国家/地区内或“邻近”国家/地区的存储库不可用。

或者,提供您自己的镜像列表,并且不使用 Reflector 软件包。

构建过程

注意: 本节简要描述了 AMI 的构建方式。

整个构建过程在 AWS 上运行,并且是完全自动化的。

总的来说,自动化构建过程由 AWS Step Function 管理,该函数使用 Amazon EventBridge 定时事件定期执行。

步骤函数将启动构建过程,并结合使用本机调用和 AWS Lambda 函数来处理更复杂的元素。

通过使用之前的 AMI 启动 EC2 实例并将其用作工作或构建机器,来构建一组新的 AMI。构建机器通过一个特殊的构建脚本进行引导,该脚本本质上使用 pacstrap 和一些额外的步骤来构建映像,基本知识在下面的第 (2) 节中概述。

在构建 AMI 之后,新的 AMI 将在 EC2 实例上进行测试启动,以验证它是否可以正确启动。如果成功,则 AMI 将分发到各个区域并在 DynamoDB 数据库中注册。可以使用 API REST 端点查询数据库。旧的 AMI 将从区域和 DynamoDB 数据库中删除。

致谢

感谢 UplinkLabs 的 Steven 帮助理解构建过程并测试映像的初始质量。还要感谢 Mathcom 提供出色的 shell 脚本来帮助我入门(不幸的是,该链接已被删除),这加速了基本构建过程的整合。

您可以将意见和建议发送至(不保证会被查看):arch-ami 'at' drzee.net

愿望清单

  • 在标准 Arch Linux 存储库中创建官方 EC2/云优化内核。
  • 将 AWS CLI v2 添加到标准 Arch Linux 存储库(v1 可用,但将来可能会停产)
    • 不幸的是,由于 Python 3.12 的问题,AWS CLI v2 已从 Extra Repo 中删除 - 映像再次使用 aws-cli v1 构建

构建 Arch AMI

您也可以构建自己的 Arch Linux AMI。有关详细信息,请参阅 [3]