P4 Network SDN

P4_16 实验环境搭建

P4_16 Environment Construction

HERMITOUO
2021-12-31
5 min

# 前言

由于 P4 相关组件的升级,Python 支持从 2.x 升级为 3.x,本文基于 Ubuntu 20.04 + Python3.8 进行 P4 环境的搭建。

本教程安装脚本由 poohdang 提供,在 poohdang 脚本基础之上做了微调和补充。

# 系统环境

项目 详情
系统 Ubuntu 20.04
内存 推荐 3G 以上
存储 推荐 25G 以上
Python 版本 3.x

请确保 python 命令可以访问 python3,使用如下命令绑定并检查:

ln -s /usr/bin/python3.x /usr/bin/python    # 将 Python3.x 链接至 Python

# 检查 python 和 pip 是否可以正常使用
python -V
python -m pip -V      

# 环境搭建

# 安装 Git

sudo apt update

sudo apt install git

# 设置工作目录并配置环境变量

# 以下目录可自定义

mkdir -p ~/P4 && echo "export P4_HOME=~/P4" >> ~/.bashrc  
source ~/.bashrc
cd $P4_HOME # 该环境变量必须生效,后续脚本需要
git clone https://gitee.com/poohdang/p4-env.git
cd p4-env

# 安装依赖

sudo chmod 755 p4*.sh
./p4-deps.sh

# 下载 P4 组件源码

# 组件介绍

组件名 功能 版本
mininet 网络仿真工具 Latest
bmv2 支持 P4 编程的软件交换机 Latest
PI P4 Runtime Server Latest
p4c P4 编译器 Latest
tutorials P4 官方提供的快速上手教程 Latest
protobuf 数据消息交换格式,grpc 的默认选项 v3.12.2
grpc 谷歌开发的远程程序调用(RPC)框架,PI 基于此实现 v1.30.0

# 直接下载(推荐)

./p4-git.sh

# 国内镜像加速

使用https://hub.fastgit.org加速的仓库。

./p4-git-china.sh

# 编译并安装

以下内容已失效

在运行安装脚本之前,我们需要手动修改 behavioral-model/install_deps.sh 文件。

BMV2 需要 Thrift 依赖作为支持, 而使用 Thrift 需要首先安装 libssl 。在 Ubuntu 18.04 中,libssl 的 apt 包名为 libssl1.0-dev,在 Ubuntu 20.04 (以及 18.04 之前的版本)中 apt 包名为 libssl-dev。但在 install_deps.sh 中,我们可以看到,开发组在 20.04 仍中使用 libssl1.0-dev ,对此我们进行简单的修改。

vim install_deps.sh

if [[ "${ubuntu_release}" > "18" ]] 的条件判断从 > 修改为 =

ubuntu_release=`lsb_release -s -r`
if [[ "${ubuntu_release}" = "18" ]]
then
    # This older package libssl1.0-dev enables compiling Thrift 0.9.2
    # on Ubuntu 18.04.  Package libssl-dev exists, but Thrift 0.9.2
    # fails to compile when it is installed.
    # TBD: whether using this package makes a difference for Ubuntu
    # 18.04 and Thrift 0.11.0.
    LIBSSL_DEV="libssl1.0-dev"
else
    LIBSSL_DEV="libssl-dev"
fi

执行安装脚本,并耐心地进行等待。如果配置的内存过低,系统可能会在编译阶段失去响应。

./p4-install.sh

# 为 sudo python 添加模块搜索路径

由于安装过程中,一部分命令需要以 sudo 的权限执行,导致部分 Python 依赖被安装在了 root 用户的目录下,而另一部分被安装在了普通用户的目录下。而我们通常使用 sudo make 运行 P4 程序,在 sudo python 搜索路径中找不到 python 中安装的依赖。

/usr/local/lib/python3.8/dist-packages 下新建 xx.pth 文件,输入:

/home/用户名/.local/lib/python3.8/site-packages
/usr/local/lib/python3.8/site-packages

如果你完全使用以上脚本安装,将上述内容写入 xx.pth 中即可正常使用 P4。

可使用以下命令检查 sudo python 的搜索路径:

import sys
sys.path

附上可以正常使用的 path:

'', 
'/usr/lib/python38.zip', 
'/usr/lib/python3.8', 
'/usr/lib/python3.8/lib-dynload', 
'/usr/local/lib/python3.8/dist-packages', 
'/usr/local/lib/python3.8/dist-packages/protobuf-3.12.2-py3.8-linux-x86_64.egg',
'/usr/local/lib/python3.8/dist-packages/thrift-0.11.0-py3.8-linux-x86_64.egg', 
'/home/p4/.local/lib/python3.8/site-packages', 
'/usr/local/lib/python3.8/site-packages', 
'/usr/lib/python3/dist-packages'
Last Updated: 1/17/2022, 3:45:29 AM