FD.IO VPP安装与启动

安装 Virtual Box 和 Vagrant

需要安装 Virtual Box 和 Vagrant。

安装Virtual Box

$ sudo apt-get install virtualbox

安装vagrant

$ sudo apt-get install https://releases.hashicorp.com/vagrant/2.1.2/vagrant_2.1.2_x86_64.deb

如果是使用Vagrant2.1.2版本那么要求VirtualBox的版本要小于等于5.2,否则无法正常使用。

如果要安装VirtualBox5.2版本,在Ubuntu18.04上可以正常安装,在Ubuntu20.04上需要额外安装libvpx5(>=1.6)、python2.7以及python。

如果是vagrant版本为2.2.19版本,那么VirtualBox版本可以为6.1

创建 Vagrant 目录开始为 vagrant 创建一个目录

$ mkdir vpp-tutorial
$ cd vpp-tutorial

创建一个名为Vagrantfile的文件,其内容如下:

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure(2) do |config|

  config.vm.box = "bento/ubuntu-18.04"
  config.vm.box_check_update = false

  vmcpu=(ENV['VPP_VAGRANT_VMCPU'] || 2)
  vmram=(ENV['VPP_VAGRANT_VMRAM'] || 4096)

  config.ssh.forward_agent = true

  config.vm.provider "virtualbox" do |vb|
      vb.customize ["modifyvm", :id, "--ioapic", "on"]
      vb.memory = "#{vmram}"
      vb.cpus = "#{vmcpu}"
      #support for the SSE4.x instruction is required in some versions of VB.
      vb.customize ["setextradata", :id, "VBoxInternal/CPUM/SSE4.1", "1"]
      vb.customize ["setextradata", :id, "VBoxInternal/CPUM/SSE4.2", "1"]
  end
end

运行Vagrant

VPP 在用户空间中运行。在生产环境中,您通常会使用 DPDK 运行它以连接到真实的 NIC 或使用 vhost 来连接到 VM。m在这些情况下,您通常运行 VPP 的单个实例。

就本教程而言,运行多个 vpp 实例并将它们相互连接以形成拓扑将非常有用。幸运的是,VPP 支持这一点。

当运行多个 VPP 实例时,每个实例都需要指定一个“名称”或“前缀”。在下面的示例中,“名称”或“前缀”是“vpp1”。请注意,只有一个实例可以使用 dpdk 插件,因为该插件正在尝试获取文件锁定。

使用 Vagrant 搭建 VPP 环境

下载box

默认vagrant up的时候,vagrant检测到本地没有box的话,会自动去官网下载,
但是下载太慢了,可以自己把链接复制到谷歌浏览器下载,或者用其他下载软件下载:(科学上网下载会快很多)

https://vagrantcloud.com/puppetlabs/boxes/ubuntu-16.04-64-nocm/versions/1.0.0/providers/virtualbox.box
https://app.vagrantup.com/generic/boxes/ubuntu1804/versions/3.1.8/providers/virtualbox.box

添加box

如果是通过自己去下载的box才需要执行这步

$ vagrant box add bento/ubuntu-18.04 virtualbox.box 

注意:添加box的命令中最后的 ‘virtualbox.box’ 必须是上个步骤5下载下来的box实际的文件名

设置 Vagrant 后,在 Vagrant 目录上使用以下命令启动 VM:

$ vagrant up
$ vagrant ssh
$ sudo bash
# apt-get update
# reboot -n
$ # Wait for the VM to reboot
$ vagrant ssh

安装 VPP

现在 VM 已更新,我们将安装 VPP 包。

有关安装 VPP 的更多信息,请参阅下载和安装 VPP。

我们将通过修改文件 /etc/apt/sources.list.d/99fd.io.list来安装 VPP 。

我们用以下内容编写这个文件:

$ sudo bash
# echo "deb [trusted=yes] https://packagecloud.io/fdio/release/ubuntu bionic main" > /etc/apt/sources.list.d/99fd.io.list

拿到钥匙。

# curl -L https://packagecloud.io/fdio/release/gpgkey | sudo apt-key add -

然后执行以下命令。

# apt-get update
# apt-get install vpp vpp-plugin-core vpp-plugin-dpdk

若出现依赖问题,需要下载:

