How to Build Open Network Linux

In case you are not interested in building ONL from scratch
(it takes a while) you can download pre-compiled binaries from
http://opennetlinux.org/binaries .

Build Hosts and Environments

ONL builds with Docker so the only requirements on the build system is:

All of the testing is done with Debian, other Linux distributions may work, but we suggest using Debian 8.
# apt-get install binfmt-support
then follow the instructions at: https://docs.docker.com/engine/installation/debian/

Build ONL Summary

The easiest way to build is to use the make docker command:

#> git clone https://github.com/opencomputeproject/OpenNetworkLinux
#> cd OpenNetworkLinux
#> make docker

This will build a Debian 7 based ONL from the master branch

To build a Debian 8 based ONL run:

#> git clone https://github.com/opencomputeproject/OpenNetworkLinux
#> cd OpenNetworkLinux
#> export VERSION=8
#> make docker

If you would like to build by hand you can do the following:

#> git clone https://github.com/opencomputeproject/OpenNetworkLinux
#> cd OpenNetworkLinux
#> docker/tools/onlbuilder (-8)             # enter the docker workspace
#> apt-cacher-ng
#> source setup.env                         # pull in necessary environment variables
#> make amd64 ppc                           # make onl for $platform (currently amd64 or powerpc)

The resulting ONIE installers are in
$ONL/RELEASE/$SUITE/$ARCH/ONL-2.*INSTALLER, i.e.
RELEASE/jessie/amd64/ONL-2.0.0_ONL-OS_2015-12-12.0252-ffce159_AMD64_INSTALLER
and the SWI files (if you want them) are in
$ONL/RELEASE/$SUITE/$ARCH/ONL*.swi. i.e.
RELEASE/jessie/amd64/ONL-2.0.0_ONL-OS_2015-12-12.0252-ffce159_AMD64.swi

Installing Docker Gotchas

Docker installer oneliner (for reference: see docker.com for details)

# wget -qO- https://get.docker.com/ | sh

Common docker related issues:

Consider enabling builds for non-privileged users with:

Additional Build Details


The rest of this guide talks about how to build specific
sub-components of the ONL ecosystem and tries to overview
all of the various elements of the build.

Build all .deb packages for all architectures

#> cd $ONL/packages
#> make
#> find $ONL/REPO -name \*.deb    # all of the .deb files end up here

A number of things will happen automatically, including:

After all components have been built, your can build an ONL
Software Image from those components.

Adding/Removing packages from a SWI:

The list of packages for a given SWI are in

$ONL/packages/base/any/rootfs/$suite/common/$ARCH-packages.yml # for $ARCH specific packages
$ONL/packages/base/any/rootfs/$suite/common/common-packages.yml # for $ARCH-independent packages

Build a software image (SWI) for all powerpc platforms:

#> cd $ONL/builds/powerpc/swi
#> make
#> cd builds
#> ls *.swi
ONL-2.0.0_ONL-OS_2015-12-12.0252-ffce159_PPC.swi
#>

Build an ONIE-compatible installer for all powerpc platforms.
This will incorporate the SWI you just built or build it dynamically if not.

This installer image can be served to ONIE on Quanta or Accton platforms:

#> cd $ONL/builds/powerpc/installer/legacy
#> make
#> cd builds
#> ls *INSTALLER
ONL-2.0.0_ONL-OS_2015-12-12.0252-ffce159_PPC_INSTALLER
#>

Example setup on new Debian 8.2 installation

Install sudo and add yourself to the sudoers:

As root:

apt-get install sudo
vi /etc/sudoers.d/username

Add the line:

username    ALL=(ALL:ALL) ALL

Add the docker key:

sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D

gpg: key 2C52609D: public key "Docker Release Tool (releasedocker) <docker@docker.com>" imported
gpg: Total number processed: 1
gpg:               imported: 1  (RSA: 1)

Install necessary items, make, binfmt-support and apt-transport-https (for docker):

sudo apt-get install apt-transport-https make binfmt-support

Add the docker repository to your system:

sudo vi /etc/apt/sources.list.d/docker.list

Add the following line to the file:

deb https://apt.dockerproject.org/repo debian-jessie main

Install Docker:

sudo apt-get update
sudo apt-get install docker-engine

Test Docker:

sudo docker run hello-world

Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
b901d36b6f2f: Pull complete
0a6ba66e537a: Pull complete
Digest: sha256:8be990ef2aeb16dbcb9271ddfe2610fa6658d13f6dfb8bc72074cc1ca36966a7
Status: Downloaded newer image for hello-world:latest

Hello from Docker.
This message shows that your installation appears to be working correctly.

Add yourself to the docker group:

sudo gpasswd -a user1 docker

Adding user user1 to group docker

logout and log back in for the group to take effect:

Clone the OpenNetworkLinux repository:

git clone https://github.com/opencomputeproject/OpenNetworkLinux.git

Cloning into 'OpenNetworkLinux'...
Checking connectivity... done.

Build OpenNetworkLinux:

#> cd OpenNetworkLinux/
#> make docker
#> Pulling opennetworklinux/builder7:1.0…

Or:

#> docker/tools/onlbuilder
#> source setup.env
#> apt-cacher-ng
#> make onl-x86 onl-ppc

© 2013-2017 Big Switch Networks, Inc. All rights reserved.