(注意)このブログは本家のほうの文章部分のみの転載です.ソースコードの配布,画像などについては本家のほうを参照してください.文章中のリンク先は面倒なのですべて本家のほうに変換してしまっているのでご注意ください.

KOZOSとは?でも書いたように,KOZOSはFreeBSD上で動作します.

しかし,まあぼくみたいに普段から FreeBSD をメインOSとして利用しているならばそれでもいいのだけど,KOZOSを試してみるためにわざわざFreeBSDをインストールしなければならないというのは,やっぱり面倒です.ここでは他OS上で動かす方法についてちょっと説明します.

FreeBSD以外のOS上で動かそうとするならば,いくつか選択肢があると思います.
  • Windows で cygwin 上で動かす.
  • Linux 上で動かす.
  • VMwareなどのエミュレータを利用して,FreeBSD環境を仮想的に作る.
まず cygwin についてですが,見てみたところ setjmp()/longjmp() は利用できるようですが,getcontext() は使えないみたいです.なので,第12回以降のソースコードは利用できません.

次に Linux ですが,やはり多少の修正が必要になるようです.とくに setjmp()/longjmp() 利用のコードでは,jmp_buf の構造が違うのでなんか適当に修正しないとダメでしょう.あと getcontext()/setcontext() を使ったソースについてはちょっとぼくのほうでも試してみたのですが,とりあえず第25回のソースに以下の修正を加えることでコンパイルはできました.

Linuxでコンパイルするための修正

が,実行してみても Segmentation Fault で落ちてしまい,まともに動きませんでした.ちょっと詳しくは調べてないのですが,ということで Linux の動作も現状,確認できていません.ちなみに上で試したディストリビューションは,Fedora Core 8 でした.

※ もしも,Linuxで動いたというかたがいればぜひ連絡ください.

で,どうするかなのですが,エミュレータを使うのがとりあえず手軽で確実だと思います.QEMUというフリーのPCエミュレータがあって,Windows などのOS上に仮想PCを作成し,そこに FreeBSD をインストールして動かすことができます.ぼくも使ってみましたが,実行速度さえ気にしないのならば,何の問題もなく確実に動きます.

QEMUについては,以下を参照してください.

で,本来ならばここでインストール済みのHDDイメージを配布しようかなーなんて思ってたのですが,ためしにインストールしてみたら,最小構成でもやっぱしそれなりのサイズになってしまったのであきらめました.まあ FreeBSD のインストールはそんなに難しくないので,各自,やってみてくださいな.

参考までに,Windows 上で QEMU で FreeBSD 環境を作成する手順は以下の通り.FreeBSDのインストール方法に関しては,まあ他にも探せばいっぱい出てくると思うので,てきとうになんか参考にしてほしい.
  1. FreeBSDのインストール用CD-ROMを作成しておく.
  2. Windows にQEMUをインストールする.
  3. 空のHDDイメージを作成する.(DOSプロンプトで実行)

    qemu-img create -f qcow freebsd.qcow 8G

  4. CD-ROMからブートし,HDDにインストールする.(DVDも同様の操作で利用可能)(e:のところには,CD-ROMのドライブ名を指定する)

    qemu -L . -m 256 -boot d -cdrom //./e: -hda freebsd.qcow -localtime

  5. インストールが終了したら,HDDイメージからブートすることでFreeBSDが利用可能.

    qemu -L . -m 256 -hda freebsd.qcow -localtime

ちなみにCD-ROMを利用したい場合には,以下のオプションをつけて起動する.CD-ROMがE:ドライブならば

-cdrom //./e:

あと snapshot モードというのがあって,起動時に -snapshot オプションを指定すると,HDDイメージに書き込まないで動作する.実験用で,常に同じ状態で立ち上げたい場合には便利.

あとQEMUは,Cirrus Logic GD5446ビデオカードをエミュレートするので,Xのドライバに cirrus を指定することでXも利用できる.具体的には,/usr/X11R6/lib/X11/xorg.conf でドライバの指定部分を以下のように書けばよい.

# Driver "i810"
# VendorName "Intel Corporation"
# BoardName "945G Integrated Graphics Controller"
# BusID "PCI:0:2:0"
Driver "cirrus"

あとQEMUでは,最低限,以下の操作を覚えておくといいだろう.
  • マウスカーソルをウィンドウ内に出し入れする ... Ctrl + Alt
  • フルスクリーンで使用する ... Ctrl + Alt + f
  • 終了する ... Ctrl + Alt + 2 でモニタに入って quit する.
ネットワークは,普通に使えば DHCP でアドレス取って,telnet, ftp, ssh などを使って仮想PCから外に繋げることができます(内部で仮想的にDHCPサーバ,DNSサーバ,NATなどが動作しています).ただし仮想PCから外に対して ping は通らないので注意.僕はこれでハマりました...あと外から中に繋げるには別途設定が必要.あとftpはうまく繋がらなかったらPASSIVEモードでやってみること(もしくはsftpを使う).

使ってみて思ったけど,こーいう実験のためには,仮想PCはいろいろと融通が効いて,とっても便利で良いです.実は Linux (Fedora Core 8)上での動作実験も,Windows 上のQEMU環境で行いました.おすすめ!