明日、TV JACK 1000のライブだけど雨降るとヤだな

nogajun
nogajun

_

今は晴れているんだけどな。

_ Debian Sid上でChromium OSをビルドしてみた

昨日の夜中、突発的にDebian Sid上でChromium OS(オープンソース版Chrome OS)をビルドしたくなったので作業の記録を残しておきます。

ビルドプラットフォームとしてubuntu(Hardy 8.04以上、Karmic 9.10推奨)となっていますが、ビルドでubuntuに依存したの部分はなかったので、ひっかかることはないと思います。 ビルドの手順は Getting and Building a Chromium-Based OS (The Chromium Projects)に書いてある通りに進めました。

ビルド準備

作業ディレクトリ作る
$ mkdir chromiumos
$ cd chromiumos
パッケージのインストール

ビルドに必要なパッケージをインストールします。gitとQEMUは必須なのでインストールします。

$ sudo aptitude install git-core qemu

他にChromiumをビルドするためのパッケージもいれておきます。

$ sudo aptitude install subversion pkg-config python perl g++ g++-multilib bison flex gperf libnss3-dev libgtk2.0-dev libnspr4-0d libasound2-dev libnspr4-dev msttcorefonts libgconf2-dev libcairo2-dev libdbus-1-dev
depot_toolsのインストール

gitリポジトリからChromium OSを持ってくるために必要なgclientスクリプトが、depot_toolsというスクリプト集に収められているのでダウンロードします。

Subversionでチェックアウト
$ svn co http://src.chromium.org/svn/trunk/tools/depot_tools
gclientにパスを通す
$ export PATH=`pwd`/depot_tools:"$PATH"

ChromiumOSのソースをダウンロードする

ソースコードをダウンロードするにはtarボールをダウンロードする方法とgitリポジトリからダウンロードの二つの方法がありますが、ここではgitからダウンロードしました。

$ gclient config http://src.chromium.org/git/chromiumos.git
$ gclient sync

リポジトリから持ってくるのはとても時間がかかるので、とりあえず放置して別の事をしてるといいでしょう。

ChromiumOSのビルド

ビルド環境のセットアップに書いてある、シンボリックリンクを貼るのはオプションなので飛ばしました。 Chromium Browserのソースリポジトリがあってビルドする場合は、Build Instructionを参考にシンボリックリンクを貼ります。

ローカルリポジトリの作成
$ cd chromiumos.git/src/scripts/
$ ./make_local_repo.sh

make_local_repo.shを実行すると、debootstrapでubuntuのパッケージを取ってきたりしているみたいです。 これも時間がかかります。

ビルド環境の作成

書いてある通りにmake_chroot.shを実行します。

$ ./make_chroot.sh

Processing triggers for initramfs-tools ...
Processing triggers for python-support ...
All set up.  To enter the chroot, run:
    (作業ディレクトリ)/chromiumos.git/src/scripts/enter_chroot.sh

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:
    ./make_chroot.sh --delete

chroot環境に入るにはenter_chroot.shを実行。 chroot環境を消すときは rm -rf は使わず、削除スクリプト ./make_chroot.sh --delete を使わないといけないとのこと。

Chromium(ブラウザ)の準備

ここでChromium Browserのビルドとなるけど、ビルドされたものを利用してもいいそうなので、そうすることにします。

ダウンロードしたzipファイルを _(作業用ディレクトリ)/chromiumos/src/build/x86/localassets/chrome-chromeos.zip という名前で置きます。

$ cd ~/(作業ディレクトリ)
$ mkdir -p chromiumos.git/src/build/x86/local_assets/
$ cd chromiumos.git/src/build/x86/local_assets/
$ wget http://build.chromium.org/buildbot/archives/chromium-chromiumos-r32516.zip
$ mv chromium-chromiumos-r32516.zip chrome-chromeos.zip

ビルド環境にchrootで入る

