summaryrefslogtreecommitdiffstats
path: root/docs/developer/build-run-debug/building.rst
blob: ca7fdef02229055361c61662b8cb9cb04cbc98a6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
.. _building:

.. toctree::

Building VPP
=====================

To get started developing with VPP, you need to get the required VPP sources and then build the packages.
For more detailed information on the build system please refer to :ref:`buildsystem`.

.. _makesureinstalled:

VPP for Ubuntu: Environment Setup
-------------------------------------------

If you are not downloading VPP on Ubuntu with WSL (Windows Subsystem for Linux), please disregard this section
and jump to 'Get the VPP Sources'.

Before starting on VPP for Ubuntu, make sure WSL2 and Ubuntu are installed.

To install WSL2 and Ubuntu, run Windows PowerShell as an administrator and enter this in the terminal:

.. code-block:: console

    $ wsl --install

Next, go to the 'resolv.conf' file in Ubuntu's '/etc' folder.
It should have been automatically generated when Ubuntu was installed; if it doesn't exist, create it.
Please use 'sudo' to avoid "File resolv.conf is unwritable" errors.

.. code-block:: console

    $ cd /etc
    $ sudo nano resolv.conf

In the file, add the following content in place of the current 'nameserver X.X.X.X' line:

.. code-block:: console

    nameserver 8.8.8.8

This replaces the DNS nameserver on your machine with the Google DNS service,
resolving any DNS Internet connection issues.

Note: by default, the 'resolv.conf' file regenerates every time you restart Ubuntu, so your changes won't be saved.
To keep your changes, run the following command to make 'resolv.conf' immutable:

.. code-block:: console

    $ sudo chattr +i /etc/resolv.conf


Now copy the following lines from 'resolv.conf':

.. code-block:: console

    [network]
    generateResolvConf = false

Then, go to the 'wsl.conf' file in '/etc' and paste the lines there.
Please use 'sudo' here as well to avoid "File wsl.conf is unwritable" errors.

.. code-block:: console

    $ sudo nano wsl.conf

In order to test your DNS server connection, please ping 8.8.8.8 on the terminal:

.. code-block:: console

    $ ping 8.8.8.8
    PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
    64 bytes from 8.8.8.8: icmp_seq=1 ttl=116 time=9.58 ms
    64 bytes from 8.8.8.8: icmp_seq=2 ttl=116 time=45.8 ms
    64 bytes from 8.8.8.8: icmp_seq=3 ttl=116 time=9.62 ms
    64 bytes from 8.8.8.8: icmp_seq=4 ttl=116 time=11.4 ms
    64 bytes from 8.8.8.8: icmp_seq=5 ttl=116 time=12.2 ms
    64 bytes from 8.8.8.8: icmp_seq=6 ttl=116 time=8.69 ms
    64 bytes from 8.8.8.8: icmp_seq=7 ttl=116 time=52.4 ms
    64 bytes from 8.8.8.8: icmp_seq=8 ttl=116 time=11.0 ms
    ...

While still in /etc, run the following commands:

.. code-block:: console

    $ sudo apt-get update
    $ sudo apt-get dist-upgrade
    $ sudo apt-get install --reinstall ca-certificates
    $ sudo update-ca-certificates


Finally, head back to your home directory and jump to 'Get the VPP Sources'.

.. _setupproxies:

Set up Proxies
--------------------------

Depending on the environment you are operating in, proxies may need to be set.
Run these proxy commands to specify the *proxy-server-name* and corresponding *port-number*:

.. code-block:: console

    $ export http_proxy=http://<proxy-server-name>.com:<port-number>
    $ export https_proxy=https://<proxy-server-name>.com:<port-number>


Get the VPP Sources
-----------------------------------

To get the VPP sources that are used to create the build, run the following commands:

.. code-block:: console

    $ git clone https://gerrit.fd.io/r/vpp
    $ cd vpp

Build VPP Dependencies
--------------------------------------

Before building a VPP image, make sure there are no FD.io VPP or DPDK packages
installed, by entering the following commands:

.. code-block:: console

    $ dpkg -l | grep vpp
    $ dpkg -l | grep DPDK

There should be no output, or no packages shown after the above commands are run.

Please make sure **make** is installed before running the next command.
If it is not installed, run the following command first:

.. code-block:: console

    $ sudo apt install make

Run the following **make** command to install the dependencies for FD.io VPP.

If the download hangs at any point, then you may need to
:ref:`set up proxies <setupproxies>` for the download to work.

.. code-block:: console

    $ make install-dep
    Hit:1 http://us.archive.ubuntu.com/ubuntu xenial InRelease
    Get:2 http://us.archive.ubuntu.com/ubuntu xenial-updates InRelease [109 kB]
    Get:3 http://security.ubuntu.com/ubuntu xenial-security InRelease [107 kB]
    Get:4 http://us.archive.ubuntu.com/ubuntu xenial-backports InRelease [107 kB]
    Get:5 http://us.archive.ubuntu.com/ubuntu xenial-updates/main amd64 Packages [803 kB]
    Get:6 http://us.archive.ubuntu.com/ubuntu xenial-updates/main i386 Packages [732 kB]
    ...
    ...
    Update-alternatives: using /usr/lib/jvm/java-8-openjdk-amd64/bin/jmap to provide /usr/bin/jmap (jmap) in auto mode
    Setting up default-jdk-headless (2:1.8-56ubuntu2) ...
    Processing triggers for libc-bin (2.23-0ubuntu3) ...
    Processing triggers for systemd (229-4ubuntu6) ...
    Processing triggers for ureadahead (0.100.0-19) ...
    Processing triggers for ca-certificates (20160104ubuntu1) ...
    Updating certificates in /etc/ssl/certs...
    0 added, 0 removed; done.
    Running hooks in /etc/ca-certificates/update.d...

    done.
    done.

Build VPP (Debug)
----------------------------

This build version contains debug symbols which are useful for modifying VPP. The
**make** command below builds a debug version of VPP. The binaries, when building the
debug images, can be found in /build-root/vpp_debug-native.

The Debug build version contains debug symbols, which are useful for troubleshooting
or modifying VPP. The **make** command below, builds a debug version of VPP. The
binaries used for building the debug image can be found in */build-root/vpp_debug-native*.

.. code-block:: console

    $ make build
    make[1]: Entering directory '/home/vagrant/vpp-master/build-root'
    @@@@ Arch for platform 'vpp' is native @@@@
    @@@@ Finding source for dpdk @@@@
    @@@@ Makefile fragment found in /home/vagrant/vpp-master/build-data/packages/dpdk.mk @@@@
    @@@@ Source found in /home/vagrant/vpp-master/dpdk @@@@
    @@@@ Arch for platform 'vpp' is native @@@@
    @@@@ Finding source for vpp @@@@
    @@@@ Makefile fragment found in /home/vagrant/vpp-master/build-data/packages/vpp.mk @@@@
    @@@@ Source found in /home/vagrant/vpp-master/src @@@@
    ...
    ...
    make[5]: Leaving directory '/home/vagrant/vpp-master/build-root/build-vpp_debug-native/vpp/vpp-api/java'
    make[4]: Leaving directory '/home/vagrant/vpp-master/build-root/build-vpp_debug-native/vpp/vpp-api/java'
    make[3]: Leaving directory '/home/vagrant/vpp-master/build-root/build-vpp_debug-native/vpp'
    make[2]: Leaving directory '/home/vagrant/vpp-master/build-root/build-vpp_debug-native/vpp'
    @@@@ Installing vpp: nothing to do @@@@
    make[1]: Leaving directory '/home/vagrant/vpp-master/build-root'

Build VPP (Release Version)
-----------------------------------------

This section describes how to build the regular release version of FD.io VPP. The
release build is optimized and does not create any debug symbols.
The binaries used in building the release images are found in */build-root/vpp-native*.

Use the following **make** command below to build the release version of FD.io VPP.

.. code-block:: console

    $ make build-release

Installing External Dependencies
-------------------------------------------
At this point, there are still some VPP external dependencies left to install. They could be installed
using 'make-build', but this only installs them locally in the VPP tree, not in the operating system.
In order to fix this and save time, run the following command:

.. code-block:: console

    $ make install-ext-deps

-------------------------------------------
Building Necessary Packages
-------------------------------------------

The package that needs to be built depends on the type system VPP will be running on:

* The :ref:`Debian package <debianpackages>` is built if VPP is going to run on Ubuntu
* The :ref:`RPM package <rpmpackages>` is built if VPP is going to run on Centos or Redhat

.. _debianpackages:

Building Debian Packages
^^^^^^^^^^^^^^^^^^^^^^^^^

To build the debian packages, use the following command:

.. code-block:: console

    $ make pkg-deb

.. _rpmpackages:

Building RPM Packages
^^^^^^^^^^^^^^^^^^^^^^^

To build the rpm packages, use one of the following commands below, depending on the system:

.. code-block:: console

    $ make pkg-rpm

Once the packages are built they can be found in the build-root directory.

.. code-block:: console

    $ ls build-root/*.deb

    If the packages are built correctly, then this should be the corresponding output:

    vpp_18.07-rc0~456-gb361076_amd64.deb             vpp-dbg_18.07-rc0~456-gb361076_amd64.deb
    vpp-dev_18.07-rc0~456-gb361076_amd64.deb         vpp-api-lua_18.07-rc0~456-gb361076_amd64.deb
    vpp-lib_18.07-rc0~456-gb361076_amd64.deb         vpp-api-python_18.07-rc0~456-gb361076_amd64.deb
    vpp-plugins_18.07-rc0~456-gb361076_amd64.deb

Finally, the created packages can be installed using the following commands. Install
the package that corresponds to OS that VPP will be running on:

For Ubuntu:

.. code-block:: console

   $ sudo dpkg -i build-root/*.deb

For Centos or Redhat:

.. code-block:: console

   $ sudo rpm -ivh build-root/*.rpm