P4的运行环境包括以下组件:
- protobuf
- p4c
- behavioral-model
- grpc
- PI
- mininet
如果按照github上给的脚本内容进行安装可能会出现各种版本和兼容的问题,而且P4的组件有些对Ubuntu的版本有依赖,所以Ubuntu的版本也要选对。
总而言之,博主试过很多方法,借鉴了网上各个博客和官网的教程,发现到最后即使能全部安装完毕所有组件,在运行的时候也会出现各种错误。而且安装组件的过程也非常麻烦~
但是救世主来啦!我在上一段解决bug的痛苦过程中,在github社区发现了一个P4开发者jafingerhut,他在社区中给了个他写的脚本库,可以一键安装所有组件!
他的安装教程链接如下:p4-guide/README-install-troubleshooting.md at master · jafingerhut/p4-guide (github.com)
下面是我整理出来的安装过程和避坑指南:
一、安装全新的Ubuntu
在vmware上安装Ubuntu的过程这篇文章就不写了,大伙可以找其他博主的教程。我建议的版本是Ubuntu 20.04。
我要强调的最重要的一点是:Ubuntu最好是新安装的!!!因为如果你之前在Ubuntu上安装过相关组件,那路径可能被污染了,而这个教程中安装脚本好像是会指定路径下载的,到时候可能会出现版本冲突或无法识别等一系列奇怪问题。
所以我建议有条件最好重新安装个虚拟机,从头开始!再不济也要保证虚拟机上没有安装过P4的相关组件的历史。
二、安装运行环境
首先保证代理在虚拟机中运行起来了。这个非常重要!!!
然后在根目录下执行以下命令:
$ sudo apt install git
$ git clone https://github.com/jafingerhut/p4-guide
$ ./p4-guide/bin/install-p4dev-v5.sh |& tee log.txt
其中install-p4dev-v5.sh需要根据Ubuntu版本的不同而改变,版本关系如下:
Script | Versions of Ubuntu it works on | Free disk space required | Time to run on 2015 MacBook Pro with VirtualBox | Data downloaded from Internet | protobuf | grpc |
---|---|---|---|---|---|---|
install-p4dev-v6.sh | 22.04, 20.04, 18.04 | 13 GB | 100 mins | 2 GB | v3.18.1 | v1.43.2 |
install-p4dev-v5.sh | 20.04 | 2 GB | 3 mins | 250 MB | v3.6.1 | v1.16.1 ? |
install-p4dev-v4.sh | 20.04, 18.04 | 12 GB | 100 mins | 2 GB | v3.6.1 | v1.17.2 |
三、测试
在以上命令运行完后我们需要对组件进行测试。github提供的tutorials教程是个很好的选择。
测试步骤如下:
$ git clone https://github.com/p4lang/tutorials
$ cd tutorials/exercises/basic
$ cp solution/basic.p4 basic.p4
$ make run
现在你应该看到一个Mininet命令提示符。尝试在拓扑中的主机之间进行ping操作:
mininet> h1 ping h2
mininet> pingall
ping会失败,因为每个交换机都是根据basic.p4进行编程的,它会在到达时丢弃所有数据包。我们需要扩展此文件,以便它转发数据包。这是后面要做的工作,只要出现mininet就是成功啦!
在mininet命令行输入exit退出每个xterm和Mininet命令行。然后,停止mininet:
make stop
然后要删除所有pcap、构建文件和日志,执行以下操作:
make clean
如果以上步骤都没问题,那么恭喜你成功安装P4啦!!!