Skip to content

Instantly share code, notes, and snippets.

@betrue12
Last active September 13, 2017 00:37
Show Gist options
  • Save betrue12/c472df7f0545df478dcb to your computer and use it in GitHub Desktop.
Save betrue12/c472df7f0545df478dcb to your computer and use it in GitHub Desktop.
CentOSにTrema0.5.1をインストール

目的

Trema 0.5.1をCentOSにインストールする。同時にOpen vSwitchもインストールする。

動作検証はHello Tremaを動かして、自分でadd-brしたブリッジもつなぐ。

なので、まだpacket_inは飛んでない。


CentOS 7.1.1503

まずは最新のCentOS 7系。比較的簡単に入る。

Rubyインストール

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するときに必要になるもの。

OpenvSwitchインストール

普通に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

Tremaインストール

$ 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.7(32bit)

次にCentOS 6系の32bit版。こっちはちょっと面倒。

Rubyインストール

Trema 0.5.1はRuby 2.0.0 or higherを要求するが、yumではバージョンが足りない。方法はいろいろ。

  1. rvmを使う
  2. rbenvを使う
  3. ソースを落としてコンパイルする

今回はソースコンパイルをする。実験時点で最新の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

入った!

Open vSwtichインストール

CentOS 6.7だとカーネルモジュールは既に入っていると思うので、確認してみる。

$ ls /lib/modules/$(uname -r)/kernel/net/openvswitch
openvswitch.ko

今回の環境だとRDOで入れる方法もなさそうだったので、別の方法を考える。

  1. ソースを落としてmakeでコンパイルする
  2. ソースを落として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インストール

いよいよ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!

よしよし。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment