如何跳过rpmbuild内核RPM包构建时的未打包文件检查?
解决内核RPM构建中「Checking for unpackaged file(s)」耗时检查的问题
我来帮你搞定这个头疼的耗时检查问题——之前你试的两种方法没用,是因为内核构建的RPM流程有特殊的处理逻辑,下面给你两个有效的解决方案,顺便解释下原因和包大小的关联:
有效的跳过方式
内核的binrpm-pkg目标在调用rpmbuild时,不会直接继承你全局的rpm配置,也不吃--nocheck那套,得用下面的方法:
方法1:通过环境变量直接传递参数
执行构建命令时,直接把跳过检查的定义通过RPMOPTS传给rpmbuild,一步到位:
make -j$(nproc) binrpm-pkg RPMOPTS="--define '_unpackaged_files_terminate_build 0' --define '_missing_doc_files_terminate_build 0'"
这个参数会强制让rpmbuild忽略未打包文件的检查,不会再跑那30分钟的扫描。
方法2:修改生成的spec文件(适合需要多次构建的场景)
如果需要重复构建,可以先找到内核构建过程中生成的kernel.spec文件(一般在~/rpmbuild/SPECS/目录下),在文件最开头添加两行:
%_unpackaged_files_terminate_build 0 %_missing_doc_files_terminate_build 0
之后再执行make binrpm-pkg,rpmbuild就会遵循这个配置跳过检查。
为什么之前的方法无效?
- 修改
~/.rpmmacros没用:内核构建脚本在调用rpmbuild时,会动态生成spec文件,并且可能覆盖全局的rpm配置,导致你加的那行定义被忽略了。 - 加
--nocheck无效:--nocheck是用来跳过RPM包的测试阶段的,而「Checking for unpackaged file(s)」属于rpmbuild的打包检查阶段,完全是两个不同的环节,所以这个参数对它根本不起作用。
关于RPM包大小差异的关联
你提到的allyesconfig和openSUSE配置的包大小差异,其实和这个耗时检查直接相关:
allyesconfig虽然开启了所有选项,但很多调试、开发类的选项不会被编译进最终可安装的包,打包的内容只有基础内核镜像和核心模块,所以体积小。- openSUSE的配置会开启大量实际使用的模块、固件、调试符号,甚至会打包内核头文件、文档等附加内容,文件数量多了好几倍,rpmbuild要检查的文件量自然大很多,这也是为什么这个检查在openSUSE配置下耗时更久的原因。
内容的提问来源于stack exchange,提问作者pevik
相关产品推荐
相关产品推荐

