こんな夜中にOpenFlowでネットワークをプログラミング!

第7回 【Trema編】新シリーズ始動! OpenFlow界のRailsことTrema入門

この記事を読むのに必要な時間:およそ 3 分

はじめに

効率とは賢く怠けることである

(作者不詳)

無精:エネルギーの総支出を減らすために,
        多大な努力をするように,
        あなたをかりたてる性質。

(Larry Wall)

優れたプログラマが持つハッカー気質のひとつに「無精」があります。大好きなコンピュータの前から一時も離れずにどうやってジャンクフードを手に入れるか――普通の人からするとただの横着に見えるかもしれませんが,ハッカー達にとってそれはいつでも大きな問題でした。たとえば,ハッカーの巣窟として有名なMITのAIラボにはかつて,UNIXのコマンド一発でピザをFAX注文するxpizzaコマンドが存在しました注1)⁠また,RFC 2325として公開されているコーヒーポットプロトコルでは,遠隔地にあるコーヒーポットのコーヒーの量を監視したり,コーヒーを自動的に淹れたりするための半分冗談のインターフェースを定義しています。

こうした「ソフトウェアで楽をする」ハックのうち,もっとも大規模な例が最新鋭の巨大データセンターです。クラウドサービスの裏で動く巨大データセンターは極めて少人数の管理者によって運用されており,大部分の管理はソフトウェアによって極限まで自動化されているという記事を読んだことがある人も多いでしょう。ピザやコーヒーのようなお遊びから,巨大データセンターのように一筋縄ではいかない相手まで,プログラムで「モノ」を思いどおりにコントロールするのはもっとも楽しいハックの一種です。

注1)
「xpizza MIT」でググると,1991年当時のmanページが読めます。http://bit.ly/mYAJwZ

OpenFlowの登場

その中でもネットワークをハックする技術の1つが,本連載で取り上げるOpenFlowです。OpenFlowはネットワークスイッチの内部動作を変更するプロトコルを定義しており注2)⁠スイッチをコントロールするソフトウェア(OpenFlowの世界ではコントローラと呼ばれます)によってネットワーク全体をプログラム制御できる世界を目指しています図1)⁠

図1 OpenFlowスイッチとコントローラ

図1 OpenFlowスイッチとコントローラ

OpenFlowの登場によって,今までは専門のオペレータによって管理されていたネットワークがついにプログラマ達にも開放されました。ネットワークをソフトウェアとして記述することにより,たとえば「アプリに合わせて勝手に最適化するネットワーク」「障害が起こっても自己修復するネットワーク」といった究極の自動化も夢ではなくなります!

本連載では,このOpenFlowプロトコルを使ってネットワークを「ハック」する方法を数回に渡って紹介します。職場や自宅のような中小規模ネットワークでもすぐに試せる実用的なコードを通じて,⁠OpenFlowって具体的に何に使えるの?」というよくある疑問に答えていきます。OpenFlowやネットワークの基礎から説明しますので,ネットワークの専門家はもちろん,普通のプログラマもすんなり理解できると思います。

まずは,OpenFlowプログラミングのためのフレームワーク「Trema(トレマ)⁠を紹介しましょう。

注2)
OpenFlowの仕様書や標準化に関する情報は,こちらで得られます。

OpenFlowプログラミングフレームワークTrema

Tremaは,OpenFlowコントローラを開発するためのRubyおよびC用のプログラミングフレームワークです。ノートPC1台でアジャイルにOpenFlow開発をしたいなら,⁠OpenFlow界のRails」ことTremaで決まりです。GitHub上で開発されており,GPLv2ライセンスのフリーソフトウェアとして公開されています。公開は今年の4月と非常に新しいソフトウェアですが,その使いやすさから国内外の大学や企業および研究機関などですでに採用されています。

Tremaの情報は次のサイトから入手できます。

Tremaを使うと,ノートPC1台でOpenFlowコントローラの開発とテストができます。本連載では,実際にTremaを使っていろいろと実験しながらOpenFlowコントローラを作っていきます。それでは早速Tremaをセットアップして,簡単なプログラムを書いてみましょう。

セットアップ

TremaはLinux上で動作し,Ubuntu 10.04以降およびDebian GNU/Linux 6.0の32ビットおよび64ビット版での動作が保証されています。テストはされていませんが,その他のLinuxディストリビューションでも基本的には動作するはずです。本連載では,Ubuntuの最新バージョンである11.04(デスクトップエディション32ビット版)を使います。

tremaコマンドの実行にはroot権限が必要です。まずは,sudoを使ってroot権限でコマンドを実行できるかどうか,sudoの設定ファイルを確認してください。

% sudo visudo

sudoができることを確認したら,Tremaが必要とするgccなどの外部ソフトウェアを次のようにインストールします。

% sudo apt-get install git gcc make ruby ruby-dev irb
libpcap-dev libsqlite3-dev

次にTrema本体をダウンロードします。TremaはGitHub上で公開されており,gitを使って最新版が取得できます。

% git clone git://github.com/trema/trema.git

Tremaのセットアップには,⁠make install」のようなシステム全体へインストールする手順は不要です。ビルドするだけで使い始めることができます。ビルドは次のコマンドを実行するだけです。

% ./trema/build.rb

それでは早速,入門の定番Hello, Trema!コントローラをRubyで書いてみましょう。なお,本連載ではおもにTremaのRubyライブラリを使ったプログラミングを取り上げます。Cライブラリを使ったプログラミングの例については,Tremaのsrc/examples/ディレクトリ以下を参照してください。本連載で使ったRubyコードに加えて,同じ内容のCコードを見つけることができます。

著者プロフィール

高宮安仁(たかみややすひと)

Trema開発チーム自称リーダー。東京の大学で計算科学を学び,並列プログラミング用ライブラリや,大規模クラスタ管理ツールの開発,とくに東工大のスパコンTSUBAME,分散クラスタInTriggerの管理基盤などなど主に分散・大規模システムのミドルウェア開発者・研究者として活動。現在は企業の研究者として,OpenFlow用プログラミングフレームワークTremaのメイン開発者。モットーは何がなんでも定時に帰ること。コンピューターはもちろん映画や音楽も好きで,スクラッチDJとしても活動しています。DJの仕事ください。


鈴木一哉(すずきかずや)

Trema開発チームのメンバー。Ascend,古河電工,ヤマハ等のネットワーク機器を扱うエンジニアを経て,現在は経路制御の研究に従事。ホエールズ時代からのベイスターズファンで,98年の優勝時にはもちろん横浜スタジアムへ駆けつけました。野球のない時期には,もっぱらSFを読んでいます。会社ではランニングサークルに入っており,先日も多摩川の駅伝に参加しましたが,練習不足で全然走れませんでした。ちゃんと練習して,来年こそはしっかり走るぞ!

コメント

コメントの記入