DUE 编译 Onei

  • DUE 初始化编译环境,编译 ONEI

  • 资料来源:

    https://opencomputeproject.github.io/onie/developers/building.html#preparing-a-new-build-machine

  • 更新

    1
    2023.06.15 初始

导语

Build Instructions — Open Network Install Environment documentation (opencomputeproject.github.io)

  • 2021.11 版开始需要 debian 10 的编译环境
  • DUE 推荐构建环境, 包装出用户友好的 docker 环境.

构建编译环境

1
2
3
4
5
6
7
8
9
10
11

git clone https://github.com/CumulusNetworks/DUE.git

# debian10 镜像

./due --create --platform linux/amd64 --name onie-build-debian-10 --prompt ONIE-10 --tag onie --use-template onie --from debian:10 --description "ONIE Build Debian 10"

# or

./due --create --platform linux/amd64 --name onie-build-debian-11 --prompt ONIE-11 --tag onie --use-template onie --from debian:11 --description "ONIE Build Debian 11"

会有下面的错误

1
2
3

#0 35.01 E: The repository 'http://deb.debian.org/debian stretch-backports Release' does not have a Release file.

错误在于添加了 stretch-backports

  • templates/onie/post-install-config.sh.template  132 行有判断 debian10 情况下清理添加的  stretch-backports 源 但 if [ -e /.dockerenv ] 似乎没有正确识别到这是在容器的环境.注释掉直接执行清理即可编译通过.

之后再 ./due --run 启动并进入 docker

  • 默认挂载 /home/user; 当前用户名登录;

编译

1
2
3
4
5
6
7
git clone https://github.com/opencomputeproject/onie.git
cd onie/build-config

# make
make MACHINEROOT=../machine/<vendor> MACHINE=<vendor>_<model> all
# For an Accton platform:
make -j12 MACHINEROOT=../machine/accton MACHINE=accton_833435_b21 all

accton_833435_b21 为例子来修改

  • ONIE_ARCH ?= x86_64
  • LINUX_VERSION = 5.4

编译完成后镜像在 /build/image/

1
make help-all

与 kernel 有关的

1
2
3
4
5
6
7
8
9
10

kernel
kernel-build
kernel-clean # 删除源码目录
kernel-config # 生成 .config(build-config 通用+平台的patch) 进入内核配置
kernel-download # http://mirror.opencompute.org 下重新下载内环源码 build/download/
kernel-download-clean # 删除下载源码压缩包
kernel-install # 解压内核压缩包 编译并安装
kernel-patch # 应用 patch
kernel-source # 解压缩

编译完成后内核在 ./arch/x86_64/boot/bzImage