Taste of Tech Topics

Acroquest Technology株式会社のエンジニアが書く技術ブログ

OpenDaylight Helium SR3を試してみた 【OpenDaylight 「Helium」でSDNを構築してみよう】

こんにちは、 miyakeです :-)

ちょっと先の話ですが、来月6月は幕張でINTEROPが開催されます :-)
ネットワーク機器からSDN、NFVのデモや展示が行われる、ネットワークに関する大きなイベントです。
今年はIoT関係の展示も増えているそうなので、見に行こうと思っています。

http://www.opendaylight.org/sites/all/themes/opendaylight/ixm/images/logo_opendaylight.png

前々回:OpenDaylight 「Helium」 概要編
 前回:OpenDaylight 「Helium」をインストールしてみよう
 今回:OpenDaylight 「Helium」でSDNを構築してみよう < イマココ

そんな訳で最終回の今回は、前回インストールを行った環境でSDNを構築します。

今回構築するネットワークのイメージは以下の図のようになります。

f:id:acro-engineer:20150524164551p:plain

open vSwitchでOpenFlow Switchを3つ(ofbr0~ofbr2)作成して、SwitchごとにNodeを4つずつ接続した構成となります。
このNodeをKVMなどの仮想マシンで構築するのはCPUやメモリなどの確保が困難なので、今回はNetwork Namespaceを使って疑似的にNodeを作成します。
Network Namespaceを使うと、一つのホスト内で独立したネットワーク環境を複数作成することが出来るようになります。この機能を使うことで、疑似的なNodeを作成することができます。
Dockerは、このNetwork Namespaceを使ってコンテナ内に独立したネットワーク環境を作っていたりします :-)

それではこれから、順番に環境を構築していきます。

OpenFlow Switchの作成

まずは図にあるOpenFlow Switch(ofbr0~ofbr2)を、以下のコマンドを実行して作成します。
なおこれらのコマンドはroot権限がないと実行できないものなので、rootで行ってください。

# ovs-vsctl add-br ofbr0
# ovs-vsctl add-br ofbr1
# ovs-vsctl add-br ofbr2

# ovs-vsctl set bridge ofbr0 protocols=OpenFlow13
# ovs-vsctl set bridge ofbr1 protocols=OpenFlow13
# ovs-vsctl set bridge ofbr2 protocols=OpenFlow13

# ovs-vsctl set-controller ofbr0 tcp:[OpenDaylightをインストールしたマシンのIPアドレス]
# ovs-vsctl set-controller ofbr1 tcp:[OpenDaylightをインストールしたマシンのIPアドレス]
# ovs-vsctl set-controller ofbr2 tcp:[OpenDaylightをインストールしたマシンのIPアドレス]

# ovs-vsctl set bridge ofbr0 other-config:datapath-id=0000000000000011
# ovs-vsctl set bridge ofbr1 other-config:datapath-id=0000000000000012
# ovs-vsctl set bridge ofbr2 other-config:datapath-id=0000000000000013

"ovs-vsctl"はopen vSwitchのコマンドです。

"ovs-vsctl add-br"で、open vSwitchのブリッジを作成しています。
"ovs-vsctl set bridge xxx protocols=OpenFlow13"は、ブリッジをOpenFlow1.3に対応したSwitchとなるように設定しています。
"ovs-vsctl set-controller xxx tcp:"は、SDNコントローラであるOpenDaylightに接続するための接続先IPアドレスを設定しています。
"ovs-vsctl set bridge ofbr0 other-config:datapath-id"は、OpenFlow Switchを識別するためのIDを設定しています。このIDは16進数で設定します。

実際に作成された内容は、"ovs-vsctl show"で確認することができます。

# ovs-vsctl show
e4b90a1e-584c-4de2-983d-c814e27581e4
    Bridge "ofbr1"
        Controller "tcp:192.48.128.40"
        Port "ofbr1"
            Interface "ofbr1"
                type: internal
    Bridge "ofbr2"
        Controller "tcp:192.48.128.40"
        Port "ofbr2"
            Interface "ofbr2"
                type: internal
    Bridge "ofbr0"
        Controller "tcp:192.48.128.40"
        Port "ofbr0"
            Interface "ofbr0"
                type: internal
    Bridge "br0"
        Port "br0"
            Interface "br0"
                type: internal
    ovs_version: "2.3.1"

OpenFlow Switch間の接続

次は、図にあるOpenFlow Switch間の接続(青い線)を、以下のコマンドを実行して作成します。

# ovs-vsctl add-port ofbr0 ofbr0_ofbr1 -- set interface ofbr0_ofbr1 type=patch options:peer=ofbr1_ofbr0
# ovs-vsctl add-port ofbr1 ofbr1_ofbr0 -- set interface ofbr1_ofbr0 type=patch options:peer=ofbr0_ofbr1

# ovs-vsctl add-port ofbr1 ofbr1_ofbr2 -- set interface ofbr1_ofbr2 type=patch options:peer=ofbr2_ofbr1
# ovs-vsctl add-port ofbr2 ofbr2_ofbr1 -- set interface ofbr2_ofbr1 type=patch options:peer=ofbr1_ofbr2

ここでは、OpenFlow Switch間を接続するための仮想インタフェースと、そのインタフェース間を接続する定義を行っています。
ポートは双方に接続する必要があるので、図の青い線1つに対して2つのコマンドを実行しています。

"ofbr1_ofbr0"としているのが、仮想インタフェースの名称になります。

"ovs-vsctl show"で結果を確認すると、以下のようになっているはずです。

# ovs-vsctl show
e4b90a1e-584c-4de2-983d-c814e27581e4
    Bridge "ofbr1"
        Controller "tcp:192.48.128.40"
        Port "ofbr1"
            Interface "ofbr1"
                type: internal
        Port "ofbr1_ofbr0"
            Interface "ofbr1_ofbr0"
                type: patch
                options: {peer="ofbr0_ofbr1"}
        Port "ofbr1_ofbr2"
            Interface "ofbr1_ofbr2"
                type: patch
                options: {peer="ofbr2_ofbr1"}
    Bridge "ofbr2"
        Controller "tcp:192.48.128.40"
        Port "ofbr2"
            Interface "ofbr2"
                type: internal
        Port "ofbr2_ofbr1"
            Interface "ofbr2_ofbr1"
                type: patch
                options: {peer="ofbr1_ofbr2"}
    Bridge "ofbr0"
        Controller "tcp:192.48.128.40"
        Port "ofbr0"
            Interface "ofbr0"
                type: internal
        Port "ofbr0_ofbr1"
            Interface "ofbr0_ofbr1"
                type: patch
                options: {peer="ofbr1_ofbr0"}
    Bridge "br0"
        Port "br0"
            Interface "br0"
                type: internal
    ovs_version: "2.3.1"

ブリッジごとに、仮想インタフェースがポートとして接続されています。
peer=で表示されているのが、対向として接続されている仮想インタフェースになります。

Nodeの生成

最後に、Network Namespaceを使用して疑似的なNodeを生成します。

まず先に、ブリッジとNode間を接続するためのveth peerを生成します。
veth peerとは、ホスト内に生成された2つの仮想インタフェースと、そのインタフェース間を接続した仮想ケーブルのセットだと考えてください。
図にある、OpenFlow SwitchとNode間のオレンジの線が、veth peerになります。

このveth peerの生成には、ipコマンドを使用します。

# ip link add name veth1 type veth peer name veth1_ovs

このコマンドで、veth1、veth1_ovsという名称の仮想インタフェースを持つveth peerが出来上がります。
"ip link"とコマンドを実行すると、この2つの仮想インタフェースが表示されます。

