「龙蜥开发者说」第 20 期来了!开发者与开源社区相辅相成,相互成就,这些个人在龙蜥社区的使用心得、实践总结和技术成长经历都是宝贵的,我们希望在这里让更多人看见技术的力量。本期故事,我们邀请了龙蜥社区开发者任博来分享「构建软件包?不,是构建开源每一个角落」。
欢迎阅读上期故事《亲历从基础设施构建到系统质量保障,龙蜥未来可期》。开发者说系长期活动,对于积极投稿、多次分享的童鞋,我们还有神秘大礼鼓励!诚邀开发者们分享真实体验,以文会友、共同学习、一起进步。
本期故事主角:任博,龙蜥社区产品发布 SIG Contributor,2022 龙蜥社区年度优秀贡献奖-代码之星获得者!杭州博彦信息技术有限公司测试开发工程师,主要参与产品发布 SIG,负责发行版软件包打包及相关工具开发。
自 2021 年 9 月左右加入龙蜥社区后,我就一直在产品发布小组负责软件包构建和一些工具的开发维护工作。截至目前,我不仅参与了龙蜥操作系统版本从 Anolis 8.4 到 Anolis 8.8 的发布、维护,龙芯 LoongArch 架构软件包的构建,也参与建设了像龙蜥钉钉群里答疑机器人“龙蜥小二“这样的项目。参与建设龙蜥一年多的时间以来,我深深的感觉到社区项目没有大小之分,每个工作都有它的意义所在。
还记得我刚加入社区的时候,正值 Anolis 8.4 软件包的构建。当时因为还处于“新手阶段”,于是先被分配了几个软件包练手。虽然一度的结果是分配给我的构建问题往往很长时间都得不到解决,对于个人的信心建立很不友好,但非常感谢当时小组成员对我的包容和自己一直的坚持,我想没有这些我很难走到今天。一人行快,众人行远!龙蜥社区近两年的发展越来越壮大,参与到社区的小伙伴也会愈发多。在这样一个开放、包容的社区中,相信大家也会和社区一起成长。
在这里分享一个我使用 koji 的小收获,也希望这个小收获可以帮助到一些小伙伴。我觉得 koji 的 tag 和继承是很神奇的设计,使用 koji 每次触发构建时会根据构建时选择的 tag 生成一份 mock 的配置,因为这个 tag 和它继承的 tag 下 build 是变化的,所以每次生成的这份 mock 配置也可能是不一样的。我们在构建过程中会碰到各种依赖问题,通过 tag 的继承优先级可以为每个包找到依赖包和合适的版本,包括 module 包的构建,即 MBS (Module Build Service),继承也在其中起着很重要的作用。module 包构建时会为一组软件包统一建立 target ,在构建时可以基于此 target 来影响 module 构建过程中的依赖关系。在我刚开始的工作中,对 tag 的继承有很多疑问,也请教了我身边的小伙伴,慢慢的在解决构建依赖的途中对它有了更深的理解。
我在工作中也遇到了其他有趣的问题,在解释小版本升级和无感升级时,对于系统中 /etc/yum.repos.d/AnolisOS-BaseOS.repo 文件中 $releasever 的值由什么决定产生了疑问。如下:
(图/ Anolis OS-BaseOS.repo 内容 )
在搜索了各种答案后,发现网上大家对于 $releasever 值的解释都不太一样,后来就自己看代码摸索了下 yum 是怎么获取这个值的。最终发现,它的取值跟 system-release(releasever) 等变量的值有关,接着我通过 yum provides ‘system-release(releasever)’ 的返回结果,发现在 anolis-release 这个包中 provides 了该变量,如图:
(图/system-release(releasever) 查询结果)
(图/ anolis-release.spec)
为了验证,我尝试修改 spec 文件中 system-release(releasever) 的值,通过 mock 构建出 rpm 包安装到系统中,测试发现 $releasever 变成了我修改的值,从而验证了自己的结论。虽然是个很小的问题,但是记得当时验证成功后感觉很兴奋。当然以上是我的个人结论,事实也有可能跟我想的不一样,如果有技术同学有不同的意见或建议,也欢迎加入龙蜥社区,和共同热爱开源的小伙伴们一起讨论交流。
在参与软件包构建工作中,我遇到了各种大大小小的问题,好奇心驱使着我去思考和解决问题,当然傻瓜式不放弃地去追究一个问题也不好。社区中也有很多令人崇拜的“大神”,遇到自己解决不了的问题或者不懂的地方,也可以向他们请教。在参与社区工作这个过程中,我遇到了很多未曾接触的技术栈和知识,同时自己也获得了成长和乐趣,这段经历对我来说也意义深刻。过去的一年中,我也获得了 “ 2022 龙蜥社区年度优秀贡献奖-代码之星”奖项。热爱可抵岁月漫长!这份荣誉对我来说只是起点,而我将继续带着这份热爱,投身到开源的每个角落。
开源就像是一张无形的大网,将整个互联网都联系了起来,每位开发者都会在这张网上编织属于自己的独家符号。在未来的某一天,你编织的这份独家符号,也将会帮助千千万万个同样热爱开源的“你”,因为这些独有的符号也会奏出最美的音响,传承万年。希望未来能有更多的人加入开源世界,加入龙蜥,让我们一起打造面向云时代的操作系统。
相关链接地址:
产品发布 SIG 主页:https://openanolis.cn/sig/SIG-Distro
—— 完 ——