Closed19
Emscripten が動く Docker イメージを AlmaLinux で作成する

このスクラップについて
作成過程を記録していく。

ディレクトリ作成
コマンド
cd ~/workspace
mkdir scrap-emscripten-almalinux
cd scrap-emscripten-almalinux

AlmaLinux コンテナの起動
コマンド
docker run -it --rm almalinux /bin/bash

参考スクラップ

公式ドキュメント

Git インストール
コマンド
dnf install git

リポジトリのクローン
コマンド
cd /root
git clone https://github.com/emscripten-core/emsdk.git
cd emsdk

インストール
コマンド
./emsdk install latest
コンソール出力
Resolving SDK alias 'latest' to '4.0.15'
Resolving SDK version '4.0.15' to 'sdk-releases-b412b6307e541b93dd93f01b61181e15c17302ec-64bit'
WARNING: arm64-linux binaries are not available for all releases.
See https://github.com/emscripten-core/emsdk/issues/547
Installing SDK 'sdk-releases-b412b6307e541b93dd93f01b61181e15c17302ec-64bit'..
Installing tool 'node-22.16.0-64bit'..
Downloading: /root/emsdk/downloads/node-v22.16.0-linux-arm64.tar.xz from https://storage.googleapis.com/webassembly/emscripten-releases-builds/deps/node-v22.16.0-linux-arm64.tar.xz, 29126496 Bytes
Unpacking '/root/emsdk/downloads/node-v22.16.0-linux-arm64.tar.xz' to '/root/emsdk/node/22.16.0_64bit'
Done installing tool 'node-22.16.0-64bit'.
Installing tool 'releases-b412b6307e541b93dd93f01b61181e15c17302ec-64bit'..
Downloading: /root/emsdk/downloads/b412b6307e541b93dd93f01b61181e15c17302ec-wasm-binaries-arm64.tar.xz from https://storage.googleapis.com/webassembly/emscripten-releases-builds/linux/b412b6307e541b93dd93f01b61181e15c17302ec/wasm-binaries-arm64.tar.xz, 335568016 Bytes
Unpacking '/root/emsdk/downloads/b412b6307e541b93dd93f01b61181e15c17302ec-wasm-binaries-arm64.tar.xz' to '/root/emsdk/upstream'
Done installing tool 'releases-b412b6307e541b93dd93f01b61181e15c17302ec-64bit'.
Done installing SDK 'sdk-releases-b412b6307e541b93dd93f01b61181e15c17302ec-64bit'.
一発で成功した、怖い。

アクティベーション
コマンド
./emsdk activate latest
コンソール出力
Resolving SDK alias 'latest' to '4.0.15'
Resolving SDK version '4.0.15' to 'sdk-releases-b412b6307e541b93dd93f01b61181e15c17302ec-64bit'
Setting the following tools as active:
node-22.16.0-64bit
releases-b412b6307e541b93dd93f01b61181e15c17302ec-64bit
Next steps:
- To conveniently access emsdk tools from the command line,
consider adding the following directories to your PATH:
/root/emsdk
/root/emsdk/node/22.16.0_64bit/bin
/root/emsdk/upstream/emscripten
- This can be done for the current shell by running:
source "/root/emsdk/emsdk_env.sh"
- Configure emsdk in your shell startup scripts by running:
echo 'source "/root/emsdk/emsdk_env.sh"' >> $HOME/.bash_profile

環境変数の読み込み
コマンド
source ./emsdk_env.sh
コンソール出力
Setting up EMSDK environment (suppress these messages with EMSDK_QUIET=1)
Adding directories to PATH:
PATH += /root/emsdk
PATH += /root/emsdk/upstream/emscripten
PATH += /root/emsdk/node/22.16.0_64bit/bin
Setting environment variables:
PATH = /root/emsdk:/root/emsdk/upstream/emscripten:/root/emsdk/node/22.16.0_64bit/bin:/root/.local/bin:/root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
EMSDK = /root/emsdk
EMSDK_NODE = /root/emsdk/node/22.16.0_64bit/bin/node

