RIGHT:川俣吉広
RIGHT:EBUG 第29回会合 - 2009, 2/21
*LiveCD河豚板のUSB boot対応 [#ldb19a88]
OpenBSD LiveCD「河豚板」は、2008年末にUSBフラッシュメモリからの起動に
対応しました。
[[OpenBSD LiveCD「河豚板」>http://kaw.ath.cx/openbsd/?LiveCD]]は、
2008年末にUSBフラッシュメモリからの起動に対応しました。
現在、配布サイト((http://kaw.ath.cx/dl/pub/OpenBSD/LiveCD/ , http://livecd-mirror.ebug.jp/LiveCD/))では、
CD-ROM用、USBメモリ用の2つのイメージを布しています。
CD-ROM用、USBメモリ用の2つのイメージを開しています。

今回は、このUSB boot対応の容、および前回(2007年5月)の発表以降の変更点などについて説明します。
今回は、このUSB boot対応の容、および[[前回(2007年5月)の発表>EBUG勉強会/LiveCD/2]]以降の状況などについて説明します。
**発端 [#r17a7fed]
ebug members MLでの神保氏の発言が発端
>''神'' - 河豚板をCDドライブのないネットブックで動かしたいんだけど、USB boot対応できますかね? ~
''川'' - USBメモリがBIOSとOpenBSDカーネルの両方からHDDとして認識できてれば、OpenBSDを素でインストールすれば動くんじゃないですかね?
ebug members MLでの某氏の発言が発端
>''神'' - '''河豚板をCDドライブのないネットブックで動かしたいんだけど、USB boot対応できますかね?''' ~
''川'' - '''USBメモリがBIOSとOpenBSDカーネルの両方からHDDとして認識できてれば、OpenBSDを素でインストールしても動くんじゃないですかね?'''

で、やってみたところ、通常の方法でOpenBSDをインストール、起動できることを確認((神保氏はFreeBSDでも追試))、
で、やってみたところ、通常の方法でOpenBSDをインストール、起動できることを確認((某氏はFreeBSDでも追試))。
河豚板のUSB boot対応にとりかかりました。
**河豚板のしくみ おさらい [#uc366925]
今回のUSB boot対応の概要を理解するため、河豚板のブートの仕組みとファイルシステムの構成について概観します。
今回のUSB boot対応の概要を理解するため、まず河豚板のブートの仕組みとファイルシステムの構成について概観してみます。
***カーネル起動直後まで [#uc1017f5]
BIOSによってブートローダ(CDの場合はEl Torito規格、HDDの場合はMBR)が読み込まれ、続いて二次ローダ (/cdboot or /boot)が、最後に
BIOSによってブートローダ(CDの場合はEl Torito規格、HDDの場合はMBRから)が読み込まれ、続いて二次ローダ (/cdboot or /boot)が、最後に
カーネル (/bsd)が起動します。~
カーネル起動直後のファイルシステムの状は以下のようになっています。
カーネル起動直後の河豚板のファイルシステム状は以下のようになっています。
|CENTER:&ref(fuguita.gif);|
|CENTER:カーネル起動直後のファイルシステム(概要)|
ルートファイルシステムとなっているrdデバイスはカーネル内にあらかじめ組込まれており、
カーネル起動と同時にルートにマウントされます。これはFDDインストーラなどで使われている技術です。

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

このあと、通常のBSDの起動シーケンスにのっとり、/sbin/init が起動、つづいて /etc/rc が実行されます。
このあと、通常のBSDの起動シーケンスにのっとり、/sbin/init が起動、つづいて /etc/rc が実行されます((実際にはそれぞれ、/boottmp/init , /boottmp/rc))。
***通常の運用状態まで [#k2152b78]
/etc/rc (実際は、/boottmp/rc)は概ね、以下のような動作をします;
-mfs, CD-ROMのマウント
-動作モードの選択
-キーボード形式, ルートパスワード, ネットワークパラメータなどの設定
-キーボード形式, ルートパスワード, ネットワークパラメータなどの設定、(あるいは、以前保存したメディアから設定を復帰)。~
... (どちらにするかは、指定された動作モードによる)

これらの初期化を終えたあと、/fuguita/etc/rc に制御を移します。これ以降はOpenBSDネイティブの処理が実行されます。~
最終的に運用状態になった時点でのファイルシステムの状態は以下のようになります;
|CENTER:&ref(fuguita-op.gif);|
|CENTER:運用状態でのファイルシステム(概要)|

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

なぜこのようなややこしいことをするのか? それは、「/usr以下をread onlyにせず、ファイルの置き換えを
可能にすることによって、securityアップデートやports/packagesの追加を可能にするため」です。~
LiveCDの場合、通常このような機能は「スタッカブルファイルシステム」などによって実しますが、
LiveCDの場合、通常このような機能は「スタッカブルファイルシステム」などを使うことによって実現しますが、
OpenBSDではスタッカブルファイルシステムは実装されていないため、河豚板では今述べたような方法を採用しています。

また、/mfs以下の大半をシンボリックリンクで置き換えることで、
/mfs以下の内容を保存する場合に必要なファイル容量も大幅に低減することができています。
**変更作業 [#l47cfa24]
まず、冒頭の「発端」でも触れたように、OpenBSDを通常のインストーラを用いて
USBメモリにインストール((OpenBSDからは、SCSIディスクとして見える))し、起動試験を行ってみました。
-結果 ... ハードウェアによって、起動できるものとできないものがある。

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

どうやらUSB boot機能は、CD-ROMでのEl Torito規格のような互換性の高い標準規格は採用されていない場合も時あるようです。

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

-方針と実装
--USB用の別バージョンは作成しない。単一のスクリプトでCD-ROM / USB両対応とする。~
... 開発・保守の手間が2倍になる(一人でやってるので、これはツライ!!)。
... 別バージョン作ると、開発・保守の手間が2倍になる(一人でやってるので、これはツライ!!)。

--USBであっても、read onlyでマウントする。~
... これによって、USBの書換え回数の問題を回避する。
--USBデバイスに導する場合HDDと同様パーティショニングやブートローダの書き込みが必要なため、
本来インストーラが要になるが、とりあえず生のディスクイメージを作成し、それを配布する。
--いままでCD-ROM決め打ちでやっていた初期化部分を変更。
---/cdrom を /fuguita に変更
... USBの書換え回数の問題が回避できるから。

--USBデバイスに導する場合は、HDDと同様にパーティショニングやブートローダの書き込みが必要なため、
本来インストーラが要になる。
とはいえ、インストーラまで作ってられないのでとりあえず生のディスクイメージを作成し、それを布する。

--いままでCD-ROM決め打ちでやっていた部分を変更。
---/cdrom を /fuguita に名称変更
---OSに認識されたストレージデバイスを順次スキャンし、河豚板の入っているメディアを検出する。
---前項のメディアをデフォルト値とし、実際に /fuguita にマウントするデバイスをユーザに尋ねる。
---ユーザデータ保存機能など、関連するサポートツールの改造
---ビルドツールへの機能追加
---ビルドツールの機能追加と変更

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

「発端」となったMLでのやり取りは 2008年11月30日、USB対応版のリリースは12月11日の''FuguIta-4.4-200812111''にて行われました。
**その他諸々[#x3d47ab8]
-USB bootが不可能な機種でも、カーネル起動後にUSBが認識できれば以下の方法でUSB版の運用が可能です。
--CD-ROMとUSBメモリの両方を着し、CD-ROMでブート。
--''device where FuguIta stored in [cd0a] -> ''のプロンプトに対し、USBフラッシュのデバイス名(通常は sd0a)を--以降は、USBフラッシュによる運用に切り替わる(CD-ROMはeject可)。
-USB用のイメージをHDDに上書きすれば、HDDでの運用も可能。
-''ご注意'': CD-ROM版だけの頃から存在していた「USBフラッシュへのユーザデータ保存機能」は、USB対応版でも引続き使用できます。
ただし、USB版実に伴いデータを保存するパーティションが変更となったため、USB版以前に保存したデータは''非互換''となりました。

**2007年5月以降の河豚板の主な変更点 [#d8aab8cc]
-USBフラッシュ対応のOpenBSDは、他に ''flashboot'' ( http://www.mindrot.org/projects/flashboot/ )というものが開発されており、
主に Soekris Net4{5,8}xxのような組み込みプラットフォームでの使用を想定しているようです。
**2007年5月以降の河豚板の主な状況 [#d8aab8cc]
リリース状況 (括弧の数字は、security fix対応などのマイナーリリース回数)
-FuguIta-4.1 (5)
--itojun氏のアドバイスにより、-currentカーネルを使用した「IPv6 type 0 route header問題」対応版をリリース
-FuguIta-4.2 (3)
-FuguIta-4.3 (5)
--amd64試作版を qemu-x86-64 on i386上で作成(欧州某方面からの要請による)
-FuguIta-4.4 (6)
--MP kernel ''/bsd.mp''収録。起動も bsd.mpをデフォルトに。~
...Single Processor Kernelの場合、Multi CoreのCPUでブート時に固まる場合あり。
--/boottmp/rcの細かい部分を多数修正
--dig氏より、CD-ROM label artworkをご提供頂きました。

**最後に [#k06c227f]
河豚板はKnnopixやSlax、あるいはFreeSBIEのようなメジャーなLiveCDのような
判り易く綺麗な外観は持っておりませんが、OpenBSD自身が持つ機能はほぼて盛り込んでいます。
そのため、HDDへの通常インストールと同じ感覚で使用できます。

また、追加でインストールされている各種パッケージを組み合わせると、
色んな技を試せます。例えば、
-フェイルオーバ、帯域制御機能付のファイアウォール(しかもIPv6完対応 :-)
-HTTPプロキシを経由して、Layer2トンネルを通す(しかも圧縮&暗号化機能付き!!)。~
...さらに、そこを通ってWindowsマシンにログオン、とか...
-Transmissionでお手軽BitTorrent tracker/seeder
-いつでもどこでもプログラミング。Schemeでも遊べちゃう。GUIだって作れるよ。
-映像・音声メディアの視聴は勿論、動画エンコード、CD/DVDのリッピング&焼きにも対応してます。

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

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


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