Ubuntu-12.04.3にopenvswitch-2.0.0をインストール

Posted on 2013/11/16(Sat) 01:51 in technical

概要

色々と新しくなっているので、 Ubuntu-12.04.4 + openvswitch-2.1.0のインストール手順 も合わせて見てくださいな。

それにほら、もうUbuntu-12.04.3のISOを手に入れるのも難しいでしょ?

とりあえず、僕も流行に流されてopenvswitchのインストール記事を書いてみようと思う。

あれ程Wordpress嫌だPelicanにしたいのー!って言ってた割にネタが出来ると先に記事を書くとか反省が足りない。

さて。

例によってUbuntu-12.04 server amd64にopenvswitch-2.0.0をインストールしてポート作って眺める程度。

前回、Ubuntu-13.10を持ってきて楽しようとしたらVXLANが動かなかった ので、そもそもまともにやれば動くんですか?ってところを確認する意図が大きい。

では、以下ログです。

カーネルモジュール以外のパッケージ作成とインストールはINSTALL.Debianに従います。

# uname -a
Linux ubuntu 3.8.0-33-generic #48~precise1-Ubuntu SMP Thu Oct 24 16:28:06 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
# cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=12.04
DISTRIB_CODENAME=precise
DISTRIB_DESCRIPTION="Ubuntu 12.04.3 LTS"
# wget http://openvswitch.org/releases/openvswitch-2.0.0.tar.gz
# tar zxvf openvswitch-2.0.0.tar.gz
# rm openvswitch-2.0.0.tar.gz
# cd openvswitch-2.0.0/
# apt-get install build-essential fakeroot
# dpkg-checkbuilddeps
dpkg-checkbuilddeps: Unmet build dependencies: debhelper (>= 8) autoconf (>= 2.64) automake (>= 1.10) | automake1.10 libssl-dev python-all (>= 2.6.6-3~) python-qt4 python-twisted-conch
# apt-get install debhelper autoconf automake libssl-dev python-all python-qt4 python-twisted-conch
# dpkg-checkbuilddeps
# fakeroot debian/rules binary
# cd ..
# dpkg -i openvswitch-common_2.0.0-1_amd64.deb openvswitch-switch_2.0.0-1_amd64.deb

警告

もし、fakeroot debian/rules binaryの1回目に失敗したら、もう1回同じコマンド叩いてやれば通るかもしれない。

カーネルモジュール以外はここまででいいんだけど、 前回の結果を見る通り OVSが対応しててもカーネルモジュールが対応してないとエラー吐いてポート追加されません。

カーネルモジュールの作成とインストールはINSTALLに従います。

