https://github.com/jafingerhut/p4-guide
认真阅读:https://github.com/jafingerhut/p4-guide/blob/master/bin/README-install-troubleshooting.md
$ sudo apt install git
$ git clone https://github.com/jafingerhut/p4-guide
$ ./p4-guide/bin/install-p4dev-v5.sh |& tee log.txt
只需要3G,只需要几分钟就能弄完!!!冲啊!
我的环境:ubuntu 18.04 (4G内存, 40G磁盘空间)
安装P4环境的日期:2020.11.23
参考资料:https://github.com/jafingerhut/p4-guide
看了网上的很多资料,最初是根据别人的博客进行安装的,跟着别人的教程走还是遇到了很多问题,没有成功。最后,还是选择了https://github.com/jafingerhut/p4-guide 上的脚本进行安装,依旧遇到了一些问题,然后终于成功了!
在此重新梳理了一下安装流程与步骤,并且记录下我遇到的问题和解决方案,希望大家安装顺利!!!
由于从github上clone很慢,经常会卡住不动,所以,在此把所有需要用到的github上的内容导入到gitee网站中(从github导入到gitee网站中很快,在ubuntu上从gitee上clone也会很快)。
以https://github.com/jafingerhut/p4-guide为例,步骤如下:
git clone https://github.com/jafingerhut/p4-guide.git
语句转换成git clone https://gitee.com/自己的名字/p4-guide.git
我已经导入好了所有的库,大家如果懒得导入的话,可以用我已经导入好的,即将文章中所有“自己的名字”改成 hahahawt 就是我的仓库。
$ mkdir p4
$ cd p4
$ sudo apt install git
$ git clone https://gitee.com/自己的名字/p4-guide
$ gedit ./p4-guide/bin/install-p4dev-v2.sh
https://github.com/google/protobuf
替换成 https://gitee.com/自己的名字/protobuf
https://github.com/google/grpc.git
替换成 https://gitee.com/自己的名字/grpc.git
https://github.com/p4lang/PI
替换成 https://gitee.com/自己的名字/PI
https://github.com/p4lang/behavioral-model.git
替换成 https://gitee.com/自己的名字/behavioral-model.git
https://github.com/p4lang/p4c.git
替换成 https://gitee.com/自己的名字/p4c.git
https://github.com/mininet/mininet
替换成 https://gitee.com/自己的名字/mininet
举例:将shell文件中的
$ git clone https://github.com/p4lang/PI
替换成
$ git clone https://gitee.com/hahahawt/PI
$ git submodule update --init --recursive
在install-p4dev-v2.sh脚本中,可以发现需要下载submodule的包括grpc、PI和p4c。
以grpc为例,在对应gitee库中,打开.gitmodules文件,将所有关于子模块的github链接也按照“1. 准备工作”所示导入到gitee中,并且更改 .gitmodules文件中对应url的内容,替换为自己导到gitee后的链接。如下图所示:
到此,所有需要用到的github上的库都已经更换成功了,此时,gitee上包含的库如下图所示:
$ ./p4-guide/bin/install-p4dev-v2.sh |& tee log.txt
其中 |& log.txt
表示将终端显示的内容同时保存至log.txt中,以便后续查看。
等待… 直至出错或者clone处卡住。
此处我就卡住了,具体方法和注意事项,见“3. 遇到的问题与解决方法”。
如果没有卡住的话,全部运行完毕后,可以选择运行官方实例进行测试
$ git clone https://gitee.com/自己的名字/tutorials
$ cd tutorials/exercises/basic
$ cp -f solution/basic.p4 ./
$ make run
然后自动进入到mininet中
mininet> pingall
可以选择输入mininet的其他语句,进行测试,最后退出。
mininet> exit
问题:在安装中clone grpc的子模块时卡住了,并没有按照.gitmodules上更改后的路径进行下载。
解决:停止shell脚本运行,手动clone相关模块。进入grpc/third_party中,逐个克隆子模块。此时要打开grpc 文件夹下的.gitmodules查看所有需要用到的模块。
$ cd grpc
$ cat .gitmodules
$ cd third_party
$ git clone -b 3.0.x https://gitee.com/hahahawt/protobuf.git
$ git clone https://gitee.com/hahahawt/udpa.git
... ...
... ...
注意!!有些模块有指定的分支!千万不要克隆错误! 我就是因为没有下载对应的分支导致make出现了很多错误… …
例如:
当手动clone后,再继续运行安装的shell文件即可,这里我是把之前在shell文件中已经安装过的模块注释掉后,再重新运行的脚本。