Chromiumを手探った#1 - Chromiumをビルドしよう

はじめに

この記事は大学での実験「大規模ソフトウェアを手探る」において無謀にもChromiumを改良してやろうと挑戦した人間たちの辛く苦しい記録です。

Chromiumについて詳しくは公式ページ先生を参照いただけると幸いです。めんどくさい!という方は軽量版Google Chromeだと思っておいて貰えれば大丈夫です。

この実験では実験レポートとしてブログ記事を提出することが許されていますので、当記事はその体で作成されます。

後世Chromiumに手を出す人の助けに少しでもなれたら、との思いで僕達がこの実験で何をできたのかを何回かに分けてまとめていきます。間違いや疑問点などありましたらコメントで指摘して頂けると幸いです。

 

環境

OS: Ubuntu 14.04 LTS 64bit

 

なぜChromiumを選んだのか

特にこれといって扱いたいソフトウェアがなかった僕達は、実験ホームページ中の「どんなソフトをいじればいいかのヒント」を参考にすることにしました。

どうせ扱うなら真に”大規模”と言えるソフトウェアがいい、みんなが知ってるソフトウェアがいい…など様々な思いが渦巻き、結果としてGoogle ChromeOperaといった有名ブラウザのベースであり、オープンソースであるChromiumを扱うこととなりました。(実験中この判断を何度後悔したかわかりませんが…)

 

やろうと思ったこと

Chromiumでは(Google Chromeなどでもそうですが)新しくタブを立ち上げたときに開くページを設定することができません。開くのは無機質な「新しいタブ」というページです。ホームページを設定することはできますが、これを表示するためにはタブを立ち上げてからホームページボタンを押さなければならず、スマートではありませんでした。

そこで、新しいタブを開いたときに表示されるページを自分好みにカスタマイズできるようにすることが今回の実験のゴールとして設定されました。

 

はじめの一歩はビルドから

目標を設定して一番はじめに僕達が行ったのはChromiumのビルド作業です。

一般のオープンソースのソフトウェアでは「ソースコードを公式サイトなどからダウンロード→makeなどでコンパイル」を行うだけなのですが、Chromiumの場合はその手順がやや複雑です。下のページを参照しました。

www.chromium.org

depot_toolsの準備を行う

depot_toolsはChromiumソースコードのダウンロード・コンパイル作業に用いるツールで、自力でChromiumをビルドする際には必要になります。

$ git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git

を端末において実行するとdepot_toolsというディレクトリが作成されます。続いて、

$ export PATH=$PATH:(depot_toolsまでのパス)

を実行すればdepot_toolsの準備は完了です。なお、(depot_toolsまでのパス)は、例えばホームディレクトリ内のexperimentというディレクトリにdepot_toolsが存在する場合、”~/experiment/depot_tools”となります。

Chromiumソースコードを取得する

depot_toolsの"fetch"というツールを用いてChromiumソースコードを取得します。

$ mkdir chromium
$ cd chromium
$ fetch --no-history chromium
$ cd src

 chromiumというディレクトリを作成し、そのディレクトリに移動し、そこでfetchを行います。fetchコマンドの--no-historyは通常不要(かつ巨大)なレポジトリ・履歴を取得しないオプションです。このオプションをつけることでコードの取得が20分程度で終了します。(つけないと倍以上の時間がかかり得ます)

ソースコードはsrcというディレクトリとして取得されますので、最後にそこへ移動します。以降の動作やコードの探索はすべてこのsrc内で行われます。

ソースコードコンパイルする

ソースコードが取得出来たので、必要なファイルをインストールし、コンパイルを実行します。

$ ./build/install-build-deps.sh
$ git rebase-update
$ gclient sync
$ gn gen out/Default
$ ninja -C out/Default chrome

 初め3行がファイルのインストールとアップデートです。gn genで作成したディレクトリ内に最終行(ninjaコマンド*1)でコンパイルしています。なおこのコンパイルには2時間程度かかるため、時間と気持ちに余裕のあるときに行いましょう。

最後にout/Default/chromeを実行すれば…

f:id:iuias:20161017162408p:plain

やりました。これにてビルド完了です。

 

次回予告

なんとかビルドを完了した僕達を待ち受けていたのは膨大なソースコードの山だった!どこを弄ればいいかの見当もつかず、とりあえずgdbChromiumを実行してみた僕達を非情な現実が襲う――次回「デバッグの度に10分待機させられたら作業にならないんですッ!」

#2はこちら

*1:depot_tools内にあるコンパイラ。apt-getで"ninja"は単体で取得出来ますが、こちらだと上手くいきません。