# cd openvswitch-2.0.0/
# ./boot.sh
Can't exec "libtoolize": No such file or directory at /usr/bin/autoreconf line 196.
Use of uninitialized value in pattern match (m//) at /usr/bin/autoreconf line 196.
# apt-get install libtool autopoint
# ./configure --with-linux=/lib/modules/`uname -r`/build
# make
# ls -la ./datapath/linux/openvswitch.ko
-rw-r--r-- 1 root root 6362070 Nov 16 00:55 ./datapath/linux/openvswitch.ko

とりあえず最初から入ってるモジュールと比較してみる。

# modinfo openvswitch
filename:       /lib/modules/3.8.0-33-generic/kernel/net/openvswitch/openvswitch.ko
license:        GPL
description:    Open vSwitch switching datapath
srcversion:     15C32AD9E04F379CAC3D68E
depends:
intree:         Y
vermagic:       3.8.0-33-generic SMP mod_unload modversions
# modinfo ./datapath/linux/openvswitch.ko
filename:       ./datapath/linux/openvswitch.ko
version:        2.0.0
license:        GPL
description:    Open vSwitch switching datapath
srcversion:     BCA57909B6F92E9C5D40249
depends:        libcrc32c,gre
vermagic:       3.8.0-33-generic SMP mod_unload modversions

INSTALLに書いてあるとおりにインストールしようとする。

# make modules_install
cd datapath/linux && make modules_install
make[1]: Entering directory `/root/openvswitch-2.0.0/datapath/linux'
make -C /lib/modules/3.8.0-33-generic/build M=/root/openvswitch-2.0.0/datapath/linux modules_install
make[2]: Entering directory `/usr/src/linux-headers-3.8.0-33-generic'
  INSTALL /root/openvswitch-2.0.0/datapath/linux/openvswitch.ko
Can't read private key
  DEPMOD  3.8.0-33-generic
make[2]: Leaving directory `/usr/src/linux-headers-3.8.0-33-generic'
depmod `sed -n 's/#define UTS_RELEASE "\([^"]*\)"/\1/p' /lib/modules/3.8.0-33-generic/build/include/generated/utsrelease.h`
make[1]: Leaving directory `/root/openvswitch-2.0.0/datapath/linux'

http://www.mail-archive.com/discuss@openvswitch.org/msg08005.html によれば、既にあるからエラー吐いてるだけだよ、って話。

動くか確認。

# rmmod openvswitch
# modprobe gre
# modprobe libcrc32c
# insmod ./datapath/linux/openvswitch.ko

読み込みまで問題ないので、任意で置き換えてしまう。

# mv /lib/modules/3.8.0-33-generic/kernel/net/openvswitch/openvswitch.ko /lib/modules/3.8.0-33-generic/kernel/net/openvswitch/openvswitch.ko.org
# mv ./datapath/linux/openvswitch.ko /lib/modules/3.8.0-33-generic/kernel/net/openvswitch/openvswitch.ko
# echo "gre" >> /etc/modules
# echo "libcrc32c" >> /etc/modules
# echo "openvswitch" >> /etc/modules

今回はVXLANのポートもちゃんと追加できるといいなぁ、と思ってたら割とすんなり動いたので一安心。

# ovs-vsctl add-br ovs-01
# ovs-vsctl add-port ovs-01 gre0 -- set interface gre0 type=gre options:remote_ip=192.168.56.101
# ovs-vsctl add-port ovs-01 vxlan0 -- set interface vxlan0 type=vxlan options:remote_ip=192.168.56.101 options:key=101
# ovs-ofctl show ovs-01
OFPT_FEATURES_REPLY (xid=0x2): dpid:0000163ad2c0374b
n_tables:254, n_buffers:256
capabilities: FLOW_STATS TABLE_STATS PORT_STATS QUEUE_STATS ARP_MATCH_IP
actions: OUTPUT SET_VLAN_VID SET_VLAN_PCP STRIP_VLAN SET_DL_SRC SET_DL_DST SET_NW_SRC SET_NW_DST SET_NW_TOS SET_TP_SRC SET_TP_DST ENQUEUE
 1(gre0): addr:2e:fd:1c:ef:51:cb
     config:     0
     state:      0
     speed: 0 Mbps now, 0 Mbps max
 2(vxlan0): addr:f2:99:dd:1f:80:1f
     config:     0
     state:      0
     speed: 0 Mbps now, 0 Mbps max
 LOCAL(ovs-01): addr:f6:65:46:ab:07:df
     config:     PORT_DOWN
     state:      LINK_DOWN
     speed: 0 Mbps now, 0 Mbps max
OFPT_GET_CONFIG_REPLY (xid=0x4): frags=normal miss_send_len=0
# ovs-vsctl show
cf7b4728-6c31-4e90-af6d-6b7ac60b0844
    Bridge "ovs-01"
        Port "gre0"
            Interface "gre0"
                type: gre
                options: {remote_ip="192.168.56.101"}
        Port "ovs-01"
            Interface "ovs-01"
                type: internal
        Port "vxlan0"
            Interface "vxlan0"
                type: vxlan
                options: {key="101", remote_ip="192.168.56.101"}
    ovs_version: "2.0.0"
# ovs-dpctl show
system@ovs-system:
        lookups: hit:2 missed:4 lost:0
        flows: 0
        port 0: ovs-system (internal)
        port 1: ovs-01 (internal)
        port 2: gre_system (gre: df_default=false, ttl=0)
        port 3: vxlan_sys_4789 (vxlan: df_default=false, ttl=0)
# tail -3 /var/log/openvswitch/ovs-vswitchd.log
2013-11-15T16:21:40.143Z|00009|memory|INFO|facets:3 ports:1 rules:4 subfacets:3
2013-11-15T16:21:56.821Z|00010|bridge|INFO|bridge ovs-01: added interface gre0 on port 1
2013-11-15T16:22:00.924Z|00011|bridge|INFO|bridge ovs-01: added interface vxlan0 on port 2

とりあえずここまで。