libmbedcrypto1_2.8.0-1_amd64.deb  
libmbedtls10_2.8.0-1_amd64.deb  
libmbedx509-0_2.8.0-1_amd64.deb

停止本教程的 VPP。我们将创建自己的 VPP 实例。

# service vpp stop

启动 VPP

创建一些启动文件

我们将创建一些启动文件供本教程使用。通常,将修改 /etc/vpp/startup.conf 中的 startup.conf 文件。有关此文件的更多信息,请参阅配置参考。

当运行多个 VPP 实例时,每个实例都需要指定一个“名称”或“前缀”。在下面的示例中,“名称”或“前缀”是“vpp1”。请注意,只有一个实例可以使用 dpdk 插件,因为该插件正在尝试获取文件锁定。我们创建的这些启动文件将禁用 dpdk 插件。

同样在我们的启动文件中注意api-segmentapi-segment {prefix vpp1} 告诉 FD.io VPP 如何以不同于默认的方式为您的 VPP 实例命名 /dev/shm/ 中的文件。**unix {cli-listen /run/vpp/cli-vpp1.sock}**告诉 vpp 在被 vppctl 寻址时使用非默认套接字文件。

现在创建两个名为 startup1.conf 和 startup2.conf 的文件,其内容如下。这些文件可以位于任何地方。我们在启动 VPP 时指定位置。

startup1.conf:

unix {cli-listen /run/vpp/cli-vpp1.sock}
api-segment { prefix vpp1 }
plugins { plugin dpdk_plugin.so { disable } }

startup2.conf:

unix {cli-listen /run/vpp/cli-vpp2.sock}
api-segment { prefix vpp2 }
plugins { plugin dpdk_plugin.so { disable } }

运行 VPP

使用我们刚刚创建的文件,我们现在将启动并运行 VPP。

VPP 在用户空间中运行。在生产环境中,通常会使用 DPDK 运行它以连接到真实的 NIC 或使用 vhost 来连接到 VM。在这些情况下,通常会运行一个 VPP 实例。

就本教程而言,运行多个 VPP 实例并将它们相互连接以形成拓扑将非常有用。幸运的是,VPP 支持这一点。

使用我们在设置中创建的文件,我们将启动 VPP。

$ sudo /usr/bin/vpp -c startup1.conf
vlib_plugin_early_init:361: plugin path /usr/lib/vpp_plugins:/usr/lib/vpp_plugins
load_one_plugin:189: Loaded plugin: abf_plugin.so (ACL based Forwarding)
load_one_plugin:189: Loaded plugin: acl_plugin.so (Access Control Lists)
load_one_plugin:189: Loaded plugin: avf_plugin.so (Intel Adaptive Virtual Function (AVF) Device Plugin)
.........
$

如果 VPP 没有启动,您可以尝试将nodaemon添加到 unix部分的 startup.conf 文件中。这应该在输出中提供更多信息。

带有 nodaemon 的 startup.conf 示例:

unix {nodaemon cli-listen /run/vpp/cli-vpp1.sock}
api-segment { prefix vpp1 }
plugins { plugin dpdk_plugin.so { disable } }

命令vppctl将启动一个 VPP shell,您可以使用它以交互方式运行 VPP 命令。

我们现在应该能够执行 VPP shell 并显示版本。

$ sudo vppctl -s /run/vpp/cli-vpp1.sock
    _______    _        _   _____  ___ 
 __/ __/ _ \  (_)__    | | / / _ \/ _ \
 _/ _// // / / / _ \   | |/ / ___/ ___/
 /_/ /____(_)_/\___/   |___/_/  /_/    

vpp# show version
vpp v21.10.1-release built by root on 4f6ead0c141f at 2021-11-17T14:25:30
vpp#

使用 ctrl-d 或 q 退出 VPP shell。

如果您要以这种方式运行多个 VPP 实例,请务必在完成后将其杀死。

$ ps -eaf | grep vpp
root      2067     1  2 05:12 ?        00:00:00 /usr/bin/vpp -c startup1.conf
vagrant   2070   903  0 05:12 pts/0    00:00:00 grep --color=auto vpp
$ kill -9 2067
$ ps -eaf | grep vpp
vagrant   2074   903  0 05:13 pts/0    00:00:00 grep --color=auto vpp

卸载VPP

sudo apt-get remove --purge "vpp*"

你可能感兴趣的:(vpp,ubuntu,开发语言)