GNS3 内で Linux ホストを使った検証が行いたくて 先日、homebrew で Qemu 0.13.0 をインストールした のですが、Qemu が上手く動きませんでした。GNS3 のサイトを見ると、Qemu 0.13.0 用のパッチが出ていたので、パッチを当てて Qemu をコンパイルし直してみます。前提として、以下の環境で作業しています。
- Mac OS X 10.6.6
- GNS3 0.7.3("/Applications/GNS3.app" へインストール済み)
- Qemu 0.13.0
Qemu 0.13.0 へのパッチ適用とインストール
まず、少なくても Mac OS X 版の GNS3 パッケージには pemubin.py というファイルが含まれていないというバグがあるよう です。ですので、pemubin.py を GNS3 のソースコードを管理しているサイトからダウンロードし、"/Applications/GNS3.app/Contents/Resources" へコピーしておきます。
次に Qemu 0.13.0 自体のソースコードと GNS3 用のパッチをダウンロードします。
ダウンロードしたソースコード&パッチを展開、パッチを適用します。
tar zxvf qemu-0.13.0.tar.gz
unzip qemu-0.13.0-patches.zip
mv qemu-0.13.0-mcast-udp.patch qemu-0.13.0
cd qemu-0.13.0
patch -p1 -i qemu-0.13.0-mcast-udp.patch
Qemu をコンパイル&インストールします。ターゲットプラットフォームは i386 に限定しています。また、Mac OS X プラットフォーム限定で "--enable-cocoa" というオプションがあるので、こちらも有効にしておきます。
./configure --enable-cocoa --disable-linux-aio --disable-kvm --disable-sdl --target-list=i386-softmmu
make
sudo make install
GNS3 での Qemu 関連設定
GNS3 で Qemu 関連部分は下記のように設定しておきます(GNS3 は日本語化してしまっています)。
Qemu の起動ポートを "127.0.0.1" ではなく、"localhost" に設定しているとイーサネットスイッチを追加した際に下記のようなエラーが出てしまうようです。これを回避する為に Qemu の接続ポートは "127.0.0.1" としておきます。
Dynagen management console for Dynamips (adapted for GNS3)
Copyright (c) 2008 GNS3 Project
=> ---------Traceback lines (saved in exception.log)----------
Traceback (most recent call last):
File "GNS3\UndoFramework.pyo", line 133, in redo
File "GNS3\Topology.pyo", line 743, in addLink
File "GNS3\Dynagen\dynagen.pyo", line 663, in connect
File "GNS3\Dynagen\qemu_lib.pyo", line 517, in connect_to_dynamips
AttributeError: 'ETHSW' object has no attribute 'router'
私の場合や Linux と Cisco ルータを接続した場合の検証がしたかったので、Linux の Microcore や Tinycore をダウンロードしておきました。GNS3 から使う場合は "-no-acpi" オプションを指定し、ACPI を無効にしておきます。
余談ですが、MIcrocore Linux 3.4 の Linux Kernel は 2.6.33.3 のようです。
# uname -a
Linux box 2.6.33.3-tinycore #2012 SMP Wed May 12 17:05:42 EEST 2010 i686 GNU/Linux
Qemuwrapper の起動
GNS3 には "Qemu マネージャ" という機能があるのですが、これは使わず、CLI から直接、Qemuwrapper.py 経由で Qemu を起動します。"--listen 127.0.0.1" や "--port 10525" といったオプションで Qemu が起動するアドレス&ポートを制御することも出来るのですが、私の場合は特に何もオプションを指定せずに使っています。 Qemuwrapper.py は必ず、GNS3 上で Qemu ホストを登録するよりも前に起動しておきます。
$ python /Applications/GNS3.app/Contents/Resources/qemuwrapper.py
Qemu Emulator Wrapper (version 0.7.3)
Copyright (c) 2007-2010 Thomas Pani & Jeremy Grossmann
Unpacking pemu binary.
Qemu TCP control server started (port 10525).
Listenning on all network interfaces
あとは GNS3 上で Cisco ルータと同様に Qemu ホストを登録することで、Linux を動作させた Qemu ホストと Cisco ルータを直接、もしくはイーサネットスイッチ経由で接続し、互いに通信させることが出来るようになりました。
コメント