Trema 0.5.1をCentOSにインストールする。同時にOpen vSwitchもインストールする。
動作検証はHello Tremaを動かして、自分でadd-brしたブリッジもつなぐ。
なので、まだpacket_inは飛んでない。
まずは最新のCentOS 7系。比較的簡単に入る。
yumで入るものが2.0.0以上なのでそのまま使う。
$ sudo yum update
$ sudo yum install ruby ruby-devel gcc gcc-c++
$ ruby -v
2.0.0p598 (2014-11-13) [x86_64-linux]
$ gem -v
2.10.14
一緒に入れているgccなどは、あとでgem installするときに必要になるもの。
普通にyumしても入らないので、ソースコンパイル…でもいいのだが、CentOS 7の場合はRDOというOpenstack用のリポジトリを使うと簡単に入る。
$ sudo yum update
$ sudo yum install https://rdoproject.org/repos/rdo-release.rpm
$ sudo yum install openvswitch
$ ovs-vsctl --version
ovs-vsctl (Open vSwitch) 2.3.1
Compiled Dec 26 2014 15:35:14
DB Schema 7.6.2
$ sudo service openvswitch start
$ sudo gem install trema
$ trema --version
trema version 0.5.1
Hello Tremaを持ってくる。
$ sudo yum install git
$ git clone https://github.com/trema/hello_trema.git
$ cd hello_trema
$ bundle install
$ bundle exec trema run lib/hello_trema.rb -c trema.conf
Trema started.
Hello 0xabc!
OpenFlowのバージョンをちゃんと指定してあげないとコントローラが落ちた。
$ sudo ovs-vsctl add-br br0
$ sudo ovs-vsctl set-controller br0 tcp:127.0.0.1:6653
$ sudo ovs-vsctl set bridge br0 protocol=OpenFlow10
$ bundle exec trema run lib/hello_trema.rb -c trema.conf
Trema started.
Hello 0xabc!
Hello 0xc6a25ab7e04e!
これで、少なくともswitch_readyまでは動くことが確認できた。
次にCentOS 6系の32bit版。こっちはちょっと面倒。
Trema 0.5.1はRuby 2.0.0 or higherを要求するが、yumではバージョンが足りない。方法はいろいろ。
- rvmを使う
- rbenvを使う
- ソースを落としてコンパイルする
今回はソースコンパイルをする。実験時点で最新の2.2.3を入れる。
まずは各パッケージを最新の状態にして、必要なもの入れる。パッケージ群はrvmがコンパイルするときにインストールするものを参考にしている。
$ sudo yum update
$ sudo yum install wget
$ sudo yum install patch libyaml-devel glibc-headers autoconf gcc-c++ \
glibc-devel readline-devel zlib-devel libffi-devel openssl-devel automake \
libtool bison sqlite-devel
ソース落としてコンパイル&インストール
$ wget https://cache.ruby-lang.org/pub/ruby/2.2/ruby-2.2.3.tar.gz
$ tar zxvf ruby-2.2.3.tar.gz
$ cd ruby-2.2.3
$ ./configure
$ make
$ sudo make install
確認
$ ruby -v
ruby 2.2.3p173 (2015-08-18 revision 51636) [i686-linux]
$ gem -v
2.4.5.1
入った!
CentOS 6.7だとカーネルモジュールは既に入っていると思うので、確認してみる。
$ ls /lib/modules/$(uname -r)/kernel/net/openvswitch
openvswitch.ko
今回の環境だとRDOで入れる方法もなさそうだったので、別の方法を考える。
- ソースを落としてmakeでコンパイルする
- ソースを落としてrpmbuildでRPMをビルドし、yumでインストール
※64bitなら、RDOの過去のバージョンのリポジトリが使えるかもしれない。
普通にmakeでもいいが、せっかく公式にrpmbuildでのインストールガイドが作られているので、今回はこちらに挑戦してみる。バージョンは実験時点で最新の2.4.0。
以下手順。
まずは必要なもの入れる。一応Rubyインストールと重複するパッケージも書いておく。
$ sudo yum update
$ sudo yum install wget
$ sudo yum install gcc make python-devel openssl-devel kernel-devel graphviz \
kernel-debug-devel autoconf automake rpm-build redhat-rpm-config \
libtool
ソースを落としてきて、RPMをビルド&インストール。解凍後のINSTALL.RHEL.mdに手順が書いてある。
$ wget http://openvswitch.org/releases/openvswitch-2.4.0.tar.gz
$ tar zxvf openvswitch-2.4.0.tar.gz
$ mkdir -p ~/rpmbuild/SOURCES
$ cp openvswitch-2.4.0.tar.gz ~/rpmbuild/SOURCES
$ cd openvswitch-2.4.0
$ rpmbuild -bb rhel/openvswitch.spec
// ここでめっちゃ時間かかるので放置。--without checkを付けるとテストを省略できる
$ ls ~/rpmbuild/RPMS/i686
openvswitch-2.4.0-1.i686.rpm openvswitch-debuginfo-2.4.0-1.i686.rpm
$ sudo yum install ~/rpmbuild/RPMS/i686/openvswitch-2.4.0-1.i686.rpm
入ったか確認。
$ ovs-vsctl --version
ovs-vsctl (Open vSwitch) 2.4.0
Compiled Sep 3 2015 14:13:29
DB Schema 7.12.1
入った!サーバを起動しておく。
$ sudo service openvswitch start
いよいよTremaを入れる。といってもgem installするだけ。
$ sudo gem install trema
$ trema --version
trema version 0.5.1
Hello Tremaを動かしてみる。
$ sudo yum install git
$ git clone https://github.com/trema/hello_trema.git
$ cd hello_trema
$ bundle install
$ bundle exec trema run lib/hello_trema.rb -c trema.conf
net.ipv6.conf.br0xabc.disable_ipv6 = 1
error: "-q" must be of the form name=value
error: Open vSwitch (dpid = 2748) is already running!
/usr/local/lib/ruby/gems/2.2.0/gems/phut-0.6.6/lib/phut/open_vswitch.rb:48:in `rescue in run': Open vSwitch (dpid = 2748) is already running! (RuntimeError)
動かない…
phutのソースを見ると、中で実行してるsysctlのオプションの順番でコケてるっぽい。Issueを投げつつ、ひとまず手動で直してしまう。
sudo /sbin/sysctl -w net.ipv6.conf.#{bridge_name}.disable_ipv6=1 -q # これが動かない。
sudo /sbin/sysctl -q -w net.ipv6.conf.#{bridge_name}.disable_ipv6=1 # オプションの順番を変える。
エラーで落ちると/tmp/の下にpidが残ってたり、スイッチが作られたままになってたりするので、残ってる場合は消して、再チャレンジ。
$ rm /tmp/HelloTrema.pid
$ sudo ovs-vsctl del-br br0xabc
$ bundle exec trema run lib/hello_trema.rb -c trema.conf
Trema started.
Hello 0xabc!
いけたいけた。
こちらもOpenFlowのバージョンをちゃんと指定してあげないとコントローラが落ちた。
$ sudo ovs-vsctl add-br br0
$ sudo ovs-vsctl set-controller br0 tcp:127.0.0.1:6653
$ sudo ovs-vsctl set bridge br0 protocol=OpenFlow10
$ bundle exec trema run lib/hello_trema.rb -c trema.conf
Trema started.
Hello 0xabc!
Hello 0xa61e5690fa4d!
よしよし。