適用於 AWS 的 Arch Linux AMI - Arch Linux 中文维基

跳至內容

# 適用於 AWS 的 Arch Linux AMI

出自 Arch Linux 中文维基
翻譯狀態：

- 本文（或部分內容）譯自 Arch Linux AMIs for Amazon Web Services，最近一次同步於 2024-05-29，若英文版本有所更改，則您可以幫助同步與翻譯更改的內容。
- 您可以在 ArchWiki 的對應頁面找到本文翻譯的原始修訂歷史。
- 本文可能與英文原文存在出入。

## 開放社區的 Arch AMI

注意：Arch Linux 目前暫不提供 Amazon Machine Images 的官方支持。以下 AMI 由社區創建。

### AMI

可以在這裡找到 Arch Linux AMI：http://arch-ami-list.drzee.net/

AMI 每月構建兩次（一號及15號的 2:00am UTC），並在所有默認啟用的地區中提供（參見地域列表）。如果需要在目前不支持的地域使用，可以手動將 AMI 複製到目標區域。

這些 AMI 屬於 EBS HVM AMI，並提供了兩個內核選項：

- std - 使用來自默認 Arch 軟體源的標準內核，並帶有一些在 EC2 上使用所必須的模塊。調度器和 I/O 並沒有針對雲端使用進行優化，性能上可能較低。
- ec2 - 使用了由 UplinkLabs 從默認 Arch Linux 內核修改而來的，針對 EC2 進行優化的內核，存放於獨立的源內：參見 https://git.uplinklabs.net/steven/ec2-packages.git

兩個內核都已在多種 EC2 實例上經過測試（t2，t3，t3a，m/r/c5，m/r/c6 以及帶有多 GPU 等高級硬體的實例上）並能正常啟動。

注意：截止至 2023-06-12，已確認到 UplinkLabs 提供的 EC2 優化內核在使用 XEN 虛擬化管理器的實例（例如 `t2-micro`）上啟動時會卡住，原因是 XEN 內核模塊默認沒有打包進最新的內核裡。請確保僅使用新的 Nitro 虛擬化管理器實例 - 參見 Instances build on Nitro。這些實例仍可以使用 EC2 優化內核。
注意：ec2 倉庫除 linux-ec2 內核外也提供了其它的包。默認情況下，ec2 被設置為 `pacman.conf` 中最頂層的鏡像，導致 ec2 中的包比官方倉庫擁有更高的優先級。取決於具體的包版本，這可能會導致一些一致性問題。

未構建使用 LTS 內核的 AMI。

### 使用 REST API 獲取 AMI 列表

可以使用如下 REST API 獲取 JSON 格式的可用 AMI 列表：

注意：API 終端已配置為自定義域名，應不會出現更改。

- 獲取所有 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` 或者 `ec2`
- 按照 CPU 架構和內核類型列出地域中的最新 AMI：`https://arch-ami-api.drzee.net/region/arch/type/latest` - 替換 `region`、`arch` 和 `type`

### 初次運行

注意：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 文檔。

你也可以使用自己的鏡像源清單，而不使用 reflector。

### 構建流程

注意：該部分簡單介紹了 AMI 是如何構建的。

整個構建流程位於 AWS 上，並完全自動化進行。

構建流程由 AWS Step Function 控制，並隨一個 Amazon EventBridge 定時事件周期運行。

Step function 負責啟動構建，在更複雜的功能上結合使用了一系列本地調用及 AWS Lambda 函數來達成。

新的 AMI 構建流程為：使用舊的 AMI 啟動一台 EC2 實例作為工作/構建機器，該實例上帶了一套特殊的構建腳本，使用了 pacstrap 和一些額外步驟來生成鏡像。大致步驟在下一節進行介紹。

完成 AMI 構建後，新的 AMI 會在新的 EC2 實例上進行測試啟動以驗證其可以正常啟動。成功後，AMI 將會被分發到各個地域，並在一個 DynamoDB 資料庫上進行記錄。資料庫內容可以由 REST API 進行調取。舊 AMI 將從各個地域及 DynamoDB 資料庫中刪除。

### 致謝

感謝來自 UplinkLabs 的 Steven 協助解析構建流程，並測試了鏡像的早期質量。同時感謝 Mathcom 的腳本（遺憾的是文章已被移除），幫助加快了構建流程的基礎搭建。

你可以發送評論和建議（不保證會被查看）到：arch-ami 'at' drzee.net

### 未來工作

- 在默認 Arch Linux 源中加入官方的 EC2/雲平台優化內核
- 在默認 Arch Linux 源中加入 AWS CLI v2（v1 已在源內，但未來可能會停止更新）
  - 由於 AWS CLI v2 與 Python 3.12 的兼容問題，其已被移出 Extra 源 - 當前鏡像將繼續使用 aws-cli v1

## 構建 Arch AMI

你也可以自己構建 Arch Linux AMI，具體步驟可以參考 [1]。

適用於 AWS 的 Arch Linux AMI
新增話題