2012年7月29日日曜日

OpenFlow環境をつくってみた(Trema編)










前回まででNOXに落ち着きそうだったのですが、Tremaの紹介記事が分かりやすかったので、Tremaに関心が向いてしまいました。さらに、Trema自体に仮想スイッチ・仮想ホストを自由なトポロジで簡単にエミュレートする機能もあり、さらに気にいってしまいました。
Trema github

下記記事では、上のtutorialなどを日本語でさらに分かりやすく説明しています。
こんな夜中にOpenFlowでネットワークをプログラミング!:第7回 【Trema編】新シリーズ始動! OpenFlow界のRailsことTrema入門

環境準備、コントローラー、NWエミュレータの設定は上記記事を参考にして、順調にすすめられました。
また、Rubyは初めてだったので、平行してdotinstallで勉強しました。
NWエミュレータの説明はこちらが参考になります。Open vSwitchを使ってるみたいですね。

気になったのはテストです。プログラミングは専門ではなかったので、ちゃんとテストを考えたことなかったのですが、最近「TDD:Test Drive Development(テスト駆動開発)」という言葉を知り、気になっていたのですが、どのようにテストを書いたらいいのか考えていたところに、よい事例紹介がありました。
こんな夜中にOpenFlowでネットワークをプログラミング!:第9回 【Trema編】テストファーストでアジャイルに

ここでハマったのは、Rubyのversionです。私の環境では、Ruby v1.9.3では、ruby テストフレームワークのRSpecがうまく動かなかったので、rvmを使ってrubyバージョンを切り替えられるようにして、v1.8.7で正常動作確認できました。



今は、上記の本を読んでいるところです。Rspecの説明もありますが、BDD(ビヘイビア駆動開発)の概念とその実践の説明になっています。
OpenFlowからは離れつつありますが、Seleniumへの応用ができる予感がしています。

Ruby on Railsアプリ以外でも Selenium RC を使えば RSpec でテストが書ける! - @yuumi3のお仕事日記 

次回OpenFlowの話に戻れるか、テストの話になるか、はたまた全く関係のない話になるか分かりませんが、今日はこの辺で。。。
このエントリーをはてなブックマークに追加

2012年7月14日土曜日

IT系ステッカー入手方法まとめ

最近、IT系のイベントでステッカー配布されること多いですよね。
で、いざ貼ろうと思ったら、すでにどこかにいってたり。。。
備忘録として改めて、ステッカーの入手方法をまとめてみました。

  1. イベントに参加してもらう
  2. サイトで配布されているステッカーをもらう
  3. webサイトの各専用storeで購入
  4. ステッカー販売サイトで購入
  5. その他

では、順番にみていきましょう。

  1. イベントに参加してもらう
    webサービス系、クラウドサービス系の企業が主催のイベント、勉強会などで配布されることが多いかと思います。
    勉強会の情報については、以前こちらにまとめてみました。

  2. サイトで配布されているステッカーをもらう
    プロモーション目的で配布しているようです。
    送料などの手数料が必要な場合がほとんです。たまに送料不要なケースもあるようですが、最新の情報を確認するようにしましょう。
    How to Get Stack Overflow Stickers « Blog – Stack Exchange http://blog.stackoverflow.com/2009/09/how-to-get-stack-overflow-stickers/
    ※国際郵便、SASE郵便を使うようで、少し手間です。まだ試してはないですが、今でも入手は可能そうです。

    Basho | Get Free Stickers 
    http://basho.com/community/request-stickers/
    ※米国から実際に届き、感激しました。

    Gmailのオリジナルステッカーが貰えるらしい 貰う方法をご紹介 - WEBマーケティング ブログ
    http://web-marketing.zako.org/google/get-your-gmail-stickers.html

    他にも一般に公開はしておらず、メルマガ・ML等に登録していれば、そこで案内されているものもあるようです。
  3. webサービスの各専用ストアで購入
    海外のweb系サービスでは、専用のストアでグッズを販売してるんですね。ステッカーも販売されています。
    下記にまとまっていますので、こちらを参考にさせていただき、githubのステッカーを購入しました。

    Webサービス系ステッカーを集めよう!!
  4. ステッカー販売サイトで購入
    stickerなどで検索すれば、ステッカー専門サイトが多く見つかります。

    MacBook Air用デコシールがマジかっこよすぎ!リンゴが光るデザインステッカーの入手方法と貼り方まとめ | Chrome Life で紹介されているetsyでは、MBAの天板向けのステッカーがたくさんあります。

    stickermuleもかっこいいステッカーが揃ってます。自分の好きなステッカーを注文することもできます。
  5. その他
    自分でステッカーをデザイン、作成される人もいらっしゃるかもしれません。ステッカー作成サイトや作成する機会も販売されているようです。

    また、知り合いを辿って、ステッカーを入手するというのアリですね。

    勉強でお世話になっているdotinstall では応援企画で、ステッカーの販売もされています。(応援しているので早速購入させていただきました)
    ステッカーを購入してドットインストールを応援してみませんか?




