mirror of
https://github.com/vyos/vyos-documentation.git
synced 2025-10-26 08:41:46 +01:00
400 lines
14 KiB
ReStructuredText
400 lines
14 KiB
ReStructuredText
.. _build:
|
|
|
|
##########
|
|
Build VyOS
|
|
##########
|
|
|
|
*************
|
|
Prerequisites
|
|
*************
|
|
|
|
There are different ways you can build VyOS.
|
|
|
|
Building using a :ref:`build_docker` container, although not the only way, is the
|
|
easiest way as all dependencies are managed for you. However, you can also
|
|
set up your own build machine and run a :ref:`build_native`.
|
|
|
|
.. 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 in this chapter.
|
|
|
|
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.
|
|
|
|
.. _build_docker:
|
|
|
|
Docker
|
|
======
|
|
|
|
Installing Docker_ and prerequisites:
|
|
|
|
.. code-block:: none
|
|
|
|
$ sudo apt-get update
|
|
$ sudo 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 -
|
|
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable"
|
|
$ sudo apt-get update
|
|
$ sudo apt-get install -y docker-ce
|
|
|
|
To be able to use Docker_ without ``sudo``, the current non-root user must be
|
|
added to the ``docker`` group by calling: ``sudo usermod -aG docker
|
|
yourusername``.
|
|
|
|
.. hint:: Doing so grants privileges equivalent to the ``root`` user! It is
|
|
recommended to remove the non-root user from the ``docker`` group after
|
|
building the VyOS ISO. See also `Docker as non-root`_.
|
|
|
|
.. 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!
|
|
VirtualBox Drive Share is also not an option as block device operations
|
|
are not implemented and the drive is always mounted as "nodev"
|
|
|
|
Build Container
|
|
---------------
|
|
|
|
The container can built by hand or by fetching the pre-built one from DockerHub.
|
|
Using the pre-built containers from the `VyOS DockerHub organisation`_ 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).
|
|
|
|
.. note: If you are using the pre-built container, it will be automatically
|
|
downloaded from DockerHub if it is not found on your local machine when
|
|
you build the ISO.
|
|
|
|
Dockerhub
|
|
^^^^^^^^^
|
|
|
|
To manually download the container from DockerHub, run:
|
|
|
|
.. code-block:: none
|
|
|
|
$ docker pull vyos/vyos-build:crux # For VyOS 1.2
|
|
$ docker pull vyos/vyos-build:current # For rolling release
|
|
|
|
Build from source
|
|
^^^^^^^^^^^^^^^^^
|
|
|
|
The container can also be built directly from source:
|
|
|
|
.. code-block:: none
|
|
|
|
# For VyOS 1.2 (crux)
|
|
$ git clone -b crux --single-branch https://github.com/vyos/vyos-build
|
|
# For VyOS 1.3 (equuleus, current)
|
|
$ git clone -b current --single-branch https://github.com/vyos/vyos-build
|
|
|
|
$ cd vyos-build
|
|
$ docker build -t vyos/vyos-build:crux docker # For VyOS 1.2
|
|
$ docker build -t vyos/vyos-build docker # For rollign release
|
|
|
|
.. note:: Since VyOS has switched to Debian (10) Buster in its ``current`` branch,
|
|
you will require individual container for `current` and `crux` builds.
|
|
|
|
Tips and Tricks
|
|
---------------
|
|
|
|
You can create yourself some handy Bash aliases to always launch the latest -
|
|
per release train (`current` or `crux`) - container. Add the following to your
|
|
``.bash_aliases`` file:
|
|
|
|
.. code-block:: none
|
|
|
|
alias vybld='docker pull vyos/vyos-build:current && docker run --rm -it \
|
|
-v "$(pwd)":/vyos \
|
|
-v "$HOME/.gitconfig":/etc/gitconfig \
|
|
-v "$HOME/.bash_aliases":/home/vyos_bld/.bash_aliases \
|
|
-v "$HOME/.bashrc":/home/vyos_bld/.bashrc \
|
|
-w /vyos --privileged --sysctl net.ipv6.conf.lo.disable_ipv6=0 \
|
|
-e GOSU_UID=$(id -u) -e GOSU_GID=$(id -g) \
|
|
vyos/vyos-build:current bash'
|
|
|
|
alias vybld_crux='docker pull vyos/vyos-build:crux && docker run --rm -it \
|
|
-v "$(pwd)":/vyos \
|
|
-v "$HOME/.gitconfig":/etc/gitconfig \
|
|
-v "$HOME/.bash_aliases":/home/vyos_bld/.bash_aliases \
|
|
-v "$HOME/.bashrc":/home/vyos_bld/.bashrc \
|
|
-w /vyos --privileged --sysctl net.ipv6.conf.lo.disable_ipv6=0 \
|
|
-e GOSU_UID=$(id -u) -e GOSU_GID=$(id -g) \
|
|
vyos/vyos-build:crux bash'
|
|
|
|
Now you are prepared with two new aliases ``vybld`` and ``vybld_crux`` to spwan
|
|
your development containers in your current working directory.
|
|
|
|
.. _build_native:
|
|
|
|
Native Build
|
|
============
|
|
|
|
To build VyOS natively you require a properly configured build host with the
|
|
following Debian versions installed:
|
|
|
|
- Debian Jessie for VyOS 1.2 (crux)
|
|
- Debian Buster for VyOS 1.3 (equuleus, current) - aka the rolling release
|
|
|
|
To start, clone the repository to your local machine:
|
|
|
|
.. code-block:: none
|
|
|
|
# For VyOS 1.2 (crux)
|
|
$ git clone -b crux --single-branch https://github.com/vyos/vyos-build
|
|
|
|
# For VyOS 1.3 (equuleus, current)
|
|
$ git clone -b current --single-branch https://github.com/vyos/vyos-build
|
|
|
|
For the packages required, you can refer to the ``docker/Dockerfile`` file
|
|
in the repository_. The ``./configure`` script will also warn you if any
|
|
dependencies are missing.
|
|
|
|
Once you have the required dependencies installed, you may proceed with the
|
|
steps descirbed in :ref:`build_iso`.
|
|
|
|
|
|
.. _build_iso:
|
|
|
|
*********
|
|
Build ISO
|
|
*********
|
|
|
|
Now as you are aware of the prerequisites we can continue and build our own
|
|
ISO from source. For this we have to fetch the latest source code from GitHub.
|
|
Please note as this will differ for both `current` and `crux`.
|
|
|
|
.. code-block:: none
|
|
|
|
# For VyOS 1.2 (crux)
|
|
$ git clone -b crux --single-branch https://github.com/vyos/vyos-build
|
|
|
|
# For VyOS 1.3 (equuleus, current)
|
|
$ git clone -b current --single-branch https://github.com/vyos/vyos-build
|
|
|
|
Now a fresh build of the VyOS ISO can begin. Change directory to the ``vyos-build`` directory and run:
|
|
|
|
.. code-block:: none
|
|
|
|
$ cd vyos-build
|
|
# For VyOS 1.2 (crux)
|
|
$ docker run --rm -it --privileged -v $(pwd):/vyos -w /vyos vyos/vyos-build:crux bash
|
|
|
|
# For VyOS 1.3 (equuleus, current)
|
|
$ docker run --rm -it --privileged -v $(pwd):/vyos -w /vyos vyos/vyos-build bash
|
|
|
|
Start the build:
|
|
|
|
.. code-block:: none
|
|
|
|
vyos_bld@d4220bb519a0:/vyos# ./configure --architecture amd64 --build-by "j.randomhacker@vyos.io"
|
|
vyos_bld@d4220bb519a0:/vyos# sudo make iso
|
|
|
|
When the build is successful, the resulting iso can be found inside the ``build``
|
|
directory as ``live-image-[architecture].hybrid.iso``.
|
|
|
|
Good luck!
|
|
|
|
.. hint:: Attempting to use the Docker build image on MacOS will fail as
|
|
Docker does not expose all the filesystem feature required to the container.
|
|
Building within a VirtualBox server on Mac however possible.
|
|
|
|
.. hint:: Building VyOS on Windows WSL2 with Docker integrated into WSL2 will work
|
|
like a charm. No problems are known so far!
|
|
|
|
.. _build source:
|
|
|
|
|
|
.. _customize:
|
|
|
|
Customize
|
|
=========
|
|
|
|
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
|
|
|
|
$ ./configure --help
|
|
usage: configure [-h] [--architecture ARCHITECTURE] [--build-by BUILD_BY]
|
|
[--debian-mirror DEBIAN_MIRROR]
|
|
[--debian-security-mirror DEBIAN_SECURITY_MIRROR]
|
|
[--pbuilder-debian-mirror PBUILDER_DEBIAN_MIRROR]
|
|
[--vyos-mirror VYOS_MIRROR] [--build-type BUILD_TYPE]
|
|
[--version VERSION] [--build-comment BUILD_COMMENT] [--debug]
|
|
[--custom-apt-entry CUSTOM_APT_ENTRY]
|
|
[--custom-apt-key CUSTOM_APT_KEY]
|
|
[--custom-package CUSTOM_PACKAGE]
|
|
|
|
optional arguments:
|
|
-h, --help show this help message and exit
|
|
--architecture ARCHITECTURE
|
|
Image target architecture (amd64 or i386 or armhf)
|
|
--build-by BUILD_BY Builder identifier (e.g. jrandomhacker@example.net)
|
|
--debian-mirror DEBIAN_MIRROR
|
|
Debian repository mirror for ISO build
|
|
--debian-security-mirror DEBIAN_SECURITY_MIRROR
|
|
Debian security updates mirror
|
|
--pbuilder-debian-mirror PBUILDER_DEBIAN_MIRROR
|
|
Debian repository mirror for pbuilder env bootstrap
|
|
--vyos-mirror VYOS_MIRROR
|
|
VyOS package mirror
|
|
--build-type BUILD_TYPE
|
|
Build type, release or development
|
|
--version VERSION Version number (release builds only)
|
|
--build-comment BUILD_COMMENT
|
|
Optional build comment
|
|
--debug Enable debug output
|
|
--custom-apt-entry CUSTOM_APT_ENTRY
|
|
Custom APT entry
|
|
--custom-apt-key CUSTOM_APT_KEY
|
|
Custom APT key file
|
|
--custom-package CUSTOM_PACKAGE
|
|
Custom package to install from repositories
|
|
|
|
.. _build_custom_packages:
|
|
|
|
Packages
|
|
========
|
|
|
|
If you are brave enough to build yourself an ISO image containing any modified
|
|
package from our GitHub organisation - this is the place to be.
|
|
|
|
Any "modified" package may refer to an altered version of e.g. vyos-1x package
|
|
that you would like to test before filing a PullRequest on GitHub.
|
|
|
|
Building an ISO with any customized package is in no way different then
|
|
building a regular (customized or not) ISO image. Simply place your modified
|
|
`*.deb` package inside the `packages` folder within `vyos-build`. The build
|
|
process will then pickup your custom package and integrate it into your ISO.
|
|
|
|
Troubleshooting
|
|
===============
|
|
|
|
Debian APT is not very verbose when it comes to errors. If your ISO build breaks
|
|
for whatever reason and you supect its a problem with APT dependencies or
|
|
installation you can add this small patch which increases the APT verbosity
|
|
during ISO build.
|
|
|
|
.. code-block:: diff
|
|
|
|
diff --git i/scripts/live-build-config w/scripts/live-build-config
|
|
index 1b3b454..3696e4e 100755
|
|
--- i/scripts/live-build-config
|
|
+++ w/scripts/live-build-config
|
|
@@ -57,7 +57,8 @@ lb config noauto \
|
|
--firmware-binary false \
|
|
--updates true \
|
|
--security true \
|
|
- --apt-options "--yes -oAcquire::Check-Valid-Until=false" \
|
|
+ --apt-options "--yes -oAcquire::Check-Valid-Until=false -oDebug::BuildDeps=true -oDebug::pkgDepCache::AutoInstall=true \
|
|
+ -oDebug::pkgDepCache::Marker=true -oDebug::pkgProblemResolver=true -oDebug::Acquire::gpgv=true" \
|
|
--apt-indices false
|
|
"${@}"
|
|
"""
|
|
|
|
|
|
Virtualization Platforms
|
|
========================
|
|
|
|
QEMU
|
|
----
|
|
|
|
Run following command after building the ISO image.
|
|
|
|
.. code-block:: none
|
|
|
|
$ make qemu
|
|
|
|
VMware
|
|
------
|
|
|
|
Run following command after building the QEMU image.
|
|
|
|
.. code-block:: none
|
|
|
|
$ make vmware
|
|
|
|
.. _build_packages:
|
|
|
|
********
|
|
Packages
|
|
********
|
|
|
|
VyOS itself comes with a bunch of packages which are specific to our system and
|
|
thus can not be found in any Debian mirrror. Those packages can be found at the
|
|
`VyOS GitHub project`_ in their source format can can easily be compiled into
|
|
a custom Debian (`*.deb`) package.
|
|
|
|
The easiest way to compile your package is with the above mentioned
|
|
:ref:`build_docker` container, it includes all required dependencies for
|
|
all VyOS related packages.
|
|
|
|
Assume we want to build the vyos-1x package on our own and modify it to our
|
|
needs. We first need to clone the repository from GitHub.
|
|
|
|
.. code-block:: none
|
|
|
|
$ git clone https://github.com/vyos/vyos-1x
|
|
|
|
Build
|
|
=====
|
|
|
|
Launch Docker container and build package
|
|
|
|
.. code-block:: none
|
|
|
|
# For VyOS 1.3 (equuleus, current)
|
|
$ docker run --rm -it --privileged -v $(pwd):/vyos -w /vyos vyos/vyos-build bash
|
|
|
|
# Change to source directory
|
|
$ cd vyos-1x
|
|
|
|
# Build DEB
|
|
$ dpkg-buildpackage -uc -us -tc -b
|
|
|
|
After a minute or two you will find the generated DEB packages next to the vyos-1x
|
|
source directory:
|
|
|
|
.. code-block:: none
|
|
|
|
# ls -al ../vyos-1x*.deb
|
|
-rw-r--r-- 1 vyos_bld vyos_bld 567420 Aug 3 12:01 ../vyos-1x_1.3dev0-1847-gb6dcb0a8_all.deb
|
|
-rw-r--r-- 1 vyos_bld vyos_bld 3808 Aug 3 12:01 ../vyos-1x-vmware_1.3dev0-1847-gb6dcb0a8_amd64.deb
|
|
|
|
Install
|
|
=======
|
|
|
|
To take your newly created package on a test drive you can simply SCP it to a
|
|
running VyOS instance and install the new `*.deb` package over the current
|
|
running one.
|
|
|
|
Just install using the following commands:
|
|
|
|
.. code-block:: none
|
|
|
|
vyos@vyos:~$ dpkg --install /tmp/vyos-1x_1.3dev0-1847-gb6dcb0a8_all.deb
|
|
(Reading database ... 58209 files and directories currently installed.)
|
|
Preparing to unpack .../vyos-1x_1.3dev0-1847-gb6dcb0a8_all.deb ...
|
|
Unpacking vyos-1x (1.3dev0-1847-gb6dcb0a8) over (1.3dev0-1847-gb6dcb0a8) ...
|
|
Setting up vyos-1x (1.3dev0-1847-gb6dcb0a8) ...
|
|
Processing triggers for rsyslog (8.1901.0-1) ...
|
|
|
|
You can also place the generated `*.deb` into your ISO build environment to
|
|
include it in a custom iso, see :ref:`build_custom_packages` for more
|
|
information.
|
|
|
|
.. 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.
|
|
|
|
.. _Docker: https://www.docker.com
|
|
.. _`Docker as non-root`: https://docs.docker.com/install/linux/linux-postinstall/#manage-docker-as-a-non-root-user
|
|
.. _VyOS DockerHub organisation: https://hub.docker.com/u/vyos
|
|
.. _repository: https://github.com/vyos/vyos-build
|
|
.. _VyOS GitHub project: https://github.com/vyos
|