« 制限事項のお知らせ: MZK-WNH/MZK-W300NH2 で OpenWRT with OpenFlow | トップページ | Tremaコントローラが勝手に終了してしまう現象の回避方法 »

2013年1月19日 (土)

書籍『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」カテゴリの記事

Trema」カテゴリの記事

コメント

著者の高宮です。
本の紹介と、まちがいのご指摘 & 補足をありがとうございます!

いくつか訂正がありますのでご連絡します:

* trema --version の件は、最新版で修正しました。いま rubygems.org が落ちているので gem install はできませんが、2, 3 日中に修正されたものがインストールできるようになるはずです。GitHub からソースでインストールする場合はすでに修正済みです。

* gem install の sudo がない件は、rvm などの環境を使っているユーザの場合 sudo を使うと変なことになるのであえて sudo なしで説明しました。正しく書くと「sudo なしで実行して permission denied になった場合 (rvm とかを使っている場合)、sudo をつけて実行してください」という説明になりますが、sudo を付けるのは自明という判断と紙面の都合でこうなりました。

ひきつづき、何かありましたらよろしくお願いします!

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: 書籍『OpenFlow実践入門』でTremaをインストール:

« 制限事項のお知らせ: MZK-WNH/MZK-W300NH2 で OpenWRT with OpenFlow | トップページ | Tremaコントローラが勝手に終了してしまう現象の回避方法 »

最近のトラックバック

無料ブログはココログ