Amazon Web Services 的 Arch Linux AMI

来自 ArchWiki
(重定向自 AWS


公共社区 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 hypervisor(例如 t2-micro)的实例族上运行时启动时会挂起。XEN 内核模块未包含在最新的内核中,这就是启动失败的原因。请仅使用使用新的 Nitro Hypervisor 的实例族 - 请参阅:基于 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

Reflector 软件包已预安装在 AMI 中。

建议在 /etc/xdg/reflector/reflector.conf 中为 reflector 设置正确的配置,并启用 timer 服务以定期刷新镜像列表。有关详细信息,请参阅 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 定时事件定期执行。

Step Function 将启动构建过程,并结合使用本机调用和 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 存储库中删除 - 映像再次使用 aws-cli v1 构建

构建 Arch AMI

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