$ cd (作業ディレクトリ)/chromiumos.git/src/scripts/
$ ./enter_chroot.sh
ローカルユーザーアカウントを有効にする

ChromeOSのログインアカウントは、Googleのアカウントですが、開発するにはローカルでログインできた方が都合がいいのでローカルユーザーを追加しました。 名前はchromiumosとしてみました。

(chroot):~/trunk/src/scripts$ ( cd ../platform/pam_google && ./enable_localaccount.sh chromiumos )
Enabling local account.  Remove chromeos_pam_localaccount.h to disable.
(chroot):~/trunk/src/scripts$
共有ユーザーパスワードを設定する

ローカルユーザーのパスワードを設定します。パスワードもchromiumosにしました。

(chroot):~/trunk/src/scripts$ ./set_shared_user_password.sh
Enter password for shared user account: chromiumos
Shared user password set in /home/hoge/trunk/src/scripts/shared_user_passwd.txt

パッケージとイメージのビルド

パッケージとイメージのビルドですが、 _Build the packages (note you can use buildall.sh to run all these steps together) と書いてあるので、 _buildall.sh を見るとパッケージのビルドとテスト、イメージのビルドとテストを連続して実行してくれるそうなので、こちらを使うことにします。

(chroot):~/trunk/src/scripts$ ./build_all.sh

ビルド途中で寝てしまったので、どれだけ時間がかかるのか計っていませんが、かなり時間がかかると思います。

イメージの確認

ビルドできたらイメージの確認をしろということなのでします。

~/trunk/src/build/images/999.999.33109.163647-a1 にイメージがあるので

(chroot):~/trunk/src/scripts$ cd ~/trunk/src/build/images/999.999.33109.163647-a1

(chroot):~/trunk/src/build/images/999.999.33109.163647-a1$ ls -lah
total 793M
drwxr-xr-x 3 jun  eng   224 Nov 27 16:41 .
drwxr-xr-x 3 jun  eng    88 Nov 27 16:36 ..
-rw-r--r-- 1 jun  eng   512 Nov 27 16:41 mbr.image
-rw-r--r-- 1 root root  42K Nov 27 16:40 package_list_installed.txt
-rw-r--r-- 1 root root  42K Nov 27 16:41 package_list_pruned.txt
drwxr-xr-x 2 jun  eng    48 Nov 27 16:36 rootfs
-rw-r--r-- 1 jun  eng  950M Nov 27 16:36 rootfs.image

システムだけだと950MBなんですね。

イメージをマウントして、できたイメージの中にchrootで入ります。

(chroot):~/trunk/src/build/images/999.999.33109.163647-a1$ sudo mount -o loop rootfs.image rootfs
(chroot):~/trunk/src/build/images/999.999.33109.163647-a1$ sudo chroot rootfs

インストールされているパッケージを見ました。

$ dpkg -l

ii  chromeos-acpi          0.1                    chromeos acpi scripts
ii  chromeos-assets        0.3                    Chrome OS platform assets
ii  chromeos-chrome        0.1                    chromeos chrome
ii  chromeos-connman       0.3                    connman
ii  chromeos-cryptohome    0.1                    Helper scripts which smooth the integration of
ii  chromeos-init          0.3                    Chrome OS init scripts
ii  chromeos-installer     0.1                    Chrome OS installer
ii  chromeos-libcros       0.1                    Chrome OS plug-in library for Chrome
ii  chromeos-login         0.4                    Chrome OS login manager
ii  chromeos-monitor-recon 0.1                    Small module that will reconfigure an external monitor to th
ii  chromeos-pam-google    0.10                   Linux-PAM module to authenticate against Google
ii  chromeos-ply-image     0.1                    Chrome OS boot splash image loader.
ii  chromeos-screenlocker  1.0-1                  Screen locker configuration for Chrome OS.  Includes custom
ii  chromeos-wm            0.4                    Chrome OS window manager
ii  chromeos-wpasupplicant 0.1                    wpasupplicant