次に、Nodeに相当するNetwork Namespaceを生成して、上で作成したveth peerでOpenFlow Switchと接続します。

1)veth1_nodeという名前のNamespaceを生成
# ip netns add veth1_node

2)veth1_nodeに、veth peerの仮想インタフェースveth1を接続
# ip link set veth1 netns veth1_node

3)仮想インタフェースveth1にIPアドレスを定義
# ip netns exec veth1_node ip addr add 10.0.0.1/24 dev veth1

4)OpenFlow Switchであるofbr0に、veth peerの仮想インタフェースveth1_ovsを接続
# ovs-vsctl add-port ofbr0 veth1_ovs

"ip netns"が、Network Namespaceに対する操作を行う際のコマンドだと思ってください。
"ip netns exec veth1_node..."は、Network Namespace上でコマンドを実行する際に使用します。
上の例では、Network Namespace上でipコマンドを実行して、veth1にIPアドレスを設定しています。

最後にveth peerの仮想インタフェースをLink Upにして完了です。

# ip netns exec veth1_node ip link set veth1 up
# ip link set veth1_ovs up

以上でNodeの生成は完了ですが、図にあるものを手で打つのも大変なので、以下のシェルスクリプトを実行すると、図にあるNodeが生成することが出来ます。

#!/bin/bash

#
# Network Name Space とOVS間のPeer生成
#
create_ovs_veth ()
{
    veth_ovs="veth"${2}"_ovs"
    veth="veth"${2}
    veth_node="veth"${2}"_node"
    ip_addr="10.0.0."${2}"/24"
    brg_name=${1}

    echo "veth_ovs=${veth_ovs} veth=${veth} veth_node=${veth_node} ip_addr=${ip_addr} brg_name=${brg_name}"

    # delete
    ovs-vsctl del-port $brg_name $veth_ovs
    ip netns del $veth_node
    ip link del $veth_ovs

    # add
    ip link add name $veth type veth peer name $veth_ovs
    ip netns add $veth_node
    ip link set $veth netns $veth_node
    ip netns exec $veth_node ip addr add $ip_addr dev $veth

    ovs-vsctl add-port $brg_name $veth_ovs
    ip netns exec $veth_node ip link set $veth up
    ip link set $veth_ovs up

    ip netns exec $veth_node ip addr
}

# ofbr0にNode生成
array0=("1" "2" "3" "4")

for elem in "${array0[@]}"
do
    create_ovs_veth "ofbr0" $elem
done

# ofbr1にNode生成
array1=("11" "12" "13" "14")

for elem in "${array1[@]}"
do
    create_ovs_veth "ofbr1" $elem
done

# ofbr2にNode生成
array2=("21" "22" "23" "24")

for elem in "${array2[@]}"
do
    create_ovs_veth "ofbr2" $elem
done

シェルを実行するための手順は、以下の通りです。

# vi veth_setup.sh

上記の内容を入力して実行します。

# chmod a+x veth_setup.sh
# ./veth_setup.sh

このシェルによって、SDN内に10.0.0.*/24のIPアドレスを持つ疑似的なNodeが生成されます。

生成されているNetwork Namespace一覧を確認したい場合は、"ip netns"と実行します。

# ip netns
veth24_node
veth23_node
veth22_node
veth21_node
veth14_node
veth13_node
veth12_node
veth11_node
veth4_node
veth3_node
veth2_node
veth1_node

IPアドレスは、Network Namespace名称"veth**_node"の**部分が、10.0.0.**となるように設定されます。
例えば"veth14_node"の場合、"10.0.0.14"となります。
まぁ、シェルを修正すれば、好きなIPアドレスに変更することもできるので、色々いじってみてください :-)

ちなみに、生成したNetwork Namespaceのネットワーク設定の確認は、以下のように行います。
Network Namespaceに、どのIPアドレスが割り当てられているかを確認したい場合は、このコマンドを実行してみてください。

# ip netns exec veth1_node ip addr
1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
57: veth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 9a:3e:45:e4:9f:e2 brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.1/24 scope global veth1
       valid_lft forever preferred_lft forever
    inet6 fe80::983e:45ff:fee4:9fe2/64 scope link
       valid_lft forever preferred_lft forever

【ちょっと補足】
今回、ipアドレスやLinkUpの設定にifconfigコマンドを使用せず、すべてipコマンドで行っています。
知っている方もいると思いますが、RHEL7/CentOS7ではnet-toolsそのものが廃止予定となっていて、iproute2パッケージに含まれているipコマンドやssコマンドに移行することが推奨されています。
実際RHEL7では標準でnet-toolsがインストールされていないため、ifconfigコマンドが使えない環境に当たることもあります...
そういう背景もあり、今回は明示的にifconfigコマンドを使用していません。
遅かれ早かれifconfigコマンドは使えなくなるので、早いうちにipコマンドに慣れておきましょう...

OpenDaylightを起動して実際にネットワークを見てみよう

前回のOpenDaylight 「Helium」をインストールしてみようの最後にある方法にしたがってOpenDaylightを起動し、画面を開いてみてください。
SDNの作成に成功していれば、ログイン後に以下のように3つのOpenFlow Switchが表示されます。

f:id:acro-engineer:20150524201120p:plain

Switchの下にopenflow:17と表示されているので、OpenFlow Switchとして認識されていることがわかります。
ちなみに17という数字は、OpenFlow Switchの作成時に16進数で設定したIDが10進数で表示されたものです。
この値で、どのSwitchなのかを区別します。

Switchが表示されているけど、Nodeが表示されていません...
これはまだ、NodeからMACアドレス解決のため通信が行われていないため、Switch側でNodeがどこに接続されているのかを認識できていないためです。
通常この認識は、APRによるMAC解決のパケットを利用しています。
OpenFlowでは、このARPパケットをコントローラ側に送ることで、SwitchのどのポートにどのNodeが接続されているかを関連付ける仕組みになっています。
これをよく「ポート学習」などと言っています。

それでは実際にpingを実行してARPによるMAC解決のための通信を行ってみましょう。
SDNとして正常に機能していれば、pingが通ります :-)

Nodeに対してpingを打ってみる

今回、NodeはNetwork Namespaceで疑似的に作成したので、pingはNetwork Namespace上で実行する必要があるので、以下のようにipコマンドを使って実行します。

# ip netns exec veth1_node ping 10.0.0.11
PING 10.0.0.11 (10.0.0.11) 56(84) bytes of data.
64 bytes from 10.0.0.11: icmp_seq=1 ttl=64 time=0.521 ms
64 bytes from 10.0.0.11: icmp_seq=2 ttl=64 time=0.200 ms
64 bytes from 10.0.0.11: icmp_seq=3 ttl=64 time=0.046 ms
64 bytes from 10.0.0.11: icmp_seq=4 ttl=64 time=0.037 ms
64 bytes from 10.0.0.11: icmp_seq=5 ttl=64 time=0.036 ms
...

この例では、veth1_node上で、10.0.0.11にpingを打っています。
ちゃんとpingが届いて、応答が返ってきているので、SDNの構築は成功です :-)

"ip netns exec [Namespace名] [Namespace上で実行するコマンド]"というパターンでpingを打つことで、OpenFlow Switchを通して、他のNamespace上の仮想インタフェースに対してpingが行われます。
このpingをすべてのNodeに対して行ったのち、先ほどの画面の「Reload」ボタンを押下すると、以下の画面のようにすべてのNodeが表示されるようになります。

f:id:acro-engineer:20150524203828p:plain

Switchの情報を確認してみよう

画面の「Nodes」タブを選択すると、接続されているSwitchの一覧が表示されます。

