/*************************************/

补充,2020年5月11日 13点18分

有同学说网络环境啥的,获取安装包比较困难,我把大概要用的安装包放到百度网盘了,大家自己获取吧。

我不能保证你有这些安装包就一定能成功,毕竟每个人电脑环境不同,最好还是联网(外网)安装吧。

链接:https://pan.baidu.com/s/1pzhUYp-Rj2iJE-IfBoSt4w 
提取码:wvzm

/************************************/

0  写在前面

因科研需要用到p4,于是在网上寻找安装教程,但发现网上教程大多只是贴了运行的命令或者一个脚本,或许那些博客的作者配置比较顺利。不过对刚开始接触p4并要配置环境的新手来说只看脚本命令可能会遇到很多问题,这篇教程是本人按照网上的教程配置的,记录了过程中遇到的问题,每个命令我都截了运行的结果图,方便大家在配置的过程中参考我的输出结果,p4的环境虽然只分为安装protobuf、p4c、bmv2这三个工具,但我走了不少弯路,遇到了各种问题,足足配置了5天。实验室的同学配置过一次也花了两个星期,但是当时没有写教程,而p4的环境由于依赖的库很多,所以每一步都可能出现错误。

因此当bmv2配置结束的时候,我回想配置的过程说简单也简单,毕竟不超过20条命令,但是说难也难,配置了5天,遇到一大堆问题。这边教程并不是最简洁的,有的命令重复执行(确认依赖已经安装),有的图贴的过于繁琐,但是最主要还是为了力求真实的记录配置过程,写这篇教程的初衷是为了让像我一样的初学者在配置过程中能少走一些弯路,希望这篇教程能帮助到后来者。

配置的过程中会遇到许多的问题,这里我只记录了我遇到的问题,可能大家在配置的时候会遇到新的问题,因此,既然决定要配置,就一定要耐心,静下心来操作。

这里,推荐几个我参考了的博客:

(1)源码下载,p4所有的源码和教程都来源于这个github:https://github.com/p4lang  这个是官方的教程,推荐大家多看看这个,因为第三方教程的环境和依赖都不同,都是针对自己的机器安装的,所以最好的还是github的官方readme文档。

(2)安装教程有以下几个:

主要参考:https://www.sdnlab.com/19912.html

辅助参考:

https://www.cnblogs.com/qq952693358/p/7463204.html

https://steeven.iteye.com/blog/2330830

https://www.cnblogs.com/qq952693358/p/5905536.html

https://blog.csdn.net/zhangmeimei_pku/article/details/79479055

https://www.sdnlab.com/22466.html

https://www.sdnlab.com/22512.html

https://www.cnblogs.com/ljy1227476113/p/10524035.html

http://sunyongfeng.com/201705/networks/p4/repo_p4app.html

本次配置p4所用到的安装文件我已经打包并上传到CSDN的p4-source.tar.gz中,文件内容如下,如果没有积分的朋友可以发邮件给我:gyphust@qq.com

1  准备工作

1.1  查看系统环境

本文使用Ubuntu 16.04 LTS,内核版本Linux ubuntu 4.15.0-46-generic,应该影响不大,系统信息如下图:

系统信息

1.2  安装部分依赖

1.2.1  安装常用工具

安装一些常用的工具,用于后面的使用,命令如下:

$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 curl wget tcpdump cmake

安装常用依赖工具

1.2.2  安装protobuf依赖库

protocbuf的官网所列出需要如下依赖:autoconf, automake, libtool, curl, make, g++, unzip, gmock等,分两部分安装,先按照autoconf, automake, libtool, curl, make, g++, unzip,执行如下命令:

$sudo apt-get install autoconf automake libtool curl make g++ unzip

安装protobuf依赖库

检查安装是否完成,输入以下命令:

$sudo apt-get install autoconf automake g++ curl libtool make unzip

出现如下图的输出,即***已经是最新版本,则表示安装完成。

检测是否安装完成

1.2.3  安装gmock

(1)下载googlemock源码

$git clone git://github.com/paulsapps/gmock-1.7.0 

下载gmock源码

下载完毕

(2)进入gmock-1.7.0/make目录,然后编译

$cd gmock-1.7.0
$cd make
$make

make编译

(3)gmock单元检测

$./gmock_test

gmock单元测试

gmock单元测试务必保证全部通过,未通过先不要进行下一步,否则之后可能会出现意想不到的错误。

(4)重命名

最后一步,将gmock-1.7.0重命名为gmock,暂时先放着,留在安装protobuf的时候用到。

gmock-1.7.0重命名为gmock

2  安装protobuf

2.1  下载protubuf源码包

官网网址:https://github.com/protocolbuffers/protobuf/releases?after=v3.2.1

