概略
Chromiumのソースコードをクローンしてコンパイルして実行する。
(2023/04/28追記): 2019年の記事のため、内容が古くなっています。ひょっとしたら動かないかもしれません。末尾により実用的な docker 環境構築に関する情報を記載しています。
環境
ubuntu 19.04
ただし、chromiumの推奨開発環境は
Most development is done on Ubuntu (currently 16.04, Xenial Xerus).
との事なので、dockerで擬似的に16.04の環境を作ることにする。
install docker
dockerとは?→
https://knowledge.sakura.ad.jp/13265/
docker.io を apt-get して docker をインストール。
sudo apt install docker
公式のubuntuのイメージファイルが存在するので、環境構築は困らない。
https://hub.docker.com/_/ubuntu
16.04のタグがついたdockerイメージをpull docker pull ubuntu:16.04
して取得。
あとは、docker run -it imagefilename
するだけで起動する。
が、今回はGUIアプリを実行しようとしているので、ホストPCのXサーバの情報を渡して起動する必要がある。
その起動コマンドは、以下のようになる。
ソケットの共有と環境変数のコピーを行っているよう。
$ sudo docker run -it -e DISPLAY=$DISPLAY -v /tmp/.X11-unix/:/tmp/.X11-unix ubuntu:16.04
また、コンテナからホストへXサーバの接続を許可するために、ホスト側で次のコマンドを打つ。
$ xhost local:
この辺りの話は下記URLに詳しく書かれています。
build chromium
次の手順を進めるだけ。
とりあえず apt update
しておく。
# apt update
Get:1 http://security.ubuntu.com/ubuntu xenial-security InRelease [109 kB]
Get:2 http://archive.ubuntu.com/ubuntu xenial InRelease [247 kB]
Get:3 http://security.ubuntu.com/ubuntu xenial-security/main amd64 Packages [892 kB]
...
gitをインストール
# apt install git
...
# git --version
git version 2.7.4
作業用ディレクトリを作り、ツールを git clone
する
/ # cd ~
~ # mkdir work
~ # cd work
~/work # git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
パスを通しておく
# PATH=$PATH:`pwd`"/depot_tools"
# echo export PATH=$PATH:`pwd`"/depot_tools" >> ~/.bashrc
chromium を拾ってくる・・・pythonが無い
~/work# mkdir chromium
~/work# cd chromium/
~/work/chromium# fetch --nohooks chromium
/root/work/depot_tools/fetch: line 8: exec: python: not found
apt install python
もう一度実行するが・・・ curl
が無い
...
Your platform is missing a supported fetch command. Please use your package manager to install one before continuing:
curl
wget
...
apt install curl
途中で止めてしまったので、いろいろ汚くなってしまった。一旦消す。
~/work/chromium# fetch --nohooks chromium
Running: gclient root
Your current directory appears to already contain, or be part of,
a checkout. "fetch" is used only to get new checkouts. Use
"gclient sync" to update existing checkouts.
Fetch also does not yet deal with partial checkouts, so if fetch
failed, delete the checkout and start over (crbug.com/230691).
~/work/chromium# ls
_gclient_src_kXTDYS
~/work/chromium# rm * -rf
~/work/chromium# fetch --nohooks chromium
Running: gclient root
Your current directory appears to already contain, or be part of,
a checkout. "fetch" is used only to get new checkouts. Use
"gclient sync" to update existing checkouts.
Fetch also does not yet deal with partial checkouts, so if fetch
failed, delete the checkout and start over (crbug.com/230691).
~/work/chromium# ls -a
. .. .gclient
~/work/chromium# rm .gclient
~/work/chromium# fetch --nohooks chromium
lsb-release
が無い
# cd src
# ./build/install-build-deps.sh
ERROR: lsb_release not found in $PATH
apt install lsb-release
sudo
が無い
# ./build/install-build-deps.sh
./build/install-build-deps.sh: line 132: sudo: command not found
apt install sudo
以下、まったりタイムです
# ./build/install-build-deps.sh
# gclient runhooks
# gn gen out/Default
# autoninja -C out/Default chrome
execute chromium
chromiumの実行です。
out/Default/chrome
Running as root without --no-sandbox is not supported. See https://crbug.com/638180.
rootで起動しようとすると、--no-sandbox
オプションが必須になる。
アカウントを新規作成しても良いですが、面倒なので。
out/Default/chrome --no-sandbox
これでブラウザが表示されるはず。
もし
Gtk: cannot open display:
が出たら、Docker起動時のオプション辺りを見直してください。
実用的な方法
上の方法は、dockerイメージからコンテナに入り、常にその中でchromiumのクローン・ビルドを行っていました。
これは、「コンテナはエフェメラル(短命)であるべき」に沿っていない内容となります。
必要なソフトウェアはchromiumのバージョンに依存するため、完璧な方法は難しいですが、「コンテナはエフェメラル(短命)であるべき」に従うのであれば、以下のような改善案があります。
- 必要なソフトウェアをインストールしたdockerイメージをdockerfileで作る
- ./build/install-build-deps.shを取得する処理が面倒そう
- dockerコンテナ作成時に作業ディレクトリをマウントし、ソースコードをコンテナ外で管理する
また別の記事でまとめたいですね
(2023/04/28追記)
簡単なDocker環境構築用ツールを作成・公開しました。「実用的な方法」の項目に従ったものになります。
https://github.com/buyoh/chromium-builder?tab=readme-ov-file#hands-on