CentOS 6.2 に Open vSwitch をインストールする手順
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 をいじるにあたり、色々と先人の辿った道を参考にしました。
- Freak: autoconfをRPM化してインストール
- autoconf の RPM作成
- openvswitch installと設定 - うまい棒blog
- 『ifcfg configの設定』までが Open vSwitch の導入手順になってる
- Open vSwitch インストール - チラ裏
- インストール手順の流れがシンプルにまとめてある
- きりんさん日記: KVMとOpen vSwitchをシンプルに使う(CentOS6.2)
- Open vSwitch - Network & Security Study Log
- Open vSwitch の導入手順と設定のいろいろ。