CoreLinux で OvS をビルド・インストールする
CoreLinux 環境で Open vSwitch(以下、OvS)を使えるようにビルドしてみました。手間を考慮し、スクリプト化してあります。
前提条件
OvS 等はソースコードからビルドし、.tcz 形式にパッケージングします。ビルドは KVM 上の CoreLinux で実行しましたが、以下の条件を満たしている必要があります。
- Python が必要
- メモリが 2GB 以上(メモリ 1GB だと容量不足で OvS がビルド出来ませんでした)
OvS のビルド
以下を実行します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50 | #!/bin/sh
export BUILD_ROOT="/home/tc"
export OVS_VERSION="2.4.0"
# Downoad packages.
tce-load -wi autoconf automake compiletc libtool-dev linux-kernel-sources-env openssl-1.0.1-dev perl5 squashfs-tools
wget http://tcztools.googlecode.com/hg/tcztools.tcz
tce-load -i tcztools
# Create build environment.
linux-kernel-sources-env.sh
# Download OvS.
cd ${BUILD_ROOT}
wget http://openvswitch.org/releases/openvswitch-${OVS_VERSION}.tar.gz
tar zxvf openvswitch-${OVS_VERSION}.tar.gz
cd openvswitch-${OVS_VERSION}
# Build OvS.
./boot.sh
./configure --with-linux=/lib/modules/`uname -r`/build
make
mkdir ${BUILD_ROOT}/openvswitch
make DESTDIR=${BUILD_ROOT}/openvswitch PREFIX=/ install
sudo make modules_install
cd ${BUILD_ROOT}/openvswitch
mkdir -p lib/modules/`uname -r`/extra/
sudo cp -a /lib/modules/`uname -r`/extra/*.ko lib/modules/`uname -r`/extra/
cd ${BUILD_ROOT}
sudo su
echo /mnt/sda1/tce > /opt/.tce_dir
cat > openvswitch.tcz.info <<EOF
Title: openvswitch.tcz
Description: openvswitch
Version: ${OVS_VERSION}
Author: Many
Original-site: http://www.openvswitch.org
Copying-policy: Apache 2.0
Size: ----
Extension_by: [NAME]
Comments: Built for TC 6.3
EOF
# Packaging...
tcz-pack openvswitch
# Result.
ls -alh /home/tc/openvswitch.tcz.info
ls -alh /tmp/tcztools/openvswitch.*
|
bridge-utils のビルド
以下を実行します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 | #!/bin/sh
export BUILD_ROOT="/home/tc"
export OVS_VERSION="2.4.0"
export BUILD_ROOT="/home/tc"
export BRIDGE_UTILS_VERSION="1.5"
# Download bridge-utils.
cd ${BUILD_ROOT}
wget http://sourceforge.net/projects/bridge/files/bridge/bridge-utils-${BRIDGE_UTILS_VERSION}.tar.gz
tar xzvf bridge-utils-${BRIDGE_UTILS_VERSION}.tar.gz
cd bridge-utils-${BRIDGE_UTILS_VERSION}
# Build bridge-utils.
sed -i 's/<linux\/if.h>/<linux\/if.h>\n#include <linux\/in6.h>/g' libbridge/libbridge.h
autoconf
./configure
make
mkdir -p ${BUILD_ROOT}/bridge-utils
make DESTDIR=${BUILD_ROOT}/bridge-utils install
cd ${BUILD_ROOT}
cat > bridge-utils.tcz.info <<EOF
Title: bridge-utils.tcz
Description: bridge-utils
Version: ${BRIDGE_UTILS_VERSION}
Author: Many
Original-site: http://sourceforge.net/projects/bridge
Copying-policy: GPL 2.0
Size: ----
Extension_by: [NAME]
EOF
# Packaging...
sudo tcz-pack bridge-utils
# Result.
ls -alh /home/tc/bridge-utils.tcz.info
ls -alh /tmp/tcztools/bridge-utils.*
|
tunctl のビルド
以下を実行します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 | #!/bin/sh
export BUILD_ROOT="/home/tc"
export TUNCTL_VERSION="1.5"
# Download tunctl.
cd ${BUILD_ROOT}
wget http://downloads.sourceforge.net/project/tunctl/tunctl/${TUNCTL_VERSION}/tunctl-${TUNCTL_VERSION}.tar.gz
tar xzvf tunctl-${TUNCTL_VERSION}.tar.gz
cd tunctl-${TUNCTL_VERSION}
# Build tunctl.
touch tunctl.8
make
mkdir -p ${BUILD_ROOT}/tunctl
make DESTDIR=${BUILD_ROOT}/tunctl install
cd ${BUILD_ROOT}
cat > tunctl.tcz.info <<EOF
Title: tunctl.tcz
Description: tunctl
Version: ${TUNCTL_VERSION}
Author: Many
Original-site: http://sourceforge.net/projects/tunctl
Copying-policy: GPL 2.0
Size: ----
Extension_by: [NAME]
EOF
# Packaging...
sudo tcz-pack tunctl
# Result.
ls -alh /home/tc/tunctl.tcz.info
ls -alh /tmp/tcztools/tunctl.*
|
作成したパッケージのインストール
ビルドに使ったのとは別の CoreLinux へ、作成したパッケージをインストールします。OvS が libatomic を必要とするので gcc_libs をインストールしておきます。ついでに IPv6 用のパッケージもインストールしておきます。
| tce-load -wi \
gcc_libs.tcz \
ipv6-3.16.6-tinycore.tcz
|
ここまでの手順で以下を作成しているはずです。これらを scp や wget を使って /mnt/sda1/tce/optional にコピーしておきます。.info ファイルは /home/tc に、それ以外のファイルは /tmp/tcztools/ 配下にあるはずです。
- bridge-utils
- bridge-utils.tcz
- bridge-utils.tcz.info
- bridge-utils.tcz.list
- bridge-utils.tcz.md5.txt
- OvS
- openvswitch.tcz
- openvswitch.tcz.info
- openvswitch.tcz.list
- openvswitch.tcz.md5.txt
- tunctl
- tunctl.tcz
- tunctl.tcz.info
- tunctl.tcz.list
- tunctl.tcz.md5.txt
起動時にコピーしたパッケージが読み込まれるよう、/mnt/sda1/tce/onboot.lst に追記しておきます。
| echo bridge-utils.tcz >> /mnt/sda1/tce/onboot.lst
echo openvswitch.tcz >> /mnt/sda1/tce/onboot.lst
echo tunctl.tcz >> /mnt/sda1/tce/onboot.lst
|
この後の手順で OvS 用の初期設定ファイルを作成します。OvS をロードさせる為に一旦、再起動します。
| sync ; sync ; sync ; reboot
|
再起動が完了したら作業を継続します。OvS の設定ファイル置き場(/usr/local/etc/openvswitch/)を作成して初期設定ファイルを作成し、そのファイルが再起動後も維持されるように永続化しておきます。
| sudo mkdir -p /usr/local/etc/openvswitch/
sudo ovsdb-tool create /usr/local/etc/openvswitch/conf.db
echo "/usr/local/etc/openvswitch/" >> /opt/.filetool.lst
|
OS 起動時に実行が必要なコマンドを /opt/bootlocal.sh に追記しておきます。
- 起動時に必要なモジュールを読み込ませる
- OvS を起動する
- カーネルパラメータを修正し、ルーティングを有効化する
具体的には /opt/bootlocal.sh へ以下を追記しておきます。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 | modprobe openvswitch
modprobe 8021q
modprobe ipv6
/usr/local/sbin/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
/usr/local/bin/ovs-vsctl --no-wait init
/usr/local/sbin/ovs-vswitchd --pidfile --detach
sysctl -w net.ipv4.ip_forward=1
sysctl -w net.ipv6.conf.all.forwarding=1
|
設定変更内容をバックアップします。
これで作業完了です。OS をシャットダウンします。
| sync ; sync ; sync ; poweroff
|
使い方
OvS の実行例は以下の通りです。構成や目的に応じて適宜、修正します。
| ovs-vsctl add-br br0
ovs-vsctl add-port br0 eth2
ovs-vsctl add-port br0 eth3
ovs-vsctl set bridge br0 protocols=OpenFlow13
ovs-vsctl set bridge br0 other-config:datapath-id=0000000000000001
ovs-vsctl set-controller br0 tcp:192.168.1.1:6633
|
参考