编译和安装
获取源码
- 创建目录。
1 2 3
mkdir -p /home/source_code mkdir -p /home/patch_code/ovs_patch mkdir -p /home/rpm_packet
以上创建的目录仅为示例,可根据需求自定义目录名称。若选择自定义创建,请在后续操作中同步修改命令中的目录名称。
- 获取DPDK源码。
- 获取OVS源码。
- 获取patch代码。
- 获取OVS流表归一化软件包。
- 下载软件包。
- 复制至服务器“/home/rpm_packet”目录。
- 解压文件。
1
tar -xzf /home/rpm_packet/OVSOE_ALL.tar.gz -C /home/rpm_packet && rm -rf /home/rpm_packet/OVSOE_ALL.tar.gz
至此,目录结构如下所示。
- 获取OVS流表归一化软件包补丁和数字签名文件。
- 下载二进制补丁文件压缩包。
- 复制至服务器“/home/rpm_packet”目录。
安装XPF二进制库
- 进入存放源码的目录。
1
cd /home/source_code
- 解压DPDK源码包。
1
tar -xf dpdk-19.11.tar.xz && rm -f dpdk-19.11.tar.xz
- 解压OVS源码包。
1
tar -xzf openvswitch-2.12.0.tar.gz && rm -f openvswitch-2.12.0.tar.gz
- (可选)把对应的patch合入相应的源码。如果下载的代码为ovx_xpf_v2.12.0分支源码,则需跳过此步骤。
1
patch -d openvswitch-2.12.0 -p1 < ../patch_code/ovs_patch/xpf.patch
- 强制安装OVS流表归一化软件包。
1
rpm -ivh --nodeps /home/rpm_packet/xpf-1.0.0-1.aarch64.rpm /home/rpm_packet/xpf-devel-1.0.0-1.aarch64.rpm
- 解压并安装OVS流表归一化软件包补丁。
cd /home/rpm_packet unzip xpf-1.0.0-1.aarch64-patch.zip mv xpf-1.0.0-1.aarch64-patch/*.so /usr/lib64
编译安装DPDK
- 进入“/home/source_code/dpdk-19.11”目录。
1
cd /home/source_code/dpdk-19.11
- 编译安装DPDK。
1 2 3 4 5
make O=arm64-armv8a-linuxapp-gcc T=arm64-armv8a-linuxapp-gcc config sed -ri 's,(RTE_APP_TEST=).*,\1n,' arm64-armv8a-linuxapp-gcc/.config sed -ri 's,(RTE_BUILD_SHARED_LIB=).*,\1y,' arm64-armv8a-linuxapp-gcc/.config make O=arm64-armv8a-linuxapp-gcc -j 96 make install O=arm64-armv8a-linuxapp-gcc prefix=/usr libdir=/lib64
在“/usr/lib64”目录下有“librtexxx_xxx.so”的动态库文件说明DPDK编译安装完成。
编译安装OVS
- 进入源码根目录。
1
cd /home/source_code/openvswitch-2.12.0
- 编译安装OVS。
1 2 3
./boot.sh ./configure CFLAGS="-g -O2 -march=armv8-a+crc" --prefix=/usr --sysconfdir=/etc --localstatedir=/var --libdir=/lib64 --enable-ssl --enable-shared --with-dpdk=yes --enable-Werror make -j 96 && make install
boot.sh脚本的作用是用libtool生成修改后的configure文件,增加相应的宏定义,使能XPF的代码。
- 复制头文件。
1 2 3
cp config.h /usr/include/openvswitch mkdir /usr/include/openvswitch/lib cp lib/*.h /usr/include/openvswitch/lib/
- 二次编译安装OVS。OVS流表归一化软件包依赖开源的OVS,二次开发的OVS依赖XPF库,所以这里要编译两次OVS。第一次是编译开源的OVS,并复制一些必要的头文件,第二次是编译二次开发的OVS。
make clean ./configure CFLAGS="-g -O2 -march=armv8-a+crc -ftree-vectorize -I/usr/include/xpf-1.0.0/xpf_include" --prefix=/usr --sysconfdir=/etc --localstatedir=/var --libdir=/lib64 --enable-ssl --enable-shared --with-dpdk=yes --enable-Werror --enable-xpf make -j 96 && make install
- (可选)配置OVS以service服务化方式启动。手动启动、停止和重启OVS服务的操作较为复杂,需执行多条命令,以service服务化运行OVS可大幅度简化相关操作。
- 切换到OVS源码目录下的“rhel”目录,拷贝文件etc_init.d_openvswitch到“/etc/init.d”目录下,并重命名为openvswitch,同时修改文件执行权限为755。
1 2 3
cd rhel/ cp etc_init_.d_openvswitch /etc/init.d/openvswitch chmod 755 /etc/init.d/openvswitch
- 使用service方式运行OVS。
待OVS启动配置项完成后(参见运行和验证)可以通过service启动、停止、重启OVS服务。
- 启动OVS服务。
1
service openvswitch start
- 停止OVS服务。
1
service openvswitch stop
- 重启OVS服务。
1
service openvswitch restart
- 启动OVS服务。
- 切换到OVS源码目录下的“rhel”目录,拷贝文件etc_init.d_openvswitch到“/etc/init.d”目录下,并重命名为openvswitch,同时修改文件执行权限为755。
父主题: OVS流表归一化