Chrome関係のパッケージですね。initとかloginとかpamとか面白いそうなものがあったり、Window Managerがオリジナルのものだったり興味深いですね。

ii  anthy                  9100h-0ubuntu1         input method for Japanese - backend, dictionary and utility

ii  ibus                   1.2.0.20090927-1~ppa1  New input method framework using dbus
ii  ibus-anthy             1.2.0.20090813-2       anthy engine for IBus
ii  ibus-chewing           1.2.0.20090818-2       chewing input engine for IBus
ii  ibus-gtk               1.2.0.20090927-1~ppa1  New input method framework using dbus
ii  ifupdown               0.6.8ubuntu19          high level tools to configure network interfaces
ii  im-switch              1.16ubuntu1            Input method switch framework

あれ? iBusとanthyが入ってる? Chrome OSは日本語に対応していないというけれど、Language Packが入ってないので、入れれば問題解決するんじゃない? と、いじりがいありそうと思ったところで無事できているようなのでexitで抜けます。

$ exit
(chroot):~/trunk/src/scripts$ sudo umount rootfs

イメージのチェックが終わったので、スクリプトディレクトリに戻ります。

(chroot):~/trunk/src/scripts$ cd ~/trunk/src/scripts

USBメモリにイメージを書き込む

できあがったイメージをUSBメモリに書き込みます。といいたいのですが、今回は手元にSDカードがあったのでSDカードに書き込みました。

今までビルドのためにchroot環境で作業をしていましたが、注意書きに Do this outside the chroot environment. と書いてあるのでchroot環境から抜けます。

(chroot):~/trunk/src/scripts$ exit
$ pwd
(作業ディレクトリ)/chromiumos.git/src/scripts

元の環境に戻ったらfdiskでSDカードのデバイスを調べます。

$ sudo /sbin/fdisk -l

で見るとSDカードが/dev/sdbにあることがわかったので

$ sudo ./image_to_usb.sh --from=../build/images/999.999.33109.163647-a1/ --to=/dev/sdb

という感じで書き込みました.

VMwareイメージを作る

SDカードの書き込みにはroot権限が必要なのでsudoをつけましたが、VMwareイメージ作成は必要ないだろうと思ってsudoなしで実行すると

$ ./image_to_vmware.sh --from=../build/images/999.999.33109.163647-a1/ --to=../build/images/999.999.33109.163647-a1/ide.vmdk
1+0 records in
1+0 records out
1 byte (1 B) copied, 0.00010848 s, 9.2 kB/s
1+0 records in
1+0 records out
1 byte (1 B) copied, 0.0001476 s, 6.8 kB/s
./image_to_vmware.sh: line 43: mkfs.ext3: コマンドが見つかりません

あら? mkfs.ext3は/sbin/mkfs.ext3なので通常、ユーザーはパスが通ってないですね。 ということで _image_tovmware.sh の該当個所をフルパスに書き換えて sudo をつけてもう一度。

*** image_to_vmware.sh.orig     2009-11-27 23:22:10.000000000 +0900
--- image_to_vmware.sh  2009-11-28 07:25:39.000000000 +0900
***************
*** 40,46 ****
      seek=$(( $PART_SIZE - 1 ))
  dd if=/dev/zero of="${FLAGS_from}/state.image" bs=1 count=1 \
      seek=$(( $PART_SIZE - 1 ))

! mkfs.ext3 -F -L C-STATE "${FLAGS_from}/state.image"

  # Copy MBR and rootfs to output image
  qemu-img convert -f raw \
--- 40,46 ----
      seek=$(( $PART_SIZE - 1 ))
  dd if=/dev/zero of="${FLAGS_from}/state.image" bs=1 count=1 \
      seek=$(( $PART_SIZE - 1 ))

! /sbin/mkfs.ext3 -F -L C-STATE "${FLAGS_from}/state.image"

  # Copy MBR and rootfs to output image
  qemu-img convert -f raw \

