chrome OSが公開されたので buildしてみる

gdgtというサイトに、イメージがあるんだけど、セキュリティ的によろしくないじゃない?と先輩に言われたのでビルドしてみる事にする。なぜ、セキュリティ的によろしくないのかはまだよく分からない。

といことで、昨日から一晩かけて chronium osのbuildとEeePCへのインストールをしてみた。

結論から言うと、VM Ware上でビルドするのは大変(処理速度的な意味で)。EeePC 901の上でも動くが、Wifiが今のところ使えない。
ブラウザの速度的には普通に快適だった。

以下、ビルドしてみたい人の参考にはなると思う。

参考ページ

http://www.chromium.org/chromium-os/building-chromium-os
必要なことは、全部ここに書いてあるので、まあそんなに難しくは無いと思われる。

Chromium osをコンパイルしてみる - 崩壊現実-全てはvirtualに収束する-
先にビルドに成功している方。やり方が簡潔にまとまっているので、手順を参考にするならこちらの方がよいかも。

ビルド環境

Ubuntu 9.10 がビルド環境にお勧めお勧めされている。つい先日発表になった最新版である。手元に9.04の環境ならあったのでそれで大丈夫だろー。とか思ったら、 gprefのバージョンが合わなくてアップグレードすることになった。アップグレードは大変なのでこれからビルド環境をつくるなら素直に9.10をクリーンインストールするべきだろう。

ビルド準備

LinuxBuildInstructionsPrerequisites - chromium - An open-source project to help move the web forward. - Google Project Hosting
ここに、必要なパッケージとバージョンが書いてあるので一応それを確かめよう。Ubuntu 9.10なら全部大丈夫だろう。な。まさか。
下にあげたパッケージはubuntuをインストールするだけでは入らないので、apt-get install hoge でインストールする。

  • g++
  • g++-multilib
  • bison
  • flex
  • gpref
  • libnss3-dev
  • libasound2-dev
  • libgconf2-dev
  • libgtk2.0-dev
  • msttcorefonts
  • freetype-dev

ソースを手に入れる

tarballでも良いのだけれど、せっかくなので俺は赤いGitを選ぶぜ。
と思ったら、depot-toolsがいるらしい。
http://dev.chromium.org/developers/how-tos/install-gclient

svnでインストールするので、svnもインストール。そして、depot-toolsも。

$ sudo apt-gte install subversion
$ svn co http://src.chromium.org/svn/trunk/tools/depot_tools
$ export PATH=`pwd`/depot_tools:"$PATH"

で、git に戻る。

$ mkdir [chromiumos]
$ cd [chromiumos]
$ gclient config http://src.chromium.org/git/chromiumos.git
$ gclient sync

これでソースが手元に。遅い・・・・。

chromium(ブラウザの方)のソースも必要なようだ。また時間がかかりそうだなあ・・・。と思ったら無くても良いらしい。最新版で組みたい人は、落とせとのことらしい。

buildするぜ。

ln -s src/chromiumos/chromiumos.git chromiumos

これはやらなくても良いのだが、マニュアルにディレクトリを合わせる。

$ cd chromiumos/src/scripts/
$ ./make_local_repo.sh

localのリポジトリが作られる。ずいぶん時間がかかる・・・。

chromeos はchroot環境にしか作れないらしいので、chroot環境を作る処理を始めるやってることはいわゆるdebootstrapのように見える。

$ ./make_chroot.sh

続いて、ブラウザの方のchromeを組み込むためにバイナリを用意する。自分でコンパイルしても良いのだが、ソースを用意するのがけっこう手間そうだったので用意されているバイナリを利用することにする。と思ったのだが、解説ページのバイナリへのリンクは403になっているのであきらめて、自分でビルドすることにする。

chromeの準備

ソースをゲット
cd ~/src
mkdir chromium
cd chromium
gclient config http://src.chromium.org/svn/trunk/src
gclient sync

trunkは時々バギーな状態になっているので、チェックすべきらしい。
http://build.chromium.org/buildbot/waterfall/
を見て一番上のステータスがOPENになっていたら、問題なし。closeになっていたら問題があるので直るまでまつか、問題ないリビジョンでチェックアウトする。

chrome のビルド

./build_chrome.sh --chrome_dir ~/chromium

ここでうまくいかなくて、悩んでいたら、先のバイナリが手に入るようになったので、そっちを使うことに変更。

$ cd ~/src
$ wget http://build.chromium.org/buildbot/archives/chromium-chromiumos-r32516/chrome-linux.zip
$ mkdir -p ~/chromiumos/src/build/x86/local_assets
$ cp chrome-linux.zip ~/chromiumos/src/build/x86/local_assets

いよいよビルド

$ cd ~/chromiumos/src/scripts
$ ./enter_chroot.sh  #chroot環境へ入る
(chroot)$ cd ../platform/pam_google && ./enable_localaccount.sh USERNAME
(chroot)$ ./set_shared_user_password.sh  
(chroot)$ ./build_platform_packages.sh
(chroot)$ ./build_kernel.sh
(chroot)$ ./build_image.sh

cd ../platform/pam_google && ./enable_localaccount.sh USERNAME
この行は本来非推奨なのだけれど、USERNAMEで chromium osにログインできるようにするため処理。
これをしておかないと、chromium osgmailアカウントでログインするため、ネットワークにつながらないときにログインできない。後述する、EeePCなどの実機に入れるところで必要になる


set_shared_user_password は root パスワードのようなものを設定するものと思っていてよさそう。
なので、これが勝手に設定されているgdgt とかの野良パッケージは危ないのでは?とかいわれてるんだろうなー。

これでビルド完了。~/chromiumos/src/build/image/SUBDIR にイメージができあがる。
vmware 用のイメージに変換するときは

./image_to_vmware.sh --from=~/chromiumos/src/build/images/SUBDIR

さらに、インストール用USBメモリも作ることにした。4GB以上のUSBメモリが必要だ。

./image_to_usb.sh --from=~/chromiumos/src/build/images/SUBDIR --to=/dev/USBKEYDEV

USBKEYDEVは普通はsdb になる。USBメモリがどのブロックデバイスとして認識されたかは、mount df などコマンドで確認すればよい。USBKEYDEVはsdb1などのパーティションではなく、デバイス全体を与えるので sdb と与えればよい。

usbブートは何度も痛い目にあってるから正直心配なのだが、うまくいくかな。
ばっちり usbブートに成功。


起動に成功する EeePC 901-16G

つづいて、本体のSSDにインストール

  • Ctrl+Alt+T でTerminalを立ち上げて
  • /usr/sbin/chromeos-install

これで、本体のSSDから起動できるようになる。

はまりポイント

  • shared user パスワードは設定しておくこと。でないと sudo できない。
  • gmail以外のアカウントでもログインできるようにしておくこと。ネットワークにつなげられなくても動作確認はできる。