Apple Container × Rosetta で amd64 コンテナを実行し、Chromiumビルドに挑戦

## はじめに

[前回の記事](https://qiita.com/rairaii/items/15ab2d0eef56d62ff04c)では [Apple Container](https://github.com/apple/container) の基本的な動作確認を行いました。今回は、コンテナへの [CPU およびメモリの割り当て方法、そして amd64（x86_64）用コンテナイメージの実行方法](https://github.com/apple/container/blob/main/docs/how-to.md)について確認します。最終的には、M3 MacBook Pro 上で Chromium のビルドに挑戦します。

## CPUとメモリ割り当て

コンテナに 8 CPU と 16 GByte を割り当てるには、次のようにコンテナを実行します。

```bash
container run --rm --cpus 8 --memory 16g -ti --rm ubuntu /bin/bash
```

:::note info
デフォルトでは 4 CPU と 1 GByte が割り当てられます。
:::




## amd64（x86_64）コンテナの実行

Arm CPU を搭載した M1/M2/M3 Mac でも、amd64 用のコンテナを **Rosetta** を利用して実行することができます。

```bash
container run --arch amd64 -ti --rm ubuntu /bin/bash
```

`container ls` コマンドで、ARCH が amd64 であることを確認できます。

```bash
container ls
```

```terminal
ID                                    IMAGE                            OS     ARCH   STATE    ADDR
1eea059a-92d8-4e9c-ae63-c5d4455647ff  docker.io/library/ubuntu:latest  linux  amd64  running  192.168.106.2
```

さらに、コンテナ内で `uname -a` コマンドを実行することで、アーキテクチャを確認できます。

```bash:コンテナ内で実行
uname -a
```
```terminal: uname -a のログ
Linux 1eea059a-92d8-4e9c-ae63-c5d4455647ff 6.12.28 #1 SMP Tue May 20 15:19:05 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
```

`htop` コマンドを利用すると、amd64 バイナリのコマンドが **Rosetta** を通じて aarch64 バイナリに変換されて動作している様子を確認できます。

```bash:コンテナ内で実行
apt-get install htop
htop
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1017489/be3897c3-0844-4b15-8c36-2f831282af77.png)



## Chromium のビルド

[公式ドキュメント](https://chromium.googlesource.com/chromium/src/+/refs/tags/115.0.5737.2/docs/linux/build_instructions.md)に従って、Chromium を M3 MacBook Pro 上でビルドします。

### コンテナの起動

Chromium は、ターゲット環境が Linux の場合、amd64（x86_64）環境でのビルドのみをサポートしています。aarch64 用 Linux 上でのビルドはサポートされていないため、amd64 用 Ubuntu コンテナを起動します。

```
container run --arch amd64 --cpus 8 --memory 16g -ti --rm ubuntu:24.04 /bin/bash
```

### ビルド

起動したコンテナ内で、以下のステップでビルドを進めます。

#### ビルド環境の構築

```
apt-get update
DEBIAN_FRONTEND=noninterractive apt-get install -y curl git python3 sudo lsb-release pkg-config
cd root
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
export HOME=/root
export PATH=$PATH:$HOME/depot_tools
```

#### ソースコードの取得

```
mkdir ~/chromium && cd ~/chromium
fetch --nohooks --no-history chromium
```

#### 追加パッケージをインストール

```
cd src
./build/install-build-deps.sh
gclient runhooks
```

#### ビルド

```
gn gen out/Default --args="is_official_build=true is_debug=false symbol_level=0 blink_symbol_level=0 v8_symbol_level=0 chrome_pgo_phase=0 enable_nacl=false"
```

```
time autoninja -C out/Default chrome
```

#### ビルド結果

残念ながら、ビルド途中でコンテナがハングアップしてしまい、ビルドは失敗しました。  
**Rosetta** を使用して amd64（x86_64）用コンテナイメージを実行し、その中で Chromium をビルドする試みは、Colima などの他の環境でも行ってきましたが、いずれも現時点では成功には至っていません。

```
ninja: Entering directory `out/Default'
[9475/52852] CXX obj/net/net/http_proxy_connect_job.o
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1017489/1c8a998d-49f7-4f3f-a718-20fbd9fc1953.png)


## まとめ

Apple Container を使って、M3 MacBook Pro 上で amd64（x86_64）コンテナを実行し、Chromium のビルドに挑戦しました。  
CPU・メモリの割り当てや Rosetta による amd64 バイナリの実行はうまく機能しましたが、ビルドの途中でコンテナがハングアップし、最終的なビルド成功には至りませんでした。
Rosetta 上での大規模ビルドは、現時点では安定性に課題があることが分かりました。  

# 参考情報

https://github.com/apple/container/blob/main/docs/how-to.md