HN 日本語サマリー

← 一覧へ戻る
プログラミング

Holo Core向けArch Linux Aarch64ポートの構築

Building an Arch Linux Aarch64 Port for Holo Core (collabora.com)

35 pointsby losgehts5 コメント

要約

CollaboraはValveと協力し、Steam Deckの基盤となるaarch64 CPU搭載OSのために、Arch Linuxのaarch64ネイティブポートであるHolo Coreを開発しました。Arch Linuxは公式にaarch64をサポートしていないため、ツールとCIインフラストラクチャの構築が必要でした。本記事では、このポートの作業を公開し、開発者向けのバイナリ、ソース、コンテナを提供して、aarch64上でのArch Linuxの探求を可能にします。

全文翻訳

Collaboraについて 私たちの専門知識 私たちの仕事 オープンソース 私たちのエコシステム サービス ガイド トレーニング ビルド 統合 最適化 メンテナンス 業界 オートモーティブ デジタルTV シリコンOEM VR/AR ニュース&ブログ キャリア 連絡先 About Services Industries News & Blog Careers Contact +44 (0)1223 362967 +1 514 667 2499 contact@collabora.com HomeNews & BlogNews Building an Arch Linux aarch64 port for Holo Core Denis Pynkin July 17, 2026 Share this post: Reading time: Valveは製品にArch Linuxディストリビューションの適応版を使用しています。Collaboraでは、Valveと協力してHolo Coreを開発してきました。これは、Steam Deckで使用されるaarch64 CPUの基盤となる、Arch Linuxの純粋なaarch64ポートです。Arch Linuxは公式にはaarch64アーキテクチャをサポートしていないため、これを可能にするためのツールとCIインフラストラクチャに取り組む必要がありました。aarch64ポートでの作業を公開する最初のステップとして、準備されたバイナリ、そのソース、およびそれらから構築した開発コンテナを公開し、誰でもポートを探求し、aarch64上のArch Linuxを実験できるようにします。 Sources: https://gitlab.steamos.cloud/holo/holo-core-aarch64-preview Binary packages: https://holo-packages.steamos.cloud/holo-core-aarch64-preview/mash-20251118 Docker container: registry.gitlab.steamos.cloud/holo/holo-core-aarch64-preview/base-devel 公開されたこれらのアーティファクトは、aarch64アーキテクチャ向けにビルドするために必要な変更を加えた、Arch Linux "state"リポジトリのスナップショット(コミット97c0a0b47d15)のパッケージサブセットに対応しています。 舞台裏 この段階では、まだすべてのパッケージ(Arch Linuxリポジトリで利用可能なすべてのパッケージ)を再ビルドしたわけではありません。当初の目標は、Steam Deckの開発とイメージ作成に必要なパッケージセットを提供することでした。このパッケージサブセットに限定した場合でも、これらのパッケージとそれらのランタイムおよびビルド依存関係を含めると、数千ものパッケージになります。このポートの背後にあるアイデアは、選択したパッケージをaarch64アーキテクチャ用に単純に再コンパイルしてインストールするよりもはるかに複雑です。私たちは主に2つの問題を解決しようとしています。 * 最新のArchパッケージバージョンのバイナリを、外部アーキテクチャ向けにビルドする。 * 独自のCIインフラストラクチャを持たないディストリビューション向けのバイナリをビルドできるCIシステムを作成する。 Arch Linuxはローリングリリースディストリビューションであるため、このCIシステムがディストリビューションの更新に伴って使用すべき正しい依存関係を決定できるようにする。 課題 ポートの作成方法はある程度知られています。初期クロスコンパイル、ブートストラップ準備、パッケージの再ビルドなどです。しかし、CIで最初からプロセス全体を再現可能にしたい場合、それははるかに明白ではなくなります。依存関係ツリーの正しいビルド順序も計算する必要があります。ここで最初の注意点に遭遇します。Arch Linuxパッケージリポジトリの履歴を追跡するstate Gitリポジトリに完全に依存することはできません。多くの場合、パッケージのバッチは再ビルドに適さない順序でリポジトリにプッシュされるため、有効なビルドシーケンスを構築するために順序を自分で修正する必要があります。 もう一つの大きな課題は、Arch Linuxのローリングリリースモデルの性質に由来します。初期ポートを準備している間、パッケージとその依存関係チェーンは、私たちが作業していた状態よりも数ステップ先に進み続けます。開発プロセス中に、すでに数回新しいスナップショットに進んでいますが、パッケージ間の依存関係のために中間バージョンをスキップすることはできません。中間パッケージバージョンは、後続のバージョンのビルドにしばしば必要とされ、それらはさらに他のパッケージのバージョンに必要とされます。例えば、rust 1.91を再ビルドする必要がある場合、まず1.90が利用可能でなければならず、それ自体は1.89を必要とし、ブートストラップ中に使用されたバージョンまで遡ります。作成しているCIツールはこれを考慮する必要があります。 同様の問題は、特にicuやgpgmeのようにpacman自体が依存しているビルドインフラストラクチャの一部であるライブラリのSONAME遷移で発生します。この場合、ビルドを実行するために使用されるパッケージマネージャーは古いライブラリバージョンに依存していますが、ビルドによって生成されるパッケージマネージャーは新しいバージョンに依存する必要があります。したがって、ビルドが実行される際には両方が利用可能でなければなりません。 歴史的なビルドシーケンスを再現しようとする際に、時間の経過は最大の敵です。数ヶ月または数年前のパッケージを再ビルドしてArch Linuxに追いつこうとすると、アップストリームの状況が変化していることに必然的に気づくでしょう。ソースが移動したり、プロジェクトが異なるホスティングサービスに移行したり、パッケージが作成されたときに使用された短いコミットハッシュがその後長い形式に拡張されたためにGitソースのチェックサムが変更されたり、数え切れないほどの他の問題が発生する可能性があります。また、それらのパッケージバージョンが最初にリリースされたときには存在しなかったインフラストラクチャの問題に直面する可能性もあります。今日、多くのアップストリームサービスは、ダウンロードレートの制限、接続の制限、または一時的なクライアントブロックによって、積極的なボットやAIクローラーから積極的に防御しています。これは、ソースを直接アップストリームからダウンロードすることに依存するCIパイプラインにとって苦痛となる可能性があります。 さらに、aarch64アーキテクチャと互換性がなく、正しくビルドおよび実行するために追加のパッチを必要とするパッケージについては言及すらしていません。そしてもちろん、独自のArch Linuxポートを維持する際には、常にコーナーケースや人間の間違いに対処する必要があります。これは、ローリングリリースディストリビューションのポートに関わる課題の完全なリストからはほど遠いですが、タスクの範囲についてのアイデアを提供してくれることを願っています。 ビルド再生モデル Arch Linuxのビルド履歴を再現するために、上記の課題に対処するための複雑なツールのセットを開発する必要がありました。ツールの開発は完全に反復的であり、ブートストラップ、ビルドツリー、デッドロック解決の間を行き来し、これらの問題を解決してそれらを乗り越えるためにツールを修正しました。リリースしたパッケージツリーは、単なるワンオフのtarballドロップではありません。これは終着点ではありません。このスナップショットは、ツールとCIインフラストラクチャが完全に機能するパッケージツリーを生成でき、製品ローンチをサポートできることを実証する概念実証として機能します。このツールは完全なビルドツリーを計算し、完全な依存関係チェーンを解決し、その後、必要なすべての中間再ビルドを含めて、初期ブートストラップから特定のstate GitリポジトリのスナップショットまでArch Linuxパッケージのビルドを「再生」できます。GitLabベースのCIは、これらのすべてのパッケージを再現可能な方法でビルドできます。ツールはまだ公開できる状態ではありませんが、私たちのチームはそれに取り組んでいます。現時点までのインフラストラクチャは、最初の原則から特定の時点のスナップショットまでビルドできますが、次のステップは、Arch Linuxの開発を追跡できるシステムにすることです。この作業は、Arch Linux自体をシャドウする継続的に動作するCIシステムの基盤となります。私たちは、ディストリビューションのaarch64アーキテクチャへのポート作業を支援し、自動化された再現可能なビルドに向けて取り組むために、アップストリームのArch Linuxプロジェクトと協力していきます。 プレビューを使用してaarch64パッケージをビルドする方法 プレビュー状態であっても、このポートはaarch64上のArch Linuxでの実験には十分成熟しています。すでにaarch64ホストを持っている場合は、仮想化サポートや特別なセットアップは必要ありません。しかし、それを持っていない場合は、x86_64ホスト上でaarch64コンテナを実行したいかもしれません。これを行うには、追加の設定が必要です。指示は最近のArch Linuxホストでテストされましたが、ほとんどのLinuxディストリビューションに適しているはずです。 x86_64ホストの準備 ビルドコンテナをaarch64ホストで実行できる場合は、このセクションをスキップしてください。aarch64コンテナを実行するには