龙蜥内核 容器内构建

来源:https://openanolis.cn/sig/Cloud-Kernel/doc/721476230897467475

1.1 准备Anolis OS环境

如果您正在使用Anolis OS,请忽视这个步骤。

如果您没有使用Anolis OS,我们强烈建议在Anolis OS环境下进行操作,以保证之后的打包流程能顺利进行。

1.1.1 镜像版本选择

  • 我们推荐根据想要编译的内核版本选择相应版本的Anolis OS。
  • kernel 5.10 -- Anolis OS 8
  • kernel 4.19 -- Anolis OS 7

1.1.2 本地镜像与docker镜像下载(二选一)

  • 您可以从龙蜥社区下ISO镜像或者qcow镜像以使用Anolis OS

https://openanolis.cn/download

  • 你也可以使用Anolis OS docker镜像

https://hub.docker.com/r/openanolis/anolisos

  1. 根据tag拉取相应的系统版本(这里以8.8-x86_64为例)

docker pull anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/anolisos:8.8

  1. 查看下载的镜像

docker images

示例结果如下:

REPOSITORY TAG IMAGE ID CREATED SIZE anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/anolisos 8.8 ef65d5c9c386 15 months ago 226 MB

  1. 运行镜像

docker run -it ef65d5c9c386 /bin/bash

1.2 拉取内核代码仓库

  1. 先在docker环境中安装基础工具 yum install -y git make

  2. 然后clone内核源码 git clone https://gitee.com/anolis/cloud-kernel.git -b devel-5.10

如果是编译4.19或者6.6的源码,请自行将分支替换为devel-4.19或者devel-6.6

2. 构建内核

随着ANCK的代码演进,为了方便调整和管理内核rpm包相关的代码,相关打包脚本已被集成到Cloud-Kernel源码仓库中,与之而来的是内核rpm包构建方式也发生了改变。 因此,根据打包脚本是否被集成,本章节会给出新旧两种内核构建方式。 若您的源码已集成打包脚本,则推荐您用新的构建方式(旧的方式依然可用),见2.1节。 若您的源码未集成打包脚本,请使用旧的构建方式。

判断源码是否已集成打包脚本:

  1. 进入到下载好的cloud-kernel目录下: cd 你的工作目录/cloud-kernel

  2. 进入Anolis管理相关目录: cd anolis 如果该文件不存在,则说明未集成

  3. 查看是否已集成打包脚本: make help | grep dist-genrpmtree 若有以下输出,则说明已集成:

dist-genrpmtree  - generate rpm tree

2.1 新的构建方式

2.1.1 安装依赖包

  1. 进入到anolis目录: cd 你的工作目录/cloud-kernel/anolis/

  2. 生成kernel.spec文件 make dist-genspec

  3. 根据spec文件安装内核依赖包 yum install -y yum-utils && yum-builddep -y output/kernel.spec

2.1.2 修改源码

在构建前,您可以对源码做一定的修改。 请注意以下事项:

  1. 如果要修改config配置,请参考【3-1】内核编译安装 - Make方式第5节

  2. 任何代码和config的修改,都需要使用git add & git commit将修改加入到git中进行管理。这是因为打包脚本只会从git HEAD处拉取代码出包。

2.1.3 编译

  1. 确认您已经处于anolis目录: cd 你的工作目录/cloud-kernel/anolis/

  2. 若要构建内核的基础包(推荐),请使用下面的命令。 DIST_BUILD_EXTRA=base make dist-rpms

  3. 若要构建内核的全量包,请使用下面的命令。全量包相比于基础包,多了perf,debuginfo,kernel-debug等包,速度会慢一些。 make dist-rpms

2.2 旧的构建方式

2.2.1 下载打包脚本

若您使用的是较旧的内核源码,则需要额外下载内核打包脚本。 仓库地址:https://gitee.com/src-anolis-sig/ck-build 需要根据当前的系统版本和需要打包的内核选择相应的分支。

Anolis 8 编译kernel 5.10

git clone https://gitee.com/src-anolis-sig/ck-build.git -b an8-5.10

Anolis 7 编译kernel 4.19

git clone https://gitee.com/src-anolis-sig/ck-build.git -b an7-4.19

2.2.2 安装依赖包

  1. 进入ck-bulid工作目录 cd 你的工作目录/ck-build
  2. 根据spec文件安装内核依赖包 yum install -y yum-utils && yum-builddep -y kernel.spec

2.2.3 修改代码

在构建前,您可以对源码做一定的修改。 请注意以下事项:

  1. 如果要修改config配置,请参考【3-1】内核编译安装 - Make方式第5节

  2. 任何代码和config的修改,都需要使用git add & git commit将修改加入到git中进行管理。这是因为打包脚本只会从git HEAD处拉取代码出包。

2.2.4 内核打包

  1. 进入到ck-bulid工作目录

cd 你的工作目录/ck-build

  1. 建立kernel源码链接

ln -s 你的工作目录/cloud-kernel cloud-kernel

注意:如果您在编译anolis8-4.19的rpm包时,发现有该报错信息:

请使用该命令:

ln -s 你的工作目录/cloud-kernel ck.git

这是由于某些历史遗留原因导致的。

  1. 执行打包命令

    a. 若要构建内核的基础包(推荐),请使用下面的命令。 BUILD_EXTRA='base' ./build.sh

    b. 若要构建内核的全量包,请使用下面的命令。全量包相比于基础包,多了perf,debuginfo,kernel-debug等包,速度会慢一些。 ./build.sh

  2. 输出路径

rpm包输出路径:你的工作目录/ck-build/outputs/自定义版本号

posted @ 2025-04-24 20:15  rincloud  阅读(130)  评论(0)    收藏  举报