P4环境配置

因为之后使用的时候PI那块还是有问题,建议谨做参考,安装还是最好用一用官方的tuorials里面的虚拟机脚本

0.准备
  • 基础环境ubuntu 18.04 LTS

  • 使用trojan终端代理,不然一些下载太慢了

  • ubuntu换源到阿里云

  • 在~目录新建P4目录并且加入环境变量

    1
    2
    3
    4
    mkdir P4
    cd P4
    echo"P4_HOME=$(pwd)">> ~/.bashrc
    source ~/.bashrc
  • 安装依赖包

    1
    2
    sudo apt-get install -y cmake g++ git automake libtool libgc-dev bison flex libfl-dev libgmp-dev libboost-dev libboost-iostreams-dev libboost-graph-dev llvm pkg-config python python-scapy python-ipaddr python-ply tcpdump doxygen graphviz texlive
    sudo apt-get install g++ git automake libtool libgc-dev bison flex libfl-dev libgmp-dev libboost-dev libboost-iostreams-dev pkg-config python python-scapy python-ipaddr tcpdump cmake## 两个参考里面的可能有重复

    下面都是在P4文件夹进行的工作

    所有的make都巨慢,合理安排好时间

1. 安装依赖库protocol
  • 参考了这个依赖库github的C++环境的README;

  • 安装依赖并且git clone

    1
    2
    3
    4
    5
    sudo apt-get install autoconf automake libtool curl make g++ unzip
    git clone https://github.com/protocolbuffers/protobuf.git
    cd protobuf
    git submodule update --init --recursive
    ./autogen.sh

    其中 git submodule update —init —recursive 必做,这会下载好相应的googletest文件,忽略这一步会在make check报错

  • 然后build以及安装,下面步骤耗时较长:

    1
    2
    3
    4
    5
    ./configure
    make
    make check
    sudo make install
    sudo ldconfig # refresh shared library cache.更新共享库
2. 安装PI以及它的依赖
  • 参考PI的 github网站https://github.com/p4lang/PI 安装

  • 首先安装gRPC V1.17.2

    1
    2
    3
    4
    5
    6
    7
    8
    9
    git clone https://github.com/google/grpc.git
    cd grpc/
    git checkout tags/v1.17.2
    git submodule update --init --recursive # 这步耗时较长,一定要代理
    make #也可以make -j4 表示用四个核make,j后面这个数量可以自己设定
    sudo make install
    sudo ldconfig
    # Install gRPC Python Package 这步安装挺慢的
    sudo pip install grpcio
  • 然后安装PI —with-proto,(To include p4runtime.proto in the build, please run configure with --with-proto.)

    1
    2
    3
    4
    5
    6
    ./autogen.sh
    ./configure --with-proto
    make
    make check
    sudo make install
    sudo ldconfig
3. 安装bmv2
  • 建议先阅读原来的github库(https://github.com/p4lang/behavioral-model)

  • 安装操作

    1
    2
    3
    4
    cd ~/P4
    git clone https://github.com/p4lang/behavioral-model.git
    cd behavioral-model
    sudo ./install_deps.sh #脚本安装依赖库

    终端代理的好处在于这些脚本如果不是终端代理下载会异常慢以至于不得不手动转换到gitee安装

    安装依赖库因为要编译其他第三方库也异常的慢

    1
    2
    3
    4
    5
    6
      ./autogen.sh
    ./configure --enable-debugger --with-pi
    make
    sudo make install
    sudo sudo ldconfig
    cd ..
4. 安装p4c
  • 下载库

    1
    2
    3
    4
    5
    6
    7
    8
    9
    cd ~/P4
    git clone --recursive https://github.com/p4lang/p4c.git
    cd p4c
    mkdir build
    cd build
    cmake ..
    make -j4 #4线程编译
    sudo make install
    cd ../..

    这步如果make -j4后面make check 会花很多时间然后有可能报错

5. 下载p4 tutorials
1
git clone https://github.com/p4lang/tutorials

目前的目录:

1
2
3
4
5
6
7
8
P4
|——behavioral-model # BMv2 软件交换机
|——grpc # 作为BMv2的依赖
|——mininet # 网络仿真
|——p4c #p4c编译器
|——PI # PI P4 runtime库
|——protobuf # 依赖
|——tutorials #教程
6. 解决实验出现的bug

在做实验的时候出现了陆陆续续的bug,还需要:

  1. No module named psutil

    1
    2
    3
    4
    wget https://pypi.python.org/packages/source/p/psutil/psutil-2.1.3.tar.gz 
    tar -zxvf psutil-2.1.3.tar.gz
    cd psutil-2.1.3
    python setup.py install
  2. No module named google.protobuf.internal

    1
    pip install protobuf
  3. 根据https://github.com/p4lang/behavioral-model/tree/main/targets/simple_switch_grpc 安装simple_switch_grpc

  4. 安装之后还是P4 switch s1 did not start correctly,根据issuehttps://github.com/p4lang/tutorials/issues/107 ,还需要:

    1
    sudo ldconfig

    至此可以编译basic实验

  5. 安装之后进行P4runtime的时候出现报错 :No module named rpc 尚未解决 因此建议还是使用官方的vagrant

PS: 最后发现其实最标准的安装操作是根据tutorials(https://github.com/p4lang/tutorials)里面的vm里面的两个脚本安装(为啥要手动还不是因为网速太慢

参考博客