f:id:acro-engineer:20150524205643p:plain

この一覧の右側にある"Node Connectors"を選択すると、Switchのポート情報が表示されます。

f:id:acro-engineer:20150524210238p:plain

見てもらうとわかりますが、ポートごとのパケット量やエラーパケット数、ドロップパケット数が表示されているので、ある程度のネットワークの状況であれば、この画面で確認することが出来そうです :-)

OpenFlowのフローエントリを確認する方法

open vSwitchのコマンドを使って、OpenFlow Switchに設定されているOpenFlowのフローエントリを確認してみましょう。
設定されているフローエントリを見ることで、どのような制御が行われているのかを確認することができます :-)

# ovs-ofctl dump-flows ofbr0 --protocol=OpenFlow13
OFPST_FLOW reply (OF1.3) (xid=0x2):
cookie=0x2a00000000000001, duration=5.648s, table=0, n_packets=5, n_bytes=490, idle_timeout=1800, hard_timeout=3600, priority=10,dl_src=ae:8a:bd:a4:7e:f7,dl_dst=7a:9c:01:d3:a1:46 actions=output:2
cookie=0x2a00000000000000, duration=5.648s, table=0, n_packets=5, n_bytes=490, idle_timeout=1800, hard_timeout=3600, priority=10,dl_src=7a:9c:01:d3:a1:46,dl_dst=ae:8a:bd:a4:7e:f7 actions=output:1
cookie=0x2b0000000000000d, duration=51.144s, table=0, n_packets=0, n_bytes=0, priority=2,in_port=3 actions=output:1,output:7,output:2,output:4,CONTROLLER:65535
cookie=0x2b0000000000000c, duration=51.145s, table=0, n_packets=0, n_bytes=0, priority=2,in_port=7 actions=output:1,output:3,output:2,output:4
cookie=0x2b0000000000000b, duration=51.146s, table=0, n_packets=7, n_bytes=574, priority=2,in_port=1 actions=output:7,output:3,output:2,output:4,CONTROLLER:65535
cookie=0x2b0000000000000f, duration=51.144s, table=0, n_packets=0, n_bytes=0, priority=2,in_port=4 actions=output:1,output:7,output:3,output:2,CONTROLLER:65535
cookie=0x2b0000000000000e, duration=51.144s, table=0, n_packets=7, n_bytes=574, priority=2,in_port=2 actions=output:1,output:7,output:3,output:4,CONTROLLER:65535
cookie=0x2b00000000000004, duration=56.289s, table=0, n_packets=12, n_bytes=1044, priority=100,dl_type=0x88cc actions=CONTROLLER:65535

この内容を見る限り、"CONTROLLER:65535"によってポート学習用のパケットがコントローラに送られており、dl_src、dl_dstのMACアドレスのパケットが届いた場合に特定のポートに転送するフローエントリーが登録されていました。これはOpenFlowでL2スイッチを実現するための定番の動作です。
ここからも、正常にSDNとして機能していることが確認できました :-)


そんなわけで、3回に分けて「OpenDaylight Heliumを試してみました」をやってみましたが、いかがだったでしようか?
昨今、NFVに注目が集まってきており、今まで物理マシンで実現していたネットワーク機器にまでも仮想化の波が押し寄せるようになってきました。
このNFVの制御部分にSDNコントローラが使われるケースも出てきており、Open Platform for NFV (OPNFV)ではOpenDaylightが使用されています。

今回のブログをきっかけに、仮想ネットワークやSDNに興味を持ってもらえれば幸いです :-)

それではまたの機会に~~

Acroquest Technologyでは、キャリア採用を行っています。


  • 日頃勉強している成果を、Hadoop、Storm、NoSQL、HTML5/CSS3/JavaScriptといった最新の技術を使ったプロジェクトで発揮したい。
  • 社会貢献性の高いプロジェクトに提案からリリースまで携わりたい。
  • 書籍・雑誌等の執筆や対外的な勉強会の開催を通した技術の発信や、社内勉強会での技術情報共有により、技術的に成長したい。
  • OSSの開発に携わりたい。

 
少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。
 キャリア採用ページ

OpenDaylight Helium SR3を試してみた 【OpenDaylight 「Helium」をインストールしてみよう】

こんにちは、こんばんは miyakeです :-)
GW開け早々、まだ5月なのに台風が来たり、真夏のような暑さになったりしているなか、いかがお過ごしでしょうか...

今回は「OpenDaylight Helium SR3を試してみた」の2回目、「OpenDaylight 「Helium」をインストールしてみよう」です。

http://www.opendaylight.org/sites/all/themes/opendaylight/ixm/images/logo_opendaylight.png

 前回:OpenDaylight 「Helium」 概要編
 今回:OpenDaylight 「Helium」をインストールしてみよう < イマココ
 次回:OpenDaylight 「Helium」でSDNを構築してみよう

インストール環境の準備

今回、OpenDaylight 「Helium」はCentOS7にインストールします。
DebianUbuntuの方は....ごめんなさい...
あと、最新のFedoraではOpenJDK1.7のパッケージが用意されていなかったので、出来るだけCentOS7にしてください。
試してはいませんが、CentOS6.5以降でも動作するはずです。

なお、ここではCentOS7のインストール手順は説明しませんので、WebからOSのインストール手順を調べて、VirtualBoxなどを使って仮想マシンを構築してCentOS7をインストールしてください。
CentOS7をインストールする際に出てくる「ソフトウェアの選択」の設定は、”最小限のインストール”のままでOKです。
ネットワークインタフェース(NIC)については1つで十分ですが、インターネットに接続できるようIPアドレスGatewayDNSの設定をしておいてください。

それから、OpenDaylightを実行するためのユーザを追加しておいてください。
rootユーザでもOpenDaylightを実行出来ますが、root権限でアプリケーションを実行するのも気持ち悪いので...

OSの準備ができたら、以下の手順でOpenDaylight をインストールするための準備を行います。
なお、以下の手順はyumでパッケージのインストールなどを行うので、root権限で実行してください。

yum update

まずはOSを最新の状態に更新します。

# yum -y update

SELinuxの無効化

open vSwitchのデータベースデーモン(ovsdb-server)との接続などに影響するので、SELinuxを無効化します。
完全に停止(Disabled)するのも抵抗があるので、ここではPermissiveに設定します。

まずはコマンドでPermissiveに設定します。

# setenforce 0
# getenforce
Permissive

OS再起動後もPermissiveになるよう、/etc/selinux/configの設定項目、SELINUXを、enforcingからpermissiveに変更します。

# vi /etc/selinux/config

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=permissive <-- ここを変更する

...

OpenJDK、Mavenインストール

OpenDaylightはJavaで開発されているので、JDKのインストールが必要になります。
前回のブログにも書いていますが、OpenDaylightがまだJava8に対応できていないため、OpenJDK 7をインストールします。

インストールは以下のように行います。

# yum install java-1.7.0-openjdk

OpenJDKのインストールが終わったら、次はMavenのインストールです。
OpenDaylightインストールのところで説明するプラグイン(Feature)のインストールでは、裏でMavenが使用されているので、事前にMavenをインストールします。

# yum install maven

※会社など、Proxy経由でインターネットにアクセスしている環境では、MavenのProxy設定を行っていないと、OpenDaylightのプラグインインストールが出来ないので注意してください。

open vSwitchインストール

次回のSDN構築用に、事前にopen vSwitchをインストールしておきます :-)
通常、open vSwitchはリポジトリに含まれていないので、ソースコードからrpmパッケージをビルドしてインストールするのですが、ちょっと面倒なので、RDOリポジトリに登録されているopen vSwitchパッケージをインストールします。

