CentOS 6.2 に Open vSwitch をインストールする手順について。
rpm 化したほうが入れたり消したりが便利なので、全て rpm でのインストールです。
要点
- KVM + libvirtd での仮想化環境のホスト側仮想スイッチとして、デフォルトの Linux bridge の置き換えが目的
- すでにbridge構成なネットワークになっている仮想化環境を想定
- 全部 rpm でインストールする
ざっくりとこんな流れ
- 2.64 以降の autoconf をインストール
- Open vSwitch のビルドに必要なその他パッケージ(kernel-devel openssl-devel)をインストール
- Open vSwitch のrpmを作成、インストール
- Open vSwitch の設定
autoconf 2.68 を rpm でインストール
まず Open vSwitch のビルドに必要な autoconf の 2.64 以降、ここでは最新版の 2.68 を入れる。
checkinstall で rpm を作ってからのインストールになります。
(checkinstall のインストール手順は d:id:naga_sawa:20120410 の記事参照のこと)
まず autoconf の tar ball をダウンロードする。
$ wget http://ftp.gnu.org/gnu/autoconf/autoconf-2.68.tar.gz
--2012-04-03 12:02:05-- http://ftp.gnu.org/gnu/autoconf/autoconf-2.68.tar.gz
ftp.gnu.org をDNSに問いあわせています... 208.118.235.20, 2001:4830:134:3::b
ftp.gnu.org|208.118.235.20|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 1860672 (1.8M) [application/x-gzip]
`autoconf-2.68.tar.gz' に保存中
100%[======================================>] 1,860,672 441K/s 時間 4.1s
2012-04-03 12:02:10 (441 KB/s) - `autoconf-2.68.tar.gz' へ保存完了 [1860672/1860672]
展開して configure & make
$ tar zxf autoconf-2.68.tar.gz
$ cd autoconf-2.68
$ ./configure --prefix=/usr --libdir=/usr/lib64
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
(略)
config.status: creating lib/autoscan/Makefile
config.status: creating lib/m4sugar/Makefile
config.status: creating lib/autoconf/Makefile
config.status: creating lib/autotest/Makefile
config.status: creating bin/Makefile
config.status: executing tests/atconfig commands
$ make
(略)
chmod +x ifnames.tmp
chmod a-w ifnames.tmp
mv -f ifnames.tmp ifnames
make[2]: Leaving directory `/home/foobar/autoconf-2.68/tests'
Making all in man
make[2]: Entering directory `/home/foobar/autoconf-2.68/man'
make[2]: Nothing to be done for `all'.
make[2]: Leaving directory `/home/foobar/autoconf-2.68/man'
make[1]: Leaving directory `/home/foobar/autoconf-2.68'
checkinstall で RPM 作成。
既存パッケージと干渉する部分が出てくるので --inspect オプションを付けておく。
# checkinstall --inspect
お決まりの構築手順を進めると、 vi が起動してパッケージするファイルを変更できるので、binutils-2.20.51.0.2-5.28.el6.x86_64 と競合する以下2つを削除する。
- /usr/share/info/dir
- /usr/share/info/standards.info
何かしら問題出るかもしれないけど、手元の環境では今のところ問題なし。
バックアップパッケージを書き込み..OK
temp dirを削除..OK
**********************************************************************
Done. The new package has been saved to
/root/rpmbuild/RPMS/x86_64/autoconf-2.68-1.x86_64.rpm
You can install it in your system anytime using:
rpm -i autoconf-2.68-1.x86_64.rpm
**********************************************************************
できあがった autoconf をインストール。
# rpm -Uvh /root/rpmbuild/RPMS/x86_64/autoconf-2.68-1.x86_64.rpm
準備中... ########################################### [100%]
1:autoconf ########################################### [100%]
Open vSwitch のビルドに必要な既存パッケージをインストール
# yum install kernel-devel openssl-devel
Open vSwitch の make とインストール
Open vSwitch をダウンロード&展開
$ wget http://openvswitch.org/releases/openvswitch-1.4.0.tar.gz
--2012-04-12 14:05:32-- http://openvswitch.org/releases/openvswitch-1.4.0.tar.gz
openvswitch.org をDNSに問いあわせています... 69.56.251.103
openvswitch.org|69.56.251.103|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 1972471 (1.9M) [application/x-gzip]
`openvswitch-1.4.0.tar.gz' に保存中
100%[======================================>] 1,972,471 292K/s 時間 8.5s
2012-04-12 14:05:41 (226 KB/s) - `openvswitch-1.4.0.tar.gz' へ保存完了 [1972471/1972471]
$ tar zxf openvswitch-1.4.0.tar.gz
configure
$ cd openvswitch-1.4.0
$ ./boot.sh
$ ./configure --with-linux=/lib/modules/`uname -r`/build
(略)
config.status: creating datapath/linux/Makefile
config.status: creating datapath/linux/Makefile.main
config.status: creating tests/atlocal
config.status: creating config.h
config.status: executing tests/atconfig commands
config.status: executing depfiles commands
config.status: executing include/openflow/openflow.h.stamp commands
config.status: executing ovsdb/ovsdbmonitor/dummy commands
config.status: executing utilities/bugtool/dummy commands
make して Open vSwitch の rpm 作り。
$ make dist
(略)
make[1]: ディレクトリ `/home/foobar/openvswitch-1.4.0' に入ります
make[1]: ディレクトリ `/home/foobar/openvswitch-1.4.0' から出ます
test -n "" \
|| find "openvswitch-1.4.0" -type d ! -perm -755 \
-exec chmod u+rwx,go+rx {} \; -o \
! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
! -type d ! -perm -400 -exec chmod a+r {} \; -o \
! -type d ! -perm -444 -exec /bin/sh /home/foobar/openvswitch-1.4.0/build-aux/install-sh -c -m a+r {} {} \; \
|| chmod -R a+r "openvswitch-1.4.0"
tardir=openvswitch-1.4.0 && /bin/sh /home/foobar/openvswitch-1.4.0/build-aux/missing --run tar chof - "$tardir" | GZIP=--best gzip -c >openvswitch-1.4.0.tar.gz
{ test ! -d "openvswitch-1.4.0" || { find "openvswitch-1.4.0" -type d ! -perm -200 -exec chmod u+w {} ';' && rm -fr "openvswitch-1.4.0"; }; }
$ mkdir -p ~/rpmbuild/SOURCES
$ mv ./openvswitch-1.4.0.tar.gz ~/rpmbuild/SOURCES/
$ rpmbuild -bb --target=x86_64 rhel/openvswitch-kmod-rhel6.spec
(略)
伸張ファイルの検査中: /usr/lib/rpm/check-files /home/foobar/rpmbuild/BUILDROOT/openvswitch-kmod-1.4.0-1.el6.x86_64
警告: ホスト名を正式なものにできません: foobar.jp
書き込み完了: /home/foobar/rpmbuild/RPMS/x86_64/kmod-openvswitch-1.4.0-1.el6.x86_64.rpm
実行中(%clean): /bin/sh -e /var/tmp/rpm-tmp.bkfPrF
+ umask 022
+ cd /home/foobar/rpmbuild/BUILD
+ cd openvswitch-1.4.0
+ rm -rf /home/foobar/rpmbuild/BUILDROOT/openvswitch-kmod-1.4.0-1.el6.x86_64
+ exit 0
$ rpmbuild -bb --target=x86_64 rhel/openvswitch.spec
(略)
Processing files: openvswitch-debuginfo-1.4.0-1.x86_64
伸張ファイルの検査中: /usr/lib/rpm/check-files /home/foobar/rpmbuild/BUILDROOT/openvswitch-1.4.0-1.x86_64
警告: ホスト名を正式なものにできません: foobar.jp
書き込み完了: /home/foobar/rpmbuild/RPMS/x86_64/openvswitch-1.4.0-1.x86_64.rpm
書き込み完了: /home/foobar/rpmbuild/RPMS/x86_64/openvswitch-debuginfo-1.4.0-1.x86_64.rpm
実行中(%clean): /bin/sh -e /var/tmp/rpm-tmp.tgkPfe
+ umask 022
+ cd /home/foobar/rpmbuild/BUILD
+ cd openvswitch-1.4.0
+ rm -rf /home/foobar/rpmbuild/BUILDROOT/openvswitch-1.4.0-1.x86_64
+ exit 0
~/rpmbuild/RPMS/x86_64/ に 3 本の rpm が出来ているのでインストール
kmod-openvswitch で時間がかかるけど我慢
$ cd ..
$ ll rpmbuild/RPMS/x86_64/
kmod-openvswitch-1.4.0-1.el6.x86_64.rpm
openvswitch-1.4.0-1.x86_64.rpm
openvswitch-debuginfo-1.4.0-1.x86_64.rpm
$ cp rpmbuild/RPMS/x86_64/*.rpm .
# rpm -ivh kmod-openvswitch-1.4.0-1.el6.x86_64.rpm openvswitch-1.4.0-1.x86_64.rpm openvswitch-debuginfo-1.4.0-1.x86_64.rpm
準備中... ########################################### [100%]
1:kmod-openvswitch ########################################### [ 33%]
2:openvswitch ########################################### [ 67%]
3:openvswitch-debuginfo ########################################### [100%]
インストールされたのを確認
# ovs-vsctl -V
ovs-vsctl (Open vSwitch) 1.4.0
Compiled Apr 12 2012 14:17:32
CentOS6.2 のパッケージの libvirt 0.9.4 は OpenvSwitchにネイティブ対応していないので、/etc/sysconfig/openvswitch を修正して Linux bridge 互換機能を有効にする。
(brcompatdとbrcompat_modが有効になる…なってるんだと思う)
# vi /etc/sysconfig/openvswitch
+BRCOMPAT=yes ←最後に追記/もしくはコメント外す
既存のbridge設定の変更(現環境で bridge を使ってない人はスルーで)
# vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"
BOOTPROTO="none"
HWADDR="XX:XX:XX:XX:XX:XX"
ONBOOT="yes"
TYPE="Ethernet"
-BRIDGE="br0" ←これを消す ovs 側で設定するので
既存 Linux bridge を止める。
(既にbridge環境導入済みで br_x にアドレスが振ってある場合はネットワークが切れるのでリモート作業している場合は注意)
# rmmod bridge
再起動
# reboot
動作確認
$ lsmod | grep openvswitch
openvswitch_mod 83029 1
$ chkconfig --list | grep openvswitch
openvswitch 0:off 1:off 2:on 3:on 4:on 5:on 6:off
$ /etc/init.d/openvswitch status
ovsdb-server is running with pid 1628
ovs-vswitchd is running with pid 1637
元の bridge 状態と同様になるよう Open vSwitch を設定
元は br0 に eth0 がぶら下がっている環境を想定してます。
Open vSwitch では add-br で bridge デバイスを登録して、add-port でそれに eth0 をぶら下げます。
# ovs-vsctl add-br br0
# ovs-vsctl add-port br0 eth0
設定状況の確認
# ovs-vsctl show
3be7f9ef-5e64-42a8-b27c-f94e04b5c78c
Bridge "br0"
Port "br0"
Interface "br0"
type: internal
Port "eth0"
Interface "eth0"
ovs_version: "1.4.0"
br0 が寝ていると困るので、network を restart しておく。
# /etc/init.d/network restart
インターフェース br0 を終了中: [ OK ]
インターフェース eth0 を終了中: [ OK ]
ループバックインターフェースを終了中 [ OK ]
ループバックインターフェイスを呼び込み中 [ OK ]
インターフェース eth0 を活性化中: [ OK ]
インターフェース br0 を活性化中: [ OK ]
# ifconfig
br0 Link encap:Ethernet HWaddr XX:XX:XX:XX:XX:XX
inet addr:192.168.11.48 Bcast:192.168.11.255 Mask:255.255.255.0
UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 Metric:1
RX packets:3057 errors:0 dropped:0 overruns:0 frame:0
TX packets:353 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:431595 (421.4 KiB) TX bytes:44540 (43.4 KiB)
eth0 Link encap:Ethernet HWaddr XX:XX:XX:XX:XX:XX
UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 Metric:1
RX packets:1043 errors:0 dropped:0 overruns:0 frame:0
TX packets:98 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:141364 (138.0 KiB) TX bytes:15031 (14.6 KiB)
Interrupt:16 Memory:c0000000-c0012800
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:8 errors:0 dropped:0 overruns:0 frame:0
TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:480 (480.0 b) TX bytes:480 (480.0 b)
疎通確認。
# ping 192.168.11.1
PING 192.168.11.1 (192.168.11.1) 56(84) bytes of data.
64 bytes from 192.168.11.1: icmp_seq=1 ttl=255 time=1.29 ms
64 bytes from 192.168.11.1: icmp_seq=2 ttl=255 time=0.417 ms
^C
--- 192.168.11.1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1434ms
rtt min/avg/max/mdev = 0.417/0.855/1.294/0.439 ms
これでリモートから入れるようになったはず。
仮想マシンを起動すると、仮想NICのtap(以下の例ではvnet0がそれ)がovsのbr0に追加されてることがわかるはず。
# ovs-vsctl show
3be7f9ef-5e64-42a8-b27c-f94e04b5c78c
Bridge "virbr0"
Port "virbr0"
Interface "virbr0"
type: internal
Port "virbr0-nic"
Interface "virbr0-nic"
Bridge "br0"
Port "br0"
Interface "br0"
type: internal
Port "vnet0"
Interface "vnet0"
Port "eth0"
Interface "eth0"
ovs_version: "1.4.0"
参考
Open vSwitch をいじるにあたり、色々と先人の辿った道を参考にしました。