/*************************************/
补充,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

检查安装是否完成,输入以下命令:
$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


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

(3)gmock单元检测
$./gmock_test

gmock单元测试务必保证全部通过,未通过先不要进行下一步,否则之后可能会出现意想不到的错误。
(4)重命名
最后一步,将gmock-1.7.0重命名为gmock,暂时先放着,留在安装protobuf的时候用到。