[補足]
いきなり出てきたRDOですが、これはRedHat主体で運営している、RedHatディストリビューション用OpenStackコミュニティです。
OpenStackの仮想ネットワークの下回りはopen vSwitchがほぼ標準になっているので、RDOのリポジトリ(まぁ、厳密にはFedoraの下にあるのですが...)にパッケージとして登録されています。
※本気でOpenStackをサービスで使い始めると、open vSwitchでは性能が出ないので、他の手段を使う様になるんですけどね...

インストールは以下のように、RDOのリポジトリ情報を登録してから、open vSwitchのインストールを行います。

# yum install https://repos.fedorapeople.org/repos/openstack/openstack-juno/rdo-release-juno-1.noarch.rpm
# yum install openvswitch

インストールが完了したら、open vSwitchサービスの有効化と、起動を行います。

# systemctl enable openvswitch.service
# systemctl start openvswitch.service

open vSwitchサービスが正しく起動しているかどうかは、statusで確認します。

#  systemctl status openvswitch.service
openvswitch.service - Open vSwitch
   Loaded: loaded (/usr/lib/systemd/system/openvswitch.service; enabled)
   Active: active (exited) since 日 2015-05-17 16:55:09 JST; 2min 23s ago
  Process: 1555 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
Main PID: 1555 (code=exited, status=0/SUCCESS)
   CGroup: /system.slice/openvswitch.service

5月 17 16:55:09 ******.localdomain systemd[1]: Starting Open vSwitch...
5月 17 16:55:09 ******.localdomain systemd[1]: Started Open vSwitch.

ここで使っているsystemctlコマンドですが、CentOS6.x以前(RHEL6以前)を使用している人には馴染みがないかもしれませんが、CentOS7(RHEL7)からサービスの管理するシステムがSystemdに変更されたことに伴い、サービス管理コマンドがsystemctlに変更されています。
RHEL系で仕事をしていると、遅かれ早かれSystemdの洗礼を受けることになるので、今のうちに慣れておきましょう。

それでは以下のコマンドで、インストールされたopen vSwitchのバージョンを確認します。

# ovs-vsctl -V
ovs-vsctl (Open vSwitch) 2.3.1
Compiled Dec 26 2014 15:35:14
DB Schema 7.6.2

2.3.1は、最新のバージョン(http://openvswitch.org/releases/)をベースにビルドされているもののようなので、問題なさそうです :-)

OpenDaylight 「Helium」インストール

それではこれから、本命のOpenDaylight 「Helium」をインストールします。
なおOpenDaylightのインストールは、OpenDaylightを実行するユーザで行ってください。
※プロンプトが"#"から"$"になっていることに注意してください...

JAVA_HOMEの設定

OpenDaylightは、環境変数JAVA_HOMEで指定されているJavaJVM)を使用して起動します。
このため環境変数JAVA_HOMEを設定します。

$ export JAVA_HOME=/etc/alternatives/jre_1.7.0_openjdk

環境変数JAVA_HOMEの設定を、.bashrcに追加しておきます。

$ vi .bashrc

# .bashrc
....
# Uncomment the following line if you don't like systemctl's auto-paging feature:
# export SYSTEMD_PAGER=
export JAVA_HOME=/etc/alternatives/jre_1.7.0_openjdk  <-- 追加
....

OpenDaylightインストール

それではこれから、OpenDaylight「Helium」SR3をインストールします :-)

まずはOpenDaylightのサイトからイメージファイル(zip)をダウンロードしてから解凍します。
※ここではホームディレクトリに解凍していますが、ホームディレクトリ配下であれば、どこに解凍してもOKです

$ wget https://nexus.opendaylight.org/content/groups/public/org/opendaylight/integration/distribution-karaf/0.2.3-Helium-SR3/distribution-karaf-0.2.3-Helium-SR3.zip
$ unzip distribution-karaf-0.2.3-Helium-SR3.zip
$ mv distribution-karaf-0.2.3-Helium-SR3 opendaylight 

これでOpenDaylight本体のインストールは完了です :-)
あとは、OpenDaylightを起動させて、SDNコントローラとしての基本的なプラグイン(Feature)のインストールを行います。
まずはOpenDaylightの起動です。

