龙蜥内核 容器内构建
来源: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
- 根据tag拉取相应的系统版本(这里以8.8-x86_64为例)
docker pull anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/anolisos:8.8
- 查看下载的镜像
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
- 运行镜像
docker run -it ef65d5c9c386 /bin/bash
1.2 拉取内核代码仓库
-
先在docker环境中安装基础工具
yum install -y git make -
然后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节。 若您的源码未集成打包脚本,请使用旧的构建方式。
判断源码是否已集成打包脚本:
-
进入到下载好的cloud-kernel目录下:
cd 你的工作目录/cloud-kernel -
进入Anolis管理相关目录:
cd anolis如果该文件不存在,则说明未集成 -
查看是否已集成打包脚本:
make help | grep dist-genrpmtree若有以下输出,则说明已集成:
dist-genrpmtree - generate rpm tree
2.1 新的构建方式
2.1.1 安装依赖包
-
进入到anolis目录:
cd 你的工作目录/cloud-kernel/anolis/ -
生成kernel.spec文件
make dist-genspec -
根据spec文件安装内核依赖包
yum install -y yum-utils && yum-builddep -y output/kernel.spec
2.1.2 修改源码
在构建前,您可以对源码做一定的修改。 请注意以下事项:
-
如果要修改config配置,请参考【3-1】内核编译安装 - Make方式第5节
-
任何代码和config的修改,都需要使用git add & git commit将修改加入到git中进行管理。这是因为打包脚本只会从git HEAD处拉取代码出包。
2.1.3 编译
-
确认您已经处于anolis目录:
cd 你的工作目录/cloud-kernel/anolis/ -
若要构建内核的基础包(推荐),请使用下面的命令。
DIST_BUILD_EXTRA=base make dist-rpms -
若要构建内核的全量包,请使用下面的命令。全量包相比于基础包,多了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 安装依赖包
- 进入ck-bulid工作目录
cd 你的工作目录/ck-build - 根据spec文件安装内核依赖包
yum install -y yum-utils && yum-builddep -y kernel.spec
2.2.3 修改代码
在构建前,您可以对源码做一定的修改。 请注意以下事项:
-
如果要修改config配置,请参考【3-1】内核编译安装 - Make方式第5节
-
任何代码和config的修改,都需要使用git add & git commit将修改加入到git中进行管理。这是因为打包脚本只会从git HEAD处拉取代码出包。
2.2.4 内核打包
- 进入到ck-bulid工作目录
cd 你的工作目录/ck-build
- 建立kernel源码链接
ln -s 你的工作目录/cloud-kernel cloud-kernel
注意:如果您在编译anolis8-4.19的rpm包时,发现有该报错信息:
请使用该命令:
ln -s 你的工作目录/cloud-kernel ck.git
这是由于某些历史遗留原因导致的。
-
执行打包命令
a. 若要构建内核的基础包(推荐),请使用下面的命令。
BUILD_EXTRA='base' ./build.shb. 若要构建内核的全量包,请使用下面的命令。全量包相比于基础包,多了perf,debuginfo,kernel-debug等包,速度会慢一些。
./build.sh -
输出路径
rpm包输出路径:你的工作目录/ck-build/outputs/自定义版本号

浙公网安备 33010602011771号