Chromebook flipを買うつもりがThinkPad X240を買って以来、X240にインストールしたUbuntuで遊んでいるのですが、せっかくUbuntu環境があるので、ChromiumOSを自分でビルドしてみることにしました。
といっても、The Chromium Projectのウェブサイトにある「Chromium OS Developer Guide」に書いてある内容をなぞっただけです。
ビルド用マシンの前提条件
Chromium OS Developer GuideにはビルドするPCの前提条件が掲載されています。
- Ubuntu Linux (version 14.04 - Trusty)
- 64bit system
- 管理者権限
- 4GB RAM(8GBがベター)
X240にインストールしたUbuntuのバージョンが、14.04で丁度良かった。
あと、ビルドに際してChromiumOSのソースコードやSDKなど各種ツールをインストールするので約40GBの記憶容量が必要です。10GBくらいしか使っていなかったSSDがビルド後50GB超えてるので、最低40GBは必要だと思います。
ビルド環境の構築
今回は、Homeディレクトリの下にビルド環境を作っていきます。(Chromium OS Developer Guideの手順に従っただけですが、上手くいかなかったところは修正しています。)
(1) git, subversion, curl のインストール
[Ctrl]+[Alt]+[T]キーでターミナルを起動し、次のコマンドを入力します。
username@pcname: ~$ sudo apt-get install
git-core gitk git-gui subversion curl
(2) depot_tools のインストール
続いてdepot_toolsをgitからインストール。Chromium OSのソースコードの取得/同期に際して、複数のレポジトリ(データ貯蔵庫)からのダウンロードを便利にしてくれる「repo」を使えるようにするためのツールです。
username@pcname: ~$ git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
インストールが済むと、Homeディレクトリの下に「depot_tools」というディレクトリが作成され、depot_toolsの実行環境が作られます。
次に「~/.bashrc」ファイルを開いてパスを通します。
「~/.bashrc」ファイルを開いてターミナル上で編集するためには、vimがインストールされている必要があります。もし、vimをインストールしていないのであれば、ファイルを開く前に、下のコマンドでインストールします。
username@pcname: ~$ sudo apt-get install vim
vimがインストール済みの状態で「~/.bashrc」ファイルを開きます。
username@pcname: ~$ vi ~/.bashrc
ファイルを開いたら、最後行に移動し[o]キーで次行挿入し、次を追加します。
export PATH="$PATH":~/depot_tools
追加したら[ESC]キーで追加モードを終了します。「:w」と入力し[Enter]キーを押してファイルを保存したら、「:q」と入力し[Enter]キーを押して vim を終了します。
(参考サイト)Linuxコマンド集【vi】テキスト・ファイルを編集する
(3) sudoersのtty_ticketsオプションを無効化
ChromiumOSの開発ツール(cros_sdk)を正常に動作させるためにtty_ticketsのオプションを無効化します。
まず、tmpディレクトリに移動します。
username@pcname: ~$ cd ~/tmp
続いて以下のコマンドを実行します。
username@pcname:/tmp$ cat > ./sudo_editor <<EOF echo Defaults \!tty_tickets > \$1 # Entering your password in one shell affects all shells echo Defaults timestamp_timeout=180 >> \$1 # Time between re-requesting your password, in minutes EOF username@pcname:/tmp$ chmod +x ./sudo_editor username@pcname:/tmp$ sudo EDITOR=./sudo_editor visudo -f /etc/sudoers.d/relax_requirements
(4) gitの設定
続いて git の設定。メールアドレスとユーザー名を追加します。
username@pcname:/tmp$ cd username@pcname:~$ git config --global user.email "you@example.com" username@pcname:~$ git config --global user.name "Your Name"
(5) 64bitマシンかの確認
自分のマシンが64bitとわかっていれば特に必要ないと思いますが、Chromium OS Developer Guideで「ダブルチェック!!」と言われているので、次のコマンドを一応実行。
username@pcname:~$ uname -m
「x86_64」と表示されれば64bitマシンなのでOK。表示されなければ、ビルドを実行できません。
(6) ファイル作成時のパーミッションの設定
パーミッションの設定。管理者だけが読み書き、その他のユーザーは読み取りのみの設定にします。
username@pcname:~$ umask 022 username@pcname:~$ touch foo username@pcname:~$ ls -l foo -rw-r--r-- 1 user group 0 11月 14 22:00 foo
最後行が「-rw-r--r」となっていればOK。
ここまででChromiumOSのビルド実行環境の準備が完了です。長い!!
ChromiumOSのビルドの実行
いよいよChromiumOSをビルドしていきます。
(1) ソースコード保存用のディレクトリを作成
まず、ChromiumOSのソースコードを格納しておくディレクトリをHomeディレクトリの直下に作ります。
username@pcname:~$ mkdir -p chromiumos
(2) ソースコードの取得
まずChromiumOSディレクトリに移動します。
username@pcname:~$ cd chromiumos
移動したらソースコードを取得します。
username@pcname:~/chromiumos$ repo init -u https://chromium.googlesource.com/chromiumos/manifest.git --repo-url https://chromium.googlesource.com/external/repo.git
上のコマンドを実行して「repo has been initialized in /home/user/chromiumos」と表示されたら、続けて次のコマンドを実行します。
username@pcname:~/chromiumos$ repo sync
ソースコードの取得/同期にかなり時間を要します。完了すれば「Your sources have been sync’d successfully.」と表示されます。
僕の場合、一回途中でエラーになってしまったので、再度コマンドを実行しました。
(3) ChromiumOSのSDKの起動
ChromiumOSのSDKを起動します。
username@pcname:~/chromiumos$ cros_sdk
ChromiumOSのビルドはchrootした環境で行われます。chrootとは↓だそうです。
chrootとは、UNIXオペレーティングシステムにおいて、現在のプロセスとその子プロセス群に対してルートディレクトリを変更する操作である。ルートディレクトリを別のディレクトリに変更されたプロセスは、その範囲外のファイルにはアクセスできなくなるため、この操作をchroot監獄などとも呼ぶ。"chroot" は chroot(2) システムコールおよび chroot(8) コマンドを意味する。
コマンドを実行すると、シェルのプロンプトが「(cr) ((abcd0123...))username@pcname ~/trunk/src/scripts $」に変更されます。これ以降は、この環境下での作業となります。
(4) ターゲットアーキテクチャーの指定
続いてChromiumOSを利用したいPCのアーキテクチャーを指定します。今回は64bitマシンであるThinkPad X240(Celeron 2980U)で試したいの次のコマンドを実行。32bitマシンを指定する場合は、「amd64」の部分を「x86」とします。
(cr)((abcd0123...))username@pcname ~/trunk/src/scripts$ export BOARD=amd64-generic (cr)((abcd0123...))username@pcname ~/trunk/src/scripts$ ./setup_board --board=${BOARD}
完了すれば、「Done! The SYSROOT is: /build/amd64-generic」と表示されます。
(5) Chronos パスワードの設定
つづいて、ビルドしたChromiumOSでシェルを使う場合のパスワードを設定しておきます。ChromeOSではデベロッパーモードでのみ利用できるシェルですが、ChromiumOSの場合は鼻からデベロッパーモードです。
(cr)((abcd0123...))username@pcname ~/trunk/src/scripts$ ./set_shared_user_password.sh
コマンドを入力すると「Enter password for shared user account:」と返してくるので、パスワードを入力します。パスワードは表示されないので打ち間違いには気をつけましょう。パスワードを入力して[Enter]キーを押し、「Password set in /etc/shared_user_passwd.txt」と表示されれば設定完了です。
(6) ビルドの実行
やっとビルドの実行です。次のコマンドを実行します。
(cr)((abcd0123...))username@pcname ~/trunk/src/scripts$ ./build_packages --board=${BOARD}
コマンド入力後、CPU使用率が50%前後で推移します。
俺のX240が火を噴くぜ!!
Merge complete Done Builds complete INFO : Elapsed time (build_packages): 90m49s Done
「Done」って表示されたら完了です。結局90分かかりました。
(7) ディスクイメージの作成
ビルドできたら、次はディスクイメージを作成します。次のコマンドを実行します。
(cr)((abcd0123...))username@pcname ~/trunk/src/scripts$ ./build_image --board=${BOARD} --noenable_rootfs_verification dev
これもCPU使用率50%前後で数十分間かかります。20分くらいかかりました。
ChromiumOSを起動するためには、作成したディスクイメージをUSBメモリに書き込んだりする必要があります。ディスクイメージ作成完了時のシェルに「USBメモリへの書き込み」や「仮想マシン用のディスクイメージ作成」のコマンドが表示されますので、そのまま打ち込めばOKです。
USBメモリへの書き込み
(cr)((abcd0123...))username@pcname ~/trunk/src/scripts$ cros flash usb:// ../build/images/amd64-generic/R48-7619.0.2015_11_14_0905-a1/chromiumos_image.bin
仮想マシン用イメージの作成
(cr)((abcd0123...))username@pcname ~/trunk/src/scripts$ ./image_to_vm.sh --from=../build/images/amd64-generic/R48-7619.0.2015_11_14_0905-a1 --borad=amd64-generic
まとめ
長かった…
OSのビルドってこんなに時間がかかるんですね。
さて、次回はいよいよUSBメモリにイメージを書き出し、X240でUSBブートを試してみます。すべてのデバイスが上手く動作すれば、ThinkPad X240をChromebook化してみようと思います。