$ cd opendaylight
$ ./bin/karaf

    ________                       ________                .__  .__       .__     __
    \_____  \ ______   ____   ____ \______ \ _____  ___.__.|  | |__| ____ |  |___/  |_
     /   |   \\____ \_/ __ \ /    \ |    |  \\__  \<   |  ||  | |  |/ ___\|  |  \   __\
    /    |    \  |_> >  ___/|   |  \|    `   \/ __ \\___  ||  |_|  / /_/  >   Y  \  |
    \_______  /   __/ \___  >___|  /_______  (____  / ____||____/__\___  /|___|  /__|
            \/|__|        \/     \/        \/     \/\/            /_____/      \/


Hit '<tab>' for a list of available commands
and '[cmd] --help' for help on a specific command.
Hit '<ctrl-d>' or type 'system:shutdown' or 'logout' to shutdown OpenDaylight.

opendaylight-user@root>

OpenDaylightの起動が完了すると、"opendaylight-user@root"というプロンプトが表示されます。
インストール直後の起動時は、初期化などが行われるため、起動か完了するまで数分かかることがあります。

OpenDaylightを終了させる場合は、「Ctrl+d」と押下するか、logoutとコマンドを実行します。

それでは、次に基本的なプラグイン(Feature)をインストールします。
まずは初期段階にインストールされているFeatureを、"feature:list -i"を実行して確認してみます。

opendaylight-user@root>feature:list -i
Name       | Version | Installed | Repository     | Description
------------------------------------------------------------------------------------------------------
standard   | 3.0.1   | x         | standard-3.0.1 | Karaf standard feature
config     | 3.0.1   | x         | standard-3.0.1 | Provide OSGi ConfigAdmin support
package    | 3.0.1   | x         | standard-3.0.1 | Package commands and mbeans
kar        | 3.0.1   | x         | standard-3.0.1 | Provide KAR (KARaf archive) support
ssh        | 3.0.1   | x         | standard-3.0.1 | Provide a SSHd server on Karaf
management | 3.0.1   | x         | standard-3.0.1 | Provide a JMX MBeanServer and a set of MBeans in K
opendaylight-user@root>

これだけではSDNコントローラとして機能しないので、OpenFlowPluginやGUIのDLUX、L2Switchとして動作させるためのFeatureをインストールします。

opendaylight-user@root>feature:install odl-dlux-core odl-restconf odl-mdsal-apidocs odl-l2switch-switch
....

opendaylight-user@root>

これで、依存する他のFeatureを含めてインストールが完了します。
実際にどのようなFeatureがインストールされているか確認しましょう。

opendaylight-user@root>feature:list -i
Name                             | Version          | Installed | Repository                              | Description                          
--------------------------------------------------------------------------------------------------------------------------------------------------------------
....
odl-aaa-authn                    | 0.1.3-Helium-SR3 | x         | odl-aaa-0.1.3-Helium-SR3                | OpenDaylight :: AAA :: Authentication
odl-l2switch-switch              | 0.1.3-Helium-SR3 | x         | l2switch-0.1.3-Helium-SR3               | OpenDaylight :: L2Switch :: Switch   
odl-l2switch-hosttracker         | 0.1.3-Helium-SR3 | x         | l2switch-0.1.3-Helium-SR3               | OpenDaylight :: L2Switch :: HostTracker
odl-l2switch-addresstracker      | 0.1.3-Helium-SR3 | x         | l2switch-0.1.3-Helium-SR3               | OpenDaylight :: L2Switch :: AddressTracker
odl-l2switch-arphandler          | 0.1.3-Helium-SR3 | x         | l2switch-0.1.3-Helium-SR3               | OpenDaylight :: L2Switch :: ArpHandler
odl-l2switch-loopremover         | 0.1.3-Helium-SR3 | x         | l2switch-0.1.3-Helium-SR3               | OpenDaylight :: L2Switch :: LoopRemover
odl-l2switch-packethandler       | 0.1.3-Helium-SR3 | x         | l2switch-0.1.3-Helium-SR3               | OpenDaylight :: L2Switch :: PacketHandler
odl-mdsal-common                 | 1.1.3-Helium-SR3 | x         | odl-config-0.2.8-Helium-SR3             | OpenDaylight :: Config :: All        
odl-config-api                   | 0.2.8-Helium-SR3 | x         | odl-config-0.2.8-Helium-SR3             | OpenDaylight :: Config :: API        
odl-config-netty-config-api      | 0.2.8-Helium-SR3 | x         | odl-config-0.2.8-Helium-SR3             | OpenDaylight :: Config :: Netty Config API
odl-config-core                  | 0.2.8-Helium-SR3 | x         | odl-config-0.2.8-Helium-SR3             | OpenDaylight :: Config :: Core       
odl-config-manager               | 0.2.8-Helium-SR3 | x         | odl-config-0.2.8-Helium-SR3             | OpenDaylight :: Config :: Manager    
odl-config-netty                 | 0.2.8-Helium-SR3 | x         | odl-config-persister-0.2.8-Helium-SR3   | OpenDaylight :: Config-Netty         
odl-mdsal-broker                 | 1.1.3-Helium-SR3 | x         | odl-mdsal-1.1.3-Helium-SR3              | OpenDaylight :: MDSAL :: Broker      
odl-flow-model                   | 1.1.3-Helium-SR3 | x         | odl-flow-1.1.3-Helium-SR3               | OpenDaylight :: Flow :: Model        
odl-flow-services                | 1.1.3-Helium-SR3 | x         | odl-flow-1.1.3-Helium-SR3               | OpenDaylight :: Flow :: Services     
odl-openflowjava-protocol        | 0.5.3-Helium-SR3 | x         | odl-openflowjava-0.5.3-Helium-SR3       | OpenDaylight :: Openflow Java :: Protocol
odl-config-persister             | 0.2.8-Helium-SR3 | x         | odl-config-persister-0.2.8-Helium-SR3   | OpenDaylight :: Config Persister     
odl-config-startup               | 0.2.8-Helium-SR3 | x         | odl-config-persister-0.2.8-Helium-SR3   | OpenDaylight :: Config Persister:: Config Startup
odl-restconf                     | 1.1.3-Helium-SR3 | x         | odl-controller-1.1.3-Helium-SR3         | OpenDaylight :: Restconf             
odl-restconf-noauth              | 1.1.3-Helium-SR3 | x         | odl-controller-1.1.3-Helium-SR3         | OpenDaylight :: Restconf             
odl-mdsal-apidocs                | 1.1.3-Helium-SR3 | x         | odl-controller-1.1.3-Helium-SR3         | OpenDaylight :: MDSAL :: APIDOCS     
odl-protocol-framework           | 0.5.3-Helium-SR3 | x         | odl-protocol-framework-0.5.3-Helium-SR3 | OpenDaylight :: Protocol Framework   
odl-yangtools-models             | 0.6.5-Helium-SR3 | x         | odl-yangtools-0.6.5-Helium-SR3          | OpenDaylight :: Yangtools :: Models  
odl-yangtools-data-binding       | 0.6.5-Helium-SR3 | x         | odl-yangtools-0.6.5-Helium-SR3          | OpenDaylight :: Yangtools :: Data Binding
odl-yangtools-binding            | 0.6.5-Helium-SR3 | x         | odl-yangtools-0.6.5-Helium-SR3          | OpenDaylight :: Yangtools :: Binding 
odl-yangtools-common             | 0.6.5-Helium-SR3 | x         | odl-yangtools-0.6.5-Helium-SR3          | OpenDaylight :: Yangtools :: Common  
odl-yangtools-binding-generator  | 0.6.5-Helium-SR3 | x         | odl-yangtools-0.6.5-Helium-SR3          | OpenDaylight :: Yangtools :: Binding Generator
odl-dlux-core                    | 0.1.3-Helium-SR3 | x         | odl-dlux-0.1.3-Helium-SR3               |                                      
odl-netconf-api                  | 0.2.8-Helium-SR3 | x         | odl-netconf-0.2.8-Helium-SR3            | OpenDaylight :: Netconf :: API       
odl-netconf-mapping-api          | 0.2.8-Helium-SR3 | x         | odl-netconf-0.2.8-Helium-SR3            | OpenDaylight :: Netconf :: Mapping API
odl-netconf-util                 | 0.2.8-Helium-SR3 | x         | odl-netconf-0.2.8-Helium-SR3            |                                      
odl-netconf-impl                 | 0.2.8-Helium-SR3 | x         | odl-netconf-0.2.8-Helium-SR3            | OpenDaylight :: Netconf :: Impl      
odl-config-netconf-connector     | 0.2.8-Helium-SR3 | x         | odl-netconf-0.2.8-Helium-SR3            | OpenDaylight :: Netconf :: Connector 
odl-netconf-netty-util           | 0.2.8-Helium-SR3 | x         | odl-netconf-0.2.8-Helium-SR3            | OpenDaylight :: Netconf :: Netty Util
odl-netconf-monitoring           | 0.2.8-Helium-SR3 | x         | odl-netconf-0.2.8-Helium-SR3            | OpenDaylight :: Netconf :: Monitoring
pax-jetty                        | 8.1.14.v20131031 | x         | org.ops4j.pax.web-3.1.0                 | Provide Jetty engine support         
pax-http                         | 3.1.0            | x         | org.ops4j.pax.web-3.1.0                 | Implementation of the OSGI HTTP Service
pax-http-whiteboard              | 3.1.0            | x         | org.ops4j.pax.web-3.1.0                 | Provide HTTP Whiteboard pattern support
pax-war                          | 3.1.0            | x         | org.ops4j.pax.web-3.1.0                 | Provide support of a full WebContainer
odl-openflowplugin-southbound    | 0.0.6-Helium-SR3 | x         | openflowplugin-0.0.6-Helium-SR3         | OpenDaylight :: Openflow Plugin :: SouthBound
odl-openflowplugin-flow-services | 0.0.6-Helium-SR3 | x         | openflowplugin-0.0.6-Helium-SR3         | OpenDaylight :: Openflow Plugin :: Flow Services
opendaylight-user@root>

依存関係のあるものを含めて、かなりの数のFeatureがインストールされました。
これで、次回のSDN構築に必要なFeatureのインストールが完了しました。

それでは実際に、OpenDaylightのGUI画面を開いてみましょう。

まず、Webブラウザから以下のURLにアクセスします。

http://[OpenDaylightをインストールしたマシンのIPアドレス]:8181/dlux/index.html

Featureのインストールが成功していれば、以下のログイン画面が表示されます。

f:id:acro-engineer:20150517183735j:plain

Usernameに"admin"、Passwordに"admin"と入力してLoginボタンを押すと、ログインに成功して以下のトポロジ画面が開きます。

f:id:acro-engineer:20150517184408j:plain


まだopen vSwitchの設定などを行っていないので、何も表示されていませんが、これでOpenDaylight 「Helium」のインストールは完了です :-)
ここまで来たらもう一息。
次回に紹介するSDN構築が成功すると、以下のようなトポロジが表示されるようになります。
f:id:acro-engineer:20150506184659j:plain

それでは、また次回をよろしくお願いします~

Acroquest Technologyでは、キャリア採用を行っています。


  • 日頃勉強している成果を、Hadoop、Storm、NoSQL、HTML5/CSS3/JavaScriptといった最新の技術を使ったプロジェクトで発揮したい。
  • 社会貢献性の高いプロジェクトに提案からリリースまで携わりたい。
  • 書籍・雑誌等の執筆や対外的な勉強会の開催を通した技術の発信や、社内勉強会での技術情報共有により、技術的に成長したい。
  • OSSの開発に携わりたい。

 
少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。
 キャリア採用ページ

OpenDaylight Helium SR3を試してみた 【OpenDaylight 「Helium」 概要編】

こんにちは、こんばんは miyakeです :-) みなさん、GWはいかがお過ごしでしたか?
私は、自転車でポタリングしたりしつつ、3/16にSR3がリリースされたOpenDaylight「Helium」のインストールをしたり、検証していました。

f:id:acro-engineer:20150506190724p:plain

そこで、GW中に色々調べたことを、3回に分けて書こうと思います :-)

 今回:OpenDaylight 「Helium」 概要編 < イマココ
 次回:OpenDaylight 「Helium」をインストールしてみよう
次々回:OpenDaylight 「Helium」でSDNを構築してみよう

今回は、OpenDaylight「Helium」の概要について説明します。

OpenDaylight「Helium」ってなに?

まずOpenDaylightですが、これはおおざっぱに言ってしまえば、オープンソースのSDNコントローラを実現するためのフレームワークになります。
OpenDaylightの開発はLinux FoundationのOpenDaylight Projectによって進められていて、2014/2/4に初のリリースとなる「Hydrogen」を公開し、2014/9/29に「Helium」を公開しています。
今回インストールや検証を行ったのは、この「Helium」の3回目のリリースバージョンである、SR3になります。

SDNコントローラとは?

SDNコントローラという言葉に馴染みのない人も多いかと思うので、ここでちょっと簡単に説明します :-)

SDN(Software Defined Network)とは、名前のごとくソフトウェア(プログラム)によって動的に設定/制御することが可能なネットワークの事であり、SDNコントローラとは、そのSDNを制御するための機能やサービスの事を指します。

従来のネットワークとSDNのどこが違うのか?というと、
従来のネットワークは、L2、L3スイッチやルータなどの装置によって構成されており、これらの装置ごとに個別に設定を行うことでネットワークが構築されていました。
ネットワークの規模がそんなに大きくなければ、今までのネットワークでも問題はなかったのですが、ネットワークを構成する装置の台数が何十台、何百台にもなる大規模ネットワークが当たり前のようになってきている今日では、装置ごとに個別に設定をしてネットワークを構築することが困難になってきました。

で、この問題を解決する方法として、SDNが生まれました。

SDNでは、今までのように、、ネットワークを構成する装置ごとに設定しなくて済むよう、SDNコントローラでネットワーク全体の設定/制御をまとめられるようにしました。
また、今までネットワーク装置側で行っていたネットワーク制御処理部分をSDNコントローラで行う様になっています。こうすることで、ネットワーク全体の制御を、SDNコントローラ内のプログラムで行えるようになります。
コントローラ側で、プログラムによってネットワークを制御しようという考え方が、「Software Defined Network」という名前の由来にもなっています。

このSDNという言葉が一般的になってきたのは、OpenFlowという仕様に準拠したネットワーク機器が出てきたころで、だいたい5年ぐらい前からになります。

次々回の「OpenDaylight 「Helium」で仮想ネットワークを構築してみよう」では、このOpenFlow仕様に準拠しているopen vSwitchとOpenDaylightを使って、実際にSDNを構築してみます :-)

OpenDaylightの概要

OpenDaylight 本家サイト
OpenDaylight | A Linux Foundation Collaborative Project

OpenDaylightの概要ですが、本家サイトのSoftware | OpenDaylightにある、以下の図にすべてが凝縮されています :-)

f:id:acro-engineer:20150510130028p:plain

この図の、「Controller Platform」の部分がコントローラの中心になるところで、ネットワークを制御するプログラムがプラグインとしてまとめられています。
プラグインを開発して「Controller Platform」に登録することで、OpenDaylightに独自のネットワーク制御処理を追加することができます。

「Southbound Interface&Protocol Plugins」の部分が、実際のネットワーク機器への制御を行うためのプラグインと、「Controller Platform」からの制御を受け付けるインタフェース(一般的にSouthbound APIと呼ばれている)を提供しています。
このProtocol Pluginも開発して登録することができるので、特殊なネットワーク機器に対応する必要が出てきた場合は、Protocol Pluginを開発することで対応することが出来るようになります。

外部からOpenDaylightに対して制御を行う場合は、OpenDaylight APIs(REST APIを通して行います。
このAPIも、必要であればプラグインとして独自APIを追加できるようになっています。

OpenDaylightは、SDNコントローラを実現するために必要なフレームワークプラグインを提供しており、これらを用いて、自分たちの目的に合ったSDNコントローラを実現することができます。

なお、OpenDaylightフレームワークプラグイン機能にはOSGiが使用されており、現バージョンの「Helium」では「Apache Karaf」が使用されています。karaf.apache.org

「Helium」で変わったこと

OpenDaylightの情報をWeb上で調べる時、最初にリリースされた「Hydrogen」と「Helium」の違いを知っていると色々便利なので、「Hydrogen」から「Helium」になって、大きく変わった点について簡単にまとめてみました。

リリースイメージが一本化された

「Hydrogen」では、利用ケースに合わせて以下の3つのリリースイメージがリリースされていました。

  1. 個人や学術機関向けの「Base Edition」
  2. データセンター向けの「Virtualization Edition」
  3. 通信事業者やサービス事業者向けの「Service Provider Edition」

「Helium」からは、1つのリリースイメージに統一され、必要な機能(Feature)を選んでインストールする仕様に変わりました。

OSGiフレームワークがKarafに変更された

「Hydrogen」では、OSGiフレームワークに「Apache Felix Framework+Eclipse Equinox」が使用されていましたが、「Helium」から「Apach Karaf」に変更されました。
Eclipse Equinoxは、Javaプログラム開発でおなじみの、Eclipse内のプラグイン機構のフレームワークです :-)

GUIがDULXに変更された

「Helium」から、GUIが「DLUX」に変更され、「Hydrogen」のGUIから大きな変更がありました。
以下が、「DLUX」で表示されたネットワーク構成図です。
f:id:acro-engineer:20150506184659j:plain
「Hydrogen」のものと比べると、まだ発展途上な感じで、今後の機構拡張に期待です。

その他注意点など

OpenDaylight「Helium」のインストールなどを行う上で注意する点について、簡単にまとめました。

Java8に対応していない

OpenDaylight「Helium」SR3をインストールする際、Java8への対応状況を確認したところ、まだJava8では動作しませんでした。
「Apach Karaf」の3.0.1は、すでにJava8に対応しているで、OpenDaylightのコア部分の問題だと思われます。

以下が実際に実行した時の出力で、無条件にMaxPermSizeを設定して起動していることが原因の警告が出ています。
起動スクリプト自体、まだJava8に対応していないことがこれでわかります。

[miyake@centos7-dev opendaylight]$ ./bin/karaf
OpenJDK 64-Bit Server VM warning: ignoring option MaxPermSize=512m; support was removed in 8.0

    ________                       ________                .__  .__       .__     __
    \_____  \ ______   ____   ____ \______ \ _____  ___.__.|  | |__| ____ |  |___/  |_
     /   |   \\____ \_/ __ \ /    \ |    |  \\__  \<   |  ||  | |  |/ ___\|  |  \   __\
    /    |    \  |_> >  ___/|   |  \|    `   \/ __ \\___  ||  |_|  / /_/  >   Y  \  |
    \_______  /   __/ \___  >___|  /_______  (____  / ____||____/__\___  /|___|  /__|
            \/|__|        \/     \/        \/     \/\/            /_____/      \/


Hit '<tab>' for a list of available commands
and '[cmd] --help' for help on a specific command.
Hit '<ctrl-d>' or type 'system:shutdown' or 'logout' to shutdown OpenDaylight.

opendaylight-user@root>list
Error executing command: java.lang.NullPointerException
opendaylight-user@root>

起動したあと、"list"コマンドを実行したらNullPointerExceptionが出るなど、正常に起動していませんでした....orz

試しにMaxPermSizeを外して起動してみたのですが、コマンドを打った段階でNullPointerExceptionになってしまった...orz

プラグイン開発の方式が色々変更されている

少し実装寄りの細かい話になってしまいますが、Helium向けにプラグインを開発する際、内部のデータモデルにアクセスするクラスライブラリのクラス名称やAPIが大きく変更されていました。
このためWeb上で公開されている、「Hydrogen」の頃に書かれているコードやサンプルはコンパイル時にエラーになるため、そのまま使用することができなくなっています。

また、OpenDaylightのプラグイン方式である、AD-SALとMD-SALの2つのうち、MD-SALへの移行が促されています。
OpenDaylight Controller:MD-SAL:Application Migration Guide - Daylight Project

これは、「Controller Platform」で提供しているモデルへのアクセス方式に統一することで、プラグイン間でデータの共有、統一がとれるようにすることを目的としているようです。
今後、独自プラグインを開発する際は、MD-SAL方式で開発することが必要とされると思われます。


次回は、OpenDaylight Helium SR3のインストール手順などを説明します :-)
それでは。

