mirror of
https://github.com/vyos/vyos-documentation.git
synced 2025-10-26 08:41:46 +01:00
394 lines
14 KiB
ReStructuredText
394 lines
14 KiB
ReStructuredText
.. _build:
|
|
|
|
Building VyOS
|
|
=============
|
|
|
|
This will guide you though the process of building a VyOS ISO using Docker_.
|
|
This process has been tested on clean installs of Debian Jessie, Stretch, and
|
|
Buster.
|
|
|
|
.. note:: Starting with VyOS 1.2 the release model of VyOS has changed.
|
|
VyOS is now **free as in speech, but not as in beer**. This means
|
|
that while VyOS is still an open source project, the release ISOs are no
|
|
longer free and can only be obtained via subscription, or by contributing to
|
|
the community.
|
|
|
|
The source code remains public and an ISO can be built
|
|
using the process outlined here.
|
|
|
|
Installing Docker_ and prerequisites:
|
|
|
|
.. code-block:: none
|
|
|
|
$ apt-get update
|
|
$ apt-get install -y apt-transport-https ca-certificates curl \
|
|
gnupg2 software-properties-common
|
|
$ curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
|
|
$ add-apt-repository "deb [arch=amd64] \
|
|
https://download.docker.com/linux/debian $(lsb_release -cs) stable"
|
|
$ apt-get update
|
|
$ apt-get install -y docker-ce
|
|
|
|
To be able to use Docker_, the current non-root user should be added to the
|
|
``docker`` group by calling: ``usermod -aG docker yourusername``
|
|
|
|
.. note:: It is recommended to use that non-root user for the remaining steps.
|
|
|
|
.. note:: The build process needs to be built on a local file system, building
|
|
on SMB or NFS shares will result in the container failing to build properly!
|
|
|
|
Build Docker Container
|
|
----------------------
|
|
|
|
The container can built by hand or by fetching the pre-built one from DockerHub.
|
|
Using the pre-built VyOS DockerHub organisation (https://hub.docker.com/u/vyos)
|
|
will ensure that the container is always up-to-date. A rebuild is triggered once
|
|
the container changes (please note this will take 2-3 hours after pushing to
|
|
the vyos-build repository).
|
|
|
|
The container can always be built directly from source:
|
|
|
|
.. code-block:: none
|
|
|
|
$ git clone -b current --single-branch https://github.com/vyos/vyos-build
|
|
$ docker build -t vyos/vyos-build docker
|
|
|
|
.. note:: The container is automatically downloaded from Dockerhub if it is not
|
|
found on your local machine when the below command is executed.
|
|
|
|
.. note:: We require one container per build branch, this means that the used
|
|
container in ``crux`` and ``current`` can and will differ once VyOS makes
|
|
the move towards Debian (10) Buster.
|
|
|
|
.. _build_iso:
|
|
|
|
Build ISO
|
|
---------
|
|
|
|
After the container is generated either manually or fetched from DockerHub,
|
|
a fresh build of the VyOS ISO can begin.
|
|
|
|
.. code-block:: none
|
|
|
|
$ docker run --rm -it --privileged -v $(pwd):/vyos -w /vyos vyos/vyos-build bash
|
|
vyos_bld@d4220bb519a0:/vyos# ./configure --architecture amd64 \
|
|
--build-by "your@email.tld" \
|
|
--build-type release --version 1.2.0
|
|
vyos_bld@d4220bb519a0:/vyos# sudo make iso
|
|
|
|
To select the container you want to run, you need to specify the branch you are
|
|
interested in, this can be easily done by selecting the appropriate container
|
|
image:
|
|
|
|
* For VyOS 1.2 (crux) use ``vyos/vyos-build:crux``
|
|
* For VyOS 1.3 (equuleus) use ``vyos/vyos-build:equuleus``
|
|
* For our VyOS rolling release you should use ``vyos/vyos-build`` which will
|
|
always refer to the latest image.
|
|
|
|
This ISO can be customized with the following list of configure options.
|
|
The full and current list can be generated with ``./configure --help``:
|
|
|
|
.. code-block:: none
|
|
|
|
-h, --help show this help message and exit
|
|
--architecture ARCHITECTURE
|
|
Image target architecture (amd64 or i586 or armhf)
|
|
--build-by BUILD_BY Builder identifier (e.g. jrandomhacker@example.net)
|
|
--custom-package CUSTOM_PACKAGES
|
|
Custom packages to install from repositories
|
|
--build-type BUILD_TYPE
|
|
Build type, release or development
|
|
--debian-security-mirror DEBIAN_SECURITY_MIRROR
|
|
Debian security updated mirror
|
|
--version VERSION Version number (release builds only)
|
|
--debian-mirror DEBIAN_MIRROR
|
|
Debian repository mirror for ISO build
|
|
--vyos-mirror VYOS_MIRROR
|
|
VyOS package mirror
|
|
--pbuilder-debian-mirror PBUILDER_DEBIAN_MIRROR
|
|
Debian repository mirror for pbuilder env bootstrap
|
|
--debug Enable debug output
|
|
--custom-apt-entry CUSTOM_APT_ENTRY
|
|
Custom APT entry
|
|
--custom-apt-key CUSTOM_APT_KEY
|
|
Custom APT key file
|
|
|
|
The successfully built ISO should now be in the `build/` directory.
|
|
|
|
Good luck!
|
|
|
|
.. note:: The build process does not differentiate when building a ``crux`` ISO
|
|
or ``rolling`` image. Make sure to choose the matching container for the
|
|
version of VyOS that is being built.
|
|
|
|
.. _build_packages:
|
|
|
|
Build packages
|
|
--------------
|
|
|
|
VyOS requires a bunch of packages which are VyOS specific and thus can not be
|
|
found in any Debian Upstream mirrror. Those packages can be found at the VyOS
|
|
GitHub project (https://github.com/vyos) and there is a nice helper script
|
|
available to build and list those individual packages.
|
|
|
|
`scripts/build-packages` provides an easy interface to automate the process
|
|
of building all VyOS related packages that are not part of the upstream Debian
|
|
version. Execute it in the root of the `vyos-build` directory to start
|
|
compilation.
|
|
|
|
.. code-block:: none
|
|
|
|
$ scripts/build-packages -h
|
|
usage: build-packages [-h] [-c | -k | -f] [-v] [-l] [-b BUILD [BUILD ...]]
|
|
[-p] [--blacklist BLACKLIST [BLACKLIST ...]]
|
|
|
|
optional arguments:
|
|
-h, --help show this help message and exit
|
|
-c, --clean Re-clone required Git repositories
|
|
-k, --keep Keep modified Git repositories
|
|
-f, --fetch Fetch sources only, no build
|
|
-v, --verbose Increase logging verbosity for each occurance
|
|
-l, --list-packages List all packages to build
|
|
-b BUILD [BUILD ...], --build BUILD [BUILD ...]
|
|
Whitespace separated list of packages to build
|
|
-p, --parallel Build on all CPUs
|
|
--blacklist BLACKLIST [BLACKLIST ...]
|
|
Do not build/report packages when calling --list
|
|
|
|
Git repositoriers are automatically fetched and build on demand. If you want to
|
|
work offline you can fetch all source code first with the `-f` option.
|
|
|
|
The easiest way to compile is with the above mentioned Docker
|
|
container, it includes all dependencies for compiling supported packages.
|
|
|
|
.. code-block:: none
|
|
|
|
$ docker run --rm -it -v $(pwd):/vyos -w /vyos \
|
|
--sysctl net.ipv6.conf.lo.disable_ipv6=0 \
|
|
vyos-builder scripts/build-packages
|
|
|
|
.. note:: `--sysctl net.ipv6.conf.lo.disable_ipv6=0` is required to build the
|
|
`vyos-strongswan` package
|
|
|
|
.. note:: Prior to executing this script you need to create or build the Docker
|
|
container and checkout all packages you want to compile.
|
|
|
|
Building single package(s)
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
To build a single package use the same script as above but specify packages with
|
|
`-b`:
|
|
|
|
Executed from the root of `vyos-build`
|
|
|
|
.. code-block:: none
|
|
|
|
$ docker run --rm -it -v $(pwd):/vyos -w /vyos/packages/PACKAGENAME \
|
|
--sysctl net.ipv6.conf.lo.disable_ipv6=0 \
|
|
vyos-builder scripts/build-packages -b <package>
|
|
|
|
.. note:: `--sysctl net.ipv6.conf.lo.disable_ipv6=0` is only needed when
|
|
building `vyos-strongswan` and can be ignored on other packages.
|
|
|
|
.. note:: `vyos-strongswan` will only compile on a Linux system, running on
|
|
macOS or Windows might result in a unittest deadlock (it never exits).
|
|
|
|
Building single packages from your own repositories
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
You can also build packages that are not from the default git repositories,
|
|
for example from your own forks of the official vyos repositories.
|
|
|
|
First create a directory "packages" at the top level of the vyos-build
|
|
repository and clone your package into it (creating a subdirectory with the
|
|
package contents). Then checkout the correct branch or commit you want to build
|
|
before building the package.
|
|
|
|
Example using `git@github.com:myname/vyos-1x.git` repository to build vyos-1x:
|
|
|
|
.. code-block:: none
|
|
|
|
$ mkdir packages
|
|
$ cd packages
|
|
$ git clone git@github.com:myname/vyos-1x.git
|
|
$ cd ..
|
|
$ docker run --rm -it -v $(pwd):/vyos -w /vyos/packages/PACKAGENAME \
|
|
--sysctl net.ipv6.conf.lo.disable_ipv6=0 \
|
|
vyos-builder scripts/build-packages -b vyos-1x
|
|
|
|
.. note:: You need to git pull manually after you commit to the remote and
|
|
before rebuilding, the local repository won't be updated automatically.
|
|
|
|
.. warning:: Any packages in the packages directory will be added to the iso
|
|
during build, replacing the upstream ones. Make sure you delete them (both
|
|
the source directories and built deb packages) if you want to build an iso
|
|
from purely upstream packages.
|
|
|
|
|
|
.. _upstream_packages:
|
|
|
|
Upstream packages
|
|
-----------------
|
|
|
|
Many base system packages are pulled straight from Debian's main and contrib
|
|
repositories, but there are exceptions.
|
|
|
|
This chapter lists those exceptions and gives you a brief overview what we
|
|
have done on those packages. If you only want to build yourself a fresh ISO
|
|
you can completely skip this chapter. It may become interesting once you have
|
|
a VyOS deep dive.
|
|
|
|
vyos-netplug
|
|
^^^^^^^^^^^^
|
|
|
|
Due to issues in the upstream version that sometimes set interfaces down, a
|
|
modified version is used.
|
|
|
|
The source is located at https://github.com/vyos/vyos-netplug
|
|
|
|
In the future, we may switch to using systemd infrastructure instead. Building
|
|
it doesn't require a special procedure.
|
|
|
|
keepalived
|
|
^^^^^^^^^^
|
|
|
|
Keepalived normally isn't updated to newer feature releases between Debian
|
|
versions, so we are building it from source.
|
|
|
|
Debian does keep their package in git, but it's upstream tarball imported into
|
|
git without its original commit history. To be able to merge new tags in, we
|
|
keep a fork of the upstream repository with packaging files imported from
|
|
Debian at https://github.com/vyos/keepalived-upstream
|
|
|
|
strongswan
|
|
^^^^^^^^^^
|
|
|
|
Our StrongSWAN build differs from the upstream:
|
|
|
|
- strongswan-nm package build is disabled since we don't use NetworkManager
|
|
- Patches for DMVPN are merged in
|
|
|
|
The source is at https://github.com/vyos/vyos-strongswan
|
|
|
|
DMVPN patches are added by this commit:
|
|
https://github.com/vyos/vyos-strongswan/commit/1cf12b0f2f921bfc51affa3b81226
|
|
|
|
Our op mode scripts use the python-vici module, which is not included in
|
|
Debian's build, and isn't quite easy to integrate in that build. For this
|
|
reason we debianize that module by hand now, using this procedure:
|
|
|
|
0. Install https://pypi.org/project/stdeb/
|
|
1. `cd vyos-strongswan`
|
|
2. `./configure --enable-python-eggs`
|
|
3. `cd src/libcharon/plugins/vici/python`
|
|
4. `make`
|
|
5. `python3 setup.py --command-packages=stdeb.command bdist_deb`
|
|
|
|
The package ends up in deb_dist dir.
|
|
|
|
ppp
|
|
^^^
|
|
|
|
Properly renaming PPTP and L2TP interfaces to pptpX and l2tpX from generic and
|
|
non-informative pppX requires a patch that is neither in the upstream nor in
|
|
Debian.
|
|
|
|
We keep a fork of Debian's repo at https://github.com/vyos/ppp-debian
|
|
|
|
The patches for pre-up renaming are:
|
|
|
|
* https://github.com/vyos/ppp-debian/commit/e728180026a051d2a96396276e7e4ae
|
|
* https://github.com/vyos/ppp-debian/commit/f29ba8d9ebb043335a096d70bcd07e9
|
|
|
|
Additionally, there's a patch for reopening the log file to better support
|
|
logging to files, even though it's less essential:
|
|
https://github.com/vyos/ppp-debian/commit/dd2ebd5cdcddb40230dc4cc43d374055f
|
|
|
|
The patches were written by Stephen Hemminger back in the Vyatta times.
|
|
|
|
mdns-repeater
|
|
^^^^^^^^^^^^^
|
|
|
|
This package doesn't exist in Debian. A debianized fork is kept at
|
|
https://github.com/vyos/mdns-repeater
|
|
|
|
No special build procedure is required.
|
|
|
|
udp-broadcast-relay
|
|
^^^^^^^^^^^^^^^^^^^
|
|
|
|
This package doesn't exist in Debian. A debianized fork is kept at
|
|
https://github.com/vyos/udp-broadcast-relay
|
|
|
|
No special build procedure is required.
|
|
|
|
Linux kernel
|
|
^^^^^^^^^^^^
|
|
|
|
In the past a fork of the Kernel source code was kept at the well-known
|
|
location of https://github.com/vyos/vyos-kernel - where it is kept for history.
|
|
|
|
Nowadays the Kernel we use is the upstream source code which is patched
|
|
with two additional patches from the good old Vyatta times which never made it
|
|
into the mainstream Kernel. The patches can be found here:
|
|
https://github.com/vyos/vyos-build-kernel/tree/current/patches/kernel and are
|
|
automatically applied to the Kernel by the Jenkins Pipeline which is used to
|
|
generate the Kernel binaries.
|
|
|
|
The Pipeline script not only builds the Kernel with the configuration named
|
|
``x86_64_vyos_defconfig`` which is located in the vyos-build-kernel repository,
|
|
too - but in addition also builds some Intel out-of-tree drivers, WireGuard
|
|
(as long it is not upstreamed) and Accel-PPP.
|
|
|
|
The ``Jenkinsfile`` tries to be as verbose as possible on each individual build
|
|
step.
|
|
|
|
Linux Firmware
|
|
^^^^^^^^^^^^^^
|
|
|
|
More and more hardware cards require an additional firmware which is not open
|
|
source. The Kernel community hosts a special linux-firmware Git repository
|
|
with all available binary files which can be loaded by the Kernel.
|
|
|
|
The ``vyos-build`` repository fetches a specific commit of the linux-firmware
|
|
repository and embeds those binaries into the resulting ISO image. This step is
|
|
done in the ``data/live-build-config/hooks/live/40-linux-firmware.chroot`` file.
|
|
|
|
If the firmware needs to be updated it is sufficient to just exchange the Git
|
|
commit id we reference in our build.
|
|
|
|
Intel NIC drivers
|
|
^^^^^^^^^^^^^^^^^
|
|
|
|
We do not make use of the building Intel NIC drivers except for e1000e. Main
|
|
reason is that the out of tree Intel drivers seem be perform a bit better,
|
|
e.q. have proper receive-side-scaling and multi-queue support.
|
|
|
|
Drivers are build as part of the Kernel Pipeline - read above.
|
|
|
|
Accel-PPP
|
|
^^^^^^^^^
|
|
|
|
Accel-PPP used to be an upstream fork for quiet some time but now has been
|
|
converted to make use of the upstream source code and build system.
|
|
|
|
It is build as part of the Kernel Pipeline - read above.
|
|
|
|
hvinfo
|
|
^^^^^^
|
|
|
|
A fork with packaging changes for VyOS is kept at https://github.com/vyos/hvinfo
|
|
|
|
The original repo is at https://github.com/dmbaturin/hvinfo
|
|
|
|
It's an Ada program and requires GNAT and gprbuild for building, dependencies
|
|
are properly specified so just follow debuild's suggestions.
|
|
|
|
Per-file modifications
|
|
^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
vyos-replace package replaces the upstream dhclient-script with a modified
|
|
version that is aware of the VyOS config.
|
|
|
|
.. _Docker: https://www.docker.com
|