CoreLinux 環境で Open vSwitch(以下、OvS)を使えるようにビルドしてみました。手間を考慮し、スクリプト化してあります。
完成イメージ
今回、ビルドするパッケージは以下からダウンロード出来ます。
パッケージを追加した CoreLinux 6.3 イメージは以下からダウンロード出来ます。
ユーザ名「tc」、パスワード「password」でログイン出来ます。
前提条件
OvS 等はソースコードからビルドし、.tcz 形式にパッケージングします。ビルドは KVM 上の CoreLinux で実行しましたが、以下の条件を満たしている必要があります。
- Python が必要
- メモリが 2GB 以上(メモリ 1GB だと容量不足で OvS がビルド出来ませんでした)
OvS のビルド
以下を実行します。
#!/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 のビルド
以下を実行します。
#!/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 のビルド
以下を実行します。
#!/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 に追記しておきます。
具体的には /opt/bootlocal.sh へ以下を追記しておきます。
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
設定変更内容をバックアップします。
filetool.sh -b
これで作業完了です。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