$ sudo ./image_to_vmware.sh --from=../build/images/999.999.33109.163647-a1/ --to=../build/images/999.999.33109.163647-a1/ide.vmdk

無事終了。VMwareイメージはrawイメージ作成後qemu-imgを使ってVMware形式に変換しているだけなので、ちょっと変えればVirtualbox用やKVM用イメージも作れそうです。

eeePC 900Aで起動してみる

eeePC 900Aで起動したところ

コールドブートで20秒ほどで起動しました。 以前Bit Torrentを使ってダウンロードしたイメージを使って試していたので感動はないけれど、こんなものでしょうか。 ベースがubuntu 9.10なので余裕で無線LANも認識。

インストールしてみる

eeePC 900AはテストマシンなのでSSDにインストールしてみました。

ログイン後 Ctrl+Alt+T でターミナルを開き、 /usr/sbin/chromeos-install を実行するとインストールできます。

$ /usr/sbin/chromeos-install
Using source USB device with label: C-ROOT
This will install from '/dev/sdb' to '/dev/sda'. If you are sure this is
what you want then feel free to enter the root password to proceed.
[sudo] password for chronos: (ビルド時に設定したパスワードを入れる)

(ddで書き込んだりブートローダーを書き込んだり処理するので待つ)

Installation to '/dev/sda' complete.
Please shutdown, remove the USB device, cross your fingers, and reboot.

書き込みが終わったら再起動します。 ちなみにChromiumOSのシャットダウンは電源ボタンです。家電感覚ですね。 (といっても最近のOSは電源ボタンを押すとシャットダウン処理が走るようになってるので、普通といえば普通なんですが)

eeePCのSSDから起動する

初回起動時はBIOSから起動するので、SDカードからの起動と変わらない起動時間でしたが、2回目からBIOSとブートローダーを飛ばして起動するので7〜8秒で起動します。これは感動しますね。

BIOSとブートローダーを飛ばして再起動というと、kexec使ってる? カーネルの設定/boot/config-2.6.31.4-chromeos-intel-menlowを見ると

CONFIG_KEXEC=y

となってるので、おそらくそうだと思います。

ブートローダーはgrubでもliloでもなくext2/3用SyslinuxのEXTLINUXを使ってます。 雰囲気的にはLiveシステムっぽいです。

iBusとAnthyについて追記

@nogajun blogのIBusの件ですが、ctrl-alt-tでターミナルを開いて、ibus-daemon& を起動し、ibus-setupコマンドを起動しAnthyをAddしてやれば、Chrome内でctrl+spaceで日本語入力できるようになると思われます。ご参考まで

twitterで教えてもらったので試してみました。

  1. Ctrl+Alt+Tでターミナルに入る。
  2. ibus-daemon & でibus-daemonをバックグラウンドで起動。
  3. ibus-setup を起動して[Input Method]タブからAnthyを追加する。

とりあえずは、これで日本語入力することができますね。

佐藤さん、ありがとうございました。

_ リモートで差分バックアップにはrdiff-backupがよさげ

サーバーのバックアップを世代毎の差分バックアップを取りたくて、NFSでマウントしてpdumpfsを使うややこしい事をしてたけど、rdiff-backupならリモートで世代毎の差分バックアップが取れるそうな。 ググってみると、日本語の解説が結構ひっかかるということは、かなりポピュラーだった?

うわー、全然知らなかったよ。テストして使えそうなら変えよう。

_ 12月 12日 19日 オープンフォース Debian勉強会 徳島で、のがじゅんさんが話をするそうですよ

12月 12日 19日に、のがじゅんさんが「Debianと関西Debian勉強会」と「Debian Live」について、話をするそうですよ。 ということなので徳島周辺の人は遊びに来てください。関西の人も明石から高速バスですぐなので来てください。

日にち間違えてました。正しくは12月19日(土)です。