2004 年 2 月 20 日 (金) 自宅

このページの内容の最新状態を『FreeBSD を CD-ROM から起動する』のページに置きました。 (2004/03/21)

ここしばらく、 必要にかられて FreeBSD を CD から起動することにちょっと挑戦していました。 要するにルートパーティションを /dev/acd0c などにして、 ライブファイルシステムから起動し、きちんと使える状況に持っていくということです。 一応調べたところ、CDBSDという素敵なものがあることはわかったのですが、独自のハードディスクが必要だったり、 既存のフロッピーバイナリをいじる必要があるなど、 正直なところ、環境構築が面倒、と思いました。

ということで、いろいろ方法を考えてみたのですが、 CDBSD のさまざまな有用なスクリプトはいただいて、 さらにフロッピーイメージ起動のアイデアもいただくけれども (これももっといい方法がありそうなので、今後方法を変えるかも)、 フロッピーイメージは新たに Makefile ターゲットを書き下すことでソースから全てコンパイルすることにして、 全体を src/release/Makefile へのパッチとして実装すればもっとも簡単にいくのでは、 という結論にたどり着きました。 独自のハードディスクは必要なく、chroot(8) を用いて環境設定を行えるようになっています。 各種スクリプトはありがたく CDBSD からいただきました。

ということで、忙しい中を現実逃避しながら、 ようやくとりあえず使えそうなバージョンができあがりました。 FreeBSD 4.9-RELEASE-p2 用の src/release へのパッチとなっています。

ダウンロード: cdbsd-release-diff-20040220-3.diff (FreeBSD 4.9-RELEASE-p2 用)

パッチの当て方は以下の通りです。

# cd /usr/src
# patch -p0 < "パッチをしまったディレクトリ"/cdbsd-release-diff-20040220-3.diff

ブート可能な CD の作成は以下の手順で行います。

前準備

まずは準備です。コンパイル前に以下の操作を行っておきます。

  1. /R に 1GB 程度の空きを準備する (symlink でも可)
  2. src/ において、make buildworld を行っておく
  3. ports/sysutils/mkisofs をインストールする
  4. src/sys/i386/conf/CDBSD に CD 起動用のカーネル config を用意する (特に特殊なことが必要なければ、GENERIC をコピーしてよい)
  5. (不要だと思うけど) src/release で make release.1 を行っておく

CD-ROM ツリー構築: cdbsd-prepare

cdbsd-prepare ターゲットは CD-ROM 起動用のツリーを準備します。 環境構築のため、最終的な CD-ROM には入らない ports のツリーも含まれます。

# cd /usr/src/release
# make cdbsd-prepare
...(しばらくコンパイル時間がかかります)...

CD-ROM ツリー環境設定: cdbsd-configure

cdbsd-configure ターゲットは chroot(8) を用いて、 CD-ROM ツリーの環境設定を可能とします。 root のシェルが開きますので、そこから CD-ROM に焼き混む設定を行えます。

# make cdbsd-configure
Chroot to cdbsd directory.  Type 'exit' to finish the configuration.
Setting root password with 'passwd root' is strongly recommended.
Unique parameters of host OS (e.g.: hostname, etc.) cannot be changed.
If you need to change such parameters in chrooted environment, please
create alias IPaddr and use cdbsd-configure-jail target instead.
# (←このプロンプトから設定開始できる)

まずは、passwd root や /etc/fstab などの最低限の設定を行ったあと、 必要あれば /etc/rc.conf などを編集しましょう (オリジナルの CDBSD にあった、 フロッピーで /etc を上書きする仕組みはそのまま残してあるため、 フロッピーでの上書き設定も可能ですが、 私は CD-ROM 一枚で完結する仕組みが好きです)。

このプロンプトからは ports のコンパイル・インストールも可能ですが、 たとえば hostname(1) をコマンドでホスト名を設定したり、 ifconfig(8) したりするとそこは chroot(8) の悲しさ、 ホスト側の環境が変わってしまいます。 この辺りを解決するべく、jail(8) を使った実装も予定していますが、 まだ未実装です。ごめんなさい。

ユーザのホームディレクトリを作ったり、 ~/.ssh に authorized_keys を置いたりすることも可能です。 /etc/rc.network などを参考に、 /etc/ssh/* なども設定できますので、ssh が必要であれば ssh のホストキーなどは生成 (ホスト名などは ssh-keygen(1) の -C オプションで設定可能です) しておきましょう。

シェルを exit すると、chroot(8) 環境を抜け、 元の /usr/src/release に戻ってきます。

CD-ROM イメージ生成: cdbsd-image

あとは cdbsd-image ターゲットを用いて、 CD-ROM 用の ISO-9660 with RockRidge/Joliet ext. のイメージを生成します。 ここで、ブート用の 2.88MB イメージの生成などを全て自動的に行い、 mkisofs でイメージを生成します。 イメージファイルは /R/stage/cdroms/cdbsd.iso に生成されます。 何も cdbsd-configure を行わない場合、 私の環境では 128876544 バイト (122MB) のファイルができあがります。

# make cdbsd-image
...(しばらくコンパイル時間がかかります)...

あとは、このできあがった CD-ROM イメージを、 FreeBSD から burncd や cdrecord を使ってもいいし、 Windows から焼いても構わないのでとにかく焼いてしまえば起動可能です。

ということで…

とりあえず現状報告です。 私が何も手を動かさなくても勝手に改良してくれる人がいると嬉しいなぁ (^^;。 うちのサイトの帯域も無尽蔵ではないので、 ISO9660 イメージファイルは置かないよ。簡単なので自分で make してね。


このサイトへのリンクには何ら許可は必要ありません。 ただし、無断で写真をダウンロードして他の場所に掲載したり、 画像加工の素材として利用するなど、再配布に当たる行為はしないようにしてください。 また、このサイトへのリンクであることを明示すること無しに <img src="..."> などで他のページの内部に画像ファイルを取り込むことも、 ご遠慮下さい。