私はAppceleratorのステッカーが欲しいです。。。
---
<追加>
2012/10/25 stickermule追加しました。

このエントリーをはてなブックマークに追加

2012年7月12日木曜日

OpenFlow環境をつくってみた(NOX,Mininet編)

前回OpenFlow環境をつくった際に使用したMininet VM imageにNOXが入っていることや、Tutorialにもその辺りの記述があるのに気づきました。
今回は、Mininet VM imageにinstallされているものだけで、OpenFlowコントローラー(NOX)、OpenFlowスイッチ(Mininet)を準備します。
前回の説明と重複する部分がありますが、ご容赦ください。

Mininet VM imageの準備
  1. MininetのVM imageをDL
    こちらを参考にMininetのVM imageをDLします。
  2. VirtualBoxのinstall
    こちらからOS X用をDL
  3. VirtualBoxにて、VMを新規作成
    こちらを参考に、VM新規作成後、HDDイメージとして、上記1でDLしたvmdx fileを指定。
  4. VirtualBoxにて当該VM imageを選択し、設定をクリック。
    ネットワークを選択し、ネットワーク設定を実施(今回はブリッジとして、Wi-fiを選択)
  5. VirtualBoxにて当該VMを起動、login
    ID:openflow
    PW:openflow
  6. /sbin/ifconfig eth0 にて、VM側のIPを確認
    (defaultではDHCPになっているので必要に応じて、static IPを設定してください。こちらが参照になります)
  7. Macからssh接続。
    上記6で確認したIPに対して、ターミナルからssh接続します。
    MAC$ ssh -X openflow@192.168.*.*         #VMのIPを指定。
                                                                       #X windowを利用できるように-Xを指定
    openflow@192.168.*.*'s password:          #default PW:openflow 
    Welcome to Ubuntu 11.10 (GNU/Linux 3.0.0-12-generic i686)
    
     * Documentation:  https://help.ubuntu.com/
    New release '12.04 LTS' available.
    Run 'do-release-upgrade' to upgrade to it.
    
    Last login: Thu Jul 12 07:02:00 2012
    openflow@mininet-vm:~$                            #VMにlogin
    



OpenFlowコントローラーの起動

  1. こちらを参考に、noxの起動
  2. openflow@mininet-vm:~$ cd ~/noxcore/build/src/
    openflow@mininet-vm:~/noxcore/build/src$ sudo ./nox_core -v -i ptcp: pytutorial
    00001|nox|INFO:Starting nox_core (/home/openflow/noxcore/build/src/.libs/lt-nox_core)
    00002|nox|INFO:nox bootstrap complete
    