Acroquest Technologyでは、キャリア採用を行っています。


  • 日頃勉強している成果を、Hadoop、Storm、NoSQL、HTML5/CSS3/JavaScriptといった最新の技術を使ったプロジェクトで発揮したい。
  • 社会貢献性の高いプロジェクトに提案からリリースまで携わりたい。
  • 書籍・雑誌等の執筆や対外的な勉強会の開催を通した技術の発信や、社内勉強会での技術情報共有により、技術的に成長したい。
  • OSSの開発に携わりたい。

 
少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。
 キャリア採用ページ

Marionette.js 2.4 で AppRouter を使う方法

こんにちは。masudaです。

今日はBackbone.js 上のフレームワークであるMarionette.jsについて
小ネタを書こうと思います。

f:id:acro-engineer:20150421200915p:plain


最近、仕事でお世話になることが多いMarionette.jsですが、
Marionette.jsの公式ドキュメントを確認していたところ
Marionette.Controllerがdeprecatedとなっていました。

Warning: deprecated. The Controller object is deprecated. Instead of using the Controller
class with the AppRouter, you should specify your callbacks on a plain Javascript object.

http://marionettejs.com/docs/v2.4.1/marionette.controller.html


ControllerはMarionette.AppRouterの処理を呼び出す為のモジュールだから、
AppRouterも使用しないということですかね?

