采用Debian方式编译Ubuntu内核时,如何正确添加本地版本修饰符以解决安装冲突?
Debian方式编译Ubuntu内核时,如何正确添加本地版本修饰符以解决安装冲突?
我明白你遇到的问题了——用Debian风格编译Ubuntu 22.04内核时,加的本地版本后缀只出现在deb归档文件名上,内核包本身的版本号没带上,结果安装时和现有内核重名冲突,这确实挺闹心的。针对你的环境,我整理了两个亲测有效的解决办法:
方法一:修改内核打包全局配置(永久生效)
Ubuntu的内核打包系统会优先读取debian.master目录下的配置,而不是Makefile里的localversion,所以直接改这个配置最稳妥:
- 进入你的内核源码根目录,打开架构对应的定义文件:
nano debian.master/config/defines - 找到和你编译目标匹配的段(比如你用的是
generic内核,找[base]或者对应架构的[amd64]段),找到localversion字段,修改成你想要的后缀,比如:
(注意前面的横杠,这样最终内核版本会是localversion=-test15.15.0-113-test1-generic,完美区分原内核) - 保存退出后,重新执行编译命令:
fakeroot debian/rules binary-generic
方法二:用环境变量临时指定(单次生效)
如果不想修改全局配置,只想这次编译加后缀,直接在编译命令前加LOCALVERSION环境变量就行:
LOCALVERSION=-test1 fakeroot debian/rules binary-generic
这种方式只会影响当前编译任务,下次编译如果不加这个变量就会回到默认配置,适合临时测试不同后缀的场景。
验证是否生效
编译完成后,先检查生成的deb包,应该能看到类似linux-image-5.15.0-113-test1-generic_*.deb的文件名;安装完成后重启系统,执行uname -r,输出的版本号应该带上了-test1后缀,这样就不会和原来的5.15.0-113-generic内核冲突了。
敲黑板注意下:后缀尽量只用字母、数字和横杠,别用加号或者其他特殊字符,避免打包过程中出现版本解析错误。
备注:内容来源于stack exchange,提问作者mpboden
相关产品推荐
相关产品推荐