OpenFlowスイッチの起動
  1. こちらを参考に、Mininetを起動。スイッチ:s1に、ホスト:h2,h3,4を接続。
    nodes,netコマンドで、node情報、接続情報を確認。
    pingallコマンドで、h2,h3,h4間でpingが通ることを確認。
    例として、h2 ifconfigコマンドにて、特定hostにてlinuxコマンドを実行。
    MAC$ ssh -X openflow@192.168.*.*
    openflow@192.168.*.*'s password: 
    Welcome to Ubuntu 11.10 (GNU/Linux 3.0.0-12-generic i686)
    
     * Documentation:  https://help.ubuntu.com/
    New release '12.04 LTS' available.
    Run 'do-release-upgrade' to upgrade to it.
    
    Last login: Thu Jul 12 07:08:56 2012 from 192.168.115.139
    openflow@mininet-vm:~$ sudo mn --topo single,3 --mac --switch ovsk --controller remote
    *** Loading openvswitch_mod
    *** Adding controller
    *** Creating network
    *** Adding hosts:
    h2 h3 h4 
    *** Adding switches:
    s1 
    *** Adding links:
    (s1, h2) (s1, h3) (s1, h4) 
    *** Configuring hosts
    h2 h3 h4 
    *** Starting controller
    *** Starting 1 switches
    s1 
    *** Starting CLI:
    mininet> nodes
    available nodes are: 
    h4 h3 h2 s1 c0
    mininet> net
    s1 <-> h2-eth0 h3-eth0 h4-eth0
    mininet> pingall
    *** Ping: testing ping reachability
    h2 -> h3 h4 
    h3 -> h2 h4 
    h4 -> h2 h3 
    *** Results: 0% dropped (0/6 lost)
    mininet> h2 ifconfig
    h2-eth0   Link encap:Ethernet  HWaddr 00:00:00:00:00:02  
              inet addr:10.0.0.2  Bcast:10.255.255.255  Mask:255.0.0.0
              inet6 addr: fe80::200:ff:fe00:2/64 Scope:Link
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:32 errors:0 dropped:0 overruns:0 frame:0
              TX packets:14 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000 
              RX bytes:2344 (2.3 KB)  TX bytes:1028 (1.0 KB)
    
    mininet> 
    
これで、とりあえずOpenFlowコントローラーとスイッチが起動できました。

GUIコマンドの実行
MininetのHPに掲載されているGUIコマンドを試してみます。
  • consoles.py
    MAC$ssh -X openflow@192.168.*.*
    openflow@192.168.*.*'s password: 
    Welcome to Ubuntu 11.10 (GNU/Linux 3.0.0-12-generic i686)
    
     * Documentation:  https://help.ubuntu.com/
    New release '12.04 LTS' available.
    Run 'do-release-upgrade' to upgrade to it.
    
    Last login: Thu Jul 12 07:27:10 2012 from 192.168.115.139
    openflow@mininet-vm:~$ cd mininet/examples/
    openflow@mininet-vm:~/mininet/examples$ pwd
    /home/openflow/mininet/examples
    openflow@mininet-vm:~/mininet/examples$ sudo ./consoles.py 
    *** Adding controller
    *** Creating network
    *** Adding hosts:
    h1 h2 h3 h4 h5 h6 h7 h8 h9 h10 h11 h12 h13 h14 h15 h16 
    *** Adding switches:
    s17 s18 s19 s20 s21 
    *** Adding links:
    (h1, s18) (h2, s18) (h3, s18) (h4, s18) (h5, s19) (h6, s19) (h7, s19) (h8, s19) (h9, s20) (h10, s20) (h11, s20) (h12, s20) (h13, s21) (h14, s21) (h15, s21) (h16, s21) (s17, s18) (s17, s19) (s17, s20) (s17, s21) 
    *** Configuring hosts
    h1 h2 h3 h4 h5 h6 h7 h8 h9 h10 h11 h12 h13 h14 h15 h16 
    *** Starting controller
    *** Starting 5 switches
    s17 s18 s19 s20 s21 
    上記コマンドによって、新たにhost16台、スイッチ5台が作成されます。
    (先のMininetコマンドにて作成した構成を利用する方法はこれから調べます。。。)
    h1にてping 10.0.0.2(host2のIP)、h2にてifconfigを実行しています。
  • miniedit.py
    openflow@mininet-vm:~/mininet/examples$ pwd
    /home/openflow/mininet/examples
    openflow@mininet-vm:~/mininet/examples$ ls
    baresshd.py     hwintf.py           README             tree1024.py
    consoles.py     linearbandwidth.py  scratchnet.py      treeping64.py
    controllers.py  miniedit.py         scratchnetuser.py
    emptynet.py     multitest.py        sshd.py
    openflow@mininet-vm:~/mininet/examples$ sudo ./miniedit.py 
    下記のような画面が起動するので、スイッチ、hostを描いて、線で接続します。
    (しかし、この後の起動のさせ方はわかりませんでした。。。)


    今回は、Mininet VM imageに含まれるアプリのみで、OpenFlowコントローラー、スイッチを起動してみました。また、GUIコマンドもいくつか起動してみました。

    次回からはいよいよ、コマンド詳細を調べて、複雑な構成・設定を試していきたいと思います。

