Amazon Web Services 的 Arch Linux AMI
公共社区 Arch AMI
AMI
Arch Linux AMI 列表在此: http://arch-ami-list.drzee.net/
AMI 每月构建两次(每月 1 号和 15 号 - 2:00 UTC),可用于所有不明确要求“选择加入”的区域 - 请参阅 区域列表。如果某个区域需要 AMI 但目前不可用,可以 将 AMI 复制到该区域。
这些 AMI 是 EBS HVM AMI,并提供两种不同的内核
- std - 使用来自默认 Arch 存储库的标准 Arch Linux 内核,并配置了 EC2 使用所需的模块。调度器和 I/O 未针对云进行优化。AMI 中的软件包完整列表:[1]。
- lts - 使用来自默认 Arch 存储库的标准 Arch Linux LTS 内核,并配置了 EC2 使用所需的模块。调度器和 I/O 未针对云进行优化。AMI 中的软件包完整列表:[2]。
这两种内核都已在多种不同的 EC2 实例类型(t2、t3、t3a、m/r/c5、m/r/c6 以及具有 GPU 的高级硬件)上进行了测试,并且都能正常启动。
用于列出 AMI 的 REST API
提供了一个 REST API,用于获取可用 AMI 的 JSON 数据。
- 获取所有 AMI:
https://arch-ami-api.drzee.net/ - 获取每个区域最新 AMI 的列表:
https://arch-ami-api.drzee.net/latest(此链接生成的列表与 http://arch-ami-list.drzee.net/ 相同,但格式为 JSON) - 获取区域中的所有 AMI:
https://arch-ami-api.drzee.net/region- 将region替换为所需的区域:eu-north-1、eu-west-1、us-east-1等。 - 获取区域中特定 CPU 架构的所有 AMI:
https://arch-ami-api.drzee.net/region/arch- 将arch替换为x86_64 - 获取区域中特定 CPU 架构和内核类型的 AMI:
https://arch-ami-api.drzee.net/region/arch/type- 将type替换为std或lts - 获取区域中特定 CPU 架构和内核类型的最新 AMI:
https://arch-ami-api.drzee.net/region/arch/type/latest- 替换region、arch和type
首次运行
arch。此外,请确保仅使用 RSA 密钥。目前,cloudinit 在这些镜像中不支持椭圆曲线密钥。
AMI 中内置的镜像列表是在镜像构建时生成的,使用的是德国的服务器。运行 reflector 或/etc/pacman.d/pacman_init.sh 将选择更合适的镜像。启动 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
AMI 中预装了 Reflector 包。
建议在 /etc/xdg/reflector/reflector.conf 中为 reflector 设置适当的配置,并启用定时服务以定期刷新镜像列表。有关详细信息,请参阅 Reflector 包的文档。
为了方便起见,包含了一个脚本:/etc/pacman.d/pacman_init.sh。
使用 sudo 执行该脚本将自动运行上述 pacman-key 命令,并通过写入 /etc/xdg/reflector/reflector.conf 来设置 Reflector。最后,它将运行 Reflector 来生成一个 mirrorlist。
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/APAC/南美洲区域,“US”(美国),始终作为最后手段包含,以防国家或“邻国”的国家存储库不可用。
或者,您可以提供自己的 mirrorlist,而不使用 Reflector 包。
构建过程
整个构建过程在 AWS 上运行,并实现完全自动化。
总的来说,自动化构建过程由 AWS Step Functions 管理,该函数使用 Amazon EventBridge 定时事件定期执行。
Step Functions 将启动构建过程,并结合使用原生调用和 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/云优化内核。
构建 Arch AMI
您也可以构建自己的 Arch Linux AMI。有关详细信息,请参阅 [3]。