Loading

安装DPDK+VPP软件交换机和KVM虚拟化软件

1. 安装 Vagrant and VirtualBox 虚拟机工具

在宿主机系统中卸载旧版xen-tool和virtualbox。

sudo apt-get remove -y xen-tools virtualbox

Oracel VirtualBox官方网站,下载安装最新版VirtualBox虚拟机系统。

VirtualBox Extension Pack 提供对USB2.0、USB3.0、NVMe等的支持。因此,对于提升VirtualBox的性能很有帮助。请到VirtualBox的官网下载对应你的VirtualBox版本的Extension Pack。如何确定VirtualBox的版本?进入Virtual Box后,菜单栏上点击“帮助”,然后点关于。下载号是一个后缀名为.vbox-extpack的文件。直接双击,VirtualBox会打开。直接安装就可以了。具体参考网页指南

参考链接:https://fd.io/docs/vpp/master/reference/vppvagrant/installingvboxvagrant

安装Vagrant:到Vagrant官网下载最新版Vagrant deb安装文件,点击安装。下面测试vagrant安装。

$ vagrant --version
Vagrant 2.2.17

2. 安装QEMU虚拟化和libvirt虚拟机管理软件

安装依赖项目

sudo apt-get update
sudo apt-get install -y qemu qemu-system-x86 ovmf
sudo apt-get install -y virt-manager libvirt-daemon

为避免后面在非/home目录下启动QEMU-KVM虚拟机时 Permission denied 的问题,打开配置文件 /etc/libvirt/qemu.conf

sudo gedit /etc/libvirt/qemu.conf

在下方usergroup 的位置处改为 root ,其余位置不变,修改后保存:

# The user for QEMU processes run by the system instance. It can be
# specified as a user name or as a user id. The qemu driver will try to
# parse this value first as a name and then, if the name doesn't exist,
# as a user id.
#
# Since a sequence of digits is a valid user name, a leading plus sign
# can be used to ensure that a user id will not be interpreted as a user
# name.
#
# Some examples of valid values are:
#
#       user = "qemu"   # A user named "qemu"
#       user = "+0"     # Super user (uid=0)
#       user = "100"    # A user named "100" or a user with uid=100
#
user = "root"

# The group for QEMU processes run by the system instance. It can be
# specified in a similar way to user.
group = "root"

# Whether libvirt should dynamically change file ownership
# to match the configured user/group above. Defaults to 1.
# Set to 0 to disable file ownership changes.
#dynamic_ownership = 1

之后重启 libvirtd 服务:

sudo service libvirtd restart

这样就可以在非/home目录下启动QEMU-KVM虚拟机。当然也有其他方法,可以参考链接

3. 从源代码安装VPP(推荐)

参考官方文档:https://wiki.fd.io/view/VPP/Pulling,_Building,_Running,_Hacking_and_Pushing_VPP_Code

3.1 准备全局的配置项和安装依赖

注意:要卸载旧的从APT源装的vpp。

 sudo apt-get remove vpp
  1. ~/.bashrc或者~/.zshrc的末尾插入以下的环境变量配置项。

    export VPP_VERSION=v21.10
    

    执行source ~/.bashrc或者source ~/.zshrc命令。

  2. 确认Python Pip的源配置,编辑/home/user/.pip/pip.conf,在全局将aliyun的源设置为可信任trusted-host。

    [global]
    index-url = http://mirrors.aliyun.com/pypi/simple/
    trusted-host = mirrors.aliyun.com
    
  3. 下载最新版本的VPP源代码

    git clone https://github.com/FDio/vpp
    cd vpp
    git checkout $VPP_VERSION
    
  4. 安装依赖的x86平台的nasm汇编语言编译程序。VPP需要至少2.14版本以上的nasm,较为老旧版本的ubuntu自带为2.13,因此需要手动导入第三方ppa源。

    sudo add-apt-repository ppa:team-xbmc/ppa
    sudo apt-get update
    sudo apt-get install nasm
    
  5. 用如下命令安装VPP的其他依赖。

    make install-deps
    make install-ext-deps
    

    这一步的主要作用就是下载vpp环境所需的依赖包,这一步相当重要,一定要仔细查看执行情况,若有问题,一定要一一解决,不然在后面编译问题多,基本就是在环境搭建的第一次执行。

    我们遇到如下的版本兼容性问题:

    The following packages have unmet dependencies:
     libsctp-dev : Depends: libsctp1 (= 1.0.17+dfsg-2) but 1.0.18+dfsg-1 is to be installed
    E: Unable to correct problems, you have held broken packages.
    

    需要到ubuntu packages搜索网站,下载libsctp1版本1.0.17+dfsg-2的Binary Package包(注意观察Ubuntu系统版本是18.04,CPU指令架构是amd64代表intel x86架构),发现链接都是来自archive ubuntu官方网站。然后,用如下命令卸载ubuntu缺省版本的libsctp1,并用dpkg命令安装指定1.0.17+dfsg-2版本的libsctp1。

    sudo apt-get remove libsctp1
    sudo dpkg -i libsctp1_1.0.17+dfsg-2_amd64.deb
    

