川俣吉広
EBUG 第29回会合 - 2009, 2/21

LiveCD河豚板のUSB boot対応

OpenBSD LiveCD「河豚板」は、 2008年末にUSBメモリからの起動に対応しました。 現在、配布サイト*1では、 CD-ROM用、USBメモリ用の2つのイメージを公開しています。

今回は、このUSB boot対応の内容、および前回(2007年5月)の発表以降の状況などについて説明します。

発端

ebug members MLでの某氏の発言が開発のきっかけとなりました;

- 河豚板をCDドライブのないネットブックで動かしたいんだけど、USB boot対応できますかね?
- USBメモリがBIOSとOpenBSDカーネルの両方からHDDとして認識できてれば、OpenBSDを素でインストールしても動くんじゃないですかね?

で、やってみたところ、HDDに行う通常のインストール方法でOpenBSDを起動できることを確認*2。 これを踏まえて河豚板のUSB boot対応にとりかかりました。

河豚板の起動のしくみ おさらい

今回のUSB boot対応の概要を理解するため、まず河豚板のブートのしくみとファイルシステムの構成について概観してみます。

カーネル起動直後まで

まず、BIOSによってブートローダ(CDの場合はEl Torito規格、HDDの場合はMBRから)がよみこまれ、つづいて二次ローダ (/cdboot or /boot)が、そして最後に カーネル (/bsd)が起動します。
カーネル起動直後の河豚板のファイルシステム構成を以下の図に示します;

fuguita.gif
カーネル起動直後のファイルシステム(概要)

ルートファイルシステムとなっているrdデバイスはカーネル内にあらかじめくみこまれており、 カーネル起動と同時にルートにマウントされます。これはFDDインストーラなどでつかわれているテクニックです。

rdファイルシステムには、起動のために必須な必要最小限のコマンド、設定ファイルのみ収録されています。 また、容量低減のためこれらは単一のディレクトリ /boottmp におさめられています。

このあと、通常のBSDの起動シーケンスにのっとり、/sbin/init が起動、つづいて /etc/rc が実行されます*3

/sbin/initからよびだされた /etc/rc (実際は、/boottmp/rc)はおおむね、以下のような動作をします;

これらの初期化が正常に終了すると、/fuguita/etc/rc に制御がうつされます。これ以降はOpenBSDネイティブの処理が実行されます。
すべての初期化が終了して運用状態に到達したとき、ファイルシステムの状態は以下の図のようになっています;

fuguita-op.gif
CENTER:運用状態でのファイルシステム(概要)

rdによるルートファイルシテムは存在しつづけ、CD-ROMは、/fuguitaに、mfsは/mfsにマウントされます。 そしてこれらのファイルシステムは、通常のUnixのファイル構造としてアクセスできるようにするため、シンボリックリンクが張られ(まくり)ます。 特に、/usr以下はシンボリックリンクが2段階で張られています。たとえば、/usr/bin/viにアクセスする場合は、

        /usr/
         ↓
    /mfs/usr/bin/vi
                 ↓
/fuguita/usr/bin/vi

というようにシンボリックリンクがたどられます。

なぜこのようなややこしいことをするのか? それは、「/usr以下をread onlyにせず、ファイルのおきかえを 可能にすることによって、securityアップデートやports/packagesの追加を可能にするため」です。
このような機能は「スタッカブルファイルシステム」などをつかうことによって実現できますが、 OpenBSDではスタッカブルファイルシステムは実装されていません。 よって、河豚板では、このシンボリックリンクをもちいる手法を考案し、実装しました。

加えて、/mfs以下の大半をシンボリックリンクでおきかえることにより、 /mfs以下の内容を保存する場合に必要なファイル容量も大幅に低減することもできています。

対応作業

まず、冒頭の「発端」でもふれたように、OpenBSDを通常のインストーラをもちいて USBメモリにインストール*4し、起動試験をおこなってみました。

ネット上の情報をしらべたところ、USB bootをサポートするBIOSであっても、ストレージデバイスをHDDとして認識するものと、 Removable Diskとして認識するものがあり、どうやら後者の場合はUSBメモリに通常のHDD用インストールをおこなった OpenBSDは起動できない様子です。
起動が不可能ですと、二次ローダが出力するプロンプト boot> も表示されません。 このことからも、やはりBIOSがMBRをよみこめていない(=HDDとして認識していない)可能性がたかいと推測されます。

どうやらUSB bootでは、CD-ROMでのEl Torito規格のような互換性のたかい標準規格が存在せず、機種によって動作がちがってくる場合も多々あるようです。

とりあえず、河豚板のUSB boot対応は、前者のBIOSを対象として実施することとしました;

実際の変更箇所は、初期化の大部分を担当する /boottmp/rc に集中しました。

冒頭紹介した「発端となったMLでの議論」は 2008年11月30日にかわされ、USB boot対応版は12月11日のFuguIta-4.4-200812111にて正式リリースされました。

の数字は、security fix対応などのマイナーリリース回数)};

最後に

メジャーなLiveCD、たとえばKnoppixやUbutu、あるいはFreeSBIEなどは、どれも 親しみやすく、美しい外観をもっています。
河豚板はそこまで初心者フレンドリな環境ではないのですが、 OpenBSD自身がもつ機能はほぼすべてもりこんでいます。 そのため、河豚板はHDDへ通常インストールしたOpenBSDとおなじ感覚で使用できます。

また、OS本体のほかに追加収録されている各種パッケージをくみあわせて、 いろいろな技をためすこともできます。たとえば、

などなど…。ぜひ一度おためしください。

ご質問、バグレポート、ご要望などございましたら、kaw@on.rim.or.jp までおしらせください。 mixiのOpenBSDコミュニティにも、河豚板トピックを開設しています。


*1 http://kaw.ath.cx/dl/pub/OpenBSD/LiveCD/ , http://livecd-mirror.ebug.jp/LiveCD/
*2 某氏はFreeBSDでも追試
*3 実際にはそれぞれ、/boottmp/init , /boottmp/rc
*4 OpenBSDからは、SCSIディスクとして見える

Front page   New Page list Search Recent changes   Help   RSS of recent changes