5f6422db9c
- cleaned up the 'build/run VPP' docs Type: docs Signed-off-by: Saima Yunus <yunus.saima.99@gmail.com> Change-Id: I9dbddbe1932804b8d507cb2f1631cd7116e59072
283 lines
9.2 KiB
ReStructuredText
283 lines
9.2 KiB
ReStructuredText
.. _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 *.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 bash
|
|
# dpkg -i *.deb
|
|
|
|
For Centos or Redhat:
|
|
|
|
.. code-block:: console
|
|
|
|
$ sudo bash
|
|
# rpm -ivh *.rpm
|