Metonymical Deflection

ゆるく日々のコト・たまにITインフラ

CentOS7 ovs(Open vSwitch)のビルドとインストール方法

CentOS7によるovs(Open vSwitch)のビルドとインストール方法について記載しました。
CentOS7でyumを使用すると、openvswitch.x86_64 0:2.0.0-7.el7がインストールされますが、今後DPDK版ovsを作りたいと考えているため、その練習も兼ねて、最新版2.10系のビルドから行います。

1.構成

1-1.環境
筐体                             : ProLiant DL360p Gen8
System ROM                       : P71 01/22/2018
NIC                              : Intel X520-SR2
OS                               : CentOS7.6(1810)
Kernel                           : 3.10.0-957.el7.x86_64
Installed Environment Groups     : Server with GUI
Add-Ons for Selected Environment : Virtualization Client, Virtualization Hypervisor, Virtualization Tools 
ovs                              : 2.10.1
1-2.全体の流れ

事前準備
rpmビルド
インストール
起動確認

2.事前準備

2-1.ビルド用ユーザ作成

検証環境ですと、rootだけで操作してしまうことが多いのですが、rpmビルドの際、bad owner/groupのエラーで弾かれてしまうため、ビルド用ユーザを作成します。
また、特に記載しませんが、SE Linuxやfirewalldの無効化は行っておいてください。

useradd ovs
usermod -G wheel ovs
passwd ovs
su - ovs

ユーザ作成
wheelグループに追加(sudoさせるため)
パスワード設定
スイッチユーザ

2-2.追加のパッケージインストール

ユーザovsで操作しているものとします。

sudo yum -y install @'Development Tools' rpm-build yum-utils wget libpcap-devel numactl-devel

3.rpmビルド

3-1.ビルド環境準備

ビルド環境の準備をします。

mkdir -p ~/rpmbuild/SOURCES
cd rpmbuild/SOURCES/
wget https://www.openvswitch.org/releases/openvswitch-2.10.1.tar.gz
tar zxvf openvswitch-2.10.1.tar.gz
sed -e 's/@VERSION@/0.0.1/' openvswitch-2.10.1/rhel/openvswitch-fedora.spec.in > ovs.spec

ソース格納ディレクトリの作成
ディレクトリ移動
ソースのダウンロード
ソースのtarファイルを解凍
specファイル生成

3-2.ビルド

ソースからrpmファイルを生成します。

sudo yum-builddep -y ovs.spec
cd openvswitch-2.10.1
./boot.sh
./configure
make rpm-fedora RPMBUILD_OPT="--without check"

依存パッケージのインストール
ovsのソース格納ディレクトリへ移動
boot.sh実行
configure実行
rpmビルド*1

多少時間は掛かりますが、最後の方は以下のような出力がでれば正常にビルドが完了しています。