でも、AppRouterはdeprecatedになっていませんね。


web上のサンプル実装を見ても探した限りでは
Marionette.Controllerを使用しているものがほとんどで、
よくわからないので調べました。


結論としては、JavaScriptのObjectを使用する」が正しいようです。

確かに、上述の警告文にも、よくよく見ると、書いてますね^^;


AppRouterのサンプルでも、その通りになっています。

var someController = {
  someMethod: function(){ /*...*/ }
};

Backbone.Marionette.AppRouter.extend({
  controller: someController
});

http://marionettejs.com/docs/v2.4.1/marionette.approuter.html


Controllerがdeprecatedになった経緯は以下ではないかと思います。

  1. 2.1以前には、Marionete.Controllerが存在していたが、MVCフレームワークのControllerと異なる使い方であり紛らわしかった。
  2. 2.1以降では、Marionette.Object が導入され、Controllerの代わりに使うようになった。
  3. 結果的に、Marionete.ControllerがAppRouter呼び出しだけに使用するものになったため、2.4でdeprecatedにした。

Prior Usage

Before Marionette 2.1, the Controller had another use, which was a general-purpose, white-label object. This was confusing given its other use within the Router, and its name, which carries so much meaning in the context of MVC frameworks.

As of v2.1, a new Class is available for your use: Marionette.Object. We recommend using Marionette.Object instead of Marionette.Controller in all situations outside of the Router.

http://marionettejs.com/docs/v2.4.1/marionette.controller.html

Marionette.js 2.4 以降を使う皆さんは、注意してください。

Acroquest Technologyでは、キャリア採用を行っています。

  • 日頃勉強している成果を、Hadoop、Storm、NoSQL、HTML5/CSS3/JavaScriptといった最新の技術を使ったプロジェクトで発揮したい。
  • 社会貢献性の高いプロジェクトに提案からリリースまで携わりたい。
  • 書籍・雑誌等の執筆や対外的な勉強会の開催を通した技術の発信や、社内勉強会での技術情報共有により、技術的に成長したい。
  • OSSの開発に携わりたい。

 
少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。
 キャリア採用ページ

Java Day Tokyo 2015に参加してきました。

Java Day Tokyo 2015 に参加してきました!!

みなさん、こんばんは。
fujiiです。

4/8(水) にJava Day Tokyo 2015に参加してきました。

f:id:acro-engineer:20150408084632j:plain

今年は、Java 20周年 ということもあり、イベントが多かった印象です。


簡単ですが、Java Day Tokyo 2015 の様子を紹介していきたいと思います♪

Keynote

f:id:acro-engineer:20150408085724j:plain

Java8の機能説明や、Javaの展望、デモなど、何人かのスピーカーが交代しながら、説明していました。
JDK 9 は来年リリース予定のようですね。

f:id:acro-engineer:20150408095105j:plain

JavaOneでも紹介されていたJava Car も説明してもらえました。
IoTデバイスが組み込まれた車がサーバと連携して、車を制御してくれるとのことです。

自分の車がJavaで制御されていると、改造したくなりそうです(^O^)

f:id:acro-engineer:20150408093014j:plain

Java SDK for Pepperが出るということで、Pepperも登場しました!!

ますます、Pepperが欲しくなりますね!

■セッション

Java8やJavaEEを中心に話を聞いてきました♪

セッションの詳細については、Twitterやブログを見れば、だいたい紹介されているので、詳細は割愛します。

f:id:acro-engineer:20150408153755j:plain

当社の谷本も、

人気番組との戦い! Javaシステムのパフォーマンス・チューニング奮闘記

というテーマで発表させていただきました!!


■セッションの裏でも

セッションの裏でも企画がありました。

f:id:acro-engineer:20150410031901j:plain

NIGHT HACKINGの収録では、

・末永恭正氏
鈴木雄介
・岩崎浩文氏

といったJava会の著名人に加え、当社の谷本もインタビューを受けました!


Java Day Tokyo 2015 | NightHacking


f:id:acro-engineer:20150408143823j:plain

こちらは、O'REILLY本の販売コーナー。

f:id:acro-engineer:20150410033255j:plain

本日、4/10(金)発売の「Javaパフォーマンス」本の先行販売も行われており、
監訳者の寺田佳央氏と当社の谷本が買ってくれた人に、
サインをするサービスもありました!!

