
2026/07/18 0:50
Holo Core 向けの Arch Linux Aarch64 ポートの構築
RSS: https://news.ycombinator.com/rss
要約▶
日本語翻訳:
サマリー:
Valve と Collabora は、Arch Linux が ARM ベースの Steam Frame ハードウェア上で動作することを成功裡に実証し、同ハードウェアにおける aarch64 への公式サポート欠如を克服しました。このマイルストーンは、Arch Linux の複雑なロールリングリリースモデル(rolling-release model)を管理するためにカスタムツールと CI インフラストラクチャを適応させることで達成され、ICU や gpgme のようなライブラリにおける SONAME 移行(ビルド中に新旧両方のバージョンが必要となるケース)の処理などを含む課題に取り組みました。その結果生じた「Holo Core」はまだ完全なオペレーティングシステムではなく、開発用およびイメージ作成用のエッセンシャルパッケージを内包したプロトタイプです(数千のパッケージ)。これは、頻繁な更新と依存関係の管理という複雑な課題は、専用インフラストラクチャによって解決可能であることを証明しており、特に次の 2 つの主要問題への対応を達成しています:1) 外部アーキテクチャ上で最新バイナリをビルドすること、2) Arch Linux のロールリングリリースにおける依存関係更新を処理できる CI システムを構築すること。
主なアセットには、以下のものがあります:https://gitlab.steamos.cloud/holo/holo-core-aarch64-preview のソースコード、https://holo-packages.steamos.cloud/holo-core-aarch64-preview/mash-20251118 のバイナリパッケージ、そして registry.gitlab.steamos.cloud/holo/holo-core-aarch64-preview/base-devel の Docker コンテナです。これらのアセットは、Arch Linux の「state」リポジトリのコミット 97c0a0b47d15 に基づくスナップショットからのパッケージ subsets であり、aarch64 ビルド向けに修正されたものです。現在では Arch Linux のすべてのパッケージを再ビルドしておらず、初期の目標は Steam Frame 用として開発およびイメージ作成パッケージを提供することにあります。今後の反復では、ソフトウェアツリーを拡張して一般利用をサポートする予定です。
このプロジェクトはまた、アップストリーム環境の変化(ソース移転、ホスティング移行、チェックサムハッシュの拡張など)による歴史的回放問題、アップストリームサービスのダウンロードレート制限などのインフラストラクチャ課題、そして互換性のない aarch64 パッケージに対するパッチが必要となる可能性といった課題を浮き彫りにしています。ユーザーは、このプレビューを ARM デバイスで直接使用するか、または QEMU と提供された Docker コンテナを用いて標準的な Intel CPU 上でエミュレートすることができます。このプロジェクトは、Arch Linux を Steam Frame デバイスに展開するための重要な機能基盤を確立し、開発者が陳腐化したり互換性のないレガシーシステムに依存せずに、外部アーキテクチャ上で最新バイナリをコンパイルすることを可能にします。
本文
Valve × Collabora: アーチ Linux aarch64 移植プロジェクト「Holo Core」の公開と進捗
Valve は自社製品(SteamOS など)向けに、Linux の派生版である アーチ(Arch)Linux を採用しています。Collabora では、この方針を支持し、aarch64 アーキテクチャ用の純粋な移植プロジェクト「Holo Core」において Valve と緊密に協力してまいりました。
本来、アーチ Linux は公式に aarch64 のサポートを行っていないため、ツールチェーンと CI(継続的インテグレーション)インフラの構築に多大な労力を費やしてきました。
公開されたリソース
aarch64 移植作業を一般公開に向けた第一歩として、以下のアセットが準備されました。これにより、ご自身でも移植プロジェクトに参加し、実験的な環境を試すことができます。
- ソースコード
- リポジトリ:
https://gitlab.steamos.cloud/holo/holo-core-aarch64-preview
- リポジトリ:
- バイナリパッケージ
- ダウンロード先:
https://holo-packages.steamos.cloud/holo-core-aarch64-preview/mash-20251118
- ダウンロード先:
- Docker コンテナイメージ
- リポジトリ:
registry.gitlab.steamos.cloud/holo/holo-core-aarch64-preview/base-devel
- リポジトリ:
注記: 公開されたアーティファクトは、アーチ Linux の「state」リポジトリスナップショット(コミット
)に含まれるパッケージ群のサブセットに対応しており、aarch64 ビルドを可能にするための修正が反映されています。97c0a0b47d15
裏側で起こっていること:課題と解決策
現時点では、アーチ Linux リポジトリ内の全パッケージを対象とした「全世界(all-the-world)」再ビルドは完了していません。今回の目標は、Steam Frame の開発用イメージ作成に必要な一連のパッケージセットの提供です。
しかし、数千ものパッケージを含む依存関係樹を考慮すると、単純な再コンパイル以上の複雑さが伴います。主に以下の 2 つの課題に対処するため、**「裏側でのビルドリプレイモデル」**を開発しました。
主要な技術的課題と対応策
- 他アーキテクチャ向けバイナリのビルド
- 最新のアーチ Linux パッケージから、aarch64 用のバイナリを再構築・インストールします。
- CI システムの自動化と依存関係解決
- CI インフラを持たない配布物向けに自動ビルドを実現し、ローリングリリース型モデルにおける正確な依存関係の特定と決定体制を整えます。
具体的な難問
- Git リポジトリの信頼性不足: パッケージリポジトリの履歴を追跡する状態 Git は、複数のパッケージを一括プッシュする際、再ビルドに適さない順序で保存されるケースが多いため、手動での順序修正が必要です。
- ローリングリリースの性質: パッケージと依存関係チェーンは常に進化しており、開発が進むにつれて中間バージョンがスキップされがちです。後続のバージョンをビルドするには中間パッケージが必要となるため(例:Rust 1.91 をビルドするには 1.90 → 1.89 までの遡及が必要)、歴史的なビルドシーケンスの完全再現が必須となります。
- SONAME とライブラリの移行:
が新しいライブラリバージョンを要求する一方で、ビルド環境自体は古いバージョンに依存している場合があり、実行時には両方のバージョンが存在する必要があります(例:icu, gpgme など)。pacman - 時間的遅延とインフラ変化: 数ヶ月前のパッケージを再ビルドしようとすると、上流の状況が変化しています。ソースコード場所の変更、ホスティングサービスの移転、コミットハッシュの形式変更などにより、チェックサムが変わることがあります。
- ボット対策によるダウンロード制限: 上流サービスがボット防御のために接続数や速度を制限しているため、依存関係解決用の CI パイプラインにとって困難な状況です。
- 互換性の問題: aarch64 と単純に互換性のないパッケージが存在するため、追加のパッチ適用が必要です。
ビルドリプレイモデルについて
上記の問題に対処するため、複雑なツールセットを開発しました。ブートストラップフェーズから特定の Git スナップショットまでの依存関係チェーン全体を解決し、「リプレイ」方式でビルドを実行できます。
- 現在の状態: 公開されたパッケージツリーは概念実証(Proof of Concept)であり、フル機能のツールセットと CI インフラストラクチャーによる完全なビルドツリーの生成を示しています。
- 将来の計画:
- ツールとインフラのさらなる開発(現在は非公開)。
- アーチ Linux の進化を追跡するシステムの構築。
- アップストリームのアーチ Linux プロジェクトとの協力による、自動化された再現可能ビルドの実現。
- 将来的には AMD64/X86_64 版 SteamOS で使用されているパッケージリビジョンとの同期を効率的に行うことを目指します。
aarch64 パッケージのビルド方法(プレビュー版)
aarch64 ホストをお持ちでない場合、x86_64 ホスト上で
QEMU を用いてエミュレーション環境を構築します。以下の手順は最近のアーチ Linux ホストでテスト済みです。
1. x86_64 ホストの準備(QEMU のインストール)
異なるアーキテクチャのコンテナを実行するには、以下が必要です。
sudo pacman -S --noconfirm qemu-user-static qemu-user-static-binfmt
オプション:x86_64 上での
を動作させる デフォルト設定では SUID バイナリ(例:sudo,sudo)が阻止されることがあります。以下の手順で有効化します。makepkg
- 設定をコピー:
sudo cp /usr/lib/binfmt.d/qemu-aarch64-static.conf /etc/binfmt.d/qemu-aarch64-static.conf フラグを:FPに変更(C credentials フラグの追加)::FCPsudo sed -i -e "s/:FP$/:FCP/" /etc/binfmt.d/qemu-aarch64-static.conf- 構成を再登録:
sudo systemctl restart systemd-binfmt.service
2. ビルドコンテナの作成とテスト
以下は
distrobox を使用した簡易的なセットアップ例です。
A. distrobox のインストール
sudo pacman -S --noconfirm distrobox
B. UID/GID マッピングの確認と設定 rootless コンテナのため、適切な ID 空間マッピングが必要です。
# 現在のユーザーの UID/GID を確認 grep "$USER" /etc/subuid /etc/subgid # subuid/subgid の範囲を追加(例:100000-165535) sudo usermod --add-subuids 100000-165535 --add-subgids 100000-165535 $USER
C. コンテナの作成
distrobox create \ --platform linux/arm64 \ --image registry.gitlab.steamos.cloud/holo/holo-core-aarch64-preview/base-devel:latest \ --name builder
コンテナ内へのアクセスと確認:
$ distrobox enter builder Starting container... [ OK ] Installing basic packages... [ OK ] Setting up devpts mounts... [ OK ] Setting up read-only mounts... [ OK ] Setting up read-write mounts... [ OK ] Setting up host's sockets integration... [ OK ] Integrating host's themes, icons, fonts... [ OK ] Setting up distrobox profile... [ OK ] Setting up sudo... [ OK ] Setting up user's group list... [ OK ] Setting up existing user - shell... [ OK ] Setting up existing user - groups... [ OK ] Ensuring user's access... [ OK ] Container Setup Complete! [user@builder ~]$ file /bin/bash /bin/bash: ELF 64-bit LSB pie executable, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, BuildID[sha1]=6b5cf11c690122687bb20c169b56aadf44a9aeb6, for GNU/Linux 4.4.0, stripped [user@builder ~]$ cat /etc/os-release NAME="Holo core Aarch64 port (preview)" PRETTY_NAME="Holo core Aarch64 port (preview)" ID=holo-core ID_LIKE=arch VARIANT_ID=aarch64-preview ANSI_COLOR="1;35" HOME_URL="https://gitlab.steamos.cloud/holo/holo-core-aarch64-preview" LOGO=holo VERSION_ID=mash-20251118.1 BUILD_ID=240949 [user@builder ~]$ sudo pacman -Syu :: Synchronizing package databases... core is up to date extra is up to date :: Starting full system upgrade... there is nothing to do
3. パッケージのビルド
リポジトリからパッケージをダウンロードし、ビルドを実行します。
A. リポジトリとパッチの取得
$ git clone https://gitlab.steamos.cloud/holo/holo-core-aarch64-preview $ cd holo-core-aarch64-preview/core-aarch64/c/coreutils/9.9-1
B. キーのインポートとビルド コンテナ内で作業します。GPG キーをインポートし、クリーンビルドを開始します。
$ distrobox enter builder -- gpg --import keys/pgp/*.asc $ distrobox enter builder -- makepkg --cleanbuild --noconfirm --syncdeps
注意点: ビルドプロセスは時間がかかります。x86_64 ホスト上では、すべての
バイナリが QEMU によるエミュレーションを通じて実行されることを理解しておいてください。aarch64
ビルド完了後、aarch64 アーキテクチャ用のパッケージが取得できます。
まとめと今後の展望
今回の「Holo Core」プロジェクトは、アーチ Linux の aarch64 移植における重要なマイルストーンです。 チームは現在、ツール開発を継続しており、コミュニティ全体でオープンなアプローチを追求していきます。将来的には、SteamOS の基盤となるより広いエコシステムへの貢献を目指してまいります。
詳細や最新情報は以下のリポジトリをご覧ください: 🔗
https://gitlab.steamos.cloud/holo/holo-core-aarch64-preview