编译Linux内核生成RPM包遇多类异常,寻求技术解答
解决Fedora内核RPM编译的三个问题
1. 内核RPM包体积超1G
这是因为make binpkg-rpm默认会把所有编译产物一股脑打包,包括占空间极大的调试符号、未压缩的模块和内核镜像。解决起来很直接:
- 打开你的
.config,把CONFIG_DEBUG_INFO_NONE设为y(彻底关闭调试符号,能砍掉几百MB体积) - 开启
CONFIG_MODULE_COMPRESS=y,让内核模块自动压缩 - 编译前先跑
make clean,清理之前的编译残留,避免冗余文件混进包
2. 内核头文件包标记obsoletes kernel-headers
这个是原生打包脚本的坑,自定义头包默认会加Obsoletes: kernel-headers,但Fedora的kernel-headers是系统核心依赖,删它会带崩一堆软件。两种解决方式:
- 直接改内核源码里的
scripts/package/mkspec,找到写着Obsoletes: kernel-headers的行,删掉或者注释掉 - 编译时加参数绕过:
make binpkg-rpm RHEL_KERNEL_HEADERS_OBSOLETE=(等号后面留空,覆盖默认设置)
3. 未生成独立模块包(kernel-modules、kernel-modules-extra)
make binpkg-rpm是内核原生的打包目标,本来就不会生成Fedora风格的拆分模块包。要拿到拆分包得换方式:
- 用Fedora官方的打包流程:去Fedora的内核git仓库拉对应版本的.spec文件和补丁,把自己的内核源码替换进去,用
rpmbuild编译,官方脚本会自动拆分成内核、模块、额外模块这些包 - 如果非要用原生目标,就得手动修改
scripts/package/mkspec添加模块包的打包逻辑,但这个工作量大,不如直接用官方.spec来得省心
内容的提问来源于stack exchange,提问作者Blender Fox
相关产品推荐
相关产品推荐

