・qemuのインストール



portsからqemu, kqemu-kmodをインストール。
  # portinstall -m-DWITH_KQEMU qemu



  # portinstall kqemu-kmod
kqemu-kmodはqemuのアクセラレータ。



アクセラレータを有効にするには、qemuをWITH_KQEMUでコンパイルしなければならない。このためportinstallの-mオプションで-DWITH_KQEMUをmakeに渡している。



・モジュールの設定



また、下記のようにして、アクセラレータをロードすること。
  # kldload kqemu (←モジュールのロード)



  # kldstat (←本当にロードされたか確認)



  Id Refs Address Size Name



  1 7 xxxx xxxx Kernel



  2 1 xxxx xxxx acpi.ko



  3 1 xxxx xxxx warp_saver.ko



  4 1 xxxx xxxx ext2fs.ko



  5 1 xxxx xxxx kqemu.ko (←きちんとロードされている)



  #
このアクセラレータで動作がかなり速くなる。






・ゲストOS用ディスクの確保
  $ qemu-img create -f raw /usr/home/linux/debian.dsk 10G
として10Gを割り当て



-fオプションで指定するのはイメージのファイルタイプ。



rawはその名の通りrawイメージ。シンプルであるため他のエミュレータにも転用可能。



ファイルシステムが"holes"に対応しているなら、例え100Gを確保しても、実際には使った分しか消費されない。



holesに対応しているファイルシステムの例として、ext2、ext3が挙げられているが、UFSも対応しているようだ。



他にはqcowというタイプがあり、QEMUイメージフォーマットと呼ばれるもの。



AES暗号化、zlibベースの圧縮に対応していて便利。






・Debianのインストール



DebianのインストールCDイメージをダウンロードし、下記のようにして起動。
  $ qemu -kernel-kqemu -hda /usr/home/linux/debian.dsk -cdrom /usr/home/linux/debian.iso -boot d
-hdaでHDDイメージを指定、-cdromでCDROMイメージを指定、-bootで起動ディスクを指定。cならHDD、dならCDROMイメージから起動。



上記の例では、HDDイメージに/usr/home/linux/debian.dskを、CDROMイメージに/usr/home/linux/debian.iso を設定し、CDROMから起動している。



また、-kernel-kqemuでアクセラレータを有効にしている。






・ゲストOSへの接続



起動したゲストOSは、ネットワーク的には表に出てこない。



ゲストOSから外へは繋げるものの、外からゲストOSには繋げない。
  $ qemu -hda /usr/home/linux/debian.dsk -boot c -redir :8022::22
上記のように、-redirオプションの後で、:ホストOSのポート::ゲストOSのポート: と指定したうえでホストOSの8022へ繋げば、ゲストOSの22に接続できる。



ゲストOSがダイレクトに繋ぐ方法もあるが、別の機会に試す。






・qemuの管理



Ctrl+Alt+2で管理モードに。詳細はそこでhelpなりなんなり。



Ctrl+Alt+1で元に戻る。



なお、アクセラレータが有効になっているかどうかは、下記のように確認する。
  ・OKの場合



  (qemu) info kqemu



  kqemu support: enabled for user and kernel code






  ・ちょっとダメ



  (qemu) info kqemu



  kqemu support: enabled for user code






  ・だめぽ



  (qemu) info kqemu



  kqemu support: disabled
・スナップショット



qemuに-snapshotオプションを付けて起動すると、起動する前の状態を保存したまま作業が可能。



いろいろ危険な事を試したい時には便利。



終了すれば作業した分は消えてしまうが、Ctrl+aの後にsを押せばいつでも反映可能。



また、管理モードでcommitコマンドを実行しても可。



問題は、差分がホストOSの/tmpディレクトリに保存されること。



あまり大量の作業をするとホストOSのパーティションが溢れるので注意。



qemu-imgで差分保存用のイメージを作成することも出来る。






・メモリ用ディレクトリ



kqemuは/dev/shm、/dev/shmがなければ/tmpに仮想OSのメモリを含む巨大なテンポラリファイルを作成する。



上記のスナップショットで使用するファイルと同様かどうかは試していないので分からないが、環境変数QEMU_TMPDIRでディレクトリを指定できる。






・キーボード



JISキーボードが効かない。



なぜかSHIFT+7で;が出る謎のキーマップ。



qemuのkオプションを試したりしたが断念。カスタムキーマップをわざわざ作るのも面倒くさいのでvncviewerで操作している。