バージョン確認
コマンド
emcc --version
コンソール出力
shared:INFO: (Emscripten: Running sanity checks)
emcc (Emscripten gcc/clang-like replacement + linker emulating GNU ld) 4.0.15 (09f52557f0d48b65b8c724853ed8f4e8bf80e669)
Copyright (C) 2025 the Emscripten authors (see AUTHORS.txt)
This is free and open source software under the MIT license.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

順調すぎて怖い
きっと Dockerfile を作成するところでハマることになるだろう。

Dockerfile の作成
コマンド
touch Dockerfile
Dockerfile
FROM almalinux:latest
# 必要なパッケージのインストール
RUN dnf update -y && \
dnf install -y git && \
dnf clean all
# 作業ディレクトリの設定
WORKDIR /root
# emsdkのクローン
RUN git clone https://github.com/emscripten-core/emsdk.git
# emsdkディレクトリに移動
WORKDIR /root/emsdk
# 最新版のインストールとアクティベート
RUN ./emsdk install latest && \
./emsdk activate latest
# 環境変数の設定
# Dockerfileでは各RUNコマンドが独立しているため、ENVで永続的に設定
ENV EMSDK=/root/emsdk \
EMSDK_NODE=/root/emsdk/node/22.16.0_64bit/bin/node \
PATH=/root/emsdk:/root/emsdk/upstream/emscripten:/root/emsdk/node/22.16.0_64bit/bin:${PATH}
# emsdk_env.shを.bashrcに追加(インタラクティブシェル用)
RUN echo 'source "/root/emsdk/emsdk_env.sh"' >> /root/.bashrc
# 作業ディレクトリを設定
WORKDIR /workspace
# デフォルトコマンド
CMD ["/bin/bash"]

Makefile の作成
コマンド
touch Makefile
Makefile
build-image:
docker build -t alma-emcc:latest .
run-image:
docker run -it --rm alma-emcc:latest

コンテナのビルド
コマンド
make build-image

動作確認
コマンド
make run-image
コマンド
emcc --version
コンソール出力
emcc (Emscripten gcc/clang-like replacement + linker emulating GNU ld) 4.0.15 (09f52557f0d48b65b8c724853ed8f4e8bf80e669)
Copyright (C) 2025 the Emscripten authors (see AUTHORS.txt)
This is free and open source software under the MIT license.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

おわりに
このページのソースコードは MIT ライセンスでご利用いただけます。

GitHub リポジトリ作成
コマンド
gh repo create --public scrap-emscripten-almalinux
git init
git add .
git commit -m "最初のコミット"
git remote add origin git@github.com:tatsuyasusukida/scrap-emscripten-almalinux
git push origin main
gh repo view --web

追記:Dockerfile 編集
emcc で実際にコンパイルするときに libatomic が必要になった。
Dockerfile
FROM almalinux:latest
# 必要なパッケージのインストール
RUN dnf update -y && \
dnf install -y git libatomic && \
dnf clean all
# 作業ディレクトリの設定
WORKDIR /root
# emsdkのクローン
RUN git clone https://github.com/emscripten-core/emsdk.git
# emsdkディレクトリに移動
WORKDIR /root/emsdk
# 最新版のインストールとアクティベート
RUN ./emsdk install latest && \
./emsdk activate latest
# 環境変数の設定
# Dockerfileでは各RUNコマンドが独立しているため、ENVで永続的に設定
ENV EMSDK=/root/emsdk \
EMSDK_NODE=/root/emsdk/node/22.16.0_64bit/bin/node \
PATH=/root/emsdk:/root/emsdk/upstream/emscripten:/root/emsdk/node/22.16.0_64bit/bin:${PATH}
# emsdk_env.shを.bashrcに追加(インタラクティブシェル用)
# RUN echo 'source "/root/emsdk/emsdk_env.sh"' >> /root/.bashrc
# 作業ディレクトリを設定
WORKDIR /workspace
# デフォルトコマンド
CMD ["/bin/bash"]
このスクラップは3日前にクローズされました