#topicpath
RIGHT:川俣吉広
RIGHT:EBUG 第22回会合 - 2007, 5/19
*LiveCDその後 [#y0dea220]
前回(2005/9)の勉強会ではOpenBSD 3.8ベースのものを紹介 ~
現在OpenBSD 4.1ベースのものを開中。
RIGHT:EBUG 第29回会合 - 2009, 2/21
*LiveCD「河豚板」の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メモリ用、二種類のイメージファイルを開しています。

前回からの変更点を中心にご報告致します。
-2005 02/21 CD-OpenBSD-3.6
-2005 08/16 CD-OpenBSD-3.7
-2006 05/02 CD-OpenBSD-3.8
-2006 08/10 CD-OpenBSD-3.9 (×数回リリース)
-2006 10/25 FuguIta-4.0pre2
-2006 10/30 FuguIta-4.0-200611011, 200611131, 200611231, 200701201, 200702181, 200703111
-2007 05/17 FuguIta-4.1-200705161
今回は、このUSB ブート対応の容、および[[前回(2007年5月)の発表>EBUG勉強会/20070519_LiveCD_2]]以降の状況などについて報告します。
----
#contents
----
**発端 
USB ブート対応のきっかけとなったのは、ebug members MLでの以下のようなやりとりです;
>''神'' - '''河豚板をCDドライブのないネットブックで動かしたいんだけど、USB boot対応できますかね?''' 

CD-OpenBSD-3.9からは、Security Advisoryが出た時点で
可能な限りアップデート版をリリース
>''川'' - '''USBメモリがBIOSとOpenBSDカーネルの両方からHDDとして認識できてれば、OpenBSDを素でインストールしても動くんじゃないですかね?'''

**実方法 [#f4779cd6]
大まかには変わっていない
-小さなルートファイルシステム(rd)をカーネルに組み込み ... 初期化用スクリプト/コマンド、デバイスファイルなど
-CD-ROMは /cdromにマウント
-Memory file systemを /mfsにマウント - /cdromにlndirしている
で、やってみたところ、HDDに行う通常のインストール方法でOpenBSDを起動できることを確認((某氏はFreeBSDでも追試))。
これをふまえて河豚板のUSB ブート対応にとりかかりました。
**おさらい - 河豚板の起動のしくみ 
今回のUSB ブート対応の概要を理解するため、まずLiveCD版河豚板の起動のしくみとファイルシステムの構成について概観してみます。
***カーネル起動直後まで 
まず、BIOSによって初期ブートローダ(El Torito規格により指定されたローダ、OpenBSDではcdbr)がよみこまれ、つづいて二次ローダ (cdboot)が、そして最後に
カーネル (bsd.mp)が起動します。~
カーネル起動直後の河豚板のファイルシステム構成を以下の図に示します;
|CENTER:&ref(fuguita.gif);|
|CENTER:カーネル起動直後のファイルシステム(概要)|
ルートファイルシステムとなっているrdデバイスはカーネルにあらかじめくみこまれており、
カーネル起動と同時にルートにマウントされます。これはOpenBSDのFDインストーラなどでつかわれているテクニックです。

変わった点
-名前がつきました - 河豚板 (FuguIta)
--FuguIta-v.r-yyyymmddn.iso.{gz,bz2{,.torrent}}
-ブート方法を選択出来るようになった
--CD-ROM only mode ... fast & low memory mode
--FD, USB flashへの保存と復帰
--シェル直起動(デバッグ用)
-起動用バイナリのクランチ化 ... /boottmp/*
-IPv4のDHCP/IPv6のauto configurationに対応
rdファイルシステムには、起動のために須な必要最小限のコマンド、設定ファイルのみ収録されています。
また、容量低減のためこれらは単一のディレクトリ /boottmp におさめられています。

**作成方法 [#gbe0693c]
(ホスト固有のデータやテンプラリファイルがない)クリーンな
ファイルツリーをCD-ROMに焼くには?
-以前は普通にHDDにインストールしたものをシコシコとお手れ ~
現在はエミュレータ(QEMU)を用いて仮想ディスクにインストール
 qemu-create -t raw cdroot.dist.img 650M
 qemu -localtime -fda floppy41.fs -hda cdroot.orig.img
vnconfigで吸い出し
 vnconfig svnd0 /opt/fuguita/4.1/cdroot.orig.img
 mkdir cdroot.orig
 mount /dev/svnd0a /opt/fuguita/4.1/cdroot.orig
 mkdir cdroot.dist
 cd cdroot.orig && pax -rwvpe . ../cdroot.dist
-CD-ROMに書き込むファイルツリーをいじる場合は、chrootでターゲットのファイルツリーに降りてから作業 ~
→ 実環境と思って作業してよい
 chroot cdroot.dist /bin/ksh -l
--開発環境で make package → chroot環境で pkg_add
-実際には、(主にファイルシステムがReadOnlyであることによる)
細かい不合がアプリ毎に発生する場合があり、これは個別に対応 ~
→ 実はこれが一番手間がかかる。
このあと、通常のBSDの起動シーケンスにのっとり、/sbin/init が起動、つづいて /etc/rc が実行されます((実際にはそれぞれ、/boottmp/init , /boottmp/rc))。
***通常の運用状まで 
/sbin/initからよびだされた /etc/rc (実際は、/boottmp/rc)はおおむね、以下のような動作をします;
-CD-ROMのマウント、mfs((mfs: memory file system - いわゆるRAM Diskに相当))の作成とマウント、/etc/fstabの生成
-ユーザからの動作モード指定をよみとる
-キーボードタイプ, ルートパスワード, ネットワークパラメータなどの設定(もしくは、以前保存したメディアからの設定を復帰 ... どちらの動作かは、前で指定された動作モードによる)

出来上がったISOイメージのチェックにもQEMUを使用
**リリース [#y6eaafcc]
-OSの各リリース毎に作成 / SAが出たらそれにも対応させている
-Wikiにて進捗やBugTrackなどをリリース
-build toolとその使用方法を開 ~
http://kaw.ath.cx/openbsd/index.php?%B2%B6CD%A4%F2%BA%EE%A4%EB
-ミラーサイト(livecd-mirror.ebug.jp)の開設, BitTorrentによる-布状況(HTTPのみ, ~2007, 5/S)
  日付別集計
  日時    | バイト数
 =========+=========================================
  2005/09 | * 2,023,928,486
  2005/10 | ** 6,538,506,715
  2005/11 | * 4,218,994,619
  2005/12 | * 3,851,178,101
  2006/01 | * 5,104,971,394
  2006/02 | ** 8,094,446,543
  2006/03 | * 5,249,054,126
  2006/04 | * 4,017,368,052
  2006/05 | ****** 28,046,841,681
  2006/06 | ***** 21,781,342,007
  2006/07 | ***** 21,843,821,572
  2006/08 | *** 14,999,888,250
  2006/09 | ********* 43,191,654,233
  2006/10 | ******* 33,181,931,202
  2006/11 | **************************************** 210,964,557,620
  2006/12 | ******* 32,687,272,842
  2007/01 | ********** 49,585,150,553
  2007/02 | ******** 38,895,872,535
  2007/03 | ********* 43,168,592,482
  2007/04 | ******** 41,409,782,209
  2007/05 | *** 12,688,897,068
~
 ドメイン別集計,
  (計: 60ドメイン)
  ドメイン  | 閲覧回数
 ===========+=========================================
  (IPv4)    | **************************************** 3,776
  *.jp      | *************** 1,415
  *.net     | ********** 918
  *.com     | ***** 391
  *.pl      | *** 283
  *.eg      | ** 120
  *.by      | * 93       *.mx      | * 31        *.gov     | * 7
  *.fr      | * 78       *.org     | * 26        *.hr      | * 6
  *.mm      | * 69       *.se      | * 26        *.arpa    | * 5
  *.it      | * 67       *.at      | * 25        *.au      | * 5
  *.in      | * 62       *.cn      | * 23        *.dk      | * 5
  *.br      | * 52       *.ro      | * 22        *.fi      | * 5
  *.id      | * 45       *.tw      | * 22        *.sk      | * 5
  *.ar      | * 43       *.ca      | * 21        *.tr      | * 5
  *.ru      | * 42       *.bg      | * 19        *.pt      | * 4
  *.de      | * 36       (local)   | * 16        (IPv6)    | * 3
  *.hu      | * 34       *.be      | * 12        *.ve      | * 3
  *.gr      | * 33       *.es      | * 12        localhost | * 3
  *.nl      | * 33       *.uk      | * 12        *.ee      | * 2
  *.ua      | * 32       *.ch      | * 11        *.mil     | * 2
                         *.my      | * 11        *.yu      | * 2
                         *.cz      | * 8         *.co      | * 1
                         *.ma      | * 8         *.lb      | * 1
                         *.th      | * 8         *.lv      | * 1
                         *.cl      | * 7         *.sg      | * 1
                         *.edu     | * 7         *.sy      | * 1
**他の実系 [#q2538582]
-Anonym.OS
-OliveBSD
-Quetzal (LiveDVD)
-OpenBSD Live-CD Firewall (OpenBSD Live-CD Firewall)
これらの初期化が正常に終了すると、/cdrom/etc/rc に制御がうつされます。これ以降はOpenBSDネイティブの処理が実行されます。~
すべての初期化が終了して運用状に到達したとき、ファイルシステムの状態は以下の図のようになっています;
|CENTER:&ref(fuguita-op.gif);|
|CENTER:運用状でのファイルシステム(概要)|

**収録容(*は、非ports) [#gc3195ff]
アプリケーションは、
コンパクトな実CUI/GUI両方で使用できるものを中心に採用。
:OS|
OpenBSD (フルセット、ただしC言語の静的ライブラリ(lib*.a, lib*_pic.a, lib*_p.a)は割愛)
:ネットワーク関連|
fetchmail /
procmail /
w3m /
rdesktop /
rsync /
Mew* /
Riece* /
Emacs-w3m* /
Transmission /
DeleGate*
:メディア関連|
xv /
MPlayer,MEncoder /
cdparanoia /
lame /
:その他諸|
bash /
bzip2 / zip,unzip /
screen /
Ruby /
Gauche* /
IceWM /
ROX-Filer /
Emacs 22
:日本人用|
kterm /
jless /
nkf /
freefonts /
ja-fonts-funet /
ja-fonts-gnu /
mplus /
Navi2ch* /
Migemo*
**活用事例 [#x95fec22]
-実家帰ってるときに、
--自分ちみたいにネットにアクセスしたい。 ~
IRCも使いたい、YouTubeも見たい...
--Schemeで遊びたい。 ~
...
-ネットワークの調査など
--古~いWinNT 3.51マシンに繋がってるネットワークの調査
--ncとnetstatを使ってthroughputを実測
--DMZの監視
--TAG付VLANの実通テスト ~
...
-OpenBSDの伝道 :-)
rdによるルートファイルシテムは存在しつづけ、CD-ROMは、/cdromに、mfsは/mfsにマウントされます。
そしてこれらのファイルシステムは、通常のUnixのファイル構造としてアクセスできるようにするため、シンボリックリンクが張られ(まくり)ます。
特に、/usr以下はシンボリックリンクが2段階で張られています。たとえば、/usr/bin/viにアクセスする場合は、
       /usr

   /mfs/usr/bin/vi

 /cdrom/usr/bin/vi
というようにシンボリックリンクがたどられます。

なぜこのようなややこしいことをするのか? それは、
>/usr以下をread onlyにせず、ファイルのおきかえを
可能にすることによって、securityアップデートやports/packagesの追加を可能にするため

です。このような機能は「スタッカブルファイルシステム」をつかうことなどによって実現できますが、
OpenBSDではスタッカブルファイルシステムは実されていません。
よって、河豚板では、このシンボリックリンクをもちいる手法を考案し、実しました。

くわえて、副次的な利点となりますが、/mfs以下の大半をシンボリックリンクでおきかえることにより、
/mfs以下の容を保存する場合に必要なファイル容量を大幅に低減することもできています。
**USB ブート対応作業の実際 
まず、冒頭の「発端」でもふれたように、OpenBSDを通常のインストーラをもちいて
USBメモリにインストール((OpenBSDからは、SCSIディスクとして見える))し、起動試験をおこなってみました。
-起動試験の結果 ... ハードウェアによって、起動できるものとできないものがある。

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

どうやらUSB ブートでは、CD-ROMでのEl Torito規格のような標準規格が存在せず、機種によって動作がちがってくる場合も多あるようです。

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

-方針と実
--USB用の別バージョンは作成せず、単一のスクリプトでCD-ROM / USBメモリ両対応とします。~
... 別バージョンつくると、開発・保守の手間が2倍になります(一人でやってるので、これは非常にキビシイ!!)。

--USBメモリであっても、read onlyでマウントします。~
... これによって、フラッシュメモリデバイスの書換え回数制限の問題を回避することが期できます。

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

--いままで「デバイスファイル /dev/cd0a を /cdrom にマウントする」という決め打ちを想定してコーディングしていた部分を修正します;
---/cdrom を /fuguita に名称変更
---OSに認識されたストレージデバイスを順次スキャンし、河豚板のはいっているメディアを検出
---前のメディアをデフォルト値とし、実際に /fuguita にマウントするデバイスをユーザにたずねる。
---ユーザデータ保存機能など、関連するサポートツールの改造
---FuguIta開発用のビルドツールも機能追加、変更などを実施

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

冒頭紹介した「発端となったMLでの議論」は 2008年11月30日にかわされ、USB ブート対応版は12月11日の''FuguIta-4.4-200812111''にて正式リリースされました。
**その他諸
-USB ブートが不可能な機種でも、カーネル起動後にUSBメモリが認識できていれば、CD-ROM版河豚板を併用することでUSB版の河豚板を運用できます。手順は以下のとおりです;
--CD-ROMとUSBメモリの両方を着し、CD-ROMから起動する。
--''device where FuguIta stored in [cd0a] -> ''のプロンプトに対し、USBメモリのデバイス名(通常は sd0a)を--以降は、USBメモリによる運用にきりかわる(このあとはCD-ROMを取り出し可)。

-USBメモリ版の布イメージをHDDに上書きすれば、HDDでの運用も可能です。~
... ''注意: パーティションテーブルも上書きされます!!''

-''ご注意'': CD-ROM版だけの頃から存在していた「USBメモリへのユーザデータ保存機能」は、USB対応版でもひきつづき使用できます。
ただし、USB版実にともないデータを保存するパーティションが変更となったため、USB版以前にデータを保存したメディアは''現バージョン用の保存メディアとは互換性がなくなりました''。~
... あたらしく保存メディアを作成し、データを手動でコピーすれば引越しできます。

-フラッシュメモリ対応のOpenBSDは、他に ''flashboot'' ( http://www.mindrot.org/projects/flashboot/ )というものが開されています。
おもに Soekris Net45xx, Net48xxのような組み込みプラットフォームでの使用を想定しているようです。
**2007年5月以降のリリース状況 &size(14){(括弧の数字は、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)
--マルチプロセッサ用カーネル ''/bsd.mp''を追加収録。起動も bsd.mpがデフォルトに。~
...ユニプロセッサ用カーネルの場合、マルチコアのCPUでブート時にかたまる事例がありました((逆に、ユニプロセッサな機種でマルチプロセッサ用カーネルを使用すると、(電源スイッチをおしてさえも)電源断ができなくなるケースもありました。))。
--/boottmp/rcのこまかい修正を多数実施
--dig氏より、CD-ROMラベル用アートワークをご提供いただきました。

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

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

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

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


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