忍者ブログ
PCメモ
PC関係のメモ、気付いたこと。 simhとChromium OSをいじって遊んでいます。 Chromium OSのカスタムビルドを配布しています。(http://chromiumosde.gozaru.jp) twitter: @zui22904336 PGP fingerprint: 45FC 0E47 A68A FA06 02FE 2BEF B72C C6E6 F9FF 1C19
Admin / Write
2014/03/19 (Wed) 22:18
'15/03/21 一部古くなっていた部分を修正しました。

前回VAIO Type PのハードディスクにChromium OSを入れようとして挫折しましたが、なんかもやもやするので結局自分でビルドしてみることにしました。

今回はとりあえずビルドできるようにするところまで行います。
 
Chromium OSのビルド方法はChromium OSの公式サイトの"Chromium OS Developer Guide"に書いてあったので、そのとおりにやってみます。
ガイドにはソースを本家リポジトリにコミットするために必要な準備作業がいくつか出てきますが、そんなつもりはないのでその辺の操作は飛ばしてとりあえずビルドできる環境を作ります。

ビルド用仮想マシンの作成


ビルドに使うOSは64bit版Ubuntu 12.04 14.04 LTSが良いとされています('15.04.25 追記:公式ページで推奨のビルド環境用OSが14.04に変わっていました。)。でも、残念ながら今使っているLinuxはCentOSでUbuntuではありません。それ専用のマシンは用意できないので、今回はCentOSに入れてあるVirtualBox上に環境を作ります。

Ubuntuのインストールについてはここでは特に触れません。注意すべきなのは、64bit版にすること、メモリは4GB以上、ディスク容量は最低でも40GBは必要です(最初30GBでやっていてあふれました)。40GBでもいろいろ作業しているうちに足りなくなるかもしれませんのでもう少し多めにしたほうがいいかもしれません。
また、最終的にイメージをUSBメモリに書きだしますので、USBメモリにアクセスできるようにしておく必要があります。
あと、ビルドに使うユーザ名は、ビルドしたChromium OSのビルド情報などに表示されますので、あまり変な名前は付けないほうがいいかもしれませんねw
 
今回は、ビルド環境をユーザのホームディレクトリの下に作っていきます。

Subversion, Git, Curlのインストール


ビルド環境用のUbuntuを起動し、ターミナルから以下のコマンドを実行します。

user@Ubuntu:~$ sudo apt-get install git-core gitk git-gui subversion curl

depot_toolsのインストール


続けてdepot_toolsのインストールを行います。どうやらChromium OSのソースリポジトリにアクセスするために使われるツールのようです。 以下のコマンドを実行します。

user@Ubuntu:~$ git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git

これでホームディレクトリの下にdepot_toolsというディレクトリが作成され、そこにdepot_toolの実行環境が作られますので、~/.bashrcを編集してdepot_toolsへのパスを追加します。

user@Ubuntu:~$ vi .bachrc
(略)
export PATH="$PATH":~/depot_tools ←この行を追加


sudoersのtty_ticketsオプションを無効にする


Chromium OSのビルドツールが正しく動作するためにsudoersのオプションtty_ticketsを無効にします。以下のコマンドを実行します。

user@Ubuntu:~$ cd /tmp
user@Ubuntu:/tmp$ cat > ./sudo_editor <<EOF
#!/bin/sh
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
(Ctrl-D)
user@Ubuntu:/tmp$ chmod +x ./sudo_editor 
user@Ubuntu:/tmp$ sudo EDITOR=./sudo_editor visudo -f /etc/sudoers.d/relax_requirements


gitの設定


以下のコマンドを実行します。メールアドレスと名前はそれぞれ適切なものに置き換えます。

user@Ubuntu:/tmp$ cd
user@Ubuntu:~$ git config --global user.email "you@example.com"
user@Ubuntu:~$ git config --global user.name "Your Name"

64ビットOSを使っているか確認する。


以下のコマンドを実行してx86_64と表示されればOK。

user@Ubuntu:~$ uname -m
x86_64

ファイル作成時のパーミッションの設定


以下のコマンドを実行してオーナーだけ読み書き、それ以外は読み取りになるようにします。

user@Ubuntu:~$ umask 022
user@Ubuntu:~$ touch foo
user@Ubuntu:~$ ls -l foo
-rw-r--r-- 1 user user 0  3月  19 21:47 foo ← -rw-r--r--で始まっていればOK

これで準備は終わりです。ソースのダウンロードを始めます。

ソースコード用ディレクトリの作成


ソースコードを置くディレクトリを作成します。今回はユーザのホームディレクトリの下にchromiumosというディレクトリを作ります。

user@Ubuntu:~$ mkdir -p chromiumos

ガイドによると、ソース置き場はパフォーマンス上の問題からNFS上に置くな、ということです。当初VMにあまりディスク容量をさきたくなかったのでソースはホストOS側においてcifsかNFSでマウントしようかと思っていたのですが、この記述を見てやめました。

ソースの取得


いよいよソースを取り出します。以下のコマンドを実行します。

['14/4/13追記]
以下の方法で取り出されるのは現時点での最新の開発版ソースになります。Chromebookで使われている安定版のソースを取り出したいときは以下のrepo initに-bオプションでチェックアウトするブランチの名前を指定します。詳しくはこちらの記事を参照してください。

user@Ubuntu:~$ cd chromiumos
user@Ubuntu:~/chromiumos$ repo init -u https://chromium.googlesource.com/chromiumos/manifest.git --repo-url https://chromium.googlesource.com/external/repo.git
Get https://chromium.googlesource.com/external/repo.git
(略)
repo has been initialized in /home/user/chromiumos
user@Ubuntu:~/chromiumos$ repo sync
・・・ひたすら待つ
Syncing work tree: 100% (159/159), done.  

Your sources have been sync'd successfully.
user@Ubuntu:~/chromiumos$

repoコマンドは上でインストールしたdepot_toolsに含まれているツールでChromium OSのソースリポジトリへのアクセスを行うコマンドです。repo syncを実行するとソースのチェックアウトが始まるのでひたすら待ちます。待ち時間はかなりあります。こちらの環境では4~50分かかりました。
 

Chromium OSのSDKを起動する

いよいよChromium OSをビルドします。以下のコマンドでsdkを起動します。

user@Ubuntu:~/chromiumos$ cros_sdk
Attempting download: https://commondatastorage.googleapis.com/chromiumos-sdk/cros-sdk-2015.01.11.080752.tar.xz
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  415M  100  415M    0     0  15.4M      0  0:00:26  0:00:26 --:--:-- 15.6M

(略)
cros_sdk:make_chroot: All set up.  To enter the chroot, run:
$ cros_sdk --enter 

CAUTION: Do *NOT* rm -rf the chroot directory; if there are stale bind
mounts you may end up deleting your source tree too.  To unmount and
delete the chroot cleanly, use:
$ cros_sdk --delete 

(cr) ((7f6126a...)) user@Ubuntu ~/trunk/src/scripts $ 


Chromium OSのビルドはchrootを使って外部から隔離された環境で行われます。chroot後は~/chromiumos/chrootが新しいルートとなり、この下にChromium OSビルド専用の/usr/binなどが準備されます。これにより、マシンの環境に左右されずに同等のビルド結果が得られるようにしているようです。sdkの初回起動時は、このビルド環境用のバイナリのダウンロードが行われます。ダウンロードが終わるとシェルのプロンプトが(cr)で始まるものに変わり、カレントディレクトリも~/trunk/src/scriptsに変わります。メッセージにTo enter the chroot,~とか出ていますが、この状態ですでにchrootした環境に移っています。以降はこの環境で作業をしていきます。  

ターゲットアーキテクチャの指定


続いて、ビルドのターゲットとするアーキテクチャを指定します。いずれはVAIO Type Pで動かしたいので、今回はx86をターゲットにします。以下のように指定します。

(cr) ((7f6126a...)) user@Ubuntu ~/trunk/src/scripts $ export BOARD=x86-generic
(cr) ((7f6126a...)) user@Ubuntu ~/trunk/src/scripts $ ./setup_board --board=${BOARD}
(略)
Done!
The SYSROOT is: /build/x86-generic
(cr) ((7f6126a...)) user@Ubuntu ~/trunk/src/scripts $ 

Chromium OSのSDKでは、ターゲットアーキテクチャごとにビルドの設定をまとめたものを「オーバレイ」と呼んでいて、各種ビルドツールの--boardオプションでこのオーバレイの名前を指定します。あらかじめこの名前を環境変数BOARDに設定しているわけです。
このオーバレイの実体は~/trunk/src/overlaysの下に"overlay-オーバレイ名"という名前でおいてあります。

chronosパスワードの設定


続けて、これからビルドするChromium OSでシェルを使う際のアカウントとなるchronosのパスワードを指定します。

(cr) ((7f6126a...)) user@Ubuntu ~/trunk/src/scripts $ ./set_shared_user_password.sh
Enter password for shared user account: ←任意のパスワードを入力
Password set in /etc/shared_user_passwd.txt
(cr) ((7f6126a...)) user@Ubuntu ~/trunk/src/scripts $

ビルド実行

いよいよビルドします。以下のコマンドを実行します。

(cr) ((7f6126a...)) user@Ubuntu ~/trunk/src/scripts $ ./build_packages --board=${BOARD}
ChromeOS version information:
    CHROME_BRANCH=35
    CHROME_VERSION=
    CHROMEOS_VERSION_STRING=5660.0.2014_03_19_2334
    CHROME_BASE=
INFO    : Elapsed time (run_chroot_version_hooks): 0m0s
INFO    : Updating chroot
INFO    : Clearing shadow utils lockfiles under /
・・・
ひたすら待つ
Merge complete
Done
Builds complete
INFO    : Elapsed time (build_packages): 42m14s
Done
(cr) ((7f6126a...)) user@Ubuntu ~/trunk/src/scripts $ 

ビルドもかなり時間がかかります。上にもあるようにこちらの環境では42分かかっています。

ディスクイメージの作成


ビルドが終わったらディスクイメージを作成します。これまた時間がかかります。

(cr) ((7f6126a...)) user@Ubuntu ~/trunk/src/scripts $ ./build_image --board=${BOARD} --noenable_rootfs_verification dev
ChromeOS version information:
    CHROME_BRANCH=35
    CHROME_VERSION=
    CHROMEOS_VERSION_STRING=5660.0.2014_03_20_0029
    CHROME_BASE=
INFO    : The following images will be built  chromiumos_image.bin.
INFO    : Clearing shadow utils lockfiles under /build/x86-generic
・・・ひたすら待つ

--noenable_rootfs_verification オプションはChromium OSのセキュリティ関連のオプションでverified bootという機構を無効にします。verified bootはブート時にルートパーティションの内容をチェックして不正な修正がくわえられていたらブートを中断してリカバリモードに落ちる、というような仕組みのようで(Chromium OSではなく)Google Chrome OSの売りの一つです。

"Chromium OS FAQ"の"What's the difference between Chromium OS and Google Chrome OS?"を読むと、verified bootは専用のファームウェアの使用が前提で、Chromebookでは有効でもChromium OSでは機能しない、といった記述があるようです。Chromium OSでこのオプションを外すとどうなるのか、多少でもセキュアになるんでしょうか。まだよくわかりません。

作成したディスクイメージは以下のコマンドでマウントして中身を見ることができます。

(cr) ((7f6126a...)) user@Ubuntu ~/trunk/src/scripts $ ./mount_gpt_image.sh --board=${BOARD} -f $(./get_latest_image.sh --board=${BOARD})
  

マウント先はルートパーティションが/tmp/m、STATEパーティションが/tmp/sになります。
不要になったら以下のコマンドでアンマウントします。

(cr) ((7f6126a...)) user@Ubuntu ~/trunk/src/scripts $ ./mount_gpt_image.sh --board=${BOARD} -u 
  

出来上がったイメージはUSBメモリに書き込んだり、仮想マシン用のディスクイメージにしたりすることができます。とりあえず今回はUSBメモリに直接イメージを書き込んでみます。以下のコマンドを実行すると、USBメモリを探して直接そこに書きだしに行きます。

(cr) ((7f6126a...)) user@Ubuntu ~/trunk/src/scripts $ cros flash usb:// ${BOARD}/latest
19:26:55: INFO: Preparing to image the removable device 
Removable device(s) found. Please select/confirm to continue:
  [0]: USB DISK 2.0 3.6G (/dev/sdb)
Please choose an option [0-0]: 0
19:26:58: INFO: [21/Mar/2015:19:26:58] XBUDDY Using shadow config file stored at /mnt/host/source/src/platform/dev/shadow_xbuddy_config.ini
19:26:58: INFO: [21/Mar/2015:19:26:58] XBUDDY Linking to /mnt/host/source/devserver/static/x86-generic/R41-6680.77.2015_03_21_1849-a1 from /mnt/host/source/src/build/images/x86-generic/R41-6680.77.2015_03_21_1849-a1
19:26:58: INFO: [21/Mar/2015:19:26:58] XBUDDY Get artifact 'ANY' with board x86-generic and version latest'. Locally? True
19:26:58: INFO: [21/Mar/2015:19:26:58] XBUDDY Updating timestamp for x86-generic/R41-6680.77.2015_03_21_1849-a1
19:26:58: INFO: [21/Mar/2015:19:26:58] XBUDDY Returning path to payload: x86-generic/R41-6680.77.2015_03_21_1849-a1/chromiumos_image.bin
19:26:58: INFO: Using image x86-generic/R41-6680.77.2015_03_21_1849-a1/chromiumos_image.bin
19:26:58: INFO: RunCommand: sudo 'CROS_CACHEDIR=/mnt/host/source/.cache' -- /bin/bash -c 'pv -pretb /mnt/host/source/src/build/images/x86-generic/R41-6680.77.2015_03_21_1849-a1/chromiumos_image.bin | dd of=/dev/sdb bs=4M iflag=fullblock oflag=sync'
2.41GiB 0:16:50 [2.44MiB/s] [=========================================================================================>] 100%            
617+1 レコード入力
617+1 レコード出力
2589949952 バイト (2.6 GB) コピーされました、 1011.67 秒、 2.6 MB/秒
19:43:50: INFO: RunCommand: sudo 'CROS_CACHEDIR=/mnt/host/source/.cache' -- sync
19:43:52: INFO: Cros Flash completed successfully.


これで作成したUSBメモリを使ってVAIO Type PでChromium OSをブートしてみました。
今回はESCを押した後のbootコマンドで

chromeos-usb.A root=/dev/sda3 init=/sbin/init

とすることでブートできました。 Haxxeh版に比べるとかなりレスポンスが良くなっています。でも軽いとまでは言えない感じです。相変わらずHDDは認識しません。

とりあえず自分でビルドしてみた感触ですが、デフォルトでビルドするだけならば、思っていたよりは難しくないですね。ガイドの通りにやればとりあえずできました。ただ、ものがでかいだけに時間はかなりかかります。

いろいろいじって、VAIO Type Pでいい感じに動くようにもっていきたいのですが、果たしてうまくいくんだろうか。。。

とりあえず今回はここまで。

[関連記事]

[悲報] Chrome R44でffmpegsumoが消えた
Dev serverによるChromium OSのアップデート
Chromium OSにパッケージを追加する
最近のChromium OS R35がVAIO Type Pで動かない件への対策
安定版ソースを使ってChromium OSをビルドする
勝手ビルド版Chromium OSとGoogleドライブの連携
Chromium OSをKVMで動かす
勝手ビルド版Chromium OSをVirtualBoxで動くようにする
Chromium OSのカーネルをVAIO Type P向けに再構築する
Hexxeh版Chromium OSをVAIO Type Pにインストールしようとして挫折した話
VAIO Type PでChromium OSをUSBメモリからブートするときのメモ




ランキングに参加してみました。クリックしていただければ嬉しいです。

にほんブログ村 IT技術ブログ IT技術メモへ
にほんブログ村

パソコン ブログランキングへ

拍手[0回]

PR


2014/03/16 (Sun) 21:13
<'15/09/08追記>

VAIO Type Pで動作するChromium OSのカスタムビルドを公開しました。このビルドでは以下に書いたような問題は起きません。興味がおありでしたらお試しいただければと思います。


前回はVAIO Type PでUSBメモリからChromium OSを起動してみました。

今回はHDDにインストールしてみようとしてみたのですが、どうもHDDを認識してくれないっぽい。どうしてだろうと思っていろいろ調べたのですが、どうやらHexxeh版のLinuxカーネルにはPATAドライバが組み込まれていないようなのです。

以下がHexxeh版のLinuxカーネルのCONFIG内容の抜粋です。

$ grep "_PATA_" /mnt/boot/config-3.4.0 
# CONFIG_PATA_ALI is not set
# CONFIG_PATA_AMD is not set
# CONFIG_PATA_ARTOP is not set
# CONFIG_PATA_ATIIXP is not set
# CONFIG_PATA_ATP867X is not set
# CONFIG_PATA_CMD64X is not set
# CONFIG_PATA_CS5520 is not set
# CONFIG_PATA_CS5530 is not set
# CONFIG_PATA_CS5535 is not set
# CONFIG_PATA_CS5536 is not set
# CONFIG_PATA_CYPRESS is not set
# CONFIG_PATA_EFAR is not set
# CONFIG_PATA_HPT366 is not set
# CONFIG_PATA_HPT37X is not set
# CONFIG_PATA_HPT3X2N is not set
# CONFIG_PATA_HPT3X3 is not set
# CONFIG_PATA_IT8213 is not set
# CONFIG_PATA_IT821X is not set
# CONFIG_PATA_JMICRON is not set
# CONFIG_PATA_MARVELL is not set
# CONFIG_PATA_NETCELL is not set
# CONFIG_PATA_NINJA32 is not set
# CONFIG_PATA_NS87415 is not set
# CONFIG_PATA_OLDPIIX is not set
# CONFIG_PATA_OPTIDMA is not set
# CONFIG_PATA_PDC2027X is not set
# CONFIG_PATA_PDC_OLD is not set
# CONFIG_PATA_RADISYS is not set
# CONFIG_PATA_RDC is not set
# CONFIG_PATA_SC1200 is not set
# CONFIG_PATA_SCH is not set
# CONFIG_PATA_SERVERWORKS is not set
# CONFIG_PATA_SIL680 is not set
# CONFIG_PATA_SIS is not set
# CONFIG_PATA_TOSHIBA is not set
# CONFIG_PATA_TRIFLEX is not set
# CONFIG_PATA_VIA is not set
# CONFIG_PATA_WINBOND is not set
# CONFIG_PATA_CMD640_PCI is not set
# CONFIG_PATA_MPIIX is not set
# CONFIG_PATA_NS87410 is not set
# CONFIG_PATA_OPTI is not set
# CONFIG_PATA_PLATFORM is not set
# CONFIG_PATA_RZ1000 is not set
# CONFIG_PATA_ACPI is not set
# CONFIG_PATA_LEGACY is not set
ことごとく not setでした。。。

これはVAIO Type PのHDDにインストールしようと思ったら自分でChromium OSをビルドしないといけない、ということのようですね。う~ん、そこまでやるか、どうしようかな。。。
ちなみに、前回動かしたとき、描画処理がもっさりでしたが、カーネル自体にはGMA500のドライバが組み込まれているようです。

$ grep "_GMA" /mnt/boot/config-3.4.0
CONFIG_DRM_GMA500=y
CONFIG_DRM_GMA600=y
CONFIG_DRM_GMA3600=y

/var/log/messagesを見るとgma500を認識している形跡はあるのですが、でもなんか描画はすごく遅い感じです。
  
ということで、Chromium OSはいったん終わりかな。気が向いたら自分でビルドしてみるかもしれません。

[関連記事]

[悲報] Chrome R44でffmpegsumoが消えた
Dev serverによるChromium OSのアップデート
Chromium OSにパッケージを追加する
最近のChromium OS R35がVAIO Type Pで動かない件への対策
安定版ソースを使ってChromium OSをビルドする
勝手ビルド版Chromium OSとGoogleドライブの連携
Chromium OSをKVMで動かす
勝手ビルド版Chromium OSをVirtualBoxで動くようにする
Chromium OSのカーネルをVAIO Type P向けに再構築する
Chromium OSのビルド環境を作る
VAIO Type PでChromium OSをUSBメモリからブートするときのメモ




ランキングに参加してみました。クリックしていただければ嬉しいです。

にほんブログ村 IT技術ブログ IT技術メモへ
にほんブログ村

パソコン ブログランキングへ

拍手[0回]



2014/03/15 (Sat) 21:18
※15.08.14 追記:以下の記述は古いhexxeh版での話です。新しいビルドであればルートパーティションを装置名ではなくパーティションUUIDで指定しているため、以下のようにいちいちbootプロンプトでrootパラメータを指定しなくても起動します。

'15.09,08追記:VAIO Type Pで動作するChromium OSのカスタムビルドを公開しました。興味がおありでしたらお試しいただければと思います。


VAIO Type P(VGN-P61S)でUSBメモリからChromium OSをブートしようとしてはまったのでメモ。

ブート用USBメモリはLinuxで作成しています。

  1. 以下のURLからChromium OSのUSBメモリ用イメージファイルをダウンロードします。

    http://chromeos.hexxeh.net/

    こちらの"Nightly build links"のところにあるUSBのアイコンをクリックして
    ChromeOS-Vanilla-4028.0.2013_04_20_1810-r706c4144.zip
    をダウンロードします。
  2. ダウンロードしたファイルを解凍して、USBメモリに書き込みます。この例ではUSBメモリは/dev/sdjにつながっています。実際の環境に合わせて書き換えてください。

    linux$ unzip ChromeOS-Vanilla-4028.0.2013_04_20_1810-r706c4144.zip
    linux$ sudo dd if=ChromeOS-Vanilla-4028.0.2013_04_20_1810-r706c4144.img of=/dev/sdj
    
  3. できたUSBメモリをVAIOに差し込んで電源を入れます。。。と画面が真っ黒になったまま起動しません。ここではまりました。実際には以下の手順で作業する必要がありました。
  4. USBメモリを入れて電源を投入し、BIOS起動が終了してChromium OSの起動が始まるタイミングですかさずESCを押します。
  5. 以下のように表示されます。

     aborted
    boot:
  6. このboot: に続けて以下のコマンドを入力します。

    boot: chromeos-usb.A root=/dev/sda3


    "="が"^"キーになっているので注意です。
  7. これで無事USBから起動が始まりました。

スティックポインターも無線LANも問題なく使えます。ただ、キーレスポンスがすごく悪いです。描画も全体的にかなり重いです。
おそらく描画関係がVAIO Type Pに最適化されていないせいだと思いますが、このままではちょっと使えないかなという感じです。最適化する方法があるかどうか少し探してみるかな。

[関連記事]

[悲報] Chrome R44でffmpegsumoが消えた
Dev serverによるChromium OSのアップデート
Chromium OSにパッケージを追加する
最近のChromium OS R35がVAIO Type Pで動かない件への対策
安定版ソースを使ってChromium OSをビルドする
勝手ビルド版Chromium OSとGoogleドライブの連携
Chromium OSをKVMで動かす
勝手ビルド版Chromium OSをVirtualBoxで動くようにする
Chromium OSのカーネルをVAIO Type P向けに再構築する
Chromium OSのビルド環境を作る
Hexxeh版Chromium OSをVAIO Type Pにインストールしようとして挫折した話




ランキングに参加してみました。クリックしていただければ嬉しいです。

にほんブログ村 IT技術ブログ IT技術メモへ
にほんブログ村

パソコン ブログランキングへ

拍手[0回]



  HOME
プロフィール
HN:
zui
性別:
非公開
PR
忍者カウンター
忍者ブログ [PR]