もちろん、私もサインをもらいました^^;


また、中身が豊富・解説が詳細で、すべてのJavaエンジニアにオススメの一冊です。

Amazon.co.jp: Javaパフォーマンス: Scott Oaks, アクロクエストテクノロジー株式会社(監訳), 寺田 佳央(監訳), 牧野 聡: 本



Java 20周年記念セッション

f:id:acro-engineer:20150408175505j:plain

最後は、Java 20周年記念セッション!


Javaに関するクイズ大会で盛り上がってきました。



他のセッションも含め、盛り沢山な内容でした。


次回も是非、行きたいと思います♪

Acroquest Technologyでは、キャリア採用を行っています。


  • 日頃勉強している成果を、Hadoop、Storm、NoSQL、HTML5/CSS3/JavaScriptといった最新の技術を使ったプロジェクトで発揮したい。
  • 社会貢献性の高いプロジェクトに提案からリリースまで携わりたい。
  • 書籍・雑誌等の執筆や対外的な勉強会の開催を通した技術の発信や、社内勉強会での技術情報共有により、技術的に成長したい。
  • OSSの開発に携わりたい。

 
少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。
 キャリア採用ページ

3分でできる!Google CodeからGitHubへの移行

こんにちは、ツカノ(@)です。

f:id:acro-engineer:20150407062904p:plain

先日、Google Codeが2016年1月に閉鎖されると発表されました。
長年使っており残念だ、と言う方もいらっしゃると思いますが、時代の流れでしょうか。
Google Codeにホスティングしている方は、忘れないうちにGitHub等への移行が必要です。

幸いにもツールが用意されているため、いくつかの制約を許容すれば、3分で移行できます
そこで、今回はGoogle Code上のコードをGitHubへ移行してみましょう。

実際に、移行してみましょう

ここでは、Google Codeにある「mibible」というプロジェクトを例に説明します。
事前に、Google Code、GitHubにログインしているものとします。

それではまず、移行したいGoogle Codeのページに行きましょう。
すると、「Export to GitHub」というボタンが表示されています。これを押しましょう。
f:id:acro-engineer:20150407064304j:plain


簡単な説明画面に遷移するため、ここで「Start Export」を押しましょう。
f:id:acro-engineer:20150407064311j:plain


GitHub側の認証画面が表示されますので、「Authorize application」を押しましょう。
f:id:acro-engineer:20150407064713j:plain


確認画面が表示されます。「Confirm」を押しましょう。
f:id:acro-engineer:20150407064719j:plain


Google CodeからGitHubへの移行が開始されます。
f:id:acro-engineer:20150407064335j:plain


しばらく待てば、完了します。
f:id:acro-engineer:20150407064344j:plain


GitHubを覗いてみると、、、おっ移行できてますね。
f:id:acro-engineer:20150407064359j:plain

とても、簡単に移行できました。
巨大なプロジェクトでもなければ、時間的にも3分あれば移行できると思います。

制約について

とても簡単に移行できましたが、制約もあります。
気付いた点を記しておきます。

  • 一部の文字が、文字化けした
  • GitHubのコミット者はGoogle Code側のアカウント名になる
  • issuesの作成者は「GoogleCodeExporter」になる。

上記は移行データだけの問題ですので、そのあとGitHubで作業を進める上では問題ありません。
Google Codeのアカウント名と、GitHubのアカウント名が異なる場合は、ちょっと残念ですが。


それではまた、OSSライフを楽しんでください~

Acroquest Technologyでは、キャリア採用を行っています。


  • 日頃勉強している成果を、Hadoop、Storm、NoSQL、HTML5/CSS3/JavaScriptといった最新の技術を使ったプロジェクトで発揮したい。
  • 社会貢献性の高いプロジェクトに提案からリリースまで携わりたい。
  • 書籍・雑誌等の執筆や対外的な勉強会の開催を通した技術の発信や、社内勉強会での技術情報共有により、技術的に成長したい。
  • OSSの開発に携わりたい。

 
少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。
 キャリア採用ページ

ENdoSnipe5.2の新機能紹介

f:id:acro-engineer:20150218031813p:plain

こんにちは、fujiiです。


かれこれ1年ぶりになりましたが、ENdoSnipeをバージョンアップし、ver5.2をリリースしました!
そこで今回はENdoSnipe5.2の新機能を紹介したいと思います。
おっと、その前に「ENdoSnipeって何?」という方は、技術評論社さんのサイトの連載を読んで、ENdoSnipeについて復習しましょう!


今回のリリースはDashboard機能の強化をメインに行っています。


それでは、さっそく紹介していきますね。

グラフ機能強化

グラフ機能を強化し、グラフを任意にカスタマイズできるようになりました。

ツリーの任意の要素を右クリックし、「Add Multiple Resource Graph」
というメニューを選ぶことで、グラフの追加ができます。

f:id:acro-engineer:20150218025558p:plain

表示する系列を指定する方法には、系列指定(Graph Selection)正規表現指定(Regular Expression)の2つがあります。

系列指定では、表示されている任意のグラフを選択し、好きなグラフを作ることができます。

正規表現指定では、正規表現で系列の指定ができます。

f:id:acro-engineer:20150215232010p:plain

サマリしたいグラフが複数あるときには、正規表現で指定する方が便利ですね。

閾値判定機能

ENdoSnipeで取得したデータをグラフにするだけでなく、予め設定した閾値を超えたことをシグナルとして表示する機能を追加しました。

ツリーの任意の要素を右クリックし、「Add Signal」
というメニューを選ぶことで、設定ができます。

シグナルの種類は、3段階(3Level)と5段階(5Level)の2種類から選ぶことができ、
設定した閾値を超えるごとに、

(緑)→黄→(橙)

のように色が変わります。

f:id:acro-engineer:20150218030934p:plain


設定が完了すると、ツリーにシグナルが生成され、
閾値を超えると色が変わるようになります。

f:id:acro-engineer:20150218025439p:plain


シグナルを作っておくと、グラフを開かなくても、
問題のあるリソースを見ることができるので、便利ですね。

Dashboard

これまでに作成したグラフやシグナルをダッシュボードで表示できるようになりました。

画面右上の「Dashboard」ボタンを押すと、Dashboardが表示されます。

f:id:acro-engineer:20150216073214p:plain


デフォルトでは、以下を確認できるテンプレートを用意しています。

  1. システムのリソース使用状況
  2. Javaプロセスのリソース使用状況
  3. Javaアプリケーションの性能
  4. Webアプリケーションの性能
  5. DBに対するアクセス状況


もちろん、表示したいグラフやシグナルを自由に配置するための編集機能もついています。

f:id:acro-engineer:20150218035717p:plain


編集機能を利用し、監視したい内容に合わせ、カスタマイズしてみてください!



今回紹介した機能の他に、ENdoSnipe5.2ではレポート機能の強化や実行計画表示機能なども行っています。


ENdoSnipeここからダウンロードできますので、是非感想等をお知らせください。

それでは。

Acroquest Technologyでは、キャリア採用を行っています。


  • 日頃勉強している成果を、Hadoop、Storm、NoSQL、HTML5/CSS3/JavaScriptといった最新の技術を使ったプロジェクトで発揮したい。
  • 社会貢献性の高いプロジェクトに提案からリリースまで携わりたい。
  • 書籍・雑誌等の執筆や対外的な勉強会の開催を通した技術の発信や、社内勉強会での技術情報共有により、技術的に成長したい。
  • OSSの開発に携わりたい。

 
少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。
 キャリア採用ページ