このエントリーをはてなブックマークに追加

2012年7月8日日曜日

OpenFlow環境をつくってみた(POX,Mininet編)

前回、Windows環境にて、VMware Playerと安価な物理スイッチ(実際にはwifiルータ)を使って環境をつくりました。

しかし、最近はMacを使うことが増えてきたので、MacでOpenFlow環境をあらためて準備することにしました。MacはLANポートないので、できればOpenFlowスイッチもソフトウェアのものを使いたいところです。
ちょうど下記ブログを見つけましたので、参考にさせていただきました。
きりんさん日記: OpenFlow Controllerフレームワーク(Python/POX, Trema/Ruby, C, Java)を試す(Simple Learning L2 Switch) 

調べると、仮想マシン上にOpenFlowコントローラ・スイッチをinstallすれば、物理PCのOSにこだわる必要はなさそうです。
また。MininetというPythonベースのOpenFlowスイッチ(エミュレータ)の存在を知りました。これで複雑なネットワークトポロジおよびエッジスイッチに接続するhostもエミュレータできます。VM imageがあるとのことなので利用することにします。MacにV仮想環境としてVirtualBoxをinstallし、VM imageを起動します。
OpenFlowコントローラは、NOXのPython版の「POX」があり、Macにinstallできるので、これを利用することにします。
どちらもPythonベースです。ちょうどPythonを勉強しているので、いいタイミングです。

OSOpenFlow
ver
OpenFlow
コントローラー
OpenFlow
スイッチ
備考
前回Win1.1NOX 1.1 OflibOpenFlow 1.1 for WHR-G301N前回記事参照
Win以外も可能
今回Mac1.0POXMininetMac以外も可能
たまたまどちらも1.0対応


OpenFlowコントローラーの準備
インストール手順は下記の通り。

  1. https://github.com/noxrepo/poxにアクセス
  2. git cloneで、localにコピー
    Mac用のgithubアプリをinstallしている場合、下記の「Clone in Mac」をクリックし、適当な場所にclone(保存)
  3. ターミナル画面をopenし、上記2で保存した場所に移動
    lsすると、下記のようなファイル・フォルダが確認できます。
    $ pwd
    /Users/N1202A013/Documents/github/pox
    43220800:pox N1202A013$ ls
    COPYING  debug-pox.py ext  pox.py  tests
    README  doc  pox  setup.cfg tools 
  4. POXを起動
    下記のように、Moduleを指定して起動します。これで、OpenFlowスイッチに問い合わせ待ち状態になります。(オプションを指定することで、問い合わせ元のIPやportを指定・変更することもできます。今回は省略)
    $ ./pox.py forwarding.l2_learning
    POX 0.0.0 / Copyright 2011 James McCauley
    DEBUG:core:POX 0.0.0 going up...
    DEBUG:core:Running on CPython (2.7.3/Apr 9 2012 20:52:43)
    INFO:core:POX 0.0.0 is up.
    This program comes with ABSOLUTELY NO WARRANTY.  This program is free software,
    and you are welcome to redistribute it under certain conditions.
    Type 'help(pox.license)' for details.
    DEBUG:openflow.of_01:Listening for connections on 0.0.0.0:6633
    Ready.
    POX> 
    

