Skip to content

Qemu 0.13.0 にパッチを適用し、GNS3 で利用出来るようにする

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 用のパッチをダウンロードします。

ダウンロードしたソースコード&パッチを展開、パッチを適用します。

1
2
3
4
5
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" というオプションがあるので、こちらも有効にしておきます。

1
2
3
./configure --enable-cocoa --disable-linux-aio --disable-kvm --disable-sdl --target-list=i386-softmmu
make
sudo make install

GNS3 での Qemu 関連設定

GNS3 で Qemu 関連部分は下記のように設定しておきます(GNS3 は日本語化してしまっています)。

file

file

Qemu の起動ポートを "127.0.0.1" ではなく、"localhost" に設定しているとイーサネットスイッチを追加した際に下記のようなエラーが出てしまうようです。これを回避する為に Qemu の接続ポートは "127.0.0.1" としておきます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
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 のようです。

1
2
# 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 ホストを登録するよりも前に起動しておきます。

1
2
3
4
5
6
7
$ 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 ルータを直接、もしくはイーサネットスイッチ経由で接続し、互いに通信させることが出来るようになりました。

参考