# Install VPP on Ubuntu

Add package sources to the sources.list

{% code title="/etc/apt/sources.list.d/99fd.io.list" %}

```
deb [trusted=yes] https://packagecloud.io/fdio/release/ubuntu bionic main
deb http://cz.archive.ubuntu.com/ubuntu bionic main universe
```

{% endcode %}

Add keys

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

Install required vpp packages

```
sudo apt install vpp vpp-plugin-core vpp-plugin-dpdk
```

troubleshooting

```
 /workspace $ sudo apt install libmedx509-0 Reading package lists... Done Building dependency tree
Reading state information... Done E: Unable to locate package libmedx509-0

/workspace $ sudo apt install libmbedx509-0 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
You might want to run 'apt --fix-broken install' to correct these.
The following packages have unmet dependencies:
 libmbedtls10 : Depends: libmbedcrypto1 (>= 2.7) but it is not going to be installed
 libmbedx509-0 : Depends: libmbedcrypto3 (>= 2.14) but it is not going to be installed
E: Unmet dependencies. Try 'apt --fix-broken install' with no packages (or specify a solution).

```

```
gitpod /workspace $ sudo apt install vpp vpp-plugin-core vpp-plugin-dpdk Reading package lists... Done Building dependency tree
Reading state information... Done The following additional packages will be installed: libnl-3-200 libnl-route-3-200 libnuma1 libsubunit0 libvppinfra The following NEW packages will be installed: libnl-3-200 libnl-route-3-200 libnuma1 libsubunit0 libvppinfra vpp vpp-plugin-core vpp-plugin-dpdk 0 upgraded, 8 newly installed, 0 to remove and 21 not upgraded. Need to get 14.2 MB of archives. After this operation, 105 MB of additional disk space will be used. Do you want to continue? [Y/n] y Get:1 https://packagecloud.io/fdio/release/ubuntu bionic/main amd64 libvppinfra amd64 21.10.1-release [210 kB] Get:2 http://archive.ubuntu.com/ubuntu focal/main amd64 libnuma1 amd64 2.0.12-1 [20.8 kB] Get:3 https://packagecloud.io/fdio/release/ubuntu bionic/main amd64 vpp amd64 21.10.1-release [5,648 kB] Get:4 https://packagecloud.io/fdio/release/ubuntu bionic/main amd64 vpp-plugin-core amd64 21.10.1-release [4,152 kB] Get:5 http://archive.ubuntu.com/ubuntu focal/main amd64 libnl-3-200 amd64 3.4.0-1 [53.9 kB]
Get:6 https://packagecloud.io/fdio/release/ubuntu bionic/main amd64 vpp-plugin-dpdk amd64 21.10.1-release [3,915 kB] Get:7 http://archive.ubuntu.com/ubuntu focal/main amd64 libnl-route-3-200 amd64 3.4.0-1 [149 kB] Get:8 http://archive.ubuntu.com/ubuntu focal/main amd64 libsubunit0 amd64 1.4.0-0ubuntu1 [6,408 B] Fetched 14.2 MB in 1s (14.0 MB/s)
debconf: delaying package configuration, since apt-utils is not installed Selecting previously unselected package libnuma1:amd64. (Reading database ... 36653 files and directories currently installed.) Preparing to unpack .../0-libnuma1_2.0.12-1_amd64.deb ... Unpacking libnuma1:amd64 (2.0.12-1) ... Selecting previously unselected package libnl-3-200:amd64. Preparing to unpack .../1-libnl-3-200_3.4.0-1_amd64.deb ... Unpacking libnl-3-200:amd64 (3.4.0-1) ... Selecting previously unselected package libnl-route-3-200:amd64. Preparing to unpack .../2-libnl-route-3-200_3.4.0-1_amd64.deb ... Unpacking libnl-route-3-200:amd64 (3.4.0-1) ... Selecting previously unselected package libsubunit0:amd64. Preparing to unpack .../3-libsubunit0_1.4.0-0ubuntu1_amd64.deb ... Unpacking libsubunit0:amd64 (1.4.0-0ubuntu1) ... Selecting previously unselected package libvppinfra. Preparing to unpack .../4-libvppinfra_21.10.1-release_amd64.deb ... Unpacking libvppinfra (21.10.1-release) ... Selecting previously unselected package vpp. Preparing to unpack .../5-vpp_21.10.1-release_amd64.deb ... start-stop-daemon: unable to stat /usr/bin/vpp (No such file or directory) Unpacking vpp (21.10.1-release) ... Selecting previously unselected package vpp-plugin-core. Preparing to unpack .../6-vpp-plugin-core_21.10.1-release_amd64.deb ... Unpacking vpp-plugin-core (21.10.1-release) ... Selecting previously unselected package vpp-plugin-dpdk. Preparing to unpack .../7-vpp-plugin-dpdk_21.10.1-release_amd64.deb ... Unpacking vpp-plugin-dpdk (21.10.1-release) ... Setting up libsubunit0:amd64 (1.4.0-0ubuntu1) ... Setting up libvppinfra (21.10.1-release) ... Setting up libnuma1:amd64 (2.0.12-1) ... Setting up libnl-3-200:amd64 (3.4.0-1) ... Setting up libnl-route-3-200:amd64 (3.4.0-1) ... Setting up vpp (21.10.1-release) ...
Applying /etc/sysctl.d/10-console-messages.conf ... sysctl: setting key "kernel.printk", ignoring: Read-only file systemApplying /etc/sysctl.d/10-ipv6-privacy.conf ... sysctl: setting key "net.ipv6.conf.all.use_tempaddr", ignoring: Read-only file system sysctl: setting key "net.ipv6.conf.default.use_tempaddr", ignoring: Read-only file systemApplying /etc/sysctl.d/10-kernel-hardening.conf ... sysctl: setting key "kernel.kptr_restrict", ignoring: Read-only file systemApplying /etc/sysctl.d/10-link-restrictions.conf ... sysctl: setting key "fs.protected_hardlinks", ignoring: Read-only file system sysctl: setting key "fs.protected_symlinks", ignoring: Read-only file systemApplying /etc/sysctl.d/10-magic-sysrq.conf ... sysctl: setting key "kernel.sysrq", ignoring: Read-only file systemApplying /etc/sysctl.d/10-network-security.conf ... sysctl: setting key "net.ipv4.conf.default.rp_filter", ignoring: Read-only file system sysctl: setting key "net.ipv4.conf.all.rp_filter", ignoring: Read-only file systemApplying /etc/sysctl.d/10-ptrace.conf ... sysctl: setting key "kernel.yama.ptrace_scope", ignoring: Read-only file systemApplying /etc/sysctl.d/10-zeropage.conf ... sysctl: setting key "vm.mmap_min_addr", ignoring: Read-only file systemApplying /usr/lib/sysctl.d/50-default.conf ... sysctl: setting key "net.ipv4.conf.default.promote_secondaries", ignoring: Read-only file system sysctl: setting key "net.ipv4.conf.all.promote_secondaries", ignoring: Read-only file system sysctl: setting key "net.ipv4.ping_group_range", ignoring: Read-only file system sysctl: setting key "fs.protected_regular", ignoring: Read-only file system sysctl: setting key "fs.protected_fifos", ignoring: Read-only file systemApplying /usr/lib/sysctl.d/50-pid-max.conf ... sysctl: setting key "kernel.pid_max", ignoring: Read-only file systemApplying /etc/sysctl.d/80-vpp.conf ... sysctl: setting key "vm.nr_hugepages", ignoring: Read-only file system sysctl: setting key "vm.max_map_count", ignoring: Read-only file system sysctl: setting key "vm.hugetlb_shm_group", ignoring: Read-only file system sysctl: setting key "kernel.shmmax", ignoring: Read-only file systemApplying /etc/sysctl.d/99-sysctl.conf ...Applying /usr/lib/sysctl.d/protect-links.conf ... sysctl: setting key "fs.protected_fifos", ignoring: Read-only file system sysctl: setting key "fs.protected_hardlinks", ignoring: Read-only file system sysctl: setting key "fs.protected_regular", ignoring: Read-only file system sysctl: setting key "fs.protected_symlinks", ignoring: Read-only file systemApplying /etc/sysctl.conf ... Created symlink /etc/systemd/system/multi-user.target.wants/vpp.service → /lib/systemd/system/vpp.service. Setting up vpp-plugin-dpdk (21.10.1-release) ... Setting up vpp-plugin-core (21.10.1-release) ... Processing triggers for libc-bin (2.31-0ubuntu9.9) ... gitpod /workspace $ sudo vi /etc/apt/sources.list.d/99fd.io.list gitpod /workspace $ sudo apt install vpp vpp-plugin-core vpp-plugin-dpdk
Reading package lists... 0% Reading package lists... Done Building dependency tree
Reading state information... Done vpp is already the newest version (21.10.1-release). vpp-plugin-core is already the newest version (21.10.1-release). vpp-plugin-dpdk is already the newest version (21.10.1-release). 0 upgraded, 0 newly installed, 0 to remove and 21 not upgraded. gitpod /workspace $ gitpod /workspace $ gitpod /workspace $ sudo apt install vpp vpp-plugin-core vpp-plugin-dpdk^C gitpod /workspace $ sudo usermod -a -G vpp user1 usermod: user 'user1' does not exist gitpod /workspace $ sudo useradd vpp1 gitpod /workspace $ sudo usermod -a -G vpp vpp1 gitpod /workspace $ gitpod /workspace $ gitpod /workspace $ newgrp vpp Password: Invalid password. gitpod /workspace $ newgrp vpp Password: Invalid password. gitpod /workspace $ newgrp vpp Password: Invalid password. gitpod /workspace $ sudo passwd vpp passwd: user 'vpp' does not exist gitpod /workspace $ sudo passwd -g vpp passwd: invalid option -- 'g' Usage: passwd [options] [LOGIN]
Options: -a, --all report password status on all accounts -d, --delete delete the password for the named account -e, --expire force expire the password for the named account -h, --help display this help message and exit -k, --keep-tokens change password only if expired -i, --inactive INACTIVE set password inactive after expiration to INACTIVE -l, --lock lock the password of the named account -n, --mindays MIN_DAYS set minimum number of days before password change to MIN_DAYS -q, --quiet quiet mode -r, --repository REPOSITORY change password in REPOSITORY repository -R, --root CHROOT_DIR directory to chroot into -S, --status report password status on the named account -u, --unlock unlock the password of the named account -w, --warndays WARN_DAYS set expiration warning days to WARN_DAYS -x, --maxdays MAX_DAYS set maximum number of days before password change to MAX_DAYS
gitpod /workspace $ sudo passwd vpp1 New password: Retype new password: passwd: password updated successfully gitpod /workspace $ newgrp vpp Password: Invalid password. gitpod /workspace $ sudo newgrp vpp root@jbeder-yamlcpp-radsrx9yecm:/workspace# root@jbeder-yamlcpp-radsrx9yecm:/workspace# root@jbeder-yamlcpp-radsrx9yecm:/workspace# cat /usr/lib/systemd/system/vpp.service [Unit] Description=vector packet processing engine After=network.target
[Service] Type=simple ExecStartPre=-/sbin/modprobe uio_pci_generic ExecStart=/usr/bin/vpp -c /etc/vpp/startup.conf ExecStopPost=/bin/rm -f /dev/shm/db /dev/shm/global_vm /dev/shm/vpe-api Restart=always
Uncomment the following line to enable VPP coredumps on crash
You still need to configure the rest of the system to collect them, see
https://fdio-vpp.readthedocs.io/en/latest/troubleshooting/reportingissues/reportingissues.html#core-files
for details
#LimitCORE=infinity
[Install] WantedBy=multi-user.target root@jbeder-yamlcpp-radsrx9yecm:/workspace# ls /run/ apache2/ lock/ mount/ sendsigs.omit.d/ systemd/ utmp
docker.sock log/ nginx/ shm/ user/
root@jbeder-yamlcpp-radsrx9yecm:/workspace# ls /run/ apache2/ lock/ mount/ sendsigs.omit.d/ systemd/ utmp
docker.sock log/ nginx/ shm/ user/
root@jbeder-yamlcpp-radsrx9yecm:/workspace# ls /run/ apache2/ lock/ mount/ sendsigs.omit.d/ systemd/ utmp
docker.sock log/ nginx/ shm/ user/
root@jbeder-yamlcpp-radsrx9yecm:/workspace# sudo vppctl -s /run/vpp/cli-vpp1.sock clib_socket_init: connect (fd 3, '/run/vpp/cli-vpp1.sock'): No such file or directoryroot@jbeder-yamlcpp-radsrx9yecm:/workspace# root@jbeder-yamlcpp-radsrx9yecm:/workspace# root@jbeder-yamlcpp-radsrx9yecm:/workspace# root@jbeder-yamlcpp-radsrx9yecm:/workspace# /etc/ alternatives/ containerd/ dpkg/ init/ logrotate.d/ PackageKit/ python3.8/ rcS.d/ sudoers.d/ vpp/ apache2/ cron.d/ emacs/ init.d/ lynx/ pam.d/ rc0.d/ rmt sysctl.d/ X11/ apparmor.d/ cron.daily/ fish/ iproute2/ mercurial/ perl/ rc1.d/ security/ systemd/ xdg/ apt/ cron.weekly/ fonts/ kernel/ modules-load.d/ php/ rc2.d/ selinux/ terminfo/ zsh/ bash_completion.d/ dbus-1/ gdb/ ldap/ mysql/ polkit-1/ rc3.d/ skel/ tmpfiles.d/
binfmt.d/ dconf/ groff/ ld.so.conf.d/ nginx/ profile.d/ rc4.d/ ssh/ ufw/
ca-certificates/ default/ gss/ libnl-3/ nix/ python2.7/ rc5.d/ ssl/ update-motd.d/
calendar/ dhcp/ ImageMagick-6/ logcheck/ opt/ python3/ rc6.d/ subversion/ vim/
root@jbeder-yamlcpp-radsrx9yecm:/workspace# vpp root@jbeder-yamlcpp-radsrx9yecm:/workspace# vppctl clib_socket_init: connect (fd 3, '/run/vpp/cli.sock'): No such file or directoryroot@jbeder-yamlcpp-radsrx9yecm:/workspace# root@jbeder-yamlcpp-radsrx9yecm:/workspace# root@jbeder-yamlcpp-radsrx9yecm:/workspace# cat /run/vpp/cli-vpp1.sock cat: /run/vpp/cli-vpp1.sock: No such file or directory root@jbeder-yamlcpp-radsrx9yecm:/workspace# ls /etc/vpp/ startup.conf root@jbeder-yamlcpp-radsrx9yecm:/workspace# cat /etc/vpp/startup.conf
unix { nodaemon log /var/log/vpp/vpp.log full-coredump cli-listen /run/vpp/cli.sock gid vpp
run vpp in the interactive mode
interactive
do not use colors in terminal output
nocolor
do not display banner
nobanner
}
api-trace {
This stanza controls binary API tracing. Unless there is a very strong reason,
please leave this feature enabled.
on
Additional parameters:

To set the number of binary API trace records in the circular buffer, configure nitems

nitems

To save the api message table decode tables, configure a filename. Results in /tmp/
Very handy for understanding api message changes between versions, identifying missing
plugins, and so forth.

save-api-table
}
api-segment { gid vpp }
socksvr { default }
memory {
    ## Set the main heap size, default is 1G    # main-heap-size 2G    ## Set the main heap page size. Default page size is OS default page    ## which is in most cases 4K. if different page size is specified VPP    ## will try to allocate main heap by using specified page size.    ## special keyword 'default-hugepage' will use system default hugepage    ## size    # main-heap-page-size 1G    ## Set the default huge page size.    # default-hugepage-size 1G
#}
cpu { ## In the VPP there is one main thread and optionally the user can create worker(s) ## The main thread and worker thread(s) can be pinned to CPU core(s) manually or automatically
    ## Manual pinning of thread(s) to CPU core(s)    ## Set logical CPU core where main thread runs, if main core is not set    ## VPP will use core 1 if available    # main-core 1    ## Set logical CPU core(s) where worker threads are running    # corelist-workers 2-3,18-19    ## Automatic pinning of thread(s) to CPU core(s)    ## Sets number of CPU core(s) to be skipped (1 ... N-1)    ## Skipped CPU core(s) are not used for pinning main thread and working thread(s).    ## The main thread is automatically pinned to the first available CPU core and worker(s)    ## are pinned to next free CPU core(s) after core assigned to main thread    # skip-cores 4    ## Specify a number of workers to be created    ## Workers are pinned to N consecutive CPU cores while skipping "skip-cores" CPU core(s)    ## and main thread's CPU core    # workers 2    ## Set scheduling policy and priority of main and worker threads    ## Scheduling policy options are: other (SCHED_OTHER), batch (SCHED_BATCH)    ## idle (SCHED_IDLE), fifo (SCHED_FIFO), rr (SCHED_RR)    # scheduler-policy fifo    ## Scheduling priority is used only for "real-time policies (fifo and rr),    ## and has to be in the range of priorities supported for a particular policy    # scheduler-priority 50
}
buffers {
    ## Increase number of buffers allocated, needed only in scenarios with    ## large number of interfaces and worker threads. Value is per numa node.    ## Default is 16384 (8192 if running unpriviledged)    # buffers-per-numa 128000    ## Size of buffer data area    ## Default is 2048    # default data-size 2048    ## Size of the memory pages allocated for buffer data    ## Default will try 'default-hugepage' then 'default'    ## you can also pass a size in K/M/G e.g. '8M'    # page-size default-hugepage
}
dpdk {
    ## Change default settings for all interfaces    # dev default {            ## Number of receive queues, enables RSS            ## Default is 1            # num-rx-queues 3            ## Number of transmit queues, Default is equal            ## to number of worker threads or 1 if no workers treads            # num-tx-queues 3            ## Number of descriptors in transmit and receive rings            ## increasing or reducing number can impact performance            ## Default is 1024 for both rx and tx            # num-rx-desc 512            # num-tx-desc 512            ## VLAN strip offload mode for interface            ## Default is off            # vlan-strip-offload on            ## TCP Segment Offload            ## Default is off            ## To enable TSO, 'enable-tcp-udp-checksum' must be set            # tso on            ## Devargs            ## device specific init args            ## Default is NULL            # devargs safe-mode-support=1,pipeline-mode-support=1            ## rss-queues            ## set valid rss steering queues            # rss-queues 0,2,5-7    # }    ## Whitelist specific interface by specifying PCI address    # dev 0000:02:00.0    ## Blacklist specific device type by specifying PCI vendor:device    ## Whitelist entries take precedence    # blacklist 8086:10fb    ## Set interface name    # dev 0000:02:00.1 {    #       name eth0    # }    ## Whitelist specific interface by specifying PCI address and in    ## addition specify custom parameters for this interface    # dev 0000:02:00.1 {    #       num-rx-queues 2    # }    ## Change UIO driver used by VPP, Options are: igb_uio, vfio-pci,    ## uio_pci_generic or auto (default)    # uio-driver vfio-pci    ## Disable multi-segment buffers, improves performance but    ## disables Jumbo MTU support    # no-multi-seg    ## Change hugepages allocation per-socket, needed only if there is need for    ## larger number of mbufs. Default is 256M on each detected CPU socket    # socket-mem 2048,2048    ## Disables UDP / TCP TX checksum offload. Typically needed for use    ## faster vector PMDs (together with no-multi-seg)    # no-tx-checksum-offload    ## Enable UDP / TCP TX checksum offload    ## This is the reversed option of 'no-tx-checksum-offload'    # enable-tcp-udp-checksum    ## Enable/Disable AVX-512 vPMDs    # max-simd-bitwidth <256|512>
}
node variant defaults
#node {
specify the preferred default variant
default { variant avx512 }
specify the preferred variant, for a given node
ip4-rewrite { variant avx2 }
#}
plugins {
    ## Adjusting the plugin path depending on where the VPP plugins are    #       path /ws/vpp/build-root/install-vpp-native/vpp/lib/vpp_plugins    ## Disable all plugins by default and then selectively enable specific plugins    # plugin default { disable }    # plugin dpdk_plugin.so { enable }    # plugin acl_plugin.so { enable }    ## Enable all plugins by default and then selectively disable specific plugins    # plugin dpdk_plugin.so { disable }    # plugin acl_plugin.so { disable }
}
Statistics Segment
statseg {
# socket-name <filename>, name of the stats segment socket#     defaults to /run/vpp/stats.sock# size <nnn>[KMG], size of the stats segment, defaults to 32mb# page-size <nnn>, page size, ie. 2m, defaults to 4k# per-node-counters on | off, defaults to none# update-interval <f64-seconds>, sets the segment scrape / update interval
}
L2 FIB
l2fib {
## l2fib hash table size.#  table-size 512M## l2fib hash table number of buckets. Must be power of 2.#  num-buckets 524288
}
ipsec
{
ip4 {
ipsec for ipv4 tunnel lookup hash number of buckets.
num-buckets 524288
}
ip6 {
ipsec for ipv6 tunnel lookup hash number of buckets.
num-buckets 524288
}
}
logging {
set default logging level for logging buffer
logging levels: emerg, alert,crit, error, warn, notice, info, debug, disabled
default-log-level debug
set default logging level for syslog or stderr output
default-syslog-log-level info
Set per-class configuration
class dpdk/cryptodev { rate-limit 100 level debug syslog-level error }
}
root@jbeder-yamlcpp-radsrx9yecm:/workspace# sudo /usr/bin/vpp -c /etc/vpp/startup1.conf open configuration file '/etc/vpp/startup1.conf' failed root@jbeder-yamlcpp-radsrx9yecm:/workspace# cp /etc/vpp/startup.conf startup.conf root@jbeder-yamlcpp-radsrx9yecm:/workspace# sudo /usr/bin/vpp -c /etc/vpp/startup.conf unix_config:476: couldn't open log '/var/log/vpp/vpp.log' /usr/bin/vpp[10028]: clib_sysfs_prealloc_hugepages:262: pre-allocating 20 additional 2048K hugepages on numa node 0 /usr/bin/vpp[10028]: buffer: numa[0] falling back to non-hugepage backed buffer pool (vlib_physmem_shared_map_create: pmalloc_map_pages: failed to mmap 20 pages at 0x1000000000 fd 4 numa 0 flags 0x11: Cannot allocate memory) /usr/bin/vpp[10028]: clib_sysfs_prealloc_hugepages:262: pre-allocating 8 additional 2048K hugepages on numa node 0 /usr/bin/vpp[10028]: vlib_pci_bind_to_uio: Skipping PCI device 0000:00:05.0: missing kernel VFIO or UIO drive EAL: FATAL: Cannot get hugepage information. vpp[10028]: dpdk_config: rte_eal_init returned - root@jbeder-yamlcpp-radsrx9yecm:/workspace# sudo /usr/bin/vpp -c ./startup.conf unix_config:476: couldn't open log '/var/log/vpp/vpp.log' /usr/bin/vpp[10031]: clib_sysfs_prealloc_hugepages:262: pre-allocating 20 additional 2048K hugepages on numa node 0 /usr/bin/vpp[10031]: buffer: numa[0] falling back to non-hugepage backed buffer pool (vlib_physmem_shared_map_create: pmalloc_map_pages: failed to mmap 20 pages at 0x1000000000 fd 4 numa 0 flags 0x11: Cannot allocate memory) /usr/bin/vpp[10031]: clib_sysfs_prealloc_hugepages:262: pre-allocating 8 additional 2048K hugepages on numa node 0 /usr/bin/vpp[10031]: vlib_pci_bind_to_uio: Skipping PCI device 0000:00:05.0: missing kernel VFIO or UIO drive EAL: FATAL: Cannot get hugepage information. vpp[10031]: dpdk_config: rte_eal_init returned -
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://i.janardhanpulivarthi.com/tools/install-vpp-on-ubuntu.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
