1b1be0292e
Update the sonic-sairedis submodule. The following is a list of new commits in the submodule. f85322e Advance SAI submodule (#911) 66c1a3d [syncd] Check warm vids right after discover (#907) 1020de7 Change the log severity leve from ERROR to NOTICE if getStatus is not supported by vendor (#908) 5349a9d Add support for BFD notification (#903) 6ff9100 [MACsec]: Fix Bug: MACsec device will be terminated exceptionally if the MACsec port was disabled in runtime (#875) b91f75f [sairedis] Add warning on double switch id allocation 518b93a [tests] Adapt tests to armhf arch 36106e9 [vslib] Unify bulkCreate for entries with perf timer 88cf0f7 [vslib] Remove dead code f282690 Simplify declare every entry macro reuse b28e5e3 [tests] Add missing memory header 980bba4 Add missing pyext in makefile 00ffa62 Update aspell 4a5d3b5 Add SwitchBCM81724 tests 8a7b712 Remove dead code from SwitchBCM81724 71834d2 Fix supported object list size bug on SwitchBCM81724 0da464b Add SwitchBCM56850 tests 4d7956b Add SwitchMLNX2700 tests 2e418ab [saivs] Refactor headers a4b15a6 Correct entry in SaiUnittests b5a2f63 Update aspell 923ab2f Add SwitchContainer tests 484beb1 Add Switch tests cc2e078 Add SwitchConfig tests 724ce74 Add TrafficFilterPipes tests 03e4923 Add HostInterfaceInfo tests 5db4e72 Add TrafficForwarder tests 1b4d6d1 Add SwitchConfigContainer tests 7a32cd6 Add Signal tests 7c016f0 Add SelectableFd tests 21e735d Update SaiUnittests tests 353a058 Add SaiUnittests tests 5572102 Fix ContextConfigContainer tests 0fd06c9 Move error to throw on sai unittests 3c3b369 Add db channel from context config to VS 330c561 Fix ResourceLimiterContainer 30f5825 Add missing files for ResourceLimiter tests 8a871ee Update aspell 467e228 Add ResourceLimiterParser tests f6b35da Add ResourceLimiterContainer tests 99f04e9 Remove default ctr/dtr from struct MACsecManager 9381f2d Add ResourceLimiter tests ab2ef9d Add RealObjectIdManager tests 5f6b004 Add NetMsgRegistrar tests 8142375 Add MACsecIngressFilter tests 888197d Add MACsecEgressFilter tests 8ed6e36 Add MACsecAttr tests b14b598 Add LaneMapFileParser tests 38a52ac Add LaneMapContainer tests 2997892 Add LaneMap tests 734c7ef Add SaiAttrWrap tests c6e7ac0 Add FdbInfo tests 7ed640d Add EventQueue tests 752d424 Add EventPayloadPacket tests 85042f4 Add EventPayloadNetLinkMsg tests 8bf97ed Add CorePortIndexMapFileParser tests ff7c6c5 Add CorePortIndexMapContainer tests 4598078 Add CorePortIndexMap tests d6f7435 Add vslib ContextConfigContainer tests bc27a04 Add sairedis api tests 9a96cd7 Fix tam tests a3bc56e Move tam api to separate test 9d1032b Add sairedis tam api tests f1570e5 Add sairedis lib tests 91ce42c Check for null pointer on bulk entries apis 78252c7 Update interface query tests cf956b6 Fix error code on dbg dump e7e1d80 Fix api query when unspecified api passed cd93183 Tests rename fix qosmaps to qosmap 5e9e0c9 Rename fix qosmaps to qosmap 5b67e6b Add virtual router tests 0d946cf Fix lag tests 27bbde7 Add udf tests 31a3613 Add tunnel tests 3366e47 Update tam tests 5b06fb3 Add tam tests 02d6d89 Add system port tests 9224e13 Add switch tests c2c0af8 Add stp tests 2192040 Add segment route tests 702dff6 Add scheduler group tests 24e3d92 Add sample packet tests fda4f80 Add rpf group tests 5ecab66 Add router interface tests 9114865 Add route tests 895129e Add queue tests e01707f Add qos map tests 8162205 Add port tests 46d15e9 Add policer tests 36cf6d1 Add next hop group tests 2200e38 Add next hop tests 1b2bf3c Fix lag tests 27a2b90 Add neighbor tests fc28438 Add nat tests 7468777 Add mpls tests 82ca7e5 Add mirror tests adbcfd9 Add mcast fdb tests d624231 Add macsec tests 72cfe42 Add lag tests 9f1b54b Add l2mc group tests d16bc95 Add l2mc tests 3d07e59 Fix isolation tests 85e5ac0 Add isolation group tests 1c4c11f Add ipcm group tests b6ed3e0 Add ipcm tests 78e8b68 Add fdb tests 8af035b Add dtel tests b56c601 Add counter tests 7c61b13 Add buffer tests fe6a041 Add bridge tests ec96469 Add bmtor tests f6d5d7d Add bfd tests d3419e0 Add acl tests 14a26b1 Add hash and hostif tests 18a09f9 Move hostintf to hostif name in lib and libvs a02b593 Add vs vlan tests 3122b37 Update wred tests 312627f Remove comments from test makefile 466a589 Update unittests 2418585 Preapre unittests skeleton 31718cf [unittest] Add unittest skeleton a4e2d28 [syncd] Fix defines in Makefile.am a4bc9e4 Remove unnecessary include from Makefiles b2e368e Update debian/libsaimetadata-dev.install 222a5b0 Update .gitignore f77ed71 Bring back pyext module 6942de0 Propagate inc and src merge 378bfff Merge include and src for lib and vslib 89c004a Whitespace refactor 3b02209 Simplify SaiInterface macros b7ec50a Add find cross include tool ce6ad22 Remove unnecessary include from SaiInterface.h 8172de2 Remove unnecessary comments for include 50bfd42 Move common SAI includes to configure.ac f40a168 Refactor Makefile.am files even more c91b117 [pyext] Update Makefile.am with top_srcdir 0a0ff45 [sairedis] Update Makefile.am 7b1a0b9 Rename saiserialize.cpp to SaiSerialize.cpp 47dac40 [vslib] Move sai_vs.cpp to sai_vs_interfacequery.cpp 39d003c Add check for configure conflict code-coverage/enable-debug add29e0 Move DBGFLAGS initialization to configure.ac e75abb7 Refactor all Makefile.am 9bb541a Remove white spaces from line endings 2e0b74b Add TODO for future split single file binaries 5b71d21 Propagate Notifications changes aaa519f Move Notificatios to libsaimeta 855be73 Move SelectableChannel classes to libsaimeta 016b5d9 [tests] [sairedis] Update include to use direct name 0fffcb0 Propagate PerformanceIntervalTimer changes 9d17b0a Move PerformanceIntervalTimer to libsaimeta cc5ab4c Move joinFieldValues to libsaimeta 638ca82 Move getHardwareInfo to libsaimeta 3951504 [vslib] Fix VirtualObjectIdManager multi arch logging 5b888a3 Remove unused SAIFLAGS from makefiles c9f05ea Remove ../ from includes 737393d Move SaiInterface to meta directory e13991a [debian] Update install to include only sai*.h files 8e3a8fb [meta] Make swap lib naming for better read in Makefile.am f1b632c Update autoclean.sh 6f319f8 Update .gitignore |
||
---|---|---|
.azure-pipelines | ||
.github | ||
device | ||
dockers | ||
files | ||
installer | ||
platform | ||
rules | ||
scripts | ||
sonic-slave-bullseye | ||
sonic-slave-buster | ||
sonic-slave-jessie | ||
sonic-slave-stretch | ||
src | ||
.artifactignore | ||
.gitignore | ||
.gitmodules | ||
azure-pipelines.yml | ||
build_debian.sh | ||
build_debug_docker_j2.sh | ||
build_docker.sh | ||
build_image.sh | ||
check_install.py | ||
functions.sh | ||
get_docker-base.sh | ||
LICENSE | ||
MAINTAINERS | ||
Makefile | ||
Makefile.cache | ||
Makefile.work | ||
onie-image-arm64.conf | ||
onie-image-armhf.conf | ||
onie-image.conf | ||
onie-mk-demo.sh | ||
push_docker.sh | ||
README.buildsystem.md | ||
README.md | ||
slave.mk | ||
ThirdPartyLicenses.txt | ||
update_screen.sh |
static analysis:
master builds:
202012 builds:
201911 builds:
201811 builds:
201807 builds:
201803 builds:
sonic-buildimage
Build SONiC Switch Images
Description
Following is the instruction on how to build an (ONIE) compatible network operating system (NOS) installer image for network switches, and also how to build docker images running inside the NOS. Note that SONiC image are build per ASIC platform. Switches using the same ASIC platform share a common image. For a list of supported switches and ASIC, please refer to this list
Hardware
Any server can be a build image server as long as it has:
- Multiple cores to increase build speed
- Plenty of RAM (less than 8 GiB is likely to cause issues)
- 300G of free disk space
A good choice of OS for building SONiC is currently Ubuntu 20.04.
Prerequisites
- Install pip and jinja in host build machine, execute below commands if j2/j2cli is not available:
sudo apt install -y python3-pip
sudo pip3 install j2cli
- Install Docker and configure your system to allow running the 'docker' command without 'sudo':
- Add current user to the docker group:
sudo gpasswd -a ${USER} docker
- Log out and log back in so that your group membership is re-evaluated
- Add current user to the docker group:
Clone or fetch the code repository with all git submodules
To clone the code repository recursively, assuming git version 1.9 or newer:
git clone https://github.com/Azure/sonic-buildimage.git
Usage
To build SONiC installer image and docker images, run the following commands:
# Ensure the 'overlay' module is loaded on your development system
sudo modprobe overlay
# Enter the source directory
cd sonic-buildimage
# (Optional) Checkout a specific branch. By default, it uses master branch. For example, to checkout the branch 201911, use "git checkout 201911"
git checkout [branch_name]
# Execute make init once after cloning the repo, or after fetching remote repo with submodule updates
make init
# Execute make configure once to configure ASIC
make configure PLATFORM=[ASIC_VENDOR]
# Build SONiC image with 4 jobs in parallel.
# Note: You can set this higher, but 4 is a good number for most cases
# and is well-tested.
make SONIC_BUILD_JOBS=4 all
The supported ASIC vendors are:
- PLATFORM=broadcom
- PLATFORM=marvell
- PLATFORM=mellanox
- PLATFORM=cavium
- PLATFORM=centec
- PLATFORM=nephos
- PLATFORM=innovium
- PLATFORM=p4
- PLATFORM=vs
Usage for ARM Architecture
To build Arm32 bit for (ARMHF) platform ARM build has dependency in docker version 18, if docker version is 19, downgrade to 18 as below sudo apt-get install --allow-downgrades -y docker-ce=5:18.09.0~3-0~ubuntu-xenial sudo apt-get install --allow-downgrades -y docker-ce-cli=5:18.09.0~3-0~ubuntu-xenial
# Execute make configure once to configure ASIC and ARCH
make configure PLATFORM=[ASIC_VENDOR] PLATFORM_ARCH=armhf
make target/sonic-[ASIC_VENDER]-armhf.bin
# example:
make configure PLATFORM=marvell-armhf PLATFORM_ARCH=armhf
make target/sonic-marvell-armhf.bin
To build Arm64 bit for platform
# Execute make configure once to configure ASIC and ARCH
make configure PLATFORM=[ASIC_VENDOR] PLATFORM_ARCH=arm64
# example:
make configure PLATFORM=marvell-arm64 PLATFORM_ARCH=arm64
NOTE:
-
Recommend reserving at least 100G free space to build one platform with a single job. The build process will use more disk if you are setting
SONIC_BUILD_JOBS
to more than 1. -
If Docker's workspace folder,
/var/lib/docker
, resides on a partition without sufficient free space, you may encounter an error like the following during a Docker container build job:/usr/bin/tar: /path/to/sonic-buildimage/<some_file>: Cannot write: No space left on device
The solution is to move the directory to a partition with more free space.
-
Use
http_proxy=[your_proxy] https_proxy=[your_proxy] no_proxy=[your_no_proxy] make
to enable http(s) proxy in the build process. -
Add your user account to
docker
group and use your user account to make.root
orsudo
are not supported.
The SONiC installer contains all docker images needed. SONiC uses one image for all devices of a same ASIC vendor.
For Broadcom ASIC, we build ONIE and EOS image. EOS image is used for Arista devices, ONIE image is used for all other Broadcom ASIC based devices.
make configure PLATFORM=broadcom
# build debian stretch required targets
BLDENV=stretch make stretch
# build ONIE image
make target/sonic-broadcom.bin
# build EOS image
make target/sonic-aboot-broadcom.swi
You may find the rules/config file useful. It contains configuration options for the build process, like adding more verbosity or showing dependencies, username and password for base image etc.
Every docker image is built and saved to target/ directory. So, for instance, to build only docker-database, execute:
make target/docker-database.gz
Same goes for debian packages, which are under target/debs/:
make target/debs/swss_1.0.0_amd64.deb
Every target has a clean target, so in order to clean swss, execute:
make target/debs/swss_1.0.0_amd64.deb-clean
It is recommended to use clean targets to clean all packages that are built together, like dev packages for instance. In order to be more familiar with build process and make some changes to it, it is recommended to read this short Documentation.
Build debug dockers and debug SONiC installer image:
SONiC build system supports building dockers and ONIE-image with debug tools and debug symbols, to help with live & core debugging. For details refer to (SONiC Buildimage Guide).
SAI Version
Please refer to SONiC roadmap on the SAI version for each SONiC release.
Notes:
-
If you are running make for the first time, a sonic-slave-${USER} docker image will be built automatically. This may take a while, but it is a one-time action, so please be patient.
-
The root user account is disabled. However, the created user can
sudo
. -
The target directory is
./target
, containing the NOS installer image and docker images.- sonic-generic.bin: SONiC switch installer image (ONIE compatible)
- sonic-aboot.bin: SONiC switch installer image (Aboot compatible)
- docker-base.gz: base docker image where other docker images are built from, only used in build process (gzip tar archive)
- docker-database.gz: docker image for in-memory key-value store, used as inter-process communication (gzip tar archive)
- docker-fpm.gz: docker image for quagga with fpm module enabled (gzip tar archive)
- docker-orchagent.gz: docker image for SWitch State Service (SWSS) (gzip tar archive)
- docker-syncd-brcm.gz: docker image for the daemon to sync database and Broadcom switch ASIC (gzip tar archive)
- docker-syncd-cavm.gz: docker image for the daemon to sync database and Cavium switch ASIC (gzip tar archive)
- docker-syncd-mlnx.gz: docker image for the daemon to sync database and Mellanox switch ASIC (gzip tar archive)
- docker-syncd-nephos.gz: docker image for the daemon to sync database and Nephos switch ASIC (gzip tar archive)
- docker-syncd-invm.gz: docker image for the daemon to sync database and Innovium switch ASIC (gzip tar archive)
- docker-sonic-p4.gz: docker image for all-in-one for p4 software switch (gzip tar archive)
- docker-sonic-vs.gz: docker image for all-in-one for software virtual switch (gzip tar archive)
- docker-sonic-mgmt.gz: docker image for managing, configuring and monitoring SONiC (gzip tar archive)
Contribution Guide
All contributors must sign a contribution license agreement before contributions can be accepted. Contact sonic-cla-agreements@microsoft.com.
GitHub Workflow
We're following basic GitHub Flow. If you have no idea what we're talking about, check out GitHub's official guide. Note that merge is only performed by the repository maintainer.
Guide for performing commits:
- Isolate each commit to one component/bugfix/issue/feature
- Use a standard commit message format:
[component/folder touched]: Description intent of your changes [List of changes] Signed-off-by: Your Name your@email.com
For example:
swss-common: Stabilize the ConsumerTable * Fixing autoreconf * Fixing unit-tests by adding checkers and initialize the DB before start * Adding the ability to select from multiple channels * Health-Monitor - The idea of the patch is that if something went wrong with the notification channel, we will have the option to know about it (Query the LLEN table length). Signed-off-by: user@dev.null
- Each developer should fork this repository and add the team as a Contributor
- Push your changes to your private fork and do "pull-request" to this repository
- Use a pull request to do code review
- Use issues to keep track of what is going on
This project has adopted the Microsoft Open Source Code of Conduct. For more information see the Code of Conduct FAQ or contact opencode@microsoft.com with any additional questions or comments.