[OBS 求助 ] 使用 obs 编译内核如何修改内核的 config 参数

如题,本人菜鸟一枚,看了学姐的 obs 文章,仍然觉得一头雾水,感觉无从下手的样子,好在 obs 有网页版,直接在网页上操作,摸索了好一阵,branch 了好几个 project,也成功编译出自己想要的包了,然后就想挑战下用 obs 编译内核(因为发现了 cjktty 这个项目,之前都是手动下载源码本地编译的),于是 branch 了一个 kernel:stable project,从 3.9.x 到现在的 3.10,自己摸索了好多回,发现把补丁放在 patches.addon.tar.bz2 里面比较方便,但是 config.addon.tar.bz2 这个不知道要以什么格式添加上去(只能手动下载 config.tar.bz2 这个压缩包,修改后再上传),我看到那个 config.tar.bz2 里面的 config 文件是自动生成的,那应该修改哪个脚本,才能达到修改 config 里面的参数呢?

  1. patches.addon.tar.bz2 理论上不是给你用的。是给 openSUSE 的内核开发者用的。里面是 openSUSE 官方的补丁集。外来的补丁不应该直接放到官方的补丁集里去,而应该发送到 opensuse-kernel#opensuse.org 邮件列表经内核开发人员审议吸收后,由内核开发人员来更新这个压缩包。但请注意,你这个 cjktty 已经被 LKML 放空过一回了,按照我们 upstream first 的原则,我们应该也不会收。你的情况理论上其实你别无选择,只能把这个补丁单列出来。

  2. config.tar.bz2 是内核 make menuconfig 时「自动生成」的配置集。你本地配置的内核也有,叫做 .config。里面是 openSUSE 的官方内核配置。简单说,是本地配置完放进去的。要想基于它的改,可以在 menuconfig 的时候使用 load 功能。

  3. 最好不要自己编译内核。

3.1) vanilla 内核和 openSUSE 的兼容性不是很好(openSUSE 的一些专有软件是依赖我们自己的内核的,比如 Apparmor),也没有 openSUSE 默认内核优越(我们的 fix 多一些,业内都知道 SuSE 内核最强)。甚至在某些极特殊情况下,你自己编译的内核你自己的计算机都用不了(比如 UEFI 和 Secure Boot,官方内核是有微软认证签名的,你的没有)。

如果有不得不编的苦衷的话,建议在本地编译基于 openSUSE 默认内核修改的内核(不会影响你学习,因为在本地你依然还是使用这些文件)。因为内核配置是根据计算机来的,你好不容易编译一回内核,能忍住不针对自己优化只打开补丁所需的选项就上传吗?不太可能,但那样的话,这个内核除了相同型号的计算机(几乎就是你自己),别人谁也用不了,传上去其实是个废包。

3.2)个人不建议用 OBS 编译内核。那样对服务器资源是极大的浪费,实际是浪费所有人的编译时间来方便自己,对 openSUSE 项目几乎没有好处(除非你是我们项目的内核开发者,或者你这个补丁已经被我们收录了,但那样也不用你来编译了)。

比如你的这 14 个包里,里面至少八九个包甚至你本人都根本不会用(某一 ARM 制造商的某一个特定产品甚至是用户不可能拥有的 IBM 特殊架构服务器的专用内核)。每个包的每个编译对象都要独立使用一个编译虚拟机(我们只有 45 个)一个小时以上的时间,这里就浪费了一个工作日。考虑到集中在某个时间段开始的情况,可以说你让大家整整一个小时都什么干不了。而且你只用一次,我如果没说,那个 sub-project 你肯定不会删的,不用了也放在那里,于是每次内核有更新就要在你这里浪费服务器一天,一年至少浪费一周(实际上正规的内核发布就不止 7 次,加上我们内核开发者的 commit,浪费 1 个月还是比较客观的)。

而且这个补丁是个比较老的游离在外的内核补丁,作者就是我们 Gtalk 群里的 microcai。现在除了你几乎没人会用(实际上一般人一年也不进 tty 两回,这两回里也不会去 tty 使用中文文件),gentoo-zh 会用但人家浪费的是自己的 CPU 和电啊。所以在 OBS 编译比起在本地编译来整个项目层面说是弊大于利的。其实即使你学会使用 OBS 编译内核有什么用呢,能成为内核开发者吗,不太可能 ; 还是每次浪费属于大家的服务器资源方便自己吧。

实际上在 OBS 的 search 里搜下 Kernel:stable 你就知道了,没有什么人去 branch 整个 kernel 树就为方便自己一个人的,因为那太自私了。基本上 OBS 用户都知道方便自己的时候也要给别人甚至是整个项目留条活路… 利用 OBS 管理层没有规定「浪费服务器资源的软件包非官方人员不可编译」的漏洞玩「君子可欺之以方」的还是少数。那个搜索里面的第一条返回结果就是个钉子户,openSUSE_user1 几乎 fork 了 OBS 所有的官方软件包,不做修改的重编,每次要删除它的源的时候它就利用那条规则耍赖 ; 还有其它发行版用户利用我们这条漏洞来浪费属于我们社区的资源来给他一个人编译 firefox/chromium 这种包的。作为一个 openSUSE 用户,你愿意和这种人为伍么?

所以自己权衡下吧,个人建议还是别折腾让大家都跟着受累了。

如果一定要偷偷占点小便宜什么的话,建议看下我的这个源(我也是坏蛋…):

build.opensuse.org/project/show/home%3AMargueriteSu%3Akernel

精简一下软件包。并且在不用的时候 disable 掉。新版内核发布时再打开(手动 tracing)。这样基本一次就占用两个小时服务器资源,不算公害 :slight_smile:

哎呦,一不小心浪费了这么多资源哪,其实主要还是想用 obs 来偷懒,每次更新内核都得重新编译,比较麻烦,不过学姐既然建议了,我就把 kernel:stable 的 branch 删除了,感觉还是本地编译简单点,obs 上编译很容易出错,另外在学姐的 project 上发现了 uksm,正在努力把它搬到 3.10.1 上来…