Pure SONiC 是 SONiC 的版本,它消除了對(duì)供應(yīng)商的依賴(lài)。社區(qū)開(kāi)發(fā)、公開(kāi)可用和 100% 開(kāi)源使您能夠構(gòu)建與所需社區(qū)分支同步的純 SONiC 映像。這意味著 SONiC 的每一行代碼和 SAI ( switch abstraction interface )的 NVIDIA 實(shí)現(xiàn)只需點(diǎn)擊一下 主映像 。
NVIDIA 當(dāng)您選擇 Pure SONiC 時(shí),我們將致力于您的成功。為了確保 Pure SONiC 得到強(qiáng)化和限定, NVIDIA 建議使用特定的公共哈希來(lái)構(gòu)建映像,這是一種在特定時(shí)間點(diǎn)對(duì) Git 存儲(chǔ)庫(kù)進(jìn)行快照的機(jī)制。通過(guò)廣泛的 QA ,在所有 NVIDIA 平臺(tái)上驗(yàn)證傳遞給用戶(hù)的每個(gè)公共散列。此外, NVIDIA 承認(rèn)需要有價(jià)值的文件。發(fā)行說(shuō)明和用戶(hù)手冊(cè)與特定的公共哈希綁定。
建立一個(gè)純粹的聲波圖像
下面是我如何建立我的純聲波圖像,包括 ZTP ,運(yùn)行在我的 NVIDIA Mellanox Spectrum 開(kāi)放式以太網(wǎng)交換機(jī)上。我的解決方案受到了關(guān)于 GitHub 的 構(gòu)建 SONiC 交換機(jī)映像 教程的啟發(fā)。默認(rèn)情況下,在回購(gòu)的 生成配置文件 中禁用 ZTP 。
Spectrum 交換機(jī)預(yù)裝了 ONIE ( open network install environment ),這是一個(gè)引導(dǎo)加載程序,提供了在裸機(jī)交換機(jī)系統(tǒng)上安裝任何網(wǎng)絡(luò)操作系統(tǒng)的環(huán)境。 ONIE 允許最終用戶(hù)自動(dòng)安裝網(wǎng)絡(luò)操作系統(tǒng),作為數(shù)據(jù)中心配置的一部分,類(lèi)似于 ONIE 交換機(jī)管理 Linux 服務(wù)器的方式。
我的構(gòu)建服務(wù)器由 24 核 CPU 、 250 GB 構(gòu)建存儲(chǔ)和 64 GB RAM 組成,運(yùn)行在 Ubuntu16.04 上, Docker 版本 18.03.0-ce 、 Python 和 jinja2 。我發(fā)現(xiàn)我的構(gòu)建配置至少需要 100 GB 的可用磁盤(pán)空間。最終的構(gòu)建目錄消耗了大約 30gb 。在構(gòu)建時(shí)間對(duì)業(yè)務(wù)至關(guān)重要的情況下,我建議升級(jí) CPU 和 RAM 以允許更多的內(nèi)核并行工作,從而縮短構(gòu)建時(shí)間。
出于自動(dòng)化和代碼重用的目的,我將代碼分為三個(gè)短文件:
build.cfg :初始化公共環(huán)境變量并由其他文件進(jìn)行源處理。
gitsonic.sh :獲取公共 git 存儲(chǔ)庫(kù)源代碼。
build.sh :執(zhí)行生成。
運(yùn)行腳本執(zhí)行構(gòu)建過(guò)程。
第一步:創(chuàng)建 build.cfg
# An example to hash that was qualified by NVIDIA SONICBRANCH=201911 COMMITHASH="bea968b" BLDBRANCH="${SONICBRANCH}" BUILD_NUMBER="00005" let BLDNUM="${BUILD_NUMBER}" #ZTP is disabled by default per community decision. I found it useful to enable in my build, more #options are available in the file ./rules/config ENABLE_ZTP="y" SONIC_IMAGE_VERSION="SONIC.${SONICBRANCH}.${BLDNUM}-${COMMITHASH}_Internal" SONIC_OVERRIDE_BUILD_VARS=' SONICIMAGE_VERSION=SONIC.${SONICBRANCH}.${BLDNUM}-${COMMITHASH}_Internal BUILD_NUMBER=${BLDNUM} ENABLE_ZTP=y' BLDDIR="./sonic-buildimage_${BLDBRANCH}_${BUILD_NUMBER}_${COMMITHASH}_ZTP"
第二步:創(chuàng)建 sonicgit.sh
#!/bin/bash source ./build.cfg if [ -d "${BLDDIR}" ];then echo "directory sonic-buildimage already exists, aborting git" exit 1 fi # git clone the top-level # source code from the public repository, SONICBRANCH=201911 git clone -b ${SONICBRANCH} https://github.com/Azure/sonic-buildimage.git # move the cloned source to a build-specific named directory # avoid overwriting earlier versions that you may need. mv ./sonic-buildimage "${BLDDIR}" # If you are making any changes to the latest checked in branch, you must make # changes to the configuration. # Because you are making changes, create a build branch based on the specific commit hash #this git branch information shows up in the build image, #when you run command $show version from the switch command line. cd "${BLDDIR}" git checkout -b "${BLDBRANCH}" ${COMMITHASH} # the git clone step only pulls the top-level module. # the underlying submodules must be recursively # init-ed and updated. git submodule update --init --recursive #display the status echo "${BLDDIR}" git status | grep branch
第 3 步:創(chuàng)建 build.sh
#!/bin/bash source ./build.cfg #Helper functions start### function checkErrors() { X=`grep -i -c "${1}" "${2}"` if [ "${X}" != "0" ];then grep -i -n "${1}" "${2}" fi } function doSetup() { CONFIGZTP="ENABLE_ZTP=${ENABLE_ZTP}" CONFIGSONIC="{$CONFIGZTP}" } function doMakeConfig() { #Execute make configure once to configure ASIC #make configure PLATFORM=[ASIC_VENDOR] make configure PLATFORM=mellanox } # Build SONiC image function doMake() { LOGFILE="../logs/${BLDDIR}.log" echo "time make SONIC_BUILD_JOBS=24 ${SONIC_OVERRIDE_BUILD_VARS} target/sonic-mellanox.bin" > "${LOGFILE}" time make SONIC_BUILD_JOBS=24 ${SONIC_OVERRIDE_BUILD_VARS} target/sonic-mellanox.bin | tee "${LOGFILE}" checkErrors "fail" "${LOGFILE}" checkErrors "warning" "${LOGFILE}" checkErrors "error" "${LOGFILE}" } #Helper functions end### cd "${BLDDIR}" doSetup doMakeConfig doMake
概括
步驟 1-3 中描述的構(gòu)建過(guò)程將生成啟用 ZTP 的純聲波圖像。一些人會(huì)認(rèn)為,這張圖片展示了開(kāi)放網(wǎng)絡(luò)的最佳狀態(tài):構(gòu)建一個(gè)開(kāi)源操作系統(tǒng),消除對(duì)供應(yīng)商的依賴(lài)。
關(guān)于作者
Yuval Borenstein 是 NVIDIA 的以太網(wǎng)交換機(jī)產(chǎn)品經(jīng)理。在此之前的幾年里, Borenstein 先生在 NVIDIA 擔(dān)任過(guò)多個(gè)芯片設(shè)計(jì)職位,負(fù)責(zé)開(kāi)發(fā) InfiniBand 和以太網(wǎng)交換機(jī)。尤瓦爾擁有以色列理工學(xué)院電子工程學(xué)士學(xué)位和特拉維夫大學(xué)和西北大學(xué)的聯(lián)合工商管理碩士學(xué)位。
審核編輯:郭婷
-
cpu
+關(guān)注
關(guān)注
68文章
10870瀏覽量
211896 -
RAM
+關(guān)注
關(guān)注
8文章
1368瀏覽量
114731 -
服務(wù)器
+關(guān)注
關(guān)注
12文章
9184瀏覽量
85488
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論