OLPC XO-LiveCD 続き

http://d.hatena.ne.jp/korakurider/20080202/p1 の続きの雑多な話題です。

仮想環境での起動エラーとその解決

テストのため、配布されているBuild689ベースのLiveCDのISOファイルやそれをカスタマイズしてリマスタリングしたものを仮想環境で動かそうとしていたのですが、Sugarが立ち上がってNickと色の入力をした後にSugar(X)が落ちてしまったり、あるいは立ち上がってもActivityがちゃんと起動できないという現象に悩まされていました。ドキュメントには、各種の仮想環境での動作確認結果が示されているにもかかわらず、QEMUFedora上、Windows上)でそれらのエラーになり、解決の糸口がつかめないまま何日も時間を無駄にしてしまいました。QEMUの遅さも手伝ってすっかりやる気を失いかけていました。
今日、念のためと思い、VirtualBoxWindows上)で試してみました。やはり同様の現象となったのですが、この仮想マシンは比較的軽快に動くので、気をとりなおして調べてみました。
Sugarが落ちた直後に出たエラーメッセージは次のようなものでした。

** (sugar-shell:14311): CRITICAL **: 
_wrap_gst_mixer_list_tracks: assertion `GST_IS_MIXER (self->obj)' failed

GST_IS_MIXERでぐぐったところ、これはXOで使われている GStreamer関係のエラーであることがわかりました。そこで、QEMUで動かしていた時サウンドカードのエミュレーションが動いていないことから、Sugar起動前にエラーメッセージが出ていたことを思い出しました。VirtualBoxVMサウンドが無効になっていたのでこれを有効にしたところ、無事にSugarを起動してその中でActivityを起動できるようになりました。

サポートするビデオカード

ビデオカードがうまく動かない環境のことについて質問がありました。XO-LiveCDは、Knoppixのハードウェア認識モジュールを流用してはいますが、現在配布されているイメージはVESA互換のビデオカードしかサポートしていません。なのでまずその問題のマシンが何かを聞かないといけないですね。
またKnoppixのようにチートコードを入力するインターフェースも持っていないので、簡単には対処できないです。必要なスキルとやる気がある人なら、ハードウェア認識部分をカスタマイズしてリマスタリングすれば対応できるかもしれません。手っ取り早いのは仮想マシン上でLiveCDを動かすことだと思います。

LiveCDをビルドする手順の概要

gitでホストされているツールキットを使えば、配布されているext3イメージからLiveCDをビルドできます。ビルドは、大まかには次のような工程で行います:

  • マスターディレクトリ(通常 master-olpc/)以下に、LiveCDに含めるブートストラップ(grubカーネルなど)、config類、ハードウェア認識キットなどを用意しておく。
  • make_backup.shを使って、ext3イメージをsquashfsに固める
  • make_initrd.shを使って、LiveCDが起動したときに使うRAMディスクを構成する。ここまででmaster-olpc/以下にCDに焼く内容がまとまっている
  • make_iso.shを使って、master-olpc/ をISOイメージに固める。

現時点でもっとも詳細なビルド手順のドキュメントは、gitに登録されているREADMEだけです。しかしここに書かれている情報だけでビルドするには、ある程度の周辺知識とスキルが必要と思います。

初歩のリマスタリング

ビルド手順を理解する早道は、配布されているLiveCDのISOファイルの内容そのものを理解することです。それにより make_iso.shする直前のマスターにどのようなものが入っていなければいけないか、またどういうカスタマイズが可能かを理解することができます。また簡単なカスタマイズであれば、配布されているISOファイルからmaster-olpc/を再構成し、そこで変更して再度ISOを焼直すことで実現可能です。
ここでは、その手順をまとめておきます。

(1) 必要な環境の準備

(2) LiveCDからマスターディレクトリを再現する

% mkdir master-olpc
% rsync -a -v --delete --exclude=boot.catalog --exclude=rr_moved --exclude=TRANS.TBL /media/CDROM/* master-olpc

(3) マスターディレクトリ内のファイルにカスタマイズを加える

(4) マスターディレクトリの内容をISOファイルに焼く

% su
% export MASTER_DIR=master-olpc
% export ISOIMAGE=test.iso
% make_iso.sh