OpenFlowスイッチ(Mininet)の準備

  1. MininetのVM imageをDL
    こちらを参考にMininetのVM imageをDLします。
  2. VirtualBoxのinstall
    こちらからOS X用をDL
  3. VirtualBoxにて、VMを新規作成
    こちらを参考に、VM新規作成後、HDDイメージとして、上記1でDLしたvmdx fileを指定。
  4. VirtualBoxにて上記3で作成したVMを起動、該当VMにlogin
    ID:openflow
    PW:openflow
  5. Mininetを起動。コントローラーとして、上述のPOXを指定
    スイッチ:s1に、ホスト:h2,h3を接続し、h2,h3間でpingが通ることを
    openflow@mininet-vm:~$ sudo mn --controller=remote --ip=<POX IP> --port=6633
    *** Adding controller
    *** Creating network
    *** Adding hosts:
    h2 h3 
    *** Adding switches:
    s1 
    *** Adding links:
    (s1, h2) (s1, h3) 
    *** Configuring hosts
    h2 h3 
    *** Starting controller
    *** Starting 1 switches
    s1 
    *** Starting CLI:
    mininet> nodes
    available nodes are: 
    h2 h3 s1 c0
    mininet> net
    s1 <-> h2-eth0 h3-eth0
    mininet> pingall
    *** Ping: testing ping reachability
    h2 -> h3 
    h3 -> h2 
    *** Results: 0% dropped (0/2 lost)
    mininet> 
    
    

参考までに、上記コマンド実行時のPOX側のdubug画面を下記に添付します。
上記のpingallのタイミングで、OpenFlowスイッチ(Mininet)からOpenFlowコントローラ(POX)に問い合わせがきているようです。(詳細はおいおい調べていくということで)
POX> INFO:openflow.of_01:[Con 1/1] Connected to 00-00-00-00-00-01
DEBUG:forwarding.l2_learning:Connection [Con 1/1]
INFO:openflow.of_01:[Con 1/1] closing connection
INFO:openflow.of_01:[Con 2/1] Connected to 00-00-00-00-00-01
DEBUG:forwarding.l2_learning:Connection [Con 2/1]
DEBUG:forwarding.l2_learning:installing flow for 2e:b8:2d:29:f4:97.2 -> 4a:8f:f1:97:0c:c3.1
DEBUG:forwarding.l2_learning:installing flow for 4a:8f:f1:97:0c:c3.1 -> 2e:b8:2d:29:f4:97.2
DEBUG:forwarding.l2_learning:installing flow for 2e:b8:2d:29:f4:97.2 -> 4a:8f:f1:97:0c:c3.1
DEBUG:forwarding.l2_learning:installing flow for 2e:b8:2d:29:f4:97.2 -> 4a:8f:f1:97:0c:c3.1
DEBUG:forwarding.l2_learning:installing flow for 4a:8f:f1:97:0c:c3.1 -> 2e:b8:2d:29:f4:97.2
DEBUG:forwarding.l2_learning:installing flow for 2e:b8:2d:29:f4:97.2 -> 4a:8f:f1:97:0c:c3.1
DEBUG:forwarding.l2_learning:installing flow for 4a:8f:f1:97:0c:c3.1 -> 2e:b8:2d:29:f4:97.2