Wrote: /home/ovs/rpmbuild/SOURCES/openvswitch-2.10.1/rpm/rpmbuild/SRPMS/openvswitch-2.10.1-1.el7.src.rpm
Wrote: /home/ovs/rpmbuild/SOURCES/openvswitch-2.10.1/rpm/rpmbuild/RPMS/x86_64/openvswitch-2.10.1-1.el7.x86_64.rpm
Wrote: /home/ovs/rpmbuild/SOURCES/openvswitch-2.10.1/rpm/rpmbuild/RPMS/noarch/openvswitch-selinux-policy-2.10.1-1.el7.noarch.rpm
Wrote: /home/ovs/rpmbuild/SOURCES/openvswitch-2.10.1/rpm/rpmbuild/RPMS/noarch/python-openvswitch-2.10.1-1.el7.noarch.rpm
Wrote: /home/ovs/rpmbuild/SOURCES/openvswitch-2.10.1/rpm/rpmbuild/RPMS/noarch/openvswitch-test-2.10.1-1.el7.noarch.rpm
Wrote: /home/ovs/rpmbuild/SOURCES/openvswitch-2.10.1/rpm/rpmbuild/RPMS/x86_64/openvswitch-devel-2.10.1-1.el7.x86_64.rpm
Wrote: /home/ovs/rpmbuild/SOURCES/openvswitch-2.10.1/rpm/rpmbuild/RPMS/x86_64/openvswitch-ovn-central-2.10.1-1.el7.x86_64.rpm
Wrote: /home/ovs/rpmbuild/SOURCES/openvswitch-2.10.1/rpm/rpmbuild/RPMS/x86_64/openvswitch-ovn-host-2.10.1-1.el7.x86_64.rpm
Wrote: /home/ovs/rpmbuild/SOURCES/openvswitch-2.10.1/rpm/rpmbuild/RPMS/x86_64/openvswitch-ovn-vtep-2.10.1-1.el7.x86_64.rpm
Wrote: /home/ovs/rpmbuild/SOURCES/openvswitch-2.10.1/rpm/rpmbuild/RPMS/x86_64/openvswitch-ovn-common-2.10.1-1.el7.x86_64.rpm
Wrote: /home/ovs/rpmbuild/SOURCES/openvswitch-2.10.1/rpm/rpmbuild/RPMS/x86_64/openvswitch-ovn-docker-2.10.1-1.el7.x86_64.rpm
Wrote: /home/ovs/rpmbuild/SOURCES/openvswitch-2.10.1/rpm/rpmbuild/RPMS/x86_64/openvswitch-debuginfo-2.10.1-1.el7.x86_64.rpm
Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.JbhK5R
+ umask 022
+ cd /home/ovs/rpmbuild/SOURCES/openvswitch-2.10.1/rpm/rpmbuild/BUILD
+ cd openvswitch-2.10.1
+ rm -rf /home/ovs/rpmbuild/SOURCES/openvswitch-2.10.1/rpm/rpmbuild/BUILDROOT/openvswitch-2.10.1-1.el7.x86_64
+ exit 0

4.インストール

生成されたrpmをインストールします。*2

sudo yum -y localinstall rpm/rpmbuild/RPMS/x86_64/openvswitch-2.10.1-1.el7.x86_64.rpm

5.起動確認

rpmインストール後はrootに戻ります。

exit
systemctl start openvswitch
systemctl enable openvswitch
systemctl status openvswitch
ovs-vsctl -V

ユーザovsからrootへ変更
ovsサービスの起動
ovsサービスの自動起動設定
ovsサービスの動作確認
ovsのversion確認

以下、出力例

# systemctl start openvswitch
# systemctl enable openvswitch
Created symlink from /etc/systemd/system/multi-user.target.wants/openvswitch.service to /usr/lib/systemd/system/openvswitch.service.

# systemctl status openvswitch
● openvswitch.service - Open vSwitch
   Loaded: loaded (/usr/lib/systemd/system/openvswitch.service; enabled; vendor preset: disabled)
   Active: active (exited) since Mon 2018-12-24 10:21:25 JST; 11s ago
 Main PID: 27852 (code=exited, status=0/SUCCESS)

Dec 24 10:21:25 c76x64ovs3.md.jp systemd[1]: Starting Open vSwitch...
Dec 24 10:21:25 c76x64ovs3.md.jp systemd[1]: Started Open vSwitch.

# ovs-vsctl -V
ovs-vsctl (Open vSwitch) 2.10.1
DB Schema 7.16.1

上記まで完了したら、あとはovs-vsctl add-br ovsbr0などでBridgeを作成していきます。
ovsの設定方法は次回記載します。

以上です。

6.最後に

先にも記載しましたが、ovs-dpdkをやることが目的なこともあり、rpmのビルドから実施しました。

以下のサイトに詳しい説明が記載されていますが、
software.intel.com
今回インストールしたのは、下図の左上(ovsのみ)です。
f:id:metonymical:20181224102833j:plain
左下(dpdk)については、過去記事のpktgenspdk+NVMe-oFで、既に実績があるため、DPDKはサクッと導入できるかな?と考えています。

*1:RPMBUILD_OPT=に--with dpdkを追記すると、DPDKにも対応してくれるようです。もちろん事前にDPDKのビルドは必須ですが。

*2:記載したパスには、debug版やovn版などのrpmも生成されていますので、興味があればインストールしてみてください。