書籍『OpenFlow実践入門』でTremaをインストール
[ 2013年10月5日 追記。Tremaのバージョンが 0.3.x から 0.4.x に上がって色々と変わってきています。最新の情報は、https://github.com/trema/trema を確認ください。また、0.4.3 のインストール記事「◆ OpenFlowフレームワーク Trema 0.4 のインストール」を書きました。]
[ 2012年2月1日 追記。 本記事に、書籍著者かつTrema開発者様よりコメントいただきました。多謝です。 --version が正しく動かない件は Trema 側で修正いただいたとのこと。
ソースからコンパイルし、正しく動くことを確認しました。確認時の バージョンは 0.3.5 です。
また、rvm を使う場合には gem install trema の実行に sudo が必要とはいえないとのことで rvm を使うケースだと別のインストール手順が必要そうです。]
『OpenFlow実践入門』が技術評論社から出版されていたのでさっそく購入してみました。
本の解説を元に OpenFlow コントローラである Trema のインストールをしようとしたら色々とつまづいたのでここに書き残しておきます。
今回使ったインストール環境:
Lubuntu 12.10 desktop (i386)
(2013年1月18日にソフトウェアアップデート済)
クリーンインストール状態から実施しました。
ここで記載している節、ページは『OpenFlow実践入門』初版第1刷のものです。
Trema のインストールについては「5.3 Trema のセットアップ」(P.68) から記載されています。
パッケージを使う方法と、ソースからビルドする方法がありますがまずはパッケージを使う方法からやってみました。
■手順1: 前提パッケージの導入
P.69 下の注1にあるように Ubuntu 12.10 以降は Ruby1.9 がデフォルトになっているので読み替えが必要。
なので、Lubuntu 12.10 でも同じように読み替えます。
P.69 注1の記載に誤記が1つあります:「ruby-dev1.8」→「ruby1.8-dev」
$ sudo apt-get install gcc make ruby1.8 rubygems1.8 ruby1.8-dev irb libpcap-dev libsqlite3-dev
P.68 に、Trema は 1.8.7 が必要だと書いてあるので ruby1.8 のバージョン確認をしてみます:
$ dpkg -l ruby1.8 要望=(U)不明/(I)インストール/(R)削除/(P)完全削除/(H)維持 | 状態=(N)無/(I)インストール済/(C)設定/(U)展開/(F)設定失敗/(H)半インストール/(W)トリガ待ち/(T)トリガ保留 |/ エラー?=(空欄)無/(R)要再インストール (状態,エラーの大文字=異常) ||/ 名前 バージョ アーキテ 説明 +++-==============-============-============-================================= ii ruby1.8 1.8.7.358-4u i386 Interpreter of object-oriented sc
1.8.7 と出ているので Trema の前提を満たしています。
■手順2: Ruby1.8 への切替
本には記載がない手順です。
Trema は Ruby1.8 で動かす必要があるのですが、Lubuntu 12.10 ではデフォルトが Ruby1.8 ではなく Ruby1.9 なので 1.8 を使うように切り替えておきます。
この切替をしていないと、trema のインストールでエラーになりました。
$ sudo update-alternatives --config ruby alternative ruby (/usr/bin/ruby を提供) には 2 個の選択肢があります。 選択肢 パス 優先度 状態 ------------------------------------------------------------ * 0 /usr/bin/ruby1.9.1 51 自動モード 1 /usr/bin/ruby1.8 50 手動モード 2 /usr/bin/ruby1.9.1 51 手動モード 現在の選択 [*] を保持するには Enter、さもなければ選択肢の番号のキーを押してください:
ここで 1 を選んで /usr/bin/ruby で /usr/bin/ruby1.8 が動くようにします。
同様に gem も切り替えておきます。
$ sudo update-alternatives --config gem alternative gem (/usr/bin/gem を提供) には 2 個の選択肢があります。 選択肢 パス 優先度 状態 ------------------------------------------------------------ * 0 /usr/bin/gem1.9.1 181 自動モード 1 /usr/bin/gem1.8 180 手動モード 2 /usr/bin/gem1.9.1 181 手動モード 現在の選択 [*] を保持するには Enter、さもなければ選択肢の番号のキーを押してください:
ここで 1 を選び /usr/bin/gem1.8 が動くようにします。
■手順3: Trema パッケージをインストール
本の記載には sudo が抜けています。
$ sudo gem install trema
手順2を抜かしてしまうとここで以下のエラーが出てしまいます:
ERROR: Error installing trema: ERROR: Failed to build gem native extension. "/usr/bin/ruby1.9.1" -rubygems /var/lib/gems/1.9.1/gems/rake-10.0.3/bin/rake RUBYARCHDIR=/var/lib/gems/1.9.1/gems/trema-0.3.3/ruby RUBYLIBDIR=/var/lib/gems/1.9.1/gems/trema-0.3.3/ruby cannot load such file -- bundler/gem_tasks cannot load such file -- rspec/core cannot load such file -- cucumber/rake/task cannot load such file -- reek/rake/task cannot load such file -- roodi cannot load such file -- flog cannot load such file -- flay cannot load such file -- yard ./build.rb .mono.rant:419: syntax error, unexpected ':', expecting keyword_then or ',' or ';' or '\n' when String: obj ^ .mono.rant:427: warning: else without rescue is useless .mono.rant:462: syntax error, unexpected keyword_end, expecting $end end # module Rant ^ ./build.rb aborted! rake aborted! Command failed with status (1): [./build.rb...] /var/lib/gems/1.9.1/gems/trema-0.3.3/Rakefile:24:in `block in' Tasks: TOP => default (See full trace by running task with --trace) Gem files will remain installed in /var/lib/gems/1.9.1/gems/trema-0.3.3 for inspection. Results logged to /var/lib/gems/1.9.1/gems/trema-0.3.3/./gem_make.out
■手順4: バージョン確認
本には「--version」とありますが、実行結果からするとハイフンなしの「version」
$ trema version trema version 0.3.3
本では 0.3.0 ですが、すでに 0.3.3 になっていました。
これでインストールは完了です。
(なぜか --version だと、--help と同じ結果がでます。
手元で確認できる古いバージョン Trema 0.2.5 では --version で version と
同じ結果が出力されるのでどこかでバグを作りこんだのでしょうか...)
■動作確認 "Hello, Trema!"
「5.4 Hello, Trema」(p.71) のコードには脱落が1箇所あります。
これについては、すでに正誤表が公開されていて記載がありました:
http://gihyo.jp/book/2013/978-4-7741-5465-7/support
誤: class HelloTrema Controller
正: class HelloTrema < Controller
■Trema ファイルはどこ?
パッケージで Trema をインストールした場合だと、「5.7 Trema のファイル構成」(P.79) で説明されているファイル群はどこにあるのでしょう?
探ってみると、以下にありました:
/var/lib/gems/1.8/gems/trema-0.3.3
本で説明されているコードは、このディレクトリの下の src/examples というディレクトリにあります。
■ソースコードからインストールする場合
「ソースコードから最新版をインストールする場合」(p.70)に記載されている方法でソースでも導入してみました。注意点だけ書いておきます。
本には記載がないですが、git を使うので当然事前に git をインストールしておく必要があります。
$ sudo apt-get install git
また、バージョン確認では、先に書いたのと同じ注意点があります。
本には「--version」とありますが、実行結果からするとハイフンなしの「version」
$ ./trema version trema version 0.3.3
本では trema version 0.3.0 ですが、現時点では 0.3.3 になります。
ちなみに、手順2を抜かすと ./build.rb を実行するところで手順3に書いたエラーがでると思います
(エラーメッセージの内容からの推定で、未確認ですが)。
« 制限事項のお知らせ: MZK-WNH/MZK-W300NH2 で OpenWRT with OpenFlow | トップページ | Tremaコントローラが勝手に終了してしまう現象の回避方法 »
「OpenFlow」カテゴリの記事
- ◆ 【Open vSwitchのみで OpenFlowプログラミング】VLAN ID コンバータ 改(2013.08.10)
- ◆ 【Open vSwitchのみで OpenFlowプログラミング】VLAN ID コンバータ(2013.08.05)
- ◆ 【TremaでOpenFlowプログラミング】VLAN ID コンバータ(2013.05.12)
- ◆ Linux のネットワークネームスペース機能と Open vSwitch で仮想ネットワーク(OpenFlowスイッチとTrema)(2013.05.11)
- ◆ OpenFlow 1.0.0 メッセージと Trema API(Ruby) との対応表(2013.05.08)
「Trema」カテゴリの記事
- ◆【改訂】OpenFlow フレームワーク Trema 0.4 のインストール手順【0.4.7対応】(2014.06.11)
- ◆ Trema 0.4.7インストール失敗とバージョン指定インストール(2014.06.08)
- ◆ OpenFlowフレームワーク Trema 0.4 のインストール(2013.10.06)
- ◆ 【TremaでOpenFlowプログラミング】VLAN ID コンバータ(2013.05.12)
- ◆ Linux のネットワークネームスペース機能と Open vSwitch で仮想ネットワーク(OpenFlowスイッチとTrema)(2013.05.11)
コメント
この記事へのコメントは終了しました。
« 制限事項のお知らせ: MZK-WNH/MZK-W300NH2 で OpenWRT with OpenFlow | トップページ | Tremaコントローラが勝手に終了してしまう現象の回避方法 »
著者の高宮です。
本の紹介と、まちがいのご指摘 & 補足をありがとうございます!
いくつか訂正がありますのでご連絡します:
* trema --version の件は、最新版で修正しました。いま rubygems.org が落ちているので gem install はできませんが、2, 3 日中に修正されたものがインストールできるようになるはずです。GitHub からソースでインストールする場合はすでに修正済みです。
* gem install の sudo がない件は、rvm などの環境を使っているユーザの場合 sudo を使うと変なことになるのであえて sudo なしで説明しました。正しく書くと「sudo なしで実行して permission denied になった場合 (rvm とかを使っている場合)、sudo をつけて実行してください」という説明になりますが、sudo を付けるのは自明という判断と紙面の都合でこうなりました。
ひきつづき、何かありましたらよろしくお願いします!
投稿: 高宮 安仁 | 2013年1月31日 (木) 17時09分