忍者ブログ
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
2024/04/29 (Mon) 14:10
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。



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


Comment
Name
Title
Mail
URL
Comment
Pass   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
すごい!
ryu 2014/03/23(Sun)18:07:05 編集
すごい!私と同じことを考えてた方がいました!
自分もvaio pにインストールしようと悪戦苦闘しまくったので、参考になりました。

自分のアプローチはもっと原始的で、usbイメージとmicroSDカードを併用して、
①USBでまずブートする
②USB抜いて、microSDに書き込んだイメージをSD変換アダプターに入れて、SDカードからブートする
でした。
なるほどEscキーがポイントだったんですね。
でも、HDDにインストールできないのは一緒です。PATA関連は自分ではどうにも、、、。
出来たら方法教わりたいです。
コメントありがとうございます。
zui 2014/03/23(Sun)20:12:29 編集
コメントありがとうございます。
お役にたてたようでよかったです。
Chromium OSとVAIO Type Pの記事は2、3年前のものが多くて最近はだれもやっていないのかなと思っていたので、同じようなことをされていた方がいてちょっとほっとしています。

とりあえずHDDを認識させることはできました。近いうちに手順をまとめてブログにアップする予定です。
まだまだですね。。。
zui 2014/03/23(Sun)20:52:43 編集
HDDにインストールすることはできたんですが、HDDからのChromium OSのブートに失敗してしまいました。もう少し調べてみる必要がありそうです。
早速のレスありがとうございます!
ryu 2014/03/23(Sun)23:27:33 編集
早速のレスありがとうございます!
そうなんですよね~。記事古かったりするんですよ。
この案件以外と需要あるはずなんです。
vaiopは何いれても遅いんですが、多分HDD(SSD)インストールのchromeosは超快適なはずなんです。
で、自分の経験でlinuxのイメージコピー(表現が正しいか解りませんが)でHDDインストール後ですが、bootしませんでした。
もしかしたら、パーテーション操作ソフトでbootのターゲットデスクをアクティブ化するのではダメですかね?自分は試す前に削除ちゃったんで試してません。詳しい方からすると意味不明な文章かもしれません。ごめんなさい。
とりあえずboot成功しました
zui 2014/03/24(Mon)00:05:20 編集
リプライありがとうございます。
とりあえずbootは成功しました。
PATAのドライバをモジュールにするのではなくカーネルにリンクする必要がありました。詳しくはブログのほうで書く予定です。
ただ、まだキーレスポンスは微妙にもっさり感がありますね。。。
他力本願でごめんなさい。
ryu 2014/03/24(Mon)01:26:41 編集
すごいですね!
ブログ期待いてます!
ありがとうございます。
削除しました
未記入 2015/10/04(Sun)12:12:35 編集
なし
Best Apps for Android Mobile Phone
I think this is between the so a great deal important details for me.And i’m pleased learning your report. Thanks in guidance of sharing this kind of a nice considered, piece of composing is awesome, thats why i have read it completely,if you want to find more best android apps and download android apps for free ,be sure to click on below.
無題
custom website design URL 2017/11/20(Mon)21:22:28 編集
Thanks for finally writing about >PCメモ Chromium OSのビルド環境を作る <Loved it!
  HOME   23  22  21  20  19  18  17  15  14  13  12 
プロフィール
HN:
zui
性別:
非公開
PR
忍者カウンター
忍者ブログ [PR]