【SDNチャレンジ】 第5回 Raspberry Pi2にOpen vSwitchをインストール
2015.5.15
東京ビックサイトで開催中の組込みシステム開発技術展が、本日で最終日を迎えております。前回記事でご紹介をした弊社検証自動化デモの出展ブースには、これまで多くの方に来場を頂きました。本当にありがとうございます。
ご来場様にはデモを閲覧して頂くと同時に、日々の検証業務 の中で抱えていらっしゃる課題を共有して頂く機会も多々ありました。お話をさせて頂く中で、実際に以下の様なお悩みをお聞かせ頂きました。
「受託開発により開発~検証まで業務範囲が広がった分、社内で対応できない」
「Webシステムの開発で頻繁にバージョンUPが発生し、対応し切れない」
弊社の検証サービスでは、調査~設計のフェーズに基いたお客様の既存検証プロセスの最適化を目的としております。PJの実事例やツールとしてのCloudShellのご紹介を含め、少しでも参考として頂ける様な情報をお伝えできる様、受け答えをさせて頂いております。
今回構成したデモ環境で最も特徴的なのは、組込み用PCボードであるRaspberry P2iにOpen vSwitchのインストールし、OpenFlowスイッチとして動作させているという点です。実はこのOpen vSwitchは、Raspberry Pi2用OSとなるRaspbianにもパッケージ(weezyはバージョン1.4.2、jessieは2.3.0)は存在しますが、今回はあえて最新バージョンのインストールに挑戦しようと、githubにある最新版(2.3.9)からソースコンパイルをしました。
それでは以下手順に従い、Open vSwitchを作成してみましょう。
以下ブログ執筆時最新版のRaspbian(Release date:2015-05-05)をインストールした状態にて行いました。
・まずは利用可能なパッケージのリストを更新します。
$ sudo apt-get update
・カーネルのバージョンを確認します。(ここでは3.18.11-v7+)
$ uname -a
Linux raspberrypi 3.18.11-v7+ #781 SMP PREEMPT Tue Apr 21 18:07:59 BST 2015 armv7l GNU/Linux
・kernelのバージョン3.18.11-v7+に合わせて、linux-headersをインストールします。(今回インストールするパッケージは、個人が作成されたものを使用しました。)
$ wget http://www.niksula.hut.fi/~mhiienka/Rpi/linux-headers-rpi/linux-headers-3.18.11-v7%2b_3.18.11-v7%2b-2_armhf.deb
・kernel-headersのインストールに先駆け、必要なパッケージをインストールします。またインストールにgcc-4.7が使用されるように設定します。
$ sudo apt-get install gcc-4.7 dkms
$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.6 40
$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.7 50
・gccのバージョンが4.7になっていることを確認します。
$ gcc -v
gcc version 4.7.2 (Debian 4.7.2-5+rpi1)
・次にkernel-headersパッケージをインストールします。以下コマンドの後、多数問いかけられますが、全てデフォルトを選択しています。
$ sudo dpkg -i linux-headers-3.18.11-v7+_3.18.11-v7+-2_armhf.deb
・Open vSwitchのインストールのためにビルドツールをインストールし、更にgccのバージョンを4.8に変更します。
$ sudo apt-get install libtool autopoint gcc-4.8 cpp-4.8 automake autoconf libssl-dev
$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 60
$ gcc -v
gcc version 4.8.2 (Raspbian 4.8.2-21~rpi3rpi1)
・githubから最新版のOpen vSwitchを取得します。
$ git clone https://github.com/openvswitch/ovs.git
・以下、インストールコマンドを実行します。実行中は少し時間がかかることにご留意下さい。パッケージ不足や手順に間違い等がありますと、ここで処理が止まってしまいます。(実際、だいぶ手こずりました。。。)
$ cd ovs/
$ ./boot.sh
$ sudo ./configure --with-linux=/lib/modules/`uname -r`/build
$ sudo make
$ sudo make install
$ sudo insmod ./datapath/linux/openvswitch.ko
(ここでモジュールがロード出来ないという事象が起きました。その時は、kernelとkernel-headersのバージョンを変えて再ビルドし、何とかモジュールのインストールに成功したのですが、ここまで紹介した手順では今の所うまく行っています。)
・インストールドキュメントに従い、OpenvSwitchデーモンを起動します。
$ sudo mkdir -p /usr/local/etc/openvswitch
$ sudo ovsdb-tool create /usr/local/etc/openvswitch/conf.db vswitchd/vswitch.ovsschema
$ sudo ovsdb-server --remote=punix:/usr/local/var/run/openvswitch/db.sock --remote=db:Open_vSwitch,Open_vSwitch,manager_options --private-key=db:Open_vSwitch,SSL,private_key --certificate=db:Open_vSwitch,SSL,certificate --bootstrap-ca-cert=db:Open_vSwitch,SSL,ca_cert --pidfile --detach
$ sudo ovs-vsctl --no-wait init
$ sudo ovs-vswitchd --pidfile --detach
・ブリッジを作成します。
$ sudo ovs-vsctl add-br br1
$ ifconfig
(実際にブリッジが作成されていることを確認します。)
作成されたブリッジ(br1)は、Raspberry Pi2を再起動すると原因不明で、消えてしまいます。これでは不便なので、/etc/rc.localファイルを「sudo vi」コマンドで編集し、以下のコマンドを追加し、Raspberry Pi2の起動時に自動的に実行するようにしました。(以下のソースコードの右上にマウスを置くと、テキストファイルにコピーできます)
sudo insmod /home/pi/ovs/datapath/linux/openvswitch.ko sudo ovsdb-server --remote=punix:/usr/local/var/run/openvswitch/db.sock \ --remote=db:Open_vSwitch,Open_vSwitch,manager_options \ --private-key=db:Open_vSwitch,SSL,private_key \ --certificate=db:Open_vSwitch,SSL,certificate \ --bootstrap-ca-cert=db:Open_vSwitch,SSL,ca_cert \ --pidfile --detach sudo ovs-vsctl --no-wait init sudo ovs-vswitchd --pidfile --detach
/etc/network/interfacesファイルを「sudo vi」コマンドで編集して、ネットワークの設定も行いましょう。
eth0には、IPアドレスを192.168.137.251/24とデフォルトゲートウェイを192.168.137.1に設定します。Raspberry Pi2はDHCPを実行しているので、DHCPパケットを送信しないように、全てのポートを静的(static)に設定します。
#iface eth0 inet manual iface eth0 inet static address 192.168.137.251 netmask 255.255.255.0 gateway 192.168.137.1 iface eth1 br1 static iface eth1 inet static iface eth2 inet static iface eth3 inet static iface eth4 inet static
・ブリッジの作成/確認ができたら、OpenFlowコントローラへ接続をしてみましょう。
$ sudo ovs-vsctl set-controller br1 tcp:(OpenFlowコントローラのIPアドレス):(ポート番号)
ここまでで、Open vSwitchの作成とOpenFlowコントローラへの接続できました。
これまでご紹介してきたOpenFlowコントローラ-Trema-にて接続確認をするコマンドは以下です。
(ここはTremaがインストールされたホストで実行して下さい。)
(Trema) $ trema run ./apps/show_switch_features/show-switch-features.rb
正常にインストールが完了しましたでしょうか。
上記インストール手順に至るまでは躓く箇所も多く苦労もしましたが、その分少しでも皆さんの参考にして頂ければと思い、今回ご紹介をさせて頂きました。
最後までお付き合いを頂き、ありがとうございました。
Raspberryと同じカテゴリーの記事
- 【SDNチャレンジ】 第21回 POX編
- 【SDNチャレンジ】 第20回 Floodlight編
- 【SDNチャレンジ】 第19回 Raspberry Piでユースケースに挑戦!
- 【SDNチャレンジ】 第15回 Open vSwitch性能試験編
- 【SDNチャレンジ】 第14回 Tcpreplay編
SDN/NFVと同じカテゴリーの記事
- 【SDNチャレンジ】 第21回 POX編
- 【OpenStackチャレンジ】 第2回 コンポーネント紹介編
- 【SDNチャレンジ】 第20回 Floodlight編
- 【OpenStackチャレンジ】 第1回 Kiloインストール編
- 【SDNチャレンジ】 第19回 Raspberry Piでユースケースに挑戦!
Tremaと同じカテゴリーの記事
- 【SDNチャレンジ】 第9回 リピーターハブとラーニングスイッチの動作比較編
- 【SDNチャレンジ】 第8回 Tremasharkインストール編
- 【SDNチャレンジ】 第7回 帯域制御・ファイアウォール・パケット書換え編
- 【SDNチャレンジ】 第6回 ラーニングスイッチ作成編
- 【SDNチャレンジ】 第5回 Raspberry Pi2にOpen vSwitchをインストール