まとめ

  • 今回、Mac上にOpenFlow環境を構築しました。
    • OpenFlowコントローラーとしてNOX、OpenFlowスイッチとしてMininetを使用しました。
    • 今回の環境はMac以外にの環境でも実装可能です。
  • Mininetはいろいろと動作させることができ、面白そうです。引き続き調べたいと思います。
    • Mininetは、OpenFlowコントローラに問い合わせしなくても単体でも動作するようです。
    • 今回のMininet操作については、こちらの「Getting Started with Mininet」の上3つのdocを参考にしました。
    • Mininet tutorialに詳細説明がありそう。

続く。。。

2012/7/9 追記
MininetのVMにはNOXもinstallされていました。結局、Mininet VMがあれば一通りの環境はできそうです。下記参考になりました。
http://www.openflow.org/wk/index.php/OpenFlow_Tutorial

このエントリーをはてなブックマークに追加

2012年7月5日木曜日

OpenFlow環境をつくってみた

以前から気になっていたOpenFlow。
最近、「自宅ラック勉強会」にてbuffaloのwifiルータをOpenFlowスイッチ化するのが気になっていましたが、先日、とうとう衝動的にやってみました。
OpenFlowスイッチは簡単に設定できましたが、OpenFlowコントローラの方が手間取ったので、備忘録として残しておきます。


OpenFlowスイッチの準備

使ったスイッチは「WHR-G301N」。アマゾンで約2500円でした。



下記サイトの「OpenFlow 1.1 for WHR-G301N 作成手順v1.0」を参考に、OpenFlow1.1をinstall。数分で完了。感謝です。
http://www.srchack.org/index.php?topic=Network

OpenFlowスイッチのIPは192.168.1.1/24なので、PC側のIPを192.168.1.10/24など適切なものに設定し、PCからOpenFlowにtelnet(port:23)すると、、、



















無事接続できました!


OpenFlowコントローラの準備

次はコントラーラです。
上述の同じサイトで「NOX 1.1 Oflib を導入済みのVMwareイメージ」を用意してくれているので、これを使いました。(CentOSにNOX 1.1 Oflibのinstallを試しましたが、エラーがでて挫折しました。MacOSでも挫折しました。)


VMwareイメージのOSはUbuntuです。Ubuntuはほぼ初めてです。


使用した環境は下記の通りです。
WindowsVista
VMWare Player4.0.4

今回の構成は下記とします。PCと仮想マシンはブリッジ接続の想定。仮想マシン(192.168.1.11/24)     --+   PC LAN(192.168.1.10/24)         --+--  OpenFlowスイッチ間(192.168.1.1/24)

VMWare Playerから該当イメージを起動後の手順は下記の通り。

  1. 文字化け対応
    下記サイトを参考に~/.bashrcを変更します。http://hamamuratakuo.blog61.fc2.com/blog-entry-400.html
  2. ネットワーク設定実施「sudo vi /etc/network/interfaces」実施後、下記を参考にネットワークアドレスを設定。http://hamamuratakuo.blog61.fc2.com/blog-entry-400.html
     
  3. VMWare Playerのネットワーク設定VMWare Playerの[仮想マシン設定]-[ネットワーク アダプタ]の設定は下記のようにブリッジ設定としました。
  4. 物理PCと仮想マシンを再起動。
    上記1-3だけでは、ネットワークが正常に起動しない(ifconfigにてeth0が見えない)ので、再起動してみました。(ちょっと原因不明の疎通不可になったり。と不安定な感じですが、PCの電源を切って、起動したら疎通できたりしていました。しばらく様子をみたいと思います)
    ---
    2012/7/7 追記
    仮想マシン(NOX)から物理PCまたはOpenFlowスイッチへの疎通不可の時に、OpenFlowスイッチの電源は入れたまま、仮想マシンをshutdown・物理PC電源off後、再び物理PC電源on・仮想マシンを起動したら、疎通が復旧するようです。詳細原因究明には至っていませんが。。。
    ---
    ifconfig結果と、物理PC(NOX)からOpenFlowスイッチにtelnetした結果は下記の通りです。




    以上で、環境構築完了!
    次回、詳しく触ってみたいと思います。






このエントリーをはてなブックマークに追加