3.2 编译VPP源代码

  1. 用如下命令编译VPP源代码。

    make build        # or `make build-release`
    

    开发一般编译测试版,执行make build编译vpp主程序,make wipe清除,带有release的就是发型版本了。dpdk不用专门下载,在执行make build的时候会自动下载dpdk到vpp/dpdk目录下。只要执行make build后,vpp基本就编译成功。

    我们遇到报告如下错误。主要原因是Ubuntu系统默认的python是2.7版本。记着一定要按之前的步骤把python命令关联到python3的环境。

    -- Install configuration: "debug"
      File "home/wxg/vpp/vpp/build-root/install-vpp_debug-native/vpp/lib/python2.7/site-packages/vpp_papi/vpp_papi.py", line 391
        def __init__(self, *, apifiles=None, testmode=False, async_thread=True,
                            ^
    SyntaxError: invalid syntax
    
      File "build/bdist.linux-x86_64/egg/vpp_papi/vpp_papi.py", line 391
        def __init__(self, *, apifiles=None, testmode=False, async_thread=True,
                            ^
    SyntaxError: invalid syntax
    
  2. 用python3解决上面的错误以后,重新用如下命令编译VPP源代码,编译通过。

    make build        # or `make build-release`
    

    再执行make run命令运行软件交换机,可以进入vpp命令行控制台。可以用show version命令查看目前的vpp版本号。

    $ make run
    
    WARNING: STARTUP_CONF not defined or file doesn't exist.
             Running with minimal startup config:  unix { interactive cli-listen /run/vpp/cli.sock gid 1000 } dpdk { no-pci } \n
    snort                [debug ]: initialized
    snort                [debug ]: snort listener /run/vpp/snort.sock
    dpdk/cryptodev       [warn  ]: dpdk_cryptodev_init: Failed to configure cryptodev
    vat-plug/load        [error ]: vat_plugin_register: oddbuf plugin not loaded...
        _______    _        _   _____  ___ 
     __/ __/ _ \  (_)__    | | / / _ \/ _ \
     _/ _// // / / / _ \   | |/ / ___/ ___/
     /_/ /____(_)_/\___/   |___/_/  /_/    
    
    DBGvpp# show version
    vpp v22.02-rc0~0-g192c55f2e built by wxg on inspur1 at 2021-10-25T03:33:21
    DBGvpp# quit
    
  3. 安装vpp编译好的deb软件包。注意:这个要通过一定要Ubuntu系统默认的语言是英语,否则安装过程无法交互。

    sudo vim /etc/default/locale
    

    改为如下内容,然后重启Ubuntu系统:

    LANG="en_US.UTF-8"
    LANGUAGE="en_US:en"
    LC_ALL="en_US.UTF-8"
    

    再进到原先的vpp源代码目录。用如下命令安装软件包。

    cd build-root
    make
    sudo dpkg -i *.deb
    cd ..
    

    测试vpp安装。

    $ sudo vppctl "show version"
    vpp v22.02-rc0~0-g192c55f2e built by wxg on inspur1 at 2021-10-25T03:21:57
    

4. 在Ubuntu 18.04系统上从APT源安装VPP(可选)

4.1 从官网下载安装新版本的Intel DPDK源代码,编译安装

采用较新的DPDK $DPDK_VERSION (LTS),或更早的19.11.8 (LTS)版本

export DPDK_VERSION=20.11

安装ninjia的编译工具。

sudo apt-get install python3 python3-pip ninja-build -y

脚本安装需要 meson。

sudo pip3 install meson
pip3 install --user meson

下载编译dpdk。

export PATH=~/.local/bin:$PATH
wget http://fast.dpdk.org/rel/dpdk-$DPDK_VERSION.tar.xz
tar -xf dpdk-$DPDK_VERSION.tar.xz
cd dpdk-$DPDK_VERSION
meson build
ninja -C build
mkdir -p /dev/hugepages
mountpoint -q /dev/hugepages || mount -t hugetlbfs nodev /dev/hugepages
sudo sh -c 'echo 4096 > /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages'
sudo sh -c 'echo 4096 > /sys/devices/system/node/node1/hugepages/hugepages-2048kB/nr_hugepages'

也可以在build的时候指定包含example

meson -Dexamples=all build

以接收模式跑一下testpmd进行测试(testpmd是一个dpdk转发工具,可以只接收),需要回环链接光口nic0和nic1。

build/app/dpdk-testpmd -c7 --vdev=net_pcap0,iface=nic0 --vdev=net_pcap1,iface=nic1 -i --nb-cores=2 --nb-ports=2 --total-num-mbufs=2048

4.2 用APT安装Prebuilt

参考链接:https://fd.io/vppproject/vppinstalling/

sudo sh -c '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 -
sudo apt-get update
sudo apt-get install -y vpp vpp-plugin-core vpp-plugin-dpdk
sudo apt-get install -y vpp-api-python python3-vpp-api vpp-dbg vpp-dev

测试vpp安装。

$ sudo vppctl "show version"
vpp v21.01-release built by root on fcb1bae62b24 at 2021-01-27T16:06:22
posted @ 2022-08-13 21:17  锦瑟,无端  阅读(527)  评论(0编辑  收藏  举报