Chromium OS ThinkPad X240

Chromebook自作計画 ― ChromiumOSをビルドしてみた

2015年11月14日

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) コマンドを意味する。

Wikipedia

コマンドを実行すると、シェルのプロンプトが「(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_build

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化してみようと思います。

-Chromium OS, ThinkPad X240

Copyright© Chrome速報 , 2022 All Rights Reserved.