官网有很多个版本,我写博客的时候最新版本已到了3.7.1了,这里个人建议下载3.2.0版本的,网上其他博客的教程都是默认获取最新版本的链接,我试过,最新版的3.7.1,结果make check死活通不过(可能是本人机器环境的原因),比较建议下载老版本的,这样会稳定一点,遇到的问题会更少。我这里下载的是3.7.1版本的。

$wget https://github.com/protocolbuffers/protobuf/archive/v3.2.0.zip

下载最新版的命令如下:

$git clone https://github.com/google/protobuf.git

下载protubuf源码包

得到protobuf-3.2.0的源码压缩包,如下图所示:

protobuf源码包

2.2  创建目录p4,并把v3.2.0.zip移动到p4目录中

$mkdir p4
$mv v3.2.0.zip p4/

移动protobuf源码包

protobuf移入p4​​​​​

2.3  解压protobuf

进入p4目录,并解压v3.2.0.zip,命令如下:

$cd p4
$unzip v3.2.0.zip

解压开始

解压结束

2.4  移动gmock

进入protobuf,并之前重命名的gmock文件夹移动protobuf中。

移动gmock

2.5  再次确认gmock是否可用

进入p4/protobuf/gmock/make目录,进行单元测试。

$./gmock_test

gmock单元测试

make check的输出结果非常重要,必须要进行!!!需要所有的模块都PASS通过才能进行下一步,否则之后很可能会出现意想不到的错误。如果无法全部pass通过,请先不要进行下一步,往回想办法解决问题。

至此,protobuf的准备工作完成,继续往下操作。

2.6  进入protobuf目录,查看文件

进入protobuf目录:

$cd p4
$cd protobuf
$dir

protobuf目录

2.7  继续操作

执行如下命令:

$./autogen.sh

执行autogen.sh

2.8  继续操作

执行如下命令:

$./configure

./configure开始

./configure结束

2.9  编译

make这一步,时间比较长,需要耐心等待

$make

make开始

make结束

2.10  单元检测

进行单元测试,检测是否编译正确,确认protobuf能正常工作。

$make check

单元测试开始

单元测试结束

make check的输出结果非常重要,必须要进行!!!需要所有的模块都PASS通过才能进行下一步,否则之后很可能会出现意想不到的错误。如果无法全部pass通过,请先不要进行下一步,往回想办法解决问题。

2.11  安装

安装protobuf,执行如下命令:

$sudo make install

安装开始

安装结束

2.12  刷新共享库缓存

执行如下命令:

$sudo ldconfig

刷新缓存

2.13  查看版本

$protoc --version

查看版本

至此,protubuf安装完成。

至此,protubuf安装完成。

至此,protubuf安装完成。

3  安装p4c

3.1  官方源码及文档

官方源码及教程:https://github.com/p4lang/p4c

p4c的安装官方要求安装的依赖: https://github.com/p4lang/p4c#ubuntu-dependencies

Dependencies
Ubuntu 16.04 is the officially supported platform for p4c. There's also unofficial support for macOS 10.12. Other platforms are untested; you can try to use them, but YMMV.--A C++11 compiler. GCC 4.9 or later or Clang 3.3 or later is required.--git for version control--GNU autotools for the build process--CMake 3.0.2 or higher--Boehm-Weiser garbage-collector C++ library--GNU Bison and Flex for the parser and lexical analyzer generators.--Google Protocol Buffers 3.0 or higher for control plane API generation--GNU multiple precision library GMP--C++ boost library (minimally used)--Python 2.7 for scripting and running tests--Optional: Documentation generation (enabled when configuring with --enable-doxygen-doc) requires Doxygen (1.8.10 or higher) and Graphviz (2.38.0 or higher).Backends may have additional dependencies. The dependencies for the backends included with p4c are documented here:--BMv2
--eBPF
--graphs

3.2  安装依赖

必须安装如下依赖,否则无法完整安装p4c。

$sudo apt-get install 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

安装依赖

3.3  下载p4c源码

$git clone --recursive https://github.com/p4lang/p4c.git

下载源码

备注:如果出现“fatal:过早的文件结束符(EOF) fatal:index-pack failed”的报错,则需要把https改为git,使用如下命令:

$git clone --recursive git://github.com/p4lang/p4c.git

下载源码

3.4  将p4c移动到p4目录中

移动p4c到p4目录下

3.5  进入p4c文件夹,执行命令

$cd p4c
$./bootstrap.sh

./bootstrap.sh 可以替换为 mkdir build

命令执行

执行结束

命令结束执行结束后,会发现p4c下面产生build文件夹。

产生build文件夹

3.6  进入p4c的build目录,并cmake编译

$cd build

cmake

备注:如果cmake ..报如下错误,是因为build创建目录顺序错误,请先删除build目录,然后重新创建build目录,解决过程如下图所示:

cmake

3.7  make编译

$make -j4

make开始

make结束

3.8  p4c单元测试

$make check -j4 

单元测试开始

单元测试结束

备注:各版本p4c的测试数目不完全一样,这个不影响结果,只要通过100%就可以,但是必须保证全部通过,如果出现failed或error请不要进行下一步,否则后面可能会出现意想不到的错误。

3.9  安装

$sudo make install

安装开始

安装结束

3.10  查看版本

$p4c --version

p4c版本

至此,p4c安装完成。

至此,p4c安装完成。

至此,p4c安装完成。

4  安装bmv2

4.1  下载bmv2

behavioral-model又叫bmv2交换机模块,以下检称bmv2。

$git clone git://github.com/p4lang/behavioral-model.git

下载bmv2

下载完成

4.2  进入目录,并执行命令

查看可以选择的版本

$git tag

查看版本

选择要安装的版本,默认是安装最新版本,如果安装当前最新版,可以跳过此步骤。

$git checkout 1.11.0

选择1.11.0版本
$./install_deps.sh

执行命令

可以看到出现报错,因为无法连接到下载thrift源码包的网址,http://archive.apache.org/dist/thrift/0.9.2/thrift-0.9.2.tar.gz,这里采用手动下载的方式。下载好源码包后解压,并放到p4/behavioral-model目录下,如下图所示:

thrift文件夹

然后打开/home/yongpu/p4/behavioral-model/travis/install-thrift.sh文件,进行编辑

install-thrift.sh文件

修改前内容如下:

修改前内容

注释掉

#wget http://archive.apache.org/dist/thrift/0.9.2/thrift-0.9.2.tar.gz
#tar -xzvf thrift-0.9.2.tar.gz
#cd thrift-0.9.2

然后插入如下一行代码,也就是thrift-0.9.2的绝对路径,也就是behavioral-model下的thrift-0.9.2目录的位置,修改后保存文件。

$cd /home/yongpu/p4/behavioral-model/thrift-0.9.2

修改后如下图所示:

然后重新运行命令

$./install_deps.sh

执行开始

执行结束

这里出现如下报错:

HEAD 目前位于 c7e718a... Merge pull request #7 from bnewbold/patch-1
Traceback (most recent call last):File "/usr/bin/pip", line 9, in <module>from pip import main
ImportError: cannot import name main

报错的原因是我用的是pip10.0.1,这里好像是版本的问题,可以使用如下命令查看pip版本

$pip --version

查看pip版本

解决方法如下:

参考这个博客的解决办法:https://blog.csdn.net/cow66/article/details/80069309

修改 /usr/bin/pip 文件,使用sudo vim /usr/bin/pip修改。

将原本如下内容

from pip import main
if __name__ == '__main__':sys.exit(main())

修改为:

from pip import __main__
if __name__ == '__main__':sys.exit(__main__._main())

原内容:

原内容

修改后内容如下,然后使用 :wq! 保存退出。

修改后

使用cat查看,查看是否修改成功:

查看内容

然后升级pip,最后查看版本,命令如下,可以看到pip升级到19.0.3版本。

$sudo apt-get install python-pip
$sudo pip install --upgrade pip
$pip --version

升级pip

再次执行

$./install_deps.sh

命令执行

执行结束

小插曲:期间报了一个错,截图如下,这是因为磁盘空间不足,清理一下回收站或者扩充下空间即可,查看磁盘空间命令为:

df -hl

磁盘空间不足

4.3 执行命令

$./autogen.sh

执行命令

4.4  执行命令

$./configure

执行命令

执行结束

4.5  编译

$make

执行编译

编译结束

4.6  安装

$sudo make install -j4

开始安装

安装结束

4.7  单元测试

bmv2的单元测试一定要在4.6安装完成之后再进行,否则无法完全检测通过。

$make check -j4

单元测试

测试结果-1

测试结果-2

测试结束

make check的输出结果非常重要,必须要进行!!!需要所有的模块都PASS通过才能进行下一步,否则之后很可能会出现意想不到的错误。如果无法全部pass通过,请先不要进行下一步,往回想办法解决问题。

4.8  查看bmv2版本

$cat VERSION

2019年4月5日13:48:39 重新安装了1.11.0版本

至此,bmv2的安装完成!

至此,bmv2的安装完成!

至此,bmv2的安装完成!

5 安装grpc

git clone https://github.com/google/grpc.git
cd grpc/
git checkout tags/v1.3.2
git submodule update --init --recursive
make
[sudo] make install
[sudo] ldconfig

6 总结

总的来说,配置p4的安装环境一共需要安装3个东西,分别是protobuf、p4c、bmv2,建议大家多看看github的教程,然后遇到问题先去看看教程是否自己遗漏了什么,最常见的问题是缺少了依赖,因为p4的配置需要的依赖很多,所以make check不通过的原因大多数是某个依赖没有安装。

