blob: c012f691e8b3b1369e5445df6fdf8a9c1d13e292 [file] [log] [blame]
John DeNiscoc4c72d22018-08-16 13:50:02 -04001.. _settingupenvironment:
2
3Setting up your environment
4===========================
5
6All of these exercises are designed to be performed on an Ubuntu 16.04 (Xenial) box.
7
John DeNiscob0464872020-07-28 12:15:16 -04008* If you have an Ubuntu 18.04 box on which you have sudo or root access, you can feel free to use that.
9* If you do not, a Vagrantfile is provided to setup a basic Ubuntu 18.04 box for you in the the steps below.
John DeNiscoc4c72d22018-08-16 13:50:02 -040010
11Install Virtual Box and Vagrant
12-------------------------------
13
14You will need to install Virtual Box and Vagrant. If you have not installed Virtual Box or Vagrant please
15refer to :ref:`installingVboxVagrant` to install Virtual Box and Vagrant.
16
17Create a Vagrant Directory
18---------------------------
19
20To get started create a directory for vagrant
21
22.. code-block:: console
23
24 $ mkdir vpp-tutorial
25 $ cd vpp-tutorial
26
27Create a file called **Vagrantfile** with the following contents:
28
29.. code-block:: ruby
30
31 # -*- mode: ruby -*-
32 # vi: set ft=ruby :
33
34 Vagrant.configure(2) do |config|
35
John DeNiscob0464872020-07-28 12:15:16 -040036 config.vm.box = "bento/ubuntu-18.04"
John DeNiscoc4c72d22018-08-16 13:50:02 -040037 config.vm.box_check_update = false
38
39 vmcpu=(ENV['VPP_VAGRANT_VMCPU'] || 2)
40 vmram=(ENV['VPP_VAGRANT_VMRAM'] || 4096)
41
42 config.ssh.forward_agent = true
43
44 config.vm.provider "virtualbox" do |vb|
45 vb.customize ["modifyvm", :id, "--ioapic", "on"]
46 vb.memory = "#{vmram}"
47 vb.cpus = "#{vmcpu}"
48 #support for the SSE4.x instruction is required in some versions of VB.
49 vb.customize ["setextradata", :id, "VBoxInternal/CPUM/SSE4.1", "1"]
50 vb.customize ["setextradata", :id, "VBoxInternal/CPUM/SSE4.2", "1"]
51 end
52 end
53
54
55Running Vagrant
56---------------
57
58VPP runs in userspace. In a production environment you will often run it with
59DPDK to connect to real NICs or vhost to connect to VMs.mIn those circumstances
60you usually run a single instance of VPP.
61
62For purposes of this tutorial, it is going to be extremely useful to run multiple
63instances of vpp, and connect them to each other to form a topology. Fortunately,
64VPP supports this.
65
66When running multiple VPP instances, each instance needs to have specified a 'name'
67or 'prefix'. In the example below, the 'name' or 'prefix' is "vpp1". Note that only
68one instance can use the dpdk plugin, since this plugin is trying to acquire a lock
69on a file.
70
71Setting up VPP environment with Vagrant
72---------------------------------------------
73
74After setting up Vagrant, use these commands on your Vagrant directory to boot the VM:
75
76.. code-block:: console
77
78 $ vagrant up
79 $ vagrant ssh
John DeNiscob0464872020-07-28 12:15:16 -040080 $ sudo bash
81 # apt-get update
82 # reboot -n
John DeNiscoc4c72d22018-08-16 13:50:02 -040083 $ # Wait for the VM to reboot
84 $ vagrant ssh
85
86Install VPP
87------------
88
89Now that the VM is updated, we will install the VPP packages.
90
91For more on installing VPP please refer to :ref:`installingVPP`.
92
John DeNiscob0464872020-07-28 12:15:16 -040093For this tutorial we will install VPP by modifying the file
John DeNiscoc4c72d22018-08-16 13:50:02 -040094**/etc/apt/sources.list.d/99fd.io.list**.
95
John DeNiscob0464872020-07-28 12:15:16 -040096We write this file with the following contents:
John DeNiscoc4c72d22018-08-16 13:50:02 -040097
98.. code-block:: console
99
John DeNiscob0464872020-07-28 12:15:16 -0400100 $ sudo bash
101 # echo "deb [trusted=yes] https://packagecloud.io/fdio/release/ubuntu bionic main" > /etc/apt/sources.list.d/99fd.io.list
102 #
103
104Get the key.
105
106.. code-block:: console
107
108 # curl -L https://packagecloud.io/fdio/release/gpgkey | sudo apt-key add -
109 #
John DeNiscoc4c72d22018-08-16 13:50:02 -0400110
111Then execute the following commands.
112
113.. code-block:: console
114
John DeNiscoc4c72d22018-08-16 13:50:02 -0400115 # apt-get update
John DeNiscob0464872020-07-28 12:15:16 -0400116 # apt-get install vpp vpp-plugin-core vpp-plugin-dpdk
John DeNiscoc4c72d22018-08-16 13:50:02 -0400117 #
118
119Stop VPP for this tutorial. We will be creating our own instances of VPP.
120
121.. code-block:: console
122
123 # service vpp stop
124 #
125
126
127Create some startup files
128--------------------------
129
130We will create some startup files for the use of this tutorial. Typically you will
131modify the startup.conf file found in /etc/vpp/startup.conf. For more information
132on this file refer to :ref:`startup`.
133
134When running multiple VPP instances, each instance needs to have
135specified a 'name' or 'prefix'. In the example below, the 'name' or 'prefix'
136is "vpp1". Note that only one instance can use the dpdk plugin, since this
137plugin is trying to acquire a lock on a file. These startup files we create will
138disable the dpdk plugin.
139
140Also in our startup files notice **api-segment**. **api-segment {prefix vpp1}**
141tells FD.io VPP how to name the files in /dev/shm/ for your VPP instance
142differently from the default. **unix {cli-listen /run/vpp/cli-vpp1.sock}**
143tells vpp to use a non-default socket file when being addressed by vppctl.
144
145Now create 2 files named startup1.conf and startup2.conf with the following
146content. These files can be located anywhere. We specify the location when we
147start VPP.
148
149startup1.conf:
150
151.. code-block:: console
152
153 unix {cli-listen /run/vpp/cli-vpp1.sock}
154 api-segment { prefix vpp1 }
155 plugins { plugin dpdk_plugin.so { disable } }
156
157startup2.conf:
158
159.. code-block:: console
160
161 unix {cli-listen /run/vpp/cli-vpp2.sock}
162 api-segment { prefix vpp2 }
163 plugins { plugin dpdk_plugin.so { disable } }