至此,p4环境配置完成!

至此,p4环境配置完成!

至此,p4环境配置完成!

P4使用Ubuntu中安装教程相关推荐

  1. android sdk linux安装教程,Ubuntu中安装Android SDK

    本文阐述的是如何在Ubuntu中安装Android SDK 环境. 一.安装python-software-properties apt-get update && apt-get i ...

  2. ubuntu安装matlab2009,Ubuntu中安装Matlab2010a

    Ubuntu中安装Matlab2010a 一.前言: 相信大家对于Matlab应该很熟悉吧,我就不多做介绍了. 对于如何在Ubuntu中安装Matlab很多人都不懂,大家都是新手,可以理解.我自己本身 ...

  3. samba服务器新建文件权限,Ubuntu中安装samba服务器创建文件共享的方法及普通用户设置共享的问题解析...

    Ubuntu中安装samba服务器创建文件共享的方法及普通用户设置共享的问题解析 发布时间:2011-01-04 19:10:00   作者:佚名   我要评论 本文是基于ubuntu桌面版进行操作说 ...

  4. linux软件安装 home,Ubuntu中安装建筑设计软件Sweet Home 3D

    原标题:Ubuntu中安装建筑设计软件Sweet Home 3D 本教程介绍如何在Ubuntu 16.04,Ubuntu 18.04,Ubuntu 19.04及更高版本中轻松安装最新的Sweet Ho ...

  5. 在Ubuntu中安装OpenCV-Python | 三

    在本教程中,我们将学习在Ubuntu System中设置OpenCV-Python.以下步骤针对Ubuntu 16.04和18.04(均为64位)进行了测试. 可以通过两种方式在Ubuntu中安装Op ...

  6. 如何在Ubuntu中安装PHP

    今天,我将向您展示如何在Ubuntu OS中安装PHP. 首先,我将向您展示如何安装默认的稳定版本的PHP,然后将向您展示如何安装其他版本的PHP. PHP是一种服务器端脚本语言,主要用于构建Web应 ...

  7. Ubuntu中安装docker-compose

    安装最新Docker社区版请看博客<Ubuntu中安装最新Docker社区版> Compose是用于定义和运行多容器Docker应用程序的工具.通过Compose,我们可以使用YAML文件 ...

  8. abp 打包部署到ubuntu_如何在Ubuntu中安装Docker和运行 Docker容器

    Docker是一种开源且流行的操作系统级虚拟化(俗称"容器化")技术,主要在Linux和Windows上运行. Docker使用容器可以更轻松地创建,部署和运行应用程序. 使用容器 ...

  9. unbantu上python安装步骤_如何在Ubuntu中安装Python 3.6?

    Python是增长最快的主要通用编程语言.原因有很多,比如它的可读性和灵活性,易于学习和使用,可靠和高效. 有两个主要的Python版本被使用- 2和3 (Python的现在和未来);前者将看不到新的 ...

最新文章

  1. Mybatis源码解析之Mybatis初始化过程
  2. python数组展示_python如何显示数组
  3. LeetCode MySQL 1076. 项目员工II
  4. 面试这些公司是在浪费时间
  5. Microsoft.NET框架程序设计--18 异常
  6. javaWeb(入门基础详解)
  7. sqlite遇到database is locked问题的完美解决
  8. BAT 鼎立格局被打破,2019 年这些互联网公司是程序员跳槽首选!
  9. [Unity3D]无缝场景切换解决方案(1) - 简单场景切换
  10. Oracle 11g数据库基础教程(第2版)-课后习题-第六章
  11. Oracle oci.dll 下载地址
  12. 肝一份java性能调优手册
  13. photoshop cs6视频教程(从入门到精通)
  14. git push reject 解决方案
  15. 互联网创业技术团队需要多少人
  16. 蓝牙Controller框架梳理
  17. 整理的遥感期刊,SCI检索,3/4区居多
  18. android音频编辑之音频合成
  19. 利用opencv-python对绿色植物的颜色进行提取
  20. 互联网最值得加入的173家国企汇总!!

热门文章

  1. Latex实践:一个零Latex基础的术渣花了一天半的时间用Latex完成一篇SCI论文编辑
  2. Ajax 使用 Json
  3. Easyexcel导入导出多个sheet
  4. FL studio20.8最新中文版本安装下载图文教程
  5. ARP/RARP协议报文格式
  6. 使用低通滤波器去除基线漂移(MATLAB代码)
  7. ARPA x 京东数科:隐私计算如何赋能未来金融数据共享
  8. Mac 硬件驱动(.kext)安装方法
  9. 数据库的视图定义及使用
  10. unity3d 音频无缝循环